agentic-engineering-harness 0.6.0 → 0.6.1

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.
@@ -2,41 +2,62 @@
2
2
 
3
3
  The package name is `agentic-engineering-harness` and the public CLI commands are `aeh` and `engineering-harness`.
4
4
 
5
- The repository is prepared for npm Trusted Publishing through GitHub Actions OIDC. No long-lived npm publish token is stored in the repository workflow.
5
+ `package.json` is the single source of truth for the AEH version. Runtime CLI version output imports that package metadata; source files and CI must not maintain separate hard-coded version strings.
6
6
 
7
7
  ## Preflight
8
8
 
9
- Before any publication:
9
+ Every release candidate must pass:
10
10
 
11
11
  ```bash
12
12
  npm run release:check
13
13
  ```
14
14
 
15
- This must pass typecheck, tests, build and `npm pack --dry-run`.
15
+ This runs typecheck, the complete test suite, build and `npm pack --dry-run`.
16
16
 
17
- Check whether the desired package name already exists:
17
+ ## Automatic releases from `main`
18
18
 
19
- ```bash
20
- npm view agentic-engineering-harness version
19
+ `.github/workflows/publish.yml` is the single npm publishing workflow. A push to `main` starts an idempotent release pipeline unless the repository variable below is set:
20
+
21
+ ```text
22
+ AEH_AUTO_PUBLISH=false
21
23
  ```
22
24
 
23
- An npm `E404` means the name is not currently published. If another owner controls the name, choose a scoped package name before publishing rather than changing package identity after adoption.
25
+ The workflow performs the following steps:
24
26
 
25
- ## One-time first publication
27
+ 1. installs dependencies with `npm ci`;
28
+ 2. checks whether the current `package.json` version is already present on npm;
29
+ 3. if the current version is unpublished, it publishes that exact version first;
30
+ 4. otherwise it derives the next semantic version from commits since the latest `v*` tag:
31
+ - a breaking Conventional Commit (`type!:` or `BREAKING CHANGE:`) -> major;
32
+ - `feat:` -> minor;
33
+ - every other change -> patch;
34
+ 5. synchronizes `package.json` and `package-lock.json` with `npm version --no-git-tag-version`;
35
+ 6. runs `npm run release:check` on the exact candidate;
36
+ 7. commits the version metadata as `chore(release): vX.Y.Z [skip ci]` and creates the matching Git tag;
37
+ 8. publishes the package to npm with provenance;
38
+ 9. creates the GitHub Release for the tag.
26
39
 
27
- npm Trusted Publisher configuration requires an npm package to exist first. The first release therefore needs one deliberate maintainer-authenticated publish.
40
+ The release commit/tag is pushed with GitHub's repository token. GitHub does not recursively trigger ordinary push workflows for pushes created with that `GITHUB_TOKEN`, so the version commit does not create an infinite publish loop.
28
41
 
29
- From a clean checkout of the exact release commit:
42
+ The repository must allow the workflow identity to write the release metadata commit/tag. If branch rules forbid direct writes to `main`, grant the GitHub Actions identity the appropriate bypass/write permission or set `AEH_AUTO_PUBLISH=false` until the repository rule is adjusted. Source validation remains independent of publication.
30
43
 
31
- ```bash
32
- npm login
33
- npm run release:check
34
- npm publish --access public
44
+ ## Manual release control
45
+
46
+ `publish-npm` also supports `workflow_dispatch`. The `bump` input can be:
47
+
48
+ ```text
49
+ auto # Conventional Commit-derived bump
50
+ current # publish current version only if it is not already published
51
+ patch
52
+ minor
53
+ major
35
54
  ```
36
55
 
37
- Complete the npm account's required 2FA/interactive authentication. Do not create a persistent automation token solely for this bootstrap.
56
+ Manual dispatch is useful for retrying an external npm/OIDC failure or deliberately overriding the automatic bump classification. A `current` retry is also able to recreate a missing GitHub Release when the npm version and matching Git tag already exist; it will not fabricate a missing tag for an already-published package.
38
57
 
39
- After the first package exists, open the package settings on npmjs.com and configure a Trusted Publisher with:
58
+ ## npm authentication
59
+
60
+ The preferred steady-state path is npm Trusted Publishing with GitHub Actions OIDC. Configure the npm package Trusted Publisher with:
40
61
 
41
62
  ```text
42
63
  Provider: GitHub Actions
@@ -46,39 +67,21 @@ Workflow filename: publish.yml
46
67
  Allowed action: npm publish
47
68
  ```
48
69
 
49
- The workflow file lives at `.github/workflows/publish.yml`; npm expects only the filename in the Trusted Publisher configuration.
50
-
51
- For the strongest steady-state posture, after the OIDC flow has been proven once, disallow traditional publish tokens for the package and retain 2FA on the maintainer account.
70
+ The workflow grants `id-token: write`, which is required for OIDC. Modern npm clients can exchange the GitHub OIDC identity for short-lived publish authorization, avoiding a long-lived npm write token.
52
71
 
53
- ## Steady-state release
72
+ For bootstrap or compatibility, the workflow also accepts an optional GitHub Actions secret named `NPM_TOKEN`. If present, it is exported only for the `npm publish` step. Once Trusted Publishing is verified, prefer removing the long-lived token.
54
73
 
55
- 1. Change `package.json` to the intended semantic version.
56
- 2. Ensure the CLI dispatcher reports the same version.
57
- 3. Merge only after CI `release:check` passes.
58
- 4. Create/publish a GitHub Release tagged exactly:
74
+ If the package has never been published and npm does not permit Trusted Publisher configuration before first publication, perform one maintainer-authenticated bootstrap publish, then configure the Trusted Publisher above. The automatic workflow will subsequently see that version as published and continue normal semantic versioning.
59
75
 
60
- ```text
61
- v<package.json version>
62
- ```
63
-
64
- For example:
65
-
66
- ```text
67
- v0.4.16
68
- ```
76
+ ## Version policy
69
77
 
70
- 5. The `publish-npm` workflow will:
71
- - check out the release commit;
72
- - use Node 24 on a GitHub-hosted runner;
73
- - verify that the release tag exactly matches `package.json`;
74
- - run `npm run release:check` again;
75
- - execute `npm publish` using npm Trusted Publishing/OIDC.
78
+ The repository currently starts this release line at `0.6.1`. After that, normal merges do not require a human to edit the version manually. The release workflow owns the release metadata bump.
76
79
 
77
- If the tag/version check fails, no publish is attempted.
80
+ If a PR intentionally changes the package version to a version that is not yet on npm, that repository version wins: the next `main` publication ships it before any further automatic increment. This makes explicit release corrections and recovery deterministic.
78
81
 
79
82
  ## What enters the npm tarball
80
83
 
81
- The `files` allowlist in `package.json` publishes only:
84
+ The `files` allowlist in `package.json` publishes:
82
85
 
83
86
  ```text
84
87
  dist/
@@ -92,7 +95,7 @@ docs/
92
95
 
93
96
  plus npm-required package metadata such as `package.json`, README and LICENSE.
94
97
 
95
- This is why CI runs `npm pack --dry-run`: bootstrap templates, default agents, skills and toolchain schemas are runtime assets for `aeh init`, not merely repository documentation.
98
+ Packaged `skills/` and core `policies/` are runtime control-plane assets. `aeh init`, `aeh setup`, and `aeh start` reconcile those package assets into the consumer repository's `.harness` directory. `.harness/managed-assets.json` is versioned project state: it records hashes so missing or untouched files can be restored/upgraded, retired untouched assets can be removed, and project-local modifications remain protected as overrides.
96
99
 
97
100
  ## Consumer installation
98
101
 
@@ -103,8 +106,14 @@ npm install --save-dev agentic-engineering-harness
103
106
  npm exec aeh -- init --setup
104
107
  ```
105
108
 
106
- AEH should not be imported into the product runtime merely to use the engineering workflow.
109
+ After the repository has been initialized, a normal:
110
+
111
+ ```bash
112
+ npm exec aeh -- start
113
+ ```
114
+
115
+ reconciles managed Harness assets before loading the agent topology and starting Paseo.
107
116
 
108
117
  ## Failure policy
109
118
 
110
- Publication is a delivery operation, not an engineering-quality gate. A registry/OIDC/permission failure must not cause the source commit to be rewritten or force-pushed. Fix the external publishing configuration and re-run/recreate the release process as appropriate while preserving the already-validated source commit.
119
+ A registry/OIDC/permission failure is an external delivery failure, not a reason to rewrite validated engineering history. The release workflow is retry-safe: if the version commit/tag exists but npm publication failed, a manual rerun with `current` will attempt the same unpublished version rather than incrementing it again. If npm publication succeeded but GitHub Release creation failed, a `current` rerun can repair the release from the existing matching tag.
package/package.json CHANGED
@@ -1,18 +1,93 @@
1
1
  {
2
2
  "name": "agentic-engineering-harness",
3
- "version": "0.6.0",
3
+ "version": "0.6.1",
4
4
  "description": "OSS-first engineering harness for deterministic, spec-driven, issue-driven, audit-governed and orchestration-first multi-agent software delivery.",
5
5
  "type": "module",
6
- "bin": { "engineering-harness": "./dist/entry.js", "aeh": "./dist/entry.js" },
7
- "files": ["dist", "templates", "presets", "policies", "schemas", "skills", "docs"],
8
- "scripts": { "build": "tsc -p tsconfig.json", "dev": "tsx src/entry.ts", "test": "vitest run", "test:watch": "vitest", "typecheck": "tsc -p tsconfig.json --noEmit", "check": "npm run typecheck && npm test && npm run build", "release:check": "npm run check && npm pack --dry-run" },
9
- "engines": { "node": ">=22" },
10
- "dependencies": { "@opentelemetry/api": "^1.9.0", "commander": "^14.0.1", "minimatch": "^10.0.3", "yaml": "^2.8.1", "zod": "^4.0.17" },
11
- "devDependencies": { "@types/node": "^24.2.1", "tsx": "^4.20.3", "typescript": "^5.9.2", "vitest": "^3.2.4" },
12
- "repository": { "type": "git", "url": "git+https://github.com/JamesMorales04/agentic-engineering-harness.git" },
6
+ "bin": {
7
+ "engineering-harness": "./dist/entry.js",
8
+ "aeh": "./dist/entry.js"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "templates",
13
+ "presets",
14
+ "policies",
15
+ "schemas",
16
+ "skills",
17
+ "docs"
18
+ ],
19
+ "scripts": {
20
+ "build": "tsc -p tsconfig.json",
21
+ "dev": "tsx src/entry.ts",
22
+ "test": "vitest run",
23
+ "test:watch": "vitest",
24
+ "typecheck": "tsc -p tsconfig.json --noEmit",
25
+ "check": "npm run typecheck && npm test && npm run build",
26
+ "release:check": "npm run check && npm pack --dry-run",
27
+ "release:resolve": "node scripts/release-version.mjs"
28
+ },
29
+ "engines": {
30
+ "node": ">=22"
31
+ },
32
+ "dependencies": {
33
+ "@opentelemetry/api": "^1.9.0",
34
+ "commander": "^14.0.1",
35
+ "minimatch": "^10.0.3",
36
+ "yaml": "^2.8.1",
37
+ "zod": "^4.0.17"
38
+ },
39
+ "devDependencies": {
40
+ "@types/node": "^24.2.1",
41
+ "tsx": "^4.20.3",
42
+ "typescript": "^5.9.2",
43
+ "vitest": "^3.2.4"
44
+ },
45
+ "repository": {
46
+ "type": "git",
47
+ "url": "git+https://github.com/JamesMorales04/agentic-engineering-harness.git"
48
+ },
13
49
  "homepage": "https://github.com/JamesMorales04/agentic-engineering-harness#readme",
14
- "bugs": { "url": "https://github.com/JamesMorales04/agentic-engineering-harness/issues" },
15
- "publishConfig": { "access": "public" },
50
+ "bugs": {
51
+ "url": "https://github.com/JamesMorales04/agentic-engineering-harness/issues"
52
+ },
53
+ "publishConfig": {
54
+ "access": "public"
55
+ },
16
56
  "license": "Apache-2.0",
17
- "keywords": ["ai-agents", "codex", "opencode", "paseo", "openspec", "sdd", "audit", "code-review", "github-issues", "issue-driven-development", "quick-contract", "gherkin", "agent-routing", "agent-presets", "orchestration", "context-handoff", "mcp", "github-delivery", "worktrees", "multi-model", "multi-worker", "distributed-workers", "quality-convergence", "evidence-graph", "policy-bundles", "sandbox", "toolchain", "mise", "bootstrap", "human-on-exception", "deterministic-validation", "engineering-harness", "slsa", "opentelemetry"]
57
+ "keywords": [
58
+ "ai-agents",
59
+ "codex",
60
+ "opencode",
61
+ "paseo",
62
+ "openspec",
63
+ "sdd",
64
+ "audit",
65
+ "code-review",
66
+ "github-issues",
67
+ "issue-driven-development",
68
+ "quick-contract",
69
+ "gherkin",
70
+ "agent-routing",
71
+ "agent-presets",
72
+ "orchestration",
73
+ "context-handoff",
74
+ "mcp",
75
+ "github-delivery",
76
+ "worktrees",
77
+ "multi-model",
78
+ "multi-worker",
79
+ "distributed-workers",
80
+ "quality-convergence",
81
+ "evidence-graph",
82
+ "policy-bundles",
83
+ "sandbox",
84
+ "toolchain",
85
+ "mise",
86
+ "bootstrap",
87
+ "human-on-exception",
88
+ "deterministic-validation",
89
+ "engineering-harness",
90
+ "slsa",
91
+ "opentelemetry"
92
+ ]
18
93
  }