create-quiver 0.15.2 → 0.15.4
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/.github/workflows/ci.yml +3 -0
- package/AGENTS.md.es.template +37 -0
- package/README.md +1 -0
- package/README_FOR_AI.md +6 -4
- package/docs/AI_CONTEXT.md.es.template +35 -0
- package/docs/AI_ONBOARDING_PROMPT.md.es.template +22 -0
- package/docs/CLI_UX_GUIDE.md +47 -1
- package/docs/COMMANDS.md.es.template +28 -0
- package/docs/COMMANDS.md.template +14 -3
- package/docs/CONTEXTO.md.es.template +33 -0
- package/docs/DECISIONS.md.es.template +17 -0
- package/docs/GITFLOW_PR_GUIDE.md.es.template +25 -0
- package/docs/INDEX.md +96 -0
- package/docs/INDEX.md.es.template +36 -0
- package/docs/STATUS.md.es.template +28 -0
- package/docs/SUPPORT_MATRIX.md.es.template +22 -0
- package/docs/TESTING_GUIDE_FOR_AI.md.es.template +19 -0
- package/docs/TROUBLESHOOTING.md.es.template +35 -0
- package/docs/WORKFLOW.md.es.template +29 -0
- package/docs/WORKFLOW.md.template +2 -2
- package/docs/ai/LESSONS.md.es.template +24 -0
- package/docs/getting-started/installation.md +19 -0
- package/docs/reference/commands.md +68 -2
- package/package.json +3 -1
- package/specs/quiver-v34-cli-dashboard-status/EVIDENCE_REPORT.md +119 -0
- package/specs/quiver-v34-cli-dashboard-status/EXECUTION_PLAN.md +77 -0
- package/specs/quiver-v34-cli-dashboard-status/SPEC.md +152 -0
- package/specs/quiver-v34-cli-dashboard-status/STATUS.md +29 -0
- package/specs/quiver-v34-cli-dashboard-status/pr.md +99 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-00-dashboard-foundation/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-00-dashboard-foundation/EXECUTION_BRIEF.md +49 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-00-dashboard-foundation/slice.json +68 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-01-dashboard-report-contract/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-01-dashboard-report-contract/EXECUTION_BRIEF.md +53 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-01-dashboard-report-contract/slice.json +78 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-02-dashboard-command-rendering/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-02-dashboard-command-rendering/EXECUTION_BRIEF.md +53 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-02-dashboard-command-rendering/slice.json +82 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-03-dashboard-edge-cases-and-guardrails/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-03-dashboard-edge-cases-and-guardrails/EXECUTION_BRIEF.md +54 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-03-dashboard-edge-cases-and-guardrails/slice.json +77 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-04-docs-templates-and-scripts/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-04-docs-templates-and-scripts/EXECUTION_BRIEF.md +54 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-04-docs-templates-and-scripts/slice.json +88 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-05-tests-smokes-release-readiness/CLOSURE_BRIEF.md +26 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-05-tests-smokes-release-readiness/EXECUTION_BRIEF.md +57 -0
- package/specs/quiver-v34-cli-dashboard-status/slices/slice-05-tests-smokes-release-readiness/slice.json +85 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/EVIDENCE_REPORT.md +43 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/EXECUTION_PLAN.md +85 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/SPEC.md +147 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/STATUS.md +33 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/pr.md +106 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-00-foundation-and-doc-router/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-00-foundation-and-doc-router/EXECUTION_BRIEF.md +38 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-00-foundation-and-doc-router/slice.json +64 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-01-dashboard-cli-contract/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-01-dashboard-cli-contract/EXECUTION_BRIEF.md +49 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-01-dashboard-cli-contract/slice.json +80 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-02-dashboard-compact-renderer/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-02-dashboard-compact-renderer/EXECUTION_BRIEF.md +48 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-02-dashboard-compact-renderer/slice.json +73 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-03-dashboard-details-sections/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-03-dashboard-details-sections/EXECUTION_BRIEF.md +48 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-03-dashboard-details-sections/slice.json +72 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-04-version-command/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-04-version-command/EXECUTION_BRIEF.md +49 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-04-version-command/slice.json +82 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-05-docs-help-generated-guidance/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-05-docs-help-generated-guidance/EXECUTION_BRIEF.md +50 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-05-docs-help-generated-guidance/slice.json +90 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-06-tests-smokes-release-readiness/CLOSURE_BRIEF.md +21 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-06-tests-smokes-release-readiness/EXECUTION_BRIEF.md +51 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-06-tests-smokes-release-readiness/slice.json +85 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-07-package-and-cross-platform-smoke/CLOSURE_BRIEF.md +20 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-07-package-and-cross-platform-smoke/EXECUTION_BRIEF.md +49 -0
- package/specs/quiver-v35-compact-dashboard-version-ux/slices/slice-07-package-and-cross-platform-smoke/slice.json +79 -0
- package/specs/quiver-v36-ai-run-watch-portable/EVIDENCE_REPORT.md +33 -0
- package/specs/quiver-v36-ai-run-watch-portable/EXECUTION_PLAN.md +39 -0
- package/specs/quiver-v36-ai-run-watch-portable/SPEC.md +166 -0
- package/specs/quiver-v36-ai-run-watch-portable/STATUS.md +31 -0
- package/specs/quiver-v36-ai-run-watch-portable/pr.md +78 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-00-foundation-and-handoffs/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-00-foundation-and-handoffs/EXECUTION_BRIEF.md +43 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-00-foundation-and-handoffs/slice.json +61 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-01-run-schema-path-safety/CLOSURE_BRIEF.md +18 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-01-run-schema-path-safety/EXECUTION_BRIEF.md +43 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-01-run-schema-path-safety/slice.json +65 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-02-event-writer-redacted-logs/CLOSURE_BRIEF.md +18 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-02-event-writer-redacted-logs/EXECUTION_BRIEF.md +43 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-02-event-writer-redacted-logs/slice.json +66 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-03-provider-streaming-integration/CLOSURE_BRIEF.md +18 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-03-provider-streaming-integration/EXECUTION_BRIEF.md +41 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-03-provider-streaming-integration/slice.json +71 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-04-ai-run-watch-command/CLOSURE_BRIEF.md +18 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-04-ai-run-watch-command/EXECUTION_BRIEF.md +44 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-04-ai-run-watch-command/slice.json +73 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-05-main-progress-user-guidance/CLOSURE_BRIEF.md +18 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-05-main-progress-user-guidance/EXECUTION_BRIEF.md +44 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-05-main-progress-user-guidance/slice.json +71 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-06-docs-generated-guidance/CLOSURE_BRIEF.md +19 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-06-docs-generated-guidance/EXECUTION_BRIEF.md +45 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-06-docs-generated-guidance/slice.json +77 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-07-tests-cross-platform-readiness/CLOSURE_BRIEF.md +22 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-07-tests-cross-platform-readiness/EXECUTION_BRIEF.md +46 -0
- package/specs/quiver-v36-ai-run-watch-portable/slices/slice-07-tests-cross-platform-readiness/slice.json +87 -0
- package/specs/quiver-v37-cli-i18n-foundation/EVIDENCE_REPORT.md +73 -0
- package/specs/quiver-v37-cli-i18n-foundation/EXECUTION_PLAN.md +34 -0
- package/specs/quiver-v37-cli-i18n-foundation/SPEC.md +91 -0
- package/specs/quiver-v37-cli-i18n-foundation/STATUS.md +29 -0
- package/specs/quiver-v37-cli-i18n-foundation/pr.md +97 -0
- package/specs/quiver-v37-cli-i18n-foundation/slices/slice-00-foundation-and-program-roadmap/CLOSURE_BRIEF.md +10 -0
- package/specs/quiver-v37-cli-i18n-foundation/slices/slice-00-foundation-and-program-roadmap/EXECUTION_BRIEF.md +22 -0
- package/specs/quiver-v37-cli-i18n-foundation/slices/slice-00-foundation-and-program-roadmap/slice.json +54 -0
- package/specs/quiver-v37-cli-i18n-foundation/slices/slice-01-language-resolution-contract/CLOSURE_BRIEF.md +30 -0
- package/specs/quiver-v37-cli-i18n-foundation/slices/slice-01-language-resolution-contract/EXECUTION_BRIEF.md +27 -0
- package/specs/quiver-v37-cli-i18n-foundation/slices/slice-01-language-resolution-contract/slice.json +66 -0
- package/specs/quiver-v37-cli-i18n-foundation/slices/slice-02-message-catalog-interpolation/CLOSURE_BRIEF.md +27 -0
- package/specs/quiver-v37-cli-i18n-foundation/slices/slice-02-message-catalog-interpolation/EXECUTION_BRIEF.md +26 -0
- package/specs/quiver-v37-cli-i18n-foundation/slices/slice-02-message-catalog-interpolation/slice.json +62 -0
- package/specs/quiver-v37-cli-i18n-foundation/slices/slice-03-config-language-command/CLOSURE_BRIEF.md +32 -0
- package/specs/quiver-v37-cli-i18n-foundation/slices/slice-03-config-language-command/EXECUTION_BRIEF.md +25 -0
- package/specs/quiver-v37-cli-i18n-foundation/slices/slice-03-config-language-command/slice.json +66 -0
- package/specs/quiver-v37-cli-i18n-foundation/slices/slice-04-parser-help-error-foundation/CLOSURE_BRIEF.md +30 -0
- package/specs/quiver-v37-cli-i18n-foundation/slices/slice-04-parser-help-error-foundation/EXECUTION_BRIEF.md +24 -0
- package/specs/quiver-v37-cli-i18n-foundation/slices/slice-04-parser-help-error-foundation/slice.json +65 -0
- package/specs/quiver-v37-cli-i18n-foundation/slices/slice-05-foundation-docs-tests-package-readiness/CLOSURE_BRIEF.md +27 -0
- package/specs/quiver-v37-cli-i18n-foundation/slices/slice-05-foundation-docs-tests-package-readiness/EXECUTION_BRIEF.md +23 -0
- package/specs/quiver-v37-cli-i18n-foundation/slices/slice-05-foundation-docs-tests-package-readiness/slice.json +67 -0
- package/specs/quiver-v38-cli-i18n-read-only-commands/EVIDENCE_REPORT.md +69 -0
- package/specs/quiver-v38-cli-i18n-read-only-commands/EXECUTION_PLAN.md +25 -0
- package/specs/quiver-v38-cli-i18n-read-only-commands/SPEC.md +52 -0
- package/specs/quiver-v38-cli-i18n-read-only-commands/STATUS.md +24 -0
- package/specs/quiver-v38-cli-i18n-read-only-commands/pr.md +119 -0
- package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-00-read-only-foundation/CLOSURE_BRIEF.md +10 -0
- package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-00-read-only-foundation/EXECUTION_BRIEF.md +21 -0
- package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-00-read-only-foundation/slice.json +53 -0
- package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-01-version-dashboard-help/CLOSURE_BRIEF.md +17 -0
- package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-01-version-dashboard-help/EXECUTION_BRIEF.md +23 -0
- package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-01-version-dashboard-help/slice.json +69 -0
- package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-02-flow-doctor-next-graph/CLOSURE_BRIEF.md +13 -0
- package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-02-flow-doctor-next-graph/EXECUTION_BRIEF.md +22 -0
- package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-02-flow-doctor-next-graph/slice.json +77 -0
- package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-03-ai-inspection-and-export/CLOSURE_BRIEF.md +12 -0
- package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-03-ai-inspection-and-export/EXECUTION_BRIEF.md +22 -0
- package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-03-ai-inspection-and-export/slice.json +66 -0
- package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-04-read-only-tests-smokes/CLOSURE_BRIEF.md +13 -0
- package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-04-read-only-tests-smokes/EXECUTION_BRIEF.md +22 -0
- package/specs/quiver-v38-cli-i18n-read-only-commands/slices/slice-04-read-only-tests-smokes/slice.json +61 -0
- package/specs/quiver-v39-cli-i18n-setup-onboarding/EVIDENCE_REPORT.md +71 -0
- package/specs/quiver-v39-cli-i18n-setup-onboarding/EXECUTION_PLAN.md +25 -0
- package/specs/quiver-v39-cli-i18n-setup-onboarding/SPEC.md +53 -0
- package/specs/quiver-v39-cli-i18n-setup-onboarding/STATUS.md +24 -0
- package/specs/quiver-v39-cli-i18n-setup-onboarding/pr.md +104 -0
- package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-00-setup-foundation/CLOSURE_BRIEF.md +10 -0
- package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-00-setup-foundation/EXECUTION_BRIEF.md +21 -0
- package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-00-setup-foundation/slice.json +53 -0
- package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-01-init-interactive-language/CLOSURE_BRIEF.md +12 -0
- package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-01-init-interactive-language/EXECUTION_BRIEF.md +23 -0
- package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-01-init-interactive-language/slice.json +68 -0
- package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-02-analyze-migrate-prepare/CLOSURE_BRIEF.md +12 -0
- package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-02-analyze-migrate-prepare/EXECUTION_BRIEF.md +23 -0
- package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-02-analyze-migrate-prepare/slice.json +62 -0
- package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-03-demo-evidence-onboarding/CLOSURE_BRIEF.md +12 -0
- package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-03-demo-evidence-onboarding/EXECUTION_BRIEF.md +22 -0
- package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-03-demo-evidence-onboarding/slice.json +72 -0
- package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-04-setup-tests-smokes/CLOSURE_BRIEF.md +15 -0
- package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-04-setup-tests-smokes/EXECUTION_BRIEF.md +22 -0
- package/specs/quiver-v39-cli-i18n-setup-onboarding/slices/slice-04-setup-tests-smokes/slice.json +61 -0
- package/specs/quiver-v40-cli-i18n-spec-slice-workflows/EVIDENCE_REPORT.md +50 -0
- package/specs/quiver-v40-cli-i18n-spec-slice-workflows/EXECUTION_PLAN.md +25 -0
- package/specs/quiver-v40-cli-i18n-spec-slice-workflows/SPEC.md +52 -0
- package/specs/quiver-v40-cli-i18n-spec-slice-workflows/STATUS.md +24 -0
- package/specs/quiver-v40-cli-i18n-spec-slice-workflows/pr.md +94 -0
- package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-00-spec-slice-foundation/CLOSURE_BRIEF.md +10 -0
- package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-00-spec-slice-foundation/EXECUTION_BRIEF.md +21 -0
- package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-00-spec-slice-foundation/slice.json +53 -0
- package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-01-spec-create-start-status/CLOSURE_BRIEF.md +12 -0
- package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-01-spec-create-start-status/EXECUTION_BRIEF.md +22 -0
- package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-01-spec-create-start-status/slice.json +63 -0
- package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-02-spec-validate-close/CLOSURE_BRIEF.md +10 -0
- package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-02-spec-validate-close/EXECUTION_BRIEF.md +22 -0
- package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-02-spec-validate-close/slice.json +63 -0
- package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-03-slice-lifecycle-handoffs/CLOSURE_BRIEF.md +10 -0
- package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-03-slice-lifecycle-handoffs/EXECUTION_BRIEF.md +22 -0
- package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-03-slice-lifecycle-handoffs/slice.json +72 -0
- package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-04-spec-slice-tests-smokes/CLOSURE_BRIEF.md +15 -0
- package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-04-spec-slice-tests-smokes/EXECUTION_BRIEF.md +22 -0
- package/specs/quiver-v40-cli-i18n-spec-slice-workflows/slices/slice-04-spec-slice-tests-smokes/slice.json +69 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/EVIDENCE_REPORT.md +90 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/EXECUTION_PLAN.md +33 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/SPEC.md +57 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/STATUS.md +26 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/pr.md +103 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-00-ai-i18n-foundation/CLOSURE_BRIEF.md +10 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-00-ai-i18n-foundation/EXECUTION_BRIEF.md +21 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-00-ai-i18n-foundation/slice.json +53 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-01-ai-run-status-resume/CLOSURE_BRIEF.md +13 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-01-ai-run-status-resume/EXECUTION_BRIEF.md +22 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-01-ai-run-status-resume/slice.json +68 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-02-ai-agent-models/CLOSURE_BRIEF.md +12 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-02-ai-agent-models/EXECUTION_BRIEF.md +22 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-02-ai-agent-models/slice.json +66 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-03-ai-planner-approval-review/CLOSURE_BRIEF.md +12 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-03-ai-planner-approval-review/EXECUTION_BRIEF.md +23 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-03-ai-planner-approval-review/slice.json +68 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-04-ai-execution-pr/CLOSURE_BRIEF.md +13 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-04-ai-execution-pr/EXECUTION_BRIEF.md +23 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-04-ai-execution-pr/slice.json +72 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-05-ai-tests-smokes/CLOSURE_BRIEF.md +15 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-05-ai-tests-smokes/EXECUTION_BRIEF.md +22 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-05-ai-tests-smokes/slice.json +66 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-06-ai-prepare-context-progress-i18n-fix/CLOSURE_BRIEF.md +11 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-06-ai-prepare-context-progress-i18n-fix/EXECUTION_BRIEF.md +22 -0
- package/specs/quiver-v41-cli-i18n-ai-lifecycle/slices/slice-06-ai-prepare-context-progress-i18n-fix/slice.json +70 -0
- package/specs/quiver-v42-cli-i18n-generated-docs/EVIDENCE_REPORT.md +64 -0
- package/specs/quiver-v42-cli-i18n-generated-docs/EXECUTION_PLAN.md +26 -0
- package/specs/quiver-v42-cli-i18n-generated-docs/SPEC.md +52 -0
- package/specs/quiver-v42-cli-i18n-generated-docs/STATUS.md +24 -0
- package/specs/quiver-v42-cli-i18n-generated-docs/pr.md +125 -0
- package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-00-generated-docs-foundation/CLOSURE_BRIEF.md +10 -0
- package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-00-generated-docs-foundation/EXECUTION_BRIEF.md +21 -0
- package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-00-generated-docs-foundation/slice.json +53 -0
- package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-01-template-language-routing/CLOSURE_BRIEF.md +10 -0
- package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-01-template-language-routing/EXECUTION_BRIEF.md +22 -0
- package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-01-template-language-routing/slice.json +62 -0
- package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-02-init-docs-and-i18n-assets/CLOSURE_BRIEF.md +11 -0
- package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-02-init-docs-and-i18n-assets/EXECUTION_BRIEF.md +22 -0
- package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-02-init-docs-and-i18n-assets/slice.json +72 -0
- package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-03-docs-reference-guides/CLOSURE_BRIEF.md +12 -0
- package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-03-docs-reference-guides/EXECUTION_BRIEF.md +22 -0
- package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-03-docs-reference-guides/slice.json +60 -0
- package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-04-generated-docs-tests-smokes/CLOSURE_BRIEF.md +16 -0
- package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-04-generated-docs-tests-smokes/EXECUTION_BRIEF.md +22 -0
- package/specs/quiver-v42-cli-i18n-generated-docs/slices/slice-04-generated-docs-tests-smokes/slice.json +62 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/EVIDENCE_REPORT.md +203 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/EXECUTION_PLAN.md +27 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/SPEC.md +54 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/STATUS.md +24 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/command-language-mode-matrix.json +545 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/cross-platform-smoke-matrix.md +35 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/pr.md +155 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-00-audit-foundation/CLOSURE_BRIEF.md +10 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-00-audit-foundation/EXECUTION_BRIEF.md +21 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-00-audit-foundation/slice.json +53 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-01-command-language-mode-matrix/CLOSURE_BRIEF.md +13 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-01-command-language-mode-matrix/EXECUTION_BRIEF.md +23 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-01-command-language-mode-matrix/slice.json +62 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-02-public-string-audit/CLOSURE_BRIEF.md +18 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-02-public-string-audit/EXECUTION_BRIEF.md +22 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-02-public-string-audit/slice.json +59 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-03-cross-platform-smokes/CLOSURE_BRIEF.md +15 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-03-cross-platform-smokes/EXECUTION_BRIEF.md +23 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-03-cross-platform-smokes/slice.json +62 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-04-package-release-readiness/CLOSURE_BRIEF.md +17 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-04-package-release-readiness/EXECUTION_BRIEF.md +24 -0
- package/specs/quiver-v43-cli-i18n-audit-release-readiness/slices/slice-04-package-release-readiness/slice.json +66 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/EVIDENCE_REPORT.md +18 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/EXECUTION_PLAN.md +31 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/SPEC.md +118 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/STATUS.md +25 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/pr.md +92 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-00-tui-lite-contract-foundation/CLOSURE_BRIEF.md +11 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-00-tui-lite-contract-foundation/EXECUTION_BRIEF.md +23 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-00-tui-lite-contract-foundation/slice.json +64 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-01-provider-stream-hooks/CLOSURE_BRIEF.md +10 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-01-provider-stream-hooks/EXECUTION_BRIEF.md +24 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-01-provider-stream-hooks/slice.json +65 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-02-live-output-renderer/CLOSURE_BRIEF.md +10 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-02-live-output-renderer/EXECUTION_BRIEF.md +24 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-02-live-output-renderer/slice.json +70 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-03-prepare-context-integration/CLOSURE_BRIEF.md +10 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-03-prepare-context-integration/EXECUTION_BRIEF.md +25 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-03-prepare-context-integration/slice.json +70 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-04-planner-command-audit-adoption/CLOSURE_BRIEF.md +10 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-04-planner-command-audit-adoption/EXECUTION_BRIEF.md +26 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-04-planner-command-audit-adoption/slice.json +72 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-05-docs-tests-readiness/CLOSURE_BRIEF.md +15 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-05-docs-tests-readiness/EXECUTION_BRIEF.md +26 -0
- package/specs/quiver-v44-provider-live-output-tui-lite/slices/slice-05-docs-tests-readiness/slice.json +75 -0
- package/specs/quiver-v45-ci-actions-node24-readiness/EVIDENCE_REPORT.md +30 -0
- package/specs/quiver-v45-ci-actions-node24-readiness/EXECUTION_PLAN.md +22 -0
- package/specs/quiver-v45-ci-actions-node24-readiness/SPEC.md +49 -0
- package/specs/quiver-v45-ci-actions-node24-readiness/STATUS.md +21 -0
- package/specs/quiver-v45-ci-actions-node24-readiness/pr.md +67 -0
- package/specs/quiver-v45-ci-actions-node24-readiness/slices/slice-00-ci-actions-foundation/CLOSURE_BRIEF.md +10 -0
- package/specs/quiver-v45-ci-actions-node24-readiness/slices/slice-00-ci-actions-foundation/EXECUTION_BRIEF.md +21 -0
- package/specs/quiver-v45-ci-actions-node24-readiness/slices/slice-00-ci-actions-foundation/slice.json +48 -0
- package/specs/quiver-v45-ci-actions-node24-readiness/slices/slice-01-actions-node24-readiness/CLOSURE_BRIEF.md +14 -0
- package/specs/quiver-v45-ci-actions-node24-readiness/slices/slice-01-actions-node24-readiness/EXECUTION_BRIEF.md +23 -0
- package/specs/quiver-v45-ci-actions-node24-readiness/slices/slice-01-actions-node24-readiness/slice.json +65 -0
- package/src/create-quiver/commands/ai.js +485 -307
- package/src/create-quiver/commands/config.js +124 -0
- package/src/create-quiver/commands/dashboard.js +31 -0
- package/src/create-quiver/commands/demo.js +2 -2
- package/src/create-quiver/commands/evidence.js +6 -4
- package/src/create-quiver/commands/flow.js +108 -16
- package/src/create-quiver/commands/graph.js +1 -0
- package/src/create-quiver/commands/next.js +21 -18
- package/src/create-quiver/commands/plan.js +23 -6
- package/src/create-quiver/commands/spec.js +66 -57
- package/src/create-quiver/index.js +606 -136
- package/src/create-quiver/lib/ai/execution-plan.js +23 -20
- package/src/create-quiver/lib/ai/executor.js +60 -44
- package/src/create-quiver/lib/ai/export-state.js +75 -64
- package/src/create-quiver/lib/ai/github.js +24 -21
- package/src/create-quiver/lib/ai/run-state.js +28 -25
- package/src/create-quiver/lib/cli/ux-flags.js +6 -0
- package/src/create-quiver/lib/dashboard.js +939 -0
- package/src/create-quiver/lib/demo.js +14 -12
- package/src/create-quiver/lib/handoff.js +16 -7
- package/src/create-quiver/lib/i18n/catalog.js +152 -0
- package/src/create-quiver/lib/i18n/language.js +279 -0
- package/src/create-quiver/lib/i18n/messages/en.js +853 -0
- package/src/create-quiver/lib/i18n/messages/es.js +968 -0
- package/src/create-quiver/lib/i18n/read-only-format.js +26 -0
- package/src/create-quiver/lib/i18n/templates.js +172 -0
- package/src/create-quiver/lib/init-docs.js +24 -4
- package/src/create-quiver/lib/init-layout.js +8 -0
- package/src/create-quiver/lib/lifecycle.js +53 -46
- package/src/create-quiver/lib/project-state-resolver.js +22 -2
- package/src/create-quiver/lib/readiness.js +77 -67
- package/src/create-quiver/lib/renderers/tree.js +9 -6
- package/src/create-quiver/lib/spec-worktrees.js +34 -30
- package/src/create-quiver/lib/version.js +159 -0
|
@@ -9,6 +9,7 @@ const {
|
|
|
9
9
|
} = require('../agent-profiles');
|
|
10
10
|
const { createUx } = require('../cli/ux');
|
|
11
11
|
const { branchDelete, runGit, statusPorcelain, worktreeAdd, worktreePrune, worktreeRemove } = require('../git');
|
|
12
|
+
const { createTranslator } = require('../i18n/catalog');
|
|
12
13
|
const { withLock } = require('../locks');
|
|
13
14
|
const { safeBranchName, worktreesRootForRepo } = require('../slice');
|
|
14
15
|
const { buildGraph, computeLevels, detectFileConflicts, isFoundationSliceId, readAllSlices, topoSort, SliceGraphError } = require('../slice-graph');
|
|
@@ -387,19 +388,20 @@ function formatHumanExecutionPlan(report) {
|
|
|
387
388
|
}
|
|
388
389
|
|
|
389
390
|
function formatExecutePlanDryRun(report, options = {}) {
|
|
391
|
+
const translator = createTranslator(options.language);
|
|
390
392
|
const provider = options.resolvedProvider || options.provider || 'codex';
|
|
391
393
|
const model = options.resolvedModel || options.model || '';
|
|
392
394
|
const commitEnabled = options.commit === true;
|
|
393
395
|
const executionMode = normalizeExecutionMode(options.mode || options.executionMode);
|
|
394
396
|
const lines = [
|
|
395
|
-
'
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
model ?
|
|
399
|
-
|
|
400
|
-
|
|
397
|
+
translator.t('execute_plan.title.dry_run'),
|
|
398
|
+
translator.t('execute_plan.execution_mode', { mode: executionMode }),
|
|
399
|
+
translator.t('execute_plan.provider', { provider }),
|
|
400
|
+
model ? translator.t('execute_plan.model', { model }) : '',
|
|
401
|
+
translator.t('execute_plan.commit_after_each_slice', { value: commitEnabled ? translator.t('execute_plan.enabled') : translator.t('execute_plan.disabled') }),
|
|
402
|
+
translator.t('execute_plan.total_slices', { count: report.summary.total_slices }),
|
|
401
403
|
'',
|
|
402
|
-
'
|
|
404
|
+
translator.t('execute_plan.waves'),
|
|
403
405
|
];
|
|
404
406
|
|
|
405
407
|
const commandForSlice = (slice) => {
|
|
@@ -423,18 +425,18 @@ function formatExecutePlanDryRun(report, options = {}) {
|
|
|
423
425
|
].join(' ');
|
|
424
426
|
|
|
425
427
|
for (const level of report.ready_levels) {
|
|
426
|
-
lines.push(
|
|
427
|
-
lines.push(
|
|
428
|
+
lines.push(translator.t('execute_plan.wave', { index: level.index, mode: level.parallel_ready ? 'parallel-ready' : 'sequential' }));
|
|
429
|
+
lines.push(translator.t('execute_plan.workspace_strategy', { strategy: level.worktree_strategy.mode }));
|
|
428
430
|
if (level.fallback_reason) {
|
|
429
|
-
lines.push(
|
|
431
|
+
lines.push(translator.t('execute_plan.fallback', { reason: level.fallback_reason }));
|
|
430
432
|
}
|
|
431
433
|
for (const group of level.execution_groups) {
|
|
432
|
-
lines.push(
|
|
434
|
+
lines.push(translator.t('execute_plan.group', { mode: group.mode }));
|
|
433
435
|
for (const ref of group.slice_refs) {
|
|
434
436
|
const slice = level.slices.find((item) => item.ref === ref);
|
|
435
|
-
lines.push(`-
|
|
437
|
+
lines.push(`- ${translator.t('execute_plan.prompt')}: ${promptCommandForSlice(slice)}`);
|
|
436
438
|
if (executionMode !== 'manual') {
|
|
437
|
-
lines.push(`
|
|
439
|
+
lines.push(` ${translator.t('execute_plan.execute')}: ${commandForSlice(slice)}`);
|
|
438
440
|
}
|
|
439
441
|
}
|
|
440
442
|
}
|
|
@@ -677,10 +679,11 @@ async function runExecutePlan(repoRoot, options = {}) {
|
|
|
677
679
|
const results = [];
|
|
678
680
|
const ux = createCommandUx(options);
|
|
679
681
|
const showProgress = shouldShowHumanProgress(ux, options);
|
|
682
|
+
const translator = createTranslator(options.language);
|
|
680
683
|
if (showProgress) {
|
|
681
|
-
ux.heading(
|
|
682
|
-
ux.check(
|
|
683
|
-
ux.check(
|
|
684
|
+
ux.heading(translator.t('execute_plan.progress.title', { profile: runtimeProfile.displayName }));
|
|
685
|
+
ux.check(translator.t('execute_plan.progress.plan_loaded', { count: report.summary.total_slices }));
|
|
686
|
+
ux.check(translator.t('execute_plan.progress.mode', { mode: executionMode }));
|
|
684
687
|
}
|
|
685
688
|
|
|
686
689
|
for (const level of report.ready_levels) {
|
|
@@ -689,9 +692,9 @@ async function runExecutePlan(repoRoot, options = {}) {
|
|
|
689
692
|
const groupResults = await runWithProgress({
|
|
690
693
|
ux,
|
|
691
694
|
enabled: showProgress,
|
|
692
|
-
message:
|
|
693
|
-
successMessage:
|
|
694
|
-
failureMessage:
|
|
695
|
+
message: translator.t('execute_plan.progress.running_wave', { index: level.index, refs: group.slice_refs.join(', ') }),
|
|
696
|
+
successMessage: translator.t('execute_plan.progress.wave_completed', { index: level.index }),
|
|
697
|
+
failureMessage: translator.t('execute_plan.progress.wave_failed', { index: level.index }),
|
|
695
698
|
run: () => (executionMode === 'delegated' && group.mode === 'parallel' && group.slice_refs.length > 1
|
|
696
699
|
? runParallelGroupInWorktrees(repoRoot, level, group, resolvedOptions)
|
|
697
700
|
: runSequentialGroup(repoRoot, level, group, resolvedOptions)),
|
|
@@ -707,7 +710,7 @@ async function runExecutePlan(repoRoot, options = {}) {
|
|
|
707
710
|
}
|
|
708
711
|
}
|
|
709
712
|
|
|
710
|
-
process.stdout.write(
|
|
713
|
+
process.stdout.write(`${translator.t('execute_plan.title.completed')}\n${translator.t('execute_plan.slices_executed', { count: results.length })}\n`);
|
|
711
714
|
return { task: 'execute-plan', dryRun: false, report, results };
|
|
712
715
|
}
|
|
713
716
|
|
|
@@ -13,6 +13,7 @@ const {
|
|
|
13
13
|
} = require('../agent-profiles');
|
|
14
14
|
const { selectOption } = require('../cli/selectors');
|
|
15
15
|
const { createUx } = require('../cli/ux');
|
|
16
|
+
const { createTranslator } = require('../i18n/catalog');
|
|
16
17
|
const { currentBranch, runGit } = require('../git');
|
|
17
18
|
const { redactSecrets, truncateText } = require('../evidence');
|
|
18
19
|
const { captureWorktreeSnapshot, validateScopeSnapshot } = require('../scope');
|
|
@@ -136,8 +137,9 @@ async function resolveInteractiveExecutorProfile(repoRoot, role, options = {}) {
|
|
|
136
137
|
return options.executorProfile || '';
|
|
137
138
|
}
|
|
138
139
|
|
|
140
|
+
const translator = createTranslator(options.language);
|
|
139
141
|
const selected = await selectOption(
|
|
140
|
-
'
|
|
142
|
+
translator.t('execute_slice.prompt.select_executor'),
|
|
141
143
|
profiles.map((profile) => ({
|
|
142
144
|
label: resolveAgentProfileDisplayName(profile),
|
|
143
145
|
value: profile.id,
|
|
@@ -206,8 +208,9 @@ async function resolveInteractiveSliceInput(repoRoot, options = {}) {
|
|
|
206
208
|
throw new Error(formatError('no ready slices found for interactive execution. Run `npx create-quiver ai execute-plan --dry-run` to inspect dependencies and blockers.'));
|
|
207
209
|
}
|
|
208
210
|
|
|
211
|
+
const translator = createTranslator(options.language);
|
|
209
212
|
const selected = await selectOption(
|
|
210
|
-
'
|
|
213
|
+
translator.t('execute_slice.prompt.select_slice'),
|
|
211
214
|
optionsForSlices,
|
|
212
215
|
selectorOptions({
|
|
213
216
|
...options,
|
|
@@ -245,7 +248,9 @@ async function runWithProgress({ ux, enabled, message, successMessage, failureMe
|
|
|
245
248
|
});
|
|
246
249
|
}
|
|
247
250
|
|
|
248
|
-
async function runProviderWithProgress({ ux, enabled, run }) {
|
|
251
|
+
async function runProviderWithProgress({ ux, enabled, language, run }) {
|
|
252
|
+
const translator = createTranslator(language);
|
|
253
|
+
|
|
249
254
|
async function runAndFailOnProviderResult() {
|
|
250
255
|
const result = await run();
|
|
251
256
|
if (result && result.ok === false) {
|
|
@@ -260,9 +265,9 @@ async function runProviderWithProgress({ ux, enabled, run }) {
|
|
|
260
265
|
return runWithProgress({
|
|
261
266
|
ux,
|
|
262
267
|
enabled,
|
|
263
|
-
message: '
|
|
264
|
-
successMessage: '
|
|
265
|
-
failureMessage: '
|
|
268
|
+
message: translator.t('ai.planner.progress.running_agent'),
|
|
269
|
+
successMessage: translator.t('ai.planner.progress.agent_finished'),
|
|
270
|
+
failureMessage: translator.t('ai.planner.progress.agent_failed'),
|
|
266
271
|
run: runAndFailOnProviderResult,
|
|
267
272
|
});
|
|
268
273
|
}
|
|
@@ -582,58 +587,63 @@ function buildExecuteSliceContext({ repoRoot, slicePath, role, context }) {
|
|
|
582
587
|
};
|
|
583
588
|
}
|
|
584
589
|
|
|
585
|
-
function formatExecuteSliceDryRunReport({ provider, role, contextPack, slice, briefPath, invocation, validationCommands, allowedFiles, commitEnabled }) {
|
|
590
|
+
function formatExecuteSliceDryRunReport({ provider, role, contextPack, slice, briefPath, invocation, validationCommands, allowedFiles, commitEnabled }, options = {}) {
|
|
591
|
+
const translator = createTranslator(options.language);
|
|
586
592
|
const lines = [
|
|
587
|
-
'
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
593
|
+
translator.t('execute_slice.title.dry_run'),
|
|
594
|
+
translator.t('execute_slice.provider', { provider }),
|
|
595
|
+
translator.t('execute_slice.role', { role }),
|
|
596
|
+
translator.t('execute_slice.context_pack', { context: contextPack }),
|
|
597
|
+
translator.t('execute_slice.slice', { slice: slice.sliceId }),
|
|
598
|
+
translator.t('execute_slice.spec', { spec: slice.specSlug }),
|
|
599
|
+
translator.t('execute_slice.execution_brief', { path: briefPath }),
|
|
600
|
+
translator.t('execute_slice.command', { command: `${invocation.command} ${invocation.args.join(' ')}` }),
|
|
601
|
+
translator.t('execute_slice.timeout', { timeout: invocation.timeoutMs }),
|
|
602
|
+
translator.t('execute_slice.prompt_transport', { mode: invocation.promptTransport.mode }),
|
|
603
|
+
translator.t('execute_slice.prompt_length', { bytes: invocation.promptLength }),
|
|
604
|
+
translator.t('execute_slice.commit_after_validation', { value: commitEnabled ? translator.t('execute_slice.enabled') : translator.t('execute_slice.disabled') }),
|
|
599
605
|
];
|
|
600
606
|
if (invocation.modelSelection && invocation.modelSelection.model) {
|
|
601
|
-
lines.push(
|
|
602
|
-
lines.push(
|
|
607
|
+
lines.push(translator.t('execute_slice.model', { model: invocation.modelSelection.model }));
|
|
608
|
+
lines.push(translator.t('execute_slice.model_support', {
|
|
609
|
+
reason: invocation.modelSelection.reason,
|
|
610
|
+
status: invocation.modelSelection.supported ? translator.t('execute_slice.supported') : translator.t('execute_slice.unsupported'),
|
|
611
|
+
}));
|
|
603
612
|
}
|
|
604
613
|
lines.push(
|
|
605
|
-
'
|
|
614
|
+
translator.t('execute_slice.allowed_files'),
|
|
606
615
|
...formatList(allowedFiles),
|
|
607
|
-
'
|
|
616
|
+
translator.t('execute_slice.validation_commands'),
|
|
608
617
|
...formatList(validationCommands),
|
|
609
618
|
);
|
|
610
619
|
|
|
611
620
|
return `${lines.join('\n')}\n`;
|
|
612
621
|
}
|
|
613
622
|
|
|
614
|
-
function formatExecuteSliceResult({ slice, changedFiles, scopeResult, validationResults, commitResult, commitEnabled }) {
|
|
623
|
+
function formatExecuteSliceResult({ slice, changedFiles, scopeResult, validationResults, commitResult, commitEnabled }, options = {}) {
|
|
624
|
+
const translator = createTranslator(options.language);
|
|
615
625
|
const lines = [
|
|
616
|
-
'
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
626
|
+
translator.t('execute_slice.title.completed'),
|
|
627
|
+
translator.t('execute_slice.slice', { slice: slice.sliceId }),
|
|
628
|
+
translator.t('execute_slice.spec', { spec: slice.specSlug }),
|
|
629
|
+
translator.t('execute_slice.changed_files', { count: changedFiles.length }),
|
|
620
630
|
];
|
|
621
631
|
|
|
622
632
|
for (const file of changedFiles) {
|
|
623
633
|
lines.push(`- ${file}`);
|
|
624
634
|
}
|
|
625
635
|
|
|
626
|
-
lines.push(
|
|
636
|
+
lines.push(translator.t('execute_slice.scope_validation', { value: scopeResult.ok ? translator.t('execute_slice.passed') : translator.t('execute_slice.failed') }));
|
|
627
637
|
if (!Array.isArray(validationResults) || validationResults.length === 0) {
|
|
628
|
-
lines.push(
|
|
638
|
+
lines.push(translator.t('execute_slice.validation_skipped'));
|
|
629
639
|
} else {
|
|
630
|
-
lines.push(
|
|
640
|
+
lines.push(translator.t('execute_slice.validation_passed', { count: validationResults.length }));
|
|
631
641
|
}
|
|
632
642
|
if (commitResult) {
|
|
633
|
-
lines.push(
|
|
634
|
-
lines.push(
|
|
643
|
+
lines.push(translator.t('execute_slice.commit_created', { hash: commitResult.hash }));
|
|
644
|
+
lines.push(translator.t('execute_slice.commit_message', { message: commitResult.message }));
|
|
635
645
|
} else {
|
|
636
|
-
lines.push(
|
|
646
|
+
lines.push(translator.t('execute_slice.commit_status', { value: commitEnabled ? translator.t('execute_slice.not_created') : translator.t('execute_slice.skipped') }));
|
|
637
647
|
}
|
|
638
648
|
|
|
639
649
|
return `${lines.join('\n')}\n`;
|
|
@@ -993,7 +1003,7 @@ async function runExecuteSlice(repoRoot, options = {}) {
|
|
|
993
1003
|
validationCommands: executorContext.validationCommands,
|
|
994
1004
|
allowedFiles: executorContext.allowedFiles,
|
|
995
1005
|
commitEnabled: options.commit === true,
|
|
996
|
-
}));
|
|
1006
|
+
}, { language: options.language }));
|
|
997
1007
|
return report;
|
|
998
1008
|
}
|
|
999
1009
|
|
|
@@ -1013,11 +1023,16 @@ async function runExecuteSlice(repoRoot, options = {}) {
|
|
|
1013
1023
|
|
|
1014
1024
|
const ux = createCommandUx(options);
|
|
1015
1025
|
const showProgress = shouldShowHumanProgress(ux, options);
|
|
1026
|
+
const translator = createTranslator(options.language);
|
|
1016
1027
|
writeProgressChecks(
|
|
1017
1028
|
ux,
|
|
1018
1029
|
showProgress,
|
|
1019
|
-
|
|
1020
|
-
[
|
|
1030
|
+
translator.t('execute_slice.progress.title', { profile: runtimeProfile.displayName }),
|
|
1031
|
+
[
|
|
1032
|
+
translator.t('execute_slice.progress.reading_slice'),
|
|
1033
|
+
translator.t('execute_slice.progress.validating_worktree'),
|
|
1034
|
+
translator.t('execute_slice.progress.preparing_prompt'),
|
|
1035
|
+
],
|
|
1021
1036
|
);
|
|
1022
1037
|
|
|
1023
1038
|
let result;
|
|
@@ -1025,6 +1040,7 @@ async function runExecuteSlice(repoRoot, options = {}) {
|
|
|
1025
1040
|
result = await runProviderWithProgress({
|
|
1026
1041
|
ux,
|
|
1027
1042
|
enabled: showProgress,
|
|
1043
|
+
language: options.language,
|
|
1028
1044
|
run: () => (options.runProviderFn || runProvider)(provider, {
|
|
1029
1045
|
prompt,
|
|
1030
1046
|
cwd: canonicalRepoRoot,
|
|
@@ -1091,9 +1107,9 @@ async function runExecuteSlice(repoRoot, options = {}) {
|
|
|
1091
1107
|
validationResults = await runWithProgress({
|
|
1092
1108
|
ux,
|
|
1093
1109
|
enabled: showProgress && executorContext.validationCommands.length > 0,
|
|
1094
|
-
message: '
|
|
1095
|
-
successMessage: '
|
|
1096
|
-
failureMessage: '
|
|
1110
|
+
message: translator.t('execute_slice.progress.running_validations'),
|
|
1111
|
+
successMessage: translator.t('execute_slice.progress.validations_done'),
|
|
1112
|
+
failureMessage: translator.t('execute_slice.progress.validations_failed'),
|
|
1097
1113
|
run: () => runValidationCommands(
|
|
1098
1114
|
canonicalRepoRoot,
|
|
1099
1115
|
executorContext.validationCommands,
|
|
@@ -1130,9 +1146,9 @@ async function runExecuteSlice(repoRoot, options = {}) {
|
|
|
1130
1146
|
commitResult = await runWithProgress({
|
|
1131
1147
|
ux,
|
|
1132
1148
|
enabled: showProgress,
|
|
1133
|
-
message: '
|
|
1134
|
-
successMessage: '
|
|
1135
|
-
failureMessage: '
|
|
1149
|
+
message: translator.t('execute_slice.progress.creating_commit'),
|
|
1150
|
+
successMessage: translator.t('execute_slice.progress.commit_done'),
|
|
1151
|
+
failureMessage: translator.t('execute_slice.progress.commit_failed'),
|
|
1136
1152
|
run: () => commitSliceChanges(canonicalRepoRoot, executorContext.slice, finalScopeResult.changedFiles, {
|
|
1137
1153
|
message: options.commitMessage,
|
|
1138
1154
|
}),
|
|
@@ -1149,7 +1165,7 @@ async function runExecuteSlice(repoRoot, options = {}) {
|
|
|
1149
1165
|
validationResults,
|
|
1150
1166
|
commitResult,
|
|
1151
1167
|
commitEnabled: options.commit === true,
|
|
1152
|
-
}));
|
|
1168
|
+
}, { language: options.language }));
|
|
1153
1169
|
|
|
1154
1170
|
return {
|
|
1155
1171
|
task: 'execute-slice',
|
|
@@ -4,6 +4,7 @@ const path = require('node:path');
|
|
|
4
4
|
const { listAgentProfiles } = require('../agent-profiles');
|
|
5
5
|
const { PLANNER_APPROVAL_PHASES, readPhaseApproval } = require('../approvals');
|
|
6
6
|
const { collectLayoutReport } = require('../doctor');
|
|
7
|
+
const { formatStatus, translatorForHuman } = require('../i18n/read-only-format');
|
|
7
8
|
const {
|
|
8
9
|
collectActiveSliceState,
|
|
9
10
|
filterSlicesForExecution,
|
|
@@ -534,17 +535,23 @@ function collectLifecycleExport(projectRoot, options = {}) {
|
|
|
534
535
|
return exportData;
|
|
535
536
|
}
|
|
536
537
|
|
|
537
|
-
function formatLifecycleInspect(data) {
|
|
538
|
+
function formatLifecycleInspect(data, options = {}) {
|
|
539
|
+
const translator = translatorForHuman(options);
|
|
538
540
|
const lines = [
|
|
539
|
-
'
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
541
|
+
translator.t('ai.inspect.title'),
|
|
542
|
+
`${translator.t('ai.label.project')}: ${data.project.name}`,
|
|
543
|
+
`${translator.t('ai.label.specs')}: ${data.summary.specs}`,
|
|
544
|
+
`${translator.t('ai.inspect.slices_summary', {
|
|
545
|
+
total: data.summary.slices,
|
|
546
|
+
open: data.summary.open_slices,
|
|
547
|
+
blocked: data.summary.blocked_slices,
|
|
548
|
+
percent: data.summary.progress_percent,
|
|
549
|
+
})}`,
|
|
550
|
+
`${translator.t('ai.label.runs')}: ${data.summary.runs}`,
|
|
551
|
+
`${translator.t('ai.inspect.agents_configured')}: ${data.summary.configured_agents}/${data.agents.length}`,
|
|
552
|
+
`${translator.t('ai.label.layout')}: ${data.migration.layout}`,
|
|
546
553
|
'',
|
|
547
|
-
'
|
|
554
|
+
translator.t('ai.label.next_safe_commands'),
|
|
548
555
|
];
|
|
549
556
|
|
|
550
557
|
for (const step of data.next_steps || collectNextSteps(data)) {
|
|
@@ -554,14 +561,14 @@ function formatLifecycleInspect(data) {
|
|
|
554
561
|
if (data.active_slice) {
|
|
555
562
|
lines.push(
|
|
556
563
|
'',
|
|
557
|
-
'
|
|
558
|
-
`-
|
|
559
|
-
`-
|
|
564
|
+
translator.t('ai.inspect.active_slice_state'),
|
|
565
|
+
`- ${translator.t('ai.label.sources')}: ${data.active_slice.sources.length}`,
|
|
566
|
+
`- ${translator.t('ai.label.reconciliation')}: ${data.active_slice.reconciliation.decision} (${data.active_slice.reconciliation.reason})`,
|
|
560
567
|
);
|
|
561
568
|
}
|
|
562
569
|
|
|
563
570
|
if (data.dashboard.blockers.length > 0) {
|
|
564
|
-
lines.push('', '
|
|
571
|
+
lines.push('', translator.t('ai.label.blockers'));
|
|
565
572
|
for (const blocker of data.dashboard.blockers) {
|
|
566
573
|
lines.push(`- ${blocker.ref}: ${blocker.reason}`);
|
|
567
574
|
}
|
|
@@ -571,72 +578,75 @@ function formatLifecycleInspect(data) {
|
|
|
571
578
|
return `${lines.join('\n')}\n`;
|
|
572
579
|
}
|
|
573
580
|
|
|
574
|
-
function formatSpecsList(data) {
|
|
575
|
-
const
|
|
581
|
+
function formatSpecsList(data, options = {}) {
|
|
582
|
+
const translator = translatorForHuman(options);
|
|
583
|
+
const lines = [translator.t('ai.specs.title')];
|
|
576
584
|
|
|
577
585
|
if (data.specs.length === 0) {
|
|
578
|
-
lines.push('
|
|
586
|
+
lines.push(`- ${translator.t('ai.specs.empty')} ${translator.t('ai.label.next')}: npx create-quiver spec create --dry-run`);
|
|
579
587
|
lines.push('');
|
|
580
588
|
return `${lines.join('\n')}\n`;
|
|
581
589
|
}
|
|
582
590
|
|
|
583
591
|
for (const spec of data.specs) {
|
|
584
|
-
lines.push(`- ${spec.slug}: ${spec.status}, ${spec.progress.percent}% done, ${spec.progress.total}
|
|
592
|
+
lines.push(`- ${spec.slug}: ${formatStatus(spec.status, translator)}, ${spec.progress.percent}% ${translator.t('ai.label.done')}, ${translator.t('common.slice.count', { count: spec.progress.total })} (${spec.path})`);
|
|
585
593
|
}
|
|
586
594
|
|
|
587
595
|
lines.push('');
|
|
588
596
|
return `${lines.join('\n')}\n`;
|
|
589
597
|
}
|
|
590
598
|
|
|
591
|
-
function formatSlicesList(data) {
|
|
592
|
-
const
|
|
599
|
+
function formatSlicesList(data, options = {}) {
|
|
600
|
+
const translator = translatorForHuman(options);
|
|
601
|
+
const lines = [translator.t('ai.slices.title')];
|
|
593
602
|
|
|
594
603
|
if (data.slices.length === 0) {
|
|
595
|
-
lines.push('
|
|
604
|
+
lines.push(`- ${translator.t('ai.slices.empty')} ${translator.t('ai.label.next')}: npx create-quiver spec create --dry-run`);
|
|
596
605
|
lines.push('');
|
|
597
606
|
return `${lines.join('\n')}\n`;
|
|
598
607
|
}
|
|
599
608
|
|
|
600
609
|
for (const slice of data.slices) {
|
|
601
|
-
const deps = slice.dependencies.length > 0 ? ` deps=${slice.dependencies.join(',')}` : '';
|
|
602
|
-
const blocked = slice.blocked_reason ? ` blocked=${slice.blocked_reason}` : '';
|
|
603
|
-
lines.push(`- ${slice.ref}: ${slice.status}, ${slice.progress}% done${deps}${blocked}`);
|
|
610
|
+
const deps = slice.dependencies.length > 0 ? ` ${translator.t('ai.slices.deps')}=${slice.dependencies.join(',')}` : '';
|
|
611
|
+
const blocked = slice.blocked_reason ? ` ${translator.t('ai.slices.blocked')}=${slice.blocked_reason}` : '';
|
|
612
|
+
lines.push(`- ${slice.ref}: ${formatStatus(slice.status, translator)}, ${slice.progress}% ${translator.t('ai.label.done')}${deps}${blocked}`);
|
|
604
613
|
}
|
|
605
614
|
|
|
606
615
|
lines.push('');
|
|
607
616
|
return `${lines.join('\n')}\n`;
|
|
608
617
|
}
|
|
609
618
|
|
|
610
|
-
function formatTraceReport(data) {
|
|
619
|
+
function formatTraceReport(data, options = {}) {
|
|
620
|
+
const translator = translatorForHuman(options);
|
|
611
621
|
const lines = [
|
|
612
|
-
'
|
|
613
|
-
|
|
614
|
-
|
|
622
|
+
translator.t('ai.trace.title'),
|
|
623
|
+
`${translator.t('ai.label.project')}: ${data.project.name}`,
|
|
624
|
+
`${translator.t('ai.label.schema')}: ${data.schema_version}`,
|
|
615
625
|
'',
|
|
616
|
-
'
|
|
626
|
+
translator.t('ai.label.runs'),
|
|
617
627
|
];
|
|
618
628
|
|
|
619
629
|
if (data.runs.length === 0) {
|
|
620
|
-
lines.push('
|
|
630
|
+
lines.push(`- ${translator.t('common.none')}`);
|
|
621
631
|
} else {
|
|
622
632
|
for (const run of data.runs) {
|
|
623
|
-
lines.push(`- ${run.run_id}: ${run.phase} (${run.status}) -> ${run.next_command}`);
|
|
633
|
+
lines.push(`- ${run.run_id}: ${run.phase} (${formatStatus(run.status, translator)}) -> ${run.next_command}`);
|
|
624
634
|
}
|
|
625
635
|
}
|
|
626
636
|
|
|
627
|
-
lines.push('', '
|
|
637
|
+
lines.push('', translator.t('ai.trace.execution_waves'));
|
|
628
638
|
if (!data.graph.ok) {
|
|
629
|
-
lines.push(`-
|
|
639
|
+
lines.push(`- ${translator.t('ai.trace.graph_error')}: ${data.graph.error.message}`);
|
|
630
640
|
} else if (data.graph.levels.length === 0) {
|
|
631
|
-
lines.push('
|
|
641
|
+
lines.push(`- ${translator.t('common.none')}`);
|
|
632
642
|
} else {
|
|
633
643
|
for (const level of data.graph.levels) {
|
|
634
|
-
lines.push(`- wave ${level.level}: ${level.slices.join(', ')}`);
|
|
644
|
+
lines.push(`- ${translator.t('ai.trace.wave')} ${level.level}: ${level.slices.join(', ')}`);
|
|
635
645
|
}
|
|
636
646
|
}
|
|
637
647
|
|
|
638
|
-
lines.push('', '
|
|
639
|
-
lines.push(`- layout: ${data.migration.layout}`);
|
|
648
|
+
lines.push('', translator.t('ai.trace.migration'));
|
|
649
|
+
lines.push(`- ${translator.t('ai.label.layout').toLowerCase()}: ${data.migration.layout}`);
|
|
640
650
|
for (const recommendation of data.migration.recommendations) {
|
|
641
651
|
lines.push(`- ${recommendation}`);
|
|
642
652
|
}
|
|
@@ -645,71 +655,72 @@ function formatTraceReport(data) {
|
|
|
645
655
|
return `${lines.join('\n')}\n`;
|
|
646
656
|
}
|
|
647
657
|
|
|
648
|
-
function formatLifecycleExportMarkdown(data) {
|
|
658
|
+
function formatLifecycleExportMarkdown(data, options = {}) {
|
|
659
|
+
const translator = translatorForHuman(options);
|
|
649
660
|
const lines = [
|
|
650
|
-
|
|
661
|
+
`# ${translator.t('ai.export_markdown.title')}`,
|
|
651
662
|
'',
|
|
652
|
-
`-
|
|
653
|
-
`-
|
|
654
|
-
`-
|
|
655
|
-
`-
|
|
656
|
-
`-
|
|
657
|
-
`-
|
|
658
|
-
`-
|
|
663
|
+
`- ${translator.t('ai.label.project')}: ${data.project.name}`,
|
|
664
|
+
`- ${translator.t('ai.export_markdown.generated')}: ${data.generated_at}`,
|
|
665
|
+
`- ${translator.t('ai.export_markdown.schema_version')}: ${data.schema_version}`,
|
|
666
|
+
`- ${translator.t('ai.label.specs')}: ${data.summary.specs}`,
|
|
667
|
+
`- ${translator.t('ai.label.slices')}: ${data.summary.slices} ${translator.t('ai.label.total')}, ${data.summary.completed_slices} ${translator.t('status.completed')}, ${data.summary.open_slices} ${translator.t('status.open')}`,
|
|
668
|
+
`- ${translator.t('ai.label.progress')}: ${data.summary.progress_percent}%`,
|
|
669
|
+
`- ${translator.t('ai.label.layout')}: ${data.migration.layout}`,
|
|
659
670
|
'',
|
|
660
|
-
|
|
671
|
+
`## ${translator.t('ai.label.specs')}`,
|
|
661
672
|
'',
|
|
662
673
|
];
|
|
663
674
|
|
|
664
675
|
if (data.specs.length === 0) {
|
|
665
|
-
lines.push('
|
|
676
|
+
lines.push(translator.t('ai.specs.empty_sentence'));
|
|
666
677
|
} else {
|
|
667
|
-
lines.push('
|
|
678
|
+
lines.push(`| ${translator.t('ai.table.spec')} | ${translator.t('ai.table.status')} | ${translator.t('ai.table.progress')} | ${translator.t('ai.table.slices')} | ${translator.t('ai.table.path')} |`);
|
|
668
679
|
lines.push('|---|---|---:|---:|---|');
|
|
669
680
|
for (const spec of data.specs) {
|
|
670
|
-
lines.push(`| ${spec.slug} | ${spec.status} | ${spec.progress.percent}% | ${spec.progress.total} | ${spec.path} |`);
|
|
681
|
+
lines.push(`| ${spec.slug} | ${formatStatus(spec.status, translator)} | ${spec.progress.percent}% | ${spec.progress.total} | ${spec.path} |`);
|
|
671
682
|
}
|
|
672
683
|
}
|
|
673
684
|
|
|
674
|
-
lines.push('',
|
|
685
|
+
lines.push('', `## ${translator.t('ai.label.slices')}`, '');
|
|
675
686
|
if (data.slices.length === 0) {
|
|
676
|
-
lines.push('
|
|
687
|
+
lines.push(translator.t('ai.slices.empty_sentence'));
|
|
677
688
|
} else {
|
|
678
|
-
lines.push('
|
|
689
|
+
lines.push(`| ${translator.t('ai.table.slice')} | ${translator.t('ai.table.status')} | ${translator.t('ai.table.progress')} | ${translator.t('ai.table.dependencies')} | ${translator.t('ai.table.write_scope')} |`);
|
|
679
690
|
lines.push('|---|---|---:|---|---|');
|
|
680
691
|
for (const slice of data.slices) {
|
|
681
|
-
lines.push(`| ${slice.ref} | ${slice.status} | ${slice.progress}% | ${slice.dependencies.join(', ') || '-'} | ${slice.allowed_write_paths.join(', ') || slice.files.join(', ') || '-'} |`);
|
|
692
|
+
lines.push(`| ${slice.ref} | ${formatStatus(slice.status, translator)} | ${slice.progress}% | ${slice.dependencies.join(', ') || '-'} | ${slice.allowed_write_paths.join(', ') || slice.files.join(', ') || '-'} |`);
|
|
682
693
|
}
|
|
683
694
|
}
|
|
684
695
|
|
|
685
|
-
lines.push('',
|
|
696
|
+
lines.push('', `## ${translator.t('ai.label.agents')}`, '');
|
|
686
697
|
if (data.agents.length === 0) {
|
|
687
|
-
lines.push('
|
|
698
|
+
lines.push(translator.t('ai.agents.empty_sentence'));
|
|
688
699
|
} else {
|
|
689
|
-
lines.push('
|
|
700
|
+
lines.push(`| ${translator.t('ai.table.role')} | ${translator.t('ai.table.configured')} | ${translator.t('ai.table.provider')} | ${translator.t('ai.table.model')} |`);
|
|
690
701
|
lines.push('|---|---|---|---|');
|
|
691
702
|
for (const agent of data.agents) {
|
|
692
|
-
lines.push(`| ${agent.role} | ${agent.configured ? 'yes' : 'no'} | ${agent.provider || '-'} | ${agent.model || '-'} |`);
|
|
703
|
+
lines.push(`| ${agent.role} | ${agent.configured ? translator.t('common.yes') : translator.t('common.no')} | ${agent.provider || '-'} | ${agent.model || '-'} |`);
|
|
693
704
|
}
|
|
694
705
|
}
|
|
695
706
|
|
|
696
|
-
lines.push('',
|
|
707
|
+
lines.push('', `## ${translator.t('ai.label.runs')}`, '');
|
|
697
708
|
if (data.runs.length === 0) {
|
|
698
|
-
lines.push('
|
|
709
|
+
lines.push(translator.t('ai.runs.empty_sentence'));
|
|
699
710
|
} else {
|
|
700
|
-
lines.push('
|
|
711
|
+
lines.push(`| ${translator.t('ai.table.run')} | ${translator.t('ai.table.phase')} | ${translator.t('ai.table.status')} | ${translator.t('ai.table.next_command')} |`);
|
|
701
712
|
lines.push('|---|---|---|---|');
|
|
702
713
|
for (const run of data.runs) {
|
|
703
|
-
lines.push(`| ${run.run_id} | ${run.phase} | ${run.status} | \`${run.next_command}\` |`);
|
|
714
|
+
lines.push(`| ${run.run_id} | ${run.phase} | ${formatStatus(run.status, translator)} | \`${run.next_command}\` |`);
|
|
704
715
|
}
|
|
705
716
|
}
|
|
706
717
|
|
|
707
|
-
lines.push('',
|
|
708
|
-
lines.push(`-
|
|
718
|
+
lines.push('', `## ${translator.t('ai.trace.migration')}`, '');
|
|
719
|
+
lines.push(`- ${translator.t('ai.label.layout')}: ${data.migration.layout}`);
|
|
709
720
|
for (const recommendation of data.migration.recommendations) {
|
|
710
721
|
lines.push(`- ${recommendation}`);
|
|
711
722
|
}
|
|
712
|
-
lines.push(`-
|
|
723
|
+
lines.push(`- ${translator.t('ai.export_markdown.dry_run')}: \`${data.migration.dry_run_command}\``);
|
|
713
724
|
lines.push('');
|
|
714
725
|
|
|
715
726
|
return `${lines.join('\n')}\n`;
|