coding-agent-harness 1.0.1 → 1.0.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/CHANGELOG.md +44 -0
- package/CONTRIBUTING.md +98 -0
- package/README.en-US.md +14 -0
- package/README.md +230 -80
- package/README.zh-CN.md +290 -0
- package/SKILL.md +132 -198
- package/docs-release/README.md +80 -9
- package/docs-release/architecture/overview.md +298 -28
- package/docs-release/architecture/overview.zh-CN.md +292 -0
- package/docs-release/assets/dashboard-overview.png +0 -0
- package/docs-release/assets/harness-architecture.svg +163 -0
- package/docs-release/assets/harness-workflow.svg +64 -0
- package/docs-release/guides/agent-installation.en-US.md +237 -0
- package/docs-release/guides/agent-installation.md +149 -27
- package/docs-release/guides/contributing.md +100 -0
- package/docs-release/guides/contributing.zh-CN.md +99 -0
- package/docs-release/guides/document-audience-and-surfaces.en-US.md +113 -0
- package/docs-release/guides/document-audience-and-surfaces.md +113 -0
- package/docs-release/guides/full-legacy-migration-subagent-strategy.md +334 -0
- package/docs-release/guides/full-legacy-migration-subagent-strategy.zh-CN.md +334 -0
- package/docs-release/guides/legacy-migration-agent-prompt.md +373 -0
- package/docs-release/guides/legacy-migration-agent-prompt.zh-CN.md +350 -0
- package/docs-release/guides/migration-playbook.en-US.md +324 -0
- package/docs-release/guides/migration-playbook.md +328 -0
- package/docs-release/guides/parent-control-repository-pattern.en-US.md +254 -0
- package/docs-release/guides/parent-control-repository-pattern.md +254 -0
- package/docs-release/guides/preset-development.md +214 -0
- package/docs-release/guides/repository-operating-models.en-US.md +197 -0
- package/docs-release/guides/repository-operating-models.md +197 -0
- package/docs-release/guides/task-state-machine.en-US.md +207 -0
- package/docs-release/guides/task-state-machine.md +214 -0
- package/docs-release/intl/README.md +15 -0
- package/docs-release/intl/de-DE.md +18 -0
- package/docs-release/intl/en-US.md +18 -0
- package/docs-release/intl/es-ES.md +18 -0
- package/docs-release/intl/fr-FR.md +18 -0
- package/docs-release/intl/ja-JP.md +18 -0
- package/docs-release/intl/ko-KR.md +18 -0
- package/docs-release/intl/zh-CN.md +18 -0
- package/examples/minimal-project/docs/09-PLANNING/TASKS/demo-task/brief.md +13 -0
- package/examples/minimal-project/docs/09-PLANNING/TASKS/demo-task/findings.md +7 -0
- package/examples/minimal-project/docs/09-PLANNING/TASKS/demo-task/lesson_candidates.md +24 -0
- package/examples/minimal-project/docs/09-PLANNING/TASKS/demo-task/progress.md +1 -1
- package/examples/minimal-project/docs/09-PLANNING/TASKS/demo-task/task_plan.md +4 -2
- package/examples/minimal-project/docs/09-PLANNING/TASKS/demo-task/{visual_roadmap.md → visual_map.md} +9 -1
- package/package.json +10 -3
- package/presets/legacy-migration/checks/preset-check.mjs +3 -0
- package/presets/legacy-migration/preset.yaml +134 -0
- package/presets/legacy-migration/scripts/plan-work-queue.mjs +4 -0
- package/presets/legacy-migration/scripts/scaffold-task-contracts.mjs +4 -0
- package/presets/legacy-migration/templates/execution_strategy.append.md +18 -0
- package/presets/legacy-migration/templates/findings.seed.md +17 -0
- package/presets/legacy-migration/templates/review.seed.md +12 -0
- package/presets/legacy-migration/templates/task_plan.append.md +9 -0
- package/presets/legacy-migration/templates/visual_map.append.md +12 -0
- package/presets/legacy-migration/workbench/dashboard-panels.yaml +2 -0
- package/presets/legacy-migration/workbench/migration-queue.schema.json +23 -0
- package/presets/lesson-sedimentation/preset.yaml +23 -0
- package/presets/lesson-sedimentation/templates/prompt.md +23 -0
- package/presets/module/preset.yaml +25 -0
- package/presets/module/templates/execution_strategy.append.md +8 -0
- package/presets/module/templates/task_plan.append.md +17 -0
- package/presets/standard-task/preset.yaml +31 -0
- package/presets/standard-task/templates/task_plan.append.md +7 -0
- package/references/adversarial-review-standard.md +2 -2
- package/references/agents-md-pattern.md +5 -5
- package/references/delivery-operating-model-standard.md +3 -3
- package/references/docs-directory-standard.md +53 -10
- package/references/external-source-intake-standard.md +75 -0
- package/references/harness-ledger.md +53 -94
- package/references/legacy-12-phase-bootstrap.md +41 -0
- package/references/lessons-governance.md +100 -88
- package/references/module-parallel-standard.md +14 -14
- package/references/planning-loop.md +51 -7
- package/references/project-onboarding-audit.md +10 -0
- package/references/pull-request-standard.md +118 -0
- package/references/repo-governance-standard.md +12 -1
- package/references/review-routing-standard.md +7 -1
- package/references/ssot-governance.md +67 -59
- package/references/taskr-gap-analysis.md +600 -0
- package/references/testing-standard.md +50 -0
- package/references/walkthrough-closeout.md +10 -9
- package/scripts/check-harness.mjs +111 -331
- package/scripts/commands/dashboard-command.mjs +67 -0
- package/scripts/commands/migration-command.mjs +96 -0
- package/scripts/commands/preset-command.mjs +73 -0
- package/scripts/commands/task-command.mjs +327 -0
- package/scripts/harness.mjs +106 -20
- package/scripts/lib/capability-registry.mjs +591 -0
- package/scripts/lib/check-module-parallel.mjs +237 -0
- package/scripts/lib/check-profiles.mjs +418 -0
- package/scripts/lib/check-task-contracts.mjs +47 -0
- package/scripts/lib/core-shared.mjs +196 -0
- package/scripts/lib/dashboard-data.mjs +412 -0
- package/scripts/lib/dashboard-workbench.mjs +257 -0
- package/scripts/lib/dashboard-writer.mjs +107 -4
- package/scripts/lib/git-status-summary.mjs +46 -0
- package/scripts/lib/governance-index-generator.mjs +174 -0
- package/scripts/lib/governance-sync.mjs +514 -0
- package/scripts/lib/governance-table-boundary.mjs +175 -0
- package/scripts/lib/harness-core.mjs +15 -1318
- package/scripts/lib/lesson-maintenance.mjs +152 -0
- package/scripts/lib/markdown-utils.mjs +158 -0
- package/scripts/lib/migration-planner.mjs +478 -0
- package/scripts/lib/migration-support.mjs +312 -0
- package/scripts/lib/preset-audit-contracts.mjs +37 -0
- package/scripts/lib/preset-engine.mjs +497 -0
- package/scripts/lib/preset-registry.mjs +627 -0
- package/scripts/lib/preset-resource-contracts.mjs +83 -0
- package/scripts/lib/review-confirm-git-gate.mjs +248 -0
- package/scripts/lib/status-dashboard-renderer.mjs +102 -0
- package/scripts/lib/subagent-authorization-audit.mjs +196 -0
- package/scripts/lib/task-completion-consistency.mjs +16 -0
- package/scripts/lib/task-index.mjs +93 -0
- package/scripts/lib/task-lesson-candidates.mjs +242 -0
- package/scripts/lib/task-lesson-sedimentation.mjs +326 -0
- package/scripts/lib/task-lifecycle/review-confirm.mjs +101 -0
- package/scripts/lib/task-lifecycle/review-gates.mjs +70 -0
- package/scripts/lib/task-lifecycle/text-utils.mjs +24 -0
- package/scripts/lib/task-lifecycle.mjs +649 -0
- package/scripts/lib/task-review-model.mjs +469 -0
- package/scripts/lib/task-scanner.mjs +576 -0
- package/scripts/lib/task-tombstone-commands.mjs +140 -0
- package/scripts/postinstall.mjs +14 -0
- package/skills/preset-creator/SKILL.md +179 -0
- package/skills/preset-creator/references/complex-task-skeleton/README.md +31 -0
- package/skills/preset-creator/references/complex-task-skeleton/artifacts/INDEX.md +12 -0
- package/skills/preset-creator/references/complex-task-skeleton/brief.md +32 -0
- package/skills/preset-creator/references/complex-task-skeleton/execution_strategy.md +71 -0
- package/skills/preset-creator/references/complex-task-skeleton/findings.md +24 -0
- package/skills/preset-creator/references/complex-task-skeleton/lesson_candidates.md +70 -0
- package/skills/preset-creator/references/complex-task-skeleton/long-running-task-contract.md +76 -0
- package/skills/preset-creator/references/complex-task-skeleton/progress.md +33 -0
- package/skills/preset-creator/references/complex-task-skeleton/references/INDEX.md +13 -0
- package/skills/preset-creator/references/complex-task-skeleton/review.md +107 -0
- package/skills/preset-creator/references/complex-task-skeleton/task_plan.md +111 -0
- package/{templates/planning/visual_roadmap.md → skills/preset-creator/references/complex-task-skeleton/visual_map.md} +24 -2
- package/skills/preset-creator/references/preset-package-skeleton.md +296 -0
- package/templates/AGENTS.md.template +51 -36
- package/templates/architecture/Architecture-SSoT.md +21 -0
- package/templates/architecture/README.md +49 -0
- package/templates/architecture/critical-flows.md +22 -0
- package/templates/architecture/local-repo-context.md +20 -0
- package/templates/architecture/service-catalog.md +17 -0
- package/templates/architecture/services/service-template.md +31 -0
- package/templates/architecture/system-map.md +22 -0
- package/templates/dashboard/assets/app-src/00-state.js +42 -0
- package/templates/dashboard/assets/app-src/10-router.js +77 -0
- package/templates/dashboard/assets/app-src/20-overview.js +241 -0
- package/templates/dashboard/assets/app-src/30-tasks.js +409 -0
- package/templates/dashboard/assets/app-src/35-task-detail.js +246 -0
- package/templates/dashboard/assets/app-src/40-modules.js +58 -0
- package/templates/dashboard/assets/app-src/45-review.js +347 -0
- package/templates/dashboard/assets/app-src/50-migration.js +183 -0
- package/templates/dashboard/assets/app-src/60-shared.js +61 -0
- package/templates/dashboard/assets/app-src/90-bindings.js +524 -0
- package/templates/dashboard/assets/app.css +3107 -300
- package/templates/dashboard/assets/app.css.manifest.json +9 -0
- package/templates/dashboard/assets/app.js +2068 -306
- package/templates/dashboard/assets/app.manifest.json +12 -0
- package/templates/dashboard/assets/css-src/00-foundation.css +342 -0
- package/templates/dashboard/assets/css-src/10-panels-flow.css +236 -0
- package/templates/dashboard/assets/css-src/20-briefs-controls.css +398 -0
- package/templates/dashboard/assets/css-src/30-task-index.css +739 -0
- package/templates/dashboard/assets/css-src/35-review-workspace.css +507 -0
- package/templates/dashboard/assets/css-src/40-detail-modules-migration.css +427 -0
- package/templates/dashboard/assets/css-src/50-responsive-overrides.css +551 -0
- package/templates/dashboard/assets/i18n.js +531 -44
- package/templates/dashboard/assets/mermaid-renderer.js +58 -8
- package/templates/development/README.md +52 -0
- package/templates/development/codebase-map.md +11 -0
- package/templates/development/cross-repo-debugging.md +18 -0
- package/templates/development/external-context/service-template.md +33 -0
- package/templates/development/external-source-packs/README.md +24 -0
- package/templates/development/external-source-packs/digest-template.md +28 -0
- package/templates/development/local-setup.md +16 -0
- package/templates/development/stubs-and-mocks.md +11 -0
- package/templates/integrations/README.md +40 -0
- package/templates/integrations/api-contract.md +42 -0
- package/templates/integrations/event-contract.md +46 -0
- package/templates/integrations/third-party/vendor-template.md +42 -0
- package/templates/integrations/webhook-contract.md +41 -0
- package/templates/ledger/Harness-Ledger.md +13 -25
- package/templates/lessons/lesson-arch-process-change.md +1 -1
- package/templates/lessons/lesson-new-doc.md +1 -1
- package/templates/lessons/lesson-ref-change.md +1 -1
- package/templates/planning/brief.md +32 -0
- package/templates/planning/execution_strategy.md +31 -0
- package/templates/planning/lesson_candidates.md +70 -0
- package/templates/planning/long-running-task-contract.md +7 -0
- package/templates/planning/module_brief.md +25 -0
- package/templates/planning/module_session_prompt.md +6 -0
- package/templates/planning/optional/artifacts/INDEX.md +3 -3
- package/templates/planning/optional/references/INDEX.md +3 -3
- package/templates/planning/review.md +59 -0
- package/templates/planning/task_plan.md +40 -15
- package/templates/planning/visual_map.md +50 -0
- package/templates/reference/docs-library-standard.md +31 -0
- package/templates/reference/execution-workflow-standard.md +5 -2
- package/templates/reference/external-source-intake-standard.md +82 -0
- package/templates/reference/harness-ledger-standard.md +1 -0
- package/templates/reference/pull-request-standard.md +80 -0
- package/templates/reference/repo-governance-standard.md +8 -5
- package/templates/reference/review-routing-standard.md +6 -0
- package/templates/reference/walkthrough-standard.md +3 -1
- package/templates/verifier/verifier-output.md +1 -1
- package/templates/walkthrough/walkthrough-template.md +2 -2
- package/templates-zh-CN/AGENTS.md.template +73 -70
- package/templates-zh-CN/architecture/Architecture-SSoT.md +21 -0
- package/templates-zh-CN/architecture/README.md +51 -0
- package/templates-zh-CN/architecture/critical-flows.md +24 -0
- package/templates-zh-CN/architecture/local-repo-context.md +20 -0
- package/templates-zh-CN/architecture/service-catalog.md +17 -0
- package/templates-zh-CN/architecture/services/service-template.md +31 -0
- package/templates-zh-CN/architecture/system-map.md +22 -0
- package/templates-zh-CN/development/README.md +54 -0
- package/templates-zh-CN/development/codebase-map.md +11 -0
- package/templates-zh-CN/development/cross-repo-debugging.md +18 -0
- package/templates-zh-CN/development/external-context/service-template.md +33 -0
- package/templates-zh-CN/development/external-source-packs/README.md +24 -0
- package/templates-zh-CN/development/external-source-packs/digest-template.md +28 -0
- package/templates-zh-CN/development/local-setup.md +16 -0
- package/templates-zh-CN/development/stubs-and-mocks.md +11 -0
- package/templates-zh-CN/integrations/README.md +42 -0
- package/templates-zh-CN/integrations/api-contract.md +42 -0
- package/templates-zh-CN/integrations/event-contract.md +46 -0
- package/templates-zh-CN/integrations/third-party/vendor-template.md +42 -0
- package/templates-zh-CN/integrations/webhook-contract.md +41 -0
- package/templates-zh-CN/ledger/Harness-Ledger.md +17 -40
- package/templates-zh-CN/planning/brief.md +32 -0
- package/templates-zh-CN/planning/execution_strategy.md +30 -0
- package/templates-zh-CN/planning/lesson_candidates.md +70 -0
- package/templates-zh-CN/planning/long-running-task-contract.md +1 -1
- package/templates-zh-CN/planning/module_brief.md +25 -0
- package/templates-zh-CN/planning/module_plan.md +2 -2
- package/templates-zh-CN/planning/module_session_prompt.md +4 -3
- package/templates-zh-CN/planning/review.md +59 -1
- package/templates-zh-CN/planning/task_plan.md +37 -11
- package/templates-zh-CN/planning/{visual_roadmap.md → visual_map.md} +21 -2
- package/templates-zh-CN/reference/adversarial-review-standard.md +1 -1
- package/templates-zh-CN/reference/docs-library-standard.md +36 -1
- package/templates-zh-CN/reference/execution-workflow-standard.md +10 -2
- package/templates-zh-CN/reference/external-source-intake-standard.md +82 -0
- package/templates-zh-CN/reference/harness-ledger-standard.md +7 -4
- package/templates-zh-CN/reference/pull-request-standard.md +106 -0
- package/templates-zh-CN/reference/repo-governance-standard.md +4 -1
- package/templates-zh-CN/reference/review-routing-standard.md +8 -1
- package/templates-zh-CN/reference/walkthrough-standard.md +6 -5
- package/templates-zh-CN/walkthrough/Closeout-SSoT.md +2 -2
- package/templates-zh-CN/walkthrough/walkthrough-template.md +2 -2
- package/scripts/smoke-dashboard.mjs +0 -70
- package/scripts/test-harness.mjs +0 -483
- package/templates/ssot/Feature-SSoT.md +0 -43
- package/templates/ssot/Lessons-SSoT.md +0 -44
- package/templates-zh-CN/dashboard/assets/app.css +0 -399
- package/templates-zh-CN/dashboard/assets/app.js +0 -435
- package/templates-zh-CN/dashboard/assets/i18n.js +0 -47
- package/templates-zh-CN/dashboard/assets/markdown-reader.js +0 -116
- package/templates-zh-CN/dashboard/assets/mermaid-renderer.js +0 -59
- package/templates-zh-CN/dashboard/index.html +0 -18
- package/templates-zh-CN/ssot/Feature-SSoT.md +0 -49
- package/templates-zh-CN/ssot/Lessons-SSoT.md +0 -49
package/scripts/harness.mjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
import fs from "node:fs";
|
|
4
|
+
import os from "node:os";
|
|
4
5
|
import path from "node:path";
|
|
5
6
|
import { createInterface } from "node:readline/promises";
|
|
6
7
|
import {
|
|
@@ -8,11 +9,16 @@ import {
|
|
|
8
9
|
buildStatus,
|
|
9
10
|
doctorUserSkill,
|
|
10
11
|
installUserSkill,
|
|
11
|
-
renderDashboard,
|
|
12
12
|
normalizeLocale,
|
|
13
|
-
|
|
13
|
+
rebuildGovernanceIndexes,
|
|
14
|
+
serveDashboardWorkbench,
|
|
15
|
+
validateSourcePackageBoundary,
|
|
14
16
|
writeInitFiles,
|
|
15
17
|
} from "./lib/harness-core.mjs";
|
|
18
|
+
import { runDashboardCommand } from "./commands/dashboard-command.mjs";
|
|
19
|
+
import { runMigrationCommand } from "./commands/migration-command.mjs";
|
|
20
|
+
import { runPresetCommand } from "./commands/preset-command.mjs";
|
|
21
|
+
import { runTaskCommand } from "./commands/task-command.mjs";
|
|
16
22
|
|
|
17
23
|
const args = process.argv.slice(2);
|
|
18
24
|
const command = args.shift() || "help";
|
|
@@ -76,14 +82,54 @@ function printHelp() {
|
|
|
76
82
|
Usage:
|
|
77
83
|
harness check [--profile source-package|private-harness|target-project] [target]
|
|
78
84
|
harness status [--json] [--strict] [target]
|
|
79
|
-
harness
|
|
80
|
-
harness
|
|
85
|
+
harness dev [--no-open] [--out-dir folder] [--host 127.0.0.1] [--port n] [target]
|
|
86
|
+
harness dashboard [--out file.html] [--out-dir folder] [--workbench] [--host 127.0.0.1] [--port n] [target]
|
|
87
|
+
harness init [--dry-run] [--locale zh-CN|en-US] [--capabilities core,dashboard] [--add-npm-scripts] [target]
|
|
81
88
|
harness add-capability <name> [--dry-run] [--locale zh-CN|en-US] [target]
|
|
82
|
-
harness
|
|
89
|
+
harness migrate-plan [--json] [--limit n] [target]
|
|
90
|
+
harness migrate-run [--locale zh-CN|en-US] [--assume-locale] [--allow-dirty] [--plan-only] [--out-dir folder] [--session-dir folder] [target]
|
|
91
|
+
harness migrate-verify [--json] [--full-cutover] <session.json>
|
|
92
|
+
harness governance rebuild [--dry-run] [--archive] [--apply] [target]
|
|
93
|
+
harness preset list [--json] [target]
|
|
94
|
+
harness preset inspect <id> [--json] [target]
|
|
95
|
+
harness preset check <id> [--json] [target]
|
|
96
|
+
harness preset install <path-or-builtin-id> [--project] [--force] [--json] [target]
|
|
97
|
+
harness preset seed [--project] [--force] [--dry-run] [--json] [target]
|
|
98
|
+
harness preset uninstall <id> [--project] [--json] [target]
|
|
99
|
+
harness new-task <task-id> [--module key] [--budget simple|standard|complex] [--preset id] [--from-session session.json] [--long-running] [--title title] [--locale zh-CN|en-US] [--dry-run] [target]
|
|
100
|
+
harness task-start <task-id> [--message text] [target]
|
|
101
|
+
harness task-phase <task-id> <phase-id> [--state done] [--completion 100] [--evidence present] [target]
|
|
102
|
+
harness task-log <task-id> --message text [--evidence type:PATH:summary] [target]
|
|
103
|
+
harness task-block <task-id> [--message text] [target]
|
|
104
|
+
harness task-review <task-id> [--message text] [target]
|
|
105
|
+
harness review-confirm <task-id> --confirm task-id [--reviewer name] [--message text] [target]
|
|
106
|
+
harness lesson-promote <task-id> <candidate-id> [--dry-run|--apply] [target]
|
|
107
|
+
harness lesson-sediment <task-id> <candidate-id> [--dry-run] [--title title] [target]
|
|
108
|
+
harness task-complete <task-id> [--message text] [target]
|
|
109
|
+
harness task-list [--json] [--state state] [--module key] [--queue queue] [--preset id] [--review status] [--lesson status] [--missing-materials] [--search text] [target]
|
|
110
|
+
harness task-index [--json] [target]
|
|
111
|
+
harness task-supersede <old-task-id> --by <new-task-id> [--reason text] [target]
|
|
112
|
+
harness task-delete <task-id> --soft [--reason text] [target]
|
|
113
|
+
harness task-archive <task-id> [--reason text] [target]
|
|
114
|
+
harness task-reopen <task-id> [--reason text] [target]
|
|
115
|
+
harness module-step <module-key> <step-id> [--state done|in-progress|blocked] [target]
|
|
116
|
+
harness install-user [--agent codex|claude|gemini|openclaw|agents|all] [--home dir] [--dry-run] [--force] [--skip-presets] [--yes]
|
|
83
117
|
harness doctor-user [--agent codex|claude|gemini|openclaw|agents|all] [--home dir]
|
|
84
118
|
|
|
85
119
|
If init runs in an interactive terminal and --locale is omitted, it asks for a
|
|
86
120
|
language. Non-interactive init defaults to en-US.
|
|
121
|
+
|
|
122
|
+
Preset discovery:
|
|
123
|
+
Project presets live in <target>/.coding-agent-harness/presets/<preset-id>/.
|
|
124
|
+
User presets live in ~/.coding-agent-harness/presets/<preset-id>/.
|
|
125
|
+
Harness discovers project presets first when a target is supplied, then user
|
|
126
|
+
presets, then bundled package presets under presets/<preset-id>/.
|
|
127
|
+
"harness init" seeds bundled presets into the target project. "harness
|
|
128
|
+
install-user" and npm postinstall seed bundled presets into the user root.
|
|
129
|
+
Use "harness preset seed" to repair or re-run preset seeding.
|
|
130
|
+
Use "harness preset list --json" to see available presets, their source,
|
|
131
|
+
purpose, compatible budgets, and manifest path. Use "harness preset inspect
|
|
132
|
+
<id> --json" for the full preset manifest summary.
|
|
87
133
|
`);
|
|
88
134
|
}
|
|
89
135
|
|
|
@@ -95,6 +141,8 @@ function exitWithReport(report) {
|
|
|
95
141
|
|
|
96
142
|
if (command === "help" || command === "--help" || command === "-h") {
|
|
97
143
|
printHelp();
|
|
144
|
+
} else if (args[0] === "help" || args.includes("--help") || args.includes("-h")) {
|
|
145
|
+
printHelp();
|
|
98
146
|
} else if (command === "check") {
|
|
99
147
|
const profile = takeOption("--profile", "target-project");
|
|
100
148
|
const strict = takeFlag("--strict");
|
|
@@ -106,6 +154,9 @@ if (command === "help" || command === "--help" || command === "-h") {
|
|
|
106
154
|
for (const required of ["package.json", "scripts/harness.mjs", "scripts/check-harness.mjs", "templates/planning/task_plan.md"]) {
|
|
107
155
|
if (!fs.existsSync(path.resolve(target, required))) failures.push(`missing source package file: ${required}`);
|
|
108
156
|
}
|
|
157
|
+
const boundary = validateSourcePackageBoundary(target);
|
|
158
|
+
failures.push(...boundary.failures);
|
|
159
|
+
warnings.push(...boundary.warnings);
|
|
109
160
|
}
|
|
110
161
|
|
|
111
162
|
const status = buildStatus(target, { skipLegacyCheck: profile === "source-package", strictLegacy: strict, strict });
|
|
@@ -127,27 +178,33 @@ if (command === "help" || command === "--help" || command === "-h") {
|
|
|
127
178
|
console.log(`capabilities: ${status.capabilities.map((capability) => `${capability.name}:${capability.state}`).join(", ")}`);
|
|
128
179
|
console.log(`tasks: ${status.tasks.length}`);
|
|
129
180
|
}
|
|
130
|
-
process.
|
|
131
|
-
} else if (command === "
|
|
132
|
-
const
|
|
181
|
+
process.exitCode = status.checkState.status === "fail" ? 1 : 0;
|
|
182
|
+
} else if (command === "dev") {
|
|
183
|
+
const open = !takeFlag("--no-open");
|
|
133
184
|
const outDir = takeOption("--out-dir", "");
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
185
|
+
const host = takeOption("--host", "127.0.0.1");
|
|
186
|
+
const port = takeOption("--port", "0");
|
|
187
|
+
const localeOverride = takeOption("--locale", "");
|
|
188
|
+
const target = targetArg();
|
|
189
|
+
const usesDefaultOutDir = !outDir;
|
|
190
|
+
const dashboardOutDir = outDir || defaultDevOutDir(target);
|
|
191
|
+
const opts = { ...(localeOverride ? { localeOverride } : {}), recoverGeneratedDashboard: usesDefaultOutDir };
|
|
192
|
+
try {
|
|
193
|
+
await serveDashboardWorkbench(dashboardOutDir, target, { ...opts, host, port, autoRefresh: true, open, label: "harness dev" });
|
|
194
|
+
} catch (error) {
|
|
195
|
+
console.error(error.message);
|
|
196
|
+
process.exit(1);
|
|
142
197
|
}
|
|
143
|
-
|
|
198
|
+
} else if (command === "dashboard") {
|
|
199
|
+
await runDashboardCommand({ takeFlag, takeOption, targetArg });
|
|
144
200
|
} else if (command === "init") {
|
|
145
201
|
const dryRun = takeFlag("--dry-run");
|
|
202
|
+
const addNpmScripts = takeFlag("--add-npm-scripts");
|
|
146
203
|
const locale = await resolveInitLocale(takeOption("--locale", ""));
|
|
147
204
|
const capabilities = takeOption("--capabilities", "core").split(",").map((item) => item.trim()).filter(Boolean);
|
|
148
205
|
try {
|
|
149
|
-
const result = writeInitFiles(targetArg(), capabilities, { dryRun, locale });
|
|
150
|
-
console.log(JSON.stringify({ dryRun, locale: result.locale, capabilities: result.capabilities, changes: result.changes, report: result.report }, null, 2));
|
|
206
|
+
const result = writeInitFiles(targetArg(), capabilities, { dryRun, locale, addNpmScripts });
|
|
207
|
+
console.log(JSON.stringify({ dryRun, locale: result.locale, capabilities: result.capabilities, changes: result.changes, presetSeed: result.presetSeed, nextCommands: result.nextCommands, report: result.report }, null, 2));
|
|
151
208
|
} catch (error) {
|
|
152
209
|
console.error(error.message);
|
|
153
210
|
process.exit(1);
|
|
@@ -167,10 +224,32 @@ if (command === "help" || command === "--help" || command === "-h") {
|
|
|
167
224
|
console.error(error.message);
|
|
168
225
|
process.exit(1);
|
|
169
226
|
}
|
|
227
|
+
} else if (["migrate-plan", "migrate-run", "migrate-verify"].includes(command)) {
|
|
228
|
+
runMigrationCommand(command, { args, takeFlag, takeOption, targetArg });
|
|
229
|
+
} else if (command === "governance") {
|
|
230
|
+
const subcommand = args.shift() || "";
|
|
231
|
+
if (subcommand !== "rebuild") {
|
|
232
|
+
console.error(`Unknown governance subcommand: ${subcommand || "(missing)"}`);
|
|
233
|
+
process.exit(2);
|
|
234
|
+
}
|
|
235
|
+
const dryRun = takeFlag("--dry-run");
|
|
236
|
+
const archive = takeFlag("--archive");
|
|
237
|
+
const apply = takeFlag("--apply");
|
|
238
|
+
try {
|
|
239
|
+
console.log(JSON.stringify(rebuildGovernanceIndexes(targetArg(), { dryRun, archive, apply }), null, 2));
|
|
240
|
+
} catch (error) {
|
|
241
|
+
console.error(error.message);
|
|
242
|
+
process.exit(1);
|
|
243
|
+
}
|
|
244
|
+
} else if (command === "preset") {
|
|
245
|
+
runPresetCommand({ args, takeFlag, targetArg });
|
|
246
|
+
} else if (["new-task", "task-phase", "task-start", "task-log", "task-block", "task-review", "task-complete", "review-confirm", "lesson-promote", "lesson-sediment", "task-list", "task-index", "task-supersede", "task-delete", "task-archive", "task-reopen", "module-step"].includes(command)) {
|
|
247
|
+
runTaskCommand(command, { args, takeFlag, takeOption, targetArg });
|
|
170
248
|
} else if (command === "install-user") {
|
|
171
249
|
const dryRun = takeFlag("--dry-run");
|
|
172
250
|
const force = takeFlag("--force");
|
|
173
251
|
const yes = takeFlag("--yes") || takeFlag("-y");
|
|
252
|
+
const skipPresets = takeFlag("--skip-presets");
|
|
174
253
|
takeFlag("--global");
|
|
175
254
|
const agent = takeOption("--agent", "codex");
|
|
176
255
|
const home = takeOption("--home", "");
|
|
@@ -179,7 +258,7 @@ if (command === "help" || command === "--help" || command === "-h") {
|
|
|
179
258
|
process.exit(2);
|
|
180
259
|
}
|
|
181
260
|
try {
|
|
182
|
-
console.log(JSON.stringify(installUserSkill({ agent, home, dryRun, force }), null, 2));
|
|
261
|
+
console.log(JSON.stringify(installUserSkill({ agent, home, dryRun, force, seedPresets: !skipPresets }), null, 2));
|
|
183
262
|
} catch (error) {
|
|
184
263
|
console.error(error.message);
|
|
185
264
|
process.exit(1);
|
|
@@ -199,3 +278,10 @@ if (command === "help" || command === "--help" || command === "-h") {
|
|
|
199
278
|
printHelp();
|
|
200
279
|
process.exit(2);
|
|
201
280
|
}
|
|
281
|
+
|
|
282
|
+
function defaultDevOutDir(targetInput) {
|
|
283
|
+
const target = path.resolve(targetInput || ".");
|
|
284
|
+
const name = path.basename(target) || "project";
|
|
285
|
+
const hash = Buffer.from(target).toString("hex").slice(0, 16);
|
|
286
|
+
return path.join(os.tmpdir(), "coding-agent-harness-dev", `${name}-${hash}`);
|
|
287
|
+
}
|