@amalgm/chat 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (282) hide show
  1. package/AGENTS.md +98 -0
  2. package/PURPOSE.md +143 -104
  3. package/README.md +82 -54
  4. package/dist/acp/index.d.ts +7 -0
  5. package/dist/acp/index.d.ts.map +1 -0
  6. package/dist/acp/index.js +7 -0
  7. package/dist/acp/index.js.map +1 -0
  8. package/dist/acp/projection.d.ts +30 -0
  9. package/dist/acp/projection.d.ts.map +1 -0
  10. package/dist/acp/projection.js +147 -0
  11. package/dist/acp/projection.js.map +1 -0
  12. package/dist/api/conversations.d.ts +66 -0
  13. package/dist/api/conversations.d.ts.map +1 -0
  14. package/dist/api/conversations.js +202 -0
  15. package/dist/api/conversations.js.map +1 -0
  16. package/dist/api/index.d.ts +3 -3
  17. package/dist/api/index.d.ts.map +1 -1
  18. package/dist/api/index.js +1 -2
  19. package/dist/api/index.js.map +1 -1
  20. package/dist/conversations/index.d.ts +3 -0
  21. package/dist/conversations/index.d.ts.map +1 -0
  22. package/dist/conversations/index.js +3 -0
  23. package/dist/conversations/index.js.map +1 -0
  24. package/dist/conversations/transcript.d.ts +13 -0
  25. package/dist/conversations/transcript.d.ts.map +1 -0
  26. package/dist/conversations/transcript.js +171 -0
  27. package/dist/conversations/transcript.js.map +1 -0
  28. package/dist/conversations/types.d.ts +147 -0
  29. package/dist/conversations/types.d.ts.map +1 -0
  30. package/dist/conversations/types.js +9 -0
  31. package/dist/conversations/types.js.map +1 -0
  32. package/dist/events/constructors.d.ts +9 -15
  33. package/dist/events/constructors.d.ts.map +1 -1
  34. package/dist/events/constructors.js +6 -12
  35. package/dist/events/constructors.js.map +1 -1
  36. package/dist/events/index.d.ts +2 -3
  37. package/dist/events/index.d.ts.map +1 -1
  38. package/dist/events/index.js +2 -3
  39. package/dist/events/index.js.map +1 -1
  40. package/dist/events/schema.d.ts +2 -5
  41. package/dist/events/schema.d.ts.map +1 -1
  42. package/dist/events/schema.js +2 -5
  43. package/dist/events/schema.js.map +1 -1
  44. package/dist/execution/contract.d.ts +51 -0
  45. package/dist/execution/contract.d.ts.map +1 -0
  46. package/dist/execution/contract.js +127 -0
  47. package/dist/execution/contract.js.map +1 -0
  48. package/dist/execution/index.d.ts +6 -0
  49. package/dist/execution/index.d.ts.map +1 -0
  50. package/dist/execution/index.js +4 -0
  51. package/dist/execution/index.js.map +1 -0
  52. package/dist/execution/revision.d.ts +5 -0
  53. package/dist/execution/revision.d.ts.map +1 -0
  54. package/dist/execution/revision.js +17 -0
  55. package/dist/execution/revision.js.map +1 -0
  56. package/dist/execution/store.d.ts +26 -0
  57. package/dist/execution/store.d.ts.map +1 -0
  58. package/dist/execution/store.js +38 -0
  59. package/dist/execution/store.js.map +1 -0
  60. package/dist/index.d.ts +8 -23
  61. package/dist/index.d.ts.map +1 -1
  62. package/dist/index.js +7 -23
  63. package/dist/index.js.map +1 -1
  64. package/dist/input/index.d.ts +3 -0
  65. package/dist/input/index.d.ts.map +1 -0
  66. package/dist/input/index.js +2 -0
  67. package/dist/input/index.js.map +1 -0
  68. package/dist/input/prompt.d.ts +17 -0
  69. package/dist/input/prompt.d.ts.map +1 -0
  70. package/dist/input/prompt.js +104 -0
  71. package/dist/input/prompt.js.map +1 -0
  72. package/dist/normalizers/claude.d.ts +6 -9
  73. package/dist/normalizers/claude.d.ts.map +1 -1
  74. package/dist/normalizers/claude.js +5 -8
  75. package/dist/normalizers/claude.js.map +1 -1
  76. package/dist/normalizers/codex.d.ts +5 -8
  77. package/dist/normalizers/codex.d.ts.map +1 -1
  78. package/dist/normalizers/codex.js +4 -7
  79. package/dist/normalizers/codex.js.map +1 -1
  80. package/dist/normalizers/cursor.d.ts +1 -2
  81. package/dist/normalizers/cursor.d.ts.map +1 -1
  82. package/dist/normalizers/cursor.js +2 -3
  83. package/dist/normalizers/cursor.js.map +1 -1
  84. package/dist/normalizers/index.d.ts +3 -5
  85. package/dist/normalizers/index.d.ts.map +1 -1
  86. package/dist/normalizers/index.js +3 -5
  87. package/dist/normalizers/index.js.map +1 -1
  88. package/dist/normalizers/opencode.d.ts +2 -4
  89. package/dist/normalizers/opencode.d.ts.map +1 -1
  90. package/dist/normalizers/opencode.js +2 -4
  91. package/dist/normalizers/opencode.js.map +1 -1
  92. package/dist/normalizers/pi.d.ts +3 -4
  93. package/dist/normalizers/pi.d.ts.map +1 -1
  94. package/dist/normalizers/pi.js +3 -4
  95. package/dist/normalizers/pi.js.map +1 -1
  96. package/dist/sessions/chat.d.ts +176 -0
  97. package/dist/sessions/chat.d.ts.map +1 -0
  98. package/dist/sessions/chat.js +701 -0
  99. package/dist/sessions/chat.js.map +1 -0
  100. package/dist/sessions/index.d.ts +3 -0
  101. package/dist/sessions/index.d.ts.map +1 -0
  102. package/dist/sessions/index.js +2 -0
  103. package/dist/sessions/index.js.map +1 -0
  104. package/dist/transcript/index.d.ts +1 -1
  105. package/dist/transcript/index.js +1 -1
  106. package/dist/transcript/message-reducer.d.ts +1 -1
  107. package/dist/transcript/message-reducer.js +1 -1
  108. package/dist/transcript/part-accumulator.d.ts +1 -1
  109. package/dist/transcript/part-accumulator.js +1 -1
  110. package/dist/transcript/tool-display.d.ts +1 -1
  111. package/dist/transcript/tool-display.js +1 -1
  112. package/dist/transcript/tool-shape.d.ts +1 -1
  113. package/dist/transcript/tool-shape.js +1 -1
  114. package/dist/usage/finalize.d.ts +7 -9
  115. package/dist/usage/finalize.d.ts.map +1 -1
  116. package/dist/usage/finalize.js +11 -13
  117. package/dist/usage/finalize.js.map +1 -1
  118. package/dist/usage/index.d.ts +2 -3
  119. package/dist/usage/index.d.ts.map +1 -1
  120. package/dist/usage/index.js +2 -3
  121. package/dist/usage/index.js.map +1 -1
  122. package/dist/usage/model-catalog.d.ts +2 -3
  123. package/dist/usage/model-catalog.d.ts.map +1 -1
  124. package/dist/usage/model-catalog.js +10 -3
  125. package/dist/usage/model-catalog.js.map +1 -1
  126. package/dist/usage/normalize.d.ts +5 -7
  127. package/dist/usage/normalize.d.ts.map +1 -1
  128. package/dist/usage/normalize.js +3 -5
  129. package/dist/usage/normalize.js.map +1 -1
  130. package/dist/usage/ports.d.ts +14 -24
  131. package/dist/usage/ports.d.ts.map +1 -1
  132. package/dist/usage/ports.js +9 -17
  133. package/dist/usage/ports.js.map +1 -1
  134. package/dist/usage/steps.d.ts +70 -0
  135. package/dist/usage/steps.d.ts.map +1 -0
  136. package/dist/usage/steps.js +152 -0
  137. package/dist/usage/steps.js.map +1 -0
  138. package/dist/usage/tokens.d.ts +4 -7
  139. package/dist/usage/tokens.d.ts.map +1 -1
  140. package/dist/usage/tokens.js +4 -7
  141. package/dist/usage/tokens.js.map +1 -1
  142. package/docs/contracts/acp-and-step-usage.md +51 -0
  143. package/docs/contracts/conversation-persistence.md +47 -0
  144. package/docs/contracts/input-and-execution.md +177 -0
  145. package/docs/contracts/platform-authorization.md +17 -0
  146. package/host/adapters/acp-capabilities.js +30 -0
  147. package/host/adapters/acp-client.js +156 -0
  148. package/host/adapters/acp.js +284 -0
  149. package/host/adapters/claude.js +235 -0
  150. package/host/adapters/codex.js +733 -0
  151. package/host/adapters/cursor.js +347 -0
  152. package/host/adapters/input-capabilities.js +89 -0
  153. package/host/adapters/opencode.js +486 -0
  154. package/host/adapters/pi.js +519 -0
  155. package/host/adapters/prompt.js +212 -0
  156. package/host/auth.js +257 -0
  157. package/host/credentials/store.js +209 -0
  158. package/host/http.d.ts +32 -0
  159. package/host/http.js +238 -0
  160. package/host/index.d.ts +84 -0
  161. package/host/index.js +59 -0
  162. package/host/lib/runtime-paths.js +44 -0
  163. package/host/model-resolution.js +313 -0
  164. package/host/native-contract.js +185 -0
  165. package/host/native-runtime.js +194 -0
  166. package/host/permissions.js +27 -0
  167. package/host/platform-egress.js +114 -0
  168. package/host/recorder.js +61 -0
  169. package/host/sqlite/index.d.ts +69 -0
  170. package/host/sqlite/index.js +704 -0
  171. package/host/tooling/mcp-bundle.js +214 -0
  172. package/host/tooling/mcp-relay.js +83 -0
  173. package/host/tooling/native-binaries.js +667 -0
  174. package/host/tooling/native-config.js +460 -0
  175. package/host/tooling/package-import.js +111 -0
  176. package/host/tooling/runtime-home.js +26 -0
  177. package/host/tooling/system-instructions.js +69 -0
  178. package/host/tooling/system-prompt.js +35 -0
  179. package/package.json +45 -21
  180. package/skills/chat/SKILL.md +97 -0
  181. package/skills/chat/agents/openai.yaml +4 -0
  182. package/skills/chat/references/contracts.md +131 -0
  183. package/dist/api/chat-payloads.d.ts +0 -10
  184. package/dist/api/chat-payloads.d.ts.map +0 -1
  185. package/dist/api/chat-payloads.js +0 -57
  186. package/dist/api/chat-payloads.js.map +0 -1
  187. package/dist/contract/chat-input.d.ts +0 -144
  188. package/dist/contract/chat-input.d.ts.map +0 -1
  189. package/dist/contract/chat-input.js +0 -261
  190. package/dist/contract/chat-input.js.map +0 -1
  191. package/dist/contract/create.d.ts +0 -191
  192. package/dist/contract/create.d.ts.map +0 -1
  193. package/dist/contract/create.js +0 -249
  194. package/dist/contract/create.js.map +0 -1
  195. package/dist/contract/freeze.d.ts +0 -85
  196. package/dist/contract/freeze.d.ts.map +0 -1
  197. package/dist/contract/freeze.js +0 -151
  198. package/dist/contract/freeze.js.map +0 -1
  199. package/dist/contract/harnesses.d.ts +0 -21
  200. package/dist/contract/harnesses.d.ts.map +0 -1
  201. package/dist/contract/harnesses.js +0 -39
  202. package/dist/contract/harnesses.js.map +0 -1
  203. package/dist/contract/index.d.ts +0 -17
  204. package/dist/contract/index.d.ts.map +0 -1
  205. package/dist/contract/index.js +0 -17
  206. package/dist/contract/index.js.map +0 -1
  207. package/dist/contract/input.d.ts +0 -45
  208. package/dist/contract/input.d.ts.map +0 -1
  209. package/dist/contract/input.js +0 -78
  210. package/dist/contract/input.js.map +0 -1
  211. package/dist/contract/models.d.ts +0 -57
  212. package/dist/contract/models.d.ts.map +0 -1
  213. package/dist/contract/models.js +0 -380
  214. package/dist/contract/models.js.map +0 -1
  215. package/dist/contract/payload-merge.d.ts +0 -76
  216. package/dist/contract/payload-merge.d.ts.map +0 -1
  217. package/dist/contract/payload-merge.js +0 -215
  218. package/dist/contract/payload-merge.js.map +0 -1
  219. package/dist/events/tool-display.d.ts +0 -22
  220. package/dist/events/tool-display.d.ts.map +0 -1
  221. package/dist/events/tool-display.js +0 -60
  222. package/dist/events/tool-display.js.map +0 -1
  223. package/dist/events/tool-shape.d.ts +0 -48
  224. package/dist/events/tool-shape.d.ts.map +0 -1
  225. package/dist/events/tool-shape.js +0 -225
  226. package/dist/events/tool-shape.js.map +0 -1
  227. package/dist/turns/index.d.ts +0 -11
  228. package/dist/turns/index.d.ts.map +0 -1
  229. package/dist/turns/index.js +0 -11
  230. package/dist/turns/index.js.map +0 -1
  231. package/dist/turns/queries.d.ts +0 -36
  232. package/dist/turns/queries.d.ts.map +0 -1
  233. package/dist/turns/queries.js +0 -37
  234. package/dist/turns/queries.js.map +0 -1
  235. package/dist/turns/replay.d.ts +0 -105
  236. package/dist/turns/replay.d.ts.map +0 -1
  237. package/dist/turns/replay.js +0 -163
  238. package/dist/turns/replay.js.map +0 -1
  239. package/dist/turns/status.d.ts +0 -49
  240. package/dist/turns/status.d.ts.map +0 -1
  241. package/dist/turns/status.js +0 -56
  242. package/dist/turns/status.js.map +0 -1
  243. package/dist/turns/turn-store.d.ts +0 -109
  244. package/dist/turns/turn-store.d.ts.map +0 -1
  245. package/dist/turns/turn-store.js +0 -169
  246. package/dist/turns/turn-store.js.map +0 -1
  247. package/dist/warm/client-cache.d.ts +0 -47
  248. package/dist/warm/client-cache.d.ts.map +0 -1
  249. package/dist/warm/client-cache.js +0 -48
  250. package/dist/warm/client-cache.js.map +0 -1
  251. package/dist/warm/envelope-cache.d.ts +0 -79
  252. package/dist/warm/envelope-cache.d.ts.map +0 -1
  253. package/dist/warm/envelope-cache.js +0 -85
  254. package/dist/warm/envelope-cache.js.map +0 -1
  255. package/dist/warm/index.d.ts +0 -18
  256. package/dist/warm/index.d.ts.map +0 -1
  257. package/dist/warm/index.js +0 -12
  258. package/dist/warm/index.js.map +0 -1
  259. package/dist/warm/payload.d.ts +0 -137
  260. package/dist/warm/payload.d.ts.map +0 -1
  261. package/dist/warm/payload.js +0 -112
  262. package/dist/warm/payload.js.map +0 -1
  263. package/dist/warm/revision.d.ts +0 -70
  264. package/dist/warm/revision.d.ts.map +0 -1
  265. package/dist/warm/revision.js +0 -63
  266. package/dist/warm/revision.js.map +0 -1
  267. package/dist/warm/store-policy.d.ts +0 -57
  268. package/dist/warm/store-policy.d.ts.map +0 -1
  269. package/dist/warm/store-policy.js +0 -89
  270. package/dist/warm/store-policy.js.map +0 -1
  271. package/dist/warm/store.d.ts +0 -42
  272. package/dist/warm/store.d.ts.map +0 -1
  273. package/dist/warm/store.js +0 -69
  274. package/dist/warm/store.js.map +0 -1
  275. package/dist/wire/frames.d.ts +0 -208
  276. package/dist/wire/frames.d.ts.map +0 -1
  277. package/dist/wire/frames.js +0 -245
  278. package/dist/wire/frames.js.map +0 -1
  279. package/dist/wire/index.d.ts +0 -7
  280. package/dist/wire/index.d.ts.map +0 -1
  281. package/dist/wire/index.js +0 -7
  282. package/dist/wire/index.js.map +0 -1
@@ -0,0 +1,51 @@
1
+ import type { SetSessionConfigOptionRequest } from '@agentclientprotocol/sdk';
2
+ export declare const AUTH_MODES: readonly ["platform", "subscription", "byok"];
3
+ export type AuthMode = (typeof AUTH_MODES)[number];
4
+ export declare const PERMISSION_MODES: readonly ["ask", "full_access"];
5
+ export type PermissionMode = (typeof PERMISSION_MODES)[number];
6
+ type WithoutSessionIdentity<Setting> = Setting extends unknown ? Omit<Setting, 'sessionId' | '_meta'> : never;
7
+ /** One ACP session setting selected before a provider session exists. */
8
+ export type ModelSetting = WithoutSessionIdentity<SetSessionConfigOptionRequest>;
9
+ export interface AgentRevisionSelection {
10
+ readonly adapterId: string;
11
+ readonly installationId: string;
12
+ readonly revisionId: string;
13
+ }
14
+ export interface ModelSelection {
15
+ readonly providerId: string;
16
+ readonly modelId: string;
17
+ readonly settings: readonly ModelSetting[];
18
+ }
19
+ export interface AuthSelection {
20
+ readonly mode: AuthMode;
21
+ /** Opaque reference to a prepared platform grant, login, or BYOK credential. */
22
+ readonly bindingId: string;
23
+ }
24
+ export interface ToolSelection {
25
+ /** Immutable amalgm-tools catalog revision. Null is valid only for no tools. */
26
+ readonly revisionId: string | null;
27
+ readonly toolIds: readonly string[];
28
+ }
29
+ export interface CwdSelection {
30
+ /** Absolute path already materialized on `computerId`. */
31
+ readonly path: string;
32
+ readonly workspaceId: string | null;
33
+ readonly materializationRevision: string | null;
34
+ }
35
+ export interface ExecutionContract {
36
+ readonly agent: AgentRevisionSelection;
37
+ readonly model: ModelSelection;
38
+ readonly auth: AuthSelection;
39
+ readonly tools: ToolSelection;
40
+ readonly cwd: CwdSelection;
41
+ readonly permissionMode: PermissionMode;
42
+ readonly computerId: string;
43
+ }
44
+ export declare class InvalidExecutionContractError extends Error {
45
+ readonly code = "INVALID_EXECUTION_CONTRACT";
46
+ constructor(message: string);
47
+ }
48
+ /** Normalize every execution identity without performing discovery or I/O. */
49
+ export declare function normalizeExecutionContract(input: ExecutionContract): ExecutionContract;
50
+ export {};
51
+ //# sourceMappingURL=contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../src/execution/contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AAE9E,eAAO,MAAM,UAAU,+CAAgD,CAAC;AACxE,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnD,eAAO,MAAM,gBAAgB,iCAAkC,CAAC;AAChE,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/D,KAAK,sBAAsB,CAAC,OAAO,IAAI,OAAO,SAAS,OAAO,GAC1D,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,GACpC,KAAK,CAAC;AAEV,yEAAyE;AACzE,MAAM,MAAM,YAAY,GAAG,sBAAsB,CAAC,6BAA6B,CAAC,CAAC;AAEjF,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAC;CAC5C;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,gFAAgF;IAChF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,gFAAgF;IAChF,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,YAAY;IAC3B,0DAA0D;IAC1D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjD;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,sBAAsB,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,qBAAa,6BAA8B,SAAQ,KAAK;IACtD,QAAQ,CAAC,IAAI,gCAAgC;gBAEjC,OAAO,EAAE,MAAM;CAI5B;AAsED,8EAA8E;AAC9E,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,iBAAiB,GAAG,iBAAiB,CAuDtF"}
@@ -0,0 +1,127 @@
1
+ export const AUTH_MODES = ['platform', 'subscription', 'byok'];
2
+ export const PERMISSION_MODES = ['ask', 'full_access'];
3
+ export class InvalidExecutionContractError extends Error {
4
+ code = 'INVALID_EXECUTION_CONTRACT';
5
+ constructor(message) {
6
+ super(message);
7
+ this.name = 'InvalidExecutionContractError';
8
+ }
9
+ }
10
+ function isRecord(value) {
11
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
12
+ }
13
+ function id(value, field) {
14
+ if (typeof value !== 'string' || !value.trim()) {
15
+ throw new InvalidExecutionContractError(`${field} must be a non-empty string`);
16
+ }
17
+ return value.trim();
18
+ }
19
+ function nullableId(value, field) {
20
+ if (value === null)
21
+ return null;
22
+ return id(value, field);
23
+ }
24
+ function absolutePath(value) {
25
+ const path = id(value, 'cwd.path');
26
+ const posix = path.startsWith('/');
27
+ const windowsDrive = /^[A-Za-z]:[\\/]/.test(path);
28
+ const windowsUnc = /^\\\\[^\\]+\\[^\\]+/.test(path);
29
+ if (!posix && !windowsDrive && !windowsUnc) {
30
+ throw new InvalidExecutionContractError('cwd.path must be absolute');
31
+ }
32
+ return path;
33
+ }
34
+ function normalizeSettings(value) {
35
+ if (!Array.isArray(value)) {
36
+ throw new InvalidExecutionContractError('model.settings must be an array');
37
+ }
38
+ const seen = new Set();
39
+ const settings = value.map((raw, index) => {
40
+ if (!isRecord(raw)) {
41
+ throw new InvalidExecutionContractError(`model.settings[${index}] must be an ACP config selection`);
42
+ }
43
+ const configId = id(raw['configId'], `model.settings[${index}].configId`);
44
+ if (seen.has(configId)) {
45
+ throw new InvalidExecutionContractError(`model.settings contains duplicate configId: ${configId}`);
46
+ }
47
+ seen.add(configId);
48
+ if (raw['type'] === 'boolean') {
49
+ if (typeof raw['value'] !== 'boolean') {
50
+ throw new InvalidExecutionContractError(`model.settings[${index}].value must be boolean`);
51
+ }
52
+ return Object.freeze({ configId, type: 'boolean', value: raw['value'] });
53
+ }
54
+ if (raw['type'] !== undefined) {
55
+ throw new InvalidExecutionContractError(`model.settings[${index}].type must be boolean or omitted`);
56
+ }
57
+ const selected = id(raw['value'], `model.settings[${index}].value`);
58
+ return Object.freeze({ configId, value: selected });
59
+ });
60
+ return Object.freeze(settings.sort((left, right) => left.configId.localeCompare(right.configId)));
61
+ }
62
+ function normalizeTools(value) {
63
+ if (!isRecord(value) || !Array.isArray(value['toolIds'])) {
64
+ throw new InvalidExecutionContractError('tools must contain revisionId and toolIds');
65
+ }
66
+ const toolIds = [...new Set(value['toolIds'].map((toolId, index) => id(toolId, `tools.toolIds[${index}]`)))].sort();
67
+ const revisionId = nullableId(value['revisionId'], 'tools.revisionId');
68
+ if (toolIds.length > 0 && revisionId === null) {
69
+ throw new InvalidExecutionContractError('tools.revisionId is required when tools are selected');
70
+ }
71
+ return Object.freeze({ revisionId, toolIds: Object.freeze(toolIds) });
72
+ }
73
+ /** Normalize every execution identity without performing discovery or I/O. */
74
+ export function normalizeExecutionContract(input) {
75
+ if (!isRecord(input))
76
+ throw new InvalidExecutionContractError('execution contract must be an object');
77
+ const agent = input.agent;
78
+ const model = input.model;
79
+ const auth = input.auth;
80
+ const cwd = input.cwd;
81
+ if (!isRecord(agent))
82
+ throw new InvalidExecutionContractError('agent must be an immutable revision selection');
83
+ if (!isRecord(model))
84
+ throw new InvalidExecutionContractError('model must be provider-scoped');
85
+ if (!isRecord(auth))
86
+ throw new InvalidExecutionContractError('auth must be explicit');
87
+ if (!isRecord(cwd))
88
+ throw new InvalidExecutionContractError('cwd must be prepared');
89
+ const mode = auth['mode'];
90
+ if (typeof mode !== 'string' || !AUTH_MODES.includes(mode)) {
91
+ throw new InvalidExecutionContractError(`auth.mode must be one of: ${AUTH_MODES.join(', ')}`);
92
+ }
93
+ const permissionMode = input.permissionMode;
94
+ if (typeof permissionMode !== 'string' || !PERMISSION_MODES.includes(permissionMode)) {
95
+ throw new InvalidExecutionContractError(`permissionMode must be one of: ${PERMISSION_MODES.join(', ')}`);
96
+ }
97
+ const workspaceId = nullableId(cwd['workspaceId'], 'cwd.workspaceId');
98
+ const materializationRevision = nullableId(cwd['materializationRevision'], 'cwd.materializationRevision');
99
+ if ((workspaceId === null) !== (materializationRevision === null)) {
100
+ throw new InvalidExecutionContractError('cwd.workspaceId and cwd.materializationRevision must both be present or both be null');
101
+ }
102
+ return Object.freeze({
103
+ agent: Object.freeze({
104
+ adapterId: id(agent['adapterId'], 'agent.adapterId'),
105
+ installationId: id(agent['installationId'], 'agent.installationId'),
106
+ revisionId: id(agent['revisionId'], 'agent.revisionId'),
107
+ }),
108
+ model: Object.freeze({
109
+ providerId: id(model['providerId'], 'model.providerId'),
110
+ modelId: id(model['modelId'], 'model.modelId'),
111
+ settings: normalizeSettings(model['settings']),
112
+ }),
113
+ auth: Object.freeze({
114
+ mode: mode,
115
+ bindingId: id(auth['bindingId'], 'auth.bindingId'),
116
+ }),
117
+ tools: normalizeTools(input.tools),
118
+ cwd: Object.freeze({
119
+ path: absolutePath(cwd['path']),
120
+ workspaceId,
121
+ materializationRevision,
122
+ }),
123
+ permissionMode: permissionMode,
124
+ computerId: id(input.computerId, 'computerId'),
125
+ });
126
+ }
127
+ //# sourceMappingURL=contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/execution/contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export type { AgentRevisionSelection, AuthMode, AuthSelection, CwdSelection, ExecutionContract, ModelSelection, ModelSetting, PermissionMode, ToolSelection, } from './contract.js';
2
+ export { AUTH_MODES, PERMISSION_MODES, InvalidExecutionContractError, normalizeExecutionContract, } from './contract.js';
3
+ export { canonicalExecutionJson, executionRevision } from './revision.js';
4
+ export type { ExecutionHandle, PreparedExecution } from './store.js';
5
+ export { ExecutionNotPreparedError, ExecutionRevisionMismatchError, PreparedExecutionStore, } from './store.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/execution/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,sBAAsB,EACtB,QAAQ,EACR,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,cAAc,EACd,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,6BAA6B,EAC7B,0BAA0B,GAC3B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC1E,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,EACL,yBAAyB,EACzB,8BAA8B,EAC9B,sBAAsB,GACvB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { AUTH_MODES, PERMISSION_MODES, InvalidExecutionContractError, normalizeExecutionContract, } from './contract.js';
2
+ export { canonicalExecutionJson, executionRevision } from './revision.js';
3
+ export { ExecutionNotPreparedError, ExecutionRevisionMismatchError, PreparedExecutionStore, } from './store.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/execution/index.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,6BAA6B,EAC7B,0BAA0B,GAC3B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAE1E,OAAO,EACL,yBAAyB,EACzB,8BAA8B,EAC9B,sBAAsB,GACvB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { Sha256HexPort } from '../ports.js';
2
+ import type { ExecutionContract } from './contract.js';
3
+ export declare function canonicalExecutionJson(contract: ExecutionContract): string;
4
+ export declare function executionRevision(contract: ExecutionContract, sha256Hex: Sha256HexPort): string;
5
+ //# sourceMappingURL=revision.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revision.d.ts","sourceRoot":"","sources":["../../src/execution/revision.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAavD,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,CAE1E;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,SAAS,EAAE,aAAa,GAAG,MAAM,CAE/F"}
@@ -0,0 +1,17 @@
1
+ function canonicalValue(value) {
2
+ if (Array.isArray(value))
3
+ return value.map(canonicalValue);
4
+ if (value === null || typeof value !== 'object')
5
+ return value;
6
+ const input = value;
7
+ return Object.fromEntries(Object.keys(input)
8
+ .sort()
9
+ .map((key) => [key, canonicalValue(input[key])]));
10
+ }
11
+ export function canonicalExecutionJson(contract) {
12
+ return JSON.stringify(canonicalValue(contract));
13
+ }
14
+ export function executionRevision(contract, sha256Hex) {
15
+ return sha256Hex(canonicalExecutionJson(contract));
16
+ }
17
+ //# sourceMappingURL=revision.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revision.js","sourceRoot":"","sources":["../../src/execution/revision.ts"],"names":[],"mappings":"AAGA,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC3D,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,KAAK,GAAG,KAAgC,CAAC;IAC/C,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;SACf,IAAI,EAAE;SACN,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CACnD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,QAA2B;IAChE,OAAO,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAA2B,EAAE,SAAwB;IACrF,OAAO,SAAS,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC,CAAC;AACrD,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { ExecutionContract } from './contract.js';
2
+ export interface ExecutionHandle {
3
+ readonly id: string;
4
+ readonly revision: string;
5
+ }
6
+ export interface PreparedExecution<Binding> extends ExecutionHandle {
7
+ readonly contract: ExecutionContract;
8
+ /** Host-only, already-resolved adapter state. Never serialize this field. */
9
+ readonly binding: Binding;
10
+ }
11
+ export declare class ExecutionNotPreparedError extends Error {
12
+ readonly code = "EXECUTION_NOT_PREPARED";
13
+ constructor(id: string);
14
+ }
15
+ export declare class ExecutionRevisionMismatchError extends Error {
16
+ readonly code = "EXECUTION_REVISION_MISMATCH";
17
+ constructor(id: string);
18
+ }
19
+ export declare class PreparedExecutionStore<Binding> {
20
+ #private;
21
+ publish(record: PreparedExecution<Binding>): ExecutionHandle;
22
+ resolve(handle: ExecutionHandle): PreparedExecution<Binding>;
23
+ current(id: string): ExecutionHandle | null;
24
+ delete(id: string): boolean;
25
+ }
26
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/execution/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEvD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB,CAAC,OAAO,CAAE,SAAQ,eAAe;IACjE,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,6EAA6E;IAC7E,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,QAAQ,CAAC,IAAI,4BAA4B;gBAE7B,EAAE,EAAE,MAAM;CAIvB;AAED,qBAAa,8BAA+B,SAAQ,KAAK;IACvD,QAAQ,CAAC,IAAI,iCAAiC;gBAElC,EAAE,EAAE,MAAM;CAIvB;AAED,qBAAa,sBAAsB,CAAC,OAAO;;IAGzC,OAAO,CAAC,MAAM,EAAE,iBAAiB,CAAC,OAAO,CAAC,GAAG,eAAe;IAM5D,OAAO,CAAC,MAAM,EAAE,eAAe,GAAG,iBAAiB,CAAC,OAAO,CAAC;IAO5D,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAK3C,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;CAG5B"}
@@ -0,0 +1,38 @@
1
+ export class ExecutionNotPreparedError extends Error {
2
+ code = 'EXECUTION_NOT_PREPARED';
3
+ constructor(id) {
4
+ super(`Execution is not prepared: ${id}`);
5
+ this.name = 'ExecutionNotPreparedError';
6
+ }
7
+ }
8
+ export class ExecutionRevisionMismatchError extends Error {
9
+ code = 'EXECUTION_REVISION_MISMATCH';
10
+ constructor(id) {
11
+ super(`Prepared execution revision changed: ${id}`);
12
+ this.name = 'ExecutionRevisionMismatchError';
13
+ }
14
+ }
15
+ export class PreparedExecutionStore {
16
+ #records = new Map();
17
+ publish(record) {
18
+ const immutable = Object.freeze({ ...record });
19
+ this.#records.set(record.id, immutable);
20
+ return Object.freeze({ id: immutable.id, revision: immutable.revision });
21
+ }
22
+ resolve(handle) {
23
+ const record = this.#records.get(handle.id);
24
+ if (!record)
25
+ throw new ExecutionNotPreparedError(handle.id);
26
+ if (record.revision !== handle.revision)
27
+ throw new ExecutionRevisionMismatchError(handle.id);
28
+ return record;
29
+ }
30
+ current(id) {
31
+ const record = this.#records.get(id);
32
+ return record ? Object.freeze({ id: record.id, revision: record.revision }) : null;
33
+ }
34
+ delete(id) {
35
+ return this.#records.delete(id);
36
+ }
37
+ }
38
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/execution/store.ts"],"names":[],"mappings":"AAaA,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IACzC,IAAI,GAAG,wBAAwB,CAAC;IAEzC,YAAY,EAAU;QACpB,KAAK,CAAC,8BAA8B,EAAE,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;IAC1C,CAAC;CACF;AAED,MAAM,OAAO,8BAA+B,SAAQ,KAAK;IAC9C,IAAI,GAAG,6BAA6B,CAAC;IAE9C,YAAY,EAAU;QACpB,KAAK,CAAC,wCAAwC,EAAE,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,IAAI,GAAG,gCAAgC,CAAC;IAC/C,CAAC;CACF;AAED,MAAM,OAAO,sBAAsB;IACxB,QAAQ,GAAG,IAAI,GAAG,EAAsC,CAAC;IAElE,OAAO,CAAC,MAAkC;QACxC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;QAC/C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QACxC,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,CAAC,MAAuB;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,yBAAyB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5D,IAAI,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ;YAAE,MAAM,IAAI,8BAA8B,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC7F,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,CAAC,EAAU;QAChB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrC,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACrF,CAAC;IAED,MAAM,CAAC,EAAU;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;CACF"}
package/dist/index.d.ts CHANGED
@@ -1,29 +1,14 @@
1
- /**
2
- * @amalgm/chat — the conversation pipeline's laws.
3
- *
4
- * One module per job (PURPOSE.md "The seven jobs"):
5
- * events/ the canonical event grammar (constructors + zod schema)
6
- * wire/ the SSE frame projection (ACP-shaped AgentStreamEvent)
7
- * transcript/ message reducer, parts, tool shape/display — transcript truth
8
- * turns/ TurnStore, status machine, replay grammar
9
- * contract/ frozen session contract: harnesses, model identities,
10
- * freeze algebra, chatInput, payload merge, input
11
- * warm/ warm-payload laws: revision, fingerprint, cache policies
12
- * usage/ token algebra, turn finalization, ownership fork, catalog
13
- * api/ thin fetch adapters over SDK services
14
- * normalizers/ native harness events → the grammar (wave B)
15
- *
16
- * Hosts inject effects through the port types in `ports.ts` (axiom 7).
17
- * Prefer the subpath exports (`@amalgm/chat/<module>`) — name collisions
18
- * between modules are resolved there, not flattened here.
19
- */
1
+ /** @amalgm/chat — one durable conversation capability over official ACP output. */
20
2
  export * as events from './events/index.js';
21
- export * as wire from './wire/index.js';
22
3
  export * as transcript from './transcript/index.js';
23
- export * as turns from './turns/index.js';
24
- export * as contract from './contract/index.js';
25
- export * as warm from './warm/index.js';
26
4
  export * as usage from './usage/index.js';
27
5
  export * as api from './api/index.js';
6
+ export * as acp from './acp/index.js';
7
+ export * as input from './input/index.js';
8
+ export * as execution from './execution/index.js';
9
+ export * as sessions from './sessions/index.js';
10
+ export * as conversations from './conversations/index.js';
11
+ export { Chat, ChatTurnStream, ChatSession, InterruptUnsupportedError, SessionAgentMismatchError, SessionAlreadyExistsError, SessionBusyError, SessionNotFoundError, SubscriberBackpressureError, TurnStreamError, } from './sessions/index.js';
12
+ export type { ChatRuntimePort, InterruptResult, RuntimeInterruptRequest, } from './sessions/index.js';
28
13
  export type { ClockMsPort, ClockIsoPort, Sha256HexPort, RandomUuidPort } from './ports.js';
29
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,UAAU,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mFAAmF;AAEnF,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,UAAU,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,aAAa,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EACL,IAAI,EACJ,cAAc,EACd,WAAW,EACX,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,EACzB,gBAAgB,EAChB,oBAAoB,EACpB,2BAA2B,EAC3B,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,eAAe,EACf,eAAe,EACf,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,28 +1,12 @@
1
- /**
2
- * @amalgm/chat — the conversation pipeline's laws.
3
- *
4
- * One module per job (PURPOSE.md "The seven jobs"):
5
- * events/ the canonical event grammar (constructors + zod schema)
6
- * wire/ the SSE frame projection (ACP-shaped AgentStreamEvent)
7
- * transcript/ message reducer, parts, tool shape/display — transcript truth
8
- * turns/ TurnStore, status machine, replay grammar
9
- * contract/ frozen session contract: harnesses, model identities,
10
- * freeze algebra, chatInput, payload merge, input
11
- * warm/ warm-payload laws: revision, fingerprint, cache policies
12
- * usage/ token algebra, turn finalization, ownership fork, catalog
13
- * api/ thin fetch adapters over SDK services
14
- * normalizers/ native harness events → the grammar (wave B)
15
- *
16
- * Hosts inject effects through the port types in `ports.ts` (axiom 7).
17
- * Prefer the subpath exports (`@amalgm/chat/<module>`) — name collisions
18
- * between modules are resolved there, not flattened here.
19
- */
1
+ /** @amalgm/chat — one durable conversation capability over official ACP output. */
20
2
  export * as events from './events/index.js';
21
- export * as wire from './wire/index.js';
22
3
  export * as transcript from './transcript/index.js';
23
- export * as turns from './turns/index.js';
24
- export * as contract from './contract/index.js';
25
- export * as warm from './warm/index.js';
26
4
  export * as usage from './usage/index.js';
27
5
  export * as api from './api/index.js';
6
+ export * as acp from './acp/index.js';
7
+ export * as input from './input/index.js';
8
+ export * as execution from './execution/index.js';
9
+ export * as sessions from './sessions/index.js';
10
+ export * as conversations from './conversations/index.js';
11
+ export { Chat, ChatTurnStream, ChatSession, InterruptUnsupportedError, SessionAgentMismatchError, SessionAlreadyExistsError, SessionBusyError, SessionNotFoundError, SubscriberBackpressureError, TurnStreamError, } from './sessions/index.js';
28
12
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,UAAU,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mFAAmF;AAEnF,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,UAAU,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,aAAa,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EACL,IAAI,EACJ,cAAc,EACd,WAAW,EACX,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,EACzB,gBAAgB,EAChB,oBAAoB,EACpB,2BAA2B,EAC3B,eAAe,GAChB,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export type { Attachment, PromptInput, PromptPart } from './prompt.js';
2
+ export { InvalidPromptError, normalizePrompt, promptFromText } from './prompt.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/input/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { InvalidPromptError, normalizePrompt, promptFromText } from './prompt.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/input/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { ContentBlock } from '@agentclientprotocol/sdk';
2
+ export type PromptPart = ContentBlock;
3
+ export type Attachment = Exclude<ContentBlock, {
4
+ type: 'text';
5
+ }>;
6
+ export interface PromptInput {
7
+ readonly parts: readonly PromptPart[];
8
+ }
9
+ export declare class InvalidPromptError extends Error {
10
+ readonly code = "INVALID_PROMPT";
11
+ constructor(message: string);
12
+ }
13
+ /** Validate and detach a prompt from caller-owned mutable objects. */
14
+ export declare function normalizePrompt(input: PromptInput): PromptInput;
15
+ /** Convenience only; the canonical prompt remains an ordered ACP part list. */
16
+ export declare function promptFromText(text: string, attachments?: readonly Attachment[]): PromptInput;
17
+ //# sourceMappingURL=prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/input/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D,MAAM,MAAM,UAAU,GAAG,YAAY,CAAC;AACtC,MAAM,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEjE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;CACvC;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,oBAAoB;gBAErB,OAAO,EAAE,MAAM;CAI5B;AAuFD,sEAAsE;AACtE,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CAO/D;AAED,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,GAAE,SAAS,UAAU,EAAO,GAAG,WAAW,CAMjG"}
@@ -0,0 +1,104 @@
1
+ export class InvalidPromptError extends Error {
2
+ code = 'INVALID_PROMPT';
3
+ constructor(message) {
4
+ super(message);
5
+ this.name = 'InvalidPromptError';
6
+ }
7
+ }
8
+ function isRecord(value) {
9
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
10
+ }
11
+ function requireString(record, key, label) {
12
+ const value = record[key];
13
+ if (typeof value !== 'string') {
14
+ throw new InvalidPromptError(`${label}.${key} must be a string`);
15
+ }
16
+ return value;
17
+ }
18
+ function requireNonEmptyString(record, key, label) {
19
+ const value = requireString(record, key, label);
20
+ if (!value.trim()) {
21
+ throw new InvalidPromptError(`${label}.${key} must not be empty`);
22
+ }
23
+ return value;
24
+ }
25
+ function clone(value) {
26
+ if (Array.isArray(value))
27
+ return value.map((item) => clone(item));
28
+ if (!isRecord(value))
29
+ return value;
30
+ return Object.fromEntries(Object.entries(value).map(([key, item]) => [key, clone(item)]));
31
+ }
32
+ function deepFreeze(value) {
33
+ if (Array.isArray(value)) {
34
+ for (const item of value)
35
+ deepFreeze(item);
36
+ return Object.freeze(value);
37
+ }
38
+ if (isRecord(value)) {
39
+ for (const item of Object.values(value))
40
+ deepFreeze(item);
41
+ return Object.freeze(value);
42
+ }
43
+ return value;
44
+ }
45
+ function validatePart(part, index) {
46
+ const label = `prompt.parts[${index}]`;
47
+ if (!isRecord(part))
48
+ throw new InvalidPromptError(`${label} must be an ACP content block`);
49
+ const type = requireNonEmptyString(part, 'type', label);
50
+ if (type === 'text') {
51
+ requireString(part, 'text', label);
52
+ return clone(part);
53
+ }
54
+ if (type === 'image' || type === 'audio') {
55
+ requireNonEmptyString(part, 'data', label);
56
+ requireNonEmptyString(part, 'mimeType', label);
57
+ return clone(part);
58
+ }
59
+ if (type === 'resource_link') {
60
+ requireNonEmptyString(part, 'name', label);
61
+ requireNonEmptyString(part, 'uri', label);
62
+ if (part['size'] !== undefined && part['size'] !== null) {
63
+ const size = part['size'];
64
+ if (typeof size !== 'number' || !Number.isFinite(size) || size < 0) {
65
+ throw new InvalidPromptError(`${label}.size must be a non-negative number`);
66
+ }
67
+ }
68
+ return clone(part);
69
+ }
70
+ if (type === 'resource') {
71
+ const resource = part['resource'];
72
+ if (!isRecord(resource)) {
73
+ throw new InvalidPromptError(`${label}.resource must be an ACP embedded resource`);
74
+ }
75
+ requireNonEmptyString(resource, 'uri', `${label}.resource`);
76
+ const hasText = typeof resource['text'] === 'string';
77
+ const hasBlob = typeof resource['blob'] === 'string' && resource['blob'].length > 0;
78
+ if (hasText === hasBlob) {
79
+ throw new InvalidPromptError(`${label}.resource must contain exactly one of text or blob`);
80
+ }
81
+ return clone(part);
82
+ }
83
+ throw new InvalidPromptError(`${label}.type is not a supported ACP content type: ${type}`);
84
+ }
85
+ /** Validate and detach a prompt from caller-owned mutable objects. */
86
+ export function normalizePrompt(input) {
87
+ if (!isRecord(input) || !Array.isArray(input.parts) || input.parts.length === 0) {
88
+ throw new InvalidPromptError('prompt.parts must contain at least one ACP content block');
89
+ }
90
+ return Object.freeze({
91
+ parts: Object.freeze(input.parts.map((part, index) => deepFreeze(validatePart(part, index)))),
92
+ });
93
+ }
94
+ /** Convenience only; the canonical prompt remains an ordered ACP part list. */
95
+ export function promptFromText(text, attachments = []) {
96
+ if (typeof text !== 'string')
97
+ throw new InvalidPromptError('text must be a string');
98
+ const parts = [];
99
+ if (text.length > 0)
100
+ parts.push({ type: 'text', text });
101
+ parts.push(...attachments);
102
+ return normalizePrompt({ parts });
103
+ }
104
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/input/prompt.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,6 @@
1
1
  /**
2
- * Claude Code (Agent SDK) normalizer engine
3
- * `chat-core/normalizers/claude.js` (540 lines) ported byte-exact.
4
- *
5
- * The engine module calls the event constructors from `../events` directly;
6
- * here the host builds an {@link EventConstructors} instance (axiom 7) and
2
+ * Claude Code Agent SDK normalizer. The host builds an
3
+ * {@link EventConstructors} instance and
7
4
  * `createClaudeNormalizer(events)` closes the stateful entry points over it.
8
5
  * The usage helpers (`usageFromClaude`, `usageFromClaudeModelUsage`,
9
6
  * `usageRecordsFromClaudeResult`) and the pure string helpers
@@ -11,8 +8,8 @@
11
8
  * are also exported at module level.
12
9
  *
13
10
  * Note: `result` message handling (usage records emission, cost, error, done)
14
- * lives in the engine ADAPTER (`chat-core/adapters/claude.js`), not here —
15
- * this module only provides `usageRecordsFromClaudeResult` for it.
11
+ * lives in the Claude adapter; this module provides
12
+ * `usageRecordsFromClaudeResult` for that boundary.
16
13
  */
17
14
  import type { EventConstructors } from '../events/index.js';
18
15
  import { type NormalizedUsage } from '../usage/index.js';
@@ -55,7 +52,7 @@ export declare function stringifyClaudeContent(content: unknown): string;
55
52
  /**
56
53
  * Build the engine's Claude normalizer export set over an injected
57
54
  * {@link EventConstructors} instance. Function-for-function parity with
58
- * engine `chat-core/normalizers/claude.js` `module.exports`.
55
+ * canonical Claude normalizer surface.
59
56
  */
60
57
  export declare function createClaudeNormalizer(events: EventConstructors): {
61
58
  normalizeClaudeContentBlock: (block: AnyRecord | null | undefined, providerSessionId?: unknown, state?: ClaudeNormalizerState | null, raw?: AnyRecord | undefined) => ({
@@ -622,7 +619,7 @@ export declare function createClaudeNormalizer(events: EventConstructors): {
622
619
  usageFromClaude: typeof usageFromClaude;
623
620
  usageFromClaudeModelUsage: typeof usageFromClaudeModelUsage;
624
621
  };
625
- /** The engine `chat-core/normalizers/claude.js` export set, closed over injected constructors. */
622
+ /** The Claude normalizer set, closed over injected constructors. */
626
623
  export type ClaudeNormalizer = ReturnType<typeof createClaudeNormalizer>;
627
624
  export {};
628
625
  //# sourceMappingURL=claude.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/normalizers/claude.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/normalizers/claude.ts"],"names":[],"mappings":"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"}