agentic-engineering-harness 0.8.1 → 0.8.3

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 (103) hide show
  1. package/README.md +8 -0
  2. package/dist/agents/config.js +7 -5
  3. package/dist/agents/config.js.map +1 -1
  4. package/dist/agents/outputContracts.d.ts +1 -1
  5. package/dist/agents/permissions.d.ts +3 -2
  6. package/dist/agents/permissions.js +4 -4
  7. package/dist/agents/permissions.js.map +1 -1
  8. package/dist/agents/routing.js +1 -1
  9. package/dist/agents/routing.js.map +1 -1
  10. package/dist/agents/types.d.ts +15 -0
  11. package/dist/audit/intent.d.ts +12 -1
  12. package/dist/audit/intent.js +44 -13
  13. package/dist/audit/intent.js.map +1 -1
  14. package/dist/audit/intentDecision.d.ts +67 -0
  15. package/dist/audit/intentDecision.js +100 -0
  16. package/dist/audit/intentDecision.js.map +1 -0
  17. package/dist/audit/run.d.ts +3 -0
  18. package/dist/audit/run.js +1 -2
  19. package/dist/audit/run.js.map +1 -1
  20. package/dist/context/budget.d.ts +20 -0
  21. package/dist/context/budget.js +39 -0
  22. package/dist/context/budget.js.map +1 -1
  23. package/dist/context/gateway.js +73 -19
  24. package/dist/context/gateway.js.map +1 -1
  25. package/dist/context/preflight.d.ts +9 -2
  26. package/dist/context/preflight.js +30 -10
  27. package/dist/context/preflight.js.map +1 -1
  28. package/dist/context/projectors/index.d.ts +1 -0
  29. package/dist/context/projectors/index.js +1 -0
  30. package/dist/context/projectors/index.js.map +1 -1
  31. package/dist/context/projectors/informational.d.ts +48 -0
  32. package/dist/context/projectors/informational.js +154 -0
  33. package/dist/context/projectors/informational.js.map +1 -0
  34. package/dist/context/repository/map.js +1 -1
  35. package/dist/context/repository/map.js.map +1 -1
  36. package/dist/context/transport.d.ts +33 -1
  37. package/dist/context/transport.js +127 -23
  38. package/dist/context/transport.js.map +1 -1
  39. package/dist/context/types.d.ts +4 -4
  40. package/dist/core/config.js +13 -0
  41. package/dist/core/config.js.map +1 -1
  42. package/dist/core/run.js +0 -2
  43. package/dist/core/run.js.map +1 -1
  44. package/dist/core/types.d.ts +9 -0
  45. package/dist/entry.js +15 -8
  46. package/dist/entry.js.map +1 -1
  47. package/dist/evals/fullStack.js +6 -2
  48. package/dist/evals/fullStack.js.map +1 -1
  49. package/dist/informational/answer.d.ts +41 -0
  50. package/dist/informational/answer.js +160 -0
  51. package/dist/informational/answer.js.map +1 -0
  52. package/dist/informational/evidence.d.ts +47 -0
  53. package/dist/informational/evidence.js +228 -0
  54. package/dist/informational/evidence.js.map +1 -0
  55. package/dist/issues/intake.d.ts +1 -1
  56. package/dist/main.js +4 -1
  57. package/dist/main.js.map +1 -1
  58. package/dist/operations/change.js +0 -2
  59. package/dist/operations/change.js.map +1 -1
  60. package/dist/operations/completion.js +2 -0
  61. package/dist/operations/completion.js.map +1 -1
  62. package/dist/operations/controller.js +7 -3
  63. package/dist/operations/controller.js.map +1 -1
  64. package/dist/operations/evidence.d.ts +22 -0
  65. package/dist/operations/evidence.js +38 -0
  66. package/dist/operations/evidence.js.map +1 -0
  67. package/dist/operations/mcp.d.ts +7 -0
  68. package/dist/operations/mcp.js +78 -12
  69. package/dist/operations/mcp.js.map +1 -1
  70. package/dist/operations/state.d.ts +5 -0
  71. package/dist/operations/state.js.map +1 -1
  72. package/dist/paseo/deterministicSession.d.ts +10 -2
  73. package/dist/paseo/deterministicSession.js +39 -5
  74. package/dist/paseo/deterministicSession.js.map +1 -1
  75. package/dist/paseo/launchSpec.d.ts +2 -0
  76. package/dist/paseo/launchSpec.js +5 -5
  77. package/dist/paseo/launchSpec.js.map +1 -1
  78. package/dist/paseo/start.d.ts +1 -1
  79. package/dist/paseo/start.js +7 -1
  80. package/dist/paseo/start.js.map +1 -1
  81. package/dist/providers/engram.js +7 -3
  82. package/dist/providers/engram.js.map +1 -1
  83. package/dist/validators/external.js +7 -1
  84. package/dist/validators/external.js.map +1 -1
  85. package/dist/workers/agentPrompt.d.ts +2 -0
  86. package/dist/workers/agentPrompt.js +13 -15
  87. package/dist/workers/agentPrompt.js.map +1 -1
  88. package/dist/workers/direct.js +10 -4
  89. package/dist/workers/direct.js.map +1 -1
  90. package/dist/workers/paseo.js +13 -4
  91. package/dist/workers/paseo.js.map +1 -1
  92. package/dist/workers/podman.js +10 -4
  93. package/dist/workers/podman.js.map +1 -1
  94. package/docs/ARCHITECTURE.md +40 -0
  95. package/docs/CONTEXT_EFFICIENCY.md +48 -2
  96. package/docs/EVALS.md +12 -0
  97. package/docs/OPERATION_SUPERVISION.md +14 -0
  98. package/docs/PASEO.md +35 -1
  99. package/docs/VALIDATION.md +8 -0
  100. package/package.json +1 -1
  101. package/presets/agents/default.jsonc +3 -3
  102. package/presets/agents/orchestration.jsonc +1 -0
  103. package/templates/project.yaml +10 -0
@@ -1,6 +1,7 @@
1
1
  export * from "./audit.js";
2
2
  export * from "./diff.js";
3
3
  export * from "./explorer.js";
4
+ export * from "./informational.js";
4
5
  export * from "./operation.js";
5
6
  export * from "./planner.js";
6
7
  export * from "./source.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/context/projectors/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/context/projectors/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,48 @@
1
+ import type { InformationalContextBudget } from "../budget.js";
2
+ import type { UserFacingClaim } from "../../operations/evidence.js";
3
+ export interface InformationalProjectionSourceInput {
4
+ path: string;
5
+ ref: string;
6
+ sha256: string;
7
+ fileSha256?: string;
8
+ relevance: string;
9
+ content: string;
10
+ }
11
+ export interface InformationalProjectedSource {
12
+ path: string;
13
+ ref: string;
14
+ sha256: string;
15
+ fileSha256?: string;
16
+ relevance: string;
17
+ summary: string;
18
+ }
19
+ export interface InformationalProjectionMetrics {
20
+ rawEvidenceTokens: number;
21
+ legacyPayloadTokens: number;
22
+ projectedPayloadTokens: number;
23
+ informationalPayloadTokens: number;
24
+ duplicatePayloadTokensAvoided: number;
25
+ sourceCount: number;
26
+ projectedSourceCount: number;
27
+ deferredSourceCount: number;
28
+ targetTokens: number;
29
+ softLimitTokens: number;
30
+ exceptionalTokens: number;
31
+ headroomAttempted: boolean;
32
+ headroomApplied: boolean;
33
+ }
34
+ export interface InformationalContextProjection {
35
+ claims: UserFacingClaim[];
36
+ sources: InformationalProjectedSource[];
37
+ summary: string;
38
+ human: string;
39
+ metrics: InformationalProjectionMetrics;
40
+ }
41
+ /**
42
+ * Project repository evidence into a lead-sized informational result. Raw
43
+ * source bytes are intentionally absent; every claim and source points to a
44
+ * live repository-relative evidence ref instead.
45
+ */
46
+ export declare function projectInformationalContext(request: string, provider: string, input: InformationalProjectionSourceInput[], budget: InformationalContextBudget): InformationalContextProjection;
47
+ /** Deterministic estimate of the exact former lead-visible representation from main. */
48
+ export declare function estimateLegacyInformationalTokens(input: InformationalProjectionSourceInput[], provider?: string): number;
@@ -0,0 +1,154 @@
1
+ import { estimateTokens } from "../estimator.js";
2
+ import { sha256 } from "../provenance.js";
3
+ /**
4
+ * Project repository evidence into a lead-sized informational result. Raw
5
+ * source bytes are intentionally absent; every claim and source points to a
6
+ * live repository-relative evidence ref instead.
7
+ */
8
+ export function projectInformationalContext(request, provider, input, budget) {
9
+ const unique = deduplicateSources(input);
10
+ const projectedSources = unique.map((source) => ({
11
+ path: source.path,
12
+ ref: source.ref,
13
+ sha256: source.sha256,
14
+ ...(source.fileSha256 ? { fileSha256: source.fileSha256 } : {}),
15
+ relevance: source.relevance,
16
+ summary: summarizeSource(source.content, request, budget.sourceSummaryTokens)
17
+ }));
18
+ const sourceCount = unique.length;
19
+ const rawEvidenceTokens = unique.reduce((sum, source) => sum + estimateTokens(source.content), 0);
20
+ const baseClaims = [
21
+ { text: `The answer is grounded in a bounded read-only repository context containing ${sourceCount} source file(s).`, source: "repository-context", verified: true, evidenceRefs: unique.map((source) => source.ref), priority: 80 },
22
+ { text: "No engineering operation, audit report, findings, TaskContract, or delivery artifact was created for this informational request.", source: "repository-context", verified: true, priority: 100 }
23
+ ];
24
+ const sources = fitSources(projectedSources, baseClaims, provider, budget);
25
+ const claims = baseClaims.map((claim) => ({ ...claim, evidenceRefs: claim.evidenceRefs?.filter((ref) => sources.some((source) => source.ref === ref)) }));
26
+ const summary = summarizeProjection(sources, request, budget.exceptionalTokens);
27
+ const human = [
28
+ "INFORMATIONAL — repository-grounded answer (no engineering lifecycle created).",
29
+ sources.length ? `The compact projection contains ${sources.length} verified source summary(ies); deeper source detail is available by explicit evidence reference.` : "No readable matching source was available; no implementation claim is asserted.",
30
+ "Evidence provenance: repository-context. Source details remain available by reference and are retrieved only when needed."
31
+ ].join("\n\n");
32
+ const projectedAnswer = { intent: "informational", provenance: ["repository-context"], inspected: { provider, fileCount: sourceCount, bounded: true }, claims, sources, summary, human };
33
+ const projectedPayloadTokens = estimateTokens(JSON.stringify(projectedAnswer));
34
+ const informationalPayloadTokens = projectedPayloadTokens + estimateTokens("Bounded repository-grounded informational answer available in structuredContent.");
35
+ const legacyPayloadTokens = estimateLegacyInformationalTokens(input, provider);
36
+ return {
37
+ claims,
38
+ sources,
39
+ summary,
40
+ human,
41
+ metrics: {
42
+ rawEvidenceTokens,
43
+ legacyPayloadTokens,
44
+ projectedPayloadTokens,
45
+ informationalPayloadTokens,
46
+ duplicatePayloadTokensAvoided: Math.max(0, legacyPayloadTokens - informationalPayloadTokens),
47
+ sourceCount,
48
+ projectedSourceCount: sources.length,
49
+ deferredSourceCount: sources.filter((source) => source.summary.startsWith("Summary deferred")).length,
50
+ targetTokens: budget.targetTokens,
51
+ softLimitTokens: budget.softLimitTokens,
52
+ exceptionalTokens: budget.exceptionalTokens,
53
+ headroomAttempted: false,
54
+ headroomApplied: false
55
+ }
56
+ };
57
+ }
58
+ /** Deterministic estimate of the exact former lead-visible representation from main. */
59
+ export function estimateLegacyInformationalTokens(input, provider = "filesystem") {
60
+ const sources = [];
61
+ let totalBytes = 0;
62
+ for (const source of input.slice(0, 8)) {
63
+ if (totalBytes >= 20_000)
64
+ break;
65
+ const excerpt = source.content.slice(0, Math.min(4_000, 20_000 - totalBytes));
66
+ if (!excerpt)
67
+ continue;
68
+ totalBytes += Buffer.byteLength(excerpt, "utf8");
69
+ sources.push({ path: source.path, excerpt, sha256: sha256(excerpt) });
70
+ }
71
+ const claims = [
72
+ { text: `The answer is grounded in a bounded read-only repository context containing ${sources.length} source file(s).`, source: "repository-context", verified: true },
73
+ { text: "No engineering operation, audit report, findings, TaskContract, or delivery artifact was created for this informational request.", source: "repository-context", verified: true }
74
+ ];
75
+ const pathLines = sources.length ? sources.map((source) => `- ${source.path}`).join("\n") : "- No matching readable source file was available; repository-map metadata was still consulted.";
76
+ const excerptText = sources.slice(0, 4).map((source) => `\n${source.path}:\n${compactExcerpt(source.excerpt)}`).join("\n");
77
+ const human = [
78
+ "INFORMATIONAL — repository-grounded answer (no engineering lifecycle created).",
79
+ `I used the bounded repository-context surface to orient this explanation. Relevant files:\n${pathLines}`,
80
+ sources.length ? `The selected source excerpts are the evidence for the explanation; they are repository context, not audit findings.${excerptText}` : "The repository context map did not expose a readable matching source file, so no implementation claim is asserted.",
81
+ "Evidence provenance: repository-context. This answer is explanatory, not an evaluation of correctness or safety."
82
+ ].join("\n\n");
83
+ return estimateTokens(JSON.stringify({ intent: "informational", provenance: ["repository-context"], inspected: { provider, files: sources.map((source) => source.path), bounded: true }, claims, sources, human }));
84
+ }
85
+ function deduplicateSources(input) {
86
+ const seen = new Set();
87
+ const result = [];
88
+ for (const source of input) {
89
+ const key = `${source.path}\u0000${source.sha256}`;
90
+ if (seen.has(key))
91
+ continue;
92
+ seen.add(key);
93
+ result.push(source);
94
+ }
95
+ return result;
96
+ }
97
+ function summarizeSource(content, request, maxTokens) {
98
+ const terms = request.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase().split(/[^a-z0-9]+/).filter((term) => term.length >= 3);
99
+ const lines = content.split(/\r?\n/).map((line) => line.trim()).filter(Boolean);
100
+ const relevant = lines.filter((line) => terms.some((term) => line.toLowerCase().includes(term)));
101
+ const structural = lines.filter((line) => /^(export|import|class|interface|type|function|async function|const|let|enum|public|private|protected)\b/.test(line));
102
+ const selected = [...new Set([...relevant, ...structural, ...lines.slice(0, 2)])].map((line) => truncate(line, 260));
103
+ const bounded = fitTokenLines(selected, maxTokens);
104
+ return bounded ? `Implementation signals: ${bounded}` : "No concise implementation signal was available; use the evidence reference for a targeted source read.";
105
+ }
106
+ function fitSources(sources, claims, provider, budget) {
107
+ let selected = [...sources];
108
+ if (estimateProjectionTokens(selected, claims, provider) > budget.exceptionalTokens) {
109
+ // Keep every reference addressable. Defer prose so a summary budget can
110
+ // never make an otherwise relevant source unreachable.
111
+ selected = selected.map((source) => ({ ...source, summary: "Summary deferred; retrieve this evidence reference for targeted detail." }));
112
+ }
113
+ if (estimateProjectionTokens(selected, claims, provider) > budget.softLimitTokens) {
114
+ selected = selected.map((source) => ({ ...source, summary: fitTokenLines(source.summary.split(/\r?\n/), Math.min(96, budget.sourceSummaryTokens)) }));
115
+ }
116
+ return selected;
117
+ }
118
+ function summarizeProjection(sources, request, maxTokens) {
119
+ if (!sources.length)
120
+ return "The repository context map did not expose a readable matching source file.";
121
+ const question = request.trim().replace(/\s+/g, " ");
122
+ const text = `The bounded repository inspection selected ${sources.length} relevant source file(s) for “${truncate(question, 180)}”. ${sources.map((source) => `${source.path}: ${source.summary.replace(/\n/g, " ")}`).join(" ")}`;
123
+ return fitTokenLines([text], Math.min(maxTokens, 280));
124
+ }
125
+ function estimateProjectionTokens(sources, claims, provider) {
126
+ return estimateTokens(JSON.stringify({ intent: "informational", provenance: ["repository-context"], inspected: { provider, fileCount: sources.length, bounded: true }, claims, sources, summary: summarizeProjection(sources, "repository question", 280) }));
127
+ }
128
+ function fitTokenLines(lines, maxTokens) {
129
+ const selected = [];
130
+ let used = 0;
131
+ for (const line of lines) {
132
+ const remaining = maxTokens - used;
133
+ if (remaining <= 0)
134
+ break;
135
+ const clipped = truncateByTokens(line, remaining);
136
+ if (!clipped)
137
+ break;
138
+ selected.push(clipped);
139
+ used += estimateTokens(`${clipped}\n`);
140
+ }
141
+ return selected.join("\n");
142
+ }
143
+ function truncateByTokens(value, maxTokens) {
144
+ if (estimateTokens(value) <= maxTokens)
145
+ return value;
146
+ const maxChars = Math.max(1, maxTokens * 4 - 3);
147
+ return `${value.slice(0, maxChars)}…`;
148
+ }
149
+ function truncate(value, maxCharacters) { return value.length <= maxCharacters ? value : `${value.slice(0, maxCharacters - 1)}…`; }
150
+ function compactExcerpt(content) {
151
+ const lines = content.split(/\r?\n/).filter((line) => line.trim()).slice(0, 18);
152
+ return lines.join("\n").slice(0, 1_200);
153
+ }
154
+ //# sourceMappingURL=informational.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"informational.js","sourceRoot":"","sources":["../../../src/context/projectors/informational.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@ export async function buildRepositoryContextMap(root, config, request = {}) {
8
8
  return { ...rendered, map: graph };
9
9
  }
10
10
  async function filesystemContextMap(root) {
11
- const ignored = new Set([".git", "node_modules", "dist", ".harness", ".config"]);
11
+ const ignored = new Set([".git", "node_modules", "dist", ".harness", ".config", ".aeh-test-results", "coverage", ".vitest", ".cache"]);
12
12
  const files = [];
13
13
  async function visit(directory) {
14
14
  if (files.length >= 5_000)
@@ -1 +1 @@
1
- {"version":3,"file":"map.js","sourceRoot":"","sources":["../../../src/context/repository/map.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEhD,OAAO,EAAE,mBAAmB,EAA4B,MAAM,aAAa,CAAC;AAE5E,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,IAAY,EAAE,MAA4B,EAAE,UAAiC,EAAE;IAC7H,MAAM,KAAK,GAAG,MAAM,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,gBAAgB,EAAE,SAAS,IAAI,yBAAyB,CAAC,IAAI,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACtJ,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,WAAW,IAAI,KAAK,CAAC,CAAC;IAClG,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;AACrC,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,IAAY;IAC9C,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;IAAC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC7G,KAAK,UAAU,KAAK,CAAC,SAAiB;QACpC,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK;YAAE,OAAO;QAClC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAgC,CAAC,EAAE,CAAC;YACvH,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE,SAAS;YACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAClD,IAAI,KAAK,CAAC,WAAW,EAAE;gBAAE,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;iBAC1C,IAAI,KAAK,CAAC,MAAM,EAAE;gBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;YAC7F,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK;gBAAE,OAAO;QACpC,CAAC;IACH,CAAC;IACD,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;IAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAChC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAC3G,CAAC;AACD,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"map.js","sourceRoot":"","sources":["../../../src/context/repository/map.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEhD,OAAO,EAAE,mBAAmB,EAA4B,MAAM,aAAa,CAAC;AAE5E,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,IAAY,EAAE,MAA4B,EAAE,UAAiC,EAAE;IAC7H,MAAM,KAAK,GAAG,MAAM,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,gBAAgB,EAAE,SAAS,IAAI,yBAAyB,CAAC,IAAI,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACtJ,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,WAAW,IAAI,KAAK,CAAC,CAAC;IAClG,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;AACrC,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,IAAY;IAC9C,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,mBAAmB,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;IAAC,MAAM,KAAK,GAAa,EAAE,CAAC;IACnK,KAAK,UAAU,KAAK,CAAC,SAAiB;QACpC,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK;YAAE,OAAO;QAClC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAgC,CAAC,EAAE,CAAC;YACvH,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE,SAAS;YACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAClD,IAAI,KAAK,CAAC,WAAW,EAAE;gBAAE,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;iBAC1C,IAAI,KAAK,CAAC,MAAM,EAAE;gBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;YAC7F,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK;gBAAE,OAAO;QACpC,CAAC;IACH,CAAC;IACD,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;IAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAChC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAC3G,CAAC;AACD,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC"}
@@ -1,6 +1,19 @@
1
1
  import type { HarnessProjectConfig } from "../core/types.js";
2
- import type { AgentExecutionSelection } from "../agents/types.js";
2
+ import type { AgentExecutionSelection, ContextCapabilityRequirement, RuntimeCapabilities } from "../agents/types.js";
3
3
  import { runProcess } from "../utils/process.js";
4
+ export interface ResolvedContextCapabilityRequirements {
5
+ repositoryMap: ContextCapabilityRequirement;
6
+ semanticRetrieval: ContextCapabilityRequirement;
7
+ rawRetrieval: ContextCapabilityRequirement;
8
+ compression: ContextCapabilityRequirement;
9
+ source: "agent-contract" | "coordinator-default" | "project-default";
10
+ }
11
+ export interface TransportCapabilities {
12
+ mcpProjection: boolean;
13
+ localMcpProjection: boolean;
14
+ directRuntimeConfig: boolean;
15
+ reasons: string[];
16
+ }
4
17
  export interface EffectiveContextCapabilities {
5
18
  contextGateway: boolean;
6
19
  repositoryMap: boolean;
@@ -11,7 +24,23 @@ export interface EffectiveContextCapabilities {
11
24
  context: boolean;
12
25
  headroom: boolean;
13
26
  };
27
+ requirements: ResolvedContextCapabilityRequirements;
28
+ runtimeCapabilities: RuntimeCapabilities;
29
+ transportCapabilities: TransportCapabilities;
30
+ requiredByProject: {
31
+ semanticRetrieval: boolean;
32
+ rawRetrieval: boolean;
33
+ repositoryMap: boolean;
34
+ compression: boolean;
35
+ };
36
+ requiredByExecutionContract: {
37
+ semanticRetrieval: boolean;
38
+ rawRetrieval: boolean;
39
+ repositoryMap: boolean;
40
+ compression: boolean;
41
+ };
14
42
  readinessRequirements: string[];
43
+ degradations: string[];
15
44
  reasons: string[];
16
45
  }
17
46
  export interface TransportProbe {
@@ -24,6 +53,9 @@ export interface PodmanSerenaProbe {
24
53
  exposesSerena: boolean;
25
54
  message: string;
26
55
  }
56
+ export declare function resolveContextCapabilityRequirements(config: HarnessProjectConfig, selection: AgentExecutionSelection): ResolvedContextCapabilityRequirements;
57
+ export declare function runtimeCapabilitiesFor(selection: AgentExecutionSelection): RuntimeCapabilities;
58
+ export declare function transportCapabilitiesFor(config: HarnessProjectConfig, selection: AgentExecutionSelection): TransportCapabilities;
27
59
  /** Resolve effective capabilities without touching external runtimes. */
28
60
  export declare function staticContextCapabilities(config: HarnessProjectConfig, selection: AgentExecutionSelection): EffectiveContextCapabilities;
29
61
  export declare function resolveContextTransportCapabilities(root: string, config: HarnessProjectConfig, selection: AgentExecutionSelection, probe?: TransportProbe & {
@@ -1,44 +1,148 @@
1
1
  import { commandExists, runProcess } from "../utils/process.js";
2
+ /**
3
+ * Runtime defaults are an adapter registry, not policy. Context code consumes
4
+ * capabilities from this registry and from the selected execution contract;
5
+ * it never treats a runtime name as proof that MCP is available.
6
+ */
7
+ const RUNTIME_CAPABILITY_REGISTRY = {
8
+ opencode: { mcp: true, stdioMcp: true, localMcp: true, runtimeConfigInjection: true, nativeToolProjection: true },
9
+ // Codex supports local stdio MCP. AEH's direct adapter does not currently
10
+ // inject project-scoped config, while Paseo projects MCP into the session.
11
+ codex: { mcp: true, stdioMcp: true, localMcp: true, runtimeConfigInjection: false, nativeToolProjection: true }
12
+ };
13
+ const TRANSPORT_CAPABILITY_REGISTRY = {
14
+ paseo: { mcpProjection: true, localMcpProjection: true, directRuntimeConfig: false },
15
+ direct: { mcpProjection: true, localMcpProjection: true, directRuntimeConfig: true },
16
+ podman: { mcpProjection: false, localMcpProjection: false, directRuntimeConfig: false },
17
+ none: { mcpProjection: false, localMcpProjection: false, directRuntimeConfig: false }
18
+ };
19
+ export function resolveContextCapabilityRequirements(config, selection) {
20
+ const configured = selection.contextRequirements;
21
+ const coordinator = selection.role === "orchestrator" || selection.role === "coordinator";
22
+ const semanticConfigured = Boolean(config.context?.semanticRetrieval?.provider && config.context.semanticRetrieval.provider !== "none");
23
+ const semanticDefault = semanticConfigured && config.context?.semanticRetrieval?.required !== false ? "REQUIRED" : "OPTIONAL";
24
+ const compressionConfigured = Boolean(config.context?.compression?.provider && config.context.compression.provider !== "none");
25
+ const defaults = coordinator
26
+ ? { repositoryMap: "FORBIDDEN", semanticRetrieval: "FORBIDDEN", rawRetrieval: "FORBIDDEN", compression: "OPTIONAL" }
27
+ : {
28
+ repositoryMap: "OPTIONAL",
29
+ semanticRetrieval: semanticDefault,
30
+ rawRetrieval: "OPTIONAL",
31
+ compression: compressionConfigured && config.context?.compression?.required !== false ? "REQUIRED" : "OPTIONAL"
32
+ };
33
+ return {
34
+ repositoryMap: configured?.repositoryMap ?? defaults.repositoryMap ?? "OPTIONAL",
35
+ semanticRetrieval: configured?.semanticRetrieval ?? defaults.semanticRetrieval ?? "OPTIONAL",
36
+ rawRetrieval: configured?.rawRetrieval ?? defaults.rawRetrieval ?? "OPTIONAL",
37
+ compression: configured?.compression ?? defaults.compression ?? "OPTIONAL",
38
+ source: configured ? "agent-contract" : coordinator ? "coordinator-default" : "project-default"
39
+ };
40
+ }
41
+ export function runtimeCapabilitiesFor(selection) {
42
+ return { ...(RUNTIME_CAPABILITY_REGISTRY[selection.runtimeAdapter] ?? {}), ...(selection.runtimeCapabilities ?? {}) };
43
+ }
44
+ export function transportCapabilitiesFor(config, selection) {
45
+ const transport = effectiveTransport(config, selection);
46
+ const runtime = runtimeCapabilitiesFor(selection);
47
+ const registered = TRANSPORT_CAPABILITY_REGISTRY[transport] ?? { mcpProjection: false, localMcpProjection: false, directRuntimeConfig: false };
48
+ const reasons = [];
49
+ if (runtime.mcp !== true)
50
+ reasons.push(`runtime '${selection.runtimeName}' does not declare MCP capability`);
51
+ if (runtime.stdioMcp !== true)
52
+ reasons.push(`runtime '${selection.runtimeName}' does not declare stdio MCP capability`);
53
+ if (runtime.localMcp !== true)
54
+ reasons.push(`runtime '${selection.runtimeName}' does not declare local MCP capability`);
55
+ if (!registered.mcpProjection || !registered.localMcpProjection)
56
+ reasons.push(`transport '${transport}' does not project local MCP servers`);
57
+ if (transport === "direct" && runtime.runtimeConfigInjection !== true)
58
+ reasons.push(`direct runtime adapter '${selection.runtimeName}' does not inject project MCP configuration`);
59
+ if (transport === "paseo" && runtime.nativeToolProjection !== true)
60
+ reasons.push(`runtime '${selection.runtimeName}' does not declare native MCP projection through Paseo`);
61
+ return { ...registered, directRuntimeConfig: registered.directRuntimeConfig && runtime.runtimeConfigInjection === true, reasons };
62
+ }
2
63
  /** Resolve effective capabilities without touching external runtimes. */
3
64
  export function staticContextCapabilities(config, selection) {
4
- const transport = effectiveTransport(config, selection);
65
+ const requirements = resolveContextCapabilityRequirements(config, selection);
66
+ const runtimeCapabilities = runtimeCapabilitiesFor(selection);
67
+ const transportCapabilities = transportCapabilitiesFor(config, selection);
5
68
  const semanticConfigured = Boolean(config.context?.semanticRetrieval?.provider && config.context.semanticRetrieval.provider !== "none");
6
- const agentCanUseContext = selection.role !== "orchestrator" && selection.logicalAgent !== "operation-supervisor";
7
- const opencodeSurface = selection.runtimeAdapter === "opencode" && agentCanUseContext;
8
- const directOrPaseo = transport === "direct" || transport === "paseo" || (selection.transport === "inherit" && transport === "none");
9
- const semanticRetrieval = semanticConfigured && opencodeSurface && directOrPaseo;
10
- const authorizedRetrieval = Boolean(config.context) && agentCanUseContext && opencodeSurface && transport !== "podman" && directOrPaseo;
11
- const mcpServers = { serena: semanticRetrieval, context: authorizedRetrieval, headroom: false };
12
- const reasons = [];
13
- const readinessRequirements = [];
69
+ const rawConfigured = Boolean(config.context);
70
+ const repositoryMapConfigured = config.context?.repositoryMap?.enabled !== false;
71
+ const semanticAvailableBySurface = semanticConfigured && requirements.semanticRetrieval !== "FORBIDDEN" && transportCapabilities.reasons.length === 0;
72
+ const semanticRetrieval = semanticAvailableBySurface;
73
+ const authorizedRetrieval = rawConfigured && requirements.rawRetrieval !== "FORBIDDEN" && transportCapabilities.reasons.length === 0;
74
+ const repositoryMap = repositoryMapConfigured && requirements.repositoryMap !== "FORBIDDEN";
75
+ const requiredByProject = {
76
+ semanticRetrieval: semanticConfigured && config.context?.semanticRetrieval?.required !== false,
77
+ rawRetrieval: false,
78
+ repositoryMap: false,
79
+ compression: Boolean(config.context?.compression?.provider && config.context.compression.provider !== "none" && config.context.compression.required !== false)
80
+ };
81
+ const requiredByExecutionContract = {
82
+ semanticRetrieval: requirements.semanticRetrieval === "REQUIRED",
83
+ rawRetrieval: requirements.rawRetrieval === "REQUIRED",
84
+ repositoryMap: requirements.repositoryMap === "REQUIRED",
85
+ compression: requirements.compression === "REQUIRED"
86
+ };
87
+ const reasons = [...transportCapabilities.reasons];
88
+ const degradations = [];
14
89
  if (!semanticConfigured)
15
- reasons.push("semantic retrieval is disabled by project configuration");
16
- if (transport === "podman") {
17
- reasons.push("Podman has no AEH-managed Serena MCP projection; host or image binaries do not prove an executable semantic surface");
18
- readinessRequirements.push("Podman semantic retrieval requires an explicitly wired in-container MCP server");
19
- }
20
- else if (!semanticRetrieval && semanticConfigured) {
21
- reasons.push(`transport '${transport}' and runtime '${selection.runtimeAdapter}' do not expose Serena MCP`);
22
- }
23
- if (!authorizedRetrieval && config.context && transport === "podman")
24
- reasons.push("Podman does not expose the host AEH raw-retrieval MCP");
90
+ reasons.push("semantic retrieval is not configured for this project");
91
+ if (requirements.semanticRetrieval === "FORBIDDEN")
92
+ reasons.push("execution contract forbids semantic repository retrieval");
93
+ if (requirements.rawRetrieval === "FORBIDDEN")
94
+ reasons.push("execution contract forbids raw context retrieval");
95
+ if (requirements.repositoryMap === "FORBIDDEN")
96
+ reasons.push("execution contract forbids repository-map context");
97
+ if (semanticConfigured && requirements.semanticRetrieval !== "FORBIDDEN" && !semanticRetrieval && !requiredByProject.semanticRetrieval)
98
+ degradations.push("Serena unavailable; bounded repository-map/raw context fallback is active");
99
+ const readinessRequirements = [];
25
100
  if (semanticRetrieval)
26
101
  readinessRequirements.push("Serena MCP initialize/tools/list readiness");
27
102
  if (authorizedRetrieval)
28
103
  readinessRequirements.push("AEH context MCP authorization and source-hash verification");
29
- return { contextGateway: true, repositoryMap: true, semanticRetrieval, authorizedRetrieval, mcpServers, readinessRequirements, reasons };
104
+ return {
105
+ contextGateway: true,
106
+ repositoryMap,
107
+ semanticRetrieval,
108
+ authorizedRetrieval,
109
+ mcpServers: { serena: semanticRetrieval, context: authorizedRetrieval, headroom: false },
110
+ requirements,
111
+ runtimeCapabilities,
112
+ transportCapabilities,
113
+ requiredByProject,
114
+ requiredByExecutionContract,
115
+ readinessRequirements,
116
+ degradations,
117
+ reasons
118
+ };
30
119
  }
31
120
  export async function resolveContextTransportCapabilities(root, config, selection, probe = {}) {
32
121
  const capabilities = staticContextCapabilities(config, selection);
33
122
  const semanticConfigured = Boolean(config.context?.semanticRetrieval?.provider && config.context.semanticRetrieval.provider !== "none");
123
+ if (probe.mode === "live" && semanticConfigured && capabilities.semanticRetrieval) {
124
+ const { SerenaSemanticProvider } = await import("./repository/serena.js");
125
+ const health = await new SerenaSemanticProvider().doctor(root);
126
+ if (!health.ok) {
127
+ capabilities.semanticRetrieval = false;
128
+ capabilities.mcpServers.serena = false;
129
+ capabilities.reasons.push(`Serena readiness failed: ${health.message}`);
130
+ if (!capabilities.requiredByProject.semanticRetrieval || !capabilities.requiredByExecutionContract.semanticRetrieval)
131
+ capabilities.degradations.push(`Serena unavailable; explicit fallback: ${health.message}`);
132
+ }
133
+ }
34
134
  if (probe.mode === "live" && effectiveTransport(config, selection) === "podman" && config.security?.sandbox?.image) {
35
135
  const live = await probePodmanSerena(root, config.security.sandbox.image, probe);
36
136
  capabilities.reasons.push(`live Podman probe: ${live.message}`);
37
137
  if (!live.available || !live.imagePresent || !live.exposesSerena)
38
138
  capabilities.readinessRequirements.push("pre-provisioned Podman image with Serena executable");
39
139
  }
40
- if (semanticConfigured && config.context?.semanticRetrieval?.required !== false && !capabilities.semanticRetrieval) {
41
- throw new Error(`UNSUPPORTED_CAPABILITY: Serena semantic retrieval is unavailable for transport '${effectiveTransport(config, selection)}' and runtime '${selection.runtimeAdapter}'. ${capabilities.reasons.join("; ")}`);
140
+ // Project `required=true` is scoped by the contract: it cannot force the
141
+ // coordinator or an OPTIONAL/FORBIDDEN worker surface to use Serena. An
142
+ // explicit execution-contract REQUIRED, however, is independently binding.
143
+ const required = capabilities.requiredByExecutionContract.semanticRetrieval;
144
+ if (required && !capabilities.semanticRetrieval) {
145
+ throw new Error(`UNSUPPORTED_CAPABILITY: Serena semantic retrieval is required by the execution contract, but is unavailable for transport '${effectiveTransport(config, selection)}' and runtime '${selection.runtimeName}'. ${capabilities.reasons.join("; ")}`);
42
146
  }
43
147
  return capabilities;
44
148
  }
@@ -57,7 +161,7 @@ export async function probePodmanSerena(root, image, probe = {}) {
57
161
  : { available: true, imagePresent: true, exposesSerena: false, message: "configured Podman image does not expose Serena" };
58
162
  }
59
163
  function effectiveTransport(config, selection) {
60
- return selection.transport === "inherit" ? (config.orchestration?.provider ?? "none") : selection.transport;
164
+ return !selection.transport || selection.transport === "inherit" ? (config.orchestration?.provider ?? "none") : selection.transport;
61
165
  }
62
166
  function quote(value) { return `'${value.replaceAll("'", "'\\''")}'`; }
63
167
  //# sourceMappingURL=transport.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/context/transport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/context/transport.ts"],"names":[],"mappings":"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"}
@@ -147,12 +147,12 @@ export declare const contextFragmentSchema: z.ZodObject<{
147
147
  memory: "memory";
148
148
  validation: "validation";
149
149
  source: "source";
150
- skill: "skill";
151
- operation: "operation";
152
150
  instruction: "instruction";
153
151
  "execution-envelope": "execution-envelope";
154
152
  "agent-charter": "agent-charter";
153
+ skill: "skill";
155
154
  diff: "diff";
155
+ operation: "operation";
156
156
  handoff: "handoff";
157
157
  "tool-output": "tool-output";
158
158
  "repository-map": "repository-map";
@@ -192,12 +192,12 @@ export declare const contextEnvelopeSchema: z.ZodObject<{
192
192
  memory: "memory";
193
193
  validation: "validation";
194
194
  source: "source";
195
- skill: "skill";
196
- operation: "operation";
197
195
  instruction: "instruction";
198
196
  "execution-envelope": "execution-envelope";
199
197
  "agent-charter": "agent-charter";
198
+ skill: "skill";
200
199
  diff: "diff";
200
+ operation: "operation";
201
201
  handoff: "handoff";
202
202
  "tool-output": "tool-output";
203
203
  "repository-map": "repository-map";
@@ -21,6 +21,19 @@ const contextBudgetSchema = z.object({ inputTokens: z.number().int().positive().
21
21
  const contextSchema = z.object({
22
22
  mode: z.enum(["observe", "enforce"]).optional(),
23
23
  budgets: z.object({ default: contextBudgetSchema.optional(), agents: z.record(z.string(), contextBudgetSchema).optional(), phases: z.record(z.string(), contextBudgetSchema).optional() }).optional(),
24
+ informational: z.object({ targetTokens: z.number().int().positive().optional(), softLimitTokens: z.number().int().positive().optional(), exceptionalTokens: z.number().int().positive().optional(), maxSources: z.number().int().positive().optional(), sourceSummaryTokens: z.number().int().positive().optional(), maxInitialBytesPerSource: z.number().int().positive().optional(), maxInitialBytesTotal: z.number().int().positive().optional() }).optional().superRefine((value, ctx) => {
25
+ const target = value?.targetTokens ?? 8_000;
26
+ const soft = value?.softLimitTokens ?? 12_000;
27
+ const exceptional = value?.exceptionalTokens ?? 15_000;
28
+ if (soft < target)
29
+ ctx.addIssue({ code: "custom", path: ["softLimitTokens"], message: "informational softLimitTokens must be >= targetTokens" });
30
+ if (exceptional < soft)
31
+ ctx.addIssue({ code: "custom", path: ["exceptionalTokens"], message: "informational exceptionalTokens must be >= softLimitTokens" });
32
+ const perSource = value?.maxInitialBytesPerSource ?? 4_000;
33
+ const total = value?.maxInitialBytesTotal ?? 20_000;
34
+ if (total < perSource)
35
+ ctx.addIssue({ code: "custom", path: ["maxInitialBytesTotal"], message: "informational maxInitialBytesTotal must be >= maxInitialBytesPerSource" });
36
+ }),
24
37
  repositoryMap: z.object({ enabled: z.boolean().optional(), tokenBudget: z.number().int().positive().optional(), maxGraphHops: z.number().int().positive().optional() }).optional(),
25
38
  semanticRetrieval: z.object({ provider: z.string().min(1).optional(), required: z.boolean().optional(), editing: z.boolean().optional() }).optional(),
26
39
  compression: z.object({ provider: z.string().min(1).optional(), required: z.boolean().optional(), minTokens: z.number().int().positive().optional(), reversible: z.boolean().optional(), command: z.string().min(1).optional() }).optional(),