cc-agentic-framework 1.14.1
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/README.md +686 -0
- package/bin/agentic-framework +2 -0
- package/bin/mcp-server +14 -0
- package/dist/__mocks__/chalk.d.ts +11 -0
- package/dist/__mocks__/chalk.d.ts.map +1 -0
- package/dist/__mocks__/chalk.js +20 -0
- package/dist/__mocks__/chalk.js.map +1 -0
- package/dist/__mocks__/ora.d.ts +20 -0
- package/dist/__mocks__/ora.d.ts.map +1 -0
- package/dist/__mocks__/ora.js +52 -0
- package/dist/__mocks__/ora.js.map +1 -0
- package/dist/commands/add.d.ts +6 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +105 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/agent/index.d.ts +11 -0
- package/dist/commands/agent/index.d.ts.map +1 -0
- package/dist/commands/agent/index.js +22 -0
- package/dist/commands/agent/index.js.map +1 -0
- package/dist/commands/agent/list.d.ts +8 -0
- package/dist/commands/agent/list.d.ts.map +1 -0
- package/dist/commands/agent/list.js +53 -0
- package/dist/commands/agent/list.js.map +1 -0
- package/dist/commands/agent/run.d.ts +9 -0
- package/dist/commands/agent/run.d.ts.map +1 -0
- package/dist/commands/agent/run.js +180 -0
- package/dist/commands/agent/run.js.map +1 -0
- package/dist/commands/agent/show.d.ts +8 -0
- package/dist/commands/agent/show.d.ts.map +1 -0
- package/dist/commands/agent/show.js +109 -0
- package/dist/commands/agent/show.js.map +1 -0
- package/dist/commands/backlog/create-ticket.d.ts +19 -0
- package/dist/commands/backlog/create-ticket.d.ts.map +1 -0
- package/dist/commands/backlog/create-ticket.js +168 -0
- package/dist/commands/backlog/create-ticket.js.map +1 -0
- package/dist/commands/backlog/import-jira.d.ts +32 -0
- package/dist/commands/backlog/import-jira.d.ts.map +1 -0
- package/dist/commands/backlog/import-jira.js +126 -0
- package/dist/commands/backlog/import-jira.js.map +1 -0
- package/dist/commands/backlog/migrate-milestones.d.ts +21 -0
- package/dist/commands/backlog/migrate-milestones.d.ts.map +1 -0
- package/dist/commands/backlog/migrate-milestones.js +155 -0
- package/dist/commands/backlog/migrate-milestones.js.map +1 -0
- package/dist/commands/backlog/update-fields.d.ts +36 -0
- package/dist/commands/backlog/update-fields.d.ts.map +1 -0
- package/dist/commands/backlog/update-fields.js +251 -0
- package/dist/commands/backlog/update-fields.js.map +1 -0
- package/dist/commands/backlog/validate-enhanced.d.ts +19 -0
- package/dist/commands/backlog/validate-enhanced.d.ts.map +1 -0
- package/dist/commands/backlog/validate-enhanced.js +282 -0
- package/dist/commands/backlog/validate-enhanced.js.map +1 -0
- package/dist/commands/backlog/validate.d.ts +19 -0
- package/dist/commands/backlog/validate.d.ts.map +1 -0
- package/dist/commands/backlog/validate.js +283 -0
- package/dist/commands/backlog/validate.js.map +1 -0
- package/dist/commands/build.d.ts +20 -0
- package/dist/commands/build.d.ts.map +1 -0
- package/dist/commands/build.js +116 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/bump-version.d.ts +61 -0
- package/dist/commands/bump-version.d.ts.map +1 -0
- package/dist/commands/bump-version.js +618 -0
- package/dist/commands/bump-version.js.map +1 -0
- package/dist/commands/confluence/create-page.d.ts +11 -0
- package/dist/commands/confluence/create-page.d.ts.map +1 -0
- package/dist/commands/confluence/create-page.js +72 -0
- package/dist/commands/confluence/create-page.js.map +1 -0
- package/dist/commands/confluence/fetch-page.d.ts +11 -0
- package/dist/commands/confluence/fetch-page.d.ts.map +1 -0
- package/dist/commands/confluence/fetch-page.js +64 -0
- package/dist/commands/confluence/fetch-page.js.map +1 -0
- package/dist/commands/confluence/import-reports.d.ts +12 -0
- package/dist/commands/confluence/import-reports.d.ts.map +1 -0
- package/dist/commands/confluence/import-reports.js +68 -0
- package/dist/commands/confluence/import-reports.js.map +1 -0
- package/dist/commands/confluence/validate.d.ts +23 -0
- package/dist/commands/confluence/validate.d.ts.map +1 -0
- package/dist/commands/confluence/validate.js +272 -0
- package/dist/commands/confluence/validate.js.map +1 -0
- package/dist/commands/create-agent.d.ts +8 -0
- package/dist/commands/create-agent.d.ts.map +1 -0
- package/dist/commands/create-agent.js +104 -0
- package/dist/commands/create-agent.js.map +1 -0
- package/dist/commands/create-module.d.ts +8 -0
- package/dist/commands/create-module.d.ts.map +1 -0
- package/dist/commands/create-module.js +123 -0
- package/dist/commands/create-module.js.map +1 -0
- package/dist/commands/create-skill.d.ts +8 -0
- package/dist/commands/create-skill.d.ts.map +1 -0
- package/dist/commands/create-skill.js +108 -0
- package/dist/commands/create-skill.js.map +1 -0
- package/dist/commands/dev.d.ts +21 -0
- package/dist/commands/dev.d.ts.map +1 -0
- package/dist/commands/dev.js +304 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/generate-agents.d.ts +19 -0
- package/dist/commands/generate-agents.d.ts.map +1 -0
- package/dist/commands/generate-agents.js +146 -0
- package/dist/commands/generate-agents.js.map +1 -0
- package/dist/commands/generate-commands.d.ts +13 -0
- package/dist/commands/generate-commands.d.ts.map +1 -0
- package/dist/commands/generate-commands.js +229 -0
- package/dist/commands/generate-commands.js.map +1 -0
- package/dist/commands/info.d.ts +2 -0
- package/dist/commands/info.d.ts.map +1 -0
- package/dist/commands/info.js +83 -0
- package/dist/commands/info.js.map +1 -0
- package/dist/commands/init.d.ts +27 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +740 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/jira/export.d.ts +19 -0
- package/dist/commands/jira/export.d.ts.map +1 -0
- package/dist/commands/jira/export.js +212 -0
- package/dist/commands/jira/export.js.map +1 -0
- package/dist/commands/jira/sync.d.ts +20 -0
- package/dist/commands/jira/sync.d.ts.map +1 -0
- package/dist/commands/jira/sync.js +242 -0
- package/dist/commands/jira/sync.js.map +1 -0
- package/dist/commands/list.d.ts +6 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +51 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/mcp/check.d.ts +11 -0
- package/dist/commands/mcp/check.d.ts.map +1 -0
- package/dist/commands/mcp/check.js +71 -0
- package/dist/commands/mcp/check.js.map +1 -0
- package/dist/commands/mcp/index.d.ts +15 -0
- package/dist/commands/mcp/index.d.ts.map +1 -0
- package/dist/commands/mcp/index.js +28 -0
- package/dist/commands/mcp/index.js.map +1 -0
- package/dist/commands/mcp/seed.d.ts +11 -0
- package/dist/commands/mcp/seed.d.ts.map +1 -0
- package/dist/commands/mcp/seed.js +222 -0
- package/dist/commands/mcp/seed.js.map +1 -0
- package/dist/commands/mcp/setup.d.ts +13 -0
- package/dist/commands/mcp/setup.d.ts.map +1 -0
- package/dist/commands/mcp/setup.js +387 -0
- package/dist/commands/mcp/setup.js.map +1 -0
- package/dist/commands/mcp/status.d.ts +11 -0
- package/dist/commands/mcp/status.d.ts.map +1 -0
- package/dist/commands/mcp/status.js +126 -0
- package/dist/commands/mcp/status.js.map +1 -0
- package/dist/commands/openclaw/export.d.ts +9 -0
- package/dist/commands/openclaw/export.d.ts.map +1 -0
- package/dist/commands/openclaw/export.js +72 -0
- package/dist/commands/openclaw/export.js.map +1 -0
- package/dist/commands/openclaw/index.d.ts +6 -0
- package/dist/commands/openclaw/index.d.ts.map +1 -0
- package/dist/commands/openclaw/index.js +11 -0
- package/dist/commands/openclaw/index.js.map +1 -0
- package/dist/commands/planning/create-plan.d.ts +21 -0
- package/dist/commands/planning/create-plan.d.ts.map +1 -0
- package/dist/commands/planning/create-plan.js +74 -0
- package/dist/commands/planning/create-plan.js.map +1 -0
- package/dist/commands/planning/validate-plan.d.ts +19 -0
- package/dist/commands/planning/validate-plan.d.ts.map +1 -0
- package/dist/commands/planning/validate-plan.js +276 -0
- package/dist/commands/planning/validate-plan.js.map +1 -0
- package/dist/commands/remove.d.ts +8 -0
- package/dist/commands/remove.d.ts.map +1 -0
- package/dist/commands/remove.js +157 -0
- package/dist/commands/remove.js.map +1 -0
- package/dist/commands/routes.d.ts +16 -0
- package/dist/commands/routes.d.ts.map +1 -0
- package/dist/commands/routes.js +153 -0
- package/dist/commands/routes.js.map +1 -0
- package/dist/commands/skill/deploy.d.ts +12 -0
- package/dist/commands/skill/deploy.d.ts.map +1 -0
- package/dist/commands/skill/deploy.js +327 -0
- package/dist/commands/skill/deploy.js.map +1 -0
- package/dist/commands/skill/index.d.ts +6 -0
- package/dist/commands/skill/index.d.ts.map +1 -0
- package/dist/commands/skill/index.js +20 -0
- package/dist/commands/skill/index.js.map +1 -0
- package/dist/commands/skill/info.d.ts +11 -0
- package/dist/commands/skill/info.d.ts.map +1 -0
- package/dist/commands/skill/info.js +260 -0
- package/dist/commands/skill/info.js.map +1 -0
- package/dist/commands/skill/list.d.ts +11 -0
- package/dist/commands/skill/list.d.ts.map +1 -0
- package/dist/commands/skill/list.js +242 -0
- package/dist/commands/skill/list.js.map +1 -0
- package/dist/commands/skill/pull.d.ts +12 -0
- package/dist/commands/skill/pull.d.ts.map +1 -0
- package/dist/commands/skill/pull.js +133 -0
- package/dist/commands/skill/pull.js.map +1 -0
- package/dist/commands/skill/remove.d.ts +12 -0
- package/dist/commands/skill/remove.d.ts.map +1 -0
- package/dist/commands/skill/remove.js +99 -0
- package/dist/commands/skill/remove.js.map +1 -0
- package/dist/commands/status.d.ts +11 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +195 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/sync.d.ts +20 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +517 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/template/index.d.ts +12 -0
- package/dist/commands/template/index.d.ts.map +1 -0
- package/dist/commands/template/index.js +24 -0
- package/dist/commands/template/index.js.map +1 -0
- package/dist/commands/template/info.d.ts +8 -0
- package/dist/commands/template/info.d.ts.map +1 -0
- package/dist/commands/template/info.js +125 -0
- package/dist/commands/template/info.js.map +1 -0
- package/dist/commands/template/list.d.ts +8 -0
- package/dist/commands/template/list.d.ts.map +1 -0
- package/dist/commands/template/list.js +77 -0
- package/dist/commands/template/list.js.map +1 -0
- package/dist/commands/template/render.d.ts +8 -0
- package/dist/commands/template/render.d.ts.map +1 -0
- package/dist/commands/template/render.js +115 -0
- package/dist/commands/template/render.js.map +1 -0
- package/dist/commands/template/validate.d.ts +8 -0
- package/dist/commands/template/validate.d.ts.map +1 -0
- package/dist/commands/template/validate.js +137 -0
- package/dist/commands/template/validate.js.map +1 -0
- package/dist/commands/test.d.ts +40 -0
- package/dist/commands/test.d.ts.map +1 -0
- package/dist/commands/test.js +240 -0
- package/dist/commands/test.js.map +1 -0
- package/dist/commands/update.d.ts +12 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +248 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/validate.d.ts +12 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +355 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/commands/writer/analyze.d.ts +19 -0
- package/dist/commands/writer/analyze.d.ts.map +1 -0
- package/dist/commands/writer/analyze.js +210 -0
- package/dist/commands/writer/analyze.js.map +1 -0
- package/dist/commands/writer/build.d.ts +21 -0
- package/dist/commands/writer/build.d.ts.map +1 -0
- package/dist/commands/writer/build.js +241 -0
- package/dist/commands/writer/build.js.map +1 -0
- package/dist/commands/writer/create-chapter.d.ts +19 -0
- package/dist/commands/writer/create-chapter.d.ts.map +1 -0
- package/dist/commands/writer/create-chapter.js +260 -0
- package/dist/commands/writer/create-chapter.js.map +1 -0
- package/dist/commands/writer/create-character.d.ts +19 -0
- package/dist/commands/writer/create-character.d.ts.map +1 -0
- package/dist/commands/writer/create-character.js +263 -0
- package/dist/commands/writer/create-character.js.map +1 -0
- package/dist/commands/writer/create-part.d.ts +19 -0
- package/dist/commands/writer/create-part.d.ts.map +1 -0
- package/dist/commands/writer/create-part.js +239 -0
- package/dist/commands/writer/create-part.js.map +1 -0
- package/dist/commands/writer/create-scene.d.ts +19 -0
- package/dist/commands/writer/create-scene.d.ts.map +1 -0
- package/dist/commands/writer/create-scene.js +286 -0
- package/dist/commands/writer/create-scene.js.map +1 -0
- package/dist/commands/writer/export.d.ts +21 -0
- package/dist/commands/writer/export.d.ts.map +1 -0
- package/dist/commands/writer/export.js +230 -0
- package/dist/commands/writer/export.js.map +1 -0
- package/dist/commands/writer/init.d.ts +19 -0
- package/dist/commands/writer/init.d.ts.map +1 -0
- package/dist/commands/writer/init.js +227 -0
- package/dist/commands/writer/init.js.map +1 -0
- package/dist/commands/writer/lib/immutability-utils.d.ts +82 -0
- package/dist/commands/writer/lib/immutability-utils.d.ts.map +1 -0
- package/dist/commands/writer/lib/immutability-utils.js +253 -0
- package/dist/commands/writer/lib/immutability-utils.js.map +1 -0
- package/dist/commands/writer/lib/lock-utils.d.ts +48 -0
- package/dist/commands/writer/lib/lock-utils.d.ts.map +1 -0
- package/dist/commands/writer/lib/lock-utils.js +122 -0
- package/dist/commands/writer/lib/lock-utils.js.map +1 -0
- package/dist/commands/writer/lock-fact.d.ts +20 -0
- package/dist/commands/writer/lock-fact.d.ts.map +1 -0
- package/dist/commands/writer/lock-fact.js +174 -0
- package/dist/commands/writer/lock-fact.js.map +1 -0
- package/dist/commands/writer/unlock-fact.d.ts +20 -0
- package/dist/commands/writer/unlock-fact.d.ts.map +1 -0
- package/dist/commands/writer/unlock-fact.js +160 -0
- package/dist/commands/writer/unlock-fact.js.map +1 -0
- package/dist/commands/writer/validate-immutability.d.ts +19 -0
- package/dist/commands/writer/validate-immutability.d.ts.map +1 -0
- package/dist/commands/writer/validate-immutability.js +148 -0
- package/dist/commands/writer/validate-immutability.js.map +1 -0
- package/dist/commands/writer/validate.d.ts +20 -0
- package/dist/commands/writer/validate.d.ts.map +1 -0
- package/dist/commands/writer/validate.js +370 -0
- package/dist/commands/writer/validate.js.map +1 -0
- package/dist/hooks/claude-folder-protection.d.ts +23 -0
- package/dist/hooks/claude-folder-protection.d.ts.map +1 -0
- package/dist/hooks/claude-folder-protection.js +98 -0
- package/dist/hooks/claude-folder-protection.js.map +1 -0
- package/dist/hooks/index.d.ts +24 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +24 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/post-write-validate.d.ts +14 -0
- package/dist/hooks/post-write-validate.d.ts.map +1 -0
- package/dist/hooks/post-write-validate.js +142 -0
- package/dist/hooks/post-write-validate.js.map +1 -0
- package/dist/hooks/pre-commit-skill-reminder.d.ts +21 -0
- package/dist/hooks/pre-commit-skill-reminder.d.ts.map +1 -0
- package/dist/hooks/pre-commit-skill-reminder.js +142 -0
- package/dist/hooks/pre-commit-skill-reminder.js.map +1 -0
- package/dist/hooks/pre-write-quality.d.ts +14 -0
- package/dist/hooks/pre-write-quality.d.ts.map +1 -0
- package/dist/hooks/pre-write-quality.js +114 -0
- package/dist/hooks/pre-write-quality.js.map +1 -0
- package/dist/hooks/skill-reminder.d.ts +22 -0
- package/dist/hooks/skill-reminder.d.ts.map +1 -0
- package/dist/hooks/skill-reminder.js +285 -0
- package/dist/hooks/skill-reminder.js.map +1 -0
- package/dist/hooks/stop-quality-check.d.ts +14 -0
- package/dist/hooks/stop-quality-check.d.ts.map +1 -0
- package/dist/hooks/stop-quality-check.js +122 -0
- package/dist/hooks/stop-quality-check.js.map +1 -0
- package/dist/hooks/subagent-context-loader.d.ts +12 -0
- package/dist/hooks/subagent-context-loader.d.ts.map +1 -0
- package/dist/hooks/subagent-context-loader.js +124 -0
- package/dist/hooks/subagent-context-loader.js.map +1 -0
- package/dist/hooks/types.d.ts +89 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/hooks/types.js +57 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +256 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/affected-modules.d.ts +104 -0
- package/dist/lib/affected-modules.d.ts.map +1 -0
- package/dist/lib/affected-modules.js +283 -0
- package/dist/lib/affected-modules.js.map +1 -0
- package/dist/lib/agent-generator.d.ts +137 -0
- package/dist/lib/agent-generator.d.ts.map +1 -0
- package/dist/lib/agent-generator.js +274 -0
- package/dist/lib/agent-generator.js.map +1 -0
- package/dist/lib/backlog/__mocks__/prompt-utils.d.ts +5 -0
- package/dist/lib/backlog/__mocks__/prompt-utils.d.ts.map +1 -0
- package/dist/lib/backlog/__mocks__/prompt-utils.js +5 -0
- package/dist/lib/backlog/__mocks__/prompt-utils.js.map +1 -0
- package/dist/lib/backlog/content-parser.d.ts +83 -0
- package/dist/lib/backlog/content-parser.d.ts.map +1 -0
- package/dist/lib/backlog/content-parser.js +284 -0
- package/dist/lib/backlog/content-parser.js.map +1 -0
- package/dist/lib/backlog/csv-extractor.d.ts +87 -0
- package/dist/lib/backlog/csv-extractor.d.ts.map +1 -0
- package/dist/lib/backlog/csv-extractor.js +338 -0
- package/dist/lib/backlog/csv-extractor.js.map +1 -0
- package/dist/lib/backlog/epic-handler.d.ts +55 -0
- package/dist/lib/backlog/epic-handler.d.ts.map +1 -0
- package/dist/lib/backlog/epic-handler.js +222 -0
- package/dist/lib/backlog/epic-handler.js.map +1 -0
- package/dist/lib/backlog/field-updater.d.ts +195 -0
- package/dist/lib/backlog/field-updater.d.ts.map +1 -0
- package/dist/lib/backlog/field-updater.js +287 -0
- package/dist/lib/backlog/field-updater.js.map +1 -0
- package/dist/lib/backlog/import-engine.d.ts +110 -0
- package/dist/lib/backlog/import-engine.d.ts.map +1 -0
- package/dist/lib/backlog/import-engine.js +241 -0
- package/dist/lib/backlog/import-engine.js.map +1 -0
- package/dist/lib/backlog/import-strategies.d.ts +110 -0
- package/dist/lib/backlog/import-strategies.d.ts.map +1 -0
- package/dist/lib/backlog/import-strategies.js +398 -0
- package/dist/lib/backlog/import-strategies.js.map +1 -0
- package/dist/lib/backlog/jira-file-generators.d.ts +154 -0
- package/dist/lib/backlog/jira-file-generators.d.ts.map +1 -0
- package/dist/lib/backlog/jira-file-generators.js +265 -0
- package/dist/lib/backlog/jira-file-generators.js.map +1 -0
- package/dist/lib/backlog/jira-import-workflows.d.ts +112 -0
- package/dist/lib/backlog/jira-import-workflows.d.ts.map +1 -0
- package/dist/lib/backlog/jira-import-workflows.js +339 -0
- package/dist/lib/backlog/jira-import-workflows.js.map +1 -0
- package/dist/lib/backlog/jira-lookup.d.ts +121 -0
- package/dist/lib/backlog/jira-lookup.d.ts.map +1 -0
- package/dist/lib/backlog/jira-lookup.js +232 -0
- package/dist/lib/backlog/jira-lookup.js.map +1 -0
- package/dist/lib/backlog/jira-prompts.d.ts +66 -0
- package/dist/lib/backlog/jira-prompts.d.ts.map +1 -0
- package/dist/lib/backlog/jira-prompts.js +232 -0
- package/dist/lib/backlog/jira-prompts.js.map +1 -0
- package/dist/lib/backlog/jira-validators.d.ts +123 -0
- package/dist/lib/backlog/jira-validators.d.ts.map +1 -0
- package/dist/lib/backlog/jira-validators.js +394 -0
- package/dist/lib/backlog/jira-validators.js.map +1 -0
- package/dist/lib/backlog/milestone-generator.d.ts +172 -0
- package/dist/lib/backlog/milestone-generator.d.ts.map +1 -0
- package/dist/lib/backlog/milestone-generator.js +378 -0
- package/dist/lib/backlog/milestone-generator.js.map +1 -0
- package/dist/lib/backlog/milestone-migrator.d.ts +174 -0
- package/dist/lib/backlog/milestone-migrator.d.ts.map +1 -0
- package/dist/lib/backlog/milestone-migrator.js +401 -0
- package/dist/lib/backlog/milestone-migrator.js.map +1 -0
- package/dist/lib/backlog/milestone-sanitizer.d.ts +72 -0
- package/dist/lib/backlog/milestone-sanitizer.d.ts.map +1 -0
- package/dist/lib/backlog/milestone-sanitizer.js +139 -0
- package/dist/lib/backlog/milestone-sanitizer.js.map +1 -0
- package/dist/lib/backlog/prompt-utils.d.ts +9 -0
- package/dist/lib/backlog/prompt-utils.d.ts.map +1 -0
- package/dist/lib/backlog/prompt-utils.js +11 -0
- package/dist/lib/backlog/prompt-utils.js.map +1 -0
- package/dist/lib/backlog/sprint-creator.d.ts +145 -0
- package/dist/lib/backlog/sprint-creator.d.ts.map +1 -0
- package/dist/lib/backlog/sprint-creator.js +295 -0
- package/dist/lib/backlog/sprint-creator.js.map +1 -0
- package/dist/lib/backlog/ticket-generator.d.ts +79 -0
- package/dist/lib/backlog/ticket-generator.d.ts.map +1 -0
- package/dist/lib/backlog/ticket-generator.js +281 -0
- package/dist/lib/backlog/ticket-generator.js.map +1 -0
- package/dist/lib/backlog/ticket-processor.d.ts +205 -0
- package/dist/lib/backlog/ticket-processor.d.ts.map +1 -0
- package/dist/lib/backlog/ticket-processor.js +422 -0
- package/dist/lib/backlog/ticket-processor.js.map +1 -0
- package/dist/lib/backlog/types.d.ts +37 -0
- package/dist/lib/backlog/types.d.ts.map +1 -0
- package/dist/lib/backlog/types.js +7 -0
- package/dist/lib/backlog/types.js.map +1 -0
- package/dist/lib/backlog/validator.d.ts +61 -0
- package/dist/lib/backlog/validator.d.ts.map +1 -0
- package/dist/lib/backlog/validator.js +285 -0
- package/dist/lib/backlog/validator.js.map +1 -0
- package/dist/lib/boundary-validator.d.ts +88 -0
- package/dist/lib/boundary-validator.d.ts.map +1 -0
- package/dist/lib/boundary-validator.js +494 -0
- package/dist/lib/boundary-validator.js.map +1 -0
- package/dist/lib/build/build-engine.d.ts +142 -0
- package/dist/lib/build/build-engine.d.ts.map +1 -0
- package/dist/lib/build/build-engine.js +487 -0
- package/dist/lib/build/build-engine.js.map +1 -0
- package/dist/lib/build/index.d.ts +7 -0
- package/dist/lib/build/index.d.ts.map +1 -0
- package/dist/lib/build/index.js +7 -0
- package/dist/lib/build/index.js.map +1 -0
- package/dist/lib/cleanup-engine.d.ts +121 -0
- package/dist/lib/cleanup-engine.d.ts.map +1 -0
- package/dist/lib/cleanup-engine.js +252 -0
- package/dist/lib/cleanup-engine.js.map +1 -0
- package/dist/lib/cli-context.d.ts +283 -0
- package/dist/lib/cli-context.d.ts.map +1 -0
- package/dist/lib/cli-context.js +403 -0
- package/dist/lib/cli-context.js.map +1 -0
- package/dist/lib/cli-version.d.ts +7 -0
- package/dist/lib/cli-version.d.ts.map +1 -0
- package/dist/lib/cli-version.js +30 -0
- package/dist/lib/cli-version.js.map +1 -0
- package/dist/lib/command-factory.d.ts +76 -0
- package/dist/lib/command-factory.d.ts.map +1 -0
- package/dist/lib/command-factory.js +166 -0
- package/dist/lib/command-factory.js.map +1 -0
- package/dist/lib/common/api-client.d.ts +92 -0
- package/dist/lib/common/api-client.d.ts.map +1 -0
- package/dist/lib/common/api-client.js +206 -0
- package/dist/lib/common/api-client.js.map +1 -0
- package/dist/lib/common/file-utils.d.ts +92 -0
- package/dist/lib/common/file-utils.d.ts.map +1 -0
- package/dist/lib/common/file-utils.js +143 -0
- package/dist/lib/common/file-utils.js.map +1 -0
- package/dist/lib/common/validation.d.ts +91 -0
- package/dist/lib/common/validation.d.ts.map +1 -0
- package/dist/lib/common/validation.js +213 -0
- package/dist/lib/common/validation.js.map +1 -0
- package/dist/lib/common/yaml-frontmatter.d.ts +76 -0
- package/dist/lib/common/yaml-frontmatter.d.ts.map +1 -0
- package/dist/lib/common/yaml-frontmatter.js +89 -0
- package/dist/lib/common/yaml-frontmatter.js.map +1 -0
- package/dist/lib/confluence/adf-converter.d.ts +30 -0
- package/dist/lib/confluence/adf-converter.d.ts.map +1 -0
- package/dist/lib/confluence/adf-converter.js +649 -0
- package/dist/lib/confluence/adf-converter.js.map +1 -0
- package/dist/lib/confluence/confluence-client.d.ts +121 -0
- package/dist/lib/confluence/confluence-client.d.ts.map +1 -0
- package/dist/lib/confluence/confluence-client.js +249 -0
- package/dist/lib/confluence/confluence-client.js.map +1 -0
- package/dist/lib/confluence/confluence-commands.d.ts +58 -0
- package/dist/lib/confluence/confluence-commands.d.ts.map +1 -0
- package/dist/lib/confluence/confluence-commands.js +231 -0
- package/dist/lib/confluence/confluence-commands.js.map +1 -0
- package/dist/lib/discovery-engine.d.ts +159 -0
- package/dist/lib/discovery-engine.d.ts.map +1 -0
- package/dist/lib/discovery-engine.js +538 -0
- package/dist/lib/discovery-engine.js.map +1 -0
- package/dist/lib/framework-validator.d.ts +81 -0
- package/dist/lib/framework-validator.d.ts.map +1 -0
- package/dist/lib/framework-validator.js +546 -0
- package/dist/lib/framework-validator.js.map +1 -0
- package/dist/lib/global-skills-manager.d.ts +90 -0
- package/dist/lib/global-skills-manager.d.ts.map +1 -0
- package/dist/lib/global-skills-manager.js +180 -0
- package/dist/lib/global-skills-manager.js.map +1 -0
- package/dist/lib/jira/acceptance-criteria.d.ts +76 -0
- package/dist/lib/jira/acceptance-criteria.d.ts.map +1 -0
- package/dist/lib/jira/acceptance-criteria.js +163 -0
- package/dist/lib/jira/acceptance-criteria.js.map +1 -0
- package/dist/lib/jira/export-engine.d.ts +132 -0
- package/dist/lib/jira/export-engine.d.ts.map +1 -0
- package/dist/lib/jira/export-engine.js +332 -0
- package/dist/lib/jira/export-engine.js.map +1 -0
- package/dist/lib/jira/field-mapper.d.ts +101 -0
- package/dist/lib/jira/field-mapper.d.ts.map +1 -0
- package/dist/lib/jira/field-mapper.js +346 -0
- package/dist/lib/jira/field-mapper.js.map +1 -0
- package/dist/lib/jira/jira-client.d.ts +117 -0
- package/dist/lib/jira/jira-client.d.ts.map +1 -0
- package/dist/lib/jira/jira-client.js +255 -0
- package/dist/lib/jira/jira-client.js.map +1 -0
- package/dist/lib/jira/sync-engine.d.ts +154 -0
- package/dist/lib/jira/sync-engine.d.ts.map +1 -0
- package/dist/lib/jira/sync-engine.js +420 -0
- package/dist/lib/jira/sync-engine.js.map +1 -0
- package/dist/lib/jira/wiki-converter.d.ts +133 -0
- package/dist/lib/jira/wiki-converter.d.ts.map +1 -0
- package/dist/lib/jira/wiki-converter.js +245 -0
- package/dist/lib/jira/wiki-converter.js.map +1 -0
- package/dist/lib/link-transformer.d.ts +176 -0
- package/dist/lib/link-transformer.d.ts.map +1 -0
- package/dist/lib/link-transformer.js +349 -0
- package/dist/lib/link-transformer.js.map +1 -0
- package/dist/lib/link-validator.d.ts +232 -0
- package/dist/lib/link-validator.d.ts.map +1 -0
- package/dist/lib/link-validator.js +504 -0
- package/dist/lib/link-validator.js.map +1 -0
- package/dist/lib/manifest-manager.d.ts +112 -0
- package/dist/lib/manifest-manager.d.ts.map +1 -0
- package/dist/lib/manifest-manager.js +153 -0
- package/dist/lib/manifest-manager.js.map +1 -0
- package/dist/lib/mcp/extractors/framework-project.d.ts +29 -0
- package/dist/lib/mcp/extractors/framework-project.d.ts.map +1 -0
- package/dist/lib/mcp/extractors/framework-project.js +402 -0
- package/dist/lib/mcp/extractors/framework-project.js.map +1 -0
- package/dist/lib/mcp/extractors/generic-project.d.ts +25 -0
- package/dist/lib/mcp/extractors/generic-project.d.ts.map +1 -0
- package/dist/lib/mcp/extractors/generic-project.js +344 -0
- package/dist/lib/mcp/extractors/generic-project.js.map +1 -0
- package/dist/lib/mcp/extractors/index.d.ts +48 -0
- package/dist/lib/mcp/extractors/index.d.ts.map +1 -0
- package/dist/lib/mcp/extractors/index.js +28 -0
- package/dist/lib/mcp/extractors/index.js.map +1 -0
- package/dist/lib/mcp/index.d.ts +11 -0
- package/dist/lib/mcp/index.d.ts.map +1 -0
- package/dist/lib/mcp/index.js +11 -0
- package/dist/lib/mcp/index.js.map +1 -0
- package/dist/lib/mcp/install-instructions.d.ts +39 -0
- package/dist/lib/mcp/install-instructions.d.ts.map +1 -0
- package/dist/lib/mcp/install-instructions.js +317 -0
- package/dist/lib/mcp/install-instructions.js.map +1 -0
- package/dist/lib/mcp/prerequisite-checker.d.ts +79 -0
- package/dist/lib/mcp/prerequisite-checker.d.ts.map +1 -0
- package/dist/lib/mcp/prerequisite-checker.js +213 -0
- package/dist/lib/mcp/prerequisite-checker.js.map +1 -0
- package/dist/lib/module-loader.d.ts +77 -0
- package/dist/lib/module-loader.d.ts.map +1 -0
- package/dist/lib/module-loader.js +135 -0
- package/dist/lib/module-loader.js.map +1 -0
- package/dist/lib/path-resolver.d.ts +160 -0
- package/dist/lib/path-resolver.d.ts.map +1 -0
- package/dist/lib/path-resolver.js +205 -0
- package/dist/lib/path-resolver.js.map +1 -0
- package/dist/lib/planning/plan-creator.d.ts +132 -0
- package/dist/lib/planning/plan-creator.d.ts.map +1 -0
- package/dist/lib/planning/plan-creator.js +361 -0
- package/dist/lib/planning/plan-creator.js.map +1 -0
- package/dist/lib/project-resolver.d.ts +124 -0
- package/dist/lib/project-resolver.d.ts.map +1 -0
- package/dist/lib/project-resolver.js +362 -0
- package/dist/lib/project-resolver.js.map +1 -0
- package/dist/lib/registry-generator.d.ts +11 -0
- package/dist/lib/registry-generator.d.ts.map +1 -0
- package/dist/lib/registry-generator.js +288 -0
- package/dist/lib/registry-generator.js.map +1 -0
- package/dist/lib/routes-validator.d.ts +50 -0
- package/dist/lib/routes-validator.d.ts.map +1 -0
- package/dist/lib/routes-validator.js +260 -0
- package/dist/lib/routes-validator.js.map +1 -0
- package/dist/lib/schemas/agent.schema.d.ts +175 -0
- package/dist/lib/schemas/agent.schema.d.ts.map +1 -0
- package/dist/lib/schemas/agent.schema.js +86 -0
- package/dist/lib/schemas/agent.schema.js.map +1 -0
- package/dist/lib/schemas/index.d.ts +13 -0
- package/dist/lib/schemas/index.d.ts.map +1 -0
- package/dist/lib/schemas/index.js +13 -0
- package/dist/lib/schemas/index.js.map +1 -0
- package/dist/lib/schemas/skill.schema.d.ts +92 -0
- package/dist/lib/schemas/skill.schema.d.ts.map +1 -0
- package/dist/lib/schemas/skill.schema.js +98 -0
- package/dist/lib/schemas/skill.schema.js.map +1 -0
- package/dist/lib/sdk/executor.d.ts +37 -0
- package/dist/lib/sdk/executor.d.ts.map +1 -0
- package/dist/lib/sdk/executor.js +137 -0
- package/dist/lib/sdk/executor.js.map +1 -0
- package/dist/lib/sdk/generator.d.ts +79 -0
- package/dist/lib/sdk/generator.d.ts.map +1 -0
- package/dist/lib/sdk/generator.js +316 -0
- package/dist/lib/sdk/generator.js.map +1 -0
- package/dist/lib/sdk/index.d.ts +12 -0
- package/dist/lib/sdk/index.d.ts.map +1 -0
- package/dist/lib/sdk/index.js +15 -0
- package/dist/lib/sdk/index.js.map +1 -0
- package/dist/lib/sdk/message-handler.d.ts +40 -0
- package/dist/lib/sdk/message-handler.d.ts.map +1 -0
- package/dist/lib/sdk/message-handler.js +215 -0
- package/dist/lib/sdk/message-handler.js.map +1 -0
- package/dist/lib/sdk/sub-agents.d.ts +51 -0
- package/dist/lib/sdk/sub-agents.d.ts.map +1 -0
- package/dist/lib/sdk/sub-agents.js +234 -0
- package/dist/lib/sdk/sub-agents.js.map +1 -0
- package/dist/lib/sdk/types.d.ts +169 -0
- package/dist/lib/sdk/types.d.ts.map +1 -0
- package/dist/lib/sdk/types.js +7 -0
- package/dist/lib/sdk/types.js.map +1 -0
- package/dist/lib/skill-cli-parser.d.ts +79 -0
- package/dist/lib/skill-cli-parser.d.ts.map +1 -0
- package/dist/lib/skill-cli-parser.js +172 -0
- package/dist/lib/skill-cli-parser.js.map +1 -0
- package/dist/lib/skill-template-engine.d.ts +116 -0
- package/dist/lib/skill-template-engine.d.ts.map +1 -0
- package/dist/lib/skill-template-engine.js +220 -0
- package/dist/lib/skill-template-engine.js.map +1 -0
- package/dist/lib/sync-engine.d.ts +344 -0
- package/dist/lib/sync-engine.d.ts.map +1 -0
- package/dist/lib/sync-engine.js +1255 -0
- package/dist/lib/sync-engine.js.map +1 -0
- package/dist/lib/telemetry/config.d.ts +22 -0
- package/dist/lib/telemetry/config.d.ts.map +1 -0
- package/dist/lib/telemetry/config.js +210 -0
- package/dist/lib/telemetry/config.js.map +1 -0
- package/dist/lib/telemetry/exporters/console-exporter.d.ts +72 -0
- package/dist/lib/telemetry/exporters/console-exporter.d.ts.map +1 -0
- package/dist/lib/telemetry/exporters/console-exporter.js +228 -0
- package/dist/lib/telemetry/exporters/console-exporter.js.map +1 -0
- package/dist/lib/telemetry/exporters/json-file-exporter.d.ts +48 -0
- package/dist/lib/telemetry/exporters/json-file-exporter.d.ts.map +1 -0
- package/dist/lib/telemetry/exporters/json-file-exporter.js +202 -0
- package/dist/lib/telemetry/exporters/json-file-exporter.js.map +1 -0
- package/dist/lib/telemetry/exporters/otel-exporter.d.ts +48 -0
- package/dist/lib/telemetry/exporters/otel-exporter.d.ts.map +1 -0
- package/dist/lib/telemetry/exporters/otel-exporter.js +299 -0
- package/dist/lib/telemetry/exporters/otel-exporter.js.map +1 -0
- package/dist/lib/telemetry/exporters/session-file-exporter.d.ts +66 -0
- package/dist/lib/telemetry/exporters/session-file-exporter.d.ts.map +1 -0
- package/dist/lib/telemetry/exporters/session-file-exporter.js +223 -0
- package/dist/lib/telemetry/exporters/session-file-exporter.js.map +1 -0
- package/dist/lib/telemetry/index.d.ts +44 -0
- package/dist/lib/telemetry/index.d.ts.map +1 -0
- package/dist/lib/telemetry/index.js +69 -0
- package/dist/lib/telemetry/index.js.map +1 -0
- package/dist/lib/telemetry/instrumentation/cli-instrumentation.d.ts +25 -0
- package/dist/lib/telemetry/instrumentation/cli-instrumentation.d.ts.map +1 -0
- package/dist/lib/telemetry/instrumentation/cli-instrumentation.js +83 -0
- package/dist/lib/telemetry/instrumentation/cli-instrumentation.js.map +1 -0
- package/dist/lib/telemetry/instrumentation/discovery-instrumentation.d.ts +21 -0
- package/dist/lib/telemetry/instrumentation/discovery-instrumentation.d.ts.map +1 -0
- package/dist/lib/telemetry/instrumentation/discovery-instrumentation.js +78 -0
- package/dist/lib/telemetry/instrumentation/discovery-instrumentation.js.map +1 -0
- package/dist/lib/telemetry/instrumentation/mcp-instrumentation.d.ts +76 -0
- package/dist/lib/telemetry/instrumentation/mcp-instrumentation.d.ts.map +1 -0
- package/dist/lib/telemetry/instrumentation/mcp-instrumentation.js +168 -0
- package/dist/lib/telemetry/instrumentation/mcp-instrumentation.js.map +1 -0
- package/dist/lib/telemetry/instrumentation/sync-instrumentation.d.ts +25 -0
- package/dist/lib/telemetry/instrumentation/sync-instrumentation.d.ts.map +1 -0
- package/dist/lib/telemetry/instrumentation/sync-instrumentation.js +51 -0
- package/dist/lib/telemetry/instrumentation/sync-instrumentation.js.map +1 -0
- package/dist/lib/telemetry/session-context.d.ts +109 -0
- package/dist/lib/telemetry/session-context.d.ts.map +1 -0
- package/dist/lib/telemetry/session-context.js +170 -0
- package/dist/lib/telemetry/session-context.js.map +1 -0
- package/dist/lib/telemetry/telemetry-manager.d.ts +88 -0
- package/dist/lib/telemetry/telemetry-manager.d.ts.map +1 -0
- package/dist/lib/telemetry/telemetry-manager.js +347 -0
- package/dist/lib/telemetry/telemetry-manager.js.map +1 -0
- package/dist/lib/telemetry/types.d.ts +302 -0
- package/dist/lib/telemetry/types.d.ts.map +1 -0
- package/dist/lib/telemetry/types.js +6 -0
- package/dist/lib/telemetry/types.js.map +1 -0
- package/dist/lib/template-engine.d.ts +5 -0
- package/dist/lib/template-engine.d.ts.map +1 -0
- package/dist/lib/template-engine.js +294 -0
- package/dist/lib/template-engine.js.map +1 -0
- package/dist/lib/unified-template-engine/computed-variables.d.ts +38 -0
- package/dist/lib/unified-template-engine/computed-variables.d.ts.map +1 -0
- package/dist/lib/unified-template-engine/computed-variables.js +85 -0
- package/dist/lib/unified-template-engine/computed-variables.js.map +1 -0
- package/dist/lib/unified-template-engine/index.d.ts +67 -0
- package/dist/lib/unified-template-engine/index.d.ts.map +1 -0
- package/dist/lib/unified-template-engine/index.js +200 -0
- package/dist/lib/unified-template-engine/index.js.map +1 -0
- package/dist/lib/unified-template-engine/resolver.d.ts +63 -0
- package/dist/lib/unified-template-engine/resolver.d.ts.map +1 -0
- package/dist/lib/unified-template-engine/resolver.js +312 -0
- package/dist/lib/unified-template-engine/resolver.js.map +1 -0
- package/dist/lib/unified-template-engine/types.d.ts +177 -0
- package/dist/lib/unified-template-engine/types.d.ts.map +1 -0
- package/dist/lib/unified-template-engine/types.js +7 -0
- package/dist/lib/unified-template-engine/types.js.map +1 -0
- package/dist/lib/unified-template-engine/validator.d.ts +23 -0
- package/dist/lib/unified-template-engine/validator.d.ts.map +1 -0
- package/dist/lib/unified-template-engine/validator.js +217 -0
- package/dist/lib/unified-template-engine/validator.js.map +1 -0
- package/dist/lib/validation/rules/plan-rules.d.ts +48 -0
- package/dist/lib/validation/rules/plan-rules.d.ts.map +1 -0
- package/dist/lib/validation/rules/plan-rules.js +152 -0
- package/dist/lib/validation/rules/plan-rules.js.map +1 -0
- package/dist/lib/validation/rules/ticket-rules.d.ts +54 -0
- package/dist/lib/validation/rules/ticket-rules.d.ts.map +1 -0
- package/dist/lib/validation/rules/ticket-rules.js +136 -0
- package/dist/lib/validation/rules/ticket-rules.js.map +1 -0
- package/dist/lib/validation/schema-validator.d.ts +26 -0
- package/dist/lib/validation/schema-validator.d.ts.map +1 -0
- package/dist/lib/validation/schema-validator.js +183 -0
- package/dist/lib/validation/schema-validator.js.map +1 -0
- package/dist/lib/validation/validation-report.d.ts +68 -0
- package/dist/lib/validation/validation-report.d.ts.map +1 -0
- package/dist/lib/validation/validation-report.js +141 -0
- package/dist/lib/validation/validation-report.js.map +1 -0
- package/dist/lib/version-validator.d.ts +89 -0
- package/dist/lib/version-validator.d.ts.map +1 -0
- package/dist/lib/version-validator.js +178 -0
- package/dist/lib/version-validator.js.map +1 -0
- package/dist/lib/wizard/detection.d.ts +48 -0
- package/dist/lib/wizard/detection.d.ts.map +1 -0
- package/dist/lib/wizard/detection.js +116 -0
- package/dist/lib/wizard/detection.js.map +1 -0
- package/dist/lib/wizard/file-handlers.d.ts +40 -0
- package/dist/lib/wizard/file-handlers.d.ts.map +1 -0
- package/dist/lib/wizard/file-handlers.js +204 -0
- package/dist/lib/wizard/file-handlers.js.map +1 -0
- package/dist/lib/wizard/index.d.ts +9 -0
- package/dist/lib/wizard/index.d.ts.map +1 -0
- package/dist/lib/wizard/index.js +9 -0
- package/dist/lib/wizard/index.js.map +1 -0
- package/dist/lib/wizard/init-wizard.d.ts +35 -0
- package/dist/lib/wizard/init-wizard.d.ts.map +1 -0
- package/dist/lib/wizard/init-wizard.js +86 -0
- package/dist/lib/wizard/init-wizard.js.map +1 -0
- package/dist/lib/wizard/module-groups.d.ts +55 -0
- package/dist/lib/wizard/module-groups.d.ts.map +1 -0
- package/dist/lib/wizard/module-groups.js +128 -0
- package/dist/lib/wizard/module-groups.js.map +1 -0
- package/dist/lib/wizard/prompts.d.ts +36 -0
- package/dist/lib/wizard/prompts.d.ts.map +1 -0
- package/dist/lib/wizard/prompts.js +253 -0
- package/dist/lib/wizard/prompts.js.map +1 -0
- package/dist/lib/wizard/summary.d.ts +45 -0
- package/dist/lib/wizard/summary.d.ts.map +1 -0
- package/dist/lib/wizard/summary.js +162 -0
- package/dist/lib/wizard/summary.js.map +1 -0
- package/dist/mcp/index.d.ts +15 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +75 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/result-formatter.d.ts +68 -0
- package/dist/mcp/result-formatter.d.ts.map +1 -0
- package/dist/mcp/result-formatter.js +191 -0
- package/dist/mcp/result-formatter.js.map +1 -0
- package/dist/mcp/tool-registry.d.ts +70 -0
- package/dist/mcp/tool-registry.d.ts.map +1 -0
- package/dist/mcp/tool-registry.js +183 -0
- package/dist/mcp/tool-registry.js.map +1 -0
- package/dist/mcp/tools/agent.d.ts +22 -0
- package/dist/mcp/tools/agent.d.ts.map +1 -0
- package/dist/mcp/tools/agent.js +267 -0
- package/dist/mcp/tools/agent.js.map +1 -0
- package/dist/mcp/tools/backlog.d.ts +15 -0
- package/dist/mcp/tools/backlog.d.ts.map +1 -0
- package/dist/mcp/tools/backlog.js +355 -0
- package/dist/mcp/tools/backlog.js.map +1 -0
- package/dist/mcp/tools/confluence.d.ts +32 -0
- package/dist/mcp/tools/confluence.d.ts.map +1 -0
- package/dist/mcp/tools/confluence.js +367 -0
- package/dist/mcp/tools/confluence.js.map +1 -0
- package/dist/mcp/tools/create.d.ts +22 -0
- package/dist/mcp/tools/create.d.ts.map +1 -0
- package/dist/mcp/tools/create.js +311 -0
- package/dist/mcp/tools/create.js.map +1 -0
- package/dist/mcp/tools/framework.d.ts +24 -0
- package/dist/mcp/tools/framework.d.ts.map +1 -0
- package/dist/mcp/tools/framework.js +430 -0
- package/dist/mcp/tools/framework.js.map +1 -0
- package/dist/mcp/tools/index.d.ts +32 -0
- package/dist/mcp/tools/index.d.ts.map +1 -0
- package/dist/mcp/tools/index.js +58 -0
- package/dist/mcp/tools/index.js.map +1 -0
- package/dist/mcp/tools/jira.d.ts +12 -0
- package/dist/mcp/tools/jira.d.ts.map +1 -0
- package/dist/mcp/tools/jira.js +206 -0
- package/dist/mcp/tools/jira.js.map +1 -0
- package/dist/mcp/tools/planning.d.ts +22 -0
- package/dist/mcp/tools/planning.d.ts.map +1 -0
- package/dist/mcp/tools/planning.js +264 -0
- package/dist/mcp/tools/planning.js.map +1 -0
- package/dist/mcp/tools/skill.d.ts +42 -0
- package/dist/mcp/tools/skill.d.ts.map +1 -0
- package/dist/mcp/tools/skill.js +561 -0
- package/dist/mcp/tools/skill.js.map +1 -0
- package/dist/mcp/tools/template.d.ts +36 -0
- package/dist/mcp/tools/template.d.ts.map +1 -0
- package/dist/mcp/tools/template.js +354 -0
- package/dist/mcp/tools/template.js.map +1 -0
- package/dist/mcp/tools/writer.d.ts +23 -0
- package/dist/mcp/tools/writer.d.ts.map +1 -0
- package/dist/mcp/tools/writer.js +394 -0
- package/dist/mcp/tools/writer.js.map +1 -0
- package/dist/mcp/types.d.ts +102 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +37 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/templates/index.d.ts +11 -0
- package/dist/templates/index.d.ts.map +1 -0
- package/dist/templates/index.js +11 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/templates/mcp-hooks.d.ts +37 -0
- package/dist/templates/mcp-hooks.d.ts.map +1 -0
- package/dist/templates/mcp-hooks.js +224 -0
- package/dist/templates/mcp-hooks.js.map +1 -0
- package/dist/templates/serena-project.d.ts +14 -0
- package/dist/templates/serena-project.d.ts.map +1 -0
- package/dist/templates/serena-project.js +105 -0
- package/dist/templates/serena-project.js.map +1 -0
- package/dist/templates/settings-json.d.ts +28 -0
- package/dist/templates/settings-json.d.ts.map +1 -0
- package/dist/templates/settings-json.js +190 -0
- package/dist/templates/settings-json.js.map +1 -0
- package/dist/templates/settings-local.d.ts +69 -0
- package/dist/templates/settings-local.d.ts.map +1 -0
- package/dist/templates/settings-local.js +56 -0
- package/dist/templates/settings-local.js.map +1 -0
- package/dist/templates/statusline.d.ts +7 -0
- package/dist/templates/statusline.d.ts.map +1 -0
- package/dist/templates/statusline.js +260 -0
- package/dist/templates/statusline.js.map +1 -0
- package/dist/types/command-options.d.ts +392 -0
- package/dist/types/command-options.d.ts.map +1 -0
- package/dist/types/command-options.js +15 -0
- package/dist/types/command-options.js.map +1 -0
- package/framework/modules/backlog/agents/ai-backlog-manager.md +430 -0
- package/framework/modules/backlog/commands/cmd-backlog-create-ticket.md +42 -0
- package/framework/modules/backlog/commands/cmd-backlog-import.md +42 -0
- package/framework/modules/backlog/commands/cmd-backlog-migrate-milestones.md +42 -0
- package/framework/modules/backlog/commands/cmd-backlog-update-fields.md +42 -0
- package/framework/modules/backlog/commands/cmd-backlog-validate.md +42 -0
- package/framework/modules/backlog/module.json +82 -0
- package/framework/modules/backlog/schemas/ticket.schema.json +143 -0
- package/framework/modules/backlog/skills/backlog/building-tickets/BODY-STRUCTURE.md +470 -0
- package/framework/modules/backlog/skills/backlog/building-tickets/EXAMPLES.md +561 -0
- package/framework/modules/backlog/skills/backlog/building-tickets/SKILL.md +293 -0
- package/framework/modules/backlog/skills/backlog/building-tickets/VALIDATION-RULES.md +748 -0
- package/framework/modules/backlog/skills/backlog/building-tickets/YAML-STRUCTURE.md +439 -0
- package/framework/modules/backlog/skills/backlog/building-tickets/templates/bug.template.md +83 -0
- package/framework/modules/backlog/skills/backlog/building-tickets/templates/epic.template.md +96 -0
- package/framework/modules/backlog/skills/backlog/building-tickets/templates/story.template.md +68 -0
- package/framework/modules/backlog/skills/backlog/building-tickets/templates/task.template.md +66 -0
- package/framework/modules/backlog/skills/backlog/building-tickets/templates/template.config.json +50 -0
- package/framework/modules/backlog/skills/backlog/organizing-backlog/DIRECTORY-STRUCTURE.md +195 -0
- package/framework/modules/backlog/skills/backlog/organizing-backlog/EXAMPLES.md +374 -0
- package/framework/modules/backlog/skills/backlog/organizing-backlog/JIRA-SOURCE-OF-TRUTH.md +384 -0
- package/framework/modules/backlog/skills/backlog/organizing-backlog/NAMING-CONVENTIONS.md +230 -0
- package/framework/modules/backlog/skills/backlog/organizing-backlog/SKILL.md +332 -0
- package/framework/modules/backlog/skills/backlog/organizing-backlog/WORKFLOW-PIPELINE.md +298 -0
- package/framework/modules/backlog/templates/ticket.md.template +111 -0
- package/framework/modules/coding/agents/ai-app-developer.md +275 -0
- package/framework/modules/coding/agents/ai-architect.md +454 -0
- package/framework/modules/coding/agents/ai-hig-reviewer.md +69 -0
- package/framework/modules/coding/agents/ai-ios-developer.md +303 -0
- package/framework/modules/coding/module.json +56 -0
- package/framework/modules/coding/skills/coding/designing-architecture/SKILL.md +475 -0
- package/framework/modules/coding/skills/coding/designing-ios-ui/SKILL.md +405 -0
- package/framework/modules/coding/skills/coding/implementing-code/EXAMPLES.md +565 -0
- package/framework/modules/coding/skills/coding/implementing-code/SKILL.md +490 -0
- package/framework/modules/coding/skills/coding/implementing-ios/ANTI-PATTERNS.md +564 -0
- package/framework/modules/coding/skills/coding/implementing-ios/ARCHITECTURE-PATTERNS.md +539 -0
- package/framework/modules/coding/skills/coding/implementing-ios/HIG-COMPLIANCE.md +492 -0
- package/framework/modules/coding/skills/coding/implementing-ios/SKILL.md +506 -0
- package/framework/modules/coding/skills/coding/implementing-ios/SWIFTUI-PATTERNS.md +625 -0
- package/framework/modules/coding/skills/coding/implementing-ios/TESTING-PATTERNS.md +625 -0
- package/framework/modules/coding/skills/coding/implementing-ios/UIKIT-PATTERNS.md +470 -0
- package/framework/modules/coding/skills/coding/structuring-code/CHECKLISTS.md +151 -0
- package/framework/modules/coding/skills/coding/structuring-code/DRY-PRINCIPLES.md +285 -0
- package/framework/modules/coding/skills/coding/structuring-code/FILE-ORGANIZATION.md +278 -0
- package/framework/modules/coding/skills/coding/structuring-code/READABILITY.md +291 -0
- package/framework/modules/coding/skills/coding/structuring-code/SKILL.md +289 -0
- package/framework/modules/confluence/agents/ai-confluence-manager.md +369 -0
- package/framework/modules/confluence/commands/cmd-confluence-create-page.md +42 -0
- package/framework/modules/confluence/commands/cmd-confluence-fetch-page.md +42 -0
- package/framework/modules/confluence/commands/cmd-confluence-import-reports.md +42 -0
- package/framework/modules/confluence/commands/cmd-confluence-validate.md +42 -0
- package/framework/modules/confluence/module.json +69 -0
- package/framework/modules/confluence/schemas/adf.schema.json +128 -0
- package/framework/modules/confluence/skills/confluence/converting-adf/SKILL.md +455 -0
- package/framework/modules/confluence/skills/confluence/publishing-confluence/ADF-EXAMPLES.md +433 -0
- package/framework/modules/confluence/skills/confluence/publishing-confluence/EXAMPLES.md +513 -0
- package/framework/modules/confluence/skills/confluence/publishing-confluence/SKILL.md +651 -0
- package/framework/modules/core/agents/ai-framework-developer.md +184 -0
- package/framework/modules/core/agents/ai-framework-manager.md +222 -0
- package/framework/modules/core/agents/ai-scout-backlog.md +65 -0
- package/framework/modules/core/agents/ai-scout-codebase.md +66 -0
- package/framework/modules/core/agents/ai-scout-knowledge.md +63 -0
- package/framework/modules/core/commands/cmd-agent-list.md +37 -0
- package/framework/modules/core/commands/cmd-agent-run.md +37 -0
- package/framework/modules/core/commands/cmd-agent-show.md +37 -0
- package/framework/modules/core/commands/cmd-bump-version.md +42 -0
- package/framework/modules/core/commands/cmd-mcp-check.md +59 -0
- package/framework/modules/core/commands/cmd-mcp-seed.md +69 -0
- package/framework/modules/core/commands/cmd-mcp-setup.md +61 -0
- package/framework/modules/core/commands/cmd-mcp-status.md +70 -0
- package/framework/modules/core/commands/cmd-validate-links.md +42 -0
- package/framework/modules/core/commands/cmd-validate-versions.md +42 -0
- package/framework/modules/core/hooks/_lib/notify-helper.sh +27 -0
- package/framework/modules/core/hooks/block-main-commit.sh +35 -0
- package/framework/modules/core/hooks/notify.sh +43 -0
- package/framework/modules/core/hooks/post-write-format.sh +52 -0
- package/framework/modules/core/hooks/post-write-validate.sh +24 -0
- package/framework/modules/core/hooks/pre-bash-safety.sh +44 -0
- package/framework/modules/core/hooks/pre-commit-skill-reminder.sh +24 -0
- package/framework/modules/core/hooks/pre-write-quality.sh +24 -0
- package/framework/modules/core/hooks/session-compact-context.sh +37 -0
- package/framework/modules/core/hooks/session-end-reminder.sh +36 -0
- package/framework/modules/core/hooks/session-start-context.sh +33 -0
- package/framework/modules/core/hooks/session-start-worktree.sh +30 -0
- package/framework/modules/core/hooks/skill-reminder.sh +24 -0
- package/framework/modules/core/hooks/stop-commit-check.sh +24 -0
- package/framework/modules/core/hooks/stop-pr-suggest.sh +42 -0
- package/framework/modules/core/hooks/stop-quality-check.sh +24 -0
- package/framework/modules/core/hooks/subagent-context-loader.sh +24 -0
- package/framework/modules/core/module.json +205 -0
- package/framework/modules/core/registries/schemas/agents.schema.json +209 -0
- package/framework/modules/core/registries/schemas/command.schema.json +98 -0
- package/framework/modules/core/registries/schemas/custom-agent.schema.json +108 -0
- package/framework/modules/core/registries/schemas/module.schema.json +233 -0
- package/framework/modules/core/registries/schemas/template.schema.json +164 -0
- package/framework/modules/core/registries/skill-triggers.json +196 -0
- package/framework/modules/core/skills/building-agents/AGENT-TEMPLATE.md +289 -0
- package/framework/modules/core/skills/building-agents/CONTENT-ROUTING.md +302 -0
- package/framework/modules/core/skills/building-agents/EXAMPLES.md +448 -0
- package/framework/modules/core/skills/building-agents/SKILL.md +289 -0
- package/framework/modules/core/skills/building-agents/VALIDATION-CHECKLIST.md +304 -0
- package/framework/modules/core/skills/building-context/CONTENT-GUIDELINES.md +471 -0
- package/framework/modules/core/skills/building-context/EXAMPLES.md +1606 -0
- package/framework/modules/core/skills/building-context/LEVEL-DECISION-TREE.md +262 -0
- package/framework/modules/core/skills/building-context/SKILL.md +479 -0
- package/framework/modules/core/skills/building-context/VALIDATION-CHECKLIST.md +358 -0
- package/framework/modules/core/skills/building-framework/AGENT-CREATION-WORKFLOW.md +268 -0
- package/framework/modules/core/skills/building-framework/DECISION-TREES.md +183 -0
- package/framework/modules/core/skills/building-framework/EXAMPLES.md +387 -0
- package/framework/modules/core/skills/building-framework/GOVERNANCE-RULES.md +446 -0
- package/framework/modules/core/skills/building-framework/GOVERNANCE-UPDATE-WORKFLOW.md +172 -0
- package/framework/modules/core/skills/building-framework/REGISTRY-GUIDE.md +551 -0
- package/framework/modules/core/skills/building-framework/SCOPE-DECISION-TREE.md +284 -0
- package/framework/modules/core/skills/building-framework/SKILL.md +210 -0
- package/framework/modules/core/skills/building-skills/ANTI-PATTERNS-CONTENT.md +219 -0
- package/framework/modules/core/skills/building-skills/ANTI-PATTERNS-MCP.md +119 -0
- package/framework/modules/core/skills/building-skills/ANTI-PATTERNS-NAMING.md +129 -0
- package/framework/modules/core/skills/building-skills/ANTI-PATTERNS-STRUCTURE.md +139 -0
- package/framework/modules/core/skills/building-skills/EXAMPLES.md +330 -0
- package/framework/modules/core/skills/building-skills/PATTERNS.md +523 -0
- package/framework/modules/core/skills/building-skills/SKILL-CREATION-WORKFLOW-FRAMEWORK.md +253 -0
- package/framework/modules/core/skills/building-skills/SKILL.md +543 -0
- package/framework/modules/core/skills/committing-code/EXAMPLES.md +567 -0
- package/framework/modules/core/skills/committing-code/SKILL.md +285 -0
- package/framework/modules/core/skills/committing-code/STANDARDS-BRANCHES.md +95 -0
- package/framework/modules/core/skills/committing-code/STANDARDS-COMMITS.md +140 -0
- package/framework/modules/core/skills/committing-code/STANDARDS-FRAMEWORK.md +234 -0
- package/framework/modules/core/skills/committing-code/STANDARDS-TICKETS.md +102 -0
- package/framework/modules/core/skills/gathering-intelligence/SKILL.md +136 -0
- package/framework/modules/core/skills/managing-versions/EXAMPLES.md +277 -0
- package/framework/modules/core/skills/managing-versions/SCRIPTS-REFERENCE.md +295 -0
- package/framework/modules/core/skills/managing-versions/SKILL.md +260 -0
- package/framework/modules/core/skills/managing-versions/STANDARDS.md +231 -0
- package/framework/modules/core/skills/using-context/EXAMPLES.md +257 -0
- package/framework/modules/core/skills/using-context/SKILL.md +238 -0
- package/framework/modules/core/skills/using-context/STANDARDS.md +241 -0
- package/framework/modules/core/skills/using-framework/BEST-PRACTICES.md +421 -0
- package/framework/modules/core/skills/using-framework/DISCOVERY-ENGINE-ARCHITECTURE.md +331 -0
- package/framework/modules/core/skills/using-framework/EXAMPLES.md +535 -0
- package/framework/modules/core/skills/using-framework/ROUTES-REGISTRY-DESIGN.md +455 -0
- package/framework/modules/core/skills/using-framework/SKILL.md +176 -0
- package/framework/modules/core/skills/using-mcp/ANTI-PATTERNS.md +566 -0
- package/framework/modules/core/skills/using-mcp/DECISION-MATRICES.md +385 -0
- package/framework/modules/core/skills/using-mcp/EXAMPLES.md +466 -0
- package/framework/modules/core/skills/using-mcp/FRAMEWORK-MCP-PATTERNS.md +395 -0
- package/framework/modules/core/skills/using-mcp/QUICK-REFERENCE.md +98 -0
- package/framework/modules/core/skills/using-mcp/SKILL.md +624 -0
- package/framework/modules/core/skills/using-mcp/TOOLS-REFERENCE.md +532 -0
- package/framework/modules/core/skills/validating-links/EXAMPLES.md +326 -0
- package/framework/modules/core/skills/validating-links/SKILL.md +307 -0
- package/framework/modules/core/skills/validating-links/STANDARDS.md +353 -0
- package/framework/modules/core/skills/validating-markdown/EXAMPLES.md +516 -0
- package/framework/modules/core/skills/validating-markdown/SKILL.md +503 -0
- package/framework/modules/core/skills/validating-markdown/VALIDATION-RULES.md +360 -0
- package/framework/modules/core/skills/validating-markdown/YAML-SCHEMA.md +424 -0
- package/framework/modules/core/skills/verifying-quality/ANTI-PATTERNS.md +302 -0
- package/framework/modules/core/skills/verifying-quality/CLI-TESTING.md +389 -0
- package/framework/modules/core/skills/verifying-quality/DEFENSIVE-CODING.md +433 -0
- package/framework/modules/core/skills/verifying-quality/EVALUATION-PROTOCOL.md +106 -0
- package/framework/modules/core/skills/verifying-quality/EXAMPLES.md +588 -0
- package/framework/modules/core/skills/verifying-quality/QUALITY-CHECKLIST.md +181 -0
- package/framework/modules/core/skills/verifying-quality/SKILL.md +275 -0
- package/framework/modules/core/templates/agent/agent.template.md +97 -0
- package/framework/modules/core/templates/agent/template.config.json +47 -0
- package/framework/modules/core/templates/config/agentic-framework.json.template +17 -0
- package/framework/modules/core/templates/config/hooks/pre-commit-sync.sh.template +190 -0
- package/framework/modules/core/templates/config/hooks/pre-push.sh.template +330 -0
- package/framework/modules/core/templates/config/settings.local.json.template +39 -0
- package/framework/modules/core/templates/config/statusline.sh.template +253 -0
- package/framework/modules/core/templates/context/business-advanced.template.md +71 -0
- package/framework/modules/core/templates/context/business-basic.template.md +39 -0
- package/framework/modules/core/templates/context/business-expert.template.md +95 -0
- package/framework/modules/core/templates/context/process-advanced.template.md +141 -0
- package/framework/modules/core/templates/context/process-basic.template.md +87 -0
- package/framework/modules/core/templates/context/process-expert.template.md +213 -0
- package/framework/modules/core/templates/context/technical-advanced.template.md +111 -0
- package/framework/modules/core/templates/context/technical-basic.template.md +66 -0
- package/framework/modules/core/templates/context/technical-expert.template.md +157 -0
- package/framework/modules/core/templates/module/module.json.template +20 -0
- package/framework/modules/core/templates/module/template.config.json +41 -0
- package/framework/modules/core/templates/skill/SKILL.md.template +96 -0
- package/framework/modules/core/templates/skill/template.config.json +39 -0
- package/framework/modules/jira/agents/ai-jira-manager.md +320 -0
- package/framework/modules/jira/commands/cmd-jira-export.md +42 -0
- package/framework/modules/jira/commands/cmd-jira-sync.md +42 -0
- package/framework/modules/jira/module.json +55 -0
- package/framework/modules/jira/schemas/jira-sync.config.json +75 -0
- package/framework/modules/jira/skills/jira/integrating-jira/CONFLUENCE-PATTERNS.md +284 -0
- package/framework/modules/jira/skills/jira/integrating-jira/CONVERSION-RULES.md +188 -0
- package/framework/modules/jira/skills/jira/integrating-jira/EXAMPLES.md +406 -0
- package/framework/modules/jira/skills/jira/integrating-jira/JIRA-PATTERNS.md +284 -0
- package/framework/modules/jira/skills/jira/integrating-jira/SKILL.md +412 -0
- package/framework/modules/reporting/agents/ai-report-manager.md +410 -0
- package/framework/modules/reporting/module.json +35 -0
- package/framework/modules/reporting/skills/reporting/building-reports/EXAMPLES.md +613 -0
- package/framework/modules/reporting/skills/reporting/building-reports/SKILL.md +509 -0
- package/framework/modules/writer/BUILD_SYSTEM.md +325 -0
- package/framework/modules/writer/MIGRATION.md +326 -0
- package/framework/modules/writer/agents/ai-book-writer.md +196 -0
- package/framework/modules/writer/agents/ai-prose-writer.md +58 -0
- package/framework/modules/writer/agents/ai-world-builder.md +46 -0
- package/framework/modules/writer/commands/cmd-writer-add-fact.md +42 -0
- package/framework/modules/writer/commands/cmd-writer-analyze.md +42 -0
- package/framework/modules/writer/commands/cmd-writer-build.md +42 -0
- package/framework/modules/writer/commands/cmd-writer-create-chapter.md +42 -0
- package/framework/modules/writer/commands/cmd-writer-create-character.md +42 -0
- package/framework/modules/writer/commands/cmd-writer-create-history-event.md +42 -0
- package/framework/modules/writer/commands/cmd-writer-create-magic-system.md +42 -0
- package/framework/modules/writer/commands/cmd-writer-create-nation.md +42 -0
- package/framework/modules/writer/commands/cmd-writer-create-part.md +42 -0
- package/framework/modules/writer/commands/cmd-writer-create-region.md +42 -0
- package/framework/modules/writer/commands/cmd-writer-create-scene.md +42 -0
- package/framework/modules/writer/commands/cmd-writer-create-world-rule.md +42 -0
- package/framework/modules/writer/commands/cmd-writer-export.md +42 -0
- package/framework/modules/writer/commands/cmd-writer-generate-context.md +42 -0
- package/framework/modules/writer/commands/cmd-writer-init-baseline.md +42 -0
- package/framework/modules/writer/commands/cmd-writer-init.md +42 -0
- package/framework/modules/writer/commands/cmd-writer-lock-fact.md +42 -0
- package/framework/modules/writer/commands/cmd-writer-validate-immutability.md +42 -0
- package/framework/modules/writer/commands/cmd-writer-validate.md +42 -0
- package/framework/modules/writer/module.json +181 -0
- package/framework/modules/writer/schemas/baseline.schema.json +60 -0
- package/framework/modules/writer/schemas/manifest.schema.json +155 -0
- package/framework/modules/writer/schemas/prerequisites.schema.json +171 -0
- package/framework/modules/writer/schemas/token-budgets.json +129 -0
- package/framework/modules/writer/schemas/token-budgets.schema.json +92 -0
- package/framework/modules/writer/schemas/world-fact.schema.json +172 -0
- package/framework/modules/writer/schemas/world-lock.schema.json +244 -0
- package/framework/modules/writer/skills/writer/building-worlds/CONSISTENCY-PILLARS.md +412 -0
- package/framework/modules/writer/skills/writer/building-worlds/CULTURE-BUILDING.md +354 -0
- package/framework/modules/writer/skills/writer/building-worlds/GEOGRAPHY-HISTORY.md +293 -0
- package/framework/modules/writer/skills/writer/building-worlds/MAGIC-SYSTEMS.md +311 -0
- package/framework/modules/writer/skills/writer/building-worlds/REVELATION-CHECKLIST.md +282 -0
- package/framework/modules/writer/skills/writer/building-worlds/SKILL.md +313 -0
- package/framework/modules/writer/skills/writer/organizing-books/DOMAINS.md +212 -0
- package/framework/modules/writer/skills/writer/organizing-books/FOLDER-STRUCTURE.md +593 -0
- package/framework/modules/writer/skills/writer/organizing-books/IMMUTABILITY-GUIDE.md +350 -0
- package/framework/modules/writer/skills/writer/organizing-books/METADATA-GUIDE.md +780 -0
- package/framework/modules/writer/skills/writer/organizing-books/SKILL.md +257 -0
- package/framework/modules/writer/skills/writer/organizing-books/SSOT-RULES.md +214 -0
- package/framework/modules/writer/skills/writer/organizing-books/WORLD-STRUCTURE.md +222 -0
- package/framework/modules/writer/skills/writer/organizing-books/templates/chapter.template.md +57 -0
- package/framework/modules/writer/skills/writer/organizing-books/templates/character.template.md +121 -0
- package/framework/modules/writer/skills/writer/organizing-books/templates/part.template.md +67 -0
- package/framework/modules/writer/skills/writer/organizing-books/templates/scene.template.md +62 -0
- package/framework/modules/writer/skills/writer/organizing-books/templates/template.config.json +114 -0
- package/framework/modules/writer/skills/writer/writing-prose/CHARACTER-VOICE.md +654 -0
- package/framework/modules/writer/skills/writer/writing-prose/DESCRIPTION-TECHNIQUES.md +688 -0
- package/framework/modules/writer/skills/writer/writing-prose/DIALOGUE-GUIDE.md +663 -0
- package/framework/modules/writer/skills/writer/writing-prose/PACING-STRUCTURE.md +613 -0
- package/framework/modules/writer/skills/writer/writing-prose/PROSE-PATTERNS.md +569 -0
- package/framework/modules/writer/skills/writer/writing-prose/SKILL.md +583 -0
- package/framework/modules/writer/skills/writer/writing-prose/WORLD-BUILDING-RULES.md +692 -0
- package/framework/modules/writer/skills/writer/writing-prose/examples/blended-accessible.md +651 -0
- package/framework/modules/writer/skills/writer/writing-prose/examples/tolkien-style.md +534 -0
- package/framework/modules/writer/skills/writer/writing-prose/examples/zelazny-style.md +415 -0
- package/framework/modules/writer/src/package.json +3 -0
- package/framework/modules/writer/templates/package.json +28 -0
- package/framework/modules/writer/templates/world/baseline.template.md +183 -0
- package/framework/modules/writer/templates/world/history-event.template.md +89 -0
- package/framework/modules/writer/templates/world/magic-system.template.md +138 -0
- package/framework/modules/writer/templates/world/manifest.template.json +9 -0
- package/framework/modules/writer/templates/world/nation.template.md +123 -0
- package/framework/modules/writer/templates/world/region.template.md +65 -0
- package/framework/modules/writer/templates/world/world-rule.template.md +50 -0
- package/package.json +110 -0
|
@@ -0,0 +1,1255 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sync Engine Module
|
|
3
|
+
*
|
|
4
|
+
* Synchronizes skills and agents from module source directories to deployment
|
|
5
|
+
* directories (.claude/skills/ and .claude/commands/). Uses LinkTransformer to
|
|
6
|
+
* transform markdown links during sync.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* const engine = new SyncEngine('/path/to/framework', '/path/to/project');
|
|
10
|
+
* const modules = await loadAllModules();
|
|
11
|
+
* const report = await engine.syncAll(modules);
|
|
12
|
+
*
|
|
13
|
+
* Project structure managed:
|
|
14
|
+
* project/
|
|
15
|
+
* ├── .claude/skills/project/ # Project-owned skills (synced TO .claude/skills/)
|
|
16
|
+
* ├── .claude/skills/ # Target for framework + project skills
|
|
17
|
+
* ├── .claude/commands/ # Target for agents (slash commands)
|
|
18
|
+
* └── .claude/agents/ # Target for agents (Task tool invocation)
|
|
19
|
+
*
|
|
20
|
+
* Module structure synced FROM:
|
|
21
|
+
* core/
|
|
22
|
+
* ├── agents/ai-*.md # Agents to sync
|
|
23
|
+
* └── skills/shared/* # Skills to sync (taxonomy structure)
|
|
24
|
+
*/
|
|
25
|
+
import fs from "fs-extra";
|
|
26
|
+
import path from "path";
|
|
27
|
+
import yaml from "yaml";
|
|
28
|
+
import { LinkTransformer } from "./link-transformer.js";
|
|
29
|
+
import { getFrameworkRoot } from "./module-loader.js";
|
|
30
|
+
import { recordSyncAll } from "./telemetry/instrumentation/sync-instrumentation.js";
|
|
31
|
+
import { statuslineTemplate } from "../templates/statusline.js";
|
|
32
|
+
import { processSettingsJsonTemplate } from "../templates/settings-json.js";
|
|
33
|
+
/**
|
|
34
|
+
* Synchronizes skills and agents from modules to deployment directories.
|
|
35
|
+
*
|
|
36
|
+
* The SyncEngine handles:
|
|
37
|
+
* - Copying skills from module taxonomy structures to flat .claude/skills/
|
|
38
|
+
* - Copying agents to .claude/commands/
|
|
39
|
+
* - Copying project skills from .claude/skills/project/ to .claude/skills/
|
|
40
|
+
* - Transforming markdown links in all .md files using LinkTransformer
|
|
41
|
+
* - Reporting all sync actions and errors
|
|
42
|
+
*/
|
|
43
|
+
export class SyncEngine {
|
|
44
|
+
/** Files to skip during sync operations */
|
|
45
|
+
static SKIP_FILES = new Set([
|
|
46
|
+
".DS_Store",
|
|
47
|
+
".gitkeep",
|
|
48
|
+
".gitignore",
|
|
49
|
+
"Thumbs.db",
|
|
50
|
+
]);
|
|
51
|
+
/**
|
|
52
|
+
* Folders in .claude/ that are protected from deletion during sync operations.
|
|
53
|
+
* These folders contain user-owned data that must never be removed.
|
|
54
|
+
*/
|
|
55
|
+
static PROTECTED_FOLDERS = new Set(["context"]);
|
|
56
|
+
/**
|
|
57
|
+
* Check if a path is a protected folder that should never be deleted.
|
|
58
|
+
*
|
|
59
|
+
* @param folderPath - Path relative to .claude/ directory
|
|
60
|
+
* @returns True if the folder is protected
|
|
61
|
+
*/
|
|
62
|
+
static isProtectedFolder(folderPath) {
|
|
63
|
+
const normalizedPath = folderPath
|
|
64
|
+
.replace(/^\.claude\//, "")
|
|
65
|
+
.replace(/\/$/, "");
|
|
66
|
+
return SyncEngine.PROTECTED_FOLDERS.has(normalizedPath);
|
|
67
|
+
}
|
|
68
|
+
frameworkRoot;
|
|
69
|
+
projectPath;
|
|
70
|
+
linkTransformer;
|
|
71
|
+
/**
|
|
72
|
+
* Initialize the SyncEngine.
|
|
73
|
+
*
|
|
74
|
+
* @param frameworkRoot - Absolute path to the framework root directory
|
|
75
|
+
* @param projectPath - Absolute path to the project directory
|
|
76
|
+
*/
|
|
77
|
+
constructor(frameworkRoot, projectPath) {
|
|
78
|
+
this.frameworkRoot = path.resolve(frameworkRoot);
|
|
79
|
+
this.projectPath = path.resolve(projectPath);
|
|
80
|
+
// Pass projectPath as second arg for {project}/ placeholder resolution
|
|
81
|
+
this.linkTransformer = new LinkTransformer(this.frameworkRoot, this.projectPath);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Sync all skills from installed modules to .claude/skills/.
|
|
85
|
+
*
|
|
86
|
+
* Processes each module's skills/ directory, recursively copies skill
|
|
87
|
+
* directories to a flat structure in .claude/skills/, and transforms all
|
|
88
|
+
* markdown links.
|
|
89
|
+
*
|
|
90
|
+
* @param modules - List of installed module manifests
|
|
91
|
+
* @returns List of sync actions performed
|
|
92
|
+
*/
|
|
93
|
+
async syncSkills(modules) {
|
|
94
|
+
const items = [];
|
|
95
|
+
const targetDir = path.join(this.projectPath, ".claude/skills");
|
|
96
|
+
// Ensure target directory exists
|
|
97
|
+
await fs.ensureDir(targetDir);
|
|
98
|
+
for (const module of modules) {
|
|
99
|
+
if (!module._sourcePath) {
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
const skillsSourceDir = path.join(module._sourcePath, "skills");
|
|
103
|
+
if (!(await fs.pathExists(skillsSourceDir))) {
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
// Find all skill directories (may be nested in taxonomy structure)
|
|
107
|
+
const skillDirs = await this.findSkillDirectories(skillsSourceDir);
|
|
108
|
+
for (const skillDir of skillDirs) {
|
|
109
|
+
const skillName = path.basename(skillDir);
|
|
110
|
+
const targetPath = path.join(targetDir, skillName);
|
|
111
|
+
try {
|
|
112
|
+
await this.copySkillDirectory(skillDir, targetPath);
|
|
113
|
+
items.push({
|
|
114
|
+
name: skillName,
|
|
115
|
+
source: skillDir,
|
|
116
|
+
target: targetPath,
|
|
117
|
+
action: "updated",
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
catch (_error) {
|
|
121
|
+
items.push({
|
|
122
|
+
name: skillName,
|
|
123
|
+
source: skillDir,
|
|
124
|
+
target: targetPath,
|
|
125
|
+
action: "skipped",
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return items;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Sync all agents from installed modules to .claude/commands/ and .claude/agents/.
|
|
134
|
+
*
|
|
135
|
+
* Copies all ai-*.md agent files from each module's agents/ directory
|
|
136
|
+
* to both .claude/commands/ (for slash commands) and .claude/agents/
|
|
137
|
+
* (for programmatic Task tool invocation), transforming markdown links
|
|
138
|
+
* in the process.
|
|
139
|
+
*
|
|
140
|
+
* @param modules - List of installed module manifests
|
|
141
|
+
* @returns List of sync actions performed
|
|
142
|
+
*/
|
|
143
|
+
async syncAgents(modules) {
|
|
144
|
+
const items = [];
|
|
145
|
+
const commandsDir = path.join(this.projectPath, ".claude/commands");
|
|
146
|
+
const agentsDir = path.join(this.projectPath, ".claude/agents");
|
|
147
|
+
// Ensure primary target directory exists
|
|
148
|
+
await fs.ensureDir(commandsDir);
|
|
149
|
+
// Best-effort creation of agents dir — if this fails, it will be
|
|
150
|
+
// retried per-file in the inner try-catch without blocking commands/
|
|
151
|
+
try {
|
|
152
|
+
await fs.ensureDir(agentsDir);
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
// Will be retried per-file
|
|
156
|
+
}
|
|
157
|
+
for (const module of modules) {
|
|
158
|
+
if (!module._sourcePath) {
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
const agentsSourceDir = path.join(module._sourcePath, "agents");
|
|
162
|
+
if (!(await fs.pathExists(agentsSourceDir))) {
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
// Find all agent files (ai-*.md pattern)
|
|
166
|
+
const agentFiles = await this.findAgentFiles(agentsSourceDir);
|
|
167
|
+
for (const agentFile of agentFiles) {
|
|
168
|
+
const agentName = path.basename(agentFile, ".md");
|
|
169
|
+
const fileName = path.basename(agentFile);
|
|
170
|
+
const commandsTarget = path.join(commandsDir, fileName);
|
|
171
|
+
const agentsTarget = path.join(agentsDir, fileName);
|
|
172
|
+
try {
|
|
173
|
+
const deployTo = await this.getAgentDeployTarget(agentFile);
|
|
174
|
+
// Deploy to .claude/commands/ (slash commands) if not agent-only
|
|
175
|
+
if (deployTo !== "agent") {
|
|
176
|
+
await this.copyAgentFile(agentFile, commandsTarget);
|
|
177
|
+
}
|
|
178
|
+
// Deploy to .claude/agents/ (Task tool / Agent tool invocation) if not command-only
|
|
179
|
+
if (deployTo !== "command") {
|
|
180
|
+
try {
|
|
181
|
+
await fs.ensureDir(agentsDir);
|
|
182
|
+
await this.copyAgentFile(agentFile, agentsTarget);
|
|
183
|
+
}
|
|
184
|
+
catch (agentsError) {
|
|
185
|
+
console.warn(`Warning: Failed to deploy ${agentName} to .claude/agents/: ${agentsError instanceof Error ? agentsError.message : String(agentsError)}`);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
items.push({
|
|
189
|
+
name: agentName,
|
|
190
|
+
source: agentFile,
|
|
191
|
+
target: deployTo === "agent" ? agentsTarget : commandsTarget,
|
|
192
|
+
action: "updated",
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
catch (_error) {
|
|
196
|
+
items.push({
|
|
197
|
+
name: agentName,
|
|
198
|
+
source: agentFile,
|
|
199
|
+
target: commandsTarget,
|
|
200
|
+
action: "skipped",
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return items;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Sync all CLI command wrappers from installed modules to .claude/commands/.
|
|
209
|
+
*
|
|
210
|
+
* Copies all cmd-*.md command files from each module's commands/ directory
|
|
211
|
+
* to .claude/commands/, transforming markdown links in the process.
|
|
212
|
+
*
|
|
213
|
+
* @param modules - List of installed module manifests
|
|
214
|
+
* @returns List of sync actions performed
|
|
215
|
+
*/
|
|
216
|
+
async syncCommands(modules) {
|
|
217
|
+
const items = [];
|
|
218
|
+
const targetDir = path.join(this.projectPath, ".claude/commands");
|
|
219
|
+
// Ensure target directory exists
|
|
220
|
+
await fs.ensureDir(targetDir);
|
|
221
|
+
for (const module of modules) {
|
|
222
|
+
if (!module._sourcePath) {
|
|
223
|
+
continue;
|
|
224
|
+
}
|
|
225
|
+
const commandsSourceDir = path.join(module._sourcePath, "commands");
|
|
226
|
+
if (!(await fs.pathExists(commandsSourceDir))) {
|
|
227
|
+
continue;
|
|
228
|
+
}
|
|
229
|
+
// Find all command files (cmd-*.md pattern)
|
|
230
|
+
const commandFiles = await this.findCommandFiles(commandsSourceDir);
|
|
231
|
+
for (const commandFile of commandFiles) {
|
|
232
|
+
const commandName = path.basename(commandFile, ".md");
|
|
233
|
+
const targetPath = path.join(targetDir, path.basename(commandFile));
|
|
234
|
+
try {
|
|
235
|
+
// Reuse agent copy logic (transforms markdown links)
|
|
236
|
+
await this.copyAgentFile(commandFile, targetPath);
|
|
237
|
+
items.push({
|
|
238
|
+
name: commandName,
|
|
239
|
+
source: commandFile,
|
|
240
|
+
target: targetPath,
|
|
241
|
+
action: "updated",
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
catch (_error) {
|
|
245
|
+
items.push({
|
|
246
|
+
name: commandName,
|
|
247
|
+
source: commandFile,
|
|
248
|
+
target: targetPath,
|
|
249
|
+
action: "skipped",
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
return items;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Sync project skills from .claude/skills/project/ to .claude/skills/.
|
|
258
|
+
*
|
|
259
|
+
* Project skills are skills owned by the project (not from framework modules).
|
|
260
|
+
* They are synced alongside framework skills to .claude/skills/.
|
|
261
|
+
*
|
|
262
|
+
* @returns List of sync actions performed
|
|
263
|
+
*/
|
|
264
|
+
async syncProjectSkills() {
|
|
265
|
+
const items = [];
|
|
266
|
+
const projectSkillsDir = path.join(this.projectPath, ".claude/skills/project");
|
|
267
|
+
const targetDir = path.join(this.projectPath, ".claude/skills");
|
|
268
|
+
if (!(await fs.pathExists(projectSkillsDir))) {
|
|
269
|
+
return items;
|
|
270
|
+
}
|
|
271
|
+
// Ensure target directory exists
|
|
272
|
+
await fs.ensureDir(targetDir);
|
|
273
|
+
// Find all skill directories in project skills
|
|
274
|
+
const skillDirs = await this.findSkillDirectories(projectSkillsDir);
|
|
275
|
+
for (const skillDir of skillDirs) {
|
|
276
|
+
const skillName = path.basename(skillDir);
|
|
277
|
+
const targetPath = path.join(targetDir, skillName);
|
|
278
|
+
try {
|
|
279
|
+
await this.copySkillDirectory(skillDir, targetPath);
|
|
280
|
+
items.push({
|
|
281
|
+
name: skillName,
|
|
282
|
+
source: skillDir,
|
|
283
|
+
target: targetPath,
|
|
284
|
+
action: "updated",
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
catch (_error) {
|
|
288
|
+
items.push({
|
|
289
|
+
name: skillName,
|
|
290
|
+
source: skillDir,
|
|
291
|
+
target: targetPath,
|
|
292
|
+
action: "skipped",
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
return items;
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Sync module templates to .claude/templates/{module}/.
|
|
300
|
+
*
|
|
301
|
+
* Each module may have a templates/ directory at its root containing
|
|
302
|
+
* template files (e.g., world templates for writer module). These are
|
|
303
|
+
* deployed to .claude/templates/{module-id}/ for use by CLI commands.
|
|
304
|
+
*
|
|
305
|
+
* @param modules - List of installed module manifests
|
|
306
|
+
* @returns List of sync actions performed
|
|
307
|
+
*/
|
|
308
|
+
async syncTemplates(modules) {
|
|
309
|
+
const items = [];
|
|
310
|
+
for (const module of modules) {
|
|
311
|
+
if (!module._sourcePath) {
|
|
312
|
+
continue;
|
|
313
|
+
}
|
|
314
|
+
const templatesSourceDir = path.join(module._sourcePath, "templates");
|
|
315
|
+
if (!(await fs.pathExists(templatesSourceDir))) {
|
|
316
|
+
continue;
|
|
317
|
+
}
|
|
318
|
+
const targetDir = path.join(this.projectPath, ".claude/templates", module.id);
|
|
319
|
+
try {
|
|
320
|
+
// Recursively copy all template files
|
|
321
|
+
await this.copyTemplateDirectory(templatesSourceDir, targetDir);
|
|
322
|
+
items.push({
|
|
323
|
+
name: `${module.id}-templates`,
|
|
324
|
+
source: templatesSourceDir,
|
|
325
|
+
target: targetDir,
|
|
326
|
+
action: "updated",
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
catch (_error) {
|
|
330
|
+
items.push({
|
|
331
|
+
name: `${module.id}-templates`,
|
|
332
|
+
source: templatesSourceDir,
|
|
333
|
+
target: targetDir,
|
|
334
|
+
action: "skipped",
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
return items;
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Sync module schemas to .claude/registries/schemas/{module}/.
|
|
342
|
+
*
|
|
343
|
+
* Schemas are JSON schema files used by modules for validation.
|
|
344
|
+
* Each module's schemas are copied to a module-specific subdirectory
|
|
345
|
+
* in .claude/registries/schemas/.
|
|
346
|
+
*
|
|
347
|
+
* @param modules - List of installed module manifests
|
|
348
|
+
* @returns List of sync actions performed
|
|
349
|
+
*/
|
|
350
|
+
async syncSchemas(modules) {
|
|
351
|
+
const items = [];
|
|
352
|
+
const schemasTargetDir = path.join(this.projectPath, ".claude/registries/schemas");
|
|
353
|
+
// Ensure target directory exists
|
|
354
|
+
await fs.ensureDir(schemasTargetDir);
|
|
355
|
+
for (const module of modules) {
|
|
356
|
+
if (!module._sourcePath) {
|
|
357
|
+
continue;
|
|
358
|
+
}
|
|
359
|
+
const schemasSourceDir = path.join(module._sourcePath, "schemas");
|
|
360
|
+
if (!(await fs.pathExists(schemasSourceDir))) {
|
|
361
|
+
continue;
|
|
362
|
+
}
|
|
363
|
+
// Create module-specific target directory
|
|
364
|
+
const moduleSchemaDir = path.join(schemasTargetDir, module.id);
|
|
365
|
+
await fs.ensureDir(moduleSchemaDir);
|
|
366
|
+
// Read all schema files in the source directory
|
|
367
|
+
const entries = await fs.readdir(schemasSourceDir, {
|
|
368
|
+
withFileTypes: true,
|
|
369
|
+
});
|
|
370
|
+
for (const entry of entries) {
|
|
371
|
+
// Skip directories and special files
|
|
372
|
+
if (entry.isDirectory() || SyncEngine.SKIP_FILES.has(entry.name)) {
|
|
373
|
+
continue;
|
|
374
|
+
}
|
|
375
|
+
const sourcePath = path.join(schemasSourceDir, entry.name);
|
|
376
|
+
const targetPath = path.join(moduleSchemaDir, entry.name);
|
|
377
|
+
try {
|
|
378
|
+
// Copy schema files directly (no transformation needed for JSON)
|
|
379
|
+
await fs.copy(sourcePath, targetPath, { overwrite: true });
|
|
380
|
+
items.push({
|
|
381
|
+
name: `${module.id}/${entry.name}`,
|
|
382
|
+
source: sourcePath,
|
|
383
|
+
target: targetPath,
|
|
384
|
+
action: "updated",
|
|
385
|
+
});
|
|
386
|
+
}
|
|
387
|
+
catch (_error) {
|
|
388
|
+
items.push({
|
|
389
|
+
name: `${module.id}/${entry.name}`,
|
|
390
|
+
source: sourcePath,
|
|
391
|
+
target: targetPath,
|
|
392
|
+
action: "skipped",
|
|
393
|
+
});
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
return items;
|
|
398
|
+
}
|
|
399
|
+
/**
|
|
400
|
+
* Sync hooks to .claude/hooks/.
|
|
401
|
+
*
|
|
402
|
+
* Core hooks are ALWAYS deployed from the framework (regardless of installed modules).
|
|
403
|
+
* Additional module-specific hooks can be provided by installed modules.
|
|
404
|
+
* These hooks integrate with Claude Code's hook system.
|
|
405
|
+
*
|
|
406
|
+
* @param modules - List of installed module manifests (for module-specific hooks)
|
|
407
|
+
* @returns List of sync actions performed
|
|
408
|
+
*/
|
|
409
|
+
async syncHooks(modules) {
|
|
410
|
+
const items = [];
|
|
411
|
+
const targetDir = path.join(this.projectPath, ".claude/hooks");
|
|
412
|
+
// Ensure target directory exists
|
|
413
|
+
await fs.ensureDir(targetDir);
|
|
414
|
+
// Helper to sync hooks from a directory
|
|
415
|
+
const syncHooksFromDir = async (hooksSourceDir, hooksTargetDir = targetDir) => {
|
|
416
|
+
if (!(await fs.pathExists(hooksSourceDir))) {
|
|
417
|
+
return;
|
|
418
|
+
}
|
|
419
|
+
// Find all hook scripts (*.sh or *.js files)
|
|
420
|
+
const entries = await fs.readdir(hooksSourceDir, { withFileTypes: true });
|
|
421
|
+
for (const entry of entries) {
|
|
422
|
+
// Skip special files
|
|
423
|
+
if (SyncEngine.SKIP_FILES.has(entry.name)) {
|
|
424
|
+
continue;
|
|
425
|
+
}
|
|
426
|
+
// Recurse into subdirectories (e.g., _lib/)
|
|
427
|
+
if (entry.isDirectory()) {
|
|
428
|
+
const subSourceDir = path.join(hooksSourceDir, entry.name);
|
|
429
|
+
const subTargetDir = path.join(hooksTargetDir, entry.name);
|
|
430
|
+
await fs.ensureDir(subTargetDir);
|
|
431
|
+
await syncHooksFromDir(subSourceDir, subTargetDir);
|
|
432
|
+
continue;
|
|
433
|
+
}
|
|
434
|
+
// Only sync shell scripts and JavaScript files
|
|
435
|
+
if (!entry.name.endsWith(".sh") && !entry.name.endsWith(".js")) {
|
|
436
|
+
continue;
|
|
437
|
+
}
|
|
438
|
+
const sourcePath = path.join(hooksSourceDir, entry.name);
|
|
439
|
+
const targetPath = path.join(hooksTargetDir, entry.name);
|
|
440
|
+
try {
|
|
441
|
+
// Copy the hook file
|
|
442
|
+
await fs.copy(sourcePath, targetPath, { overwrite: true });
|
|
443
|
+
// Make shell scripts executable
|
|
444
|
+
if (entry.name.endsWith(".sh")) {
|
|
445
|
+
await fs.chmod(targetPath, 0o755);
|
|
446
|
+
}
|
|
447
|
+
items.push({
|
|
448
|
+
name: entry.name,
|
|
449
|
+
source: sourcePath,
|
|
450
|
+
target: targetPath,
|
|
451
|
+
action: "updated",
|
|
452
|
+
});
|
|
453
|
+
}
|
|
454
|
+
catch (_error) {
|
|
455
|
+
items.push({
|
|
456
|
+
name: entry.name,
|
|
457
|
+
source: sourcePath,
|
|
458
|
+
target: targetPath,
|
|
459
|
+
action: "skipped",
|
|
460
|
+
});
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
};
|
|
464
|
+
// 1. ALWAYS sync core hooks from framework (infrastructure)
|
|
465
|
+
const frameworkRoot = getFrameworkRoot();
|
|
466
|
+
const coreHooksDir = path.join(frameworkRoot, "modules", "core", "hooks");
|
|
467
|
+
await syncHooksFromDir(coreHooksDir);
|
|
468
|
+
// 2. Sync module-specific hooks (if any module provides additional hooks)
|
|
469
|
+
for (const module of modules) {
|
|
470
|
+
if (!module._sourcePath) {
|
|
471
|
+
continue;
|
|
472
|
+
}
|
|
473
|
+
// Skip core module (already synced above)
|
|
474
|
+
if (module.id === "core") {
|
|
475
|
+
continue;
|
|
476
|
+
}
|
|
477
|
+
const moduleHooksDir = path.join(module._sourcePath, "hooks");
|
|
478
|
+
await syncHooksFromDir(moduleHooksDir);
|
|
479
|
+
}
|
|
480
|
+
return items;
|
|
481
|
+
}
|
|
482
|
+
/**
|
|
483
|
+
* Sync statusline script to .claude/statusline.sh.
|
|
484
|
+
*
|
|
485
|
+
* The statusline provides real-time feedback in the Claude Code status bar.
|
|
486
|
+
* This is framework infrastructure that should always be updated during sync.
|
|
487
|
+
*
|
|
488
|
+
* @returns Sync item indicating action taken
|
|
489
|
+
*/
|
|
490
|
+
async syncStatusline() {
|
|
491
|
+
const targetPath = path.join(this.projectPath, ".claude/statusline.sh");
|
|
492
|
+
try {
|
|
493
|
+
await fs.ensureDir(path.dirname(targetPath));
|
|
494
|
+
await fs.writeFile(targetPath, statuslineTemplate, "utf-8");
|
|
495
|
+
await fs.chmod(targetPath, 0o755);
|
|
496
|
+
return {
|
|
497
|
+
name: "statusline.sh",
|
|
498
|
+
source: "inline-template",
|
|
499
|
+
target: targetPath,
|
|
500
|
+
action: "updated",
|
|
501
|
+
};
|
|
502
|
+
}
|
|
503
|
+
catch (_error) {
|
|
504
|
+
return {
|
|
505
|
+
name: "statusline.sh",
|
|
506
|
+
source: "inline-template",
|
|
507
|
+
target: targetPath,
|
|
508
|
+
action: "skipped",
|
|
509
|
+
};
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
/**
|
|
513
|
+
* Sync configuration files.
|
|
514
|
+
*
|
|
515
|
+
* Updates .agentic-framework.json with lastSyncAt timestamp and creates
|
|
516
|
+
* .claude/settings.local.json if it doesn't exist (preserves user customizations).
|
|
517
|
+
*
|
|
518
|
+
* @returns Config sync result indicating actions taken
|
|
519
|
+
*/
|
|
520
|
+
async syncConfig() {
|
|
521
|
+
const result = {
|
|
522
|
+
agenticFramework: "skipped",
|
|
523
|
+
settingsLocal: "skipped",
|
|
524
|
+
settingsJson: "skipped",
|
|
525
|
+
};
|
|
526
|
+
// Update .agentic-framework.json
|
|
527
|
+
const agenticFrameworkPath = path.join(this.projectPath, ".agentic-framework.json");
|
|
528
|
+
try {
|
|
529
|
+
if (await fs.pathExists(agenticFrameworkPath)) {
|
|
530
|
+
const config = await fs.readJson(agenticFrameworkPath);
|
|
531
|
+
config.framework = config.framework || {};
|
|
532
|
+
config.framework.lastSyncAt = new Date().toISOString();
|
|
533
|
+
await fs.writeJson(agenticFrameworkPath, config, { spaces: 2 });
|
|
534
|
+
result.agenticFramework = "updated";
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
catch (_error) {
|
|
538
|
+
// If we can't update, skip silently
|
|
539
|
+
}
|
|
540
|
+
// Create .claude/settings.local.json if missing
|
|
541
|
+
const settingsLocalPath = path.join(this.projectPath, ".claude/settings.local.json");
|
|
542
|
+
try {
|
|
543
|
+
if (!(await fs.pathExists(settingsLocalPath))) {
|
|
544
|
+
// Load template from core module
|
|
545
|
+
const templatePath = path.join(this.frameworkRoot, "framework/modules/core/templates/config/settings.local.json.template");
|
|
546
|
+
if (await fs.pathExists(templatePath)) {
|
|
547
|
+
const templateContent = await fs.readFile(templatePath, "utf-8");
|
|
548
|
+
await fs.ensureDir(path.dirname(settingsLocalPath));
|
|
549
|
+
await fs.writeFile(settingsLocalPath, templateContent, "utf-8");
|
|
550
|
+
result.settingsLocal = "created";
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
catch (_error) {
|
|
555
|
+
// If we can't create, skip silently
|
|
556
|
+
}
|
|
557
|
+
// Migration: remove hooks from settings.local.json if they exist
|
|
558
|
+
// (hooks now live in settings.json, framework-owned)
|
|
559
|
+
try {
|
|
560
|
+
if (await fs.pathExists(settingsLocalPath)) {
|
|
561
|
+
const settingsLocal = await fs.readJson(settingsLocalPath);
|
|
562
|
+
if (settingsLocal.hooks) {
|
|
563
|
+
delete settingsLocal.hooks;
|
|
564
|
+
await fs.writeJson(settingsLocalPath, settingsLocal, { spaces: 2 });
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
catch (_migrationError) {
|
|
569
|
+
// Skip migration silently
|
|
570
|
+
}
|
|
571
|
+
// Sync settings.json (framework-owned, always overwritten)
|
|
572
|
+
result.settingsJson = await this.syncSettingsJson();
|
|
573
|
+
return result;
|
|
574
|
+
}
|
|
575
|
+
/**
|
|
576
|
+
* Sync framework-owned settings.json with hook configurations.
|
|
577
|
+
* Always overwrites hooks but preserves non-hook keys from existing file.
|
|
578
|
+
*/
|
|
579
|
+
async syncSettingsJson() {
|
|
580
|
+
const settingsJsonPath = path.join(this.projectPath, ".claude/settings.json");
|
|
581
|
+
const existed = await fs.pathExists(settingsJsonPath);
|
|
582
|
+
// Read disabled hooks from manifest
|
|
583
|
+
let disabledHooks = [];
|
|
584
|
+
try {
|
|
585
|
+
const manifestPath = path.join(this.projectPath, ".agentic-framework.json");
|
|
586
|
+
if (await fs.pathExists(manifestPath)) {
|
|
587
|
+
const manifest = await fs.readJson(manifestPath);
|
|
588
|
+
disabledHooks = manifest.hooks?.disabled || [];
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
catch (_e) {
|
|
592
|
+
// ignore
|
|
593
|
+
}
|
|
594
|
+
const settings = processSettingsJsonTemplate(this.projectPath, disabledHooks);
|
|
595
|
+
// Preserve non-hook keys from existing settings.json
|
|
596
|
+
if (existed) {
|
|
597
|
+
try {
|
|
598
|
+
const existing = await fs.readJson(settingsJsonPath);
|
|
599
|
+
for (const [key, value] of Object.entries(existing)) {
|
|
600
|
+
if (key !== "hooks") {
|
|
601
|
+
settings[key] = value;
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
catch (_e) {
|
|
606
|
+
// ignore parse errors
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
await fs.ensureDir(path.dirname(settingsJsonPath));
|
|
610
|
+
await fs.writeJson(settingsJsonPath, settings, { spaces: 2 });
|
|
611
|
+
return existed ? "updated" : "created";
|
|
612
|
+
}
|
|
613
|
+
/**
|
|
614
|
+
* Check if sync is needed without making changes.
|
|
615
|
+
*
|
|
616
|
+
* Compares source files with deployed files to determine if synchronization
|
|
617
|
+
* is required. Used by pre-commit hooks to validate that deployment files
|
|
618
|
+
* are up to date.
|
|
619
|
+
*
|
|
620
|
+
* @param modules - List of installed module manifests
|
|
621
|
+
* @returns Check result indicating if sync is needed
|
|
622
|
+
*/
|
|
623
|
+
async checkSync(modules) {
|
|
624
|
+
const skillsNeedSync = [];
|
|
625
|
+
const agentsNeedSync = [];
|
|
626
|
+
const commandsNeedSync = [];
|
|
627
|
+
const projectSkillsNeedSync = [];
|
|
628
|
+
// Check framework skills
|
|
629
|
+
for (const module of modules) {
|
|
630
|
+
if (!module._sourcePath) {
|
|
631
|
+
continue;
|
|
632
|
+
}
|
|
633
|
+
const skillsSourceDir = path.join(module._sourcePath, "skills");
|
|
634
|
+
if (await fs.pathExists(skillsSourceDir)) {
|
|
635
|
+
const skillDirs = await this.findSkillDirectories(skillsSourceDir);
|
|
636
|
+
for (const skillDir of skillDirs) {
|
|
637
|
+
const skillName = path.basename(skillDir);
|
|
638
|
+
const targetPath = path.join(this.projectPath, ".claude/skills", skillName);
|
|
639
|
+
if (!(await this.isDirectoryInSync(skillDir, targetPath))) {
|
|
640
|
+
skillsNeedSync.push(skillName);
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
// Check agents (deployed based on deploy-to frontmatter field)
|
|
645
|
+
const agentsSourceDir = path.join(module._sourcePath, "agents");
|
|
646
|
+
if (await fs.pathExists(agentsSourceDir)) {
|
|
647
|
+
const agentFiles = await this.findAgentFiles(agentsSourceDir);
|
|
648
|
+
for (const agentFile of agentFiles) {
|
|
649
|
+
const agentName = path.basename(agentFile, ".md");
|
|
650
|
+
const deployTo = await this.getAgentDeployTarget(agentFile);
|
|
651
|
+
const commandsTarget = path.join(this.projectPath, ".claude/commands", path.basename(agentFile));
|
|
652
|
+
const agentsTarget = path.join(this.projectPath, ".claude/agents", path.basename(agentFile));
|
|
653
|
+
let needsSync = false;
|
|
654
|
+
if (deployTo !== "agent") {
|
|
655
|
+
needsSync =
|
|
656
|
+
needsSync ||
|
|
657
|
+
!(await this.isFileInSync(agentFile, commandsTarget));
|
|
658
|
+
}
|
|
659
|
+
if (deployTo !== "command") {
|
|
660
|
+
needsSync =
|
|
661
|
+
needsSync || !(await this.isFileInSync(agentFile, agentsTarget));
|
|
662
|
+
}
|
|
663
|
+
if (needsSync) {
|
|
664
|
+
agentsNeedSync.push(agentName);
|
|
665
|
+
}
|
|
666
|
+
}
|
|
667
|
+
}
|
|
668
|
+
// Check commands
|
|
669
|
+
const commandsSourceDir = path.join(module._sourcePath, "commands");
|
|
670
|
+
if (await fs.pathExists(commandsSourceDir)) {
|
|
671
|
+
const commandFiles = await this.findCommandFiles(commandsSourceDir);
|
|
672
|
+
for (const commandFile of commandFiles) {
|
|
673
|
+
const commandName = path.basename(commandFile, ".md");
|
|
674
|
+
const targetPath = path.join(this.projectPath, ".claude/commands", path.basename(commandFile));
|
|
675
|
+
if (!(await this.isFileInSync(commandFile, targetPath))) {
|
|
676
|
+
commandsNeedSync.push(commandName);
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
}
|
|
680
|
+
}
|
|
681
|
+
// Check project skills
|
|
682
|
+
const projectSkillsDir = path.join(this.projectPath, ".claude/skills/project");
|
|
683
|
+
if (await fs.pathExists(projectSkillsDir)) {
|
|
684
|
+
const skillDirs = await this.findSkillDirectories(projectSkillsDir);
|
|
685
|
+
for (const skillDir of skillDirs) {
|
|
686
|
+
const skillName = path.basename(skillDir);
|
|
687
|
+
const targetPath = path.join(this.projectPath, ".claude/skills", skillName);
|
|
688
|
+
if (!(await this.isDirectoryInSync(skillDir, targetPath))) {
|
|
689
|
+
projectSkillsNeedSync.push(skillName);
|
|
690
|
+
}
|
|
691
|
+
}
|
|
692
|
+
}
|
|
693
|
+
// Check for missing files (deleted but still registered)
|
|
694
|
+
const missingFiles = await this.checkMissingFiles(modules);
|
|
695
|
+
// Merge missing files into needs-sync lists
|
|
696
|
+
const allSkillsNeedSync = [
|
|
697
|
+
...new Set([...skillsNeedSync, ...missingFiles.missingSkills]),
|
|
698
|
+
];
|
|
699
|
+
const allAgentsNeedSync = [
|
|
700
|
+
...new Set([...agentsNeedSync, ...missingFiles.missingAgents]),
|
|
701
|
+
];
|
|
702
|
+
const allCommandsNeedSync = [
|
|
703
|
+
...new Set([...commandsNeedSync, ...missingFiles.missingCommands]),
|
|
704
|
+
];
|
|
705
|
+
return {
|
|
706
|
+
inSync: allSkillsNeedSync.length === 0 &&
|
|
707
|
+
allAgentsNeedSync.length === 0 &&
|
|
708
|
+
allCommandsNeedSync.length === 0 &&
|
|
709
|
+
projectSkillsNeedSync.length === 0,
|
|
710
|
+
skillsNeedSync: allSkillsNeedSync,
|
|
711
|
+
agentsNeedSync: allAgentsNeedSync,
|
|
712
|
+
commandsNeedSync: allCommandsNeedSync,
|
|
713
|
+
projectSkillsNeedSync,
|
|
714
|
+
};
|
|
715
|
+
}
|
|
716
|
+
/**
|
|
717
|
+
* Check if deployed files are missing (regardless of content).
|
|
718
|
+
*
|
|
719
|
+
* Detects when files have been deleted from .claude/ but modules
|
|
720
|
+
* are still registered in the manifest.
|
|
721
|
+
*
|
|
722
|
+
* @param modules - List of installed module manifests
|
|
723
|
+
* @returns Lists of missing skills, agents, and commands
|
|
724
|
+
*/
|
|
725
|
+
async checkMissingFiles(modules) {
|
|
726
|
+
const missingSkills = [];
|
|
727
|
+
const missingAgents = [];
|
|
728
|
+
const missingCommands = [];
|
|
729
|
+
for (const module of modules) {
|
|
730
|
+
if (!module._sourcePath)
|
|
731
|
+
continue;
|
|
732
|
+
// Check skills
|
|
733
|
+
const skillsSourceDir = path.join(module._sourcePath, "skills");
|
|
734
|
+
if (await fs.pathExists(skillsSourceDir)) {
|
|
735
|
+
const skillDirs = await this.findSkillDirectories(skillsSourceDir);
|
|
736
|
+
for (const skillDir of skillDirs) {
|
|
737
|
+
const skillName = path.basename(skillDir);
|
|
738
|
+
const targetPath = path.join(this.projectPath, ".claude/skills", skillName);
|
|
739
|
+
if (!(await fs.pathExists(targetPath))) {
|
|
740
|
+
missingSkills.push(skillName);
|
|
741
|
+
}
|
|
742
|
+
}
|
|
743
|
+
}
|
|
744
|
+
// Check agents (ai-*.md files) — deployed based on deploy-to frontmatter
|
|
745
|
+
const agentsSourceDir = path.join(module._sourcePath, "agents");
|
|
746
|
+
if (await fs.pathExists(agentsSourceDir)) {
|
|
747
|
+
const agentFiles = await this.findAgentFiles(agentsSourceDir);
|
|
748
|
+
for (const agentFile of agentFiles) {
|
|
749
|
+
const fileName = path.basename(agentFile);
|
|
750
|
+
const deployTo = await this.getAgentDeployTarget(agentFile);
|
|
751
|
+
const commandsTarget = path.join(this.projectPath, ".claude/commands", fileName);
|
|
752
|
+
const agentsTarget = path.join(this.projectPath, ".claude/agents", fileName);
|
|
753
|
+
let missing = false;
|
|
754
|
+
if (deployTo !== "agent") {
|
|
755
|
+
missing = missing || !(await fs.pathExists(commandsTarget));
|
|
756
|
+
}
|
|
757
|
+
if (deployTo !== "command") {
|
|
758
|
+
missing = missing || !(await fs.pathExists(agentsTarget));
|
|
759
|
+
}
|
|
760
|
+
if (missing) {
|
|
761
|
+
missingAgents.push(path.basename(agentFile, ".md"));
|
|
762
|
+
}
|
|
763
|
+
}
|
|
764
|
+
}
|
|
765
|
+
// Check commands (cmd-*.md files)
|
|
766
|
+
const commandsSourceDir = path.join(module._sourcePath, "commands");
|
|
767
|
+
if (await fs.pathExists(commandsSourceDir)) {
|
|
768
|
+
const commandFiles = (await fs.readdir(commandsSourceDir)).filter((f) => f.startsWith("cmd-") && f.endsWith(".md"));
|
|
769
|
+
for (const commandFile of commandFiles) {
|
|
770
|
+
const targetPath = path.join(this.projectPath, ".claude/commands", commandFile);
|
|
771
|
+
if (!(await fs.pathExists(targetPath))) {
|
|
772
|
+
missingCommands.push(path.basename(commandFile, ".md"));
|
|
773
|
+
}
|
|
774
|
+
}
|
|
775
|
+
}
|
|
776
|
+
}
|
|
777
|
+
return {
|
|
778
|
+
missingSkills,
|
|
779
|
+
missingAgents,
|
|
780
|
+
missingCommands,
|
|
781
|
+
};
|
|
782
|
+
}
|
|
783
|
+
/**
|
|
784
|
+
* Run full sync (skills + agents + project skills).
|
|
785
|
+
*
|
|
786
|
+
* Performs a complete synchronization of all framework skills, agents, and
|
|
787
|
+
* project skills to their deployment directories.
|
|
788
|
+
*
|
|
789
|
+
* @param modules - List of installed module manifests
|
|
790
|
+
* @returns Complete sync report with all actions and errors
|
|
791
|
+
*/
|
|
792
|
+
async syncAll(modules) {
|
|
793
|
+
const startTime = Date.now();
|
|
794
|
+
const errors = [];
|
|
795
|
+
// Sync framework skills
|
|
796
|
+
let skillItems = [];
|
|
797
|
+
try {
|
|
798
|
+
skillItems = await this.syncSkills(modules);
|
|
799
|
+
}
|
|
800
|
+
catch (error) {
|
|
801
|
+
errors.push({
|
|
802
|
+
item: "skills",
|
|
803
|
+
error: error instanceof Error ? error.message : String(error),
|
|
804
|
+
});
|
|
805
|
+
}
|
|
806
|
+
// Sync agents
|
|
807
|
+
let agentItems = [];
|
|
808
|
+
try {
|
|
809
|
+
agentItems = await this.syncAgents(modules);
|
|
810
|
+
}
|
|
811
|
+
catch (error) {
|
|
812
|
+
errors.push({
|
|
813
|
+
item: "agents",
|
|
814
|
+
error: error instanceof Error ? error.message : String(error),
|
|
815
|
+
});
|
|
816
|
+
}
|
|
817
|
+
// Sync commands (CLI command wrappers)
|
|
818
|
+
let commandItems = [];
|
|
819
|
+
try {
|
|
820
|
+
commandItems = await this.syncCommands(modules);
|
|
821
|
+
}
|
|
822
|
+
catch (error) {
|
|
823
|
+
errors.push({
|
|
824
|
+
item: "commands",
|
|
825
|
+
error: error instanceof Error ? error.message : String(error),
|
|
826
|
+
});
|
|
827
|
+
}
|
|
828
|
+
// Sync project skills
|
|
829
|
+
try {
|
|
830
|
+
const projectSkillItems = await this.syncProjectSkills();
|
|
831
|
+
skillItems = [...skillItems, ...projectSkillItems];
|
|
832
|
+
}
|
|
833
|
+
catch (error) {
|
|
834
|
+
errors.push({
|
|
835
|
+
item: "project-skills",
|
|
836
|
+
error: error instanceof Error ? error.message : String(error),
|
|
837
|
+
});
|
|
838
|
+
}
|
|
839
|
+
// Sync hooks
|
|
840
|
+
let hookItems = [];
|
|
841
|
+
try {
|
|
842
|
+
hookItems = await this.syncHooks(modules);
|
|
843
|
+
}
|
|
844
|
+
catch (error) {
|
|
845
|
+
errors.push({
|
|
846
|
+
item: "hooks",
|
|
847
|
+
error: error instanceof Error ? error.message : String(error),
|
|
848
|
+
});
|
|
849
|
+
}
|
|
850
|
+
// Sync statusline
|
|
851
|
+
let statuslineItem;
|
|
852
|
+
try {
|
|
853
|
+
statuslineItem = await this.syncStatusline();
|
|
854
|
+
}
|
|
855
|
+
catch (error) {
|
|
856
|
+
errors.push({
|
|
857
|
+
item: "statusline",
|
|
858
|
+
error: error instanceof Error ? error.message : String(error),
|
|
859
|
+
});
|
|
860
|
+
}
|
|
861
|
+
// Sync config files
|
|
862
|
+
let configResult;
|
|
863
|
+
try {
|
|
864
|
+
configResult = await this.syncConfig();
|
|
865
|
+
}
|
|
866
|
+
catch (error) {
|
|
867
|
+
errors.push({
|
|
868
|
+
item: "config",
|
|
869
|
+
error: error instanceof Error ? error.message : String(error),
|
|
870
|
+
});
|
|
871
|
+
}
|
|
872
|
+
// Validate synced output for hardcoded absolute paths
|
|
873
|
+
// This ensures source files use {project}/ placeholders correctly
|
|
874
|
+
const allSyncedItems = [...skillItems, ...agentItems, ...commandItems];
|
|
875
|
+
try {
|
|
876
|
+
await this.validateSyncOutput(allSyncedItems);
|
|
877
|
+
}
|
|
878
|
+
catch (validationError) {
|
|
879
|
+
errors.push({
|
|
880
|
+
item: "validation",
|
|
881
|
+
error: validationError instanceof Error
|
|
882
|
+
? validationError.message
|
|
883
|
+
: String(validationError),
|
|
884
|
+
});
|
|
885
|
+
}
|
|
886
|
+
const result = {
|
|
887
|
+
skills: skillItems,
|
|
888
|
+
agents: agentItems,
|
|
889
|
+
commands: commandItems,
|
|
890
|
+
hooks: hookItems,
|
|
891
|
+
statusline: statuslineItem,
|
|
892
|
+
config: configResult,
|
|
893
|
+
errors,
|
|
894
|
+
stats: {
|
|
895
|
+
skillsSynced: skillItems.filter((i) => i.action !== "skipped").length,
|
|
896
|
+
agentsSynced: agentItems.filter((i) => i.action !== "skipped").length,
|
|
897
|
+
commandsSynced: commandItems.filter((i) => i.action !== "skipped")
|
|
898
|
+
.length,
|
|
899
|
+
hooksSynced: hookItems.filter((i) => i.action !== "skipped").length,
|
|
900
|
+
errors: errors.length,
|
|
901
|
+
},
|
|
902
|
+
};
|
|
903
|
+
// Record telemetry
|
|
904
|
+
const durationMs = Date.now() - startTime;
|
|
905
|
+
const totalFiles = skillItems.length +
|
|
906
|
+
agentItems.length +
|
|
907
|
+
commandItems.length +
|
|
908
|
+
hookItems.length;
|
|
909
|
+
const changesDetected = skillItems.filter((i) => i.action !== "skipped").length +
|
|
910
|
+
agentItems.filter((i) => i.action !== "skipped").length +
|
|
911
|
+
commandItems.filter((i) => i.action !== "skipped").length +
|
|
912
|
+
hookItems.filter((i) => i.action !== "skipped").length;
|
|
913
|
+
const filesWritten = changesDetected; // Files with changes are written
|
|
914
|
+
recordSyncAll(totalFiles, changesDetected, filesWritten, durationMs, errors.length).catch(() => {
|
|
915
|
+
// Ignore telemetry errors
|
|
916
|
+
});
|
|
917
|
+
return result;
|
|
918
|
+
}
|
|
919
|
+
/**
|
|
920
|
+
* Find all skill directories within a source directory.
|
|
921
|
+
*
|
|
922
|
+
* Skills may be nested in taxonomy structures (shared/, core/, etc.).
|
|
923
|
+
* This method recursively finds all directories that contain SKILL.md files.
|
|
924
|
+
*
|
|
925
|
+
* @param sourceDir - Root directory to search for skills
|
|
926
|
+
* @returns List of absolute paths to skill directories
|
|
927
|
+
*/
|
|
928
|
+
async findSkillDirectories(sourceDir) {
|
|
929
|
+
const skillDirs = [];
|
|
930
|
+
const entries = await fs.readdir(sourceDir, { withFileTypes: true });
|
|
931
|
+
for (const entry of entries) {
|
|
932
|
+
if (!entry.isDirectory()) {
|
|
933
|
+
continue;
|
|
934
|
+
}
|
|
935
|
+
const fullPath = path.join(sourceDir, entry.name);
|
|
936
|
+
// Check if this directory is a skill (contains SKILL.md)
|
|
937
|
+
const skillMdPath = path.join(fullPath, "SKILL.md");
|
|
938
|
+
if (await fs.pathExists(skillMdPath)) {
|
|
939
|
+
skillDirs.push(fullPath);
|
|
940
|
+
}
|
|
941
|
+
else {
|
|
942
|
+
// Recurse into subdirectories (taxonomy structure)
|
|
943
|
+
const subSkills = await this.findSkillDirectories(fullPath);
|
|
944
|
+
skillDirs.push(...subSkills);
|
|
945
|
+
}
|
|
946
|
+
}
|
|
947
|
+
return skillDirs;
|
|
948
|
+
}
|
|
949
|
+
/**
|
|
950
|
+
* Find all agent files within a source directory.
|
|
951
|
+
*
|
|
952
|
+
* Agent files follow the ai-*.md naming pattern.
|
|
953
|
+
*
|
|
954
|
+
* @param sourceDir - Directory to search for agent files
|
|
955
|
+
* @returns List of absolute paths to agent files
|
|
956
|
+
*/
|
|
957
|
+
async findAgentFiles(sourceDir) {
|
|
958
|
+
const agentFiles = [];
|
|
959
|
+
const entries = await fs.readdir(sourceDir);
|
|
960
|
+
for (const entry of entries) {
|
|
961
|
+
if (entry.startsWith("ai-") && entry.endsWith(".md")) {
|
|
962
|
+
const fullPath = path.join(sourceDir, entry);
|
|
963
|
+
const stats = await fs.stat(fullPath);
|
|
964
|
+
if (stats.isFile()) {
|
|
965
|
+
agentFiles.push(fullPath);
|
|
966
|
+
}
|
|
967
|
+
}
|
|
968
|
+
}
|
|
969
|
+
return agentFiles;
|
|
970
|
+
}
|
|
971
|
+
/**
|
|
972
|
+
* Read the deploy-to field from an agent markdown file's YAML frontmatter.
|
|
973
|
+
* Returns 'both' if field is absent (backward-compatible default).
|
|
974
|
+
*/
|
|
975
|
+
async getAgentDeployTarget(filePath) {
|
|
976
|
+
try {
|
|
977
|
+
const content = await fs.readFile(filePath, "utf-8");
|
|
978
|
+
const match = content.match(/^---\n([\s\S]*?)\n---/);
|
|
979
|
+
if (match) {
|
|
980
|
+
const frontmatter = yaml.parse(match[1]);
|
|
981
|
+
const deployTo = frontmatter["deploy-to"];
|
|
982
|
+
if (deployTo === "command" ||
|
|
983
|
+
deployTo === "agent" ||
|
|
984
|
+
deployTo === "both") {
|
|
985
|
+
return deployTo;
|
|
986
|
+
}
|
|
987
|
+
}
|
|
988
|
+
}
|
|
989
|
+
catch {
|
|
990
|
+
// If parsing fails, default to both
|
|
991
|
+
}
|
|
992
|
+
return "both";
|
|
993
|
+
}
|
|
994
|
+
/**
|
|
995
|
+
* Find all command files within a source directory.
|
|
996
|
+
*
|
|
997
|
+
* Command files follow the cmd-*.md naming pattern.
|
|
998
|
+
*
|
|
999
|
+
* @param sourceDir - Directory to search for command files
|
|
1000
|
+
* @returns List of absolute paths to command files
|
|
1001
|
+
*/
|
|
1002
|
+
async findCommandFiles(sourceDir) {
|
|
1003
|
+
const commandFiles = [];
|
|
1004
|
+
const entries = await fs.readdir(sourceDir);
|
|
1005
|
+
for (const entry of entries) {
|
|
1006
|
+
if (entry.startsWith("cmd-") && entry.endsWith(".md")) {
|
|
1007
|
+
const fullPath = path.join(sourceDir, entry);
|
|
1008
|
+
const stats = await fs.stat(fullPath);
|
|
1009
|
+
if (stats.isFile()) {
|
|
1010
|
+
commandFiles.push(fullPath);
|
|
1011
|
+
}
|
|
1012
|
+
}
|
|
1013
|
+
}
|
|
1014
|
+
return commandFiles;
|
|
1015
|
+
}
|
|
1016
|
+
/**
|
|
1017
|
+
* Copy a skill directory to the target location.
|
|
1018
|
+
*
|
|
1019
|
+
* Recursively copies all files in the skill directory, skipping special files
|
|
1020
|
+
* (.DS_Store, etc.) and transforming markdown links in .md files.
|
|
1021
|
+
*
|
|
1022
|
+
* @param source - Source skill directory
|
|
1023
|
+
* @param target - Target deployment directory
|
|
1024
|
+
*/
|
|
1025
|
+
async copySkillDirectory(source, target) {
|
|
1026
|
+
// Ensure target directory exists
|
|
1027
|
+
await fs.ensureDir(target);
|
|
1028
|
+
const entries = await fs.readdir(source, { withFileTypes: true });
|
|
1029
|
+
for (const entry of entries) {
|
|
1030
|
+
// Skip special files
|
|
1031
|
+
if (SyncEngine.SKIP_FILES.has(entry.name)) {
|
|
1032
|
+
continue;
|
|
1033
|
+
}
|
|
1034
|
+
const sourcePath = path.join(source, entry.name);
|
|
1035
|
+
const targetPath = path.join(target, entry.name);
|
|
1036
|
+
if (entry.isDirectory()) {
|
|
1037
|
+
// Recursively copy subdirectories
|
|
1038
|
+
await this.copySkillDirectory(sourcePath, targetPath);
|
|
1039
|
+
}
|
|
1040
|
+
else if (entry.isFile()) {
|
|
1041
|
+
if (entry.name.endsWith(".md")) {
|
|
1042
|
+
// Transform markdown files
|
|
1043
|
+
await this.transformMarkdownLinks(sourcePath, targetPath);
|
|
1044
|
+
}
|
|
1045
|
+
else {
|
|
1046
|
+
// Copy other files as-is
|
|
1047
|
+
await fs.copy(sourcePath, targetPath, { overwrite: true });
|
|
1048
|
+
}
|
|
1049
|
+
}
|
|
1050
|
+
}
|
|
1051
|
+
}
|
|
1052
|
+
/**
|
|
1053
|
+
* Copy a template directory to the target location.
|
|
1054
|
+
*
|
|
1055
|
+
* Recursively copies all files in the template directory, skipping special files
|
|
1056
|
+
* (.DS_Store, etc.). Template files are copied as-is without link transformation.
|
|
1057
|
+
*
|
|
1058
|
+
* @param source - Source template directory
|
|
1059
|
+
* @param target - Target deployment directory
|
|
1060
|
+
*/
|
|
1061
|
+
async copyTemplateDirectory(source, target) {
|
|
1062
|
+
// Ensure target directory exists
|
|
1063
|
+
await fs.ensureDir(target);
|
|
1064
|
+
const entries = await fs.readdir(source, { withFileTypes: true });
|
|
1065
|
+
for (const entry of entries) {
|
|
1066
|
+
// Skip special files
|
|
1067
|
+
if (SyncEngine.SKIP_FILES.has(entry.name)) {
|
|
1068
|
+
continue;
|
|
1069
|
+
}
|
|
1070
|
+
const sourcePath = path.join(source, entry.name);
|
|
1071
|
+
const targetPath = path.join(target, entry.name);
|
|
1072
|
+
if (entry.isDirectory()) {
|
|
1073
|
+
// Recursively copy subdirectories
|
|
1074
|
+
await this.copyTemplateDirectory(sourcePath, targetPath);
|
|
1075
|
+
}
|
|
1076
|
+
else if (entry.isFile()) {
|
|
1077
|
+
// Copy files as-is (templates don't need link transformation)
|
|
1078
|
+
await fs.copy(sourcePath, targetPath, { overwrite: true });
|
|
1079
|
+
}
|
|
1080
|
+
}
|
|
1081
|
+
}
|
|
1082
|
+
/**
|
|
1083
|
+
* Copy an agent file to the target location.
|
|
1084
|
+
*
|
|
1085
|
+
* Copies the agent file and transforms markdown links.
|
|
1086
|
+
*
|
|
1087
|
+
* @param source - Source agent file path
|
|
1088
|
+
* @param target - Target deployment file path
|
|
1089
|
+
*/
|
|
1090
|
+
async copyAgentFile(source, target) {
|
|
1091
|
+
// Agents are always markdown files, so transform links
|
|
1092
|
+
await this.transformMarkdownLinks(source, target);
|
|
1093
|
+
}
|
|
1094
|
+
/**
|
|
1095
|
+
* Transform markdown links in a file and write to target.
|
|
1096
|
+
*
|
|
1097
|
+
* Uses LinkTransformer to transform relative links to absolute paths,
|
|
1098
|
+
* ensuring links remain valid in the deployment location.
|
|
1099
|
+
*
|
|
1100
|
+
* @param sourcePath - Source file path
|
|
1101
|
+
* @param targetPath - Target file path
|
|
1102
|
+
*/
|
|
1103
|
+
async transformMarkdownLinks(sourcePath, targetPath) {
|
|
1104
|
+
const transformedContent = await this.linkTransformer.transformFile(sourcePath, targetPath);
|
|
1105
|
+
await fs.writeFile(targetPath, transformedContent, "utf-8");
|
|
1106
|
+
}
|
|
1107
|
+
/**
|
|
1108
|
+
* Check if a file is in sync between source and target.
|
|
1109
|
+
*
|
|
1110
|
+
* Compares the transformed content of the source file with the target file.
|
|
1111
|
+
* For markdown files, applies link transformation before comparison.
|
|
1112
|
+
*
|
|
1113
|
+
* @param sourcePath - Source file path
|
|
1114
|
+
* @param targetPath - Target file path
|
|
1115
|
+
* @returns True if files are in sync, false otherwise
|
|
1116
|
+
*/
|
|
1117
|
+
async isFileInSync(sourcePath, targetPath) {
|
|
1118
|
+
// Check if target exists
|
|
1119
|
+
if (!(await fs.pathExists(targetPath))) {
|
|
1120
|
+
return false;
|
|
1121
|
+
}
|
|
1122
|
+
try {
|
|
1123
|
+
// Read target content
|
|
1124
|
+
const targetContent = await fs.readFile(targetPath, "utf-8");
|
|
1125
|
+
// For markdown files, transform source and compare
|
|
1126
|
+
if (sourcePath.endsWith(".md")) {
|
|
1127
|
+
const transformedContent = await this.linkTransformer.transformFile(sourcePath, targetPath);
|
|
1128
|
+
return transformedContent === targetContent;
|
|
1129
|
+
}
|
|
1130
|
+
// For non-markdown files, direct comparison
|
|
1131
|
+
const sourceContent = await fs.readFile(sourcePath, "utf-8");
|
|
1132
|
+
return sourceContent === targetContent;
|
|
1133
|
+
}
|
|
1134
|
+
catch (_error) {
|
|
1135
|
+
// If we can't read/compare, assume out of sync
|
|
1136
|
+
return false;
|
|
1137
|
+
}
|
|
1138
|
+
}
|
|
1139
|
+
/**
|
|
1140
|
+
* Check if a directory is in sync between source and target.
|
|
1141
|
+
*
|
|
1142
|
+
* Recursively compares all files in the directory, accounting for
|
|
1143
|
+
* transformed markdown links.
|
|
1144
|
+
*
|
|
1145
|
+
* @param sourceDir - Source directory path
|
|
1146
|
+
* @param targetDir - Target directory path
|
|
1147
|
+
* @returns True if directories are in sync, false otherwise
|
|
1148
|
+
*/
|
|
1149
|
+
async isDirectoryInSync(sourceDir, targetDir) {
|
|
1150
|
+
// Check if target directory exists
|
|
1151
|
+
if (!(await fs.pathExists(targetDir))) {
|
|
1152
|
+
return false;
|
|
1153
|
+
}
|
|
1154
|
+
try {
|
|
1155
|
+
const sourceEntries = await fs.readdir(sourceDir, {
|
|
1156
|
+
withFileTypes: true,
|
|
1157
|
+
});
|
|
1158
|
+
for (const entry of sourceEntries) {
|
|
1159
|
+
// Skip special files
|
|
1160
|
+
if (SyncEngine.SKIP_FILES.has(entry.name)) {
|
|
1161
|
+
continue;
|
|
1162
|
+
}
|
|
1163
|
+
const sourcePath = path.join(sourceDir, entry.name);
|
|
1164
|
+
const targetPath = path.join(targetDir, entry.name);
|
|
1165
|
+
if (entry.isDirectory()) {
|
|
1166
|
+
// Recursively check subdirectories
|
|
1167
|
+
if (!(await this.isDirectoryInSync(sourcePath, targetPath))) {
|
|
1168
|
+
return false;
|
|
1169
|
+
}
|
|
1170
|
+
}
|
|
1171
|
+
else if (entry.isFile()) {
|
|
1172
|
+
// Check individual file
|
|
1173
|
+
if (!(await this.isFileInSync(sourcePath, targetPath))) {
|
|
1174
|
+
return false;
|
|
1175
|
+
}
|
|
1176
|
+
}
|
|
1177
|
+
}
|
|
1178
|
+
return true;
|
|
1179
|
+
}
|
|
1180
|
+
catch (_error) {
|
|
1181
|
+
// If we can't read/compare, assume out of sync
|
|
1182
|
+
return false;
|
|
1183
|
+
}
|
|
1184
|
+
}
|
|
1185
|
+
/**
|
|
1186
|
+
* Validate synced output files for hardcoded absolute paths.
|
|
1187
|
+
*
|
|
1188
|
+
* This method ensures that no hardcoded user-specific absolute paths
|
|
1189
|
+
* (like /Users/username/...) remain in synced files. These paths indicate
|
|
1190
|
+
* that source files were not properly updated to use {project} placeholders.
|
|
1191
|
+
*
|
|
1192
|
+
* @param syncedItems - List of items that were synced
|
|
1193
|
+
* @throws Error if any violations are detected
|
|
1194
|
+
*/
|
|
1195
|
+
async validateSyncOutput(syncedItems) {
|
|
1196
|
+
const violations = [];
|
|
1197
|
+
// Pattern to detect hardcoded absolute paths (Unix and Windows)
|
|
1198
|
+
// Matches: /Users/, /home/, /var/, C:\, D:\, etc.
|
|
1199
|
+
// But NOT {project}/ placeholders (those are valid)
|
|
1200
|
+
const absolutePathPattern = /(?<!{project})\/(?:Users|home|var)\/[^\s)>\]]+|[A-Z]:\\/g;
|
|
1201
|
+
for (const item of syncedItems) {
|
|
1202
|
+
// Skip items that weren't actually synced
|
|
1203
|
+
if (item.action === "skipped") {
|
|
1204
|
+
continue;
|
|
1205
|
+
}
|
|
1206
|
+
// Only check markdown files
|
|
1207
|
+
if (!item.target.endsWith(".md")) {
|
|
1208
|
+
continue;
|
|
1209
|
+
}
|
|
1210
|
+
try {
|
|
1211
|
+
const content = await fs.readFile(item.target, "utf-8");
|
|
1212
|
+
const lines = content.split("\n");
|
|
1213
|
+
lines.forEach((line, idx) => {
|
|
1214
|
+
// Skip lines that are inside code blocks (backticks)
|
|
1215
|
+
// Simple heuristic: skip lines that are examples or documentation
|
|
1216
|
+
const isCodeExample = line.includes("```") ||
|
|
1217
|
+
line.trim().startsWith("`") ||
|
|
1218
|
+
/^\s*#/.test(line) || // Shell comments in examples
|
|
1219
|
+
/read_file\(|write_file\(|edit_file\(/.test(line); // MCP tool examples
|
|
1220
|
+
if (isCodeExample) {
|
|
1221
|
+
return;
|
|
1222
|
+
}
|
|
1223
|
+
const matches = line.match(absolutePathPattern);
|
|
1224
|
+
if (matches) {
|
|
1225
|
+
for (const match of matches) {
|
|
1226
|
+
violations.push({
|
|
1227
|
+
file: item.target,
|
|
1228
|
+
line: idx + 1,
|
|
1229
|
+
match,
|
|
1230
|
+
context: line.trim().substring(0, 100),
|
|
1231
|
+
});
|
|
1232
|
+
}
|
|
1233
|
+
}
|
|
1234
|
+
});
|
|
1235
|
+
}
|
|
1236
|
+
catch (_error) {
|
|
1237
|
+
// If we can't read the file, skip validation for it
|
|
1238
|
+
continue;
|
|
1239
|
+
}
|
|
1240
|
+
}
|
|
1241
|
+
if (violations.length > 0) {
|
|
1242
|
+
const violationReport = violations
|
|
1243
|
+
.slice(0, 10) // Limit to first 10 for readability
|
|
1244
|
+
.map((v) => ` ${v.file}:${v.line} - "${v.match}"\n Context: ${v.context}`)
|
|
1245
|
+
.join("\n");
|
|
1246
|
+
const moreMsg = violations.length > 10
|
|
1247
|
+
? `\n ... and ${violations.length - 10} more violations`
|
|
1248
|
+
: "";
|
|
1249
|
+
throw new Error(`Sync validation failed - hardcoded absolute paths detected in output:\n` +
|
|
1250
|
+
`${violationReport}${moreMsg}\n\n` +
|
|
1251
|
+
`Fix: Update source files to use {project}/ placeholders instead of absolute paths.`);
|
|
1252
|
+
}
|
|
1253
|
+
}
|
|
1254
|
+
}
|
|
1255
|
+
//# sourceMappingURL=sync-engine.js.map
|