@orchestrator-claude/cli 3.3.16 → 3.3.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api-client/types.d.ts +60 -0
- package/dist/api-client/types.d.ts.map +1 -1
- package/dist/commands/SyncCommand.d.ts +7 -5
- package/dist/commands/SyncCommand.d.ts.map +1 -1
- package/dist/commands/SyncCommand.js +58 -15
- package/dist/commands/SyncCommand.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/parsers/DefinitionFileParser.d.ts +30 -0
- package/dist/parsers/DefinitionFileParser.d.ts.map +1 -0
- package/dist/parsers/DefinitionFileParser.js +230 -0
- package/dist/parsers/DefinitionFileParser.js.map +1 -0
- package/dist/writers/DefinitionFileWriter.d.ts +28 -0
- package/dist/writers/DefinitionFileWriter.d.ts.map +1 -0
- package/dist/writers/DefinitionFileWriter.js +49 -0
- package/dist/writers/DefinitionFileWriter.js.map +1 -0
- package/package.json +1 -1
|
@@ -346,6 +346,8 @@ export interface SyncCounters {
|
|
|
346
346
|
export interface SyncDefinitionsRequest {
|
|
347
347
|
fromFiles?: boolean;
|
|
348
348
|
dryRun?: boolean;
|
|
349
|
+
responseMode?: 'filesystem' | 'payload';
|
|
350
|
+
definitions?: DefinitionsPayload;
|
|
349
351
|
}
|
|
350
352
|
/**
|
|
351
353
|
* Sync definitions response (TD-044 Sprint 3)
|
|
@@ -363,6 +365,64 @@ export interface SyncDefinitionsResponse {
|
|
|
363
365
|
error: string;
|
|
364
366
|
}[];
|
|
365
367
|
dryRun: boolean;
|
|
368
|
+
files?: SyncFilePayload[];
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* Parsed agent payload for sync API
|
|
372
|
+
*/
|
|
373
|
+
export interface ParsedAgentPayload {
|
|
374
|
+
slug: string;
|
|
375
|
+
name: string;
|
|
376
|
+
description: string;
|
|
377
|
+
tools: string[];
|
|
378
|
+
content: string;
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Parsed workflow payload for sync API
|
|
382
|
+
*/
|
|
383
|
+
export interface ParsedWorkflowPayload {
|
|
384
|
+
slug: string;
|
|
385
|
+
type: string;
|
|
386
|
+
displayName: string;
|
|
387
|
+
description: string;
|
|
388
|
+
version: string;
|
|
389
|
+
phases: string[];
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* Parsed skill payload for sync API
|
|
393
|
+
*/
|
|
394
|
+
export interface ParsedSkillPayload {
|
|
395
|
+
slug: string;
|
|
396
|
+
name: string;
|
|
397
|
+
description: string;
|
|
398
|
+
pattern?: string;
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* Parsed hook payload for sync API
|
|
402
|
+
*/
|
|
403
|
+
export interface ParsedHookPayload {
|
|
404
|
+
slug: string;
|
|
405
|
+
name: string;
|
|
406
|
+
description: string;
|
|
407
|
+
hookType: 'pre' | 'post';
|
|
408
|
+
triggerPhase: string;
|
|
409
|
+
}
|
|
410
|
+
/**
|
|
411
|
+
* Combined definitions payload for sync API
|
|
412
|
+
*/
|
|
413
|
+
export interface DefinitionsPayload {
|
|
414
|
+
agents?: ParsedAgentPayload[];
|
|
415
|
+
workflows?: ParsedWorkflowPayload[];
|
|
416
|
+
skills?: ParsedSkillPayload[];
|
|
417
|
+
hooks?: ParsedHookPayload[];
|
|
418
|
+
}
|
|
419
|
+
/**
|
|
420
|
+
* Sync file payload (DB→files response)
|
|
421
|
+
*/
|
|
422
|
+
export interface SyncFilePayload {
|
|
423
|
+
path: string;
|
|
424
|
+
content: string;
|
|
425
|
+
type: 'agent' | 'workflow' | 'skill' | 'hook';
|
|
366
426
|
}
|
|
367
427
|
/**
|
|
368
428
|
* Individual verification check result (RFC-015 Phase 5)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/api-client/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/api-client/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,qBAAqB,GAAG,SAAS,GAAG,aAAa,GAAG,iBAAiB,CAAC;IACrF,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,gBAAgB,GAAG,mBAAmB,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IACpF,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,WAAW,CAAC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,qBAAqB,GAAG,SAAS,GAAG,aAAa,GAAG,iBAAiB,CAAC;IACpF,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,OAAO,CAAC;KACrB,CAAC,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;oFACgF;IAChF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC3C;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IACxC,WAAW,CAAC,EAAE,kBAAkB,CAAC;CAClC;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,UAAU,GAAG,YAAY,CAAC;IACrC,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,YAAY,CAAC;IACxB,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1C,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,eAAe,EAAE,CAAC;CAC3B;AAID;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,KAAK,GAAG,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC9B,SAAS,CAAC,EAAE,qBAAqB,EAAE,CAAC;IACpC,MAAM,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC9B,KAAK,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC;CAC/C;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* SyncCommand
|
|
3
3
|
*
|
|
4
|
-
* CLI command to perform bidirectional sync between
|
|
4
|
+
* CLI command to perform bidirectional sync between local .claude/ files
|
|
5
5
|
* and PostgreSQL definition tables via the POST /api/v1/projects/sync endpoint.
|
|
6
6
|
*
|
|
7
|
+
* Uses payload mode (TD-074): CLI reads/writes local files, server only
|
|
8
|
+
* interacts with the database. No server filesystem access needed.
|
|
9
|
+
*
|
|
7
10
|
* Two flows:
|
|
8
|
-
* Default (--from-files not set): DB →
|
|
9
|
-
* With --from-files flag:
|
|
11
|
+
* Default (--from-files not set): DB → local files (Flow 3)
|
|
12
|
+
* With --from-files flag: local files → DB (Flow 4)
|
|
10
13
|
*
|
|
11
14
|
* @module commands
|
|
12
15
|
*/
|
|
@@ -42,8 +45,7 @@ export interface SyncResult {
|
|
|
42
45
|
/**
|
|
43
46
|
* SyncCommand
|
|
44
47
|
*
|
|
45
|
-
* Calls the sync endpoint and formats the resulting report.
|
|
46
|
-
* Follows the same pattern as SeedCommand.
|
|
48
|
+
* Calls the sync endpoint using payload mode and formats the resulting report.
|
|
47
49
|
*/
|
|
48
50
|
export declare class SyncCommand {
|
|
49
51
|
private readonly apiClient;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SyncCommand.d.ts","sourceRoot":"","sources":["../../src/commands/SyncCommand.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"SyncCommand.d.ts","sourceRoot":"","sources":["../../src/commands/SyncCommand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAC/E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAKtE;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,uBAAuB,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAE,qBAAqB;IAE7D;;;;;OAKG;IACG,OAAO,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;IAgG7D;;;;;;OAMG;IACH,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,MAAM;CAiD/D"}
|
|
@@ -1,21 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* SyncCommand
|
|
3
3
|
*
|
|
4
|
-
* CLI command to perform bidirectional sync between
|
|
4
|
+
* CLI command to perform bidirectional sync between local .claude/ files
|
|
5
5
|
* and PostgreSQL definition tables via the POST /api/v1/projects/sync endpoint.
|
|
6
6
|
*
|
|
7
|
+
* Uses payload mode (TD-074): CLI reads/writes local files, server only
|
|
8
|
+
* interacts with the database. No server filesystem access needed.
|
|
9
|
+
*
|
|
7
10
|
* Two flows:
|
|
8
|
-
* Default (--from-files not set): DB →
|
|
9
|
-
* With --from-files flag:
|
|
11
|
+
* Default (--from-files not set): DB → local files (Flow 3)
|
|
12
|
+
* With --from-files flag: local files → DB (Flow 4)
|
|
10
13
|
*
|
|
11
14
|
* @module commands
|
|
12
15
|
*/
|
|
13
16
|
import { loadEnvFile } from '../utils/env-loader.js';
|
|
17
|
+
import { DefinitionFileParser } from '../parsers/DefinitionFileParser.js';
|
|
18
|
+
import { DefinitionFileWriter } from '../writers/DefinitionFileWriter.js';
|
|
14
19
|
/**
|
|
15
20
|
* SyncCommand
|
|
16
21
|
*
|
|
17
|
-
* Calls the sync endpoint and formats the resulting report.
|
|
18
|
-
* Follows the same pattern as SeedCommand.
|
|
22
|
+
* Calls the sync endpoint using payload mode and formats the resulting report.
|
|
19
23
|
*/
|
|
20
24
|
export class SyncCommand {
|
|
21
25
|
apiClient;
|
|
@@ -55,16 +59,55 @@ export class SyncCommand {
|
|
|
55
59
|
};
|
|
56
60
|
}
|
|
57
61
|
try {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
: '
|
|
66
|
-
|
|
67
|
-
|
|
62
|
+
if (fromFiles) {
|
|
63
|
+
// Flow 4: local files → DB (payload mode)
|
|
64
|
+
const parser = new DefinitionFileParser(process.cwd());
|
|
65
|
+
const definitions = await parser.parseAll();
|
|
66
|
+
const report = await this.apiClient.syncDefinitions({
|
|
67
|
+
fromFiles: true,
|
|
68
|
+
dryRun,
|
|
69
|
+
responseMode: 'payload',
|
|
70
|
+
definitions,
|
|
71
|
+
});
|
|
72
|
+
const dryRunSuffix = report.dryRun ? ' (dry run)' : '';
|
|
73
|
+
return {
|
|
74
|
+
success: report.success,
|
|
75
|
+
message: report.success
|
|
76
|
+
? `Sync complete: filesystem → DB${dryRunSuffix}`
|
|
77
|
+
: 'Sync completed with errors',
|
|
78
|
+
report,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
// Flow 3: DB → local files (payload mode)
|
|
83
|
+
const report = await this.apiClient.syncDefinitions({
|
|
84
|
+
fromFiles: false,
|
|
85
|
+
dryRun,
|
|
86
|
+
responseMode: 'payload',
|
|
87
|
+
});
|
|
88
|
+
// Write received files to local project directory
|
|
89
|
+
if (report.files && report.files.length > 0 && !dryRun) {
|
|
90
|
+
const writer = new DefinitionFileWriter(process.cwd());
|
|
91
|
+
const writeResult = await writer.writeAll(report.files);
|
|
92
|
+
if (writeResult.errors.length > 0) {
|
|
93
|
+
return {
|
|
94
|
+
success: false,
|
|
95
|
+
message: `Sync received ${report.files.length} files but ${writeResult.errors.length} failed to write`,
|
|
96
|
+
report,
|
|
97
|
+
error: writeResult.errors.join('; '),
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
const dryRunSuffix = report.dryRun ? ' (dry run)' : '';
|
|
102
|
+
const fileCount = report.files?.length ?? 0;
|
|
103
|
+
return {
|
|
104
|
+
success: report.success,
|
|
105
|
+
message: report.success
|
|
106
|
+
? `Sync complete: DB → filesystem (${fileCount} files)${dryRunSuffix}`
|
|
107
|
+
: 'Sync completed with errors',
|
|
108
|
+
report,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
68
111
|
}
|
|
69
112
|
catch (error) {
|
|
70
113
|
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SyncCommand.js","sourceRoot":"","sources":["../../src/commands/SyncCommand.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"SyncCommand.js","sourceRoot":"","sources":["../../src/commands/SyncCommand.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DefinitionFileParser
|
|
3
|
+
*
|
|
4
|
+
* Reads the user's local .claude/ directory and parses definition files
|
|
5
|
+
* into payload structures for the sync API (TD-074).
|
|
6
|
+
*
|
|
7
|
+
* Parsing logic mirrors SeedDefinitionsService's private parse methods:
|
|
8
|
+
* - Agents: *.md files — H1 for name, first paragraph for description, ## Tools section
|
|
9
|
+
* - Workflows: *.json files — name/displayName/description/version/phases
|
|
10
|
+
* - Skills: SKILL.md in subdirs — name from H1, description from body
|
|
11
|
+
* - Hooks: *.sh files — classify by pre-/post- prefix
|
|
12
|
+
*
|
|
13
|
+
* Gracefully handles missing directories (returns empty arrays).
|
|
14
|
+
*
|
|
15
|
+
* @module parsers
|
|
16
|
+
*/
|
|
17
|
+
import type { DefinitionsPayload } from '../api-client/types.js';
|
|
18
|
+
export declare class DefinitionFileParser {
|
|
19
|
+
private readonly projectDir;
|
|
20
|
+
constructor(projectDir: string);
|
|
21
|
+
/**
|
|
22
|
+
* Parse all definition files from .claude/ directory.
|
|
23
|
+
*/
|
|
24
|
+
parseAll(): Promise<DefinitionsPayload>;
|
|
25
|
+
private parseAgents;
|
|
26
|
+
private parseWorkflows;
|
|
27
|
+
private parseSkills;
|
|
28
|
+
private parseHooks;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=DefinitionFileParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DefinitionFileParser.d.ts","sourceRoot":"","sources":["../../src/parsers/DefinitionFileParser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,KAAK,EAKV,kBAAkB,EACnB,MAAM,wBAAwB,CAAC;AAEhC,qBAAa,oBAAoB;IACnB,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,MAAM;IAE/C;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,kBAAkB,CAAC;YAa/B,WAAW;YAiEX,cAAc;YAyDd,WAAW;YAyCX,UAAU;CAmDzB"}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DefinitionFileParser
|
|
3
|
+
*
|
|
4
|
+
* Reads the user's local .claude/ directory and parses definition files
|
|
5
|
+
* into payload structures for the sync API (TD-074).
|
|
6
|
+
*
|
|
7
|
+
* Parsing logic mirrors SeedDefinitionsService's private parse methods:
|
|
8
|
+
* - Agents: *.md files — H1 for name, first paragraph for description, ## Tools section
|
|
9
|
+
* - Workflows: *.json files — name/displayName/description/version/phases
|
|
10
|
+
* - Skills: SKILL.md in subdirs — name from H1, description from body
|
|
11
|
+
* - Hooks: *.sh files — classify by pre-/post- prefix
|
|
12
|
+
*
|
|
13
|
+
* Gracefully handles missing directories (returns empty arrays).
|
|
14
|
+
*
|
|
15
|
+
* @module parsers
|
|
16
|
+
*/
|
|
17
|
+
import { readdir, readFile } from 'node:fs/promises';
|
|
18
|
+
import { join, basename, extname } from 'node:path';
|
|
19
|
+
export class DefinitionFileParser {
|
|
20
|
+
projectDir;
|
|
21
|
+
constructor(projectDir) {
|
|
22
|
+
this.projectDir = projectDir;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Parse all definition files from .claude/ directory.
|
|
26
|
+
*/
|
|
27
|
+
async parseAll() {
|
|
28
|
+
const claudeDir = join(this.projectDir, '.claude');
|
|
29
|
+
const [agents, workflows, skills, hooks] = await Promise.all([
|
|
30
|
+
this.parseAgents(join(claudeDir, 'agents')),
|
|
31
|
+
this.parseWorkflows(join(claudeDir, 'workflows')),
|
|
32
|
+
this.parseSkills(join(claudeDir, 'skills')),
|
|
33
|
+
this.parseHooks(join(claudeDir, 'hooks')),
|
|
34
|
+
]);
|
|
35
|
+
return { agents, workflows, skills, hooks };
|
|
36
|
+
}
|
|
37
|
+
async parseAgents(dir) {
|
|
38
|
+
let files;
|
|
39
|
+
try {
|
|
40
|
+
files = await readdir(dir);
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return [];
|
|
44
|
+
}
|
|
45
|
+
const results = [];
|
|
46
|
+
const mdFiles = files.filter((f) => extname(f) === '.md');
|
|
47
|
+
for (const file of mdFiles) {
|
|
48
|
+
try {
|
|
49
|
+
const content = await readFile(join(dir, file), 'utf-8');
|
|
50
|
+
const slug = basename(file, '.md');
|
|
51
|
+
let name = slug;
|
|
52
|
+
let description = '';
|
|
53
|
+
let tools = [];
|
|
54
|
+
// Extract frontmatter YAML
|
|
55
|
+
const frontmatterMatch = /^---\n([\s\S]*?)\n---/.exec(content);
|
|
56
|
+
const frontmatter = frontmatterMatch?.[1] ?? '';
|
|
57
|
+
if (frontmatter.length > 0) {
|
|
58
|
+
const nameMatch = /^name:\s*(.+)$/m.exec(frontmatter);
|
|
59
|
+
if (nameMatch?.[1])
|
|
60
|
+
name = nameMatch[1].trim();
|
|
61
|
+
const descMatch = /^description:\s*(.+)$/m.exec(frontmatter);
|
|
62
|
+
if (descMatch?.[1])
|
|
63
|
+
description = descMatch[1].trim();
|
|
64
|
+
const toolsMatch = /^tools:\s*(.+)$/m.exec(frontmatter);
|
|
65
|
+
if (toolsMatch?.[1]) {
|
|
66
|
+
tools = toolsMatch[1].split(',').map((t) => t.trim()).filter((t) => t.length > 0);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Fallback: H1 for name
|
|
70
|
+
if (name === slug) {
|
|
71
|
+
const h1Match = /^#\s+(.+)$/m.exec(content);
|
|
72
|
+
if (h1Match?.[1])
|
|
73
|
+
name = h1Match[1].trim();
|
|
74
|
+
}
|
|
75
|
+
// Fallback: first paragraph for description
|
|
76
|
+
if (description.length === 0) {
|
|
77
|
+
const bodyContent = content.replace(/^---[\s\S]*?---\n/, '');
|
|
78
|
+
const paragraphs = bodyContent.split(/\n\n+/);
|
|
79
|
+
for (const para of paragraphs) {
|
|
80
|
+
const cleaned = para.replace(/^#+\s+.*$/m, '').trim();
|
|
81
|
+
if (cleaned.length > 0 && !cleaned.startsWith('#')) {
|
|
82
|
+
description = cleaned.replace(/\n/g, ' ').slice(0, 200);
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
results.push({ slug, name, description, tools, content });
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
// Skip files that can't be read
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return results;
|
|
94
|
+
}
|
|
95
|
+
async parseWorkflows(dir) {
|
|
96
|
+
let files;
|
|
97
|
+
try {
|
|
98
|
+
files = await readdir(dir);
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
return [];
|
|
102
|
+
}
|
|
103
|
+
const results = [];
|
|
104
|
+
const jsonFiles = files.filter((f) => extname(f) === '.json');
|
|
105
|
+
for (const file of jsonFiles) {
|
|
106
|
+
try {
|
|
107
|
+
const content = await readFile(join(dir, file), 'utf-8');
|
|
108
|
+
const json = JSON.parse(content);
|
|
109
|
+
const rawId = json.id;
|
|
110
|
+
const rawName = json.name;
|
|
111
|
+
const slug = typeof rawId === 'string' ? rawId
|
|
112
|
+
: typeof rawName === 'string' ? rawName
|
|
113
|
+
: basename(file, '.json');
|
|
114
|
+
const rawType = json.type;
|
|
115
|
+
const type = typeof rawType === 'string' ? rawType : slug.replace(/-/g, '_');
|
|
116
|
+
const rawDisplayName = json.displayName;
|
|
117
|
+
const displayName = typeof rawDisplayName === 'string' ? rawDisplayName
|
|
118
|
+
: typeof rawName === 'string' ? rawName : slug;
|
|
119
|
+
const rawDescription = json.description;
|
|
120
|
+
const description = typeof rawDescription === 'string' ? rawDescription : '';
|
|
121
|
+
const rawVersion = json.version;
|
|
122
|
+
const version = typeof rawVersion === 'string' ? rawVersion : '1.0.0';
|
|
123
|
+
const phasesRaw = json.phases;
|
|
124
|
+
const phases = [];
|
|
125
|
+
if (Array.isArray(phasesRaw)) {
|
|
126
|
+
for (const phase of phasesRaw) {
|
|
127
|
+
if (phase !== null && typeof phase === 'object' && 'name' in phase) {
|
|
128
|
+
const phaseName = phase.name;
|
|
129
|
+
if (typeof phaseName === 'string')
|
|
130
|
+
phases.push(phaseName);
|
|
131
|
+
}
|
|
132
|
+
else if (typeof phase === 'string') {
|
|
133
|
+
phases.push(phase);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
results.push({ slug, type, displayName, description, version, phases });
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
// Skip files that can't be parsed
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return results;
|
|
144
|
+
}
|
|
145
|
+
async parseSkills(dir) {
|
|
146
|
+
let entries;
|
|
147
|
+
try {
|
|
148
|
+
entries = await readdir(dir);
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
return [];
|
|
152
|
+
}
|
|
153
|
+
const results = [];
|
|
154
|
+
for (const entry of entries) {
|
|
155
|
+
try {
|
|
156
|
+
const skillMdPath = join(dir, entry, 'SKILL.md');
|
|
157
|
+
const content = await readFile(skillMdPath, 'utf-8');
|
|
158
|
+
let name = entry;
|
|
159
|
+
let description = '';
|
|
160
|
+
const h1Match = /^#\s+(.+)$/m.exec(content);
|
|
161
|
+
if (h1Match?.[1])
|
|
162
|
+
name = h1Match[1].trim();
|
|
163
|
+
// Description: first paragraph after H1
|
|
164
|
+
const bodyContent = content.replace(/^#\s+.*$/m, '');
|
|
165
|
+
const paragraphs = bodyContent.split(/\n\n+/);
|
|
166
|
+
for (const para of paragraphs) {
|
|
167
|
+
const cleaned = para.replace(/^#+\s+.*$/m, '').trim();
|
|
168
|
+
if (cleaned.length > 0 && !cleaned.startsWith('#')) {
|
|
169
|
+
description = cleaned.replace(/\n/g, ' ').slice(0, 200);
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
results.push({ slug: entry, name, description });
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
// Entry may not be a directory or SKILL.md may not exist
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return results;
|
|
180
|
+
}
|
|
181
|
+
async parseHooks(dir) {
|
|
182
|
+
let files;
|
|
183
|
+
try {
|
|
184
|
+
files = await readdir(dir);
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
return [];
|
|
188
|
+
}
|
|
189
|
+
const results = [];
|
|
190
|
+
const shFiles = files.filter((f) => extname(f) === '.sh');
|
|
191
|
+
for (const file of shFiles) {
|
|
192
|
+
try {
|
|
193
|
+
const content = await readFile(join(dir, file), 'utf-8');
|
|
194
|
+
const slug = basename(file, '.sh');
|
|
195
|
+
// Classify hook type by prefix
|
|
196
|
+
const hookType = slug.startsWith('pre-') ? 'pre' : 'post';
|
|
197
|
+
// Extract description from first comment line after shebang
|
|
198
|
+
let description = slug;
|
|
199
|
+
const lines = content.split('\n');
|
|
200
|
+
for (const line of lines) {
|
|
201
|
+
const trimmed = line.trim();
|
|
202
|
+
if (trimmed.startsWith('#!'))
|
|
203
|
+
continue;
|
|
204
|
+
if (trimmed.startsWith('# ')) {
|
|
205
|
+
description = trimmed.slice(2).trim();
|
|
206
|
+
break;
|
|
207
|
+
}
|
|
208
|
+
if (trimmed.length > 0 && !trimmed.startsWith('#'))
|
|
209
|
+
break;
|
|
210
|
+
}
|
|
211
|
+
// Extract trigger phase from slug
|
|
212
|
+
let triggerPhase = 'IMPLEMENT';
|
|
213
|
+
const phaseNames = ['research', 'specify', 'plan', 'tasks', 'implement', 'validate'];
|
|
214
|
+
const slugLower = slug.toLowerCase();
|
|
215
|
+
for (const phase of phaseNames) {
|
|
216
|
+
if (slugLower.includes(phase)) {
|
|
217
|
+
triggerPhase = phase.toUpperCase();
|
|
218
|
+
break;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
results.push({ slug, name: description, description, hookType, triggerPhase });
|
|
222
|
+
}
|
|
223
|
+
catch {
|
|
224
|
+
// Skip unreadable files
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
return results;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=DefinitionFileParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DefinitionFileParser.js","sourceRoot":"","sources":["../../src/parsers/DefinitionFileParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DefinitionFileWriter
|
|
3
|
+
*
|
|
4
|
+
* Writes definition files received from the sync API payload
|
|
5
|
+
* to the user's local project directory (TD-074).
|
|
6
|
+
*
|
|
7
|
+
* For each file: resolve path relative to projectDir, ensure parent
|
|
8
|
+
* directory exists, write content. Set executable on .sh files.
|
|
9
|
+
*
|
|
10
|
+
* @module writers
|
|
11
|
+
*/
|
|
12
|
+
import type { SyncFilePayload } from '../api-client/types.js';
|
|
13
|
+
export interface WriteResult {
|
|
14
|
+
readonly written: number;
|
|
15
|
+
readonly errors: string[];
|
|
16
|
+
}
|
|
17
|
+
export declare class DefinitionFileWriter {
|
|
18
|
+
private readonly projectDir;
|
|
19
|
+
constructor(projectDir: string);
|
|
20
|
+
/**
|
|
21
|
+
* Write all files to the project directory.
|
|
22
|
+
*
|
|
23
|
+
* @param files - Array of file payloads from sync API
|
|
24
|
+
* @returns Write result with count and any errors
|
|
25
|
+
*/
|
|
26
|
+
writeAll(files: SyncFilePayload[]): Promise<WriteResult>;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=DefinitionFileWriter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DefinitionFileWriter.d.ts","sourceRoot":"","sources":["../../src/writers/DefinitionFileWriter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,qBAAa,oBAAoB;IACnB,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,MAAM;IAE/C;;;;;OAKG;IACG,QAAQ,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;CA4B/D"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DefinitionFileWriter
|
|
3
|
+
*
|
|
4
|
+
* Writes definition files received from the sync API payload
|
|
5
|
+
* to the user's local project directory (TD-074).
|
|
6
|
+
*
|
|
7
|
+
* For each file: resolve path relative to projectDir, ensure parent
|
|
8
|
+
* directory exists, write content. Set executable on .sh files.
|
|
9
|
+
*
|
|
10
|
+
* @module writers
|
|
11
|
+
*/
|
|
12
|
+
import { writeFile, mkdir, chmod } from 'node:fs/promises';
|
|
13
|
+
import { join, dirname } from 'node:path';
|
|
14
|
+
export class DefinitionFileWriter {
|
|
15
|
+
projectDir;
|
|
16
|
+
constructor(projectDir) {
|
|
17
|
+
this.projectDir = projectDir;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Write all files to the project directory.
|
|
21
|
+
*
|
|
22
|
+
* @param files - Array of file payloads from sync API
|
|
23
|
+
* @returns Write result with count and any errors
|
|
24
|
+
*/
|
|
25
|
+
async writeAll(files) {
|
|
26
|
+
let written = 0;
|
|
27
|
+
const errors = [];
|
|
28
|
+
for (const file of files) {
|
|
29
|
+
try {
|
|
30
|
+
const fullPath = join(this.projectDir, file.path);
|
|
31
|
+
const dir = dirname(fullPath);
|
|
32
|
+
// Ensure parent directory exists
|
|
33
|
+
await mkdir(dir, { recursive: true });
|
|
34
|
+
// Write file content
|
|
35
|
+
await writeFile(fullPath, file.content, 'utf-8');
|
|
36
|
+
// Set executable permission on shell scripts
|
|
37
|
+
if (file.path.endsWith('.sh')) {
|
|
38
|
+
await chmod(fullPath, 0o755);
|
|
39
|
+
}
|
|
40
|
+
written++;
|
|
41
|
+
}
|
|
42
|
+
catch (cause) {
|
|
43
|
+
errors.push(`Failed to write ${file.path}: ${String(cause)}`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return { written, errors };
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=DefinitionFileWriter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DefinitionFileWriter.js","sourceRoot":"","sources":["../../src/writers/DefinitionFileWriter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQ1C,MAAM,OAAO,oBAAoB;IACF;IAA7B,YAA6B,UAAkB;QAAlB,eAAU,GAAV,UAAU,CAAQ;IAAG,CAAC;IAEnD;;;;;OAKG;IACH,KAAK,CAAC,QAAQ,CAAC,KAAwB;QACrC,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClD,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAE9B,iCAAiC;gBACjC,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAEtC,qBAAqB;gBACrB,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAEjD,6CAA6C;gBAC7C,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC9B,MAAM,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAC/B,CAAC;gBAED,OAAO,EAAE,CAAC;YACZ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAC7B,CAAC;CACF"}
|