specweave 1.0.520 → 1.0.522
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/README.md +1 -1
- package/CLAUDE.md +1 -1
- package/README.md +1 -1
- package/bin/specweave.js +8 -8
- package/dist/plugins/specweave/lib/integrations/github/duplicate-detector.js +6 -6
- package/dist/plugins/specweave/lib/integrations/github/duplicate-detector.js.map +1 -1
- package/dist/plugins/specweave/lib/integrations/github/github-ac-comment-poster.d.ts.map +1 -1
- package/dist/plugins/specweave/lib/integrations/github/github-ac-comment-poster.js +34 -9
- package/dist/plugins/specweave/lib/integrations/github/github-ac-comment-poster.js.map +1 -1
- package/dist/plugins/specweave/lib/integrations/github/github-body-utils.d.ts +38 -0
- package/dist/plugins/specweave/lib/integrations/github/github-body-utils.d.ts.map +1 -0
- package/dist/plugins/specweave/lib/integrations/github/github-body-utils.js +50 -0
- package/dist/plugins/specweave/lib/integrations/github/github-body-utils.js.map +1 -0
- package/dist/plugins/specweave/lib/integrations/github/github-feature-sync.d.ts +0 -2
- package/dist/plugins/specweave/lib/integrations/github/github-feature-sync.d.ts.map +1 -1
- package/dist/plugins/specweave/lib/integrations/github/github-feature-sync.js +194 -173
- package/dist/plugins/specweave/lib/integrations/github/github-feature-sync.js.map +1 -1
- package/dist/src/adapters/codex/README.md +1 -1
- package/dist/src/adapters/gemini/README.md +1 -1
- package/dist/src/cli/commands/complete.d.ts +10 -7
- package/dist/src/cli/commands/complete.d.ts.map +1 -1
- package/dist/src/cli/commands/complete.js +60 -14
- package/dist/src/cli/commands/complete.js.map +1 -1
- package/dist/src/cli/commands/create-increment.d.ts.map +1 -1
- package/dist/src/cli/commands/create-increment.js +2 -10
- package/dist/src/cli/commands/create-increment.js.map +1 -1
- package/dist/src/cli/commands/evaluate-completion.d.ts.map +1 -1
- package/dist/src/cli/commands/evaluate-completion.js +8 -38
- package/dist/src/cli/commands/evaluate-completion.js.map +1 -1
- package/dist/src/cli/commands/init.d.ts.map +1 -1
- package/dist/src/cli/commands/init.js +25 -0
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/save.js +1 -1
- package/dist/src/cli/commands/save.js.map +1 -1
- package/dist/src/cli/commands/sync-progress.d.ts.map +1 -1
- package/dist/src/cli/commands/sync-progress.js +10 -0
- package/dist/src/cli/commands/sync-progress.js.map +1 -1
- package/dist/src/cli/helpers/init/claude-settings-lsp.js +1 -1
- package/dist/src/cli/helpers/init/claude-settings-lsp.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/github-multi-repo.d.ts +1 -8
- package/dist/src/cli/helpers/issue-tracker/github-multi-repo.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/github-multi-repo.js +57 -88
- package/dist/src/cli/helpers/issue-tracker/github-multi-repo.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/github.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/github.js +1 -3
- package/dist/src/cli/helpers/issue-tracker/github.js.map +1 -1
- package/dist/src/core/increment/completion-validator.d.ts.map +1 -1
- package/dist/src/core/increment/completion-validator.js +2 -3
- package/dist/src/core/increment/completion-validator.js.map +1 -1
- package/dist/src/core/increment/increment-utils.d.ts +7 -7
- package/dist/src/core/increment/increment-utils.d.ts.map +1 -1
- package/dist/src/core/increment/increment-utils.js +19 -13
- package/dist/src/core/increment/increment-utils.js.map +1 -1
- package/dist/src/core/increment/status-change-sync-trigger.d.ts.map +1 -1
- package/dist/src/core/increment/status-change-sync-trigger.js +9 -0
- package/dist/src/core/increment/status-change-sync-trigger.js.map +1 -1
- package/dist/src/core/repo-structure/prompt-consolidator.d.ts +3 -17
- package/dist/src/core/repo-structure/prompt-consolidator.d.ts.map +1 -1
- package/dist/src/core/repo-structure/prompt-consolidator.js +1 -55
- package/dist/src/core/repo-structure/prompt-consolidator.js.map +1 -1
- package/dist/src/core/repo-structure/repo-structure-manager.d.ts.map +1 -1
- package/dist/src/core/repo-structure/repo-structure-manager.js +3 -1
- package/dist/src/core/repo-structure/repo-structure-manager.js.map +1 -1
- package/dist/src/core/repo-structure/setup-state-manager.d.ts.map +1 -1
- package/dist/src/core/repo-structure/setup-state-manager.js +2 -1
- package/dist/src/core/repo-structure/setup-state-manager.js.map +1 -1
- package/dist/src/core/repo-structure/setup-summary.js +1 -1
- package/dist/src/core/repo-structure/setup-summary.js.map +1 -1
- package/dist/src/core/sync-throttle.d.ts +49 -0
- package/dist/src/core/sync-throttle.d.ts.map +1 -0
- package/dist/src/core/sync-throttle.js +94 -0
- package/dist/src/core/sync-throttle.js.map +1 -0
- package/dist/src/dashboard/server/dashboard-server.js +1 -1
- package/dist/src/dashboard/server/dashboard-server.js.map +1 -1
- package/dist/src/hooks/auto-create-external-issue.js +11 -0
- package/dist/src/hooks/auto-create-external-issue.js.map +1 -1
- package/dist/src/init/InitFlow.d.ts.map +1 -1
- package/dist/src/init/InitFlow.js +4 -8
- package/dist/src/init/InitFlow.js.map +1 -1
- package/dist/src/init/research/src/config/ConfigManager.js +1 -1
- package/dist/src/init/research/src/config/ConfigManager.js.map +1 -1
- package/dist/src/init/research/src/config/types.d.ts +0 -1
- package/dist/src/init/research/src/config/types.d.ts.map +1 -1
- package/dist/src/init/research/src/config/types.js +1 -1
- package/dist/src/init/research/src/config/types.js.map +1 -1
- package/dist/src/locales/de/cli.json +1 -1
- package/dist/src/locales/en/cli.json +1 -1
- package/dist/src/locales/es/cli.json +1 -1
- package/dist/src/locales/fr/cli.json +1 -1
- package/dist/src/locales/ja/cli.json +1 -1
- package/dist/src/locales/ko/cli.json +1 -1
- package/dist/src/locales/pt/cli.json +1 -1
- package/dist/src/locales/ru/cli.json +1 -1
- package/dist/src/locales/zh/cli.json +1 -1
- package/dist/src/utils/resolve-increment-id.d.ts +24 -0
- package/dist/src/utils/resolve-increment-id.d.ts.map +1 -0
- package/dist/src/utils/resolve-increment-id.js +53 -0
- package/dist/src/utils/resolve-increment-id.js.map +1 -0
- package/package.json +1 -1
- package/plugins/specweave/.claude-plugin/plugin.json +2 -2
- package/plugins/specweave/commands/import-external.md +4 -4
- package/plugins/specweave/lib/integrations/github/duplicate-detector.js +1 -1
- package/plugins/specweave/lib/integrations/github/duplicate-detector.ts +6 -6
- package/plugins/specweave/lib/integrations/github/github-ac-comment-poster.js +39 -13
- package/plugins/specweave/lib/integrations/github/github-ac-comment-poster.ts +43 -13
- package/plugins/specweave/lib/integrations/github/github-body-utils.js +15 -0
- package/plugins/specweave/lib/integrations/github/github-body-utils.ts +52 -0
- package/plugins/specweave/lib/integrations/github/github-feature-sync.js +160 -136
- package/plugins/specweave/lib/integrations/github/github-feature-sync.ts +49 -29
- package/plugins/specweave/skills/increment/SKILL.md +45 -88
- package/plugins/specweave/skills/team-lead/SKILL.md +68 -4
- package/scripts/check-node-version.js +1 -1
- package/src/templates/lsp-plugin/plugin.json +1 -1
- package/dist/src/core/migration/consolidation-engine.d.ts +0 -59
- package/dist/src/core/migration/consolidation-engine.d.ts.map +0 -1
- package/dist/src/core/migration/consolidation-engine.js +0 -177
- package/dist/src/core/migration/consolidation-engine.js.map +0 -1
- package/dist/src/core/migration/spec-project-mapper.d.ts +0 -51
- package/dist/src/core/migration/spec-project-mapper.d.ts.map +0 -1
- package/dist/src/core/migration/spec-project-mapper.js +0 -299
- package/dist/src/core/migration/spec-project-mapper.js.map +0 -1
- package/dist/src/core/migration/types.d.ts +0 -132
- package/dist/src/core/migration/types.d.ts.map +0 -1
- package/dist/src/core/migration/types.js +0 -10
- package/dist/src/core/migration/types.js.map +0 -1
- package/dist/src/core/migration/umbrella-migrator.d.ts +0 -58
- package/dist/src/core/migration/umbrella-migrator.d.ts.map +0 -1
- package/dist/src/core/migration/umbrella-migrator.js +0 -617
- package/dist/src/core/migration/umbrella-migrator.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InitFlow.js","sourceRoot":"","sources":["../../../src/init/InitFlow.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"InitFlow.js","sourceRoot":"","sources":["../../../src/init/InitFlow.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,7 +18,7 @@ export class ConfigManager {
|
|
|
18
18
|
if (error.code === 'ENOENT') {
|
|
19
19
|
return {
|
|
20
20
|
version: '1.0.0',
|
|
21
|
-
project: { name: 'specweave-project', type: '
|
|
21
|
+
project: { name: 'specweave-project', type: 'multi' },
|
|
22
22
|
research: {},
|
|
23
23
|
livingDocs: { enabled: true, baseDir: '.specweave/docs' }
|
|
24
24
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfigManager.js","sourceRoot":"","sources":["../../../../../../src/init/research/src/config/ConfigManager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAA6C,MAAM,YAAY,CAAC;AAEpH,MAAM,OAAO,aAAa;IAGxB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,aAAqB,aAAa,CAAC,WAAW;QAC9D,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACvD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnC,OAAO,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC5B,OAAO;oBACL,OAAO,EAAE,OAAO;oBAChB,OAAO,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"ConfigManager.js","sourceRoot":"","sources":["../../../../../../src/init/research/src/config/ConfigManager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAA6C,MAAM,YAAY,CAAC;AAEpH,MAAM,OAAO,aAAa;IAGxB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,aAAqB,aAAa,CAAC,WAAW;QAC9D,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACvD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnC,OAAO,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC5B,OAAO;oBACL,OAAO,EAAE,OAAO;oBAChB,OAAO,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,OAAO,EAAE;oBACrD,QAAQ,EAAE,EAAE;oBACZ,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,iBAAiB,EAAE;iBAC1D,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAuB,EAAE,aAAqB,aAAa,CAAC,WAAW;QACvF,MAAM,SAAS,GAAG,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACrC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC9E,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,OAAgC,EAAE,aAAqB,aAAa,CAAC,WAAW;QAC1G,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,CAAC,QAAQ,GAAG,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,GAAG,OAAO,EAAE,CAAC;QACrD,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,oBAAoB,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC9C,CAAC;QACD,MAAM,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC/C,CAAC;;AAlCe,yBAAW,GAAG,wBAAwB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/init/research/src/config/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,oBAAoB;;;;;;kBAMpB,CAAC;AAEd,eAAO,MAAM,qBAAqB
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/init/research/src/config/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,oBAAoB;;;;;;kBAMpB,CAAC;AAEd,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;iBAWhC,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../src/init/research/src/config/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAC1B,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE;IACvC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE;IAClC,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC5C,YAAY,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC,QAAQ,EAAE,CAAC;AAEd,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../src/init/research/src/config/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAC1B,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE;IACvC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE;IAClC,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC5C,YAAY,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC,QAAQ,EAAE,CAAC;AAEd,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC;KACxB,CAAC;IACF,QAAQ,EAAE,oBAAoB;IAC9B,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;QACnB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;QACpB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;KACpB,CAAC,CAAC,QAAQ,EAAE;CACd,CAAC,CAAC"}
|
|
@@ -130,7 +130,7 @@
|
|
|
130
130
|
"header": "🎯 Nächste Schritte:",
|
|
131
131
|
"cd": "cd {{projectName}}",
|
|
132
132
|
"footer": "🚀 Bereit zum Entwickeln mit SpecWeave!",
|
|
133
|
-
"docsLink": "Dokumentation: https://
|
|
133
|
+
"docsLink": "Dokumentation: https://spec-weave.com",
|
|
134
134
|
"githubLink": "GitHub: https://github.com/anton-abyzov/specweave",
|
|
135
135
|
"claude": {
|
|
136
136
|
"step1": "Öffnen Sie Claude Code in diesem Verzeichnis",
|
|
@@ -130,7 +130,7 @@
|
|
|
130
130
|
"header": "🎯 Next steps:",
|
|
131
131
|
"cd": "cd {{projectName}}",
|
|
132
132
|
"footer": "🚀 Ready to build with SpecWeave!",
|
|
133
|
-
"docsLink": "Documentation: https://
|
|
133
|
+
"docsLink": "Documentation: https://spec-weave.com",
|
|
134
134
|
"githubLink": "GitHub: https://github.com/anton-abyzov/specweave",
|
|
135
135
|
"claude": {
|
|
136
136
|
"step1": "Open Claude Code in this directory",
|
|
@@ -130,7 +130,7 @@
|
|
|
130
130
|
"header": "🎯 Próximos pasos:",
|
|
131
131
|
"cd": "cd {{projectName}}",
|
|
132
132
|
"footer": "🚀 ¡Listo para construir con SpecWeave!",
|
|
133
|
-
"docsLink": "Documentación: https://
|
|
133
|
+
"docsLink": "Documentación: https://spec-weave.com",
|
|
134
134
|
"githubLink": "GitHub: https://github.com/anton-abyzov/specweave",
|
|
135
135
|
"claude": {
|
|
136
136
|
"step1": "Abre Claude Code en este directorio",
|
|
@@ -130,7 +130,7 @@
|
|
|
130
130
|
"header": "🎯 Prochaines etapes :",
|
|
131
131
|
"cd": "cd {{projectName}}",
|
|
132
132
|
"footer": "🚀 Pret a developper avec SpecWeave !",
|
|
133
|
-
"docsLink": "Documentation : https://
|
|
133
|
+
"docsLink": "Documentation : https://spec-weave.com",
|
|
134
134
|
"githubLink": "GitHub : https://github.com/anton-abyzov/specweave",
|
|
135
135
|
"claude": {
|
|
136
136
|
"step1": "Ouvrez Claude Code dans ce repertoire",
|
|
@@ -130,7 +130,7 @@
|
|
|
130
130
|
"header": "🎯 次のステップ:",
|
|
131
131
|
"cd": "cd {{projectName}}",
|
|
132
132
|
"footer": "🚀 SpecWeave でビルドする準備ができました!",
|
|
133
|
-
"docsLink": "ドキュメント: https://
|
|
133
|
+
"docsLink": "ドキュメント: https://spec-weave.com",
|
|
134
134
|
"githubLink": "GitHub: https://github.com/anton-abyzov/specweave",
|
|
135
135
|
"claude": {
|
|
136
136
|
"step1": "このディレクトリで Claude Code を開いてください",
|
|
@@ -130,7 +130,7 @@
|
|
|
130
130
|
"header": "🎯 다음 단계:",
|
|
131
131
|
"cd": "cd {{projectName}}",
|
|
132
132
|
"footer": "🚀 SpecWeave 로 빌드할 준비가 되었습니다!",
|
|
133
|
-
"docsLink": "문서: https://
|
|
133
|
+
"docsLink": "문서: https://spec-weave.com",
|
|
134
134
|
"githubLink": "GitHub: https://github.com/anton-abyzov/specweave",
|
|
135
135
|
"claude": {
|
|
136
136
|
"step1": "이 디렉터리에서 Claude Code 를 열어 주십시오",
|
|
@@ -130,7 +130,7 @@
|
|
|
130
130
|
"header": "🎯 Próximos passos:",
|
|
131
131
|
"cd": "cd {{projectName}}",
|
|
132
132
|
"footer": "🚀 Pronto para construir com SpecWeave!",
|
|
133
|
-
"docsLink": "Documentação: https://
|
|
133
|
+
"docsLink": "Documentação: https://spec-weave.com",
|
|
134
134
|
"githubLink": "GitHub: https://github.com/anton-abyzov/specweave",
|
|
135
135
|
"claude": {
|
|
136
136
|
"step1": "Abra Claude Code neste diretório",
|
|
@@ -130,7 +130,7 @@
|
|
|
130
130
|
"header": "🎯 Следующие шаги:",
|
|
131
131
|
"cd": "cd {{projectName}}",
|
|
132
132
|
"footer": "🚀 Готов к разработке с SpecWeave!",
|
|
133
|
-
"docsLink": "Документация: https://
|
|
133
|
+
"docsLink": "Документация: https://spec-weave.com",
|
|
134
134
|
"githubLink": "GitHub: https://github.com/anton-abyzov/specweave",
|
|
135
135
|
"claude": {
|
|
136
136
|
"step1": "Откройте Claude Code в этой директории",
|
|
@@ -130,7 +130,7 @@
|
|
|
130
130
|
"header": "🎯 后续步骤:",
|
|
131
131
|
"cd": "cd {{projectName}}",
|
|
132
132
|
"footer": "🚀 准备好使用 SpecWeave 构建了!",
|
|
133
|
-
"docsLink": "文档:https://
|
|
133
|
+
"docsLink": "文档:https://spec-weave.com",
|
|
134
134
|
"githubLink": "GitHub:https://github.com/anton-abyzov/specweave",
|
|
135
135
|
"claude": {
|
|
136
136
|
"step1": "在此目录中打开 Claude Code",
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve Increment ID Utility
|
|
3
|
+
*
|
|
4
|
+
* Resolves a potentially short increment ID (e.g., "0589") to the full
|
|
5
|
+
* directory name (e.g., "0589-cli-complete-improvements") by matching
|
|
6
|
+
* against .specweave/increments/ entries.
|
|
7
|
+
*
|
|
8
|
+
* Supports:
|
|
9
|
+
* - Exact match: "0589-cli-complete-improvements" → same
|
|
10
|
+
* - Prefix match: "0589" → "0589-cli-complete-improvements"
|
|
11
|
+
* - Ambiguous match: "0573" → ["0573-fix-a", "0573-fix-b"]
|
|
12
|
+
* - No match: "9999" → null
|
|
13
|
+
*
|
|
14
|
+
* @module utils/resolve-increment-id
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Resolve a potentially short increment ID to the full directory name.
|
|
18
|
+
*
|
|
19
|
+
* @param incrementId - Short or full increment ID
|
|
20
|
+
* @param projectRoot - Project root directory containing .specweave/
|
|
21
|
+
* @returns Full increment directory name (string), array of matches (string[]) if ambiguous, or null if not found
|
|
22
|
+
*/
|
|
23
|
+
export declare function resolveIncrementId(incrementId: string, projectRoot: string): string | string[] | null;
|
|
24
|
+
//# sourceMappingURL=resolve-increment-id.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-increment-id.d.ts","sourceRoot":"","sources":["../../../src/utils/resolve-increment-id.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAiC1B"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve Increment ID Utility
|
|
3
|
+
*
|
|
4
|
+
* Resolves a potentially short increment ID (e.g., "0589") to the full
|
|
5
|
+
* directory name (e.g., "0589-cli-complete-improvements") by matching
|
|
6
|
+
* against .specweave/increments/ entries.
|
|
7
|
+
*
|
|
8
|
+
* Supports:
|
|
9
|
+
* - Exact match: "0589-cli-complete-improvements" → same
|
|
10
|
+
* - Prefix match: "0589" → "0589-cli-complete-improvements"
|
|
11
|
+
* - Ambiguous match: "0573" → ["0573-fix-a", "0573-fix-b"]
|
|
12
|
+
* - No match: "9999" → null
|
|
13
|
+
*
|
|
14
|
+
* @module utils/resolve-increment-id
|
|
15
|
+
*/
|
|
16
|
+
import * as fs from 'fs';
|
|
17
|
+
import * as path from 'path';
|
|
18
|
+
/**
|
|
19
|
+
* Resolve a potentially short increment ID to the full directory name.
|
|
20
|
+
*
|
|
21
|
+
* @param incrementId - Short or full increment ID
|
|
22
|
+
* @param projectRoot - Project root directory containing .specweave/
|
|
23
|
+
* @returns Full increment directory name (string), array of matches (string[]) if ambiguous, or null if not found
|
|
24
|
+
*/
|
|
25
|
+
export function resolveIncrementId(incrementId, projectRoot) {
|
|
26
|
+
const incrementsDir = path.join(projectRoot, '.specweave', 'increments');
|
|
27
|
+
if (!fs.existsSync(incrementsDir)) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
// Check for exact match first
|
|
31
|
+
const exactPath = path.join(incrementsDir, incrementId);
|
|
32
|
+
if (fs.existsSync(exactPath)) {
|
|
33
|
+
return incrementId;
|
|
34
|
+
}
|
|
35
|
+
// Try prefix match
|
|
36
|
+
let entries;
|
|
37
|
+
try {
|
|
38
|
+
entries = fs.readdirSync(incrementsDir);
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
const matches = entries.filter((e) => e.startsWith(incrementId));
|
|
44
|
+
if (matches.length === 0) {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
if (matches.length === 1) {
|
|
48
|
+
return matches[0];
|
|
49
|
+
}
|
|
50
|
+
// Ambiguous — multiple matches
|
|
51
|
+
return matches.sort();
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=resolve-increment-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-increment-id.js","sourceRoot":"","sources":["../../../src/utils/resolve-increment-id.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAChC,WAAmB,EACnB,WAAmB;IAEnB,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;IAEzE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,8BAA8B;IAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;IACxD,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,mBAAmB;IACnB,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;IAEjE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,+BAA+B;IAC/B,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;AACxB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "specweave",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.522",
|
|
4
4
|
"description": "100+ domain-expert AI skills — PM, Architect, Frontend, QA, Security and more. Skills learn your team's patterns permanently. Spec-first planning, autonomous execution, multi-agent teams, synced to GitHub/JIRA. Claude Code, Cursor, Copilot & more.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
"version": "1.0.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "SpecWeave Team",
|
|
7
|
-
"url": "https://
|
|
7
|
+
"url": "https://spec-weave.com"
|
|
8
8
|
},
|
|
9
|
-
"homepage": "https://
|
|
9
|
+
"homepage": "https://spec-weave.com",
|
|
10
10
|
"repository": "https://github.com/anton-abyzov/specweave",
|
|
11
11
|
"license": "MIT",
|
|
12
12
|
"keywords": [
|
|
@@ -451,10 +451,10 @@ No tasks defined.
|
|
|
451
451
|
## See Also
|
|
452
452
|
|
|
453
453
|
- `specweave init` - Initial project setup with external tool import
|
|
454
|
-
- [External Import Guide](https://
|
|
455
|
-
- [GitHub Integration](https://
|
|
456
|
-
- [JIRA Integration](https://
|
|
457
|
-
- [Azure DevOps Integration](https://
|
|
454
|
+
- [External Import Guide](https://spec-weave.com/docs/guides/external-import)
|
|
455
|
+
- [GitHub Integration](https://spec-weave.com/docs/integrations/github)
|
|
456
|
+
- [JIRA Integration](https://spec-weave.com/docs/integrations/jira)
|
|
457
|
+
- [Azure DevOps Integration](https://spec-weave.com/docs/integrations/ado)
|
|
458
458
|
|
|
459
459
|
---
|
|
460
460
|
|
|
@@ -326,7 +326,7 @@ The original issue (#${keepIssueNumber}) should be used for tracking instead.
|
|
|
326
326
|
}
|
|
327
327
|
}
|
|
328
328
|
let duplicatesClosed = 0;
|
|
329
|
-
if (process.env.
|
|
329
|
+
if (process.env.SPECWEAVE_SKIP_VERIFY_DUPLICATES !== "1") {
|
|
330
330
|
console.log(`
|
|
331
331
|
\u2501\u2501\u2501 PHASE 3: VERIFICATION \u2501\u2501\u2501`);
|
|
332
332
|
const verification = await this.verifyAfterCreate(titlePattern, 1, repo);
|
|
@@ -480,13 +480,13 @@ The original issue (#${keepIssueNumber}) should be used for tracking instead.
|
|
|
480
480
|
}
|
|
481
481
|
}
|
|
482
482
|
|
|
483
|
-
// PHASE 3: Verification —
|
|
484
|
-
// Phase 1
|
|
485
|
-
//
|
|
486
|
-
//
|
|
483
|
+
// PHASE 3: Verification — ENABLED BY DEFAULT (FS-587)
|
|
484
|
+
// Phase 1 searches before create, but Phase 3 catches race conditions from
|
|
485
|
+
// parallel sync sessions. Disable with SPECWEAVE_SKIP_VERIFY_DUPLICATES=1
|
|
486
|
+
// if you want to reduce API calls at the cost of duplicate safety.
|
|
487
487
|
let duplicatesClosed = 0;
|
|
488
488
|
|
|
489
|
-
if (process.env.
|
|
489
|
+
if (process.env.SPECWEAVE_SKIP_VERIFY_DUPLICATES !== '1') {
|
|
490
490
|
console.log(`\n━━━ PHASE 3: VERIFICATION ━━━`);
|
|
491
491
|
const verification = await this.verifyAfterCreate(titlePattern, 1, repo);
|
|
492
492
|
|
|
@@ -510,7 +510,7 @@ The original issue (#${keepIssueNumber}) should be used for tracking instead.
|
|
|
510
510
|
} else if (verification.success) {
|
|
511
511
|
console.log(` ✅ No duplicates detected!`);
|
|
512
512
|
}
|
|
513
|
-
} // end
|
|
513
|
+
} // end SPECWEAVE_SKIP_VERIFY_DUPLICATES guard
|
|
514
514
|
|
|
515
515
|
// Final Summary
|
|
516
516
|
console.log(`\n✅ Issue creation complete!`);
|
|
@@ -2,6 +2,7 @@ import { readFile } from "fs/promises";
|
|
|
2
2
|
import { existsSync } from "fs";
|
|
3
3
|
import * as path from "path";
|
|
4
4
|
import { execFileNoThrow } from "../../../../../src/utils/execFileNoThrow.js";
|
|
5
|
+
import { buildFingerprint, extractFingerprint } from "./github-body-utils.js";
|
|
5
6
|
async function postACProgressComments(incrementId, affectedUSIds, specPath, options) {
|
|
6
7
|
const result = { posted: [], errors: [] };
|
|
7
8
|
if (affectedUSIds.length === 0) {
|
|
@@ -28,19 +29,44 @@ async function postACProgressComments(incrementId, affectedUSIds, specPath, opti
|
|
|
28
29
|
const acStates = parseACStatesForUS(content, usId);
|
|
29
30
|
const allComplete = acStates.length > 0 && acStates.every((ac) => ac.completed);
|
|
30
31
|
if (!allComplete) {
|
|
31
|
-
const
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
32
|
+
const total = acStates.length;
|
|
33
|
+
const completed = acStates.filter((ac) => ac.completed).length;
|
|
34
|
+
const currentFingerprint = buildFingerprint(completed, total);
|
|
35
|
+
let shouldPost = true;
|
|
36
|
+
try {
|
|
37
|
+
const commentsResult = await execFileNoThrow(
|
|
38
|
+
"gh",
|
|
39
|
+
[
|
|
40
|
+
"api",
|
|
41
|
+
`repos/${repoSlug}/issues/${link.issueNumber}/comments`,
|
|
42
|
+
"--jq",
|
|
43
|
+
".[-1].body"
|
|
44
|
+
],
|
|
45
|
+
env ? { env } : {}
|
|
46
|
+
);
|
|
47
|
+
if (commentsResult.success && commentsResult.stdout.trim()) {
|
|
48
|
+
const lastFingerprint = extractFingerprint(commentsResult.stdout);
|
|
49
|
+
if (lastFingerprint === `${completed}/${total}`) {
|
|
50
|
+
shouldPost = false;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
} catch {
|
|
54
|
+
}
|
|
55
|
+
if (shouldPost) {
|
|
56
|
+
const commentBody = buildProgressCommentForUS(incrementId, usId, acStates) + currentFingerprint + "\n";
|
|
57
|
+
const execResult = await execFileNoThrow(
|
|
58
|
+
"gh",
|
|
59
|
+
["issue", "comment", String(link.issueNumber), "--body", commentBody, "-R", repoSlug],
|
|
60
|
+
env ? { env } : {}
|
|
61
|
+
);
|
|
62
|
+
if (execResult.success) {
|
|
63
|
+
result.posted.push({ usId, issueNumber: link.issueNumber });
|
|
64
|
+
} else {
|
|
65
|
+
result.errors.push({
|
|
66
|
+
usId,
|
|
67
|
+
error: execResult.stderr || "Unknown error posting comment"
|
|
68
|
+
});
|
|
69
|
+
}
|
|
44
70
|
}
|
|
45
71
|
}
|
|
46
72
|
if (acStates.length > 0) {
|
|
@@ -12,6 +12,7 @@ import { readFile } from 'fs/promises';
|
|
|
12
12
|
import { existsSync } from 'fs';
|
|
13
13
|
import * as path from 'path';
|
|
14
14
|
import { execFileNoThrow } from '../../../../../src/utils/execFileNoThrow.js';
|
|
15
|
+
import { buildFingerprint, extractFingerprint } from './github-body-utils.js';
|
|
15
16
|
|
|
16
17
|
export interface CommentPostOptions {
|
|
17
18
|
owner: string;
|
|
@@ -87,21 +88,50 @@ export async function postACProgressComments(
|
|
|
87
88
|
const allComplete = acStates.length > 0 && acStates.every(ac => ac.completed);
|
|
88
89
|
|
|
89
90
|
if (!allComplete) {
|
|
90
|
-
const
|
|
91
|
+
const total = acStates.length;
|
|
92
|
+
const completed = acStates.filter(ac => ac.completed).length;
|
|
93
|
+
const currentFingerprint = buildFingerprint(completed, total);
|
|
91
94
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
95
|
+
// Dedup: fetch last comment and check fingerprint before posting
|
|
96
|
+
let shouldPost = true;
|
|
97
|
+
try {
|
|
98
|
+
const commentsResult = await execFileNoThrow(
|
|
99
|
+
'gh',
|
|
100
|
+
[
|
|
101
|
+
'api',
|
|
102
|
+
`repos/${repoSlug}/issues/${link.issueNumber}/comments`,
|
|
103
|
+
'--jq', '.[-1].body',
|
|
104
|
+
],
|
|
105
|
+
env ? { env } : {},
|
|
106
|
+
);
|
|
107
|
+
if (commentsResult.success && commentsResult.stdout.trim()) {
|
|
108
|
+
const lastFingerprint = extractFingerprint(commentsResult.stdout);
|
|
109
|
+
if (lastFingerprint === `${completed}/${total}`) {
|
|
110
|
+
shouldPost = false;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
} catch {
|
|
114
|
+
// If comment fetch fails, proceed with posting
|
|
115
|
+
}
|
|
97
116
|
|
|
98
|
-
if (
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
117
|
+
if (shouldPost) {
|
|
118
|
+
const commentBody = buildProgressCommentForUS(incrementId, usId, acStates)
|
|
119
|
+
+ currentFingerprint + '\n';
|
|
120
|
+
|
|
121
|
+
const execResult = await execFileNoThrow(
|
|
122
|
+
'gh',
|
|
123
|
+
['issue', 'comment', String(link.issueNumber), '--body', commentBody, '-R', repoSlug],
|
|
124
|
+
env ? { env } : {},
|
|
125
|
+
);
|
|
126
|
+
|
|
127
|
+
if (execResult.success) {
|
|
128
|
+
result.posted.push({ usId, issueNumber: link.issueNumber });
|
|
129
|
+
} else {
|
|
130
|
+
result.errors.push({
|
|
131
|
+
usId,
|
|
132
|
+
error: execResult.stderr || 'Unknown error posting comment',
|
|
133
|
+
});
|
|
134
|
+
}
|
|
105
135
|
}
|
|
106
136
|
}
|
|
107
137
|
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
function buildFingerprint(completed, total) {
|
|
2
|
+
return `<!-- sw-progress:${completed}/${total} -->`;
|
|
3
|
+
}
|
|
4
|
+
function extractFingerprint(text) {
|
|
5
|
+
const match = text.match(/<!-- sw-progress:(\d+\/\d+) -->/);
|
|
6
|
+
return match ? match[1] : null;
|
|
7
|
+
}
|
|
8
|
+
function normalizeIssueBody(body) {
|
|
9
|
+
return body.split("\n").map((line) => line.trimEnd()).join("\n").replace(/\n{3,}/g, "\n\n").trim();
|
|
10
|
+
}
|
|
11
|
+
export {
|
|
12
|
+
buildFingerprint,
|
|
13
|
+
extractFingerprint,
|
|
14
|
+
normalizeIssueBody
|
|
15
|
+
};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared utilities for GitHub issue body fingerprinting, extraction,
|
|
3
|
+
* and normalization. Used by the AC comment poster and feature sync
|
|
4
|
+
* to deduplicate progress comments and skip no-op edits.
|
|
5
|
+
*
|
|
6
|
+
* Fingerprint format: `<!-- sw-progress:N/M -->` (HTML comment,
|
|
7
|
+
* invisible in rendered Markdown, consistent with JIRA fingerprint
|
|
8
|
+
* pattern in jira-status-sync.ts).
|
|
9
|
+
*
|
|
10
|
+
* @module github-body-utils
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Build an HTML comment fingerprint for the current AC progress state.
|
|
15
|
+
*
|
|
16
|
+
* @param completed - Number of completed acceptance criteria
|
|
17
|
+
* @param total - Total number of acceptance criteria
|
|
18
|
+
* @returns HTML comment string, e.g. `<!-- sw-progress:3/5 -->`
|
|
19
|
+
*/
|
|
20
|
+
export function buildFingerprint(completed: number, total: number): string {
|
|
21
|
+
return `<!-- sw-progress:${completed}/${total} -->`;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Extract the progress fingerprint value from a block of text.
|
|
26
|
+
* Returns the `N/M` portion if found, or `null` if no fingerprint is present.
|
|
27
|
+
*
|
|
28
|
+
* @param text - Text to search (e.g. a GitHub comment body)
|
|
29
|
+
* @returns The fingerprint value like `"3/5"`, or `null`
|
|
30
|
+
*/
|
|
31
|
+
export function extractFingerprint(text: string): string | null {
|
|
32
|
+
const match = text.match(/<!-- sw-progress:(\d+\/\d+) -->/);
|
|
33
|
+
return match ? match[1] : null;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Normalize a GitHub issue body for comparison purposes.
|
|
38
|
+
* - Strips trailing whitespace from each line
|
|
39
|
+
* - Collapses multiple consecutive blank lines into a single blank line
|
|
40
|
+
* - Trims leading/trailing whitespace from the entire body
|
|
41
|
+
*
|
|
42
|
+
* @param body - Raw issue body text
|
|
43
|
+
* @returns Normalized body string
|
|
44
|
+
*/
|
|
45
|
+
export function normalizeIssueBody(body: string): string {
|
|
46
|
+
return body
|
|
47
|
+
.split('\n')
|
|
48
|
+
.map(line => line.trimEnd())
|
|
49
|
+
.join('\n')
|
|
50
|
+
.replace(/\n{3,}/g, '\n\n')
|
|
51
|
+
.trim();
|
|
52
|
+
}
|