harnessed 4.4.0 → 4.5.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.md +47 -18
- package/bin/harnessed-inject-state.mjs +157 -0
- package/dist/cli.mjs +5535 -4345
- package/dist/cli.mjs.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/manifests/optional/codegraph.yaml +46 -0
- package/package.json +4 -2
- package/workflows/capabilities.yaml +18 -0
- package/workflows/judgments/stage-routing.yaml +7 -0
- package/workflows/ship/auto/SKILL.md +47 -0
- package/workflows/ship/auto/workflow.yaml +37 -0
- package/workflows/ship/preflight/SKILL.md +40 -0
- package/workflows/ship/preflight/workflow.yaml +29 -0
package/dist/index.mjs
CHANGED
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../package.json","../src/index.ts"],"names":[],"mappings":";AAAA,IAAA,eAAA,GAAA;AAAA,EAEE,OAAA,EAAW,
|
|
1
|
+
{"version":3,"sources":["../package.json","../src/index.ts"],"names":[],"mappings":";AAAA,IAAA,eAAA,GAAA;AAAA,EAEE,OAAA,EAAW,OAkGb,CAAA;;;AC/FO,IAAM,UAAU,eAAA,CAAI","file":"index.mjs","sourcesContent":["{\n \"name\": \"harnessed\",\n \"version\": \"4.5.0\",\n \"description\": \"AI coding harness package manager + composition orchestrator\",\n \"type\": \"module\",\n \"license\": \"Apache-2.0\",\n \"author\": \"easyinplay\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/easyinplay/harnessed.git\"\n },\n \"homepage\": \"https://github.com/easyinplay/harnessed#readme\",\n \"bugs\": \"https://github.com/easyinplay/harnessed/issues\",\n \"keywords\": [\n \"claude-code\",\n \"ai-harness\",\n \"package-manager\",\n \"composition\",\n \"skill-pack\",\n \"mcp\",\n \"orchestrator\"\n ],\n \"engines\": {\n \"node\": \">=22.0.0\"\n },\n \"packageManager\": \"pnpm@10.12.0\",\n \"bin\": {\n \"harnessed\": \"./dist/cli.mjs\",\n \"harnessed-inject-state\": \"./bin/harnessed-inject-state.mjs\"\n },\n \"main\": \"./dist/index.mjs\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"default\": \"./dist/index.mjs\"\n },\n \"./schemas\": {\n \"types\": \"./dist/schemas/index.d.ts\",\n \"import\": \"./dist/schemas/index.mjs\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"files\": [\n \"dist\",\n \"bin\",\n \"manifests\",\n \"messages\",\n \"workflows\",\n \"routing\",\n \"config-templates\",\n \"schemas\",\n \"README.md\",\n \"LICENSE\",\n \"NOTICE\",\n \"THIRD-PARTY-NOTICES.md\"\n ],\n \"scripts\": {\n \"dev\": \"tsup --watch\",\n \"build\": \"tsc --noEmit && tsup\",\n \"build:schema\": \"node ./scripts/build-schema.mjs\",\n \"validate:schema\": \"node ./scripts/validate-schema.mjs\",\n \"typecheck\": \"tsc --noEmit\",\n \"test\": \"vitest run --passWithNoTests\",\n \"test:watch\": \"vitest\",\n \"test:coverage\": \"vitest run --coverage --passWithNoTests\",\n \"bench\": \"vitest bench --run\",\n \"lint\": \"biome check .\",\n \"lint:fix\": \"biome check --write .\",\n \"format\": \"biome format --write .\"\n },\n \"dependencies\": {\n \"@anthropic-ai/claude-agent-sdk\": \"0.3.142\",\n \"@clack/prompts\": \"^0.10.1\",\n \"@sinclair/typebox\": \"^0.34.49\",\n \"ajv\": \"^8.20.0\",\n \"ajv-errors\": \"^3.0.0\",\n \"ajv-formats\": \"^3.0.1\",\n \"commander\": \"^13.0.0\",\n \"diff\": \"^9.0.0\",\n \"expr-eval\": \"^2.0.2\",\n \"picocolors\": \"^1.1.1\",\n \"proper-lockfile\": \"^4.1.2\",\n \"yaml\": \"^2.9.0\"\n },\n \"devDependencies\": {\n \"@biomejs/biome\": \"^2.0.0\",\n \"@types/node\": \"^22.10.0\",\n \"@types/proper-lockfile\": \"^4.1.4\",\n \"@vitest/coverage-v8\": \"^4.0.0\",\n \"tsup\": \"^8.3.0\",\n \"typescript\": \"^5.6.0\",\n \"vitest\": \"^4.0.0\"\n },\n \"pnpm\": {\n \"onlyBuiltDependencies\": [\n \"esbuild\"\n ]\n }\n}\n","// Main library entry — re-exports public APIs.\n// phase 1.1 batch 1: skeleton only; schema validator wired in batch 2 (T3+).\n\nimport pkg from '../package.json' with { type: 'json' }\n\nexport const VERSION = pkg.version\n"]}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# yaml-language-server: $schema=../../schemas/manifest.v1.schema.json
|
|
2
|
+
# OPT-IN catalog manifest — lives in manifests/optional/ so `install-base` (which
|
|
3
|
+
# globs only manifests/tools + manifests/skill-packs) never pulls it into the base
|
|
4
|
+
# profile, and `harnessed install <name>` (tools + skill-packs only) never installs
|
|
5
|
+
# it. CodeGraph ships its own installer; harnessed catalogs + detects only.
|
|
6
|
+
apiVersion: harnessed/v1
|
|
7
|
+
kind: Manifest
|
|
8
|
+
metadata:
|
|
9
|
+
name: codegraph
|
|
10
|
+
display_name: CodeGraph
|
|
11
|
+
description: Pre-indexed code knowledge graph (semantic index) for Claude Code — fewer tokens/tool-calls. Opt-in, self-installed.
|
|
12
|
+
upstream:
|
|
13
|
+
source: codegraph
|
|
14
|
+
homepage: https://colbymchenry.github.io/codegraph/
|
|
15
|
+
repository: https://github.com/colbymchenry/codegraph.git
|
|
16
|
+
license: MIT
|
|
17
|
+
notice: |
|
|
18
|
+
CodeGraph by colbymchenry (MIT, 100% local). Optional semantic code index —
|
|
19
|
+
harnessed catalogs + detects only; CodeGraph self-installs via its own CLI
|
|
20
|
+
(`codegraph install` wires its MCP server into Claude Code). Not vendored.
|
|
21
|
+
spec:
|
|
22
|
+
type: cli-npm
|
|
23
|
+
component_type: cli-binary
|
|
24
|
+
category: search
|
|
25
|
+
install_type: npm
|
|
26
|
+
install:
|
|
27
|
+
method: npm-cli
|
|
28
|
+
cmd: "npm i -g @colbymchenry/codegraph && codegraph install --yes"
|
|
29
|
+
npm_version: ^1.0.0
|
|
30
|
+
idempotent_check: "command -v codegraph"
|
|
31
|
+
verify:
|
|
32
|
+
cmd: "codegraph status"
|
|
33
|
+
timeout_ms: 10000
|
|
34
|
+
expected_exit_code: 0
|
|
35
|
+
uninstall:
|
|
36
|
+
cmd: "codegraph uninstall --yes"
|
|
37
|
+
upstream_health:
|
|
38
|
+
stability: stable
|
|
39
|
+
last_check: "2026-06-13"
|
|
40
|
+
last_known_good_version: "1.0.0"
|
|
41
|
+
fallback_action: warn
|
|
42
|
+
signed_by: easyinplay
|
|
43
|
+
platforms:
|
|
44
|
+
- linux
|
|
45
|
+
- darwin
|
|
46
|
+
- win32
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "harnessed",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.5.0",
|
|
4
4
|
"description": "AI coding harness package manager + composition orchestrator",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -25,7 +25,8 @@
|
|
|
25
25
|
},
|
|
26
26
|
"packageManager": "pnpm@10.12.0",
|
|
27
27
|
"bin": {
|
|
28
|
-
"harnessed": "./dist/cli.mjs"
|
|
28
|
+
"harnessed": "./dist/cli.mjs",
|
|
29
|
+
"harnessed-inject-state": "./bin/harnessed-inject-state.mjs"
|
|
29
30
|
},
|
|
30
31
|
"main": "./dist/index.mjs",
|
|
31
32
|
"types": "./dist/index.d.ts",
|
|
@@ -43,6 +44,7 @@
|
|
|
43
44
|
},
|
|
44
45
|
"files": [
|
|
45
46
|
"dist",
|
|
47
|
+
"bin",
|
|
46
48
|
"manifests",
|
|
47
49
|
"messages",
|
|
48
50
|
"workflows",
|
|
@@ -243,6 +243,15 @@ capabilities:
|
|
|
243
243
|
fires_when:
|
|
244
244
|
- subtask.needs_library_docs == true
|
|
245
245
|
|
|
246
|
+
codegraph:
|
|
247
|
+
impl: mcp
|
|
248
|
+
cmd: codegraph_explore
|
|
249
|
+
since: v7.0
|
|
250
|
+
category: tool-mcp
|
|
251
|
+
description: 语义代码索引 (symbol/call-graph query; opt-in self-installed, fewer tool-calls)
|
|
252
|
+
fires_when:
|
|
253
|
+
- subtask.type in ['code_navigation', 'symbol_lookup', 'call_graph']
|
|
254
|
+
|
|
246
255
|
tavily-mcp:
|
|
247
256
|
impl: mcp
|
|
248
257
|
cmd: tavily_search
|
|
@@ -814,6 +823,15 @@ capabilities:
|
|
|
814
823
|
fires_when:
|
|
815
824
|
- phase.stage == 'verify' AND phase.is_release_candidate == true
|
|
816
825
|
|
|
826
|
+
release-preflight:
|
|
827
|
+
impl: harnessed-bundled
|
|
828
|
+
cmd: harnessed release-preflight
|
|
829
|
+
since: v7.0
|
|
830
|
+
category: tool-cli
|
|
831
|
+
description: 只读发布就绪门 (CHANGELOG/version/git-clean/tag; PR ready != release ready)
|
|
832
|
+
fires_when:
|
|
833
|
+
- phase.stage == 'ship'
|
|
834
|
+
|
|
817
835
|
setup-deploy:
|
|
818
836
|
impl: gstack
|
|
819
837
|
install_type: user-skill
|
|
@@ -92,6 +92,13 @@ triggers:
|
|
|
92
92
|
invokes:
|
|
93
93
|
- capability: code-simplifier
|
|
94
94
|
|
|
95
|
+
# Phase 21 NEW — Stage ⑤ Ship master → ship-preflight always (release-readiness gate)
|
|
96
|
+
ship-preflight-always:
|
|
97
|
+
description: /ship master → /ship-preflight 总 fire (read-only release-readiness gate)。
|
|
98
|
+
fires_when: "phase.stage == 'ship'"
|
|
99
|
+
invokes:
|
|
100
|
+
- capability: release-preflight
|
|
101
|
+
|
|
95
102
|
# v3.2.0 NEW — /auto super-master Phase 0.5 understanding check gate
|
|
96
103
|
auto-research-unclear:
|
|
97
104
|
description: |
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ship
|
|
3
|
+
description: |
|
|
4
|
+
Stage ⑤ Ship master orchestrator — the release stage after Verify. ship-preflight
|
|
5
|
+
必跑串行 (release-readiness gate) → 委派 PR/deploy 给 gstack /ship → publish 留
|
|
6
|
+
publish.yml CI (tag push 触发)。schema_version: harnessed.workflow.v3 with delegates_to
|
|
7
|
+
(1 sub: preflight serial order 1) + disciplines_applied (6 default) + tools_available
|
|
8
|
+
(release-preflight + ship + planning-with-files)。Triggered by `/ship` (bare per ADR 0030)
|
|
9
|
+
or `harnessed ship` after `harnessed verify`. Deploy boundary = TAG-READY (no push/publish/tag).
|
|
10
|
+
trigger_phrases:
|
|
11
|
+
- "ship"
|
|
12
|
+
- "发布阶段"
|
|
13
|
+
- "stage 5 ship"
|
|
14
|
+
- "release stage"
|
|
15
|
+
- "send it"
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# ship master orchestrator (v3) — Stage ⑤
|
|
19
|
+
|
|
20
|
+
## Overview
|
|
21
|
+
|
|
22
|
+
The 5th stage, after Verify. harnessed has the pieces (a release-preflight gate, gstack
|
|
23
|
+
`/ship`, `publish.yml` CI) — this master orchestrates them into one repeatable release path,
|
|
24
|
+
the way comet (archive), Trellis (finish-work), and Claude-Harness (`/harness-release`) each
|
|
25
|
+
close their loop.
|
|
26
|
+
|
|
27
|
+
| order/mode | sub | when fires |
|
|
28
|
+
| ---------- | --- | ---------- |
|
|
29
|
+
| 1 (serial) | `preflight` | always when stage=='ship' — read-only release-readiness gate |
|
|
30
|
+
|
|
31
|
+
After preflight passes, the master delegates PR + deploy to gstack `/ship` (composition —
|
|
32
|
+
harnessed does not reimplement it), and the actual `npm publish` + GitHub release happen in
|
|
33
|
+
`publish.yml` CI on tag push.
|
|
34
|
+
|
|
35
|
+
## Process
|
|
36
|
+
|
|
37
|
+
1. **preflight (always)** — run `harnessed release-preflight`. If any check fails (most often
|
|
38
|
+
an empty `## [Unreleased]`), STOP and document the release / clean the tree first.
|
|
39
|
+
2. **PR / deploy (delegate)** — invoke gstack `/ship` for PR creation + pre-land review.
|
|
40
|
+
3. **publish (CI)** — push the `v<version>` tag (with explicit user approval) → `publish.yml`
|
|
41
|
+
runs `npm publish` + creates the GitHub release.
|
|
42
|
+
|
|
43
|
+
## Boundary (important)
|
|
44
|
+
|
|
45
|
+
This stage stops at **tag-ready**. It never pushes to the remote, never publishes to npm, and
|
|
46
|
+
never creates a git tag on its own. Those are CI + explicit-approval actions, by design —
|
|
47
|
+
"PR ready != release ready", and "release ready != already published".
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# workflows/ship/auto/workflow.yaml — Phase 21 (v7.0 follow-on)
|
|
2
|
+
#
|
|
3
|
+
# Stage ⑤ Ship master orchestrator — the release stage after Verify. Closes the
|
|
4
|
+
# ship-stage gap vs comet (archive) / Trellis (finish-work) / Claude-Harness
|
|
5
|
+
# (/harness-release). Composition, not reimplementation:
|
|
6
|
+
# ship-preflight (serial, always) → delegate PR/deploy to gstack /ship → publish
|
|
7
|
+
# stays in publish.yml CI on tag push.
|
|
8
|
+
#
|
|
9
|
+
# Deploy boundary = TAG-READY. This stage never pushes, publishes, or creates a tag.
|
|
10
|
+
#
|
|
11
|
+
# Master invariant (WorkflowSchemaV3 + check-workflow-schema K9):
|
|
12
|
+
# - phases 缺省 (master only has delegates_to[])
|
|
13
|
+
# - serial mode 必带 explicit order
|
|
14
|
+
#
|
|
15
|
+
# Sister refs:
|
|
16
|
+
# - workflows/ship/preflight/workflow.yaml — the preflight sub
|
|
17
|
+
# - workflows/judgments/stage-routing.yaml — ship-preflight-always trigger
|
|
18
|
+
# - workflows/capabilities.yaml — release-preflight + ship (gstack) + planning-with-files
|
|
19
|
+
|
|
20
|
+
schema_version: harnessed.workflow.v3
|
|
21
|
+
workflow: ship
|
|
22
|
+
description: |
|
|
23
|
+
Stage ⑤ Ship master orchestrator — release stage after Verify. ship-preflight 必跑串行
|
|
24
|
+
(release-readiness gate) → 委派 PR/deploy 给 gstack /ship → publish 留 publish.yml CI
|
|
25
|
+
(tag push 触发)。Deploy 边界 = tag-ready;本 stage 不 push/publish/创建 tag。
|
|
26
|
+
Triggered by `/ship` (bare per ADR 0030 namespace policy) after `harnessed verify`.
|
|
27
|
+
|
|
28
|
+
disciplines_applied: [karpathy, output-style, language, operational, priority, protocols]
|
|
29
|
+
tools_available:
|
|
30
|
+
- release-preflight
|
|
31
|
+
- ship
|
|
32
|
+
- planning-with-files
|
|
33
|
+
|
|
34
|
+
delegates_to:
|
|
35
|
+
- sub: preflight
|
|
36
|
+
mode: serial
|
|
37
|
+
order: 1
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ship-preflight
|
|
3
|
+
description: |
|
|
4
|
+
Stage ⑤.a Ship sub — release-preflight gate. Runs `harnessed release-preflight`
|
|
5
|
+
(read-only: CHANGELOG [Unreleased] non-empty + version + git-clean + tag-absent).
|
|
6
|
+
A failing gate blocks shipping. Nothing is pushed/published/tagged here.
|
|
7
|
+
trigger_phrases:
|
|
8
|
+
- "release preflight"
|
|
9
|
+
- "release ready"
|
|
10
|
+
- "ship preflight"
|
|
11
|
+
- "发布就绪检查"
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# ship-preflight (Stage ⑤.a)
|
|
15
|
+
|
|
16
|
+
## Overview
|
|
17
|
+
|
|
18
|
+
The machine-checkable "PR ready != release ready" gate. Runs the harnessed-native
|
|
19
|
+
`harnessed release-preflight` command, which inspects (read-only) whether the repo is
|
|
20
|
+
ready to tag a release:
|
|
21
|
+
|
|
22
|
+
| check | passes when |
|
|
23
|
+
| ----- | ----------- |
|
|
24
|
+
| `changelog` | `## [Unreleased]` has entries (this release is documented) |
|
|
25
|
+
| `version` | `package.json` has a valid semver |
|
|
26
|
+
| `git-clean` | the working tree has no uncommitted changes |
|
|
27
|
+
| `tag-absent` | a `v<version>` tag does NOT already exist |
|
|
28
|
+
|
|
29
|
+
## Process
|
|
30
|
+
|
|
31
|
+
1. Run `harnessed release-preflight`.
|
|
32
|
+
2. If any check fails, STOP — surface the `fix:` hints and do not proceed to PR/tag.
|
|
33
|
+
- Empty `[Unreleased]` is the most common failure: document the release first.
|
|
34
|
+
3. If all pass, the repo is **tag-ready**. The ship master continues to PR/deploy.
|
|
35
|
+
|
|
36
|
+
## Boundary
|
|
37
|
+
|
|
38
|
+
This gate is READ-ONLY. It never pushes, publishes, or creates a tag. The actual
|
|
39
|
+
`npm publish` + GitHub release happen in `publish.yml` CI when a `v<version>` tag is
|
|
40
|
+
pushed (with explicit user approval).
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# workflows/ship/preflight/workflow.yaml — Phase 21 (v7.0 follow-on)
|
|
2
|
+
#
|
|
3
|
+
# Stage ⑤.a Ship sub-workflow — release-preflight gate ("PR ready != release ready").
|
|
4
|
+
# Read-only: checks CHANGELOG [Unreleased] / version / git-clean / tag-absence via
|
|
5
|
+
# `harnessed release-preflight`. Mutates nothing — publish stays in publish.yml CI.
|
|
6
|
+
#
|
|
7
|
+
# Sister refs:
|
|
8
|
+
# - workflows/judgments/stage-routing.yaml ship-preflight-always trigger
|
|
9
|
+
# - workflows/capabilities.yaml — release-preflight (harnessed-bundled CLI gate)
|
|
10
|
+
# - src/cli/lib/release-preflight.ts collectPreflight
|
|
11
|
+
|
|
12
|
+
schema_version: harnessed.workflow.v3
|
|
13
|
+
workflow: ship-preflight
|
|
14
|
+
description: |
|
|
15
|
+
Stage ⑤.a release-preflight gate — runs `harnessed release-preflight` (read-only:
|
|
16
|
+
CHANGELOG [Unreleased] non-empty + package.json version + git working tree clean +
|
|
17
|
+
v<version> tag absent). A failing gate BLOCKS shipping until the release is documented
|
|
18
|
+
and the tree is clean. Nothing is pushed, published, or tagged here.
|
|
19
|
+
|
|
20
|
+
disciplines_applied: [karpathy, output-style, language, operational, priority, protocols]
|
|
21
|
+
tools_available: [release-preflight]
|
|
22
|
+
|
|
23
|
+
phases:
|
|
24
|
+
- id: 01-release-preflight
|
|
25
|
+
name: release-preflight (read-only release-readiness gate; blocks on any failure)
|
|
26
|
+
upstream: harnessed
|
|
27
|
+
capability: '{{ capabilities.release-preflight.cmd }}'
|
|
28
|
+
model: haiku
|
|
29
|
+
max_iterations: 1
|