@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
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integration tests for Internationalization (i18n) support
|
|
3
|
+
*
|
|
4
|
+
* Tests AI-driven multilingual approach with DEV_GUIDELINES placeholders
|
|
5
|
+
* Issue #40 (v0.0.9): 多言語サポートシステムの実装
|
|
6
|
+
*/
|
|
7
|
+
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
|
|
8
|
+
import { join } from 'path';
|
|
9
|
+
import { readFileSync } from 'fs';
|
|
10
|
+
import { setupExisting } from '../../commands/setup-existing.js';
|
|
11
|
+
import { createTestProject } from './setup/helpers/test-project.js';
|
|
12
|
+
import { assertFileExists, assertFileContains } from './setup/helpers/fs-assertions.js';
|
|
13
|
+
import { createTemplateContext, renderTemplate } from '../../../scripts/template/renderer.js';
|
|
14
|
+
import { DEV_GUIDELINES_MAP } from '../../../scripts/constants/languages.js';
|
|
15
|
+
// Mock readline to auto-confirm prompts
|
|
16
|
+
vi.mock('readline', () => ({
|
|
17
|
+
createInterface: () => ({
|
|
18
|
+
question: (question, callback) => {
|
|
19
|
+
callback('y'); // Auto-confirm
|
|
20
|
+
},
|
|
21
|
+
close: () => { },
|
|
22
|
+
}),
|
|
23
|
+
}));
|
|
24
|
+
describe('Internationalization (i18n) E2E', () => {
|
|
25
|
+
let testProject;
|
|
26
|
+
let originalCwd;
|
|
27
|
+
beforeEach(() => {
|
|
28
|
+
originalCwd = process.cwd();
|
|
29
|
+
testProject = createTestProject({ name: 'i18n-test' });
|
|
30
|
+
process.chdir(testProject.path);
|
|
31
|
+
});
|
|
32
|
+
afterEach(() => {
|
|
33
|
+
process.chdir(originalCwd);
|
|
34
|
+
testProject.destroy();
|
|
35
|
+
});
|
|
36
|
+
describe('Japanese Language Support', () => {
|
|
37
|
+
it('should setup project with Japanese language (default)', async () => {
|
|
38
|
+
await setupExisting({
|
|
39
|
+
cursor: true,
|
|
40
|
+
projectName: 'テストプロジェクト',
|
|
41
|
+
jiraKey: 'TEST'
|
|
42
|
+
});
|
|
43
|
+
// Verify project.json has Japanese language
|
|
44
|
+
const projectJsonPath = join(testProject.path, '.kiro/project.json');
|
|
45
|
+
assertFileExists(projectJsonPath);
|
|
46
|
+
assertFileContains(projectJsonPath, '"language": "ja"');
|
|
47
|
+
});
|
|
48
|
+
it('should render templates with Japanese DEV_GUIDELINES', async () => {
|
|
49
|
+
await setupExisting({
|
|
50
|
+
cursor: true,
|
|
51
|
+
lang: 'ja',
|
|
52
|
+
projectName: 'テストプロジェクト',
|
|
53
|
+
jiraKey: 'TEST'
|
|
54
|
+
});
|
|
55
|
+
// Check if templates contain Japanese guidelines
|
|
56
|
+
const rulesDir = join(testProject.path, '.cursor/rules');
|
|
57
|
+
const ruleFiles = ['github-ssot.mdc', 'atlassian-mcp.mdc', 'multi-project.mdc'];
|
|
58
|
+
for (const ruleFile of ruleFiles) {
|
|
59
|
+
const rulePath = join(rulesDir, ruleFile);
|
|
60
|
+
assertFileExists(rulePath);
|
|
61
|
+
const content = readFileSync(rulePath, 'utf-8');
|
|
62
|
+
// Should NOT contain placeholder
|
|
63
|
+
expect(content).not.toContain('{{DEV_GUIDELINES}}');
|
|
64
|
+
// Should contain Japanese guidelines
|
|
65
|
+
expect(content).toContain('Think in English');
|
|
66
|
+
expect(content).toContain('Japanese');
|
|
67
|
+
expect(content).toContain('日本語');
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
it('should have correct Japanese DEV_GUIDELINES format', () => {
|
|
71
|
+
const guidelines = DEV_GUIDELINES_MAP.ja;
|
|
72
|
+
expect(guidelines).toContain('Think in English');
|
|
73
|
+
expect(guidelines).toContain('generate responses in Japanese');
|
|
74
|
+
expect(guidelines).toContain('思考は英語');
|
|
75
|
+
expect(guidelines).toContain('回答の生成は日本語');
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
describe('English Language Support', () => {
|
|
79
|
+
it('should setup project with English language', async () => {
|
|
80
|
+
await setupExisting({
|
|
81
|
+
cursor: true,
|
|
82
|
+
lang: 'en',
|
|
83
|
+
projectName: 'Test Project',
|
|
84
|
+
jiraKey: 'TEST'
|
|
85
|
+
});
|
|
86
|
+
// Verify project.json has English language
|
|
87
|
+
const projectJsonPath = join(testProject.path, '.kiro/project.json');
|
|
88
|
+
assertFileExists(projectJsonPath);
|
|
89
|
+
assertFileContains(projectJsonPath, '"language": "en"');
|
|
90
|
+
});
|
|
91
|
+
it('should render templates with English DEV_GUIDELINES', async () => {
|
|
92
|
+
await setupExisting({
|
|
93
|
+
cursor: true,
|
|
94
|
+
lang: 'en',
|
|
95
|
+
projectName: 'Test Project',
|
|
96
|
+
jiraKey: 'TEST'
|
|
97
|
+
});
|
|
98
|
+
// Check if templates contain English guidelines
|
|
99
|
+
const rulesDir = join(testProject.path, '.cursor/rules');
|
|
100
|
+
const ruleFiles = ['github-ssot.mdc', 'atlassian-mcp.mdc', 'multi-project.mdc'];
|
|
101
|
+
for (const ruleFile of ruleFiles) {
|
|
102
|
+
const rulePath = join(rulesDir, ruleFile);
|
|
103
|
+
assertFileExists(rulePath);
|
|
104
|
+
const content = readFileSync(rulePath, 'utf-8');
|
|
105
|
+
// Should NOT contain placeholder
|
|
106
|
+
expect(content).not.toContain('{{DEV_GUIDELINES}}');
|
|
107
|
+
// Should contain English guidelines
|
|
108
|
+
expect(content).toContain('Think in English');
|
|
109
|
+
expect(content).toContain('generate responses in English');
|
|
110
|
+
// Should NOT contain Japanese
|
|
111
|
+
expect(content).not.toContain('日本語');
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
it('should have correct English DEV_GUIDELINES format', () => {
|
|
115
|
+
const guidelines = DEV_GUIDELINES_MAP.en;
|
|
116
|
+
expect(guidelines).toBe('- Think in English, generate responses in English');
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
describe('Template Rendering', () => {
|
|
120
|
+
it('should render template with Japanese context', () => {
|
|
121
|
+
const template = `---
|
|
122
|
+
title: Test Rule
|
|
123
|
+
description: {{DEV_GUIDELINES}} for testing
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
# Test Rule
|
|
127
|
+
|
|
128
|
+
{{DEV_GUIDELINES}}
|
|
129
|
+
|
|
130
|
+
## Other content
|
|
131
|
+
`;
|
|
132
|
+
const context = createTemplateContext('ja', '.kiro', '.cursor');
|
|
133
|
+
const rendered = renderTemplate(template, context);
|
|
134
|
+
// Should replace all placeholders
|
|
135
|
+
expect(rendered).not.toContain('{{DEV_GUIDELINES}}');
|
|
136
|
+
// Should contain Japanese guidelines
|
|
137
|
+
expect(rendered).toContain('Think in English');
|
|
138
|
+
expect(rendered).toContain('Japanese');
|
|
139
|
+
expect(rendered).toContain('日本語');
|
|
140
|
+
});
|
|
141
|
+
it('should render template with English context', () => {
|
|
142
|
+
const template = `---
|
|
143
|
+
title: Test Rule
|
|
144
|
+
description: {{DEV_GUIDELINES}} for testing
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
# Test Rule
|
|
148
|
+
|
|
149
|
+
{{DEV_GUIDELINES}}
|
|
150
|
+
|
|
151
|
+
## Other content
|
|
152
|
+
`;
|
|
153
|
+
const context = createTemplateContext('en', '.kiro', '.cursor');
|
|
154
|
+
const rendered = renderTemplate(template, context);
|
|
155
|
+
// Should replace all placeholders
|
|
156
|
+
expect(rendered).not.toContain('{{DEV_GUIDELINES}}');
|
|
157
|
+
// Should contain English guidelines
|
|
158
|
+
expect(rendered).toContain('Think in English, generate responses in English');
|
|
159
|
+
// Should NOT contain Japanese
|
|
160
|
+
expect(rendered).not.toContain('日本語');
|
|
161
|
+
});
|
|
162
|
+
it('should handle multiple placeholders in template', () => {
|
|
163
|
+
const template = `Language: {{LANG_CODE}}
|
|
164
|
+
Guidelines: {{DEV_GUIDELINES}}
|
|
165
|
+
Kiro Dir: {{KIRO_DIR}}
|
|
166
|
+
Agent Dir: {{AGENT_DIR}}
|
|
167
|
+
`;
|
|
168
|
+
const context = createTemplateContext('ja', '.kiro', '.cursor');
|
|
169
|
+
const rendered = renderTemplate(template, context);
|
|
170
|
+
expect(rendered).toContain('Language: ja');
|
|
171
|
+
expect(rendered).toContain('Guidelines: - Think in English');
|
|
172
|
+
expect(rendered).toContain('Kiro Dir: .kiro');
|
|
173
|
+
expect(rendered).toContain('Agent Dir: .cursor');
|
|
174
|
+
});
|
|
175
|
+
it('should preserve unrecognized placeholders', () => {
|
|
176
|
+
const template = `Known: {{LANG_CODE}}
|
|
177
|
+
Unknown: {{UNKNOWN_PLACEHOLDER}}
|
|
178
|
+
`;
|
|
179
|
+
const context = createTemplateContext('ja', '.kiro', '.cursor');
|
|
180
|
+
const rendered = renderTemplate(template, context);
|
|
181
|
+
// Known placeholder should be replaced
|
|
182
|
+
expect(rendered).toContain('Known: ja');
|
|
183
|
+
// Unknown placeholder should be preserved
|
|
184
|
+
expect(rendered).toContain('Unknown: {{UNKNOWN_PLACEHOLDER}}');
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
describe('All Supported Languages', () => {
|
|
188
|
+
const languages = [
|
|
189
|
+
{ code: 'ja', name: 'Japanese' },
|
|
190
|
+
{ code: 'en', name: 'English' },
|
|
191
|
+
{ code: 'zh-TW', name: 'Traditional Chinese' },
|
|
192
|
+
{ code: 'zh', name: 'Simplified Chinese' },
|
|
193
|
+
{ code: 'es', name: 'Spanish' },
|
|
194
|
+
{ code: 'pt', name: 'Portuguese' },
|
|
195
|
+
{ code: 'de', name: 'German' },
|
|
196
|
+
{ code: 'fr', name: 'French' },
|
|
197
|
+
{ code: 'ru', name: 'Russian' },
|
|
198
|
+
{ code: 'it', name: 'Italian' },
|
|
199
|
+
{ code: 'ko', name: 'Korean' },
|
|
200
|
+
{ code: 'ar', name: 'Arabic' }
|
|
201
|
+
];
|
|
202
|
+
languages.forEach(({ code, name }) => {
|
|
203
|
+
it(`should have DEV_GUIDELINES for ${name} (${code})`, () => {
|
|
204
|
+
const guidelines = DEV_GUIDELINES_MAP[code];
|
|
205
|
+
expect(guidelines).toBeDefined();
|
|
206
|
+
expect(guidelines).not.toBe('');
|
|
207
|
+
expect(guidelines.length).toBeGreaterThan(0);
|
|
208
|
+
// All guidelines should mention "Think in English" or equivalent
|
|
209
|
+
const hasEnglishThinking = guidelines.includes('Think in English') ||
|
|
210
|
+
guidelines.includes('以英文思考') ||
|
|
211
|
+
guidelines.includes('Думай по-английски') ||
|
|
212
|
+
guidelines.includes('فكر بالإنجليزية');
|
|
213
|
+
expect(hasEnglishThinking).toBe(true);
|
|
214
|
+
});
|
|
215
|
+
it(`should setup project with ${name} (${code})`, async () => {
|
|
216
|
+
await setupExisting({
|
|
217
|
+
cursor: true,
|
|
218
|
+
lang: code,
|
|
219
|
+
projectName: 'Test Project',
|
|
220
|
+
jiraKey: 'TEST'
|
|
221
|
+
});
|
|
222
|
+
const projectJsonPath = join(testProject.path, '.kiro/project.json');
|
|
223
|
+
assertFileContains(projectJsonPath, `"language": "${code}"`);
|
|
224
|
+
});
|
|
225
|
+
});
|
|
226
|
+
});
|
|
227
|
+
describe('Template Context Creation', () => {
|
|
228
|
+
it('should create context with all required fields', () => {
|
|
229
|
+
const context = createTemplateContext('ja', '.kiro', '.cursor');
|
|
230
|
+
expect(context).toHaveProperty('LANG_CODE', 'ja');
|
|
231
|
+
expect(context).toHaveProperty('DEV_GUIDELINES');
|
|
232
|
+
expect(context).toHaveProperty('KIRO_DIR', '.kiro');
|
|
233
|
+
expect(context).toHaveProperty('AGENT_DIR', '.cursor');
|
|
234
|
+
expect(context.DEV_GUIDELINES).toContain('Think in English');
|
|
235
|
+
expect(context.DEV_GUIDELINES).toContain('日本語');
|
|
236
|
+
});
|
|
237
|
+
it('should create context for different environments', () => {
|
|
238
|
+
const cursorContext = createTemplateContext('ja', '.kiro', '.cursor');
|
|
239
|
+
const claudeContext = createTemplateContext('ja', '.kiro', '.claude');
|
|
240
|
+
expect(cursorContext.AGENT_DIR).toBe('.cursor');
|
|
241
|
+
expect(claudeContext.AGENT_DIR).toBe('.claude');
|
|
242
|
+
// DEV_GUIDELINES should be the same
|
|
243
|
+
expect(cursorContext.DEV_GUIDELINES).toBe(claudeContext.DEV_GUIDELINES);
|
|
244
|
+
});
|
|
245
|
+
});
|
|
246
|
+
describe('Error Handling', () => {
|
|
247
|
+
it('should handle unsupported language code', async () => {
|
|
248
|
+
await expect(async () => {
|
|
249
|
+
await setupExisting({
|
|
250
|
+
cursor: true,
|
|
251
|
+
lang: 'invalid-lang',
|
|
252
|
+
projectName: 'Test Project',
|
|
253
|
+
jiraKey: 'TEST'
|
|
254
|
+
});
|
|
255
|
+
}).rejects.toThrow(/Unsupported language/);
|
|
256
|
+
});
|
|
257
|
+
it('should handle empty template gracefully', () => {
|
|
258
|
+
const template = '';
|
|
259
|
+
const context = createTemplateContext('ja', '.kiro', '.cursor');
|
|
260
|
+
const rendered = renderTemplate(template, context);
|
|
261
|
+
expect(rendered).toBe('');
|
|
262
|
+
});
|
|
263
|
+
it('should handle template without placeholders', () => {
|
|
264
|
+
const template = 'This is a plain template without any placeholders.';
|
|
265
|
+
const context = createTemplateContext('ja', '.kiro', '.cursor');
|
|
266
|
+
const rendered = renderTemplate(template, context);
|
|
267
|
+
expect(rendered).toBe(template);
|
|
268
|
+
});
|
|
269
|
+
});
|
|
270
|
+
describe('Real-world Scenarios', () => {
|
|
271
|
+
it('should correctly render GitHub SSoT template in Japanese', async () => {
|
|
272
|
+
await setupExisting({
|
|
273
|
+
cursor: true,
|
|
274
|
+
lang: 'ja',
|
|
275
|
+
projectName: 'リアルプロジェクト',
|
|
276
|
+
jiraKey: 'REAL'
|
|
277
|
+
});
|
|
278
|
+
const githubSsotPath = join(testProject.path, '.cursor/rules/github-ssot.mdc');
|
|
279
|
+
assertFileExists(githubSsotPath);
|
|
280
|
+
const content = readFileSync(githubSsotPath, 'utf-8');
|
|
281
|
+
// Frontmatter should have rendered guidelines
|
|
282
|
+
expect(content).toMatch(/description:.*Think in English.*Japanese/);
|
|
283
|
+
// Should not have placeholder
|
|
284
|
+
expect(content).not.toContain('{{DEV_GUIDELINES}}');
|
|
285
|
+
});
|
|
286
|
+
it('should correctly render GitHub SSoT template in English', async () => {
|
|
287
|
+
await setupExisting({
|
|
288
|
+
cursor: true,
|
|
289
|
+
lang: 'en',
|
|
290
|
+
projectName: 'Real Project',
|
|
291
|
+
jiraKey: 'REAL'
|
|
292
|
+
});
|
|
293
|
+
const githubSsotPath = join(testProject.path, '.cursor/rules/github-ssot.mdc');
|
|
294
|
+
assertFileExists(githubSsotPath);
|
|
295
|
+
const content = readFileSync(githubSsotPath, 'utf-8');
|
|
296
|
+
// Frontmatter should have rendered guidelines
|
|
297
|
+
expect(content).toMatch(/description:.*Think in English.*English/);
|
|
298
|
+
// Should not have placeholder
|
|
299
|
+
expect(content).not.toContain('{{DEV_GUIDELINES}}');
|
|
300
|
+
// Should not have Japanese
|
|
301
|
+
expect(content).not.toContain('日本語');
|
|
302
|
+
});
|
|
303
|
+
it('should support multiple projects with different languages', async () => {
|
|
304
|
+
// Setup Japanese project
|
|
305
|
+
const jaProject = createTestProject({ name: 'ja-project' });
|
|
306
|
+
process.chdir(jaProject.path);
|
|
307
|
+
await setupExisting({
|
|
308
|
+
cursor: true,
|
|
309
|
+
lang: 'ja',
|
|
310
|
+
projectName: '日本語プロジェクト',
|
|
311
|
+
jiraKey: 'JAPROJ'
|
|
312
|
+
});
|
|
313
|
+
const jaProjectJson = join(jaProject.path, '.kiro/project.json');
|
|
314
|
+
assertFileContains(jaProjectJson, '"language": "ja"');
|
|
315
|
+
// Setup English project
|
|
316
|
+
const enProject = createTestProject({ name: 'en-project' });
|
|
317
|
+
process.chdir(enProject.path);
|
|
318
|
+
await setupExisting({
|
|
319
|
+
cursor: true,
|
|
320
|
+
lang: 'en',
|
|
321
|
+
projectName: 'English Project',
|
|
322
|
+
jiraKey: 'ENPROJ'
|
|
323
|
+
});
|
|
324
|
+
const enProjectJson = join(enProject.path, '.kiro/project.json');
|
|
325
|
+
assertFileContains(enProjectJson, '"language": "en"');
|
|
326
|
+
// Cleanup
|
|
327
|
+
process.chdir(originalCwd);
|
|
328
|
+
jaProject.destroy();
|
|
329
|
+
enProject.destroy();
|
|
330
|
+
});
|
|
331
|
+
});
|
|
332
|
+
});
|
|
333
|
+
//# sourceMappingURL=internationalization.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internationalization.test.js","sourceRoot":"","sources":["../../../../src/__tests__/integration/internationalization.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Integration tests for Claude Agent
|
|
2
|
+
* Integration tests for Claude Agent environment setup
|
|
3
3
|
*/
|
|
4
4
|
import { describe, it, beforeEach, afterEach, vi } from 'vitest';
|
|
5
5
|
import { join } from 'path';
|
|
6
6
|
import { setupExisting } from '../../../commands/setup-existing.js';
|
|
7
7
|
import { createTestProject } from './helpers/test-project.js';
|
|
8
|
-
import { assertDirectoryExists, assertFileExists, assertDirectoryStructure, assertFileContains } from './helpers/fs-assertions.js';
|
|
8
|
+
import { assertDirectoryExists, assertFileExists, assertDirectoryStructure, assertFileContains, } from './helpers/fs-assertions.js';
|
|
9
9
|
// Mock readline to auto-confirm prompts
|
|
10
10
|
vi.mock('readline', () => ({
|
|
11
11
|
createInterface: () => ({
|
|
@@ -28,21 +28,20 @@ describe('Claude Agent Environment Setup', () => {
|
|
|
28
28
|
testProject.destroy();
|
|
29
29
|
});
|
|
30
30
|
describe('Basic Setup', () => {
|
|
31
|
-
|
|
32
|
-
it.skip('should create .claude/subagents directory', async () => {
|
|
31
|
+
it('should create .claude/agents directory', async () => {
|
|
33
32
|
await setupExisting({
|
|
34
33
|
claudeAgent: true,
|
|
35
34
|
projectName: 'Test Project',
|
|
36
|
-
jiraKey: 'TEST'
|
|
35
|
+
jiraKey: 'TEST',
|
|
37
36
|
});
|
|
38
37
|
assertDirectoryExists(join(testProject.path, '.claude'));
|
|
39
|
-
assertDirectoryExists(join(testProject.path, '.claude/
|
|
38
|
+
assertDirectoryExists(join(testProject.path, '.claude/agents'));
|
|
40
39
|
});
|
|
41
40
|
it('should create .kiro directory structure', async () => {
|
|
42
41
|
await setupExisting({
|
|
43
42
|
claudeAgent: true,
|
|
44
43
|
projectName: 'Test Project',
|
|
45
|
-
jiraKey: 'TEST'
|
|
44
|
+
jiraKey: 'TEST',
|
|
46
45
|
});
|
|
47
46
|
assertDirectoryStructure(testProject.path, {
|
|
48
47
|
'.kiro': 'dir',
|
|
@@ -56,7 +55,7 @@ describe('Claude Agent Environment Setup', () => {
|
|
|
56
55
|
await setupExisting({
|
|
57
56
|
claudeAgent: true,
|
|
58
57
|
projectName: 'Agent Test',
|
|
59
|
-
jiraKey: 'AGNT'
|
|
58
|
+
jiraKey: 'AGNT',
|
|
60
59
|
});
|
|
61
60
|
const projectJsonPath = join(testProject.path, '.kiro/project.json');
|
|
62
61
|
assertFileExists(projectJsonPath);
|
|
@@ -67,7 +66,7 @@ describe('Claude Agent Environment Setup', () => {
|
|
|
67
66
|
await setupExisting({
|
|
68
67
|
claudeAgent: true,
|
|
69
68
|
projectName: 'Test Project',
|
|
70
|
-
jiraKey: 'TEST'
|
|
69
|
+
jiraKey: 'TEST',
|
|
71
70
|
});
|
|
72
71
|
const envPath = join(testProject.path, '.env');
|
|
73
72
|
assertFileExists(envPath);
|
|
@@ -75,37 +74,35 @@ describe('Claude Agent Environment Setup', () => {
|
|
|
75
74
|
});
|
|
76
75
|
});
|
|
77
76
|
describe('Claude Agent-specific Structure', () => {
|
|
78
|
-
|
|
79
|
-
it.skip('should have subagents directory structure', async () => {
|
|
77
|
+
it('should have agents directory structure', async () => {
|
|
80
78
|
await setupExisting({
|
|
81
79
|
claudeAgent: true,
|
|
82
80
|
projectName: 'Test Project',
|
|
83
|
-
jiraKey: 'TEST'
|
|
81
|
+
jiraKey: 'TEST',
|
|
84
82
|
});
|
|
85
|
-
const
|
|
86
|
-
assertDirectoryExists(
|
|
83
|
+
const agentsDir = join(testProject.path, '.claude/agents');
|
|
84
|
+
assertDirectoryExists(agentsDir);
|
|
87
85
|
});
|
|
88
86
|
it('should not create Cursor-specific directories', async () => {
|
|
89
87
|
await setupExisting({
|
|
90
88
|
claudeAgent: true,
|
|
91
89
|
projectName: 'Test Project',
|
|
92
|
-
jiraKey: 'TEST'
|
|
90
|
+
jiraKey: 'TEST',
|
|
93
91
|
});
|
|
94
92
|
const { existsSync } = await import('fs');
|
|
95
93
|
const cursorDir = join(testProject.path, '.cursor');
|
|
96
94
|
// .cursor directory should not exist for Claude Agent setup
|
|
97
95
|
expect(existsSync(cursorDir)).toBe(false);
|
|
98
96
|
});
|
|
99
|
-
|
|
100
|
-
it.skip('should not create basic Claude rules directory', async () => {
|
|
97
|
+
it('should not create basic Claude rules directory', async () => {
|
|
101
98
|
await setupExisting({
|
|
102
99
|
claudeAgent: true,
|
|
103
100
|
projectName: 'Test Project',
|
|
104
|
-
jiraKey: 'TEST'
|
|
101
|
+
jiraKey: 'TEST',
|
|
105
102
|
});
|
|
106
103
|
const { existsSync } = await import('fs');
|
|
107
104
|
const claudeRulesDir = join(testProject.path, '.claude/rules');
|
|
108
|
-
// Basic .claude/rules should not exist for
|
|
105
|
+
// Basic .claude/rules should not exist for agents setup
|
|
109
106
|
expect(existsSync(claudeRulesDir)).toBe(false);
|
|
110
107
|
});
|
|
111
108
|
});
|
|
@@ -115,7 +112,7 @@ describe('Claude Agent Environment Setup', () => {
|
|
|
115
112
|
claudeAgent: true,
|
|
116
113
|
lang: 'zh-TW',
|
|
117
114
|
projectName: 'Test Project',
|
|
118
|
-
jiraKey: 'TEST'
|
|
115
|
+
jiraKey: 'TEST',
|
|
119
116
|
});
|
|
120
117
|
const projectJson = join(testProject.path, '.kiro/project.json');
|
|
121
118
|
assertFileContains(projectJson, '"language": "zh-TW"');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-agent.test.js","sourceRoot":"","sources":["../../../../../src/__tests__/integration/setup/claude-agent.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAe,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,wBAAwB,EACxB,kBAAkB,
|
|
1
|
+
{"version":3,"file":"claude-agent.test.js","sourceRoot":"","sources":["../../../../../src/__tests__/integration/setup/claude-agent.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
|
|
|
5
5
|
import { join } from 'path';
|
|
6
6
|
import { setupExisting } from '../../../commands/setup-existing.js';
|
|
7
7
|
import { createTestProject } from './helpers/test-project.js';
|
|
8
|
-
import { assertDirectoryExists, assertFileExists, assertDirectoryStructure, assertFileContains } from './helpers/fs-assertions.js';
|
|
8
|
+
import { assertDirectoryExists, assertFileExists, assertDirectoryStructure, assertFileContains, } from './helpers/fs-assertions.js';
|
|
9
9
|
// Mock readline to auto-confirm prompts
|
|
10
10
|
vi.mock('readline', () => ({
|
|
11
11
|
createInterface: () => ({
|
|
@@ -32,7 +32,7 @@ describe('Cursor Environment Setup', () => {
|
|
|
32
32
|
await setupExisting({
|
|
33
33
|
cursor: true,
|
|
34
34
|
projectName: 'Test Project',
|
|
35
|
-
jiraKey: 'TEST'
|
|
35
|
+
jiraKey: 'TEST',
|
|
36
36
|
});
|
|
37
37
|
// Assert directory structure
|
|
38
38
|
assertDirectoryExists(join(testProject.path, '.cursor'));
|
|
@@ -43,7 +43,7 @@ describe('Cursor Environment Setup', () => {
|
|
|
43
43
|
await setupExisting({
|
|
44
44
|
cursor: true,
|
|
45
45
|
projectName: 'Test Project',
|
|
46
|
-
jiraKey: 'TEST'
|
|
46
|
+
jiraKey: 'TEST',
|
|
47
47
|
});
|
|
48
48
|
assertDirectoryStructure(testProject.path, {
|
|
49
49
|
'.kiro': 'dir',
|
|
@@ -57,7 +57,7 @@ describe('Cursor Environment Setup', () => {
|
|
|
57
57
|
await setupExisting({
|
|
58
58
|
cursor: true,
|
|
59
59
|
projectName: 'Test Project',
|
|
60
|
-
jiraKey: 'TEST'
|
|
60
|
+
jiraKey: 'TEST',
|
|
61
61
|
});
|
|
62
62
|
const projectJsonPath = join(testProject.path, '.kiro/project.json');
|
|
63
63
|
assertFileExists(projectJsonPath);
|
|
@@ -69,7 +69,7 @@ describe('Cursor Environment Setup', () => {
|
|
|
69
69
|
await setupExisting({
|
|
70
70
|
cursor: true,
|
|
71
71
|
projectName: 'Test Project',
|
|
72
|
-
jiraKey: 'TEST'
|
|
72
|
+
jiraKey: 'TEST',
|
|
73
73
|
});
|
|
74
74
|
const envPath = join(testProject.path, '.env');
|
|
75
75
|
assertFileExists(envPath);
|
|
@@ -83,7 +83,7 @@ describe('Cursor Environment Setup', () => {
|
|
|
83
83
|
cursor: true,
|
|
84
84
|
lang: 'ja',
|
|
85
85
|
projectName: 'Test Project',
|
|
86
|
-
jiraKey: 'TEST'
|
|
86
|
+
jiraKey: 'TEST',
|
|
87
87
|
});
|
|
88
88
|
// Check if rules contain language-specific content
|
|
89
89
|
const rulesDir = join(testProject.path, '.cursor/rules');
|
|
@@ -97,7 +97,7 @@ describe('Cursor Environment Setup', () => {
|
|
|
97
97
|
await setupExisting({
|
|
98
98
|
cursor: true,
|
|
99
99
|
projectName: 'テストプロジェクト',
|
|
100
|
-
jiraKey: 'TEST'
|
|
100
|
+
jiraKey: 'TEST',
|
|
101
101
|
});
|
|
102
102
|
const projectJson = join(testProject.path, '.kiro/project.json');
|
|
103
103
|
assertFileContains(projectJson, '"language": "ja"');
|
|
@@ -107,7 +107,7 @@ describe('Cursor Environment Setup', () => {
|
|
|
107
107
|
cursor: true,
|
|
108
108
|
lang: 'en',
|
|
109
109
|
projectName: 'Test Project',
|
|
110
|
-
jiraKey: 'TEST'
|
|
110
|
+
jiraKey: 'TEST',
|
|
111
111
|
});
|
|
112
112
|
const projectJson = join(testProject.path, '.kiro/project.json');
|
|
113
113
|
assertFileContains(projectJson, '"language": "en"');
|
|
@@ -118,7 +118,7 @@ describe('Cursor Environment Setup', () => {
|
|
|
118
118
|
await setupExisting({
|
|
119
119
|
cursor: true,
|
|
120
120
|
projectName: 'Test Project',
|
|
121
|
-
jiraKey: 'TEST'
|
|
121
|
+
jiraKey: 'TEST',
|
|
122
122
|
});
|
|
123
123
|
const projectJson = join(testProject.path, '.kiro/project.json');
|
|
124
124
|
assertFileContains(projectJson, /repository.*github\.com/);
|
|
@@ -127,7 +127,10 @@ describe('Cursor Environment Setup', () => {
|
|
|
127
127
|
// Remove git remote
|
|
128
128
|
const { execSync } = await import('child_process');
|
|
129
129
|
try {
|
|
130
|
-
execSync('git remote remove origin', {
|
|
130
|
+
execSync('git remote remove origin', {
|
|
131
|
+
cwd: testProject.path,
|
|
132
|
+
stdio: 'ignore',
|
|
133
|
+
});
|
|
131
134
|
}
|
|
132
135
|
catch {
|
|
133
136
|
// Ignore if remote doesn't exist
|
|
@@ -135,7 +138,7 @@ describe('Cursor Environment Setup', () => {
|
|
|
135
138
|
await setupExisting({
|
|
136
139
|
cursor: true,
|
|
137
140
|
projectName: 'Test Project',
|
|
138
|
-
jiraKey: 'TEST'
|
|
141
|
+
jiraKey: 'TEST',
|
|
139
142
|
});
|
|
140
143
|
const projectJson = join(testProject.path, '.kiro/project.json');
|
|
141
144
|
assertFileExists(projectJson);
|
|
@@ -144,18 +147,19 @@ describe('Cursor Environment Setup', () => {
|
|
|
144
147
|
});
|
|
145
148
|
});
|
|
146
149
|
describe('Error Handling', () => {
|
|
147
|
-
it('should
|
|
150
|
+
it('should show warning if not in Git repository', async () => {
|
|
148
151
|
// Remove .git directory
|
|
149
152
|
const { rmSync } = await import('fs');
|
|
150
153
|
const gitPath = join(testProject.path, '.git');
|
|
151
154
|
rmSync(gitPath, { recursive: true, force: true });
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
155
|
+
// Should not throw, but continue with warning
|
|
156
|
+
await setupExisting({
|
|
157
|
+
cursor: true,
|
|
158
|
+
projectName: 'Test Project',
|
|
159
|
+
jiraKey: 'TEST',
|
|
160
|
+
});
|
|
161
|
+
// If we reach here, the test passes
|
|
162
|
+
expect(true).toBe(true);
|
|
159
163
|
});
|
|
160
164
|
});
|
|
161
165
|
});
|