22import { args , HELP } from './lib/args.mjs'
33import { out , fail } from './lib/output.mjs'
44import { plan } from './lib/plan.mjs'
5- import { root , repo } from './lib/git.mjs'
6- import { brief , write , tasks } from './lib/brief.mjs'
5+ import { root } from './lib/git.mjs'
6+ import { brief , write } from './lib/brief.mjs'
77import { confirm , name } from './lib/input.mjs'
8- import { pr } from './lib/github .mjs'
8+ import { err } from './lib/errors .mjs'
99import * as branch from './lib/domains/branch.mjs'
1010import * as sync from './lib/domains/sync.mjs'
1111import * as review from './lib/domains/review.mjs'
@@ -20,26 +20,32 @@ import * as task from './lib/domains/task.mjs'
2020import * as inspect from './lib/domains/inspect.mjs'
2121import * as index from './lib/domains/index.mjs'
2222
23- const DOMAINS = { branch, sync, review, commit, publish, release, reconcile, archive, issue }
23+ const DOMAINS = { branch, sync, review, commit, publish, release, reconcile, archive, issue, index }
2424
25- // execute 与 plan 用同一 planData 重算并对比 hash,brief 里的 planHash 是 execute 的前置凭证
26- async function executeDomain ( d , r , o ) {
25+ // execute 与 plan 用同一 planData 重算并对比 hash。带 --name 的域以 brief 里的 planHash 为前置凭证;
26+ // 无 brief 的域(如 index rebuild)--plan-hash 是唯一凭证
27+ async function executeDomain ( c , mod , r , o ) {
2728 confirm ( o )
28- const mod = DOMAINS [ d ]
29- const e = plan ( d , await mod . planData ( r , o ) )
30- if ( o [ 'plan-hash' ] && o [ 'plan-hash' ] !== e . planHash ) throw Error ( 'PLAN_HASH_INVALID' )
31- const n = name ( o ) , b = brief ( r , n ) , x = e . data
32- if ( b . data . workflow . planHash !== e . planHash ) throw Object . assign ( Error ( b . data . workflow . planHash ? 'PLAN_HASH_INVALID' : 'PLAN_HASH_REQUIRED' ) , { status : b . data . workflow . planHash ? 1 : 2 } )
33- return mod . execute ( r , o , x , b )
29+ const e = plan ( c , await mod . planData ( r , o ) )
30+ if ( o [ 'plan-hash' ] && o [ 'plan-hash' ] !== e . planHash ) throw err ( 'PLAN_HASH_INVALID' )
31+ if ( ! o . name ) {
32+ if ( ! o [ 'plan-hash' ] ) throw err ( 'PLAN_HASH_REQUIRED' , 'PLAN_HASH_REQUIRED' , 2 )
33+ return mod . execute ( r , o , e . data )
34+ }
35+ const b = brief ( r , name ( o ) )
36+ if ( b . data . workflow . planHash !== e . planHash ) {
37+ const code = b . data . workflow . planHash ? 'PLAN_HASH_INVALID' : 'PLAN_HASH_REQUIRED'
38+ throw err ( code , code , b . data . workflow . planHash ? 1 : 2 )
39+ }
40+ return mod . execute ( r , o , e . data , b )
3441}
3542
36- async function planDomain ( d , r , o ) {
37- const mod = DOMAINS [ d ]
38- const e = plan ( d , await mod . planData ( r , o ) )
43+ async function planDomain ( c , mod , r , o ) {
44+ const e = plan ( c , await mod . planData ( r , o ) )
45+ if ( ! o . name ) return e
3946 const b = brief ( r , name ( o ) )
4047 b . data . workflow . planHash = e . planHash
41- if ( d === 'release' ) b . data . workflow . release = { files : e . data . files , message : e . data . message , title : e . data . title , body : e . data . body }
42- if ( d === 'issue' ) b . data . workflow . issuePlan = { title : e . data . title , body : e . data . body , labels : e . data . labels }
48+ mod . persistPlan ?. ( b , e )
4349 write ( b )
4450 return e
4551}
@@ -54,10 +60,11 @@ async function handle(r, p, o) {
5460 if ( d === 'task' && a === 'set' ) return out ( { ok : true , command : 'task.set' , data : task . set ( r , o ) } )
5561 if ( d === 'change' && a === 'create' ) return out ( { ok : true , command : 'change.create' , data : change . create ( r , o ) } )
5662 if ( d === 'change' && a === 'approve' ) return out ( { ok : true , command : 'change.approve' , data : change . approve ( r , o ) } )
57- if ( d === 'index' && a === 'rebuild' && s === 'plan' ) return out ( index . rebuildPlan ( r ) )
58- if ( d === 'index' && a === 'rebuild' && s === 'execute' ) return out ( { ok : true , command : 'index.rebuild.execute' , data : index . rebuildExecute ( r , o ) } )
59- if ( Object . hasOwn ( DOMAINS , d ) && a === 'plan' ) return out ( await planDomain ( d , r , o ) )
60- if ( Object . hasOwn ( DOMAINS , d ) && a === 'execute' ) return out ( { ok : true , command : `${ d } .execute` , data : await executeDomain ( d , r , o ) } )
63+ if ( Object . hasOwn ( DOMAINS , d ) ) {
64+ const verb = a === 'rebuild' ? s : a , c = a === 'rebuild' ? `${ d } .rebuild` : d
65+ if ( verb === 'plan' ) return out ( await planDomain ( c , DOMAINS [ d ] , r , o ) )
66+ if ( verb === 'execute' ) return out ( { ok : true , command : `${ c } .execute` , data : await executeDomain ( c , DOMAINS [ d ] , r , o ) } )
67+ }
6168 return fail ( 'UNKNOWN_COMMAND' , `unsupported command: ${ p . join ( ' ' ) } ` )
6269}
6370
0 commit comments