specweave 0.23.8 → 0.23.12
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/.claude-plugin/marketplace.json +7 -7
- package/CLAUDE.md +391 -1338
- package/dist/src/cli/commands/cleanup-cache.d.ts +14 -0
- package/dist/src/cli/commands/cleanup-cache.d.ts.map +1 -0
- package/dist/src/cli/commands/cleanup-cache.js +63 -0
- package/dist/src/cli/commands/cleanup-cache.js.map +1 -0
- package/dist/src/cli/commands/init.js +40 -0
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/migrate-config.d.ts +22 -0
- package/dist/src/cli/commands/migrate-config.d.ts.map +1 -0
- package/dist/src/cli/commands/migrate-config.js +149 -0
- package/dist/src/cli/commands/migrate-config.js.map +1 -0
- package/dist/src/cli/helpers/async-project-loader.d.ts +148 -0
- package/dist/src/cli/helpers/async-project-loader.d.ts.map +1 -0
- package/dist/src/cli/helpers/async-project-loader.js +351 -0
- package/dist/src/cli/helpers/async-project-loader.js.map +1 -0
- package/dist/src/cli/helpers/cancelation-handler.d.ts +123 -0
- package/dist/src/cli/helpers/cancelation-handler.d.ts.map +1 -0
- package/dist/src/cli/helpers/cancelation-handler.js +187 -0
- package/dist/src/cli/helpers/cancelation-handler.js.map +1 -0
- package/dist/src/cli/helpers/import-strategy-prompter.d.ts +43 -0
- package/dist/src/cli/helpers/import-strategy-prompter.d.ts.map +1 -0
- package/dist/src/cli/helpers/import-strategy-prompter.js +136 -0
- package/dist/src/cli/helpers/import-strategy-prompter.js.map +1 -0
- package/dist/src/cli/helpers/issue-tracker/ado.d.ts +5 -2
- package/dist/src/cli/helpers/issue-tracker/ado.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/ado.js +90 -40
- package/dist/src/cli/helpers/issue-tracker/ado.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/index.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/index.js +112 -60
- package/dist/src/cli/helpers/issue-tracker/index.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/jira.d.ts +26 -2
- package/dist/src/cli/helpers/issue-tracker/jira.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/jira.js +197 -132
- package/dist/src/cli/helpers/issue-tracker/jira.js.map +1 -1
- package/dist/src/cli/helpers/progress-tracker.d.ts +121 -0
- package/dist/src/cli/helpers/progress-tracker.d.ts.map +1 -0
- package/dist/src/cli/helpers/progress-tracker.js +202 -0
- package/dist/src/cli/helpers/progress-tracker.js.map +1 -0
- package/dist/src/cli/helpers/project-count-fetcher.d.ts +69 -0
- package/dist/src/cli/helpers/project-count-fetcher.d.ts.map +1 -0
- package/dist/src/cli/helpers/project-count-fetcher.js +173 -0
- package/dist/src/cli/helpers/project-count-fetcher.js.map +1 -0
- package/dist/src/config/types.d.ts +14 -14
- package/dist/src/core/cache/cache-manager.d.ts +119 -0
- package/dist/src/core/cache/cache-manager.d.ts.map +1 -0
- package/dist/src/core/cache/cache-manager.js +304 -0
- package/dist/src/core/cache/cache-manager.js.map +1 -0
- package/dist/src/core/cache/rate-limit-checker.d.ts +92 -0
- package/dist/src/core/cache/rate-limit-checker.d.ts.map +1 -0
- package/dist/src/core/cache/rate-limit-checker.js +160 -0
- package/dist/src/core/cache/rate-limit-checker.js.map +1 -0
- package/dist/src/core/config/config-manager.d.ts +135 -0
- package/dist/src/core/config/config-manager.d.ts.map +1 -0
- package/dist/src/core/config/config-manager.js +341 -0
- package/dist/src/core/config/config-manager.js.map +1 -0
- package/dist/src/core/config/config-migrator.d.ts +102 -0
- package/dist/src/core/config/config-migrator.d.ts.map +1 -0
- package/dist/src/core/config/config-migrator.js +367 -0
- package/dist/src/core/config/config-migrator.js.map +1 -0
- package/dist/src/core/config/index.d.ts +10 -0
- package/dist/src/core/config/index.d.ts.map +1 -0
- package/dist/src/core/config/index.js +10 -0
- package/dist/src/core/config/index.js.map +1 -0
- package/dist/src/core/config/types.d.ts +216 -0
- package/dist/src/core/config/types.d.ts.map +1 -0
- package/dist/src/core/config/types.js +32 -0
- package/dist/src/core/config/types.js.map +1 -0
- package/dist/src/core/progress/cancelation-handler.d.ts +79 -0
- package/dist/src/core/progress/cancelation-handler.d.ts.map +1 -0
- package/dist/src/core/progress/cancelation-handler.js +111 -0
- package/dist/src/core/progress/cancelation-handler.js.map +1 -0
- package/dist/src/core/progress/import-state.d.ts +71 -0
- package/dist/src/core/progress/import-state.d.ts.map +1 -0
- package/dist/src/core/progress/import-state.js +96 -0
- package/dist/src/core/progress/import-state.js.map +1 -0
- package/dist/src/core/progress/progress-tracker.d.ts +139 -0
- package/dist/src/core/progress/progress-tracker.d.ts.map +1 -0
- package/dist/src/core/progress/progress-tracker.js +223 -0
- package/dist/src/core/progress/progress-tracker.js.map +1 -0
- package/dist/src/init/architecture/types.d.ts +6 -6
- package/dist/src/integrations/ado/ado-client.d.ts +25 -0
- package/dist/src/integrations/ado/ado-client.d.ts.map +1 -1
- package/dist/src/integrations/ado/ado-client.js +67 -0
- package/dist/src/integrations/ado/ado-client.js.map +1 -1
- package/dist/src/integrations/ado/ado-dependency-loader.d.ts +99 -0
- package/dist/src/integrations/ado/ado-dependency-loader.d.ts.map +1 -0
- package/dist/src/integrations/ado/ado-dependency-loader.js +207 -0
- package/dist/src/integrations/ado/ado-dependency-loader.js.map +1 -0
- package/dist/src/integrations/jira/jira-client.d.ts +32 -0
- package/dist/src/integrations/jira/jira-client.d.ts.map +1 -1
- package/dist/src/integrations/jira/jira-client.js +81 -0
- package/dist/src/integrations/jira/jira-client.js.map +1 -1
- package/dist/src/integrations/jira/jira-dependency-loader.d.ts +101 -0
- package/dist/src/integrations/jira/jira-dependency-loader.d.ts.map +1 -0
- package/dist/src/integrations/jira/jira-dependency-loader.js +200 -0
- package/dist/src/integrations/jira/jira-dependency-loader.js.map +1 -0
- package/dist/src/integrations/jira/jira-hierarchy-mapper.d.ts +104 -0
- package/dist/src/integrations/jira/jira-hierarchy-mapper.d.ts.map +1 -0
- package/dist/src/integrations/jira/jira-hierarchy-mapper.js +178 -0
- package/dist/src/integrations/jira/jira-hierarchy-mapper.js.map +1 -0
- package/package.json +1 -1
- package/plugins/specweave/.claude-plugin/plugin.json +20 -0
- package/plugins/specweave/agents/architect/AGENT.md +100 -602
- package/plugins/specweave/agents/pm/AGENT.md +96 -597
- package/plugins/specweave/agents/pm/AGENT.md.bak +1893 -0
- package/plugins/specweave/agents/pm/AGENT.md.bak2 +1754 -0
- package/plugins/specweave/commands/check-hooks.md +257 -0
- package/plugins/specweave/commands/migrate-config.md +104 -0
- package/plugins/specweave/hooks/post-edit-spec.sh +202 -31
- package/plugins/specweave/hooks/post-task-completion.sh +225 -228
- package/plugins/specweave/hooks/post-write-spec.sh +207 -31
- package/plugins/specweave/hooks/pre-edit-spec.sh +151 -0
- package/plugins/specweave/hooks/pre-task-completion.sh +5 -7
- package/plugins/specweave/hooks/pre-write-spec.sh +151 -0
- package/plugins/specweave/hooks/test-pretooluse-env.sh +72 -0
- package/plugins/specweave/skills/compliance-architecture/SKILL.md +374 -0
- package/plugins/specweave/skills/external-sync-wizard/SKILL.md +610 -0
- package/plugins/specweave/skills/pm-closure-validation/SKILL.md +541 -0
- package/plugins/specweave/skills/roadmap-planner/SKILL.md +473 -0
- package/plugins/specweave-ado/commands/refresh-cache.js +25 -0
- package/plugins/specweave-ado/commands/refresh-cache.ts +40 -0
- package/plugins/specweave-ado/hooks/post-task-completion.sh +1 -1
- package/plugins/specweave-github/hooks/post-task-completion.sh +1 -1
- package/plugins/specweave-jira/commands/refresh-cache.js +25 -0
- package/plugins/specweave-jira/commands/refresh-cache.ts +40 -0
- package/plugins/specweave-jira/hooks/post-task-completion.sh +1 -1
- package/plugins/specweave-kafka-streams/commands/topology.md +437 -0
- package/plugins/specweave-n8n/commands/workflow-template.md +262 -0
- package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +228 -6333
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-project-loader.js","sourceRoot":"","sources":["../../../../src/cli/helpers/async-project-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAU,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAyB,MAAM,0BAA0B,CAAC;AAsDrF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,OAAO,kBAAkB;IAU7B,YACE,WAA6C,EAC7C,QAAyB,EACzB,UAAwB,EAAE;QAE1B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAEzB,eAAe;QACf,IAAI,CAAC,OAAO,GAAG;YACb,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,EAAE;YAClC,eAAe,EAAE,OAAO,CAAC,eAAe,IAAI,CAAC;YAC7C,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;YAChC,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,oCAAoC;YACpE,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,mCAAmC;YACzE,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,aAAa;SACxC,CAAC;QAEF,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;IACjD,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,gBAAgB,CAAC,UAAkB;QACvC,MAAM,QAAQ,GAAc,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAiB,EAAE,CAAC;QAEhC,8BAA8B;QAC9B,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,CAAC;YACzC,KAAK,EAAE,UAAU;YACjB,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe;YAC7C,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;YAC7B,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;SAC5B,CAAC,CAAC;QAEH,iCAAiC;QACjC,IAAI,CAAC,aAAa,GAAG,IAAI,kBAAkB,CAAC;YAC1C,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;YACjC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;SAC5B,CAAC,CAAC;QAEH,mDAAmD;QACnD,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;YACtC,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QAEH,kBAAkB;QAClB,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,OAAO,MAAM,GAAG,UAAU,EAAE,CAAC;YAC3B,wBAAwB;YACxB,IAAI,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,EAAE,CAAC;gBACtC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;gBAC9B,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,0CAA0C,CAAC,CAAC;gBAE7E,OAAO;oBACL,QAAQ;oBACR,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,SAAS;oBACtD,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,MAAM;oBAChD,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,OAAO;oBAClD,MAAM;oBACN,QAAQ,EAAE,IAAI;iBACf,CAAC;YACJ,CAAC;YAED,mDAAmD;YACnD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,UAAU,GAAG,MAAM,CAAC,CAAC;YAEnE,IAAI,CAAC;gBACH,+BAA+B;gBAC/B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBAE5D,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;gBAExB,yCAAyC;gBACzC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;oBACtB,IAAI,CAAC,eAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;gBACvD,CAAC,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,uDAAuD;gBACvD,MAAM,QAAQ,GAAG,SAAS,MAAM,IAAI,MAAM,GAAG,KAAK,EAAE,CAAC;gBACrD,MAAM,UAAU,GAAe;oBAC7B,UAAU,EAAE,QAAQ;oBACpB,KAAK,EAAE,KAAK,CAAC,OAAO;oBACpB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACnC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;oBACrC,aAAa,EAAE,CAAC;iBACjB,CAAC;gBAEF,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACxB,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBAEhC,uCAAuC;gBACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC/B,IAAI,CAAC,eAAgB,CAAC,MAAM,CAAC,GAAG,QAAQ,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;gBAC9D,CAAC;gBAED,8DAA8D;gBAC9D,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,gBAAgB,GAAG,EAAE,EAAE,CAAC;oBAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC;oBACtC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC5E,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CACrB,KAAK,CAAC,MAAM,CAAC,8CAA8C,OAAO,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC,CACjG,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,MAAM,IAAI,KAAK,CAAC;QAClB,CAAC;QAED,2BAA2B;QAC3B,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;QAE9B,kDAAkD;QAClD,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC;QAEtC,UAAU;QACV,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;QAE7B,OAAO;YACL,QAAQ;YACR,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,SAAS;YACtD,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,MAAM;YAChD,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,OAAO;YAClD,MAAM;SACP,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,UAAU,CAAC,MAAc,EAAE,KAAa;QAC5C,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC5C,CAAC;aAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAAC,MAAc,EAAE,KAAa;QACxD,MAAM,KAAK,GAAG,IAAI,CAAC,WAA8B,CAAC;QAClD,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;QAErD,MAAM,UAAU,GAAG,YAAY,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACxD,MAAM,QAAQ,GAAG,YAAY,KAAK,OAAO;YACvC,CAAC,CAAC,aAAa,UAAU,2BAA2B,MAAM,eAAe,KAAK,EAAE;YAChF,CAAC,CAAC,aAAa,UAAU,oBAAoB,MAAM,eAAe,KAAK,EAAE,CAAC;QAE5E,MAAM,GAAG,GAAG,WAAW,MAAM,GAAG,QAAQ,EAAE,CAAC;QAE3C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,aAAa,EAAE,SAAS,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;gBAC7E,MAAM,EAAE,kBAAkB;gBAC1B,cAAc,EAAE,kBAAkB;aACnC;YACD,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,oBAAoB;SACxD,CAAC,CAAC;QAEH,mBAAmB;QACnB,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAE5C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC;YACrE,MAAM,IAAI,KAAK,CACb,mBAAmB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,EAAE,CAC1E,CAAC;QACJ,CAAC;QAED,IAAI,YAAY,KAAK,OAAO,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA0B,CAAC;YAC9D,OAAO,IAAI,CAAC,MAAM,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,gCAAgC;YAChC,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAc,CAAC;QAC9C,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa,CAAC,MAAc,EAAE,KAAa;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,WAA6B,CAAC;QACjD,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;QAEpC,MAAM,GAAG,GAAG,yBAAyB,YAAY,wBAAwB,KAAK,UAAU,MAAM,kBAAkB,CAAC;QAEjH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,aAAa,EAAE,SAAS,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;gBACnE,MAAM,EAAE,kBAAkB;aAC3B;YACD,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,oBAAoB;SACxD,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC;YACrE,MAAM,IAAI,KAAK,CACb,2BAA2B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,EAAE,CAClF,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAmD,CAAC;QACvF,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1B,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;YAC9C,IAAI,EAAE,CAAC,CAAC,IAAI;SACb,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,mBAAmB,CAAC,MAAc,EAAE,KAAa;QAC7D,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,aAAa;QAChD,IAAI,SAAS,GAAiB,IAAI,CAAC;QAEnC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC;YAC7C,IAAI,CAAC;gBACH,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC9C,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,SAAS,GAAG,KAAK,CAAC;gBAElB,gDAAgD;gBAChD,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC9D,MAAM,KAAK,CAAC;gBACd,CAAC;gBAED,8CAA8C;gBAC9C,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;oBAChB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CACrB,KAAK,CAAC,MAAM,CAAC,aAAa,OAAO,GAAG,CAAC,YAAY,MAAM,CAAC,OAAO,CAAC,UAAU,KAAK,CAAC,OAAO,GAAG,CAAC,CAC5F,CAAC;oBACF,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACrE,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,SAAS,IAAI,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IACzE,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAAC,OAAgB;QAC3C,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QAE/C,IAAI,SAAS,IAAI,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC;YAC9C,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;YAC1E,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YACnD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;YAEzC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CACrB,KAAK,CAAC,MAAM,CAAC,qCAAqC,SAAS,iCAAiC,OAAO,MAAM,CAAC,CAC3G,CAAC;YAEF,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,gBAAgB;QACpF,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,gBAAgB,CAC5B,QAAmB,EACnB,KAAa,EACb,MAAoB;QAEpB,MAAM,OAAO,GAAG,IAAI,CAAC,eAAgB,CAAC,UAAU,EAAE,CAAC;QAEnD,+BAA+B;QAC/B,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC;QAClC,MAAM,SAAS,GAAyC,EAAE,CAAC;QAE3D,gFAAgF;QAChF,kFAAkF;QAElF,MAAM,KAAK,GAAqB;YAC9B,SAAS,EAAE,GAAG,IAAI,CAAC,QAAQ,SAAS;YACpC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM,EAAE,aAAa,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAE,IAAI,CAAC,WAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;YACxF,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,OAAO,EAAE,KAAK;YACd,KAAK;YACL,SAAS;YACT,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,SAAS;YACT,MAAM;SACP,CAAC;QAEF,MAAM,IAAI,CAAC,aAAc,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,QAAQ,CAAC,KAAiB;QACtC,IAAI,CAAC;YACH,8BAA8B;YAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YACvD,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAE5C,mBAAmB;YACnB,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,UAAU,KAAK,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,UAAU,KAAK,CAAC;YAEpG,qBAAqB;YACrB,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QACpE,CAAC;QAAC,OAAO,QAAa,EAAE,CAAC;YACvB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE,QAAQ,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,KAAU;QAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;QAEpC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACvD,OAAO,2CAA2C,CAAC;QACrD,CAAC;QAED,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,2CAA2C,CAAC;QACrD,CAAC;QAED,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,0CAA0C,CAAC;QACpD,CAAC;QAED,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACjE,OAAO,kDAAkD,CAAC;QAC5D,CAAC;QAED,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,OAAO,0CAA0C,CAAC;QACpD,CAAC;QAED,OAAO,wCAAwC,CAAC;IAClD,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,KAAU;QAC5B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;QACpC,OAAO,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,KAAU;QAC/B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;QAC9B,OAAO,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,KAAK,WAAW,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC9F,CAAC;CACF"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cancelation Handler
|
|
3
|
+
*
|
|
4
|
+
* Graceful Ctrl+C handling with state persistence and resume capability.
|
|
5
|
+
* Atomic file writes ensure state integrity even during abrupt termination.
|
|
6
|
+
*
|
|
7
|
+
* @module cli/helpers/cancelation-handler
|
|
8
|
+
*/
|
|
9
|
+
import { Logger } from '../../utils/logger.js';
|
|
10
|
+
/**
|
|
11
|
+
* Cancelation handler options
|
|
12
|
+
*/
|
|
13
|
+
export interface CancelationOptions {
|
|
14
|
+
stateFile: string;
|
|
15
|
+
logger?: Logger;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Cancelation state (persisted to disk)
|
|
19
|
+
*/
|
|
20
|
+
export interface CancelationState {
|
|
21
|
+
operation: string;
|
|
22
|
+
provider: string;
|
|
23
|
+
domain?: string;
|
|
24
|
+
timestamp: string;
|
|
25
|
+
version: string;
|
|
26
|
+
total: number;
|
|
27
|
+
completed: number;
|
|
28
|
+
succeeded: number;
|
|
29
|
+
failed: number;
|
|
30
|
+
skipped: number;
|
|
31
|
+
remaining: Array<{
|
|
32
|
+
key: string;
|
|
33
|
+
name: string;
|
|
34
|
+
}>;
|
|
35
|
+
errors: Array<{
|
|
36
|
+
projectKey: string;
|
|
37
|
+
error: string;
|
|
38
|
+
timestamp: string;
|
|
39
|
+
}>;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Cancelation Handler
|
|
43
|
+
*
|
|
44
|
+
* Handles SIGINT (Ctrl+C) signals during long-running operations:
|
|
45
|
+
* - Registers signal handler
|
|
46
|
+
* - Saves partial state to disk (atomic writes)
|
|
47
|
+
* - Provides resume capability
|
|
48
|
+
* - TTL validation (24-hour expiration)
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```typescript
|
|
52
|
+
* const handler = new CancelationHandler({
|
|
53
|
+
* stateFile: '.specweave/cache/import-state.json'
|
|
54
|
+
* });
|
|
55
|
+
*
|
|
56
|
+
* handler.onCleanup(async () => {
|
|
57
|
+
* await savePartialState(projects, total, errors);
|
|
58
|
+
* });
|
|
59
|
+
*
|
|
60
|
+
* for (const project of projects) {
|
|
61
|
+
* if (handler.shouldCancel()) {
|
|
62
|
+
* break; // Exit gracefully
|
|
63
|
+
* }
|
|
64
|
+
* // ... process project ...
|
|
65
|
+
* }
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
export declare class CancelationHandler {
|
|
69
|
+
private stateFile;
|
|
70
|
+
private logger;
|
|
71
|
+
private canceled;
|
|
72
|
+
private cleanupCallback;
|
|
73
|
+
private sigintHandler;
|
|
74
|
+
private ctrlCCount;
|
|
75
|
+
constructor(options: CancelationOptions);
|
|
76
|
+
/**
|
|
77
|
+
* Register SIGINT (Ctrl+C) handler
|
|
78
|
+
*/
|
|
79
|
+
private registerSigintHandler;
|
|
80
|
+
/**
|
|
81
|
+
* Check if cancelation was requested
|
|
82
|
+
*
|
|
83
|
+
* @returns True if Ctrl+C was pressed
|
|
84
|
+
*/
|
|
85
|
+
shouldCancel(): boolean;
|
|
86
|
+
/**
|
|
87
|
+
* Register cleanup callback (executed on Ctrl+C)
|
|
88
|
+
*
|
|
89
|
+
* @param callback - Async cleanup function
|
|
90
|
+
*/
|
|
91
|
+
onCleanup(callback: () => Promise<void>): void;
|
|
92
|
+
/**
|
|
93
|
+
* Save cancelation state to disk (atomic write)
|
|
94
|
+
*
|
|
95
|
+
* Uses temp file → rename pattern to ensure atomicity.
|
|
96
|
+
*
|
|
97
|
+
* @param state - Cancelation state to persist
|
|
98
|
+
*/
|
|
99
|
+
saveState(state: CancelationState): Promise<void>;
|
|
100
|
+
/**
|
|
101
|
+
* Load cancelation state from disk
|
|
102
|
+
*
|
|
103
|
+
* Validates TTL (24-hour expiration) and version compatibility.
|
|
104
|
+
*
|
|
105
|
+
* @returns Cancelation state or null if not found/expired
|
|
106
|
+
*/
|
|
107
|
+
loadState(): Promise<CancelationState | null>;
|
|
108
|
+
/**
|
|
109
|
+
* Clear saved state (delete file)
|
|
110
|
+
*/
|
|
111
|
+
clearState(): Promise<void>;
|
|
112
|
+
/**
|
|
113
|
+
* Unregister SIGINT handler (cleanup)
|
|
114
|
+
*/
|
|
115
|
+
dispose(): void;
|
|
116
|
+
/**
|
|
117
|
+
* Show resume suggestion to user
|
|
118
|
+
*
|
|
119
|
+
* @param resumeCommand - Command to resume operation (e.g., "/specweave-jira:import-projects --resume")
|
|
120
|
+
*/
|
|
121
|
+
suggestResume(resumeCommand: string): void;
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=cancelation-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cancelation-handler.d.ts","sourceRoot":"","sources":["../../../../src/cli/helpers/cancelation-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,EAAE,MAAM,EAAiB,MAAM,uBAAuB,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChD,MAAM,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACzE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,eAAe,CAAsC;IAC7D,OAAO,CAAC,aAAa,CAAuC;IAC5D,OAAO,CAAC,UAAU,CAAK;gBAEX,OAAO,EAAE,kBAAkB;IAQvC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA6B7B;;;;OAIG;IACH,YAAY,IAAI,OAAO;IAIvB;;;;OAIG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAI9C;;;;;;OAMG;IACG,SAAS,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBvD;;;;;;OAMG;IACG,SAAS,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAmCnD;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAWjC;;OAEG;IACH,OAAO,IAAI,IAAI;IAOf;;;;OAIG;IACH,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;CAG3C"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cancelation Handler
|
|
3
|
+
*
|
|
4
|
+
* Graceful Ctrl+C handling with state persistence and resume capability.
|
|
5
|
+
* Atomic file writes ensure state integrity even during abrupt termination.
|
|
6
|
+
*
|
|
7
|
+
* @module cli/helpers/cancelation-handler
|
|
8
|
+
*/
|
|
9
|
+
import { promises as fs } from 'fs';
|
|
10
|
+
import { existsSync } from 'fs';
|
|
11
|
+
import path from 'path';
|
|
12
|
+
import chalk from 'chalk';
|
|
13
|
+
import { consoleLogger } from '../../utils/logger.js';
|
|
14
|
+
/**
|
|
15
|
+
* Cancelation Handler
|
|
16
|
+
*
|
|
17
|
+
* Handles SIGINT (Ctrl+C) signals during long-running operations:
|
|
18
|
+
* - Registers signal handler
|
|
19
|
+
* - Saves partial state to disk (atomic writes)
|
|
20
|
+
* - Provides resume capability
|
|
21
|
+
* - TTL validation (24-hour expiration)
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* const handler = new CancelationHandler({
|
|
26
|
+
* stateFile: '.specweave/cache/import-state.json'
|
|
27
|
+
* });
|
|
28
|
+
*
|
|
29
|
+
* handler.onCleanup(async () => {
|
|
30
|
+
* await savePartialState(projects, total, errors);
|
|
31
|
+
* });
|
|
32
|
+
*
|
|
33
|
+
* for (const project of projects) {
|
|
34
|
+
* if (handler.shouldCancel()) {
|
|
35
|
+
* break; // Exit gracefully
|
|
36
|
+
* }
|
|
37
|
+
* // ... process project ...
|
|
38
|
+
* }
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export class CancelationHandler {
|
|
42
|
+
constructor(options) {
|
|
43
|
+
this.canceled = false;
|
|
44
|
+
this.cleanupCallback = null;
|
|
45
|
+
this.sigintHandler = null;
|
|
46
|
+
this.ctrlCCount = 0; // Track consecutive Ctrl+C presses
|
|
47
|
+
this.stateFile = options.stateFile;
|
|
48
|
+
this.logger = options.logger ?? consoleLogger;
|
|
49
|
+
// Register SIGINT handler
|
|
50
|
+
this.registerSigintHandler();
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Register SIGINT (Ctrl+C) handler
|
|
54
|
+
*/
|
|
55
|
+
registerSigintHandler() {
|
|
56
|
+
this.sigintHandler = async (signal) => {
|
|
57
|
+
this.ctrlCCount++;
|
|
58
|
+
// Double Ctrl+C: force exit immediately (no cleanup)
|
|
59
|
+
if (this.ctrlCCount > 1) {
|
|
60
|
+
this.logger.log(chalk.red('\n⚠️ Force exit (no state saved)'));
|
|
61
|
+
process.exit(1);
|
|
62
|
+
}
|
|
63
|
+
// First Ctrl+C: graceful cancelation
|
|
64
|
+
this.canceled = true;
|
|
65
|
+
this.logger.log(chalk.yellow('\n⚠️ Cancelation requested. Saving progress...'));
|
|
66
|
+
// Execute cleanup callback if registered
|
|
67
|
+
if (this.cleanupCallback) {
|
|
68
|
+
try {
|
|
69
|
+
await this.cleanupCallback();
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
this.logger.error('Error during cleanup:', error);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Note: Don't exit here - let the main loop detect shouldCancel() and exit cleanly
|
|
76
|
+
};
|
|
77
|
+
process.on('SIGINT', this.sigintHandler);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Check if cancelation was requested
|
|
81
|
+
*
|
|
82
|
+
* @returns True if Ctrl+C was pressed
|
|
83
|
+
*/
|
|
84
|
+
shouldCancel() {
|
|
85
|
+
return this.canceled;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Register cleanup callback (executed on Ctrl+C)
|
|
89
|
+
*
|
|
90
|
+
* @param callback - Async cleanup function
|
|
91
|
+
*/
|
|
92
|
+
onCleanup(callback) {
|
|
93
|
+
this.cleanupCallback = callback;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Save cancelation state to disk (atomic write)
|
|
97
|
+
*
|
|
98
|
+
* Uses temp file → rename pattern to ensure atomicity.
|
|
99
|
+
*
|
|
100
|
+
* @param state - Cancelation state to persist
|
|
101
|
+
*/
|
|
102
|
+
async saveState(state) {
|
|
103
|
+
try {
|
|
104
|
+
// Ensure cache directory exists
|
|
105
|
+
const cacheDir = path.dirname(this.stateFile);
|
|
106
|
+
await fs.mkdir(cacheDir, { recursive: true });
|
|
107
|
+
// Atomic write: temp file → rename
|
|
108
|
+
const tempFile = `${this.stateFile}.tmp`;
|
|
109
|
+
await fs.writeFile(tempFile, JSON.stringify(state, null, 2), 'utf-8');
|
|
110
|
+
await fs.rename(tempFile, this.stateFile);
|
|
111
|
+
this.logger.log(chalk.gray(`State saved to ${this.stateFile}`));
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
this.logger.error('Failed to save state:', error);
|
|
115
|
+
throw error;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Load cancelation state from disk
|
|
120
|
+
*
|
|
121
|
+
* Validates TTL (24-hour expiration) and version compatibility.
|
|
122
|
+
*
|
|
123
|
+
* @returns Cancelation state or null if not found/expired
|
|
124
|
+
*/
|
|
125
|
+
async loadState() {
|
|
126
|
+
try {
|
|
127
|
+
if (!existsSync(this.stateFile)) {
|
|
128
|
+
return null; // No saved state
|
|
129
|
+
}
|
|
130
|
+
const content = await fs.readFile(this.stateFile, 'utf-8');
|
|
131
|
+
const state = JSON.parse(content);
|
|
132
|
+
// Validate TTL (24 hours)
|
|
133
|
+
const stateTimestamp = new Date(state.timestamp).getTime();
|
|
134
|
+
const now = Date.now();
|
|
135
|
+
const ttlMs = 24 * 60 * 60 * 1000; // 24 hours
|
|
136
|
+
if (now - stateTimestamp > ttlMs) {
|
|
137
|
+
this.logger.log(chalk.yellow('⚠️ Saved state expired (> 24 hours old). Starting fresh import.'));
|
|
138
|
+
await this.clearState(); // Delete expired state
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
// Validate version (for future compatibility)
|
|
142
|
+
if (state.version !== '1.0') {
|
|
143
|
+
this.logger.log(chalk.yellow('⚠️ Incompatible state version. Starting fresh import.'));
|
|
144
|
+
await this.clearState();
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
return state;
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
this.logger.error('Failed to load state:', error);
|
|
151
|
+
await this.clearState(); // Corrupted state - delete it
|
|
152
|
+
return null;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Clear saved state (delete file)
|
|
157
|
+
*/
|
|
158
|
+
async clearState() {
|
|
159
|
+
try {
|
|
160
|
+
if (existsSync(this.stateFile)) {
|
|
161
|
+
await fs.unlink(this.stateFile);
|
|
162
|
+
this.logger.log(chalk.gray('Cleared saved state'));
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
this.logger.error('Failed to clear state:', error);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Unregister SIGINT handler (cleanup)
|
|
171
|
+
*/
|
|
172
|
+
dispose() {
|
|
173
|
+
if (this.sigintHandler) {
|
|
174
|
+
process.off('SIGINT', this.sigintHandler);
|
|
175
|
+
this.sigintHandler = null;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Show resume suggestion to user
|
|
180
|
+
*
|
|
181
|
+
* @param resumeCommand - Command to resume operation (e.g., "/specweave-jira:import-projects --resume")
|
|
182
|
+
*/
|
|
183
|
+
suggestResume(resumeCommand) {
|
|
184
|
+
this.logger.log(chalk.cyan(`\nResume with: ${resumeCommand}`));
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=cancelation-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cancelation-handler.js","sourceRoot":"","sources":["../../../../src/cli/helpers/cancelation-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Import Strategy Prompter
|
|
3
|
+
*
|
|
4
|
+
* Provides CLI-first UI for selecting import strategy with "Import all" as default.
|
|
5
|
+
* Supports three strategies:
|
|
6
|
+
* - import-all (default, recommended)
|
|
7
|
+
* - select-specific (checkbox mode with all pre-checked)
|
|
8
|
+
* - manual-entry (comma-separated project keys)
|
|
9
|
+
*
|
|
10
|
+
* @module cli/helpers/import-strategy-prompter
|
|
11
|
+
*/
|
|
12
|
+
import { Logger } from '../../utils/logger.js';
|
|
13
|
+
/**
|
|
14
|
+
* Import strategy options
|
|
15
|
+
*/
|
|
16
|
+
export type ImportStrategy = 'import-all' | 'select-specific' | 'manual-entry';
|
|
17
|
+
/**
|
|
18
|
+
* Strategy prompt result
|
|
19
|
+
*/
|
|
20
|
+
export interface StrategyPromptResult {
|
|
21
|
+
strategy: ImportStrategy;
|
|
22
|
+
projectKeys?: string[];
|
|
23
|
+
confirmed?: boolean;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Strategy prompter options
|
|
27
|
+
*/
|
|
28
|
+
export interface StrategyPrompterOptions {
|
|
29
|
+
totalCount: number;
|
|
30
|
+
provider: 'jira' | 'ado';
|
|
31
|
+
logger?: Logger;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Prompt user for import strategy selection
|
|
35
|
+
*
|
|
36
|
+
* Default: "Import all" (CLI-first approach)
|
|
37
|
+
* Instructions: "All projects selected by default. Deselect unwanted projects if needed."
|
|
38
|
+
*
|
|
39
|
+
* @param options - Prompter options
|
|
40
|
+
* @returns Strategy prompt result
|
|
41
|
+
*/
|
|
42
|
+
export declare function promptImportStrategy(options: StrategyPrompterOptions): Promise<StrategyPromptResult>;
|
|
43
|
+
//# sourceMappingURL=import-strategy-prompter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-strategy-prompter.d.ts","sourceRoot":"","sources":["../../../../src/cli/helpers/import-strategy-prompter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EAAE,MAAM,EAAiB,MAAM,uBAAuB,CAAC;AAE9D;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,iBAAiB,GAAG,cAAc,CAAC;AAE/E;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,cAAc,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,oBAAoB,CAAC,CAiD/B"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Import Strategy Prompter
|
|
3
|
+
*
|
|
4
|
+
* Provides CLI-first UI for selecting import strategy with "Import all" as default.
|
|
5
|
+
* Supports three strategies:
|
|
6
|
+
* - import-all (default, recommended)
|
|
7
|
+
* - select-specific (checkbox mode with all pre-checked)
|
|
8
|
+
* - manual-entry (comma-separated project keys)
|
|
9
|
+
*
|
|
10
|
+
* @module cli/helpers/import-strategy-prompter
|
|
11
|
+
*/
|
|
12
|
+
import inquirer from 'inquirer';
|
|
13
|
+
import chalk from 'chalk';
|
|
14
|
+
import { consoleLogger } from '../../utils/logger.js';
|
|
15
|
+
/**
|
|
16
|
+
* Prompt user for import strategy selection
|
|
17
|
+
*
|
|
18
|
+
* Default: "Import all" (CLI-first approach)
|
|
19
|
+
* Instructions: "All projects selected by default. Deselect unwanted projects if needed."
|
|
20
|
+
*
|
|
21
|
+
* @param options - Prompter options
|
|
22
|
+
* @returns Strategy prompt result
|
|
23
|
+
*/
|
|
24
|
+
export async function promptImportStrategy(options) {
|
|
25
|
+
const { totalCount, provider, logger = consoleLogger } = options;
|
|
26
|
+
// Display project count
|
|
27
|
+
logger.log(chalk.cyan(`\nFound ${totalCount} accessible ${provider.toUpperCase()} projects.`));
|
|
28
|
+
// Show strategy prompt
|
|
29
|
+
const strategyAnswer = await inquirer.prompt([
|
|
30
|
+
{
|
|
31
|
+
type: 'list',
|
|
32
|
+
name: 'strategy',
|
|
33
|
+
message: 'How would you like to import projects?',
|
|
34
|
+
default: 'import-all', // CLI-first default
|
|
35
|
+
choices: [
|
|
36
|
+
{
|
|
37
|
+
name: chalk.green('✓ Import all projects (Recommended)') + chalk.gray(' - All selected by default'),
|
|
38
|
+
value: 'import-all'
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
name: 'Select specific projects' + chalk.gray(' - Choose from checkbox list'),
|
|
42
|
+
value: 'select-specific'
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: 'Manual entry' + chalk.gray(' - Enter project keys manually'),
|
|
46
|
+
value: 'manual-entry'
|
|
47
|
+
}
|
|
48
|
+
]
|
|
49
|
+
}
|
|
50
|
+
]);
|
|
51
|
+
const strategy = strategyAnswer.strategy;
|
|
52
|
+
// Handle manual entry
|
|
53
|
+
if (strategy === 'manual-entry') {
|
|
54
|
+
return await handleManualEntry(logger);
|
|
55
|
+
}
|
|
56
|
+
// Handle safety confirmation for large imports (> 100 projects)
|
|
57
|
+
if (strategy === 'import-all' && totalCount > 100) {
|
|
58
|
+
const confirmed = await showSafetyConfirmation(totalCount, logger);
|
|
59
|
+
if (!confirmed) {
|
|
60
|
+
// User declined large import - restart strategy selection
|
|
61
|
+
logger.log(chalk.yellow('\n⚠️ Import canceled. Returning to strategy selection...\n'));
|
|
62
|
+
return await promptImportStrategy(options); // Recursive call
|
|
63
|
+
}
|
|
64
|
+
return { strategy, confirmed: true };
|
|
65
|
+
}
|
|
66
|
+
return { strategy };
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Handle manual entry workflow
|
|
70
|
+
*
|
|
71
|
+
* Prompts user to enter comma-separated project keys (e.g., "BACKEND,FRONTEND,MOBILE")
|
|
72
|
+
* Validates format and returns parsed keys.
|
|
73
|
+
*
|
|
74
|
+
* @param logger - Logger instance
|
|
75
|
+
* @returns Strategy result with project keys
|
|
76
|
+
*/
|
|
77
|
+
async function handleManualEntry(logger) {
|
|
78
|
+
logger.log(chalk.gray('\n💡 Tip: Enter project keys separated by commas (e.g., BACKEND,FRONTEND,MOBILE)'));
|
|
79
|
+
const manualAnswer = await inquirer.prompt([
|
|
80
|
+
{
|
|
81
|
+
type: 'input',
|
|
82
|
+
name: 'projectKeys',
|
|
83
|
+
message: 'Enter project keys (comma-separated):',
|
|
84
|
+
validate: (input) => {
|
|
85
|
+
// Validate format: alphanumeric, underscores, hyphens, and commas only
|
|
86
|
+
const trimmed = input.trim();
|
|
87
|
+
if (!trimmed) {
|
|
88
|
+
return chalk.red('Project keys cannot be empty. Please enter at least one project key.');
|
|
89
|
+
}
|
|
90
|
+
// Check format (allow A-Z, 0-9, _, -, and commas)
|
|
91
|
+
const validFormat = /^[A-Z0-9_,-]+$/i.test(trimmed);
|
|
92
|
+
if (!validFormat) {
|
|
93
|
+
return chalk.red('Invalid format. Use only letters, numbers, underscores, hyphens, and commas.');
|
|
94
|
+
}
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
]);
|
|
99
|
+
// Parse and clean project keys
|
|
100
|
+
const projectKeys = manualAnswer.projectKeys
|
|
101
|
+
.split(',')
|
|
102
|
+
.map(key => key.trim().toUpperCase())
|
|
103
|
+
.filter(key => key.length > 0);
|
|
104
|
+
logger.log(chalk.green(`\n✓ ${projectKeys.length} project(s) will be imported: ${projectKeys.join(', ')}`));
|
|
105
|
+
return { strategy: 'manual-entry', projectKeys };
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Show safety confirmation for large imports (> 100 projects)
|
|
109
|
+
*
|
|
110
|
+
* Default: "No" (safe default to prevent accidental large imports)
|
|
111
|
+
* Displays estimated import time based on batch size.
|
|
112
|
+
*
|
|
113
|
+
* @param totalCount - Total number of projects to import
|
|
114
|
+
* @param logger - Logger instance
|
|
115
|
+
* @returns True if user confirms, false otherwise
|
|
116
|
+
*/
|
|
117
|
+
async function showSafetyConfirmation(totalCount, logger) {
|
|
118
|
+
// Calculate estimated time (50 projects/batch, ~5 seconds/batch)
|
|
119
|
+
const estimatedBatches = Math.ceil(totalCount / 50);
|
|
120
|
+
const estimatedSeconds = estimatedBatches * 5;
|
|
121
|
+
const estimatedTime = estimatedSeconds < 60
|
|
122
|
+
? `~${estimatedSeconds}s`
|
|
123
|
+
: `~${Math.ceil(estimatedSeconds / 60)}m`;
|
|
124
|
+
logger.log(chalk.yellow(`\n⚠️ Large import detected: ${totalCount} projects`));
|
|
125
|
+
logger.log(chalk.gray(` Estimated time: ${estimatedTime} (${estimatedBatches} batches)`));
|
|
126
|
+
const confirmation = await inquirer.prompt([
|
|
127
|
+
{
|
|
128
|
+
type: 'confirm',
|
|
129
|
+
name: 'confirmed',
|
|
130
|
+
message: `Import all ${totalCount} projects?`,
|
|
131
|
+
default: false // Safe default (prevent accidents)
|
|
132
|
+
}
|
|
133
|
+
]);
|
|
134
|
+
return confirmation.confirmed;
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=import-strategy-prompter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-strategy-prompter.js","sourceRoot":"","sources":["../../../../src/cli/helpers/import-strategy-prompter.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,12 +15,15 @@ import type { SupportedLanguage } from '../../../core/i18n/types.js';
|
|
|
15
15
|
*/
|
|
16
16
|
export declare function checkExistingAzureDevOpsCredentials(projectPath: string): Promise<ExistingCredentials | null>;
|
|
17
17
|
/**
|
|
18
|
-
* Prompt user for Azure DevOps credentials
|
|
18
|
+
* Prompt user for Azure DevOps credentials with cache support
|
|
19
|
+
*
|
|
20
|
+
* NEW (v0.24.0): Caches last used organization/project for quick re-initialization
|
|
19
21
|
*
|
|
20
22
|
* @param language - User's language
|
|
23
|
+
* @param projectRoot - Project root path (optional, for cache manager)
|
|
21
24
|
* @returns Credentials or null if skipped
|
|
22
25
|
*/
|
|
23
|
-
export declare function promptAzureDevOpsCredentials(language: SupportedLanguage): Promise<AzureDevOpsCredentials | null>;
|
|
26
|
+
export declare function promptAzureDevOpsCredentials(language: SupportedLanguage, projectRoot?: string): Promise<AzureDevOpsCredentials | null>;
|
|
24
27
|
/**
|
|
25
28
|
* Validate Azure DevOps connection
|
|
26
29
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ado.d.ts","sourceRoot":"","sources":["../../../../../src/cli/helpers/issue-tracker/ado.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAKpB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAIrE;;;;;GAKG;AACH,wBAAsB,mCAAmC,CACvD,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CA2BrC;AAED
|
|
1
|
+
{"version":3,"file":"ado.d.ts","sourceRoot":"","sources":["../../../../../src/cli/helpers/issue-tracker/ado.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAKpB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAIrE;;;;;GAKG;AACH,wBAAsB,mCAAmC,CACvD,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CA2BrC;AAED;;;;;;;;GAQG;AACH,wBAAsB,4BAA4B,CAChD,QAAQ,EAAE,iBAAiB,EAC3B,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CA0IxC;AAED;;;;;;;;;GASG;AACH,wBAAsB,6BAA6B,CACjD,WAAW,EAAE,sBAAsB,EACnC,UAAU,GAAE,MAAU,GACrB,OAAO,CAAC,gBAAgB,CAAC,CA+D3B;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,sBAAsB,GAClC,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAevC;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAS9E;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAY7E"}
|