@opengsd/gsd-core 1.2.0 → 1.3.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/README.ja-JP.md +46 -791
- package/README.ko-KR.md +44 -780
- package/README.md +42 -218
- package/README.pt-BR.md +47 -414
- package/README.zh-CN.md +46 -763
- package/agents/gsd-ai-researcher.md +2 -2
- package/agents/gsd-debug-session-manager.md +1 -1
- package/agents/gsd-debugger.md +8 -8
- package/agents/gsd-doc-writer.md +7 -6
- package/agents/gsd-domain-researcher.md +15 -2
- package/agents/gsd-eval-auditor.md +1 -1
- package/agents/gsd-eval-planner.md +2 -2
- package/agents/gsd-executor.md +21 -8
- package/agents/gsd-framework-selector.md +1 -1
- package/agents/gsd-intel-updater.md +4 -4
- package/agents/gsd-phase-researcher.md +19 -6
- package/agents/gsd-plan-checker.md +3 -3
- package/agents/gsd-planner.md +36 -23
- package/agents/gsd-project-researcher.md +13 -0
- package/agents/gsd-research-synthesizer.md +6 -2
- package/agents/gsd-roadmapper.md +6 -6
- package/agents/gsd-ui-researcher.md +16 -3
- package/agents/gsd-user-profiler.md +2 -2
- package/agents/gsd-verifier.md +8 -8
- package/assets/gsd-logo-2000-transparent.png +0 -0
- package/assets/gsd-logo-2000-transparent.svg +17 -0
- package/assets/gsd-logo-2000.png +0 -0
- package/assets/gsd-logo-2000.svg +21 -0
- package/assets/terminal.svg +68 -0
- package/bin/install.js +255 -103
- package/commands/gsd/add-tests.md +1 -1
- package/commands/gsd/ai-integration-phase.md +3 -3
- package/commands/gsd/audit-fix.md +1 -1
- package/commands/gsd/audit-milestone.md +1 -1
- package/commands/gsd/audit-uat.md +1 -1
- package/commands/gsd/autonomous.md +2 -2
- package/commands/gsd/capture.md +6 -6
- package/commands/gsd/cleanup.md +1 -1
- package/commands/gsd/code-review.md +1 -1
- package/commands/gsd/complete-milestone.md +2 -2
- package/commands/gsd/config.md +3 -3
- package/commands/gsd/debug.md +1 -1
- package/commands/gsd/discuss-phase.md +5 -4
- package/commands/gsd/docs-update.md +1 -1
- package/commands/gsd/eval-review.md +2 -2
- package/commands/gsd/execute-phase.md +2 -2
- package/commands/gsd/explore.md +1 -1
- package/commands/gsd/extract-learnings.md +2 -2
- package/commands/gsd/fast.md +1 -1
- package/commands/gsd/forensics.md +1 -1
- package/commands/gsd/graphify.md +9 -9
- package/commands/gsd/health.md +1 -1
- package/commands/gsd/help.md +2 -2
- package/commands/gsd/import.md +5 -5
- package/commands/gsd/inbox.md +1 -1
- package/commands/gsd/ingest-docs.md +4 -4
- package/commands/gsd/manager.md +3 -3
- package/commands/gsd/map-codebase.md +1 -1
- package/commands/gsd/milestone-summary.md +1 -1
- package/commands/gsd/mvp-phase.md +4 -4
- package/commands/gsd/new-milestone.md +5 -5
- package/commands/gsd/new-project.md +5 -5
- package/commands/gsd/pause-work.md +2 -2
- package/commands/gsd/phase.md +4 -4
- package/commands/gsd/plan-phase.md +2 -2
- package/commands/gsd/plan-review-convergence.md +4 -4
- package/commands/gsd/pr-branch.md +1 -1
- package/commands/gsd/profile-user.md +2 -2
- package/commands/gsd/progress.md +4 -4
- package/commands/gsd/quick.md +1 -1
- package/commands/gsd/resume-work.md +1 -1
- package/commands/gsd/review.md +3 -2
- package/commands/gsd/secure-phase.md +1 -1
- package/commands/gsd/settings.md +1 -1
- package/commands/gsd/ship.md +2 -2
- package/commands/gsd/sketch.md +7 -7
- package/commands/gsd/spec-phase.md +2 -2
- package/commands/gsd/spike.md +3 -3
- package/commands/gsd/stats.md +1 -1
- package/commands/gsd/surface.md +4 -4
- package/commands/gsd/thread.md +1 -1
- package/commands/gsd/ui-phase.md +2 -2
- package/commands/gsd/ui-review.md +2 -2
- package/commands/gsd/ultraplan-phase.md +2 -2
- package/commands/gsd/undo.md +3 -3
- package/commands/gsd/update.md +3 -3
- package/commands/gsd/validate-phase.md +1 -1
- package/commands/gsd/verify-work.md +2 -2
- package/commands/gsd/workspace.md +4 -4
- package/{get-shit-done → gsd-core}/bin/check-latest-version.cjs +1 -1
- package/{get-shit-done → gsd-core}/bin/gsd-tools.cjs +50 -4
- package/gsd-core/bin/lib/active-workstream-store.cjs +291 -0
- package/gsd-core/bin/lib/adr-parser.cjs +399 -0
- package/gsd-core/bin/lib/agent-command-router.cjs +68 -0
- package/gsd-core/bin/lib/artifacts.cjs +51 -0
- package/gsd-core/bin/lib/audit.cjs +743 -0
- package/gsd-core/bin/lib/check-command-router.cjs +342 -0
- package/gsd-core/bin/lib/cjs-command-router-adapter.cjs +81 -0
- package/gsd-core/bin/lib/clock.cjs +95 -0
- package/gsd-core/bin/lib/clusters.cjs +128 -0
- package/gsd-core/bin/lib/code-review-flags.cjs +59 -0
- package/gsd-core/bin/lib/command-aliases.cjs +809 -0
- package/gsd-core/bin/lib/command-arg-projection.cjs +55 -0
- package/gsd-core/bin/lib/command-routing-hub.cjs +300 -0
- package/gsd-core/bin/lib/commands.cjs +1202 -0
- package/gsd-core/bin/lib/config-schema.cjs +29 -0
- package/gsd-core/bin/lib/config-types.cjs +19 -0
- package/gsd-core/bin/lib/config.cjs +714 -0
- package/{get-shit-done → gsd-core}/bin/lib/configuration.cjs +76 -85
- package/gsd-core/bin/lib/context-utilization.cjs +48 -0
- package/gsd-core/bin/lib/core.cjs +2007 -0
- package/{get-shit-done → gsd-core}/bin/lib/decisions.cjs +9 -7
- package/gsd-core/bin/lib/docs.cjs +252 -0
- package/gsd-core/bin/lib/drift.cjs +364 -0
- package/gsd-core/bin/lib/fallow-runner.cjs +115 -0
- package/gsd-core/bin/lib/frontmatter.cjs +442 -0
- package/gsd-core/bin/lib/gap-checker.cjs +257 -0
- package/gsd-core/bin/lib/graphify.cjs +496 -0
- package/gsd-core/bin/lib/gsd2-import.cjs +456 -0
- package/gsd-core/bin/lib/init-command-router.cjs +62 -0
- package/gsd-core/bin/lib/init.cjs +1799 -0
- package/gsd-core/bin/lib/install-profiles.cjs +526 -0
- package/gsd-core/bin/lib/installer-migration-authoring.cjs +122 -0
- package/gsd-core/bin/lib/installer-migration-report.cjs +347 -0
- package/gsd-core/bin/lib/installer-migrations/000-first-time-baseline.cjs +218 -0
- package/gsd-core/bin/lib/installer-migrations/001-legacy-orphan-files.cjs +48 -0
- package/gsd-core/bin/lib/installer-migrations/002-codex-legacy-hooks-json.cjs +94 -0
- package/gsd-core/bin/lib/installer-migrations/003-rename-get-shit-done-to-gsd-core.cjs +108 -0
- package/gsd-core/bin/lib/installer-migrations.cjs +784 -0
- package/gsd-core/bin/lib/intel.cjs +607 -0
- package/gsd-core/bin/lib/learnings.cjs +270 -0
- package/gsd-core/bin/lib/legacy-cleanup.cjs +253 -0
- package/gsd-core/bin/lib/milestone.cjs +373 -0
- package/gsd-core/bin/lib/model-catalog.cjs +154 -0
- package/gsd-core/bin/lib/model-profiles.cjs +24 -0
- package/gsd-core/bin/lib/observability/event.cjs +51 -0
- package/gsd-core/bin/lib/observability/logger.cjs +146 -0
- package/{get-shit-done → gsd-core}/bin/lib/observability/redaction.cjs +19 -21
- package/{get-shit-done → gsd-core}/bin/lib/package-identity.cjs +5 -1
- package/gsd-core/bin/lib/phase-command-router.cjs +189 -0
- package/gsd-core/bin/lib/phase-lifecycle.cjs +74 -0
- package/gsd-core/bin/lib/phase.cjs +1307 -0
- package/gsd-core/bin/lib/phases-command-router.cjs +43 -0
- package/{get-shit-done → gsd-core}/bin/lib/plan-scan.cjs +18 -24
- package/gsd-core/bin/lib/planning-workspace.cjs +245 -0
- package/gsd-core/bin/lib/profile-output.cjs +1120 -0
- package/gsd-core/bin/lib/profile-pipeline.cjs +517 -0
- package/gsd-core/bin/lib/project-root.cjs +119 -0
- package/gsd-core/bin/lib/prompt-budget.cjs +305 -0
- package/gsd-core/bin/lib/review-reviewer-selection.cjs +121 -0
- package/gsd-core/bin/lib/roadmap-command-router.cjs +166 -0
- package/gsd-core/bin/lib/roadmap-upgrade.cjs +491 -0
- package/gsd-core/bin/lib/roadmap.cjs +600 -0
- package/gsd-core/bin/lib/runtime-artifact-layout.cjs +254 -0
- package/gsd-core/bin/lib/runtime-homes.cjs +169 -0
- package/gsd-core/bin/lib/runtime-name-policy.cjs +96 -0
- package/gsd-core/bin/lib/runtime-slash.cjs +119 -0
- package/{get-shit-done → gsd-core}/bin/lib/schema-detect.cjs +20 -26
- package/gsd-core/bin/lib/secrets.cjs +34 -0
- package/gsd-core/bin/lib/security.cjs +407 -0
- package/gsd-core/bin/lib/semver-compare.cjs +42 -0
- package/gsd-core/bin/lib/shell-command-projection.cjs +524 -0
- package/gsd-core/bin/lib/state-command-router.cjs +160 -0
- package/{get-shit-done → gsd-core}/bin/lib/state-document.cjs +78 -82
- package/gsd-core/bin/lib/state.cjs +2010 -0
- package/gsd-core/bin/lib/surface.cjs +406 -0
- package/gsd-core/bin/lib/task-command-router.cjs +85 -0
- package/gsd-core/bin/lib/template.cjs +237 -0
- package/gsd-core/bin/lib/uat.cjs +297 -0
- package/gsd-core/bin/lib/ui-safety-gate.cjs +98 -0
- package/gsd-core/bin/lib/update-context.cjs +218 -0
- package/gsd-core/bin/lib/validate-command-router.cjs +91 -0
- package/gsd-core/bin/lib/validate.cjs +112 -0
- package/gsd-core/bin/lib/verify-command-router.cjs +44 -0
- package/gsd-core/bin/lib/verify.cjs +1451 -0
- package/{get-shit-done → gsd-core}/bin/lib/workstream-inventory-builder.cjs +19 -12
- package/gsd-core/bin/lib/workstream-inventory.cjs +147 -0
- package/{get-shit-done → gsd-core}/bin/lib/workstream-name-policy.cjs +28 -31
- package/gsd-core/bin/lib/workstream.cjs +380 -0
- package/gsd-core/bin/lib/worktree-safety.cjs +912 -0
- package/{get-shit-done → gsd-core}/bin/shared/config-defaults.manifest.json +1 -0
- package/{get-shit-done → gsd-core}/bin/shared/config-schema.manifest.json +17 -1
- package/{get-shit-done → gsd-core}/bin/shared/model-catalog.json +27 -0
- package/{get-shit-done → gsd-core}/references/artifact-types.md +1 -1
- package/{get-shit-done → gsd-core}/references/checkpoints.md +1 -1
- package/{get-shit-done → gsd-core}/references/few-shot-examples/plan-checker.md +2 -2
- package/{get-shit-done → gsd-core}/references/few-shot-examples/verifier.md +12 -12
- package/{get-shit-done → gsd-core}/references/model-profile-resolution.md +1 -1
- package/{get-shit-done → gsd-core}/references/mvp-concepts.md +1 -1
- package/{get-shit-done → gsd-core}/references/planner-graphify-auto-update.md +2 -2
- package/{get-shit-done → gsd-core}/references/planner-human-verify-mode.md +1 -1
- package/{get-shit-done → gsd-core}/references/planner-mvp-mode.md +1 -1
- package/{get-shit-done → gsd-core}/references/ui-brand.md +4 -2
- package/{get-shit-done → gsd-core}/references/verification-patterns.md +1 -1
- package/gsd-core/references/worktree-branch-check.md +38 -0
- package/{get-shit-done → gsd-core}/references/worktree-path-safety.md +4 -26
- package/{get-shit-done → gsd-core}/templates/README.md +2 -2
- package/{get-shit-done → gsd-core}/templates/codebase/structure.md +10 -10
- package/{get-shit-done → gsd-core}/templates/copilot-instructions.md +1 -1
- package/{get-shit-done → gsd-core}/templates/phase-prompt.md +10 -10
- package/gsd-core/workflows/_runtime-launcher.snippet.sh +1 -0
- package/{get-shit-done → gsd-core}/workflows/add-backlog.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/add-phase.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/add-tests.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/add-todo.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/ai-integration-phase.md +4 -4
- package/{get-shit-done → gsd-core}/workflows/audit-fix.md +2 -2
- package/{get-shit-done → gsd-core}/workflows/audit-milestone.md +3 -1
- package/{get-shit-done → gsd-core}/workflows/audit-uat.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/autonomous.md +10 -8
- package/{get-shit-done → gsd-core}/workflows/check-todos.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/cleanup.md +44 -4
- package/{get-shit-done → gsd-core}/workflows/code-review-fix.md +4 -4
- package/{get-shit-done → gsd-core}/workflows/code-review.md +6 -4
- package/{get-shit-done → gsd-core}/workflows/complete-milestone.md +2 -2
- package/{get-shit-done → gsd-core}/workflows/debug.md +7 -2
- package/{get-shit-done → gsd-core}/workflows/diagnose-issues.md +6 -2
- package/{get-shit-done → gsd-core}/workflows/discovery-phase.md +5 -5
- package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/advisor.md +5 -5
- package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/auto.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/chain.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/power.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/discuss-phase-assumptions.md +4 -4
- package/{get-shit-done → gsd-core}/workflows/discuss-phase.md +6 -6
- package/{get-shit-done → gsd-core}/workflows/do.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/docs-update.md +19 -5
- package/{get-shit-done → gsd-core}/workflows/edit-phase.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/eval-review.md +3 -3
- package/{get-shit-done → gsd-core}/workflows/execute-phase/steps/codebase-drift-gate.md +16 -3
- package/{get-shit-done → gsd-core}/workflows/execute-phase/steps/post-merge-gate.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/execute-phase.md +89 -57
- package/{get-shit-done → gsd-core}/workflows/execute-plan.md +8 -8
- package/{get-shit-done → gsd-core}/workflows/explore.md +5 -3
- package/{get-shit-done → gsd-core}/workflows/extract-learnings.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/forensics.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/graduation.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/health.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/help/modes/default.md +3 -3
- package/{get-shit-done → gsd-core}/workflows/help/modes/full.md +6 -6
- package/{get-shit-done → gsd-core}/workflows/import.md +3 -1
- package/{get-shit-done → gsd-core}/workflows/ingest-docs.md +5 -5
- package/{get-shit-done → gsd-core}/workflows/insert-phase.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/list-workspaces.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/manager.md +3 -3
- package/{get-shit-done → gsd-core}/workflows/map-codebase.md +3 -1
- package/{get-shit-done → gsd-core}/workflows/milestone-summary.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/mvp-phase.md +7 -7
- package/{get-shit-done → gsd-core}/workflows/new-milestone.md +5 -5
- package/{get-shit-done → gsd-core}/workflows/new-project.md +8 -8
- package/{get-shit-done → gsd-core}/workflows/new-workspace.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/next.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/pause-work.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/plan-milestone-gaps.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/plan-phase.md +29 -28
- package/{get-shit-done → gsd-core}/workflows/plan-review-convergence.md +10 -10
- package/{get-shit-done → gsd-core}/workflows/plant-seed.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/profile-user.md +11 -11
- package/{get-shit-done → gsd-core}/workflows/progress.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/quick.md +7 -29
- package/{get-shit-done → gsd-core}/workflows/reapply-patches.md +2 -2
- package/{get-shit-done → gsd-core}/workflows/remove-phase.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/remove-workspace.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/resume-project.md +2 -2
- package/{get-shit-done → gsd-core}/workflows/review.md +110 -2
- package/{get-shit-done → gsd-core}/workflows/scan.md +3 -1
- package/{get-shit-done → gsd-core}/workflows/secure-phase.md +5 -3
- package/{get-shit-done → gsd-core}/workflows/settings-advanced.md +196 -6
- package/{get-shit-done → gsd-core}/workflows/settings-integrations.md +2 -2
- package/{get-shit-done → gsd-core}/workflows/settings.md +16 -2
- package/{get-shit-done → gsd-core}/workflows/ship.md +56 -4
- package/{get-shit-done → gsd-core}/workflows/sketch-wrap-up.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/sketch.md +5 -5
- package/{get-shit-done → gsd-core}/workflows/spec-phase.md +2 -2
- package/{get-shit-done → gsd-core}/workflows/spike-wrap-up.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/spike.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/stats.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/sync-skills.md +3 -3
- package/{get-shit-done → gsd-core}/workflows/thread.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/transition.md +2 -2
- package/{get-shit-done → gsd-core}/workflows/ui-phase.md +5 -5
- package/{get-shit-done → gsd-core}/workflows/ui-review.md +3 -3
- package/{get-shit-done → gsd-core}/workflows/ultraplan-phase.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/undo.md +2 -2
- package/{get-shit-done → gsd-core}/workflows/update.md +41 -16
- package/{get-shit-done → gsd-core}/workflows/validate-phase.md +5 -3
- package/{get-shit-done → gsd-core}/workflows/verify-phase.md +4 -4
- package/{get-shit-done → gsd-core}/workflows/verify-work.md +7 -7
- package/hooks/dist/gsd-check-update-worker.js +16 -3
- package/hooks/dist/gsd-check-update.js +7 -5
- package/hooks/dist/gsd-context-monitor.js +2 -2
- package/hooks/dist/gsd-statusline.js +39 -21
- package/hooks/dist/gsd-update-banner.js +6 -2
- package/hooks/dist/gsd-worktree-path-guard.js +169 -0
- package/hooks/dist/managed-hooks-registry.cjs +35 -0
- package/hooks/gsd-check-update-worker.js +16 -3
- package/hooks/gsd-check-update.js +7 -5
- package/hooks/gsd-context-monitor.js +2 -2
- package/hooks/gsd-statusline.js +39 -21
- package/hooks/gsd-update-banner.js +6 -2
- package/hooks/gsd-worktree-path-guard.js +169 -0
- package/hooks/managed-hooks-registry.cjs +1 -0
- package/package.json +17 -11
- package/scripts/affected-tests-lib.cjs +1 -1
- package/scripts/base64-scan.sh +12 -0
- package/scripts/build-hooks.js +5 -1
- package/scripts/changeset/cli.cjs +2 -2
- package/scripts/changeset/github-release-notes.cjs +1 -1
- package/scripts/changeset/lint.cjs +1 -1
- package/scripts/check-alias-drift.cjs +8 -8
- package/scripts/check-env.cjs +5 -1
- package/scripts/ci-test-scope.cjs +34 -9
- package/scripts/command-contract-helpers.cjs +1 -1
- package/scripts/fix-slash-commands.cjs +5 -5
- package/scripts/gen-inventory-manifest.cjs +3 -3
- package/scripts/generate-package-identity.cjs +28 -7
- package/scripts/lib/allowlist-ratchet.cjs +136 -0
- package/scripts/lint-command-contract.cjs +1 -1
- package/scripts/lint-legacy-dir-name.cjs +156 -0
- package/scripts/lint-package-identity-drift.cjs +8 -8
- package/scripts/lint-pr-check-project-dir.cjs +0 -1
- package/scripts/lint-shell-command-projection-drift.cjs +1 -1
- package/scripts/lint-skill-deps.cjs +1 -1
- package/scripts/lint-test-file-count.allowlist.json +129 -32
- package/scripts/lint-test-file-count.cjs +85 -30
- package/scripts/mutation-matrix.cjs +219 -0
- package/scripts/prompt-injection-scan.sh +5 -1
- package/scripts/release-notes/format-github-release-notes.cjs +256 -0
- package/scripts/release-tarball-smoke.cjs +9 -9
- package/scripts/run-tests.cjs +34 -2
- package/scripts/strip-prose-atrefs.cjs +2 -2
- package/scripts/sync-runtime-launcher.cjs +2 -2
- package/scripts/verify-npm-publish.cjs +252 -0
- package/get-shit-done/bin/lib/active-workstream-store.cjs +0 -302
- package/get-shit-done/bin/lib/adr-parser.cjs +0 -394
- package/get-shit-done/bin/lib/agent-command-router.cjs +0 -65
- package/get-shit-done/bin/lib/artifacts.cjs +0 -53
- package/get-shit-done/bin/lib/audit.cjs +0 -755
- package/get-shit-done/bin/lib/check-command-router.cjs +0 -333
- package/get-shit-done/bin/lib/cjs-command-router-adapter.cjs +0 -118
- package/get-shit-done/bin/lib/clock.cjs +0 -96
- package/get-shit-done/bin/lib/clusters.cjs +0 -135
- package/get-shit-done/bin/lib/code-review-flags.cjs +0 -74
- package/get-shit-done/bin/lib/command-aliases.cjs +0 -815
- package/get-shit-done/bin/lib/command-arg-projection.cjs +0 -62
- package/get-shit-done/bin/lib/command-routing-hub.cjs +0 -388
- package/get-shit-done/bin/lib/commands.cjs +0 -1188
- package/get-shit-done/bin/lib/config-schema.cjs +0 -31
- package/get-shit-done/bin/lib/config.cjs +0 -728
- package/get-shit-done/bin/lib/context-utilization.cjs +0 -47
- package/get-shit-done/bin/lib/core.cjs +0 -2121
- package/get-shit-done/bin/lib/docs.cjs +0 -270
- package/get-shit-done/bin/lib/drift.cjs +0 -388
- package/get-shit-done/bin/lib/fallow-runner.cjs +0 -109
- package/get-shit-done/bin/lib/frontmatter.cjs +0 -389
- package/get-shit-done/bin/lib/gap-checker.cjs +0 -205
- package/get-shit-done/bin/lib/graphify.cjs +0 -592
- package/get-shit-done/bin/lib/gsd2-import.cjs +0 -514
- package/get-shit-done/bin/lib/init-command-router.cjs +0 -58
- package/get-shit-done/bin/lib/init.cjs +0 -2112
- package/get-shit-done/bin/lib/install-profiles.cjs +0 -603
- package/get-shit-done/bin/lib/installer-migration-authoring.cjs +0 -117
- package/get-shit-done/bin/lib/installer-migration-report.cjs +0 -354
- package/get-shit-done/bin/lib/installer-migrations/000-first-time-baseline.cjs +0 -220
- package/get-shit-done/bin/lib/installer-migrations/001-legacy-orphan-files.cjs +0 -41
- package/get-shit-done/bin/lib/installer-migrations/002-codex-legacy-hooks-json.cjs +0 -80
- package/get-shit-done/bin/lib/installer-migrations.cjs +0 -778
- package/get-shit-done/bin/lib/intel.cjs +0 -708
- package/get-shit-done/bin/lib/learnings.cjs +0 -421
- package/get-shit-done/bin/lib/milestone.cjs +0 -314
- package/get-shit-done/bin/lib/model-catalog.cjs +0 -212
- package/get-shit-done/bin/lib/model-profiles.cjs +0 -31
- package/get-shit-done/bin/lib/observability/event.cjs +0 -82
- package/get-shit-done/bin/lib/observability/logger.cjs +0 -174
- package/get-shit-done/bin/lib/phase-command-router.cjs +0 -191
- package/get-shit-done/bin/lib/phase-lifecycle.cjs +0 -80
- package/get-shit-done/bin/lib/phase.cjs +0 -1607
- package/get-shit-done/bin/lib/phases-command-router.cjs +0 -39
- package/get-shit-done/bin/lib/planning-workspace.cjs +0 -238
- package/get-shit-done/bin/lib/profile-output.cjs +0 -1141
- package/get-shit-done/bin/lib/profile-pipeline.cjs +0 -539
- package/get-shit-done/bin/lib/project-root.cjs +0 -112
- package/get-shit-done/bin/lib/prompt-budget.cjs +0 -399
- package/get-shit-done/bin/lib/review-reviewer-selection.cjs +0 -125
- package/get-shit-done/bin/lib/roadmap-command-router.cjs +0 -28
- package/get-shit-done/bin/lib/roadmap.cjs +0 -650
- package/get-shit-done/bin/lib/runtime-artifact-layout.cjs +0 -301
- package/get-shit-done/bin/lib/runtime-homes.cjs +0 -222
- package/get-shit-done/bin/lib/runtime-name-policy.cjs +0 -83
- package/get-shit-done/bin/lib/runtime-slash.cjs +0 -112
- package/get-shit-done/bin/lib/secrets.cjs +0 -32
- package/get-shit-done/bin/lib/security.cjs +0 -600
- package/get-shit-done/bin/lib/semver-compare.cjs +0 -35
- package/get-shit-done/bin/lib/shell-command-projection.cjs +0 -500
- package/get-shit-done/bin/lib/state-command-router.cjs +0 -252
- package/get-shit-done/bin/lib/state.cjs +0 -2038
- package/get-shit-done/bin/lib/surface.cjs +0 -470
- package/get-shit-done/bin/lib/task-command-router.cjs +0 -81
- package/get-shit-done/bin/lib/template.cjs +0 -228
- package/get-shit-done/bin/lib/uat.cjs +0 -289
- package/get-shit-done/bin/lib/update-context.cjs +0 -209
- package/get-shit-done/bin/lib/validate-command-router.cjs +0 -83
- package/get-shit-done/bin/lib/validate.cjs +0 -92
- package/get-shit-done/bin/lib/verify-command-router.cjs +0 -40
- package/get-shit-done/bin/lib/verify.cjs +0 -1511
- package/get-shit-done/bin/lib/workstream-inventory.cjs +0 -146
- package/get-shit-done/bin/lib/workstream.cjs +0 -389
- package/get-shit-done/bin/lib/worktree-safety.cjs +0 -985
- package/get-shit-done/workflows/_runtime-launcher.snippet.sh +0 -1
- package/scripts/lint-no-source-grep-extras.cjs +0 -81
- package/scripts/lint-no-source-grep.cjs +0 -174
- package/scripts/lint-shared-module-handsync.cjs +0 -388
- package/scripts/shared-module-handsync-allowlist.json +0 -183
- /package/{get-shit-done → gsd-core}/bin/shared/runtime-aliases.manifest.json +0 -0
- /package/{get-shit-done → gsd-core}/bin/verify-reapply-patches.cjs +0 -0
- /package/{get-shit-done → gsd-core}/contexts/dev.md +0 -0
- /package/{get-shit-done → gsd-core}/contexts/research.md +0 -0
- /package/{get-shit-done → gsd-core}/contexts/review.md +0 -0
- /package/{get-shit-done → gsd-core}/references/agent-contracts.md +0 -0
- /package/{get-shit-done → gsd-core}/references/ai-evals.md +0 -0
- /package/{get-shit-done → gsd-core}/references/ai-frameworks.md +0 -0
- /package/{get-shit-done → gsd-core}/references/autonomous-smart-discuss.md +0 -0
- /package/{get-shit-done → gsd-core}/references/common-bug-patterns.md +0 -0
- /package/{get-shit-done → gsd-core}/references/context-budget.md +0 -0
- /package/{get-shit-done → gsd-core}/references/continuation-format.md +0 -0
- /package/{get-shit-done → gsd-core}/references/debugger-philosophy.md +0 -0
- /package/{get-shit-done → gsd-core}/references/decimal-phase-calculation.md +0 -0
- /package/{get-shit-done → gsd-core}/references/doc-conflict-engine.md +0 -0
- /package/{get-shit-done → gsd-core}/references/domain-probes.md +0 -0
- /package/{get-shit-done → gsd-core}/references/execute-mvp-tdd.md +0 -0
- /package/{get-shit-done → gsd-core}/references/executor-examples.md +0 -0
- /package/{get-shit-done → gsd-core}/references/gate-prompts.md +0 -0
- /package/{get-shit-done → gsd-core}/references/gates.md +0 -0
- /package/{get-shit-done → gsd-core}/references/git-integration.md +0 -0
- /package/{get-shit-done → gsd-core}/references/git-planning-commit.md +0 -0
- /package/{get-shit-done → gsd-core}/references/ios-scaffold.md +0 -0
- /package/{get-shit-done → gsd-core}/references/mandatory-initial-read.md +0 -0
- /package/{get-shit-done → gsd-core}/references/model-profiles.md +0 -0
- /package/{get-shit-done → gsd-core}/references/phase-argument-parsing.md +0 -0
- /package/{get-shit-done → gsd-core}/references/planner-antipatterns.md +0 -0
- /package/{get-shit-done → gsd-core}/references/planner-chunked.md +0 -0
- /package/{get-shit-done → gsd-core}/references/planner-gap-closure.md +0 -0
- /package/{get-shit-done → gsd-core}/references/planner-interface-context.md +0 -0
- /package/{get-shit-done → gsd-core}/references/planner-reviews.md +0 -0
- /package/{get-shit-done → gsd-core}/references/planner-revision.md +0 -0
- /package/{get-shit-done → gsd-core}/references/planner-source-audit.md +0 -0
- /package/{get-shit-done → gsd-core}/references/planning-config.md +0 -0
- /package/{get-shit-done → gsd-core}/references/project-skills-discovery.md +0 -0
- /package/{get-shit-done → gsd-core}/references/questioning.md +0 -0
- /package/{get-shit-done → gsd-core}/references/revision-loop.md +0 -0
- /package/{get-shit-done → gsd-core}/references/scout-codebase.md +0 -0
- /package/{get-shit-done → gsd-core}/references/skeleton-template.md +0 -0
- /package/{get-shit-done → gsd-core}/references/sketch-interactivity.md +0 -0
- /package/{get-shit-done → gsd-core}/references/sketch-theme-system.md +0 -0
- /package/{get-shit-done → gsd-core}/references/sketch-tooling.md +0 -0
- /package/{get-shit-done → gsd-core}/references/sketch-variant-patterns.md +0 -0
- /package/{get-shit-done → gsd-core}/references/spidr-splitting.md +0 -0
- /package/{get-shit-done → gsd-core}/references/tdd.md +0 -0
- /package/{get-shit-done → gsd-core}/references/thinking-models-debug.md +0 -0
- /package/{get-shit-done → gsd-core}/references/thinking-models-execution.md +0 -0
- /package/{get-shit-done → gsd-core}/references/thinking-models-planning.md +0 -0
- /package/{get-shit-done → gsd-core}/references/thinking-models-research.md +0 -0
- /package/{get-shit-done → gsd-core}/references/thinking-models-verification.md +0 -0
- /package/{get-shit-done → gsd-core}/references/thinking-partner.md +0 -0
- /package/{get-shit-done → gsd-core}/references/universal-anti-patterns.md +0 -0
- /package/{get-shit-done → gsd-core}/references/user-profiling.md +0 -0
- /package/{get-shit-done → gsd-core}/references/user-story-template.md +0 -0
- /package/{get-shit-done → gsd-core}/references/verification-overrides.md +0 -0
- /package/{get-shit-done → gsd-core}/references/verify-mvp-mode.md +0 -0
- /package/{get-shit-done → gsd-core}/references/workstream-flag.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/AI-SPEC.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/DEBUG.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/SECURITY.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/UAT.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/UI-SPEC.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/VALIDATION.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/claude-md.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/codebase/architecture.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/codebase/concerns.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/codebase/conventions.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/codebase/integrations.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/codebase/stack.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/codebase/testing.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/config.json +0 -0
- /package/{get-shit-done → gsd-core}/templates/context.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/continue-here.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/debug-subagent-prompt.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/dev-preferences.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/discovery.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/discussion-log.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/milestone-archive.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/milestone.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/planner-subagent-prompt.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/project.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/requirements.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/research-project/ARCHITECTURE.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/research-project/FEATURES.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/research-project/PITFALLS.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/research-project/STACK.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/research-project/SUMMARY.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/research.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/retrospective.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/roadmap.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/spec.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/state.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/summary-complex.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/summary-minimal.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/summary-standard.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/summary.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/user-profile.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/user-setup.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/verification-report.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/analyze-dependencies.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/all.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/analyze.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/batch.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/default.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/text.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/discuss-phase/templates/checkpoint.json +0 -0
- /package/{get-shit-done → gsd-core}/workflows/discuss-phase/templates/context.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/discuss-phase/templates/discussion-log.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/discuss-phase-power.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/execute-phase/steps/per-plan-worktree-gate.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/fast.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/help/modes/brief.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/help/modes/topic.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/help.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/inbox.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/list-phase-assumptions.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/node-repair.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/note.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/pr-branch.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/session-report.md +0 -0
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* DispatchLogger interface + default implementation — issue #177 (ADR-0174 P1.3).
|
|
4
|
+
*
|
|
5
|
+
* Interface:
|
|
6
|
+
* { onEvent(event: DispatchEvent): void }
|
|
7
|
+
*
|
|
8
|
+
* Default behaviour (createDefaultLogger):
|
|
9
|
+
* 1. Silent on success — no stdout/stderr when result.kind === 'ok'.
|
|
10
|
+
* 2. Structured JSON to stderr on error — one line per dispatch error.
|
|
11
|
+
* 3. Opt-in audit file — when GSD_AUDIT=1 OR config.audit.enabled===true,
|
|
12
|
+
* appends every event (success + error) as one JSON line to
|
|
13
|
+
* .planning/.gsd-trace.jsonl relative to `cwd`. Creates .planning/ if absent.
|
|
14
|
+
* 4. Args redaction — args omitted by default; included when GSD_AUDIT_ARGS=1.
|
|
15
|
+
*
|
|
16
|
+
* No-op logger (createNoOpLogger):
|
|
17
|
+
* Silent on all events. Used as the Hub default when no logger is injected.
|
|
18
|
+
*
|
|
19
|
+
* ADR-457 build-at-publish: the hand-written bin/lib/observability/logger.cjs
|
|
20
|
+
* collapsed to a TypeScript source of truth. Behaviour is preserved
|
|
21
|
+
* byte-for-behaviour from the prior hand-written .cjs; only types are added.
|
|
22
|
+
*/
|
|
23
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
24
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
25
|
+
};
|
|
26
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
27
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
28
|
+
const redaction_cjs_1 = require("./redaction.cjs");
|
|
29
|
+
const AUDIT_FILE_NAME = '.gsd-trace.jsonl';
|
|
30
|
+
const PLANNING_DIR = '.planning';
|
|
31
|
+
// ─── helpers ─────────────────────────────────────────────────────────────────
|
|
32
|
+
/**
|
|
33
|
+
* Safely serialise a value to JSON, falling back to a placeholder on circular refs.
|
|
34
|
+
*/
|
|
35
|
+
function _safeStringify(value) {
|
|
36
|
+
try {
|
|
37
|
+
return JSON.stringify(value);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return JSON.stringify({ _serializationError: true });
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Determine whether the audit file should be written to.
|
|
45
|
+
*/
|
|
46
|
+
function _isAuditEnabled(config) {
|
|
47
|
+
if (process.env['GSD_AUDIT'] === '1')
|
|
48
|
+
return true;
|
|
49
|
+
if (config && config.audit && config.audit.enabled === true)
|
|
50
|
+
return true;
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Build the redacted plain object for the audit file.
|
|
55
|
+
* Preserves the full DispatchEvent structure.
|
|
56
|
+
*/
|
|
57
|
+
function _toAuditRecord(event) {
|
|
58
|
+
return (0, redaction_cjs_1.redactEvent)(event);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Build the flattened stderr error line.
|
|
62
|
+
*
|
|
63
|
+
* Per ADR-0174 P1.3 contract: { "kind": "<variant>", "traceId": "<uuid>", ...typedPayload }
|
|
64
|
+
* The result's kind is promoted to top-level and the typed payload fields are spread in.
|
|
65
|
+
* The `result` wrapper is removed.
|
|
66
|
+
*/
|
|
67
|
+
function _toStderrRecord(event) {
|
|
68
|
+
const redacted = (0, redaction_cjs_1.redactEvent)(event);
|
|
69
|
+
const { result, ...eventWithoutResult } = redacted;
|
|
70
|
+
// Flatten: top-level gets kind + typed payload fields from result
|
|
71
|
+
const resultObj = result;
|
|
72
|
+
const { kind, ...typedPayload } = resultObj;
|
|
73
|
+
return Object.assign({}, eventWithoutResult, { kind }, typedPayload);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Append one JSON line to the audit file.
|
|
77
|
+
* Creates .planning/ directory if it does not exist.
|
|
78
|
+
*
|
|
79
|
+
* Uses synchronous fs API (crash-safe for v1 — dispatch is synchronous).
|
|
80
|
+
*/
|
|
81
|
+
function _appendAuditLine(cwd, event) {
|
|
82
|
+
const planningDir = node_path_1.default.join(cwd, PLANNING_DIR);
|
|
83
|
+
// Ensure the directory exists
|
|
84
|
+
if (!node_fs_1.default.existsSync(planningDir)) {
|
|
85
|
+
node_fs_1.default.mkdirSync(planningDir, { recursive: true });
|
|
86
|
+
}
|
|
87
|
+
const auditPath = node_path_1.default.join(planningDir, AUDIT_FILE_NAME);
|
|
88
|
+
node_fs_1.default.appendFileSync(auditPath, _safeStringify(event) + '\n', 'utf8');
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Create a no-op logger. All events are silently dropped.
|
|
92
|
+
* This is the Hub's default when no logger is injected by the caller.
|
|
93
|
+
*/
|
|
94
|
+
function createNoOpLogger() {
|
|
95
|
+
return {
|
|
96
|
+
onEvent(_event) {
|
|
97
|
+
// intentionally empty
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Create the default DispatchLogger.
|
|
103
|
+
*/
|
|
104
|
+
function createDefaultLogger({ cwd = process.cwd(), config } = {}) {
|
|
105
|
+
return {
|
|
106
|
+
/**
|
|
107
|
+
* @param event - A DispatchEvent from the Hub.
|
|
108
|
+
*/
|
|
109
|
+
onEvent(event) {
|
|
110
|
+
const resultObj = event && event['result'];
|
|
111
|
+
const isOk = resultObj && resultObj['kind'] === 'ok';
|
|
112
|
+
// ── Audit file (both ok and error) ────────────────────────────────────
|
|
113
|
+
if (_isAuditEnabled(config)) {
|
|
114
|
+
try {
|
|
115
|
+
const auditRecord = _toAuditRecord(event);
|
|
116
|
+
_appendAuditLine(cwd, auditRecord);
|
|
117
|
+
}
|
|
118
|
+
catch (auditErr) {
|
|
119
|
+
// Audit errors must not surface to callers
|
|
120
|
+
process.stderr.write(_safeStringify({
|
|
121
|
+
level: 'warn',
|
|
122
|
+
source: 'DispatchLogger',
|
|
123
|
+
message: 'audit file write failed: ' + String(auditErr?.message ?? auditErr),
|
|
124
|
+
}) + '\n');
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
// ── Stderr on error ───────────────────────────────────────────────────
|
|
128
|
+
if (!isOk) {
|
|
129
|
+
try {
|
|
130
|
+
const stderrRecord = _toStderrRecord(event);
|
|
131
|
+
process.stderr.write(_safeStringify(stderrRecord) + '\n');
|
|
132
|
+
}
|
|
133
|
+
catch (stderrErr) {
|
|
134
|
+
// Last-resort: we cannot throw from the logger
|
|
135
|
+
process.stderr.write(_safeStringify({
|
|
136
|
+
level: 'warn',
|
|
137
|
+
source: 'DispatchLogger',
|
|
138
|
+
message: 'stderr emit failed: ' + String(stderrErr?.message ?? stderrErr),
|
|
139
|
+
}) + '\n');
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// ── Silent on success (no else branch needed) ─────────────────────────
|
|
143
|
+
},
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
module.exports = { createDefaultLogger, createNoOpLogger };
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
"use strict";
|
|
3
2
|
/**
|
|
4
|
-
* Arg redaction policy — issue #177 (ADR-
|
|
3
|
+
* Arg redaction policy — issue #177 (ADR-457 build-at-publish: the
|
|
4
|
+
* hand-written bin/lib/observability/redaction.cjs collapsed to a TypeScript
|
|
5
|
+
* source of truth). Behaviour is preserved byte-for-behaviour from the prior
|
|
6
|
+
* hand-written .cjs; only types are added.
|
|
5
7
|
*
|
|
6
8
|
* Privacy default: args are OMITTED from every emitted event (both stderr
|
|
7
9
|
* and file audit). Opt-in: set GSD_AUDIT_ARGS=1 to include args verbatim.
|
|
@@ -10,18 +12,17 @@
|
|
|
10
12
|
* decisions are stateless reads of process.env at call time so that tests
|
|
11
13
|
* can toggle the env var without module-level caching issues.
|
|
12
14
|
*/
|
|
13
|
-
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.shouldIncludeArgs = shouldIncludeArgs;
|
|
17
|
+
exports.redactEvent = redactEvent;
|
|
14
18
|
/**
|
|
15
19
|
* Returns true when the caller has opted in to including args in events.
|
|
16
20
|
* Only GSD_AUDIT_ARGS === '1' enables inclusion; any other value (including
|
|
17
21
|
* empty string, 'true', 'yes') keeps the default of omitting args.
|
|
18
|
-
*
|
|
19
|
-
* @returns {boolean}
|
|
20
22
|
*/
|
|
21
23
|
function shouldIncludeArgs() {
|
|
22
|
-
|
|
24
|
+
return process.env.GSD_AUDIT_ARGS === '1';
|
|
23
25
|
}
|
|
24
|
-
|
|
25
26
|
/**
|
|
26
27
|
* Return a redacted copy of a DispatchEvent.
|
|
27
28
|
*
|
|
@@ -32,19 +33,16 @@ function shouldIncludeArgs() {
|
|
|
32
33
|
*
|
|
33
34
|
* The original event object is never mutated (it is frozen by makeDispatchEvent).
|
|
34
35
|
*
|
|
35
|
-
* @param
|
|
36
|
-
* @returns
|
|
36
|
+
* @param event - A DispatchEvent (frozen or plain).
|
|
37
|
+
* @returns A new plain object with the same fields, minus args when redacted.
|
|
37
38
|
*/
|
|
38
39
|
function redactEvent(event) {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
return rest;
|
|
40
|
+
if (shouldIncludeArgs()) {
|
|
41
|
+
// Include path: return a shallow copy with args preserved if present
|
|
42
|
+
const copy = Object.assign({}, event);
|
|
43
|
+
return copy;
|
|
44
|
+
}
|
|
45
|
+
// Exclude path: build a copy omitting `args`
|
|
46
|
+
const { args: _dropped, ...rest } = event;
|
|
47
|
+
return rest;
|
|
48
48
|
}
|
|
49
|
-
|
|
50
|
-
module.exports = { shouldIncludeArgs, redactEvent };
|
|
@@ -8,6 +8,8 @@ const binName = "gsd-core";
|
|
|
8
8
|
const repoSlug = "open-gsd/gsd-core";
|
|
9
9
|
const repoUrl = "https://github.com/open-gsd/gsd-core";
|
|
10
10
|
const changelogRawUrl = "https://raw.githubusercontent.com/open-gsd/gsd-core/main/CHANGELOG.md";
|
|
11
|
+
const cacheSlug = "opengsd-gsd-core";
|
|
12
|
+
const updateCacheFileName = "gsd-update-check-opengsd-gsd-core.json";
|
|
11
13
|
|
|
12
14
|
function formatManualInstall({ packageName, binName, scope, runtime } = {}) {
|
|
13
15
|
const runtimeFlag = runtime ? ` --${runtime}` : '';
|
|
@@ -21,11 +23,13 @@ function manualInstallCommand(opts = {}) {
|
|
|
21
23
|
module.exports = Object.freeze({
|
|
22
24
|
packageName,
|
|
23
25
|
// PACKAGE_NAME: back-compat alias for #516-era consumers. Baked here, so it
|
|
24
|
-
// survives the installed tree
|
|
26
|
+
// survives the installed tree's synthetic package.json (fixes the #378 undefined).
|
|
25
27
|
PACKAGE_NAME: packageName,
|
|
26
28
|
binName,
|
|
27
29
|
repoSlug,
|
|
28
30
|
repoUrl,
|
|
29
31
|
changelogRawUrl,
|
|
32
|
+
cacheSlug,
|
|
33
|
+
updateCacheFileName,
|
|
30
34
|
manualInstallCommand,
|
|
31
35
|
});
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Manifest-backed phase subcommand router.
|
|
4
|
+
* Keeps gsd-tools.cjs thin while preserving existing command semantics.
|
|
5
|
+
*
|
|
6
|
+
* Unsupported in this router:
|
|
7
|
+
* - scaffold: routed through top-level scaffold command.
|
|
8
|
+
*
|
|
9
|
+
* CJS-only subcommands: mvp-mode (dispatched directly, before hub).
|
|
10
|
+
*
|
|
11
|
+
* #3788: dispatch is mediated by CommandRoutingHub. The public entry point
|
|
12
|
+
* and observable CLI behaviour are unchanged.
|
|
13
|
+
*
|
|
14
|
+
* ADR-457 build-at-publish: the hand-written bin/lib/phase-command-router.cjs
|
|
15
|
+
* collapsed to a TypeScript source of truth. Behaviour is preserved byte-for-behaviour
|
|
16
|
+
* from the prior hand-written .cjs; only types are added.
|
|
17
|
+
*/
|
|
18
|
+
const command_aliases_cjs_1 = require("./command-aliases.cjs");
|
|
19
|
+
// ─── CommandRoutingHub (issue #3788, simplified in #175, typed in #176) ───────
|
|
20
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
21
|
+
const commandRoutingHub = require("./command-routing-hub.cjs");
|
|
22
|
+
const { createHub, ERROR_KINDS, makeInvalidArgs } = commandRoutingHub;
|
|
23
|
+
// ─── Implementation ───────────────────────────────────────────────────────────
|
|
24
|
+
function routePhaseCommand({ phase, args, cwd, raw, error }) {
|
|
25
|
+
// ── Unsupported subcommands ─────────────────────────────────────────────────
|
|
26
|
+
// Resolved before dispatch so the error message stays deterministic.
|
|
27
|
+
const UNSUPPORTED = {
|
|
28
|
+
scaffold: 'phase scaffold is routed through the top-level scaffold command.',
|
|
29
|
+
};
|
|
30
|
+
const subcommand = args[1];
|
|
31
|
+
if (subcommand && UNSUPPORTED[subcommand]) {
|
|
32
|
+
error(UNSUPPORTED[subcommand]);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
// ── No subcommand → reject early with helpful error ────────────────────────
|
|
36
|
+
// Pre-#3788 code resolved unknown subcommands via routeCjsCommandFamily which
|
|
37
|
+
// fell through to error() when no handler matched (including undefined).
|
|
38
|
+
// Post-#3788 the hub's manifest check is skipped for falsy subcommand, so we
|
|
39
|
+
// must guard here to preserve the deterministic "Available: ..." error message.
|
|
40
|
+
if (!subcommand) {
|
|
41
|
+
const available = command_aliases_cjs_1.PHASE_SUBCOMMANDS.filter(s => !UNSUPPORTED[s]).join(', ');
|
|
42
|
+
error(`Unknown phase subcommand. Available: ${available}`);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
// ── CJS-only subcommands (dispatched directly, before hub) ─────────────────
|
|
46
|
+
// `mvp-mode` has a CJS-native implementation in phase.cmdPhaseMvpMode that
|
|
47
|
+
// differs from the SDK query layer (different ROADMAP scan + error codes).
|
|
48
|
+
// Dispatch it early to preserve pre-migration observable behaviour (correct
|
|
49
|
+
// exit code, correct JSON error reason code, correct ROADMAP scan).
|
|
50
|
+
if (subcommand === 'mvp-mode') {
|
|
51
|
+
phase.cmdPhaseMvpMode(cwd, args.slice(2), raw);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
// ── Build the CJS registry ──────────────────────────────────────────────────
|
|
55
|
+
// Each handler receives a ctx object from the hub and must return a HubResult.
|
|
56
|
+
const cjsRegistry = {
|
|
57
|
+
phase: {
|
|
58
|
+
'next-decimal': (_ctx) => {
|
|
59
|
+
phase.cmdPhaseNextDecimal(cwd, args[2], raw);
|
|
60
|
+
return { ok: true, data: null };
|
|
61
|
+
},
|
|
62
|
+
add: (_ctx) => {
|
|
63
|
+
let customId = null;
|
|
64
|
+
const descArgs = [];
|
|
65
|
+
for (let i = 2; i < args.length; i++) {
|
|
66
|
+
const token = args[i];
|
|
67
|
+
if (token === '--raw') {
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
if (token === '--id') {
|
|
71
|
+
const id = args[i + 1];
|
|
72
|
+
if (!id || id.startsWith('--')) {
|
|
73
|
+
return makeInvalidArgs('--id', '--id requires a value');
|
|
74
|
+
}
|
|
75
|
+
customId = id;
|
|
76
|
+
i++;
|
|
77
|
+
}
|
|
78
|
+
else if (token.startsWith('--')) {
|
|
79
|
+
return makeInvalidArgs(token, `phase add does not support ${token}`);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
descArgs.push(token);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
phase.cmdPhaseAdd(cwd, descArgs.join(' '), raw, customId);
|
|
86
|
+
return { ok: true, data: null };
|
|
87
|
+
},
|
|
88
|
+
'add-batch': (_ctx) => {
|
|
89
|
+
const descFlagIdx = args.indexOf('--descriptions');
|
|
90
|
+
let descriptions;
|
|
91
|
+
if (descFlagIdx !== -1) {
|
|
92
|
+
const rawDescriptions = args[descFlagIdx + 1];
|
|
93
|
+
if (!rawDescriptions || rawDescriptions.startsWith('--')) {
|
|
94
|
+
return makeInvalidArgs('--descriptions', '--descriptions must be a JSON array');
|
|
95
|
+
}
|
|
96
|
+
try {
|
|
97
|
+
descriptions = JSON.parse(rawDescriptions);
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
return makeInvalidArgs('--descriptions', '--descriptions must be a JSON array');
|
|
101
|
+
}
|
|
102
|
+
if (!Array.isArray(descriptions)) {
|
|
103
|
+
return makeInvalidArgs('--descriptions', '--descriptions must be a JSON array');
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
descriptions = args.slice(2).filter(a => a !== '--raw');
|
|
108
|
+
}
|
|
109
|
+
phase.cmdPhaseAddBatch(cwd, descriptions, raw);
|
|
110
|
+
return { ok: true, data: null };
|
|
111
|
+
},
|
|
112
|
+
insert: (_ctx) => {
|
|
113
|
+
if (args.includes('--dry-run')) {
|
|
114
|
+
return makeInvalidArgs('--dry-run', 'phase insert does not support --dry-run');
|
|
115
|
+
}
|
|
116
|
+
phase.cmdPhaseInsert(cwd, args[2], args.slice(3).join(' '), raw);
|
|
117
|
+
return { ok: true, data: null };
|
|
118
|
+
},
|
|
119
|
+
remove: (_ctx) => {
|
|
120
|
+
const removeArgs = args.slice(2).filter(token => token !== '--raw');
|
|
121
|
+
let forceFlag = false;
|
|
122
|
+
const positional = [];
|
|
123
|
+
for (const token of removeArgs) {
|
|
124
|
+
if (token === '--force') {
|
|
125
|
+
forceFlag = true;
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
if (token.startsWith('--')) {
|
|
129
|
+
return makeInvalidArgs(token, `phase remove does not support ${token}`);
|
|
130
|
+
}
|
|
131
|
+
positional.push(token);
|
|
132
|
+
}
|
|
133
|
+
if (positional.length !== 1) {
|
|
134
|
+
return makeInvalidArgs('<phase-number>', 'phase remove accepts exactly one phase number');
|
|
135
|
+
}
|
|
136
|
+
phase.cmdPhaseRemove(cwd, positional[0], { force: forceFlag }, raw);
|
|
137
|
+
return { ok: true, data: null };
|
|
138
|
+
},
|
|
139
|
+
complete: (_ctx) => {
|
|
140
|
+
phase.cmdPhaseComplete(cwd, args[2], raw);
|
|
141
|
+
return { ok: true, data: null };
|
|
142
|
+
},
|
|
143
|
+
},
|
|
144
|
+
};
|
|
145
|
+
// ── Build manifest (available subcommands for UnknownCommand detection) ─────
|
|
146
|
+
// `availableSubcommands` is what the error message shows. It excludes
|
|
147
|
+
// unsupported commands (already handled above) but does NOT include 'mvp-mode'
|
|
148
|
+
// because it was absent from PHASE_SUBCOMMANDS in the original and was not
|
|
149
|
+
// shown in the "Available:" list there either.
|
|
150
|
+
//
|
|
151
|
+
// `manifestSubcommands` is the full routing set for the hub — it includes
|
|
152
|
+
// 'mvp-mode' (which the original code routed via a handler even without a
|
|
153
|
+
// manifest entry) so the hub's UnknownCommand check passes for it.
|
|
154
|
+
const availableSubcommands = command_aliases_cjs_1.PHASE_SUBCOMMANDS.filter(s => !UNSUPPORTED[s]);
|
|
155
|
+
const manifestSubcommands = ['mvp-mode', ...availableSubcommands];
|
|
156
|
+
const manifest = { phase: manifestSubcommands };
|
|
157
|
+
// ── Construct hub ──────────────────────────────────────────────────────────
|
|
158
|
+
// #175: Hub is CJS-only — no mode param, no sdkLoader.
|
|
159
|
+
const hub = createHub({ cjsRegistry, manifest });
|
|
160
|
+
// ── Dispatch ────────────────────────────────────────────────────────────────
|
|
161
|
+
const result = hub.dispatch({
|
|
162
|
+
family: 'phase',
|
|
163
|
+
subcommand,
|
|
164
|
+
args: args.slice(2),
|
|
165
|
+
cwd,
|
|
166
|
+
raw,
|
|
167
|
+
});
|
|
168
|
+
// ── Translate result → CLI output / error (adapter responsibility) ──────────
|
|
169
|
+
// CJS handlers call output() themselves (inside phase.cmdPhase*()).
|
|
170
|
+
// No further output call is needed here.
|
|
171
|
+
if (!result.ok) {
|
|
172
|
+
if (result.kind === ERROR_KINDS.UnknownCommand) {
|
|
173
|
+
const available = availableSubcommands.join(', ');
|
|
174
|
+
error(`Unknown phase subcommand. Available: ${available}`);
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
if (result.kind === ERROR_KINDS.InvalidArgs || result.kind === ERROR_KINDS.HandlerRefusal) {
|
|
178
|
+
// #176: typed payload — reason holds the human-readable message
|
|
179
|
+
error(result.reason);
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
// HandlerFailure: message field
|
|
183
|
+
error(result.message);
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
module.exports = {
|
|
188
|
+
routePhaseCommand,
|
|
189
|
+
};
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Phase Lifecycle Pure Helpers — pure-computation functions extracted from
|
|
4
|
+
* the phase-lifecycle SDK handler (ADR-457 build-at-publish: the hand-written
|
|
5
|
+
* bin/lib/phase-lifecycle.cjs collapsed to a TypeScript source of truth).
|
|
6
|
+
* Behaviour is preserved byte-for-behaviour from the prior hand-written .cjs;
|
|
7
|
+
* only types are added.
|
|
8
|
+
*
|
|
9
|
+
* I/O adapter pattern (ADR-3524 Section 4): each side supplies its own I/O
|
|
10
|
+
* (sync readFileSync for CJS, async readFile for SDK); the pure computation
|
|
11
|
+
* logic is shared via this generated artifact.
|
|
12
|
+
*
|
|
13
|
+
* Scope:
|
|
14
|
+
* - deriveProgressFromRoadmap(roadmapContent): count Complete rows => idempotent
|
|
15
|
+
* - clampPercent(completed, total): percent with 100 ceiling
|
|
16
|
+
*
|
|
17
|
+
* These two functions are the root-cause fix for issue #4.
|
|
18
|
+
*
|
|
19
|
+
* References:
|
|
20
|
+
* - ADR-3524 (docs/adr/3524-cjs-sdk-hard-seam.md)
|
|
21
|
+
* - Issue #4 (open-gsd/gsd-core)
|
|
22
|
+
*/
|
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
exports.deriveProgressFromRoadmap = deriveProgressFromRoadmap;
|
|
25
|
+
exports.clampPercent = clampPercent;
|
|
26
|
+
/**
|
|
27
|
+
* Derive completed_phases, total_phases, and total_plans from ROADMAP content.
|
|
28
|
+
* Root cause fix for issue #4 — see gen-phase-lifecycle.mjs for full documentation.
|
|
29
|
+
*/
|
|
30
|
+
function deriveProgressFromRoadmap(roadmapContent) {
|
|
31
|
+
let completedPhases = null;
|
|
32
|
+
let totalPhases = null;
|
|
33
|
+
let totalPlans = null;
|
|
34
|
+
try {
|
|
35
|
+
// Count Complete rows in the progress table (Status column = "Complete").
|
|
36
|
+
// Pattern: row where the phase cell starts with a digit (data row, not header),
|
|
37
|
+
// followed by any cell content, then a "Complete" status cell.
|
|
38
|
+
// Handles both short form ("| 4. |") and long form ("| 01. Foundation |").
|
|
39
|
+
// See phase-lifecycle.ts ~line 1655 for the original SDK pattern.
|
|
40
|
+
const tableCompletePattern = /\|\s*\d+[^|]*\|\s*[^|]*\|\s*Complete\s*\|/gi;
|
|
41
|
+
const completeMatches = roadmapContent.match(tableCompletePattern);
|
|
42
|
+
completedPhases = completeMatches ? completeMatches.length : null;
|
|
43
|
+
// Count total phase rows in the progress table.
|
|
44
|
+
// Identify the table by looking for Phase|...|Status|...|Completed header.
|
|
45
|
+
const progressTableMatch = roadmapContent.match(/\|\s*Phase\s*\|[^|]*\|[^|]*Status[^|]*\|[^|]*Completed[^|]*\|[\s\S]*?(?=\n\n|\n##|$)/i);
|
|
46
|
+
if (progressTableMatch) {
|
|
47
|
+
const tableText = progressTableMatch[0];
|
|
48
|
+
// Count data rows (rows starting with pipe then a phase number)
|
|
49
|
+
const dataRowPattern = /^\|\s*\d+/gm;
|
|
50
|
+
const dataRows = tableText.match(dataRowPattern);
|
|
51
|
+
totalPhases = dataRows ? dataRows.length : null;
|
|
52
|
+
}
|
|
53
|
+
// Sum plan counts from M/N columns in progress table
|
|
54
|
+
let totalPlansSum = 0;
|
|
55
|
+
const planCellPattern = /\|\s*\d+[^|]*\|\s*(\d+)\/(\d+)\s*\|/gi;
|
|
56
|
+
let pm;
|
|
57
|
+
while ((pm = planCellPattern.exec(roadmapContent)) !== null) {
|
|
58
|
+
totalPlansSum += parseInt(pm[2], 10);
|
|
59
|
+
}
|
|
60
|
+
if (totalPlansSum > 0)
|
|
61
|
+
totalPlans = totalPlansSum;
|
|
62
|
+
}
|
|
63
|
+
catch { /* intentionally empty — fall through to existing values */ }
|
|
64
|
+
return { completedPhases, totalPhases, totalPlans };
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Compute progress percent clamped to 100.
|
|
68
|
+
* Root cause fix for issue #4 — see gen-phase-lifecycle.mjs for full documentation.
|
|
69
|
+
*/
|
|
70
|
+
function clampPercent(completed, total) {
|
|
71
|
+
if (!total || total <= 0)
|
|
72
|
+
return 0;
|
|
73
|
+
return Math.min(100, Math.round((completed / total) * 100));
|
|
74
|
+
}
|