@sk8metal/michi-cli 0.0.9 → 0.1.0
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/CHANGELOG.md +27 -0
- package/README.md +235 -57
- package/dist/scripts/__tests__/create-project.test.js +24 -28
- package/dist/scripts/__tests__/create-project.test.js.map +1 -1
- package/dist/scripts/__tests__/jira-transitions.test.d.ts +5 -0
- package/dist/scripts/__tests__/jira-transitions.test.d.ts.map +1 -0
- package/dist/scripts/__tests__/jira-transitions.test.js +172 -0
- package/dist/scripts/__tests__/jira-transitions.test.js.map +1 -0
- package/dist/scripts/__tests__/multi-project-estimate.test.js +14 -15
- package/dist/scripts/__tests__/multi-project-estimate.test.js.map +1 -1
- package/dist/scripts/__tests__/setup-existing-project.test.js +79 -0
- package/dist/scripts/__tests__/setup-existing-project.test.js.map +1 -1
- package/dist/scripts/__tests__/setup-interactive.test.js +23 -17
- package/dist/scripts/__tests__/setup-interactive.test.js.map +1 -1
- package/dist/scripts/__tests__/spec-impl-workflow.test.d.ts +5 -0
- package/dist/scripts/__tests__/spec-impl-workflow.test.d.ts.map +1 -0
- package/dist/scripts/__tests__/spec-impl-workflow.test.js +321 -0
- package/dist/scripts/__tests__/spec-impl-workflow.test.js.map +1 -0
- package/dist/scripts/__tests__/spec-loader.test.d.ts +5 -0
- package/dist/scripts/__tests__/spec-loader.test.d.ts.map +1 -0
- package/dist/scripts/__tests__/spec-loader.test.js +153 -0
- package/dist/scripts/__tests__/spec-loader.test.js.map +1 -0
- package/dist/scripts/__tests__/validate-phase.test.js +26 -22
- package/dist/scripts/__tests__/validate-phase.test.js.map +1 -1
- package/dist/scripts/config/config-schema.d.ts +17 -0
- package/dist/scripts/config/config-schema.d.ts.map +1 -1
- package/dist/scripts/config/config-schema.js +55 -26
- package/dist/scripts/config/config-schema.js.map +1 -1
- package/dist/scripts/config-interactive.d.ts.map +1 -1
- package/dist/scripts/config-interactive.js +53 -38
- package/dist/scripts/config-interactive.js.map +1 -1
- package/dist/scripts/confluence-sync.d.ts.map +1 -1
- package/dist/scripts/confluence-sync.js +0 -11
- package/dist/scripts/confluence-sync.js.map +1 -1
- package/dist/scripts/constants/__tests__/environments.test.js +39 -5
- package/dist/scripts/constants/__tests__/environments.test.js.map +1 -1
- package/dist/scripts/constants/environments.d.ts +1 -1
- package/dist/scripts/constants/environments.d.ts.map +1 -1
- package/dist/scripts/constants/environments.js +22 -7
- package/dist/scripts/constants/environments.js.map +1 -1
- package/dist/scripts/constants/test-commands.d.ts +36 -0
- package/dist/scripts/constants/test-commands.d.ts.map +1 -0
- package/dist/scripts/constants/test-commands.js +70 -0
- package/dist/scripts/constants/test-commands.js.map +1 -0
- package/dist/scripts/jira-sync.d.ts +89 -3
- package/dist/scripts/jira-sync.d.ts.map +1 -1
- package/dist/scripts/jira-sync.js +366 -96
- package/dist/scripts/jira-sync.js.map +1 -1
- package/dist/scripts/markdown-to-confluence.js +1 -1
- package/dist/scripts/markdown-to-confluence.js.map +1 -1
- package/dist/scripts/phase-runner.d.ts +1 -1
- package/dist/scripts/phase-runner.d.ts.map +1 -1
- package/dist/scripts/phase-runner.js +809 -13
- package/dist/scripts/phase-runner.js.map +1 -1
- package/dist/scripts/pr-automation.d.ts.map +1 -1
- package/dist/scripts/pr-automation.js.map +1 -1
- package/dist/scripts/pre-flight-check.js +1 -1
- package/dist/scripts/pre-flight-check.js.map +1 -1
- package/dist/scripts/setup-existing-project.js +61 -29
- package/dist/scripts/setup-existing-project.js.map +1 -1
- package/dist/scripts/setup-interactive.js +3 -3
- package/dist/scripts/setup-interactive.js.map +1 -1
- package/dist/scripts/spec-impl-workflow.d.ts +94 -0
- package/dist/scripts/spec-impl-workflow.d.ts.map +1 -0
- package/dist/scripts/spec-impl-workflow.js +354 -0
- package/dist/scripts/spec-impl-workflow.js.map +1 -0
- package/dist/scripts/template/__tests__/renderer.test.js.map +1 -1
- package/dist/scripts/test-execution-generator.d.ts +52 -0
- package/dist/scripts/test-execution-generator.d.ts.map +1 -0
- package/dist/scripts/test-execution-generator.js +576 -0
- package/dist/scripts/test-execution-generator.js.map +1 -0
- package/dist/scripts/test-interactive.d.ts +10 -0
- package/dist/scripts/test-interactive.d.ts.map +1 -0
- package/dist/scripts/test-interactive.js +627 -0
- package/dist/scripts/test-interactive.js.map +1 -0
- package/dist/scripts/test-new-features.d.ts +5 -0
- package/dist/scripts/test-new-features.d.ts.map +1 -0
- package/dist/scripts/test-new-features.js +145 -0
- package/dist/scripts/test-new-features.js.map +1 -0
- package/dist/scripts/test-spec-generator.d.ts +29 -0
- package/dist/scripts/test-spec-generator.d.ts.map +1 -0
- package/dist/scripts/test-spec-generator.js +494 -0
- package/dist/scripts/test-spec-generator.js.map +1 -0
- package/dist/scripts/test-workflow-stages.d.ts +6 -0
- package/dist/scripts/test-workflow-stages.d.ts.map +1 -0
- package/dist/scripts/test-workflow-stages.js +43 -0
- package/dist/scripts/test-workflow-stages.js.map +1 -0
- package/dist/scripts/utils/__tests__/aidlc-parser.test.d.ts +5 -0
- package/dist/scripts/utils/__tests__/aidlc-parser.test.d.ts.map +1 -0
- package/dist/scripts/utils/__tests__/aidlc-parser.test.js +315 -0
- package/dist/scripts/utils/__tests__/aidlc-parser.test.js.map +1 -0
- package/dist/scripts/utils/__tests__/business-days.test.d.ts +5 -0
- package/dist/scripts/utils/__tests__/business-days.test.d.ts.map +1 -0
- package/dist/scripts/utils/__tests__/business-days.test.js +171 -0
- package/dist/scripts/utils/__tests__/business-days.test.js.map +1 -0
- package/dist/scripts/utils/__tests__/config-loader.test.js +1 -1
- package/dist/scripts/utils/__tests__/config-loader.test.js.map +1 -1
- package/dist/scripts/utils/__tests__/config-validator.test.js +164 -35
- package/dist/scripts/utils/__tests__/config-validator.test.js.map +1 -1
- package/dist/scripts/utils/__tests__/env-config.test.d.ts +5 -0
- package/dist/scripts/utils/__tests__/env-config.test.d.ts.map +1 -0
- package/dist/scripts/utils/__tests__/env-config.test.js +218 -0
- package/dist/scripts/utils/__tests__/env-config.test.js.map +1 -0
- package/dist/scripts/utils/__tests__/jira-issue-type-fetcher.test.d.ts +5 -0
- package/dist/scripts/utils/__tests__/jira-issue-type-fetcher.test.d.ts.map +1 -0
- package/dist/scripts/utils/__tests__/jira-issue-type-fetcher.test.js +202 -0
- package/dist/scripts/utils/__tests__/jira-issue-type-fetcher.test.js.map +1 -0
- package/dist/scripts/utils/__tests__/tasks-converter.test.d.ts +5 -0
- package/dist/scripts/utils/__tests__/tasks-converter.test.d.ts.map +1 -0
- package/dist/scripts/utils/__tests__/tasks-converter.test.js +500 -0
- package/dist/scripts/utils/__tests__/tasks-converter.test.js.map +1 -0
- package/dist/scripts/utils/__tests__/tasks-format-validator.test.d.ts +5 -0
- package/dist/scripts/utils/__tests__/tasks-format-validator.test.d.ts.map +1 -0
- package/dist/scripts/utils/__tests__/tasks-format-validator.test.js +314 -0
- package/dist/scripts/utils/__tests__/tasks-format-validator.test.js.map +1 -0
- package/dist/scripts/utils/__tests__/test-runner.test.d.ts +5 -0
- package/dist/scripts/utils/__tests__/test-runner.test.d.ts.map +1 -0
- package/dist/scripts/utils/__tests__/test-runner.test.js +64 -0
- package/dist/scripts/utils/__tests__/test-runner.test.js.map +1 -0
- package/dist/scripts/utils/aidlc-parser.d.ts +86 -0
- package/dist/scripts/utils/aidlc-parser.d.ts.map +1 -0
- package/dist/scripts/utils/aidlc-parser.js +208 -0
- package/dist/scripts/utils/aidlc-parser.js.map +1 -0
- package/dist/scripts/utils/business-days.d.ts +52 -0
- package/dist/scripts/utils/business-days.d.ts.map +1 -0
- package/dist/scripts/utils/business-days.js +98 -0
- package/dist/scripts/utils/business-days.js.map +1 -0
- package/dist/scripts/utils/ci-generator.d.ts +14 -0
- package/dist/scripts/utils/ci-generator.d.ts.map +1 -0
- package/dist/scripts/utils/ci-generator.js +61 -0
- package/dist/scripts/utils/ci-generator.js.map +1 -0
- package/dist/scripts/utils/config-loader.js +2 -2
- package/dist/scripts/utils/config-loader.js.map +1 -1
- package/dist/scripts/utils/config-validator.d.ts +7 -1
- package/dist/scripts/utils/config-validator.d.ts.map +1 -1
- package/dist/scripts/utils/config-validator.js +136 -23
- package/dist/scripts/utils/config-validator.js.map +1 -1
- package/dist/scripts/utils/confluence-approval.d.ts +46 -0
- package/dist/scripts/utils/confluence-approval.d.ts.map +1 -0
- package/dist/scripts/utils/confluence-approval.js +118 -0
- package/dist/scripts/utils/confluence-approval.js.map +1 -0
- package/dist/scripts/utils/confluence-hierarchy.d.ts.map +1 -1
- package/dist/scripts/utils/confluence-hierarchy.js +1 -1
- package/dist/scripts/utils/confluence-hierarchy.js.map +1 -1
- package/dist/scripts/utils/docker-generator.d.ts +9 -0
- package/dist/scripts/utils/docker-generator.d.ts.map +1 -0
- package/dist/scripts/utils/docker-generator.js +132 -0
- package/dist/scripts/utils/docker-generator.js.map +1 -0
- package/dist/scripts/utils/docker-requirement-detector.d.ts +15 -0
- package/dist/scripts/utils/docker-requirement-detector.d.ts.map +1 -0
- package/dist/scripts/utils/docker-requirement-detector.js +124 -0
- package/dist/scripts/utils/docker-requirement-detector.js.map +1 -0
- package/dist/scripts/utils/env-config.d.ts +54 -0
- package/dist/scripts/utils/env-config.d.ts.map +1 -0
- package/dist/scripts/utils/env-config.js +414 -0
- package/dist/scripts/utils/env-config.js.map +1 -0
- package/dist/scripts/utils/jira-issue-type-fetcher.d.ts +70 -0
- package/dist/scripts/utils/jira-issue-type-fetcher.d.ts.map +1 -0
- package/dist/scripts/utils/jira-issue-type-fetcher.js +147 -0
- package/dist/scripts/utils/jira-issue-type-fetcher.js.map +1 -0
- package/dist/scripts/utils/language-detector.d.ts +14 -0
- package/dist/scripts/utils/language-detector.d.ts.map +1 -0
- package/dist/scripts/utils/language-detector.js +119 -0
- package/dist/scripts/utils/language-detector.js.map +1 -0
- package/dist/scripts/utils/markdown-parser.d.ts +55 -0
- package/dist/scripts/utils/markdown-parser.d.ts.map +1 -0
- package/dist/scripts/utils/markdown-parser.js +289 -0
- package/dist/scripts/utils/markdown-parser.js.map +1 -0
- package/dist/scripts/utils/project-detector.d.ts +17 -0
- package/dist/scripts/utils/project-detector.d.ts.map +1 -0
- package/dist/scripts/utils/project-detector.js +166 -0
- package/dist/scripts/utils/project-detector.js.map +1 -0
- package/dist/scripts/utils/project-finder.js +2 -2
- package/dist/scripts/utils/project-finder.js.map +1 -1
- package/dist/scripts/utils/release-notes-generator.d.ts +56 -0
- package/dist/scripts/utils/release-notes-generator.d.ts.map +1 -0
- package/dist/scripts/utils/release-notes-generator.js +162 -0
- package/dist/scripts/utils/release-notes-generator.js.map +1 -0
- package/dist/scripts/utils/spec-loader.d.ts +79 -0
- package/dist/scripts/utils/spec-loader.d.ts.map +1 -0
- package/dist/scripts/utils/spec-loader.js +80 -0
- package/dist/scripts/utils/spec-loader.js.map +1 -0
- package/dist/scripts/utils/spec-updater.d.ts +7 -0
- package/dist/scripts/utils/spec-updater.d.ts.map +1 -1
- package/dist/scripts/utils/spec-updater.js.map +1 -1
- package/dist/scripts/utils/tasks-converter.d.ts +57 -0
- package/dist/scripts/utils/tasks-converter.d.ts.map +1 -0
- package/dist/scripts/utils/tasks-converter.js +322 -0
- package/dist/scripts/utils/tasks-converter.js.map +1 -0
- package/dist/scripts/utils/tasks-format-validator.d.ts +36 -0
- package/dist/scripts/utils/tasks-format-validator.d.ts.map +1 -0
- package/dist/scripts/utils/tasks-format-validator.js +158 -0
- package/dist/scripts/utils/tasks-format-validator.js.map +1 -0
- package/dist/scripts/utils/template-applier.d.ts +37 -0
- package/dist/scripts/utils/template-applier.d.ts.map +1 -0
- package/dist/scripts/utils/template-applier.js +129 -0
- package/dist/scripts/utils/template-applier.js.map +1 -0
- package/dist/scripts/utils/test-config-generator.d.ts +12 -0
- package/dist/scripts/utils/test-config-generator.d.ts.map +1 -0
- package/dist/scripts/utils/test-config-generator.js +185 -0
- package/dist/scripts/utils/test-config-generator.js.map +1 -0
- package/dist/scripts/utils/test-runner.d.ts +31 -0
- package/dist/scripts/utils/test-runner.d.ts.map +1 -0
- package/dist/scripts/utils/test-runner.js +103 -0
- package/dist/scripts/utils/test-runner.js.map +1 -0
- package/dist/scripts/validate-phase.d.ts +1 -1
- package/dist/scripts/validate-phase.d.ts.map +1 -1
- package/dist/scripts/validate-phase.js +153 -5
- package/dist/scripts/validate-phase.js.map +1 -1
- package/dist/scripts/workflow-orchestrator.d.ts +8 -0
- package/dist/scripts/workflow-orchestrator.d.ts.map +1 -1
- package/dist/scripts/workflow-orchestrator.js +108 -7
- package/dist/scripts/workflow-orchestrator.js.map +1 -1
- package/dist/src/__tests__/integration/internationalization.test.d.ts +8 -0
- package/dist/src/__tests__/integration/internationalization.test.d.ts.map +1 -0
- package/dist/src/__tests__/integration/internationalization.test.js +333 -0
- package/dist/src/__tests__/integration/internationalization.test.js.map +1 -0
- package/dist/src/__tests__/integration/setup/claude-agent.test.d.ts +1 -1
- package/dist/src/__tests__/integration/setup/claude-agent.test.js +17 -20
- package/dist/src/__tests__/integration/setup/claude-agent.test.js.map +1 -1
- package/dist/src/__tests__/integration/setup/cursor.test.js +23 -19
- package/dist/src/__tests__/integration/setup/cursor.test.js.map +1 -1
- package/dist/src/__tests__/integration/setup/validation.test.js +41 -58
- package/dist/src/__tests__/integration/setup/validation.test.js.map +1 -1
- package/dist/src/cli.d.ts.map +1 -1
- package/dist/src/cli.js +208 -18
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/setup-existing.d.ts +3 -0
- package/dist/src/commands/setup-existing.d.ts.map +1 -1
- package/dist/src/commands/setup-existing.js +334 -47
- package/dist/src/commands/setup-existing.js.map +1 -1
- package/docs/README.md +3 -1
- package/docs/context.md +59 -0
- package/docs/design-issue-55.md +240 -0
- package/docs/design-issue-56.md +181 -0
- package/docs/michi-development/testing/manual-verification-flow.md +2242 -0
- package/docs/michi-development/testing/pre-publish-checklist.md +560 -0
- package/docs/plan.md +275 -0
- package/docs/user-guide/getting-started/github-token-setup.md +509 -0
- package/docs/{getting-started → user-guide/getting-started}/quick-start.md +16 -0
- package/docs/{getting-started → user-guide/getting-started}/setup.md +28 -1
- package/docs/user-guide/guides/internationalization.md +540 -0
- package/docs/{guides → user-guide/guides}/multi-project.md +1 -1
- package/docs/{guides → user-guide/guides}/phase-automation.md +67 -9
- package/docs/user-guide/guides/workflow.md +582 -0
- package/docs/user-guide/hands-on/README.md +142 -0
- package/docs/user-guide/hands-on/claude-agent-setup.md +455 -0
- package/docs/user-guide/hands-on/claude-setup.md +398 -0
- package/docs/user-guide/hands-on/cursor-setup.md +352 -0
- package/docs/user-guide/hands-on/troubleshooting.md +964 -0
- package/docs/user-guide/hands-on/verification-checklist.md +438 -0
- package/docs/user-guide/hands-on/workflow-walkthrough.md +906 -0
- package/docs/user-guide/reference/config.md +564 -0
- package/docs/{reference → user-guide/reference}/quick-reference.md +53 -40
- package/docs/user-guide/release/ci-setup.md +541 -0
- package/docs/user-guide/release/release-flow.md +476 -0
- package/docs/user-guide/templates/test-specs/README.md +173 -0
- package/docs/user-guide/templates/test-specs/e2e-test-spec-template.md +547 -0
- package/docs/user-guide/templates/test-specs/integration-test-spec-template.md +435 -0
- package/docs/user-guide/templates/test-specs/performance-test-spec-template.md +454 -0
- package/docs/user-guide/templates/test-specs/security-test-spec-template.md +664 -0
- package/docs/user-guide/templates/test-specs/unit-test-spec-template.md +328 -0
- package/docs/{testing → user-guide/testing}/integration-tests.md +24 -9
- package/docs/user-guide/testing/tdd-cycle.md +349 -0
- package/docs/user-guide/testing/test-execution-flow.md +396 -0
- package/docs/user-guide/testing/test-failure-handling.md +521 -0
- package/docs/user-guide/testing/test-planning-flow.md +181 -0
- package/docs/user-guide/testing-strategy.md +185 -0
- package/docs/verification-guide.md +518 -0
- package/package.json +7 -2
- package/scripts/__tests__/create-project.test.ts +67 -49
- package/scripts/__tests__/jira-transitions.test.ts +225 -0
- package/scripts/__tests__/multi-project-estimate.test.ts +36 -30
- package/scripts/__tests__/setup-existing-project.test.ts +98 -1
- package/scripts/__tests__/setup-interactive.test.ts +52 -46
- package/scripts/__tests__/spec-impl-workflow.test.ts +429 -0
- package/scripts/__tests__/spec-loader.test.ts +199 -0
- package/scripts/__tests__/validate-phase.test.ts +78 -54
- package/scripts/config/config-schema.ts +89 -50
- package/scripts/config-interactive.ts +191 -136
- package/scripts/confluence-sync.ts +0 -12
- package/scripts/constants/__tests__/environments.test.ts +42 -6
- package/scripts/constants/environments.ts +33 -13
- package/scripts/constants/test-commands.ts +96 -0
- package/scripts/jira-sync.ts +767 -232
- package/scripts/markdown-to-confluence.ts +1 -1
- package/scripts/phase-runner.ts +1056 -63
- package/scripts/pr-automation.ts +0 -1
- package/scripts/pre-flight-check.ts +1 -1
- package/scripts/pre-publish-check.sh +311 -0
- package/scripts/quick-verify.sh +115 -0
- package/scripts/setup-existing-project.ts +201 -117
- package/scripts/setup-interactive.ts +4 -4
- package/scripts/spec-impl-workflow.ts +505 -0
- package/scripts/template/__tests__/renderer.test.ts +1 -2
- package/scripts/test-execution-generator.ts +695 -0
- package/scripts/test-interactive.ts +779 -0
- package/scripts/test-new-features.ts +168 -0
- package/scripts/test-npm-package.sh +345 -0
- package/scripts/test-spec-generator.ts +574 -0
- package/scripts/test-workflow-stages.ts +53 -0
- package/scripts/utils/__tests__/aidlc-parser.test.ts +349 -0
- package/scripts/utils/__tests__/business-days.test.ts +214 -0
- package/scripts/utils/__tests__/config-loader.test.ts +1 -1
- package/scripts/utils/__tests__/config-validator.test.ts +309 -88
- package/scripts/utils/__tests__/env-config.test.ts +259 -0
- package/scripts/utils/__tests__/jira-issue-type-fetcher.test.ts +272 -0
- package/scripts/utils/__tests__/tasks-converter.test.ts +582 -0
- package/scripts/utils/__tests__/tasks-format-validator.test.ts +338 -0
- package/scripts/utils/__tests__/test-runner.test.ts +77 -0
- package/scripts/utils/aidlc-parser.ts +289 -0
- package/scripts/utils/business-days.ts +115 -0
- package/scripts/utils/ci-generator.ts +84 -0
- package/scripts/utils/config-loader.ts +2 -2
- package/scripts/utils/config-validator.ts +304 -117
- package/scripts/utils/confluence-approval.ts +167 -0
- package/scripts/utils/confluence-hierarchy.ts +2 -4
- package/scripts/utils/docker-generator.ts +151 -0
- package/scripts/utils/docker-requirement-detector.ts +153 -0
- package/scripts/utils/env-config.ts +526 -0
- package/scripts/utils/jira-issue-type-fetcher.ts +199 -0
- package/scripts/utils/language-detector.ts +139 -0
- package/scripts/utils/markdown-parser.ts +376 -0
- package/scripts/utils/project-detector.ts +192 -0
- package/scripts/utils/project-finder.ts +2 -2
- package/scripts/utils/release-notes-generator.ts +210 -0
- package/scripts/utils/spec-loader.ts +125 -0
- package/scripts/utils/spec-updater.ts +8 -1
- package/scripts/utils/tasks-converter.ts +601 -0
- package/scripts/utils/tasks-format-validator.ts +193 -0
- package/scripts/utils/template-applier.ts +202 -0
- package/scripts/utils/test-config-generator.ts +210 -0
- package/scripts/utils/test-runner.ts +133 -0
- package/scripts/validate-phase.ts +186 -9
- package/scripts/workflow-orchestrator.ts +130 -12
- package/templates/ci/github-actions/java.yml +54 -0
- package/templates/ci/github-actions/nodejs.yml +46 -0
- package/templates/ci/github-actions/php.yml +52 -0
- package/templates/ci/screwdriver/java.yaml +17 -0
- package/templates/ci/screwdriver/nodejs.yaml +17 -0
- package/templates/ci/screwdriver/php.yaml +20 -0
- package/templates/claude/commands/kiro/kiro-spec-impl.md +244 -0
- package/templates/claude/commands/kiro/kiro-spec-tasks.md +354 -0
- package/templates/claude-agent/README.md +7 -1
- package/templates/claude-agent/agents/.gitkeep +0 -0
- package/templates/claude-agent/agents/designer.md +79 -0
- package/templates/claude-agent/agents/developer.md +68 -0
- package/templates/claude-agent/agents/manager-agent.md +59 -0
- package/templates/claude-agent/agents/tester.md +101 -0
- package/templates/claude-agent/commands/kiro/.gitkeep +0 -0
- package/templates/claude-agent/commands/kiro/kiro-spec-impl.md +244 -0
- package/templates/claude-agent/commands/kiro/kiro-spec-tasks.md +354 -0
- package/templates/cline/rules/atlassian-integration.md +36 -0
- package/templates/cline/rules/michi-core.md +56 -0
- package/templates/codex/AGENTS.override.md +277 -0
- package/templates/codex/prompts/confluence-sync.md +177 -0
- package/templates/codex/rules/README.md +210 -0
- package/templates/common/.kiro/project.json.template +21 -0
- package/templates/cursor/commands/kiro/kiro-spec-impl.md +244 -0
- package/templates/cursor/commands/kiro/kiro-spec-tasks.md +354 -0
- package/templates/gemini/commands/README.md +41 -0
- package/templates/gemini/rules/GEMINI.md +80 -0
- package/docs/guides/workflow.md +0 -342
- package/docs/reference/config.md +0 -545
- package/scripts/setup-existing.sh +0 -279
- /package/docs/{contributing → michi-development/contributing}/development.md +0 -0
- /package/docs/{contributing → michi-development/contributing}/release.md +0 -0
- /package/docs/{testing-strategy.md → michi-development/testing-strategy.md} +0 -0
- /package/docs/{getting-started → user-guide/getting-started}/new-repository-setup.md +0 -0
- /package/docs/{guides → user-guide/guides}/customization.md +0 -0
- /package/docs/{reference → user-guide/reference}/tasks-template.md +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env tsx
|
|
2
2
|
/**
|
|
3
3
|
* 既存プロジェクトにMichiワークフローを追加するスクリプト
|
|
4
|
-
*
|
|
4
|
+
*
|
|
5
5
|
* 使い方:
|
|
6
6
|
* cd /path/to/existing-repo
|
|
7
7
|
* npx tsx /path/to/michi/scripts/setup-existing-project.ts \
|
|
@@ -12,46 +12,50 @@
|
|
|
12
12
|
* --lang ja
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
|
-
import {
|
|
15
|
+
import {
|
|
16
|
+
cpSync,
|
|
17
|
+
existsSync,
|
|
18
|
+
mkdirSync,
|
|
19
|
+
writeFileSync,
|
|
20
|
+
readFileSync,
|
|
21
|
+
readdirSync,
|
|
22
|
+
} from 'fs';
|
|
16
23
|
import { resolve, join, basename, dirname } from 'path';
|
|
17
24
|
import { fileURLToPath } from 'url';
|
|
18
25
|
import { execSync } from 'child_process';
|
|
19
26
|
import { findRepositoryRoot } from './utils/project-finder.js';
|
|
20
|
-
import {
|
|
21
|
-
type Environment,
|
|
22
|
-
getEnvironmentConfig,
|
|
23
|
-
isSupportedEnvironment
|
|
27
|
+
import {
|
|
28
|
+
type Environment,
|
|
29
|
+
getEnvironmentConfig,
|
|
30
|
+
isSupportedEnvironment,
|
|
24
31
|
} from './constants/environments.js';
|
|
25
|
-
import {
|
|
26
|
-
type SupportedLanguage,
|
|
27
|
-
isSupportedLanguage
|
|
32
|
+
import {
|
|
33
|
+
type SupportedLanguage,
|
|
34
|
+
isSupportedLanguage,
|
|
28
35
|
} from './constants/languages.js';
|
|
29
|
-
import {
|
|
30
|
-
createTemplateContext,
|
|
31
|
-
renderTemplate
|
|
32
|
-
} from './template/renderer.js';
|
|
36
|
+
import { createTemplateContext, renderTemplate } from './template/renderer.js';
|
|
33
37
|
|
|
34
38
|
// ES module で __dirname を取得
|
|
35
39
|
const __filename = fileURLToPath(import.meta.url);
|
|
36
40
|
const __dirname = dirname(__filename);
|
|
37
41
|
|
|
38
42
|
interface SetupConfig {
|
|
39
|
-
michiPath: string;
|
|
40
|
-
projectName: string;
|
|
41
|
-
jiraKey: string;
|
|
42
|
-
labels?: string[];
|
|
43
|
-
environment: Environment;
|
|
44
|
-
langCode: SupportedLanguage;
|
|
43
|
+
michiPath: string; // Michiリポジトリのパス
|
|
44
|
+
projectName: string; // プロジェクト表示名
|
|
45
|
+
jiraKey: string; // JIRAプロジェクトキー
|
|
46
|
+
labels?: string[]; // Confluenceラベル(オプション)
|
|
47
|
+
environment: Environment; // cc-sdd環境: 'claude' | 'claude-agent' | 'cursor'
|
|
48
|
+
langCode: SupportedLanguage; // 言語コード: 'ja'
|
|
45
49
|
}
|
|
46
50
|
|
|
47
51
|
function parseArgs(): SetupConfig {
|
|
48
52
|
const args = process.argv.slice(2);
|
|
49
53
|
const config: Partial<SetupConfig> = {};
|
|
50
|
-
|
|
54
|
+
|
|
51
55
|
for (let i = 0; i < args.length; i += 2) {
|
|
52
56
|
const key = args[i].replace(/^--/, '');
|
|
53
57
|
const value = args[i + 1];
|
|
54
|
-
|
|
58
|
+
|
|
55
59
|
switch (key) {
|
|
56
60
|
case 'michi-path':
|
|
57
61
|
config.michiPath = value;
|
|
@@ -70,7 +74,7 @@ function parseArgs(): SetupConfig {
|
|
|
70
74
|
break;
|
|
71
75
|
}
|
|
72
76
|
}
|
|
73
|
-
|
|
77
|
+
|
|
74
78
|
// デフォルト値
|
|
75
79
|
if (!config.michiPath) {
|
|
76
80
|
config.michiPath = resolve(__dirname, '..');
|
|
@@ -81,34 +85,38 @@ function parseArgs(): SetupConfig {
|
|
|
81
85
|
if (!config.langCode) {
|
|
82
86
|
config.langCode = 'ja';
|
|
83
87
|
}
|
|
84
|
-
|
|
88
|
+
|
|
85
89
|
// 必須フィールドチェック
|
|
86
90
|
if (!config.projectName || !config.jiraKey) {
|
|
87
91
|
console.error('Missing required parameters');
|
|
88
|
-
console.error(
|
|
92
|
+
console.error(
|
|
93
|
+
'Usage: tsx setup-existing-project.ts --project-name <name> --jira-key <key> [--michi-path <path>] [--environment <env>] [--lang <code>]',
|
|
94
|
+
);
|
|
89
95
|
process.exit(1);
|
|
90
96
|
}
|
|
91
|
-
|
|
97
|
+
|
|
92
98
|
// 環境バリデーション
|
|
93
99
|
if (!isSupportedEnvironment(config.environment)) {
|
|
94
100
|
console.error(`Unsupported environment: ${config.environment}`);
|
|
95
101
|
console.error('Supported environments: claude, claude-agent, cursor');
|
|
96
102
|
process.exit(1);
|
|
97
103
|
}
|
|
98
|
-
|
|
104
|
+
|
|
99
105
|
// 言語バリデーション
|
|
100
106
|
if (!isSupportedLanguage(config.langCode)) {
|
|
101
107
|
console.error(`Unsupported language: ${config.langCode}`);
|
|
102
|
-
console.error(
|
|
108
|
+
console.error(
|
|
109
|
+
'Supported languages: ja, en, zh-TW, zh, es, pt, de, fr, ru, it, ko, ar',
|
|
110
|
+
);
|
|
103
111
|
process.exit(1);
|
|
104
112
|
}
|
|
105
|
-
|
|
113
|
+
|
|
106
114
|
return config as SetupConfig;
|
|
107
115
|
}
|
|
108
116
|
|
|
109
117
|
/**
|
|
110
118
|
* Copy and render templates recursively
|
|
111
|
-
*
|
|
119
|
+
*
|
|
112
120
|
* @param sourceDir - Source directory containing templates
|
|
113
121
|
* @param destDir - Destination directory for rendered files
|
|
114
122
|
* @param context - Template context for rendering
|
|
@@ -116,14 +124,14 @@ function parseArgs(): SetupConfig {
|
|
|
116
124
|
function copyAndRenderTemplates(
|
|
117
125
|
sourceDir: string,
|
|
118
126
|
destDir: string,
|
|
119
|
-
context: ReturnType<typeof createTemplateContext
|
|
127
|
+
context: ReturnType<typeof createTemplateContext>,
|
|
120
128
|
): void {
|
|
121
129
|
const entries = readdirSync(sourceDir, { withFileTypes: true });
|
|
122
|
-
|
|
130
|
+
|
|
123
131
|
for (const entry of entries) {
|
|
124
132
|
const sourcePath = join(sourceDir, entry.name);
|
|
125
133
|
const destPath = join(destDir, entry.name);
|
|
126
|
-
|
|
134
|
+
|
|
127
135
|
if (entry.isDirectory()) {
|
|
128
136
|
// ディレクトリは再帰的にコピー
|
|
129
137
|
mkdirSync(destPath, { recursive: true });
|
|
@@ -140,7 +148,7 @@ function copyAndRenderTemplates(
|
|
|
140
148
|
async function setupExistingProject(config: SetupConfig): Promise<void> {
|
|
141
149
|
const currentDir = process.cwd();
|
|
142
150
|
const projectId = basename(currentDir);
|
|
143
|
-
|
|
151
|
+
|
|
144
152
|
console.log('🚀 既存プロジェクトにMichiワークフローを追加');
|
|
145
153
|
console.log(` プロジェクト: ${config.projectName}`);
|
|
146
154
|
console.log(` ディレクトリ: ${currentDir}`);
|
|
@@ -148,18 +156,18 @@ async function setupExistingProject(config: SetupConfig): Promise<void> {
|
|
|
148
156
|
console.log(` 環境: ${config.environment}`);
|
|
149
157
|
console.log(` 言語: ${config.langCode}`);
|
|
150
158
|
console.log('');
|
|
151
|
-
|
|
159
|
+
|
|
152
160
|
// リポジトリルートを検出
|
|
153
161
|
const repoRoot = findRepositoryRoot(currentDir);
|
|
154
|
-
|
|
162
|
+
|
|
155
163
|
// projects/{project-id}/配下にプロジェクトを作成
|
|
156
164
|
const projectsDir = join(repoRoot, 'projects');
|
|
157
165
|
const projectDir = join(projectsDir, projectId);
|
|
158
|
-
|
|
166
|
+
|
|
159
167
|
console.log(`📁 リポジトリルート: ${repoRoot}`);
|
|
160
168
|
console.log(`📁 プロジェクトディレクトリ: ${projectDir}`);
|
|
161
169
|
console.log('');
|
|
162
|
-
|
|
170
|
+
|
|
163
171
|
// projects/ディレクトリとプロジェクトディレクトリを作成
|
|
164
172
|
if (!existsSync(projectsDir)) {
|
|
165
173
|
mkdirSync(projectsDir, { recursive: true });
|
|
@@ -169,24 +177,26 @@ async function setupExistingProject(config: SetupConfig): Promise<void> {
|
|
|
169
177
|
mkdirSync(projectDir, { recursive: true });
|
|
170
178
|
console.log(` ✅ Created: ${projectDir}`);
|
|
171
179
|
}
|
|
172
|
-
|
|
180
|
+
|
|
173
181
|
// 元の作業ディレクトリを保存
|
|
174
182
|
const originalCwd = process.cwd();
|
|
175
|
-
|
|
183
|
+
|
|
176
184
|
try {
|
|
177
185
|
// プロジェクトディレクトリに移動
|
|
178
186
|
process.chdir(projectDir);
|
|
179
|
-
|
|
187
|
+
|
|
180
188
|
// Step 1: cc-sdd導入確認
|
|
181
189
|
console.log('\n📦 Step 1: Checking cc-sdd installation...');
|
|
182
190
|
if (!existsSync('.cursor/commands/kiro')) {
|
|
183
191
|
console.log(' Installing cc-sdd...');
|
|
184
|
-
execSync('npx cc-sdd@latest --cursor --lang ja --yes', {
|
|
192
|
+
execSync('npx cc-sdd@latest --cursor --lang ja --yes', {
|
|
193
|
+
stdio: 'inherit',
|
|
194
|
+
});
|
|
185
195
|
console.log(' ✅ cc-sdd installed');
|
|
186
196
|
} else {
|
|
187
197
|
console.log(' ✅ cc-sdd already installed');
|
|
188
198
|
}
|
|
189
|
-
|
|
199
|
+
|
|
190
200
|
// Step 2: .kiro ディレクトリ作成
|
|
191
201
|
console.log('\n📁 Step 2: Creating .kiro directory structure...');
|
|
192
202
|
mkdirSync('.kiro/settings/templates', { recursive: true });
|
|
@@ -196,39 +206,48 @@ async function setupExistingProject(config: SetupConfig): Promise<void> {
|
|
|
196
206
|
|
|
197
207
|
// Step 3: プロジェクトメタデータ作成
|
|
198
208
|
console.log('\n📝 Step 3: Creating project metadata...');
|
|
199
|
-
|
|
209
|
+
|
|
200
210
|
// GitHub URLを取得(既存リポジトリから)
|
|
201
211
|
let repoUrl = '';
|
|
202
212
|
try {
|
|
203
|
-
repoUrl = execSync('git config --get remote.origin.url', {
|
|
213
|
+
repoUrl = execSync('git config --get remote.origin.url', {
|
|
214
|
+
encoding: 'utf-8',
|
|
215
|
+
cwd: repoRoot,
|
|
216
|
+
}).trim();
|
|
204
217
|
// SSH形式をHTTPS形式に変換
|
|
205
218
|
if (repoUrl.startsWith('git@github.com:')) {
|
|
206
|
-
repoUrl = repoUrl
|
|
219
|
+
repoUrl = repoUrl
|
|
220
|
+
.replace('git@github.com:', 'https://github.com/')
|
|
221
|
+
.replace('.git', '');
|
|
207
222
|
}
|
|
208
223
|
} catch {
|
|
209
224
|
repoUrl = `https://github.com/org/${projectId}`;
|
|
210
225
|
}
|
|
211
|
-
|
|
212
|
-
const labels =
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
+
|
|
227
|
+
const labels =
|
|
228
|
+
config.labels ||
|
|
229
|
+
(() => {
|
|
230
|
+
// プロジェクトIDからプロジェクトラベル生成
|
|
231
|
+
const projectLabel = projectId.toLowerCase().replace(/[^a-z0-9-]/g, '');
|
|
232
|
+
const labelSet = new Set([`project:${projectLabel}`]);
|
|
233
|
+
|
|
234
|
+
// ハイフンが存在する場合のみサービスラベルを生成
|
|
235
|
+
if (projectId.includes('-')) {
|
|
236
|
+
const parts = projectId.split('-');
|
|
237
|
+
const servicePart = parts[parts.length - 1];
|
|
238
|
+
const serviceLabel = servicePart
|
|
239
|
+
.toLowerCase()
|
|
240
|
+
.replace(/[^a-z0-9-]/g, '');
|
|
241
|
+
|
|
242
|
+
// サービスラベルがプロジェクトラベルと異なる場合のみ追加
|
|
243
|
+
if (serviceLabel !== projectLabel) {
|
|
244
|
+
labelSet.add(`service:${serviceLabel}`);
|
|
245
|
+
}
|
|
226
246
|
}
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
247
|
+
|
|
248
|
+
return Array.from(labelSet);
|
|
249
|
+
})();
|
|
250
|
+
|
|
232
251
|
const projectJson = {
|
|
233
252
|
projectId,
|
|
234
253
|
projectName: config.projectName,
|
|
@@ -239,89 +258,141 @@ async function setupExistingProject(config: SetupConfig): Promise<void> {
|
|
|
239
258
|
team: [],
|
|
240
259
|
stakeholders: ['@企画', '@部長'],
|
|
241
260
|
repository: repoUrl,
|
|
242
|
-
description: `${config.projectName}
|
|
261
|
+
description: `${config.projectName}の開発`,
|
|
243
262
|
};
|
|
244
|
-
|
|
263
|
+
|
|
245
264
|
writeFileSync('.kiro/project.json', JSON.stringify(projectJson, null, 2));
|
|
246
265
|
console.log(' ✅ project.json created');
|
|
247
|
-
|
|
266
|
+
|
|
248
267
|
// Step 4: 環境別テンプレートのコピーとレンダリング
|
|
249
268
|
console.log('\n📋 Step 4: Copying and rendering templates from Michi...');
|
|
250
|
-
|
|
269
|
+
|
|
251
270
|
const envConfig = getEnvironmentConfig(config.environment);
|
|
252
271
|
const templateContext = createTemplateContext(
|
|
253
272
|
config.langCode,
|
|
254
273
|
'.kiro',
|
|
255
|
-
envConfig.rulesDir.startsWith('.')
|
|
274
|
+
envConfig.rulesDir.startsWith('.')
|
|
275
|
+
? envConfig.rulesDir.substring(1, envConfig.rulesDir.indexOf('/', 1))
|
|
276
|
+
: envConfig.rulesDir.split('/')[0],
|
|
256
277
|
);
|
|
257
|
-
|
|
278
|
+
|
|
258
279
|
// テンプレートソースディレクトリ
|
|
259
|
-
const templateSourceDir = join(
|
|
260
|
-
|
|
280
|
+
const templateSourceDir = join(
|
|
281
|
+
config.michiPath,
|
|
282
|
+
'templates',
|
|
283
|
+
envConfig.templateSource,
|
|
284
|
+
);
|
|
285
|
+
|
|
261
286
|
if (!existsSync(templateSourceDir)) {
|
|
262
287
|
console.log(` ⚠️ Template source not found: ${templateSourceDir}`);
|
|
263
288
|
console.log(' Skipping template copy');
|
|
264
289
|
} else {
|
|
265
|
-
// rules
|
|
266
|
-
|
|
290
|
+
// rulesディレクトリのコピーとレンダリング(環境別にテンプレートディレクトリ名が異なる)
|
|
291
|
+
// cursor/claude: 'rules', claude-agent: 'agents'
|
|
292
|
+
const templateDirName =
|
|
293
|
+
config.environment === 'claude-agent' ? 'agents' : 'rules';
|
|
294
|
+
const rulesTemplateDir = join(templateSourceDir, templateDirName);
|
|
267
295
|
const rulesDestDir = join(projectDir, envConfig.rulesDir);
|
|
268
|
-
|
|
296
|
+
|
|
269
297
|
if (existsSync(rulesTemplateDir)) {
|
|
270
298
|
mkdirSync(rulesDestDir, { recursive: true });
|
|
271
299
|
copyAndRenderTemplates(rulesTemplateDir, rulesDestDir, templateContext);
|
|
272
300
|
console.log(` ✅ Rules copied and rendered to ${envConfig.rulesDir}`);
|
|
273
301
|
}
|
|
274
|
-
|
|
302
|
+
|
|
275
303
|
// commandsディレクトリのコピーとレンダリング
|
|
276
304
|
const commandsTemplateDir = join(templateSourceDir, 'commands');
|
|
277
305
|
const commandsDestDir = join(projectDir, envConfig.commandsDir);
|
|
278
|
-
|
|
306
|
+
|
|
279
307
|
if (existsSync(commandsTemplateDir)) {
|
|
280
308
|
mkdirSync(commandsDestDir, { recursive: true });
|
|
281
|
-
copyAndRenderTemplates(
|
|
282
|
-
|
|
309
|
+
copyAndRenderTemplates(
|
|
310
|
+
commandsTemplateDir,
|
|
311
|
+
commandsDestDir,
|
|
312
|
+
templateContext,
|
|
313
|
+
);
|
|
314
|
+
console.log(
|
|
315
|
+
` ✅ Commands copied and rendered to ${envConfig.commandsDir}`,
|
|
316
|
+
);
|
|
283
317
|
}
|
|
284
318
|
}
|
|
285
|
-
|
|
319
|
+
|
|
286
320
|
// Step 5: Steeringテンプレートをコピー
|
|
287
321
|
console.log('\n📚 Step 5: Copying steering templates...');
|
|
288
|
-
|
|
322
|
+
|
|
289
323
|
const steeringDir = join(config.michiPath, '.kiro/steering');
|
|
290
324
|
if (existsSync(steeringDir)) {
|
|
291
|
-
cpSync(steeringDir, join(projectDir, '.kiro/steering'), {
|
|
325
|
+
cpSync(steeringDir, join(projectDir, '.kiro/steering'), {
|
|
326
|
+
recursive: true,
|
|
327
|
+
});
|
|
292
328
|
console.log(' ✅ product.md, tech.md, structure.md');
|
|
293
329
|
}
|
|
294
|
-
|
|
330
|
+
|
|
295
331
|
// Step 6: テンプレートをコピー
|
|
296
332
|
console.log('\n📄 Step 6: Copying spec templates...');
|
|
297
|
-
|
|
333
|
+
|
|
298
334
|
const templatesDir = join(config.michiPath, '.kiro/settings/templates');
|
|
299
335
|
if (existsSync(templatesDir)) {
|
|
300
|
-
cpSync(templatesDir, join(projectDir, '.kiro/settings/templates'), {
|
|
336
|
+
cpSync(templatesDir, join(projectDir, '.kiro/settings/templates'), {
|
|
337
|
+
recursive: true,
|
|
338
|
+
});
|
|
301
339
|
console.log(' ✅ requirements.md, design.md, tasks.md');
|
|
302
340
|
}
|
|
303
|
-
|
|
341
|
+
|
|
342
|
+
// Step 6.1: kiro-spec-tasksテンプレートを上書き(cc-sddのAI-DLC形式をMichiワークフロー形式に置換)
|
|
343
|
+
console.log('\n📋 Step 6.1: Overriding kiro-spec-tasks template...');
|
|
344
|
+
const kiroSpecTasksSource = join(
|
|
345
|
+
config.michiPath,
|
|
346
|
+
'templates',
|
|
347
|
+
envConfig.templateSource,
|
|
348
|
+
'commands',
|
|
349
|
+
'kiro',
|
|
350
|
+
'kiro-spec-tasks.md',
|
|
351
|
+
);
|
|
352
|
+
const kiroSpecTasksDest = join(projectDir, '.kiro', 'commands', 'kiro');
|
|
353
|
+
|
|
354
|
+
if (existsSync(kiroSpecTasksSource)) {
|
|
355
|
+
mkdirSync(kiroSpecTasksDest, { recursive: true });
|
|
356
|
+
cpSync(
|
|
357
|
+
kiroSpecTasksSource,
|
|
358
|
+
join(kiroSpecTasksDest, 'kiro-spec-tasks.md'),
|
|
359
|
+
);
|
|
360
|
+
console.log(
|
|
361
|
+
' ✅ kiro-spec-tasks.md overridden with Michi workflow format',
|
|
362
|
+
);
|
|
363
|
+
console.log(
|
|
364
|
+
' (This ensures /kiro:spec-tasks generates Phase-based tasks.md)',
|
|
365
|
+
);
|
|
366
|
+
} else {
|
|
367
|
+
console.log(
|
|
368
|
+
` ⚠️ kiro-spec-tasks template not found: ${kiroSpecTasksSource}`,
|
|
369
|
+
);
|
|
370
|
+
console.log(' (cc-sdd default template will be used)');
|
|
371
|
+
}
|
|
372
|
+
|
|
304
373
|
// Step 7: CLIツールのセットアップ案内
|
|
305
374
|
console.log('\n⚙️ Step 7: Setting up Michi CLI...');
|
|
306
375
|
console.log(' ✅ Michi CLI setup complete!');
|
|
307
376
|
console.log('');
|
|
308
377
|
console.log(' 📋 使用方法:');
|
|
309
378
|
console.log(' npx @sk8metal/michi-cli jira:sync <feature>');
|
|
310
|
-
console.log(
|
|
379
|
+
console.log(
|
|
380
|
+
' npx @sk8metal/michi-cli confluence:sync <feature> requirements',
|
|
381
|
+
);
|
|
311
382
|
console.log(' npx @sk8metal/michi-cli phase:run <feature> tasks');
|
|
312
383
|
console.log('');
|
|
313
384
|
console.log(' または、グローバルインストール:');
|
|
314
385
|
console.log(' npm install -g @sk8metal/michi-cli');
|
|
315
386
|
console.log(' michi jira:sync <feature>');
|
|
316
|
-
|
|
387
|
+
|
|
317
388
|
// Step 8: package.json と tsconfig.json をリポジトリルートにコピー
|
|
318
389
|
console.log('\n📦 Step 8: Setting up package.json and TypeScript...');
|
|
319
|
-
|
|
390
|
+
|
|
320
391
|
// 既存の package.json があるかチェック(リポジトリルート)
|
|
321
392
|
const hasPackageJson = existsSync(join(repoRoot, 'package.json'));
|
|
322
|
-
|
|
393
|
+
|
|
323
394
|
if (!hasPackageJson) {
|
|
324
|
-
|
|
395
|
+
// package.json がない場合はリポジトリルートにコピー
|
|
325
396
|
const src = join(config.michiPath, 'package.json');
|
|
326
397
|
const dest = join(repoRoot, 'package.json');
|
|
327
398
|
if (existsSync(src)) {
|
|
@@ -329,23 +400,33 @@ async function setupExistingProject(config: SetupConfig): Promise<void> {
|
|
|
329
400
|
console.log(' ✅ package.json created (in repository root)');
|
|
330
401
|
}
|
|
331
402
|
} else {
|
|
332
|
-
|
|
403
|
+
// 既存の package.json にスクリプトを追加
|
|
333
404
|
console.log(' ℹ️ Existing package.json found');
|
|
334
405
|
console.log(' 📝 手動で以下のスクリプトを追加してください:');
|
|
335
406
|
console.log('');
|
|
336
407
|
console.log(' "scripts": {');
|
|
337
408
|
console.log(' "jira:sync": "npx @sk8metal/michi-cli jira:sync",');
|
|
338
|
-
console.log(
|
|
409
|
+
console.log(
|
|
410
|
+
' "confluence:sync": "npx @sk8metal/michi-cli confluence:sync",',
|
|
411
|
+
);
|
|
339
412
|
console.log(' "phase:run": "npx @sk8metal/michi-cli phase:run",');
|
|
340
|
-
console.log(
|
|
413
|
+
console.log(
|
|
414
|
+
' "validate:phase": "npx @sk8metal/michi-cli validate:phase",',
|
|
415
|
+
);
|
|
341
416
|
console.log(' "preflight": "npx @sk8metal/michi-cli preflight",');
|
|
342
|
-
console.log(
|
|
343
|
-
|
|
344
|
-
|
|
417
|
+
console.log(
|
|
418
|
+
' "project:list": "npx @sk8metal/michi-cli project:list",',
|
|
419
|
+
);
|
|
420
|
+
console.log(
|
|
421
|
+
' "project:dashboard": "npx @sk8metal/michi-cli project:dashboard",',
|
|
422
|
+
);
|
|
423
|
+
console.log(
|
|
424
|
+
' "workflow:run": "npx @sk8metal/michi-cli workflow:run"',
|
|
425
|
+
);
|
|
345
426
|
console.log(' }');
|
|
346
427
|
console.log('');
|
|
347
428
|
}
|
|
348
|
-
|
|
429
|
+
|
|
349
430
|
// tsconfig.json をリポジトリルートにコピー
|
|
350
431
|
if (!existsSync(join(repoRoot, 'tsconfig.json'))) {
|
|
351
432
|
const src = join(config.michiPath, 'tsconfig.json');
|
|
@@ -357,10 +438,10 @@ async function setupExistingProject(config: SetupConfig): Promise<void> {
|
|
|
357
438
|
} else {
|
|
358
439
|
console.log(' ℹ️ Existing tsconfig.json found (kept)');
|
|
359
440
|
}
|
|
360
|
-
|
|
441
|
+
|
|
361
442
|
// Step 9: .env テンプレート作成(プロジェクトディレクトリに)
|
|
362
443
|
console.log('\n🔐 Step 9: Creating .env template...');
|
|
363
|
-
|
|
444
|
+
|
|
364
445
|
const envTemplate = `# Atlassian設定(MCP + REST API共通)
|
|
365
446
|
ATLASSIAN_URL=https://your-domain.atlassian.net
|
|
366
447
|
ATLASSIAN_EMAIL=your-email@company.com
|
|
@@ -379,21 +460,21 @@ CONFLUENCE_RELEASE_SPACE=RELEASE
|
|
|
379
460
|
# JIRAプロジェクトキー
|
|
380
461
|
JIRA_PROJECT_KEYS=${config.jiraKey}
|
|
381
462
|
`;
|
|
382
|
-
|
|
463
|
+
|
|
383
464
|
if (!existsSync(join(projectDir, '.env'))) {
|
|
384
465
|
writeFileSync(join(projectDir, '.env'), envTemplate);
|
|
385
466
|
console.log(' ✅ .env template created');
|
|
386
467
|
} else {
|
|
387
468
|
console.log(' ℹ️ .env already exists (kept)');
|
|
388
469
|
}
|
|
389
|
-
|
|
470
|
+
|
|
390
471
|
// Step 10: README.md を更新(オプション、プロジェクトディレクトリに)
|
|
391
472
|
console.log('\n📖 Step 10: Updating documentation...');
|
|
392
|
-
|
|
473
|
+
|
|
393
474
|
const readmePath = join(projectDir, 'README.md');
|
|
394
475
|
if (existsSync(readmePath)) {
|
|
395
476
|
const currentReadme = readFileSync(readmePath, 'utf-8');
|
|
396
|
-
|
|
477
|
+
|
|
397
478
|
// Michiワークフロー情報を追加
|
|
398
479
|
const workflowSection = `
|
|
399
480
|
|
|
@@ -421,7 +502,7 @@ npm run github:create-pr <branch> # PR作成
|
|
|
421
502
|
|
|
422
503
|
詳細: [Michi Documentation](https://github.com/sk8metalme/michi)
|
|
423
504
|
`;
|
|
424
|
-
|
|
505
|
+
|
|
425
506
|
if (!currentReadme.includes('AI開発ワークフロー')) {
|
|
426
507
|
writeFileSync(readmePath, currentReadme + workflowSection);
|
|
427
508
|
console.log(' ✅ README.md updated');
|
|
@@ -429,25 +510,25 @@ npm run github:create-pr <branch> # PR作成
|
|
|
429
510
|
console.log(' ℹ️ README.md already has workflow section');
|
|
430
511
|
}
|
|
431
512
|
}
|
|
432
|
-
|
|
513
|
+
|
|
433
514
|
// Step 11: .gitignore 更新(リポジトリルートに)
|
|
434
515
|
console.log('\n🚫 Step 11: Updating .gitignore...');
|
|
435
|
-
|
|
516
|
+
|
|
436
517
|
const gitignoreEntries = [
|
|
437
518
|
'# AI Development Workflow',
|
|
438
519
|
'node_modules/',
|
|
439
520
|
'.env',
|
|
440
521
|
'.env.local',
|
|
441
522
|
'dist/',
|
|
442
|
-
'*.log'
|
|
523
|
+
'*.log',
|
|
443
524
|
];
|
|
444
|
-
|
|
525
|
+
|
|
445
526
|
const gitignorePath = join(repoRoot, '.gitignore');
|
|
446
527
|
let gitignore = '';
|
|
447
528
|
if (existsSync(gitignorePath)) {
|
|
448
529
|
gitignore = readFileSync(gitignorePath, 'utf-8');
|
|
449
530
|
}
|
|
450
|
-
|
|
531
|
+
|
|
451
532
|
let updated = false;
|
|
452
533
|
for (const entry of gitignoreEntries) {
|
|
453
534
|
if (!gitignore.includes(entry)) {
|
|
@@ -455,14 +536,14 @@ npm run github:create-pr <branch> # PR作成
|
|
|
455
536
|
updated = true;
|
|
456
537
|
}
|
|
457
538
|
}
|
|
458
|
-
|
|
539
|
+
|
|
459
540
|
if (updated) {
|
|
460
541
|
writeFileSync(gitignorePath, gitignore);
|
|
461
542
|
console.log(' ✅ .gitignore updated (in repository root)');
|
|
462
543
|
} else {
|
|
463
544
|
console.log(' ℹ️ .gitignore already up to date');
|
|
464
545
|
}
|
|
465
|
-
|
|
546
|
+
|
|
466
547
|
// 完了メッセージ
|
|
467
548
|
console.log('\n');
|
|
468
549
|
console.log('🎉 セットアップ完了!');
|
|
@@ -471,8 +552,12 @@ npm run github:create-pr <branch> # PR作成
|
|
|
471
552
|
console.log(` 1. cd ${projectDir}`);
|
|
472
553
|
console.log(' 2. .env ファイルを編集して認証情報を設定');
|
|
473
554
|
console.log(' 3. package.json が既存の場合、スクリプトを手動追加');
|
|
474
|
-
console.log(
|
|
475
|
-
|
|
555
|
+
console.log(
|
|
556
|
+
' 4. npm install で依存関係をインストール(リポジトリルートで実行)',
|
|
557
|
+
);
|
|
558
|
+
console.log(
|
|
559
|
+
` 5. cc-sddを導入: npx cc-sdd@latest --lang ${config.langCode} --${config.environment}`,
|
|
560
|
+
);
|
|
476
561
|
console.log(' 6. jj commit でセットアップをコミット');
|
|
477
562
|
console.log(' 7. Cursor で開く: cursor .');
|
|
478
563
|
console.log(' 8. /kiro:spec-init <機能説明> で開発開始');
|
|
@@ -486,7 +571,6 @@ npm run github:create-pr <branch> # PR作成
|
|
|
486
571
|
console.log(` - ${repoRoot}/package.json (新規の場合)`);
|
|
487
572
|
console.log(` - ${repoRoot}/tsconfig.json (新規の場合)`);
|
|
488
573
|
console.log(` - ${projectDir}/.env (テンプレート)`);
|
|
489
|
-
|
|
490
574
|
} finally {
|
|
491
575
|
// 元の作業ディレクトリに戻る
|
|
492
576
|
process.chdir(originalCwd);
|
|
@@ -495,7 +579,7 @@ npm run github:create-pr <branch> # PR作成
|
|
|
495
579
|
|
|
496
580
|
// 実行
|
|
497
581
|
const config = parseArgs();
|
|
498
|
-
setupExistingProject(config).catch(error => {
|
|
582
|
+
setupExistingProject(config).catch((error) => {
|
|
499
583
|
console.error('❌ Error:', error.message);
|
|
500
584
|
process.exit(1);
|
|
501
585
|
});
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'fs';
|
|
7
|
-
import {
|
|
7
|
+
import { join, basename } from 'path';
|
|
8
8
|
import * as readline from 'readline';
|
|
9
9
|
import { findCurrentProject, findAllProjects, selectProject, findRepositoryRoot } from './utils/project-finder.js';
|
|
10
10
|
import type { ProjectMetadata } from './utils/project-meta.js';
|
|
@@ -375,7 +375,7 @@ async function main(): Promise<number> {
|
|
|
375
375
|
const projectsDir = join(repoRoot, 'projects');
|
|
376
376
|
|
|
377
377
|
// プロジェクト検出
|
|
378
|
-
|
|
378
|
+
findCurrentProject();
|
|
379
379
|
const allProjects = findAllProjects();
|
|
380
380
|
|
|
381
381
|
let projectPath: string;
|
|
@@ -420,7 +420,7 @@ async function main(): Promise<number> {
|
|
|
420
420
|
try {
|
|
421
421
|
const content = readFileSync(projectJsonPath, 'utf-8');
|
|
422
422
|
existingMeta = JSON.parse(content);
|
|
423
|
-
} catch
|
|
423
|
+
} catch {
|
|
424
424
|
// 読み込みエラーは無視
|
|
425
425
|
}
|
|
426
426
|
}
|
|
@@ -442,7 +442,7 @@ async function main(): Promise<number> {
|
|
|
442
442
|
try {
|
|
443
443
|
const content = readFileSync(projectJsonPath, 'utf-8');
|
|
444
444
|
existingMeta = JSON.parse(content);
|
|
445
|
-
} catch
|
|
445
|
+
} catch {
|
|
446
446
|
// 読み込みエラーは無視
|
|
447
447
|
}
|
|
448
448
|
}
|