@xenosystem/acp-agent 0.1.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.
Files changed (268) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +9 -0
  3. package/README.md +22 -0
  4. package/dist/acpAgentServer.d.ts +43 -0
  5. package/dist/acpAgentServer.d.ts.map +1 -0
  6. package/dist/acpAgentServer.js +450 -0
  7. package/dist/acpAgentServer.js.map +1 -0
  8. package/dist/adapters/adapterContractVersion.d.ts +24 -0
  9. package/dist/adapters/adapterContractVersion.d.ts.map +1 -0
  10. package/dist/adapters/adapterContractVersion.js +29 -0
  11. package/dist/adapters/adapterContractVersion.js.map +1 -0
  12. package/dist/adapters/adapterDiagnostics.d.ts +19 -0
  13. package/dist/adapters/adapterDiagnostics.d.ts.map +1 -0
  14. package/dist/adapters/adapterDiagnostics.js +18 -0
  15. package/dist/adapters/adapterDiagnostics.js.map +1 -0
  16. package/dist/adapters/adapterErrors.d.ts +19 -0
  17. package/dist/adapters/adapterErrors.d.ts.map +1 -0
  18. package/dist/adapters/adapterErrors.js +23 -0
  19. package/dist/adapters/adapterErrors.js.map +1 -0
  20. package/dist/adapters/adapterEventMapper.d.ts +22 -0
  21. package/dist/adapters/adapterEventMapper.d.ts.map +1 -0
  22. package/dist/adapters/adapterEventMapper.js +70 -0
  23. package/dist/adapters/adapterEventMapper.js.map +1 -0
  24. package/dist/adapters/adapterEventParser.d.ts +16 -0
  25. package/dist/adapters/adapterEventParser.d.ts.map +1 -0
  26. package/dist/adapters/adapterEventParser.js +95 -0
  27. package/dist/adapters/adapterEventParser.js.map +1 -0
  28. package/dist/adapters/adapterEventProtocol.d.ts +85 -0
  29. package/dist/adapters/adapterEventProtocol.d.ts.map +1 -0
  30. package/dist/adapters/adapterEventProtocol.js +74 -0
  31. package/dist/adapters/adapterEventProtocol.js.map +1 -0
  32. package/dist/adapters/adapterFailureTaxonomy.d.ts +19 -0
  33. package/dist/adapters/adapterFailureTaxonomy.d.ts.map +1 -0
  34. package/dist/adapters/adapterFailureTaxonomy.js +62 -0
  35. package/dist/adapters/adapterFailureTaxonomy.js.map +1 -0
  36. package/dist/adapters/adapterHarnessTypes.d.ts +103 -0
  37. package/dist/adapters/adapterHarnessTypes.d.ts.map +1 -0
  38. package/dist/adapters/adapterHarnessTypes.js +15 -0
  39. package/dist/adapters/adapterHarnessTypes.js.map +1 -0
  40. package/dist/adapters/adapterProcessHarness.d.ts +23 -0
  41. package/dist/adapters/adapterProcessHarness.d.ts.map +1 -0
  42. package/dist/adapters/adapterProcessHarness.js +235 -0
  43. package/dist/adapters/adapterProcessHarness.js.map +1 -0
  44. package/dist/adapters/providerContractTypes.d.ts +64 -0
  45. package/dist/adapters/providerContractTypes.d.ts.map +1 -0
  46. package/dist/adapters/providerContractTypes.js +79 -0
  47. package/dist/adapters/providerContractTypes.js.map +1 -0
  48. package/dist/adapters/testAdapterProvider.d.ts +19 -0
  49. package/dist/adapters/testAdapterProvider.d.ts.map +1 -0
  50. package/dist/adapters/testAdapterProvider.js +95 -0
  51. package/dist/adapters/testAdapterProvider.js.map +1 -0
  52. package/dist/cli.d.ts +16 -0
  53. package/dist/cli.d.ts.map +1 -0
  54. package/dist/cli.js +1059 -0
  55. package/dist/cli.js.map +1 -0
  56. package/dist/config/providerApprovalStore.d.ts +39 -0
  57. package/dist/config/providerApprovalStore.d.ts.map +1 -0
  58. package/dist/config/providerApprovalStore.js +87 -0
  59. package/dist/config/providerApprovalStore.js.map +1 -0
  60. package/dist/config/providerApprovalTypes.d.ts +30 -0
  61. package/dist/config/providerApprovalTypes.d.ts.map +1 -0
  62. package/dist/config/providerApprovalTypes.js +11 -0
  63. package/dist/config/providerApprovalTypes.js.map +1 -0
  64. package/dist/config/providerPolicyConfig.d.ts +31 -0
  65. package/dist/config/providerPolicyConfig.d.ts.map +1 -0
  66. package/dist/config/providerPolicyConfig.js +111 -0
  67. package/dist/config/providerPolicyConfig.js.map +1 -0
  68. package/dist/config/providerPolicyDiagnostics.d.ts +49 -0
  69. package/dist/config/providerPolicyDiagnostics.d.ts.map +1 -0
  70. package/dist/config/providerPolicyDiagnostics.js +76 -0
  71. package/dist/config/providerPolicyDiagnostics.js.map +1 -0
  72. package/dist/config/providerPolicyHash.d.ts +14 -0
  73. package/dist/config/providerPolicyHash.d.ts.map +1 -0
  74. package/dist/config/providerPolicyHash.js +65 -0
  75. package/dist/config/providerPolicyHash.js.map +1 -0
  76. package/dist/config/providerPolicySchema.d.ts +32 -0
  77. package/dist/config/providerPolicySchema.d.ts.map +1 -0
  78. package/dist/config/providerPolicySchema.js +130 -0
  79. package/dist/config/providerPolicySchema.js.map +1 -0
  80. package/dist/config/providerRunnability.d.ts +36 -0
  81. package/dist/config/providerRunnability.d.ts.map +1 -0
  82. package/dist/config/providerRunnability.js +72 -0
  83. package/dist/config/providerRunnability.js.map +1 -0
  84. package/dist/errors.d.ts +31 -0
  85. package/dist/errors.d.ts.map +1 -0
  86. package/dist/errors.js +45 -0
  87. package/dist/errors.js.map +1 -0
  88. package/dist/index.d.ts +79 -0
  89. package/dist/index.d.ts.map +1 -0
  90. package/dist/index.js +83 -0
  91. package/dist/index.js.map +1 -0
  92. package/dist/process/providerProcessAudit.d.ts +14 -0
  93. package/dist/process/providerProcessAudit.d.ts.map +1 -0
  94. package/dist/process/providerProcessAudit.js +27 -0
  95. package/dist/process/providerProcessAudit.js.map +1 -0
  96. package/dist/process/providerProcessDiagnostics.d.ts +30 -0
  97. package/dist/process/providerProcessDiagnostics.d.ts.map +1 -0
  98. package/dist/process/providerProcessDiagnostics.js +51 -0
  99. package/dist/process/providerProcessDiagnostics.js.map +1 -0
  100. package/dist/process/providerProcessEnvironment.d.ts +29 -0
  101. package/dist/process/providerProcessEnvironment.d.ts.map +1 -0
  102. package/dist/process/providerProcessEnvironment.js +37 -0
  103. package/dist/process/providerProcessEnvironment.js.map +1 -0
  104. package/dist/process/providerProcessErrors.d.ts +21 -0
  105. package/dist/process/providerProcessErrors.d.ts.map +1 -0
  106. package/dist/process/providerProcessErrors.js +25 -0
  107. package/dist/process/providerProcessErrors.js.map +1 -0
  108. package/dist/process/providerProcessOutput.d.ts +24 -0
  109. package/dist/process/providerProcessOutput.d.ts.map +1 -0
  110. package/dist/process/providerProcessOutput.js +52 -0
  111. package/dist/process/providerProcessOutput.js.map +1 -0
  112. package/dist/process/providerProcessSupervisor.d.ts +40 -0
  113. package/dist/process/providerProcessSupervisor.d.ts.map +1 -0
  114. package/dist/process/providerProcessSupervisor.js +305 -0
  115. package/dist/process/providerProcessSupervisor.js.map +1 -0
  116. package/dist/process/providerProcessTypes.d.ts +114 -0
  117. package/dist/process/providerProcessTypes.d.ts.map +1 -0
  118. package/dist/process/providerProcessTypes.js +30 -0
  119. package/dist/process/providerProcessTypes.js.map +1 -0
  120. package/dist/process/providerProcessValidation.d.ts +26 -0
  121. package/dist/process/providerProcessValidation.d.ts.map +1 -0
  122. package/dist/process/providerProcessValidation.js +112 -0
  123. package/dist/process/providerProcessValidation.js.map +1 -0
  124. package/dist/process/providerProcessWorkspace.d.ts +38 -0
  125. package/dist/process/providerProcessWorkspace.d.ts.map +1 -0
  126. package/dist/process/providerProcessWorkspace.js +86 -0
  127. package/dist/process/providerProcessWorkspace.js.map +1 -0
  128. package/dist/providers/claudeLocalProvider.d.ts +68 -0
  129. package/dist/providers/claudeLocalProvider.d.ts.map +1 -0
  130. package/dist/providers/claudeLocalProvider.js +217 -0
  131. package/dist/providers/claudeLocalProvider.js.map +1 -0
  132. package/dist/providers/claudeStreamJsonParser.d.ts +39 -0
  133. package/dist/providers/claudeStreamJsonParser.d.ts.map +1 -0
  134. package/dist/providers/claudeStreamJsonParser.js +180 -0
  135. package/dist/providers/claudeStreamJsonParser.js.map +1 -0
  136. package/dist/providers/codexExecJsonParser.d.ts +38 -0
  137. package/dist/providers/codexExecJsonParser.d.ts.map +1 -0
  138. package/dist/providers/codexExecJsonParser.js +245 -0
  139. package/dist/providers/codexExecJsonParser.js.map +1 -0
  140. package/dist/providers/codexLocalProvider.d.ts +46 -0
  141. package/dist/providers/codexLocalProvider.d.ts.map +1 -0
  142. package/dist/providers/codexLocalProvider.js +430 -0
  143. package/dist/providers/codexLocalProvider.js.map +1 -0
  144. package/dist/providers/codexModelCatalog.d.ts +13 -0
  145. package/dist/providers/codexModelCatalog.d.ts.map +1 -0
  146. package/dist/providers/codexModelCatalog.js +133 -0
  147. package/dist/providers/codexModelCatalog.js.map +1 -0
  148. package/dist/providers/fixtureProvider.d.ts +14 -0
  149. package/dist/providers/fixtureProvider.d.ts.map +1 -0
  150. package/dist/providers/fixtureProvider.js +160 -0
  151. package/dist/providers/fixtureProvider.js.map +1 -0
  152. package/dist/providers/providerDiscovery.d.ts +24 -0
  153. package/dist/providers/providerDiscovery.d.ts.map +1 -0
  154. package/dist/providers/providerDiscovery.js +128 -0
  155. package/dist/providers/providerDiscovery.js.map +1 -0
  156. package/dist/providers/providerErrors.d.ts +64 -0
  157. package/dist/providers/providerErrors.d.ts.map +1 -0
  158. package/dist/providers/providerErrors.js +101 -0
  159. package/dist/providers/providerErrors.js.map +1 -0
  160. package/dist/providers/providerEvents.d.ts +63 -0
  161. package/dist/providers/providerEvents.d.ts.map +1 -0
  162. package/dist/providers/providerEvents.js +86 -0
  163. package/dist/providers/providerEvents.js.map +1 -0
  164. package/dist/providers/providerRegistry.d.ts +31 -0
  165. package/dist/providers/providerRegistry.d.ts.map +1 -0
  166. package/dist/providers/providerRegistry.js +234 -0
  167. package/dist/providers/providerRegistry.js.map +1 -0
  168. package/dist/providers/providerSafety.d.ts +17 -0
  169. package/dist/providers/providerSafety.d.ts.map +1 -0
  170. package/dist/providers/providerSafety.js +36 -0
  171. package/dist/providers/providerSafety.js.map +1 -0
  172. package/dist/providers/providerTypes.d.ts +212 -0
  173. package/dist/providers/providerTypes.d.ts.map +1 -0
  174. package/dist/providers/providerTypes.js +15 -0
  175. package/dist/providers/providerTypes.js.map +1 -0
  176. package/dist/providers/xenoLocalProvider.d.ts +35 -0
  177. package/dist/providers/xenoLocalProvider.d.ts.map +1 -0
  178. package/dist/providers/xenoLocalProvider.js +159 -0
  179. package/dist/providers/xenoLocalProvider.js.map +1 -0
  180. package/dist/sandbox/providerSandbox.d.ts +35 -0
  181. package/dist/sandbox/providerSandbox.d.ts.map +1 -0
  182. package/dist/sandbox/providerSandbox.js +93 -0
  183. package/dist/sandbox/providerSandbox.js.map +1 -0
  184. package/dist/sandbox/providerSandboxAudit.d.ts +12 -0
  185. package/dist/sandbox/providerSandboxAudit.d.ts.map +1 -0
  186. package/dist/sandbox/providerSandboxAudit.js +25 -0
  187. package/dist/sandbox/providerSandboxAudit.js.map +1 -0
  188. package/dist/sandbox/providerSandboxDiagnostics.d.ts +13 -0
  189. package/dist/sandbox/providerSandboxDiagnostics.d.ts.map +1 -0
  190. package/dist/sandbox/providerSandboxDiagnostics.js +28 -0
  191. package/dist/sandbox/providerSandboxDiagnostics.js.map +1 -0
  192. package/dist/sandbox/providerSandboxTypes.d.ts +138 -0
  193. package/dist/sandbox/providerSandboxTypes.d.ts.map +1 -0
  194. package/dist/sandbox/providerSandboxTypes.js +17 -0
  195. package/dist/sandbox/providerSandboxTypes.js.map +1 -0
  196. package/dist/sandbox/sandboxCancellation.d.ts +6 -0
  197. package/dist/sandbox/sandboxCancellation.d.ts.map +1 -0
  198. package/dist/sandbox/sandboxCancellation.js +24 -0
  199. package/dist/sandbox/sandboxCancellation.js.map +1 -0
  200. package/dist/sandbox/sandboxErrors.d.ts +17 -0
  201. package/dist/sandbox/sandboxErrors.d.ts.map +1 -0
  202. package/dist/sandbox/sandboxErrors.js +21 -0
  203. package/dist/sandbox/sandboxErrors.js.map +1 -0
  204. package/dist/sandbox/sandboxFilesystem.d.ts +14 -0
  205. package/dist/sandbox/sandboxFilesystem.d.ts.map +1 -0
  206. package/dist/sandbox/sandboxFilesystem.js +51 -0
  207. package/dist/sandbox/sandboxFilesystem.js.map +1 -0
  208. package/dist/sandbox/sandboxNetwork.d.ts +14 -0
  209. package/dist/sandbox/sandboxNetwork.d.ts.map +1 -0
  210. package/dist/sandbox/sandboxNetwork.js +60 -0
  211. package/dist/sandbox/sandboxNetwork.js.map +1 -0
  212. package/dist/sandbox/sandboxSecrets.d.ts +17 -0
  213. package/dist/sandbox/sandboxSecrets.d.ts.map +1 -0
  214. package/dist/sandbox/sandboxSecrets.js +61 -0
  215. package/dist/sandbox/sandboxSecrets.js.map +1 -0
  216. package/dist/sandbox/sandboxTerminal.d.ts +14 -0
  217. package/dist/sandbox/sandboxTerminal.d.ts.map +1 -0
  218. package/dist/sandbox/sandboxTerminal.js +32 -0
  219. package/dist/sandbox/sandboxTerminal.js.map +1 -0
  220. package/dist/security/authPolicy.d.ts +31 -0
  221. package/dist/security/authPolicy.d.ts.map +1 -0
  222. package/dist/security/authPolicy.js +72 -0
  223. package/dist/security/authPolicy.js.map +1 -0
  224. package/dist/security/capabilityGate.d.ts +16 -0
  225. package/dist/security/capabilityGate.d.ts.map +1 -0
  226. package/dist/security/capabilityGate.js +101 -0
  227. package/dist/security/capabilityGate.js.map +1 -0
  228. package/dist/security/egressPolicy.d.ts +31 -0
  229. package/dist/security/egressPolicy.d.ts.map +1 -0
  230. package/dist/security/egressPolicy.js +120 -0
  231. package/dist/security/egressPolicy.js.map +1 -0
  232. package/dist/security/redaction.d.ts +16 -0
  233. package/dist/security/redaction.d.ts.map +1 -0
  234. package/dist/security/redaction.js +65 -0
  235. package/dist/security/redaction.js.map +1 -0
  236. package/dist/security/secretBinding.d.ts +34 -0
  237. package/dist/security/secretBinding.d.ts.map +1 -0
  238. package/dist/security/secretBinding.js +66 -0
  239. package/dist/security/secretBinding.js.map +1 -0
  240. package/dist/security/secretStore.d.ts +37 -0
  241. package/dist/security/secretStore.d.ts.map +1 -0
  242. package/dist/security/secretStore.js +55 -0
  243. package/dist/security/secretStore.js.map +1 -0
  244. package/dist/security/securityDiagnostics.d.ts +39 -0
  245. package/dist/security/securityDiagnostics.d.ts.map +1 -0
  246. package/dist/security/securityDiagnostics.js +36 -0
  247. package/dist/security/securityDiagnostics.js.map +1 -0
  248. package/dist/security/securityTypes.d.ts +77 -0
  249. package/dist/security/securityTypes.d.ts.map +1 -0
  250. package/dist/security/securityTypes.js +17 -0
  251. package/dist/security/securityTypes.js.map +1 -0
  252. package/dist/sessionStore.d.ts +33 -0
  253. package/dist/sessionStore.d.ts.map +1 -0
  254. package/dist/sessionStore.js +42 -0
  255. package/dist/sessionStore.js.map +1 -0
  256. package/dist/stdioJsonRpc.d.ts +43 -0
  257. package/dist/stdioJsonRpc.d.ts.map +1 -0
  258. package/dist/stdioJsonRpc.js +219 -0
  259. package/dist/stdioJsonRpc.js.map +1 -0
  260. package/dist/types.d.ts +78 -0
  261. package/dist/types.d.ts.map +1 -0
  262. package/dist/types.js +12 -0
  263. package/dist/types.js.map +1 -0
  264. package/dist/version.d.ts +7 -0
  265. package/dist/version.d.ts.map +1 -0
  266. package/dist/version.js +7 -0
  267. package/dist/version.js.map +1 -0
  268. package/package.json +55 -0
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Map validated adapter events → normalized `ProviderEvent`s (XACP-011).
3
+ *
4
+ * The harness reuses the existing ProviderEvent model + `providerEventToAcpUpdate`, so adapter
5
+ * output flows through the SAME normalization the ACP server already uses. This module only
6
+ * translates the fixture adapter's protocol into ProviderEvent payloads; it performs no I/O.
7
+ */
8
+ import { type ProviderEvent } from "../providers/providerEvents.js";
9
+ import type { ParsedAdapterEvent } from "./adapterHarnessTypes.js";
10
+ export interface MappedAdapterEvents {
11
+ events: ProviderEvent[];
12
+ /** Terminal disposition derived from a `completed`/`failed` event, if present. */
13
+ terminal?: "completed" | "failed";
14
+ failureMessage?: string;
15
+ }
16
+ export declare function mapAdapterEvents(parsed: ParsedAdapterEvent[], opts: {
17
+ providerId: string;
18
+ sessionId: string;
19
+ requestId: string;
20
+ now: () => string;
21
+ }): MappedAdapterEvents;
22
+ //# sourceMappingURL=adapterEventMapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapterEventMapper.d.ts","sourceRoot":"","sources":["../../src/adapters/adapterEventMapper.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAsB,KAAK,aAAa,EAA0B,MAAM,gCAAgC,CAAC;AAChH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,WAAW,GAAG,QAAQ,CAAC;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAeD,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,kBAAkB,EAAE,EAC5B,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,MAAM,CAAA;CAAE,GACpF,mBAAmB,CAmDrB"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Map validated adapter events → normalized `ProviderEvent`s (XACP-011).
3
+ *
4
+ * The harness reuses the existing ProviderEvent model + `providerEventToAcpUpdate`, so adapter
5
+ * output flows through the SAME normalization the ACP server already uses. This module only
6
+ * translates the fixture adapter's protocol into ProviderEvent payloads; it performs no I/O.
7
+ */
8
+ import { createEventFactory } from "../providers/providerEvents.js";
9
+ const PLAN_PRIORITIES = new Set(["high", "medium", "low"]);
10
+ const PLAN_STATUSES = new Set(["pending", "in_progress", "completed"]);
11
+ function normalizePlanEntries(raw) {
12
+ if (!Array.isArray(raw))
13
+ return [];
14
+ return raw.map((e) => {
15
+ const o = (e ?? {});
16
+ const priority = PLAN_PRIORITIES.has(o.priority) ? o.priority : "medium";
17
+ const status = PLAN_STATUSES.has(o.status) ? o.status : "pending";
18
+ return { content: typeof o.content === "string" ? o.content : "", priority, status };
19
+ });
20
+ }
21
+ export function mapAdapterEvents(parsed, opts) {
22
+ const factory = createEventFactory(opts);
23
+ const events = [];
24
+ let terminal;
25
+ let failureMessage;
26
+ const push = (kind, payload) => {
27
+ events.push(factory.next(kind, payload));
28
+ };
29
+ for (const ev of parsed) {
30
+ const r = ev.raw;
31
+ switch (ev.type) {
32
+ case "plan":
33
+ push("plan", { entries: normalizePlanEntries(r.entries) });
34
+ break;
35
+ case "message_delta":
36
+ push("message_delta", { text: String(r.text ?? "") });
37
+ break;
38
+ case "tool_started":
39
+ push("tool_started", {
40
+ toolCallId: String(r.toolCallId),
41
+ ...(typeof r.title === "string" ? { title: r.title } : {}),
42
+ ...(r.kind === "read" || r.kind === "think" ? { kind: r.kind } : {}),
43
+ });
44
+ break;
45
+ case "tool_updated":
46
+ push("tool_updated", { toolCallId: String(r.toolCallId), status: "in_progress" });
47
+ break;
48
+ case "tool_completed":
49
+ push("tool_completed", { toolCallId: String(r.toolCallId), status: "completed" });
50
+ break;
51
+ case "tool_failed":
52
+ push("tool_failed", { toolCallId: String(r.toolCallId), status: "failed" });
53
+ break;
54
+ case "usage":
55
+ push("usage", { used: Number(r.used ?? 0), size: Number(r.size ?? 0) });
56
+ break;
57
+ case "completed":
58
+ terminal = "completed";
59
+ push("completed", { disposition: "completed" });
60
+ break;
61
+ case "failed":
62
+ terminal = "failed";
63
+ failureMessage = typeof r.message === "string" ? r.message : "adapter reported failure";
64
+ push("failed", { disposition: "failed", message: failureMessage });
65
+ break;
66
+ }
67
+ }
68
+ return { events, ...(terminal ? { terminal } : {}), ...(failureMessage ? { failureMessage } : {}) };
69
+ }
70
+ //# sourceMappingURL=adapterEventMapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapterEventMapper.js","sourceRoot":"","sources":["../../src/adapters/adapterEventMapper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Parser for the fixture adapter's stdout protocol (XACP-011).
3
+ *
4
+ * Fail-safe by design: empty lines are ignored; malformed JSON, oversized lines, unknown event
5
+ * types, and invalid field shapes are recorded as bounded, REDACTED diagnostics and skipped —
6
+ * they never throw and never crash the harness. Secret-like content in a rejected snippet is
7
+ * masked before it is retained.
8
+ */
9
+ import type { AdapterParseOutcome } from "./adapterHarnessTypes.js";
10
+ /** Max accepted bytes for a single protocol line (a runaway line is rejected as oversized). */
11
+ export declare const MAX_LINE_BYTES: number;
12
+ /** Bound + redact a snippet for diagnostics — never echo a secret-like token or a long payload. */
13
+ export declare function safeSnippet(line: string): string;
14
+ /** Parse adapter stdout into validated events + diagnostics. Never throws. */
15
+ export declare function parseAdapterOutput(stdout: string): AdapterParseOutcome;
16
+ //# sourceMappingURL=adapterEventParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapterEventParser.d.ts","sourceRoot":"","sources":["../../src/adapters/adapterEventParser.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAEV,mBAAmB,EAEpB,MAAM,0BAA0B,CAAC;AAElC,+FAA+F;AAC/F,eAAO,MAAM,cAAc,QAAY,CAAC;AAexC,mGAAmG;AACnG,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGhD;AAwBD,8EAA8E;AAC9E,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB,CA0CtE"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Parser for the fixture adapter's stdout protocol (XACP-011).
3
+ *
4
+ * Fail-safe by design: empty lines are ignored; malformed JSON, oversized lines, unknown event
5
+ * types, and invalid field shapes are recorded as bounded, REDACTED diagnostics and skipped —
6
+ * they never throw and never crash the harness. Secret-like content in a rejected snippet is
7
+ * masked before it is retained.
8
+ */
9
+ import { redactSecretLikeText } from "../security/redaction.js";
10
+ import { resolveContractVersion } from "./adapterContractVersion.js";
11
+ /** Max accepted bytes for a single protocol line (a runaway line is rejected as oversized). */
12
+ export const MAX_LINE_BYTES = 64 * 1024;
13
+ const SNIPPET_MAX = 80;
14
+ const KNOWN_TYPES = new Set([
15
+ "plan",
16
+ "message_delta",
17
+ "tool_started",
18
+ "tool_updated",
19
+ "tool_completed",
20
+ "tool_failed",
21
+ "usage",
22
+ "completed",
23
+ "failed",
24
+ ]);
25
+ /** Bound + redact a snippet for diagnostics — never echo a secret-like token or a long payload. */
26
+ export function safeSnippet(line) {
27
+ const trimmed = line.trim().slice(0, SNIPPET_MAX);
28
+ return redactSecretLikeText(trimmed, { mask: "[REDACTED]", sensitiveKeyHints: [] });
29
+ }
30
+ /** Validate the required fields per event type. Returns true when the shape is acceptable. */
31
+ function fieldsValid(type, obj) {
32
+ switch (type) {
33
+ case "plan":
34
+ return Array.isArray(obj.entries);
35
+ case "message_delta":
36
+ return typeof obj.text === "string";
37
+ case "tool_started":
38
+ case "tool_updated":
39
+ case "tool_completed":
40
+ case "tool_failed":
41
+ return typeof obj.toolCallId === "string" && obj.toolCallId.length > 0;
42
+ case "usage":
43
+ return typeof obj.used === "number" || typeof obj.size === "number";
44
+ case "completed":
45
+ case "failed":
46
+ return true;
47
+ default:
48
+ return false;
49
+ }
50
+ }
51
+ /** Parse adapter stdout into validated events + diagnostics. Never throws. */
52
+ export function parseAdapterOutput(stdout) {
53
+ const events = [];
54
+ const diagnostics = [];
55
+ for (const rawLine of stdout.split(/\r?\n/)) {
56
+ if (!rawLine.trim())
57
+ continue; // empty lines ignored
58
+ if (Buffer.byteLength(rawLine) > MAX_LINE_BYTES) {
59
+ diagnostics.push({ reason: "oversized", redactedSnippet: safeSnippet(rawLine) });
60
+ continue;
61
+ }
62
+ let obj;
63
+ try {
64
+ obj = JSON.parse(rawLine);
65
+ }
66
+ catch {
67
+ diagnostics.push({ reason: "malformed_json", redactedSnippet: safeSnippet(rawLine) });
68
+ continue;
69
+ }
70
+ if (!obj || typeof obj !== "object" || Array.isArray(obj)) {
71
+ diagnostics.push({ reason: "invalid_fields", redactedSnippet: safeSnippet(rawLine) });
72
+ continue;
73
+ }
74
+ const record = obj;
75
+ // Contract version gate (XACP-012): a PRESENT-but-unsupported version fails safely; a missing
76
+ // version defaults to v1 (internal-fixture leniency — the harness supplies authoritative ids).
77
+ if (resolveContractVersion(record.version) === null) {
78
+ diagnostics.push({ reason: "unsupported_version", redactedSnippet: safeSnippet(rawLine) });
79
+ continue;
80
+ }
81
+ const type = record.type;
82
+ if (typeof type !== "string" || !KNOWN_TYPES.has(type)) {
83
+ diagnostics.push({ reason: "unknown_type", redactedSnippet: safeSnippet(rawLine) });
84
+ continue;
85
+ }
86
+ const t = type;
87
+ if (!fieldsValid(t, record)) {
88
+ diagnostics.push({ reason: "invalid_fields", redactedSnippet: safeSnippet(rawLine) });
89
+ continue;
90
+ }
91
+ events.push({ type: t, raw: record });
92
+ }
93
+ return { events, diagnostics };
94
+ }
95
+ //# sourceMappingURL=adapterEventParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapterEventParser.js","sourceRoot":"","sources":["../../src/adapters/adapterEventParser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Adapter stdout event protocol — FROZEN v1 (XACP-012).
3
+ *
4
+ * This is the INTERNAL protocol a cooperative adapter process writes to stdout (one JSON object
5
+ * per line). It is NOT ACP — the harness maps these to normalized `ProviderEvent`s, which the ACP
6
+ * server then maps to `session/update`. Keeping the two separate is deliberate.
7
+ *
8
+ * Every conforming event carries an envelope: `version`, `type`, `eventId`, `timestamp`,
9
+ * `requestId`. `validateAdapterProtocolEvent` is the canonical, fail-safe reference validator:
10
+ * unknown version, unknown type, or invalid fields are rejected (never thrown). The harness's
11
+ * `parseAdapterOutput` is a deliberately tolerant reader of this protocol (it accepts internal
12
+ * fixtures that omit envelope metadata and supplies authoritative ids itself); this validator is
13
+ * the strict contract a real adapter must satisfy.
14
+ */
15
+ export type AdapterProtocolEventType = "plan" | "message_delta" | "tool_started" | "tool_updated" | "tool_completed" | "tool_failed" | "usage" | "completed" | "cancelled" | "failed" | "diagnostic";
16
+ /** Envelope present on every v1 protocol event. */
17
+ export interface AdapterProtocolEnvelope {
18
+ version: number;
19
+ type: AdapterProtocolEventType;
20
+ eventId: string;
21
+ timestamp: string;
22
+ requestId: string;
23
+ }
24
+ export interface AdapterPlanEvent extends AdapterProtocolEnvelope {
25
+ type: "plan";
26
+ entries: unknown[];
27
+ }
28
+ export interface AdapterMessageDeltaEvent extends AdapterProtocolEnvelope {
29
+ type: "message_delta";
30
+ text: string;
31
+ }
32
+ export interface AdapterToolStartedEvent extends AdapterProtocolEnvelope {
33
+ type: "tool_started";
34
+ toolCallId: string;
35
+ title?: string;
36
+ kind?: "read" | "think";
37
+ }
38
+ export interface AdapterToolUpdatedEvent extends AdapterProtocolEnvelope {
39
+ type: "tool_updated";
40
+ toolCallId: string;
41
+ }
42
+ export interface AdapterToolCompletedEvent extends AdapterProtocolEnvelope {
43
+ type: "tool_completed";
44
+ toolCallId: string;
45
+ }
46
+ export interface AdapterToolFailedEvent extends AdapterProtocolEnvelope {
47
+ type: "tool_failed";
48
+ toolCallId: string;
49
+ }
50
+ export interface AdapterUsageEvent extends AdapterProtocolEnvelope {
51
+ type: "usage";
52
+ used?: number;
53
+ size?: number;
54
+ }
55
+ export interface AdapterCompletedEvent extends AdapterProtocolEnvelope {
56
+ type: "completed";
57
+ stopReason?: string;
58
+ }
59
+ export interface AdapterCancelledEvent extends AdapterProtocolEnvelope {
60
+ type: "cancelled";
61
+ }
62
+ export interface AdapterFailedEvent extends AdapterProtocolEnvelope {
63
+ type: "failed";
64
+ message?: string;
65
+ }
66
+ export interface AdapterDiagnosticEvent extends AdapterProtocolEnvelope {
67
+ type: "diagnostic";
68
+ message?: string;
69
+ }
70
+ export type AdapterProtocolEvent = AdapterPlanEvent | AdapterMessageDeltaEvent | AdapterToolStartedEvent | AdapterToolUpdatedEvent | AdapterToolCompletedEvent | AdapterToolFailedEvent | AdapterUsageEvent | AdapterCompletedEvent | AdapterCancelledEvent | AdapterFailedEvent | AdapterDiagnosticEvent;
71
+ export declare const ADAPTER_PROTOCOL_EVENT_TYPES: readonly AdapterProtocolEventType[];
72
+ export type AdapterProtocolRejectReason = "unsupported_version" | "unknown_type" | "invalid_fields";
73
+ export type AdapterProtocolValidation = {
74
+ ok: true;
75
+ event: AdapterProtocolEvent;
76
+ } | {
77
+ ok: false;
78
+ reason: AdapterProtocolRejectReason;
79
+ };
80
+ /**
81
+ * Canonical fail-safe validator for a single parsed protocol object. Enforces the v1 envelope
82
+ * (version supported, required ids present) + per-type payload fields. Never throws.
83
+ */
84
+ export declare function validateAdapterProtocolEvent(obj: unknown): AdapterProtocolValidation;
85
+ //# sourceMappingURL=adapterEventProtocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapterEventProtocol.d.ts","sourceRoot":"","sources":["../../src/adapters/adapterEventProtocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,MAAM,MAAM,wBAAwB,GAChC,MAAM,GACN,eAAe,GACf,cAAc,GACd,cAAc,GACd,gBAAgB,GAChB,aAAa,GACb,OAAO,GACP,WAAW,GACX,WAAW,GACX,QAAQ,GACR,YAAY,CAAC;AAEjB,mDAAmD;AACnD,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,wBAAwB,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAiB,SAAQ,uBAAuB;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,EAAE,CAAA;CAAE;AACtG,MAAM,WAAW,wBAAyB,SAAQ,uBAAuB;IAAG,IAAI,EAAE,eAAe,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AACjH,MAAM,WAAW,uBAAwB,SAAQ,uBAAuB;IAAG,IAAI,EAAE,cAAc,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE;AAC9J,MAAM,WAAW,uBAAwB,SAAQ,uBAAuB;IAAG,IAAI,EAAE,cAAc,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE;AACrH,MAAM,WAAW,yBAA0B,SAAQ,uBAAuB;IAAG,IAAI,EAAE,gBAAgB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE;AACzH,MAAM,WAAW,sBAAuB,SAAQ,uBAAuB;IAAG,IAAI,EAAE,aAAa,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE;AACnH,MAAM,WAAW,iBAAkB,SAAQ,uBAAuB;IAAG,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE;AAClH,MAAM,WAAW,qBAAsB,SAAQ,uBAAuB;IAAG,IAAI,EAAE,WAAW,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE;AACjH,MAAM,WAAW,qBAAsB,SAAQ,uBAAuB;IAAG,IAAI,EAAE,WAAW,CAAA;CAAE;AAC5F,MAAM,WAAW,kBAAmB,SAAQ,uBAAuB;IAAG,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE;AACxG,MAAM,WAAW,sBAAuB,SAAQ,uBAAuB;IAAG,IAAI,EAAE,YAAY,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE;AAEhH,MAAM,MAAM,oBAAoB,GAC5B,gBAAgB,GAChB,wBAAwB,GACxB,uBAAuB,GACvB,uBAAuB,GACvB,yBAAyB,GACzB,sBAAsB,GACtB,iBAAiB,GACjB,qBAAqB,GACrB,qBAAqB,GACrB,kBAAkB,GAClB,sBAAsB,CAAC;AAE3B,eAAO,MAAM,4BAA4B,EAAE,SAAS,wBAAwB,EAY3E,CAAC;AAEF,MAAM,MAAM,2BAA2B,GACnC,qBAAqB,GACrB,cAAc,GACd,gBAAgB,CAAC;AAErB,MAAM,MAAM,yBAAyB,GACjC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,oBAAoB,CAAA;CAAE,GACzC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,2BAA2B,CAAA;CAAE,CAAC;AAiCvD;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,OAAO,GAAG,yBAAyB,CASpF"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Adapter stdout event protocol — FROZEN v1 (XACP-012).
3
+ *
4
+ * This is the INTERNAL protocol a cooperative adapter process writes to stdout (one JSON object
5
+ * per line). It is NOT ACP — the harness maps these to normalized `ProviderEvent`s, which the ACP
6
+ * server then maps to `session/update`. Keeping the two separate is deliberate.
7
+ *
8
+ * Every conforming event carries an envelope: `version`, `type`, `eventId`, `timestamp`,
9
+ * `requestId`. `validateAdapterProtocolEvent` is the canonical, fail-safe reference validator:
10
+ * unknown version, unknown type, or invalid fields are rejected (never thrown). The harness's
11
+ * `parseAdapterOutput` is a deliberately tolerant reader of this protocol (it accepts internal
12
+ * fixtures that omit envelope metadata and supplies authoritative ids itself); this validator is
13
+ * the strict contract a real adapter must satisfy.
14
+ */
15
+ import { resolveContractVersion } from "./adapterContractVersion.js";
16
+ export const ADAPTER_PROTOCOL_EVENT_TYPES = [
17
+ "plan",
18
+ "message_delta",
19
+ "tool_started",
20
+ "tool_updated",
21
+ "tool_completed",
22
+ "tool_failed",
23
+ "usage",
24
+ "completed",
25
+ "cancelled",
26
+ "failed",
27
+ "diagnostic",
28
+ ];
29
+ const TYPE_SET = new Set(ADAPTER_PROTOCOL_EVENT_TYPES);
30
+ function envelopeValid(o) {
31
+ return (typeof o.eventId === "string" && o.eventId.length > 0 &&
32
+ typeof o.timestamp === "string" && o.timestamp.length > 0 &&
33
+ typeof o.requestId === "string" && o.requestId.length > 0);
34
+ }
35
+ function payloadValid(type, o) {
36
+ switch (type) {
37
+ case "plan":
38
+ return Array.isArray(o.entries);
39
+ case "message_delta":
40
+ return typeof o.text === "string";
41
+ case "tool_started":
42
+ case "tool_updated":
43
+ case "tool_completed":
44
+ case "tool_failed":
45
+ return typeof o.toolCallId === "string" && o.toolCallId.length > 0;
46
+ case "usage":
47
+ return typeof o.used === "number" || typeof o.size === "number";
48
+ case "completed":
49
+ case "cancelled":
50
+ case "failed":
51
+ case "diagnostic":
52
+ return true;
53
+ }
54
+ }
55
+ /**
56
+ * Canonical fail-safe validator for a single parsed protocol object. Enforces the v1 envelope
57
+ * (version supported, required ids present) + per-type payload fields. Never throws.
58
+ */
59
+ export function validateAdapterProtocolEvent(obj) {
60
+ if (!obj || typeof obj !== "object" || Array.isArray(obj))
61
+ return { ok: false, reason: "invalid_fields" };
62
+ const o = obj;
63
+ if (resolveContractVersion(o.version) === null)
64
+ return { ok: false, reason: "unsupported_version" };
65
+ if (typeof o.type !== "string" || !TYPE_SET.has(o.type))
66
+ return { ok: false, reason: "unknown_type" };
67
+ const type = o.type;
68
+ if (!envelopeValid(o))
69
+ return { ok: false, reason: "invalid_fields" };
70
+ if (!payloadValid(type, o))
71
+ return { ok: false, reason: "invalid_fields" };
72
+ return { ok: true, event: o };
73
+ }
74
+ //# sourceMappingURL=adapterEventProtocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapterEventProtocol.js","sourceRoot":"","sources":["../../src/adapters/adapterEventProtocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAiDrE,MAAM,CAAC,MAAM,4BAA4B,GAAwC;IAC/E,MAAM;IACN,eAAe;IACf,cAAc;IACd,cAAc;IACd,gBAAgB;IAChB,aAAa;IACb,OAAO;IACP,WAAW;IACX,WAAW;IACX,QAAQ;IACR,YAAY;CACb,CAAC;AAWF,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAS,4BAA4B,CAAC,CAAC;AAE/D,SAAS,aAAa,CAAC,CAA0B;IAC/C,OAAO,CACL,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;QACrD,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;QACzD,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAC1D,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,IAA8B,EAAE,CAA0B;IAC9E,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,MAAM;YACT,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAClC,KAAK,eAAe;YAClB,OAAO,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC;QACpC,KAAK,cAAc,CAAC;QACpB,KAAK,cAAc,CAAC;QACpB,KAAK,gBAAgB,CAAC;QACtB,KAAK,aAAa;YAChB,OAAO,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;QACrE,KAAK,OAAO;YACV,OAAO,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC;QAClE,KAAK,WAAW,CAAC;QACjB,KAAK,WAAW,CAAC;QACjB,KAAK,QAAQ,CAAC;QACd,KAAK,YAAY;YACf,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAAC,GAAY;IACvD,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC1G,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,IAAI,sBAAsB,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC;IACpG,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IACtG,MAAM,IAAI,GAAG,CAAC,CAAC,IAAgC,CAAC;IAChD,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IACtE,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3E,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAoC,EAAE,CAAC;AACnE,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Frozen failure taxonomy for the adapter/runtime path (XACP-012 v1).
3
+ *
4
+ * Every failure on the adapter/runtime path maps to ONE of these codes. Each has a safe message
5
+ * and a `retryable` hint. Safe messages never contain stack traces, raw adapter output, env
6
+ * values, or secrets. This taxonomy is part of the frozen v1 contract.
7
+ */
8
+ export declare const ADAPTER_FAILURE_CODES: readonly ["ADAPTER_CONTRACT_VERSION_UNSUPPORTED", "ADAPTER_EVENT_INVALID", "ADAPTER_EVENT_UNKNOWN_TYPE", "ADAPTER_EVENT_TOO_LARGE", "ADAPTER_PROCESS_FAILED", "ADAPTER_PROCESS_TIMED_OUT", "ADAPTER_PROCESS_CANCELLED", "ADAPTER_STDERR_SECRET_REDACTED", "PROVIDER_NOT_RUNNABLE", "PROVIDER_APPROVAL_MISSING", "PROVIDER_APPROVAL_STALE", "PROVIDER_POLICY_INVALID", "PROVIDER_SANDBOX_DENIED", "PROVIDER_SUPERVISOR_DENIED", "PROVIDER_INTERNAL_ERROR"];
9
+ export type AdapterFailureCode = (typeof ADAPTER_FAILURE_CODES)[number];
10
+ export interface AdapterFailureDescriptor {
11
+ code: AdapterFailureCode;
12
+ safeMessage: string;
13
+ retryable: boolean;
14
+ }
15
+ export declare function describeAdapterFailure(code: AdapterFailureCode): AdapterFailureDescriptor;
16
+ export declare function isAdapterFailureCode(value: unknown): value is AdapterFailureCode;
17
+ /** Map a runnability status to a frozen failure code (used when a provider can't run). */
18
+ export declare function failureCodeForRunnability(status: string): AdapterFailureCode;
19
+ //# sourceMappingURL=adapterFailureTaxonomy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapterFailureTaxonomy.d.ts","sourceRoot":"","sources":["../../src/adapters/adapterFailureTaxonomy.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,eAAO,MAAM,qBAAqB,2bAgBxB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAExE,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,kBAAkB,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACpB;AAoBD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,kBAAkB,GAAG,wBAAwB,CAGzF;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,kBAAkB,CAEhF;AAED,0FAA0F;AAC1F,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB,CAW5E"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Frozen failure taxonomy for the adapter/runtime path (XACP-012 v1).
3
+ *
4
+ * Every failure on the adapter/runtime path maps to ONE of these codes. Each has a safe message
5
+ * and a `retryable` hint. Safe messages never contain stack traces, raw adapter output, env
6
+ * values, or secrets. This taxonomy is part of the frozen v1 contract.
7
+ */
8
+ export const ADAPTER_FAILURE_CODES = [
9
+ "ADAPTER_CONTRACT_VERSION_UNSUPPORTED",
10
+ "ADAPTER_EVENT_INVALID",
11
+ "ADAPTER_EVENT_UNKNOWN_TYPE",
12
+ "ADAPTER_EVENT_TOO_LARGE",
13
+ "ADAPTER_PROCESS_FAILED",
14
+ "ADAPTER_PROCESS_TIMED_OUT",
15
+ "ADAPTER_PROCESS_CANCELLED",
16
+ "ADAPTER_STDERR_SECRET_REDACTED",
17
+ "PROVIDER_NOT_RUNNABLE",
18
+ "PROVIDER_APPROVAL_MISSING",
19
+ "PROVIDER_APPROVAL_STALE",
20
+ "PROVIDER_POLICY_INVALID",
21
+ "PROVIDER_SANDBOX_DENIED",
22
+ "PROVIDER_SUPERVISOR_DENIED",
23
+ "PROVIDER_INTERNAL_ERROR",
24
+ ];
25
+ const DESCRIPTORS = {
26
+ ADAPTER_CONTRACT_VERSION_UNSUPPORTED: { safeMessage: "adapter declared an unsupported contract version", retryable: false },
27
+ ADAPTER_EVENT_INVALID: { safeMessage: "adapter emitted an event with invalid fields", retryable: false },
28
+ ADAPTER_EVENT_UNKNOWN_TYPE: { safeMessage: "adapter emitted an unknown event type", retryable: false },
29
+ ADAPTER_EVENT_TOO_LARGE: { safeMessage: "adapter emitted an oversized event", retryable: false },
30
+ ADAPTER_PROCESS_FAILED: { safeMessage: "adapter process failed", retryable: true },
31
+ ADAPTER_PROCESS_TIMED_OUT: { safeMessage: "adapter process timed out", retryable: true },
32
+ ADAPTER_PROCESS_CANCELLED: { safeMessage: "adapter process was cancelled", retryable: false },
33
+ ADAPTER_STDERR_SECRET_REDACTED: { safeMessage: "adapter stderr contained secret-like content (redacted)", retryable: false },
34
+ PROVIDER_NOT_RUNNABLE: { safeMessage: "provider is not runnable", retryable: false },
35
+ PROVIDER_APPROVAL_MISSING: { safeMessage: "provider requires explicit approval", retryable: false },
36
+ PROVIDER_APPROVAL_STALE: { safeMessage: "provider approval is stale (definition/policy changed)", retryable: false },
37
+ PROVIDER_POLICY_INVALID: { safeMessage: "provider policy is invalid", retryable: false },
38
+ PROVIDER_SANDBOX_DENIED: { safeMessage: "sandbox context denied", retryable: false },
39
+ PROVIDER_SUPERVISOR_DENIED: { safeMessage: "process supervisor denied", retryable: false },
40
+ PROVIDER_INTERNAL_ERROR: { safeMessage: "internal error on the adapter/runtime path", retryable: false },
41
+ };
42
+ export function describeAdapterFailure(code) {
43
+ const d = DESCRIPTORS[code];
44
+ return { code, safeMessage: d.safeMessage, retryable: d.retryable };
45
+ }
46
+ export function isAdapterFailureCode(value) {
47
+ return typeof value === "string" && ADAPTER_FAILURE_CODES.includes(value);
48
+ }
49
+ /** Map a runnability status to a frozen failure code (used when a provider can't run). */
50
+ export function failureCodeForRunnability(status) {
51
+ switch (status) {
52
+ case "requires_approval":
53
+ return "PROVIDER_APPROVAL_MISSING";
54
+ case "stale_approval":
55
+ return "PROVIDER_APPROVAL_STALE";
56
+ case "blocked_policy_invalid":
57
+ return "PROVIDER_POLICY_INVALID";
58
+ default:
59
+ return "PROVIDER_NOT_RUNNABLE";
60
+ }
61
+ }
62
+ //# sourceMappingURL=adapterFailureTaxonomy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapterFailureTaxonomy.js","sourceRoot":"","sources":["../../src/adapters/adapterFailureTaxonomy.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,sCAAsC;IACtC,uBAAuB;IACvB,4BAA4B;IAC5B,yBAAyB;IACzB,wBAAwB;IACxB,2BAA2B;IAC3B,2BAA2B;IAC3B,gCAAgC;IAChC,uBAAuB;IACvB,2BAA2B;IAC3B,yBAAyB;IACzB,yBAAyB;IACzB,yBAAyB;IACzB,4BAA4B;IAC5B,yBAAyB;CACjB,CAAC;AAUX,MAAM,WAAW,GAA4E;IAC3F,oCAAoC,EAAE,EAAE,WAAW,EAAE,kDAAkD,EAAE,SAAS,EAAE,KAAK,EAAE;IAC3H,qBAAqB,EAAE,EAAE,WAAW,EAAE,8CAA8C,EAAE,SAAS,EAAE,KAAK,EAAE;IACxG,0BAA0B,EAAE,EAAE,WAAW,EAAE,uCAAuC,EAAE,SAAS,EAAE,KAAK,EAAE;IACtG,uBAAuB,EAAE,EAAE,WAAW,EAAE,oCAAoC,EAAE,SAAS,EAAE,KAAK,EAAE;IAChG,sBAAsB,EAAE,EAAE,WAAW,EAAE,wBAAwB,EAAE,SAAS,EAAE,IAAI,EAAE;IAClF,yBAAyB,EAAE,EAAE,WAAW,EAAE,2BAA2B,EAAE,SAAS,EAAE,IAAI,EAAE;IACxF,yBAAyB,EAAE,EAAE,WAAW,EAAE,+BAA+B,EAAE,SAAS,EAAE,KAAK,EAAE;IAC7F,8BAA8B,EAAE,EAAE,WAAW,EAAE,yDAAyD,EAAE,SAAS,EAAE,KAAK,EAAE;IAC5H,qBAAqB,EAAE,EAAE,WAAW,EAAE,0BAA0B,EAAE,SAAS,EAAE,KAAK,EAAE;IACpF,yBAAyB,EAAE,EAAE,WAAW,EAAE,qCAAqC,EAAE,SAAS,EAAE,KAAK,EAAE;IACnG,uBAAuB,EAAE,EAAE,WAAW,EAAE,wDAAwD,EAAE,SAAS,EAAE,KAAK,EAAE;IACpH,uBAAuB,EAAE,EAAE,WAAW,EAAE,4BAA4B,EAAE,SAAS,EAAE,KAAK,EAAE;IACxF,uBAAuB,EAAE,EAAE,WAAW,EAAE,wBAAwB,EAAE,SAAS,EAAE,KAAK,EAAE;IACpF,0BAA0B,EAAE,EAAE,WAAW,EAAE,2BAA2B,EAAE,SAAS,EAAE,KAAK,EAAE;IAC1F,uBAAuB,EAAE,EAAE,WAAW,EAAE,4CAA4C,EAAE,SAAS,EAAE,KAAK,EAAE;CACzG,CAAC;AAEF,MAAM,UAAU,sBAAsB,CAAC,IAAwB;IAC7D,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAC5B,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,qBAA2C,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACnG,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,yBAAyB,CAAC,MAAc;IACtD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,mBAAmB;YACtB,OAAO,2BAA2B,CAAC;QACrC,KAAK,gBAAgB;YACnB,OAAO,yBAAyB,CAAC;QACnC,KAAK,wBAAwB;YAC3B,OAAO,yBAAyB,CAAC;QACnC;YACE,OAAO,uBAAuB,CAAC;IACnC,CAAC;AACH,CAAC"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Types for the provider-adapter TEST harness (XACP-011).
3
+ *
4
+ * The harness proves the FUTURE adapter seam end-to-end using only a harmless, deterministic,
5
+ * XENO-owned fixture adapter process: it runs
6
+ *
7
+ * ProviderDefinition → policy config → manual approval → safety evaluation →
8
+ * sandbox context → minimal process supervisor → adapter stdout protocol →
9
+ * ProviderEvent[] → ACP session/update → audit/diagnostics
10
+ *
11
+ * It is NOT a real Codex/Claude/Gemini/OpenCode/Kimi/GLM/Hermes adapter, performs no network, loads no
12
+ * secrets, and never spawns a real provider CLI.
13
+ */
14
+ import type { ProviderEvent } from "../providers/providerEvents.js";
15
+ import type { ProviderAuthFailureDiagnostic, ProviderErrorCode } from "../providers/providerErrors.js";
16
+ import type { ProviderDefinition, ProviderPromptRequest, ProviderPromptResult } from "../providers/providerTypes.js";
17
+ import type { RunnabilityInput, RunnabilityResult } from "../config/providerRunnability.js";
18
+ import type { ProviderProcessSupervisor } from "../process/providerProcessSupervisor.js";
19
+ import type { SessionUpdate } from "../types.js";
20
+ /** One parsed line of the adapter's stdout protocol (post-validation). */
21
+ export interface ParsedAdapterEvent {
22
+ type: "plan" | "message_delta" | "tool_started" | "tool_updated" | "tool_completed" | "tool_failed" | "usage" | "completed" | "failed";
23
+ raw: Record<string, unknown>;
24
+ }
25
+ /** A line the parser could not accept (malformed JSON, oversized, unknown type, bad version). */
26
+ export interface AdapterParseDiagnostic {
27
+ reason: "empty" | "malformed_json" | "oversized" | "unknown_type" | "invalid_fields" | "unsupported_version";
28
+ /** Redacted, bounded snippet — never raw secrets, never full payload. */
29
+ redactedSnippet: string;
30
+ }
31
+ export interface AdapterParseOutcome {
32
+ events: ParsedAdapterEvent[];
33
+ diagnostics: AdapterParseDiagnostic[];
34
+ }
35
+ /**
36
+ * Optional stdout parser for a REAL local provider (XACP-021) whose process emits its OWN native
37
+ * format (e.g. Claude Code `--output-format stream-json`) rather than the XENO v1 adapter
38
+ * protocol. When provided, it replaces the v1 `parseAdapterOutput` + `mapAdapterEvents` steps and
39
+ * returns normalized `ProviderEvent`s directly — so a real CLI still flows through the SAME gate →
40
+ * sandbox → supervisor → ProviderEvent → ACP path. The default (undefined) keeps the frozen v1
41
+ * protocol path unchanged.
42
+ */
43
+ export type RealProviderStdoutParser = (stdout: string, ctx: {
44
+ providerId: string;
45
+ sessionId: string;
46
+ requestId: string;
47
+ now: () => string;
48
+ }) => {
49
+ events: ProviderEvent[];
50
+ terminal: "completed" | "failed" | null;
51
+ failureCode?: ProviderErrorCode;
52
+ failureMessage?: string;
53
+ diagnosticsCount: number;
54
+ };
55
+ export interface AdapterHarnessConfig {
56
+ definition: ProviderDefinition;
57
+ /** Drives the runnability gate (policy entry / approval / policyInvalid). */
58
+ runnability: RunnabilityInput;
59
+ request: ProviderPromptRequest;
60
+ /** The fixture adapter to launch — a single executable token + argv (no shell, no real CLI). */
61
+ adapter: {
62
+ executable: string;
63
+ args: string[];
64
+ stdin?: string;
65
+ };
66
+ /** Real-provider native stdout parser (XACP-021). When set, replaces the v1 parse/map steps. */
67
+ parseStdout?: RealProviderStdoutParser;
68
+ /** Injected supervisor (defaults to a fresh minimal supervisor). */
69
+ supervisor?: ProviderProcessSupervisor;
70
+ /** Absolute cwd for the adapter process (defaults to a supervisor-owned temp workspace). */
71
+ cwd?: string;
72
+ /** Test-only env allowlist for the adapter (defaults to empty). */
73
+ envAllowlist?: Record<string, string>;
74
+ timeoutMs?: number;
75
+ stdoutLimitBytes?: number;
76
+ stderrLimitBytes?: number;
77
+ /** Cancels the prompt (the harness cancels the supervised process). */
78
+ signal?: AbortSignal;
79
+ /** Deterministic ISO clock for ProviderEvent timestamps. */
80
+ now?: () => string;
81
+ /** Optional sink for ProviderEvents (also collected in the result). */
82
+ emit?: (event: ProviderEvent) => void;
83
+ }
84
+ export interface AdapterHarnessDiagnostics {
85
+ providerId: string;
86
+ runnableStatus: string;
87
+ eventsEmitted: number;
88
+ parseDiagnostics: number;
89
+ acpUpdates: number;
90
+ /** From the process supervisor — includes the honest enforcement classification. */
91
+ supervisor?: Record<string, unknown>;
92
+ authFailure?: ProviderAuthFailureDiagnostic;
93
+ stdoutTruncated: boolean;
94
+ stderrTruncated: boolean;
95
+ }
96
+ export interface AdapterHarnessResult {
97
+ runnability: RunnabilityResult;
98
+ result: ProviderPromptResult;
99
+ events: ProviderEvent[];
100
+ acpUpdates: SessionUpdate[];
101
+ diagnostics: AdapterHarnessDiagnostics;
102
+ }
103
+ //# sourceMappingURL=adapterHarnessTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapterHarnessTypes.d.ts","sourceRoot":"","sources":["../../src/adapters/adapterHarnessTypes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Types for the provider-adapter TEST harness (XACP-011).
3
+ *
4
+ * The harness proves the FUTURE adapter seam end-to-end using only a harmless, deterministic,
5
+ * XENO-owned fixture adapter process: it runs
6
+ *
7
+ * ProviderDefinition → policy config → manual approval → safety evaluation →
8
+ * sandbox context → minimal process supervisor → adapter stdout protocol →
9
+ * ProviderEvent[] → ACP session/update → audit/diagnostics
10
+ *
11
+ * It is NOT a real Codex/Claude/Gemini/OpenCode/Kimi/GLM/Hermes adapter, performs no network, loads no
12
+ * secrets, and never spawns a real provider CLI.
13
+ */
14
+ export {};
15
+ //# sourceMappingURL=adapterHarnessTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapterHarnessTypes.js","sourceRoot":"","sources":["../../src/adapters/adapterHarnessTypes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}