agentic-engineering-harness 0.8.2 → 0.8.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.
Files changed (171) hide show
  1. package/README.md +2 -0
  2. package/dist/agents/outputContracts.js +1 -1
  3. package/dist/agents/outputContracts.js.map +1 -1
  4. package/dist/agents/parallelism.js +3 -2
  5. package/dist/agents/parallelism.js.map +1 -1
  6. package/dist/agents/permissions.js +1 -1
  7. package/dist/agents/permissions.js.map +1 -1
  8. package/dist/agents/waveExecutor.js +25 -15
  9. package/dist/agents/waveExecutor.js.map +1 -1
  10. package/dist/audit/intentDecision.d.ts +1 -1
  11. package/dist/certification/adapters.d.ts +4 -0
  12. package/dist/certification/adapters.js +17 -0
  13. package/dist/certification/adapters.js.map +1 -0
  14. package/dist/certification/artifacts.d.ts +3 -0
  15. package/dist/certification/artifacts.js +18 -0
  16. package/dist/certification/artifacts.js.map +1 -0
  17. package/dist/certification/bootstrap.d.ts +33 -0
  18. package/dist/certification/bootstrap.js +138 -0
  19. package/dist/certification/bootstrap.js.map +1 -0
  20. package/dist/certification/codex.d.ts +26 -0
  21. package/dist/certification/codex.js +125 -0
  22. package/dist/certification/codex.js.map +1 -0
  23. package/dist/certification/core.d.ts +15 -0
  24. package/dist/certification/core.js +300 -0
  25. package/dist/certification/core.js.map +1 -0
  26. package/dist/certification/index.d.ts +9 -0
  27. package/dist/certification/index.js +10 -0
  28. package/dist/certification/index.js.map +1 -0
  29. package/dist/certification/oracle.d.ts +11 -0
  30. package/dist/certification/oracle.js +29 -0
  31. package/dist/certification/oracle.js.map +1 -0
  32. package/dist/certification/policy.d.ts +3 -0
  33. package/dist/certification/policy.js +59 -0
  34. package/dist/certification/policy.js.map +1 -0
  35. package/dist/certification/provider.d.ts +27 -0
  36. package/dist/certification/provider.js +170 -0
  37. package/dist/certification/provider.js.map +1 -0
  38. package/dist/certification/types.d.ts +234 -0
  39. package/dist/certification/types.js +2 -0
  40. package/dist/certification/types.js.map +1 -0
  41. package/dist/cli.js +27 -0
  42. package/dist/cli.js.map +1 -1
  43. package/dist/context/budget.d.ts +20 -0
  44. package/dist/context/budget.js +39 -0
  45. package/dist/context/budget.js.map +1 -1
  46. package/dist/context/gateway.d.ts +1 -0
  47. package/dist/context/gateway.js +13 -5
  48. package/dist/context/gateway.js.map +1 -1
  49. package/dist/context/projectors/index.d.ts +1 -0
  50. package/dist/context/projectors/index.js +1 -0
  51. package/dist/context/projectors/index.js.map +1 -1
  52. package/dist/context/projectors/informational.d.ts +48 -0
  53. package/dist/context/projectors/informational.js +154 -0
  54. package/dist/context/projectors/informational.js.map +1 -0
  55. package/dist/context/repository/map.js +1 -1
  56. package/dist/context/repository/map.js.map +1 -1
  57. package/dist/context/retrieval/persisted.d.ts +3 -2
  58. package/dist/context/retrieval/persisted.js +23 -7
  59. package/dist/context/retrieval/persisted.js.map +1 -1
  60. package/dist/context/retrieval/server.js +7 -4
  61. package/dist/context/retrieval/server.js.map +1 -1
  62. package/dist/core/config.js +14 -0
  63. package/dist/core/config.js.map +1 -1
  64. package/dist/core/controlPlane.d.ts +1 -0
  65. package/dist/core/controlPlane.js +12 -0
  66. package/dist/core/controlPlane.js.map +1 -1
  67. package/dist/core/git.d.ts +12 -2
  68. package/dist/core/git.js +31 -5
  69. package/dist/core/git.js.map +1 -1
  70. package/dist/core/run.d.ts +2 -0
  71. package/dist/core/run.js +3 -2
  72. package/dist/core/run.js.map +1 -1
  73. package/dist/core/sdd.js +1 -1
  74. package/dist/core/sdd.js.map +1 -1
  75. package/dist/core/seal.js +4 -3
  76. package/dist/core/seal.js.map +1 -1
  77. package/dist/core/types.d.ts +24 -0
  78. package/dist/core/verify.js +7 -3
  79. package/dist/core/verify.js.map +1 -1
  80. package/dist/distributed/queue.js +24 -6
  81. package/dist/distributed/queue.js.map +1 -1
  82. package/dist/distributed/types.d.ts +1 -0
  83. package/dist/distributed/worker.d.ts +6 -1
  84. package/dist/distributed/worker.js +25 -6
  85. package/dist/distributed/worker.js.map +1 -1
  86. package/dist/evals/fullStack.js +6 -2
  87. package/dist/evals/fullStack.js.map +1 -1
  88. package/dist/evidence/graph.js +2 -2
  89. package/dist/evidence/graph.js.map +1 -1
  90. package/dist/informational/answer.d.ts +23 -7
  91. package/dist/informational/answer.js +104 -34
  92. package/dist/informational/answer.js.map +1 -1
  93. package/dist/informational/evidence.d.ts +47 -0
  94. package/dist/informational/evidence.js +228 -0
  95. package/dist/informational/evidence.js.map +1 -0
  96. package/dist/metrics/usage.js +8 -0
  97. package/dist/metrics/usage.js.map +1 -1
  98. package/dist/operations/change.d.ts +4 -0
  99. package/dist/operations/change.js +34 -11
  100. package/dist/operations/change.js.map +1 -1
  101. package/dist/operations/changeHandoff.d.ts +4 -0
  102. package/dist/operations/changeHandoff.js +2 -2
  103. package/dist/operations/changeHandoff.js.map +1 -1
  104. package/dist/operations/completion.js +38 -27
  105. package/dist/operations/completion.js.map +1 -1
  106. package/dist/operations/controller.js +142 -10
  107. package/dist/operations/controller.js.map +1 -1
  108. package/dist/operations/evidence.d.ts +2 -0
  109. package/dist/operations/evidence.js.map +1 -1
  110. package/dist/operations/livenessV2.js +14 -12
  111. package/dist/operations/livenessV2.js.map +1 -1
  112. package/dist/operations/mcp.js +16 -0
  113. package/dist/operations/mcp.js.map +1 -1
  114. package/dist/operations/monitorProcess.js +11 -1
  115. package/dist/operations/monitorProcess.js.map +1 -1
  116. package/dist/operations/state.d.ts +2 -0
  117. package/dist/operations/state.js +31 -8
  118. package/dist/operations/state.js.map +1 -1
  119. package/dist/operations/supervisor.js +11 -2
  120. package/dist/operations/supervisor.js.map +1 -1
  121. package/dist/paseo/capabilities.js +0 -2
  122. package/dist/paseo/capabilities.js.map +1 -1
  123. package/dist/paseo/launchSpec.js +5 -3
  124. package/dist/paseo/launchSpec.js.map +1 -1
  125. package/dist/paseo/runtime.d.ts +1 -1
  126. package/dist/paseo/runtime.js +1 -1
  127. package/dist/paseo/runtime.js.map +1 -1
  128. package/dist/paseo/runtimeCore.d.ts +4 -0
  129. package/dist/paseo/runtimeCore.js +27 -2
  130. package/dist/paseo/runtimeCore.js.map +1 -1
  131. package/dist/paseo/sdk.d.ts +8 -0
  132. package/dist/paseo/sdk.js +85 -17
  133. package/dist/paseo/sdk.js.map +1 -1
  134. package/dist/paseo/start.js +3 -2
  135. package/dist/paseo/start.js.map +1 -1
  136. package/dist/providers/engram.js +7 -3
  137. package/dist/providers/engram.js.map +1 -1
  138. package/dist/security/sandbox.d.ts +1 -0
  139. package/dist/security/sandbox.js +20 -2
  140. package/dist/security/sandbox.js.map +1 -1
  141. package/dist/utils/process.d.ts +10 -0
  142. package/dist/utils/process.js +171 -6
  143. package/dist/utils/process.js.map +1 -1
  144. package/dist/utils/repositoryPath.d.ts +4 -0
  145. package/dist/utils/repositoryPath.js +23 -0
  146. package/dist/utils/repositoryPath.js.map +1 -0
  147. package/dist/validators/external.js +7 -1
  148. package/dist/validators/external.js.map +1 -1
  149. package/dist/validators/opa.js +2 -2
  150. package/dist/validators/quickAcceptance.d.ts +7 -0
  151. package/dist/validators/quickAcceptance.js +40 -0
  152. package/dist/validators/quickAcceptance.js.map +1 -0
  153. package/dist/workers/agentPrompt.js +247 -32
  154. package/dist/workers/agentPrompt.js.map +1 -1
  155. package/dist/workers/direct.js +9 -10
  156. package/dist/workers/direct.js.map +1 -1
  157. package/dist/workers/directProcess.d.ts +19 -0
  158. package/dist/workers/directProcess.js +147 -0
  159. package/dist/workers/directProcess.js.map +1 -0
  160. package/dist/workers/podman.js +2 -2
  161. package/dist/workers/podman.js.map +1 -1
  162. package/dist/workers/resultCommit.js +1 -1
  163. package/dist/workers/resultCommit.js.map +1 -1
  164. package/dist/workers/resultGateway.d.ts +27 -2
  165. package/dist/workers/resultGateway.js +64 -11
  166. package/dist/workers/resultGateway.js.map +1 -1
  167. package/docs/CERTIFICATION.md +31 -0
  168. package/docs/CONTEXT_EFFICIENCY.md +30 -0
  169. package/package.json +2 -2
  170. package/schemas/project.schema.json +1 -0
  171. package/templates/project.yaml +10 -0
@@ -0,0 +1,31 @@
1
+ # AEH Certification Core
2
+
3
+ AEH certification is a runtime-agnostic quality boundary. `CertificationCore` accepts a `CandidateRevision`, a frozen `CertificationPolicy`, and an independent deterministic `CertificationOracle`. It emits one of:
4
+
5
+ ```text
6
+ ACCEPTED
7
+ REPAIR_REQUIRED
8
+ HUMAN_REQUIRED
9
+ PARTIAL
10
+ BLOCKED
11
+ NOT_TESTED
12
+ ```
13
+
14
+ Capability reports contain separate `contract` and `modelE2E` lanes. A deterministic contract PASS with a blocked or untested model lane is `PARTIAL`, never a full PASS. A campaign requiring model execution is accepted only when the provider receipt proves startup and the oracle verifies model-produced journey evidence.
15
+
16
+ External actors can propose or repair a candidate, but their claimed verdicts never become acceptance evidence. Provider execution is behind `AgentProvider`; the initial `CodexAgentProvider` is a bootstrap adapter and is not part of certification policy or oracle semantics.
17
+
18
+ The bootstrap lane packs the current checkout, installs that pack into a disposable fixture with lifecycle scripts disabled, and evaluates it with an argv-based deterministic command oracle:
19
+
20
+ ```bash
21
+ aeh certification self-dogfood <fixture> \
22
+ --check node \
23
+ --check-args '["-e","process.exit(0)"]' \
24
+ --prompt "Run the fixture task"
25
+ ```
26
+
27
+ The Codex adapter resolves installed CLI capabilities from `codex exec --help`, uses `-c model_reasoning_effort="high"` when the CLI does not expose a reasoning flag, and records requested/effective configuration plus the Codex thread identifier. It uses a temporary controlled `HOME`/`CODEX_HOME` containing only the copied Codex auth file and generated model configuration; the fixture does not receive the host HOME tree.
28
+
29
+ The provider boundary filters ambient environment variables, rejects recursive certification, bounds output and time, and terminates process groups on timeout or output overflow. Direct execution does not enforce OS-level network isolation. Reports therefore record `networkPolicy.requested`, `networkPolicy.enforced`, and `networkPolicy.enforcement`; a policy requiring isolation blocks when the direct transport cannot enforce it.
30
+
31
+ Reports from the CLI are persisted under `.aeh-test-results/certification/<certification-id>.json` with the packed candidate SHA-256 and package identity. Temporary candidate paths remain diagnostic only.
@@ -50,6 +50,36 @@ Budgets are role- and phase-aware. New projects default to `enforce`; `observe`
50
50
 
51
51
  Envelopes carry operation, agent, phase, budget, fragment projections, allowed retrieval IDs and a provenance hash. Large bodies are persisted as `.harness/context/<operation>/...raw`; envelopes contain references and compact content, not lifecycle authority.
52
52
 
53
+ ### Informational fast path
54
+
55
+ Repository-grounded explanations use the same separation without creating an
56
+ engineering operation. `aeh_informational_context` selects a bounded set of
57
+ repository files and returns claims, summaries, direct repository-relative
58
+ source refs, provenance and payload estimates. It does not write evidence,
59
+ telemetry, operations, contracts or other `.harness` artifacts. Source bodies
60
+ are not placed in `structuredContent` or replayed in `human`. The lead can call
61
+ `aeh_informational_evidence` for one explicit
62
+ `repo://...#sha256=<chunk>&file-sha256=<file>&range=<start>-<end>` reference
63
+ when a summary is insufficient. A later bounded range can be requested by
64
+ adding `&read=<start>-<end>` while retaining the original selected chunk and
65
+ file identity. Retrieval verifies the whole file with a streaming hash and
66
+ the selected chunk, retains only bounded returned bytes, and carries the
67
+ requested excerpt once while structured metadata remains compact. Stale,
68
+ forged, traversal and repository-escape references fail explicitly. Legacy
69
+ range-only refs remain readable but cannot authorize a later range.
70
+
71
+ Informational defaults are centralized at an 8K target, 12K soft limit and 15K
72
+ exceptional limit, with eight source candidates, a 4KB per-source initial read
73
+ limit and a 20KB total initial read limit. Projection and deduplication run
74
+ before injection. Telemetry names the quantities it can actually measure:
75
+ `rawEvidenceTokens`, `legacyPayloadTokens`, `projectedPayloadTokens`,
76
+ `informationalPayloadTokens` and `duplicatePayloadTokensAvoided`. These are
77
+ deterministic estimates of repository evidence and serialized payloads; they
78
+ are not claims about actual lead-provider token usage. Source-code strings such
79
+ as PASS/FAIL/WARN/security/uncertainty are summarized as implementation text,
80
+ not promoted to verified runtime findings. Typed validation artifacts retain
81
+ their separate authoritative evidence path.
82
+
53
83
  ## Runtime and troubleshooting
54
84
 
55
85
  Run `aeh doctor` after `aeh init --setup`. Doctor reports the gateway,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentic-engineering-harness",
3
- "version": "0.8.2",
3
+ "version": "0.8.4",
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
6
  "bin": {
@@ -34,7 +34,7 @@
34
34
  "test:system-all": "npm run build && vitest run tests/system && AEH_RELIABILITY_SUITES=system AEH_RELIABILITY_REQUIRE_COMPLETE=1 tsx scripts/generate-reliability-report.ts",
35
35
  "reliability:report": "tsx scripts/generate-reliability-report.ts",
36
36
  "typecheck": "tsc -p tsconfig.json --noEmit",
37
- "check": "npm run typecheck && npm test && npm run build",
37
+ "check": "npm run typecheck && npm run build && npm test",
38
38
  "release:check": "npm run check && npm pack --dry-run",
39
39
  "release:resolve": "node scripts/release-version.mjs"
40
40
  },
@@ -69,6 +69,7 @@
69
69
  "security": { "type": "object", "properties": { "sandbox": { "type": "object", "properties": { "provider": { "type": "string" }, "required": { "type": "boolean" }, "image": { "type": "string" }, "imageDigest": { "type": "string" }, "network": { "type": "boolean" }, "extraArgs": { "type": "array", "items": { "type": "string" } }, "readOnlyRoot": { "type": "boolean" }, "ephemeralHome": { "type": "boolean" }, "noNewPrivileges": { "type": "boolean" }, "capDropAll": { "type": "boolean" }, "pidsLimit": { "type": "integer", "minimum": 1 }, "memory": { "type": "string" }, "cpus": { "type": "number", "exclusiveMinimum": 0 }, "tmpfs": { "type": "array", "items": { "type": "string" } }, "forceForRisks": { "type": "array", "items": { "enum": ["low", "medium", "high"] } }, "environmentAllowlist": { "type": "array", "items": { "type": "string" } }, "credentialEnvAllowlist": { "type": "array", "items": { "type": "string" } } } }, "tools": { "type": "array", "items": { "type": "string" } } } },
70
70
  "telemetry": { "type": "object" },
71
71
  "evals": { "type": "object", "properties": { "corpusDir": { "type": "string" }, "resultsDir": { "type": "string" }, "workspacesDir": { "type": "string" }, "defaultRuns": { "type": "integer", "minimum": 1 }, "confidenceLevel": { "type": "number", "exclusiveMinimum": 0, "exclusiveMaximum": 1 } } },
72
+ "certification": { "type": "object", "properties": { "enabled": { "type": "boolean" }, "policyPath": { "type": "string" }, "provider": { "type": "string" }, "fixtureRoot": { "type": "string" }, "requireSandbox": { "type": "boolean" }, "maxAttempts": { "type": "integer", "minimum": 0 }, "maxDurationMs": { "type": "integer", "minimum": 1 }, "maxCostUsd": { "type": "number", "minimum": 0 }, "maxTotalTokens": { "type": "integer", "minimum": 0 } } },
72
73
  "provenance": { "type": "object", "properties": { "outputDir": { "type": "string" }, "buildType": { "type": "string" }, "cosignKey": { "type": "string" }, "required": { "type": "boolean" }, "sbom": { "type": "object", "properties": { "required": { "type": "boolean" }, "command": { "type": "string" } } }, "signing": { "type": "object", "properties": { "required": { "type": "boolean" }, "key": { "type": "string" } } }, "verification": { "type": "object", "properties": { "required": { "type": "boolean" }, "publicKey": { "type": "string" } } } } }
73
74
  },
74
75
  "$defs": {
@@ -202,6 +202,8 @@ context:
202
202
  default:
203
203
  inputTokens: 16000
204
204
  agents:
205
+ lead:
206
+ inputTokens: 12000
205
207
  explorer:
206
208
  inputTokens: 12000
207
209
  planner:
@@ -214,6 +216,14 @@ context:
214
216
  inputTokens: 14000
215
217
  operation-supervisor:
216
218
  inputTokens: 1500
219
+ informational:
220
+ targetTokens: 8000
221
+ softLimitTokens: 12000
222
+ exceptionalTokens: 15000
223
+ maxSources: 8
224
+ sourceSummaryTokens: 96
225
+ maxInitialBytesPerSource: 4000
226
+ maxInitialBytesTotal: 20000
217
227
  repositoryMap:
218
228
  enabled: true
219
229
  tokenBudget: 2000