@amalgm/chat 0.1.2 → 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 (286) hide show
  1. package/AGENTS.md +98 -0
  2. package/PURPOSE.md +143 -112
  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 -25
  61. package/dist/index.d.ts.map +1 -1
  62. package/dist/index.js +7 -25
  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 +44 -24
  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/relay/index.d.ts +0 -65
  228. package/dist/relay/index.d.ts.map +0 -1
  229. package/dist/relay/index.js +0 -197
  230. package/dist/relay/index.js.map +0 -1
  231. package/dist/turns/index.d.ts +0 -11
  232. package/dist/turns/index.d.ts.map +0 -1
  233. package/dist/turns/index.js +0 -11
  234. package/dist/turns/index.js.map +0 -1
  235. package/dist/turns/queries.d.ts +0 -36
  236. package/dist/turns/queries.d.ts.map +0 -1
  237. package/dist/turns/queries.js +0 -37
  238. package/dist/turns/queries.js.map +0 -1
  239. package/dist/turns/replay.d.ts +0 -105
  240. package/dist/turns/replay.d.ts.map +0 -1
  241. package/dist/turns/replay.js +0 -163
  242. package/dist/turns/replay.js.map +0 -1
  243. package/dist/turns/status.d.ts +0 -49
  244. package/dist/turns/status.d.ts.map +0 -1
  245. package/dist/turns/status.js +0 -56
  246. package/dist/turns/status.js.map +0 -1
  247. package/dist/turns/turn-store.d.ts +0 -109
  248. package/dist/turns/turn-store.d.ts.map +0 -1
  249. package/dist/turns/turn-store.js +0 -169
  250. package/dist/turns/turn-store.js.map +0 -1
  251. package/dist/warm/client-cache.d.ts +0 -47
  252. package/dist/warm/client-cache.d.ts.map +0 -1
  253. package/dist/warm/client-cache.js +0 -48
  254. package/dist/warm/client-cache.js.map +0 -1
  255. package/dist/warm/envelope-cache.d.ts +0 -79
  256. package/dist/warm/envelope-cache.d.ts.map +0 -1
  257. package/dist/warm/envelope-cache.js +0 -85
  258. package/dist/warm/envelope-cache.js.map +0 -1
  259. package/dist/warm/index.d.ts +0 -18
  260. package/dist/warm/index.d.ts.map +0 -1
  261. package/dist/warm/index.js +0 -12
  262. package/dist/warm/index.js.map +0 -1
  263. package/dist/warm/payload.d.ts +0 -137
  264. package/dist/warm/payload.d.ts.map +0 -1
  265. package/dist/warm/payload.js +0 -112
  266. package/dist/warm/payload.js.map +0 -1
  267. package/dist/warm/revision.d.ts +0 -70
  268. package/dist/warm/revision.d.ts.map +0 -1
  269. package/dist/warm/revision.js +0 -63
  270. package/dist/warm/revision.js.map +0 -1
  271. package/dist/warm/store-policy.d.ts +0 -57
  272. package/dist/warm/store-policy.d.ts.map +0 -1
  273. package/dist/warm/store-policy.js +0 -89
  274. package/dist/warm/store-policy.js.map +0 -1
  275. package/dist/warm/store.d.ts +0 -42
  276. package/dist/warm/store.d.ts.map +0 -1
  277. package/dist/warm/store.js +0 -69
  278. package/dist/warm/store.js.map +0 -1
  279. package/dist/wire/frames.d.ts +0 -208
  280. package/dist/wire/frames.d.ts.map +0 -1
  281. package/dist/wire/frames.js +0 -245
  282. package/dist/wire/frames.js.map +0 -1
  283. package/dist/wire/index.d.ts +0 -7
  284. package/dist/wire/index.d.ts.map +0 -1
  285. package/dist/wire/index.js +0 -7
  286. package/dist/wire/index.js.map +0 -1
@@ -1,249 +0,0 @@
1
- /**
2
- * `createContract` — engine `chat-core/contract.js:460-648`, ported as a pure
3
- * orchestration. Effectful collaborators are injected:
4
- *
5
- * - `authEnvelope` — engine `chat-core/auth.js authEnvelope` (reads the
6
- * BYOK credential store + provider auth files)
7
- * - `normalizeAgentConfig`— engine `amalgm-mcp/agent-config/schema.js`
8
- * (uses crypto.randomUUID for stable ids)
9
- * - `cwd` ports — the filesystem checks behind `resolveCwd`
10
- * (engine: fs.statSync / os.homedir / path,
11
- * `runtime/scripts/lib/project-paths.js`)
12
- * - `sha256Hex` — the runtimeKey fingerprint (engine: node:crypto)
13
- *
14
- * Env-derived engine defaults become documented options:
15
- *
16
- * - `options.defaultCwd` — engine `DEFAULT_CWD` = `AMALGM_DEFAULT_CWD` || '/workspace'
17
- * - `options.port` — engine `runtimePort('chat-server')` (runtime-manifest)
18
- * - `options.proxyToken` — engine config `PROXY_TOKEN`
19
- * - `options.proxyBaseUrl`— engine `PROXY_BASE_URL || DEFAULT_PROXY_BASE_URL`
20
- * - `options.amalgmDir` — engine config `AMALGM_DIR`
21
- * - `options.containerId` — engine `process.env.AMALGM_CONTAINER_ID`
22
- */
23
- import { agentToHarness, assertSupportedHarness } from './harnesses.js';
24
- import { canonicalModel, cliModelFor } from './models.js';
25
- import { frozenRuntimeFields, runtimeKey } from './freeze.js';
26
- // ── Host auth surface (engine chat-core/auth.js) ────────────────────────────
27
- /** Engine `AUTH_BY_HARNESS` (`auth.js:9-15`): supported methods, first = default. */
28
- export const AUTH_BY_HARNESS = {
29
- claude_code: ['amalgm', 'byok', 'provider_auth'],
30
- codex: ['amalgm', 'byok', 'provider_auth'],
31
- opencode: ['amalgm', 'byok', 'provider_auth'],
32
- cursor: ['provider_auth'],
33
- pi: ['amalgm', 'byok', 'provider_auth'],
34
- };
35
- /**
36
- * Engine `coerceAuth` (`auth.js:70-73`): clamp a requested auth method to the
37
- * harness's supported set, defaulting to the first supported method.
38
- */
39
- export function coerceAuth(harness, requested) {
40
- const supported = AUTH_BY_HARNESS[harness] || ['amalgm'];
41
- return requested && supported.includes(requested) ? requested : supported[0];
42
- }
43
- /**
44
- * The 409 thrown when a cloud-workspace turn cannot resolve its folder —
45
- * engine `contract.js:493-497,503-507`. Message, `code`, and `status` are
46
- * byte-exact.
47
- */
48
- export function workspaceCwdUnavailableError() {
49
- return Object.assign(new Error('Cloud workspace folder is unavailable.'), { code: 'workspace_cwd_unavailable', status: 409 });
50
- }
51
- function existingDirectory(candidate, ports) {
52
- if (!candidate)
53
- return null;
54
- try {
55
- return ports.isDirectory(candidate) ? candidate : null;
56
- }
57
- catch {
58
- return null;
59
- }
60
- }
61
- function safeProcessCwd(ports) {
62
- try {
63
- return ports.processCwd();
64
- }
65
- catch {
66
- return null;
67
- }
68
- }
69
- /**
70
- * Engine `resolveCwd` (`contract.js:486-510`), decision logic verbatim.
71
- * With `requireCwd`, an empty or non-existent cwd throws
72
- * `workspace_cwd_unavailable` (409) instead of falling back.
73
- */
74
- export function resolveCwd(rawCwd, options, ports) {
75
- const fallback = existingDirectory(ports.canonicalProjectPath(ports.expandHome(options.cwd)), ports)
76
- || existingDirectory(ports.canonicalProjectPath(ports.expandHome(options.defaultCwd ?? '/workspace')), ports)
77
- || existingDirectory(safeProcessCwd(ports), ports)
78
- || ports.homedir();
79
- const expanded = ports.expandHome(rawCwd);
80
- if (!expanded) {
81
- if (options.requireCwd) {
82
- throw workspaceCwdUnavailableError();
83
- }
84
- return fallback;
85
- }
86
- const absolute = ports.isAbsolute(expanded) ? expanded : ports.resolvePath(fallback, expanded);
87
- const resolved = existingDirectory(ports.canonicalProjectPath(absolute), ports);
88
- if (!resolved && options.requireCwd) {
89
- throw workspaceCwdUnavailableError();
90
- }
91
- return resolved || fallback;
92
- }
93
- // ── Pure payload normalizers (engine contract.js:512-567) ───────────────────
94
- function nullableString(value) {
95
- return typeof value === 'string' && value.trim() ? value.trim() : null;
96
- }
97
- /** Engine `normalizeOrigin` (`contract.js:516-533`) — pure, ported fully. */
98
- export function normalizeOrigin(payload = {}) {
99
- const raw = payload.origin && typeof payload.origin === 'object' ? payload.origin : {};
100
- const type = nullableString(raw.type || payload.originType || payload.origin);
101
- const id = nullableString(raw.id
102
- || raw.originId
103
- || payload.originId
104
- || payload.taskId
105
- || payload.triggerId);
106
- if (!type || !id)
107
- return null;
108
- return {
109
- type,
110
- id,
111
- name: nullableString(raw.name || raw.originName || payload.originName),
112
- projectPath: nullableString(raw.projectPath || payload.projectPath || payload.cwd),
113
- };
114
- }
115
- function normalizeConstruct(input, fallback = {}) {
116
- if (!input || typeof input !== 'object')
117
- return null;
118
- const type = nullableString(input.type || input.scopeType);
119
- if (!type)
120
- return null;
121
- const id = nullableString(input.id || input.scopeId || input.originId);
122
- const projectPath = nullableString(input.projectPath || input.path || fallback.projectPath);
123
- const item = {
124
- type,
125
- id,
126
- name: nullableString(input.name || input.originName),
127
- projectPath,
128
- path: nullableString(input.path),
129
- };
130
- if (!item.id && !item.projectPath && !item.path)
131
- return null;
132
- return item;
133
- }
134
- /** Engine `normalizeConstructs` (`contract.js:552-567`) — pure, ported fully. */
135
- export function normalizeConstructs(payload = {}, cwd = null) {
136
- const constructs = [];
137
- for (const item of Array.isArray(payload.constructs) ? payload.constructs : []) {
138
- const normalized = normalizeConstruct(item, { projectPath: cwd });
139
- if (normalized)
140
- constructs.push(normalized);
141
- }
142
- const origin = normalizeOrigin(payload);
143
- if (origin)
144
- constructs.push(origin);
145
- const seen = new Set();
146
- return constructs.filter((item) => {
147
- const key = `${item.type}:${item.id || item.projectPath || item.path || ''}`;
148
- if (seen.has(key))
149
- return false;
150
- seen.add(key);
151
- return true;
152
- });
153
- }
154
- /** Engine `positiveOrNull` (`contract.js:400-403`). */
155
- export function positiveOrNull(value) {
156
- const parsed = Number(value);
157
- return Number.isFinite(parsed) && parsed > 0 ? parsed : null;
158
- }
159
- /**
160
- * Engine `createContract` (`contract.js:569-648`). Field-for-field parity,
161
- * including every error message and precedence chain. The uncommitted
162
- * cloud-workspace behavior is preserved: `payload.cloudWorkspaceRef` makes
163
- * cwd resolution mandatory (`workspace_cwd_unavailable`, 409).
164
- */
165
- export function createContract(payload, options, ports) {
166
- const sessionId = payload.codeSessionId || payload.sessionId;
167
- if (!sessionId)
168
- throw new Error('codeSessionId is required');
169
- const assistantMessageId = payload.assistantMessageId;
170
- if (!assistantMessageId)
171
- throw new Error('assistantMessageId is required');
172
- const harness = agentToHarness(payload.harness || payload.agentId || payload.agent);
173
- assertSupportedHarness(harness);
174
- const coerce = ports.coerceAuth || coerceAuth;
175
- const authMethod = coerce(harness, payload.authMethod || 'amalgm');
176
- const modelId = canonicalModel(payload.modelId || payload.cliModel, harness);
177
- const reasoningEffort = payload.reasoningEffort || null;
178
- const fastMode = payload.fastMode === true;
179
- const cliModel = cliModelFor({ harness, modelId, cliModel: payload.cliModel, reasoningEffort });
180
- const cwd = resolveCwd(payload.cwd, {
181
- cwd: options.cwd,
182
- defaultCwd: options.defaultCwd,
183
- requireCwd: Boolean(payload.cloudWorkspaceRef),
184
- }, ports.cwd);
185
- if (!options.localBaseUrl && options.port == null) {
186
- throw new Error("createContract requires options.localBaseUrl or options.port (engine default: runtimePort('chat-server'))");
187
- }
188
- const localBaseUrl = options.localBaseUrl || `http://127.0.0.1:${options.port}`;
189
- const origin = normalizeOrigin({ ...payload, cwd });
190
- const userId = payload.userId || options.userId || 'unknown-user';
191
- const payloadChatAgent = payload.chatInput && typeof payload.chatInput === 'object' && !Array.isArray(payload.chatInput)
192
- ? payload.chatInput.agent
193
- : null;
194
- const agentConfigId = nullableString(payload.agentConfigId
195
- || payload.amalgmAgentId
196
- || payload.agentConfig?.agentId
197
- || payloadChatAgent?.customAgentId) || harness;
198
- const agentConfig = ports.normalizeAgentConfig(payload.agentConfig || { agentId: agentConfigId });
199
- const runtimeHomeLayout = 'per-agent';
200
- const auth = ports.authEnvelope({
201
- harness,
202
- authMethod,
203
- sessionId,
204
- localBaseUrl,
205
- proxyToken: options.proxyToken,
206
- proxyBaseUrl: options.proxyBaseUrl,
207
- amalgmDir: options.amalgmDir,
208
- userId,
209
- credentialId: payload.credentialId || payload.byokCredentialId || null,
210
- modelId,
211
- agentConfigId,
212
- runtimeHomeLayout,
213
- });
214
- const contract = {
215
- sessionId,
216
- userId,
217
- computerId: payload.computerId || options.containerId || 'local-computer',
218
- assistantMessageId,
219
- userMessageId: payload.userMessageId || null,
220
- agentId: payload.agentId || (harness === 'claude_code' ? 'claude' : harness),
221
- agentConfigId,
222
- agentConfig,
223
- runtimeHomeLayout,
224
- harness,
225
- authMethod: auth.method,
226
- modelId,
227
- usageModelId: modelId,
228
- providerSessionId: nullableString(payload.providerSessionId || payload.provider_session_id),
229
- cliModel,
230
- reasoningEffort,
231
- fastMode,
232
- contextWindow: positiveOrNull(payload.contextWindow),
233
- maxTokens: positiveOrNull(payload.maxTokens),
234
- cwd,
235
- origin,
236
- constructs: normalizeConstructs({ ...payload, origin }, cwd),
237
- localBaseUrl,
238
- mcpServers: Array.isArray(payload.mcpServers) ? payload.mcpServers : [],
239
- systemPrompt: payload.systemPrompt || '',
240
- compiledAgentInstructions: payload.compiledAgentInstructions || '',
241
- usageOwner: (auth.method === 'amalgm' ? 'platform_proxy' : 'local_user'),
242
- auth,
243
- };
244
- const withIdentity = contract;
245
- withIdentity.runtimeFields = frozenRuntimeFields(contract, ports);
246
- withIdentity.runtimeKey = runtimeKey(contract, ports);
247
- return withIdentity;
248
- }
249
- //# sourceMappingURL=create.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/contract/create.ts"],"names":[],"mappings":"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"}
@@ -1,85 +0,0 @@
1
- /**
2
- * The freeze algebra — engine `chat-core/contract.js:347-458` plus
3
- * `chat-core/auth.js:66-68` (`fingerprint`), ported byte-exact.
4
- *
5
- * A session's runtime identity is the sha256 fingerprint of
6
- * `frozenRuntimeFields`; the field ORDER inside that object is load-bearing
7
- * (it is JSON.stringify'd) and must never change. Hashing is injected via
8
- * `Sha256HexPort` (engine default: `node:crypto` sha256 hex digest).
9
- */
10
- import type { Sha256HexPort } from '../ports.js';
11
- export interface FreezePorts {
12
- /** Lowercase hex SHA-256 of a UTF-8 string (engine: node:crypto). */
13
- sha256Hex: Sha256HexPort;
14
- }
15
- /**
16
- * Engine `auth.js fingerprint()`: first 16 hex chars of sha256, or null for
17
- * falsy input. Non-strings are coerced with `String()` exactly as the engine.
18
- */
19
- export declare function fingerprint(value: unknown, sha256Hex: Sha256HexPort): string | null;
20
- /**
21
- * Loose contract shape: the freeze algebra reads these fields but must accept
22
- * any object (parity with the untyped engine).
23
- */
24
- export interface ContractLike {
25
- [key: string]: unknown;
26
- runtimeFields?: Record<string, unknown> | undefined;
27
- runtimeKey?: string | null | undefined;
28
- }
29
- export interface FrozenRuntimeFields {
30
- sessionId: unknown;
31
- userId: unknown;
32
- computerId: unknown;
33
- harness: unknown;
34
- authMethod: unknown;
35
- auth: unknown;
36
- modelId: unknown;
37
- usageModelId: unknown;
38
- cliModel: unknown;
39
- reasoningEffort: unknown;
40
- fastMode: boolean;
41
- contextWindow: unknown;
42
- maxTokens: unknown;
43
- cwd: unknown;
44
- runtimeHomeLayout: unknown;
45
- systemPrompt: string | null;
46
- compiledAgentInstructions: string | null;
47
- agentConfig: string | null;
48
- origin: string | null;
49
- mcpServers: string | null;
50
- }
51
- /**
52
- * Engine `frozenRuntimeFields` (`contract.js:365-394`). Field order in the
53
- * returned object is byte-exact — `runtimeKey` stringifies it.
54
- */
55
- export declare function frozenRuntimeFields(input: any, ports: FreezePorts): FrozenRuntimeFields;
56
- /** Engine `runtimeKey` (`contract.js:396-398`): fingerprint of the frozen fields. */
57
- export declare function runtimeKey(input: any, ports: FreezePorts): string | null;
58
- /**
59
- * Engine `changedRuntimeFields` (`contract.js:405-410`): the frozen-field keys
60
- * whose values differ between two contracts. Prefers precomputed
61
- * `runtimeFields`; falls back to recomputing (hence the ports).
62
- */
63
- export declare function changedRuntimeFields(current: any, next: any, ports: FreezePorts): string[];
64
- export interface FrozenContractChangedError extends Error {
65
- code: 'FROZEN_SESSION_CONTRACT_CHANGED';
66
- changedFields: string[];
67
- }
68
- /**
69
- * Engine `frozenContractChangedError` (`contract.js:412-421`). Message and
70
- * `code` are byte-exact.
71
- */
72
- export declare function frozenContractChangedError(current: any, next: any, ports: FreezePorts): FrozenContractChangedError;
73
- /**
74
- * Engine `continueFrozenRuntimeContract` (`contract.js:423-458`): when the
75
- * next turn's contract drifts, keep the frozen identity from the current
76
- * contract, carry over per-turn fields from `next`, and record the drifted
77
- * keys in `continuedFromChangedContract` (warn semantics — the turn proceeds).
78
- */
79
- export declare function continueFrozenRuntimeContract<T extends ContractLike>(current: any, next: T, ports: FreezePorts): T;
80
- /**
81
- * Engine `assertSameContract` (`contract.js:650-655`): hard rejection when
82
- * the runtime key moved. Throws `frozenContractChangedError`.
83
- */
84
- export declare function assertSameContract(current: any, next: any, ports: FreezePorts): void;
85
- //# sourceMappingURL=freeze.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"freeze.d.ts","sourceRoot":"","sources":["../../src/contract/freeze.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,WAAW,WAAW;IAC1B,qEAAqE;IACrE,SAAS,EAAE,aAAa,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAEnF;AAkCD;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IACpD,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACxC;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,GAAG,EAAE,OAAO,CAAC;IACb,iBAAiB,EAAE,OAAO,CAAC;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,GAAG,mBAAmB,CA+BvF;AAED,qFAAqF;AACrF,wBAAgB,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAExE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,EAAE,CAO1F;AAED,MAAM,WAAW,0BAA2B,SAAQ,KAAK;IACvD,IAAI,EAAE,iCAAiC,CAAC;IACxC,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,GAAG,0BAA0B,CASlH;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,CAAC,SAAS,YAAY,EAClE,OAAO,EAAE,GAAG,EACZ,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,WAAW,GACjB,CAAC,CAmCH;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAKpF"}
@@ -1,151 +0,0 @@
1
- /**
2
- * The freeze algebra — engine `chat-core/contract.js:347-458` plus
3
- * `chat-core/auth.js:66-68` (`fingerprint`), ported byte-exact.
4
- *
5
- * A session's runtime identity is the sha256 fingerprint of
6
- * `frozenRuntimeFields`; the field ORDER inside that object is load-bearing
7
- * (it is JSON.stringify'd) and must never change. Hashing is injected via
8
- * `Sha256HexPort` (engine default: `node:crypto` sha256 hex digest).
9
- */
10
- /**
11
- * Engine `auth.js fingerprint()`: first 16 hex chars of sha256, or null for
12
- * falsy input. Non-strings are coerced with `String()` exactly as the engine.
13
- */
14
- export function fingerprint(value, sha256Hex) {
15
- return value ? sha256Hex(String(value)).slice(0, 16) : null;
16
- }
17
- function normalizeMcpHeader(header, sha256Hex) {
18
- return {
19
- name: String(header?.name || '').toLowerCase(),
20
- valueFingerprint: fingerprint(header?.value || '', sha256Hex),
21
- };
22
- }
23
- function normalizeMcpServer(server, sha256Hex) {
24
- return {
25
- name: String(server?.name || ''),
26
- type: String(server?.type || 'http'),
27
- url: String(server?.url || ''),
28
- headers: Array.isArray(server?.headers)
29
- ? server.headers
30
- .map((header) => normalizeMcpHeader(header, sha256Hex))
31
- .sort((a, b) => a.name.localeCompare(b.name))
32
- : [],
33
- };
34
- }
35
- /**
36
- * Engine `frozenRuntimeFields` (`contract.js:365-394`). Field order in the
37
- * returned object is byte-exact — `runtimeKey` stringifies it.
38
- */
39
- export function frozenRuntimeFields(input, ports) {
40
- const { sha256Hex } = ports;
41
- const authIdentity = input.authMethod === 'amalgm'
42
- ? 'platform_proxy'
43
- : input.auth?.tokenFingerprint || null;
44
- const mcpServers = (Array.isArray(input.mcpServers) ? input.mcpServers : [])
45
- .map((server) => normalizeMcpServer(server, sha256Hex))
46
- .sort((a, b) => `${a.name}\0${a.type}\0${a.url}`.localeCompare(`${b.name}\0${b.type}\0${b.url}`));
47
- return {
48
- sessionId: input.sessionId,
49
- userId: input.userId,
50
- computerId: input.computerId,
51
- harness: input.harness,
52
- authMethod: input.authMethod,
53
- auth: authIdentity,
54
- modelId: input.modelId,
55
- usageModelId: input.usageModelId,
56
- cliModel: input.cliModel,
57
- reasoningEffort: input.reasoningEffort || null,
58
- fastMode: input.fastMode === true,
59
- contextWindow: input.contextWindow ?? null,
60
- maxTokens: input.maxTokens ?? null,
61
- cwd: input.cwd,
62
- runtimeHomeLayout: input.runtimeHomeLayout,
63
- systemPrompt: fingerprint(input.systemPrompt || '', sha256Hex),
64
- compiledAgentInstructions: fingerprint(input.compiledAgentInstructions || '', sha256Hex),
65
- agentConfig: fingerprint(JSON.stringify(input.agentConfig || null), sha256Hex),
66
- origin: fingerprint(JSON.stringify(input.origin || null), sha256Hex),
67
- mcpServers: fingerprint(JSON.stringify(mcpServers), sha256Hex),
68
- };
69
- }
70
- /** Engine `runtimeKey` (`contract.js:396-398`): fingerprint of the frozen fields. */
71
- export function runtimeKey(input, ports) {
72
- return fingerprint(JSON.stringify(frozenRuntimeFields(input, ports)), ports.sha256Hex);
73
- }
74
- /**
75
- * Engine `changedRuntimeFields` (`contract.js:405-410`): the frozen-field keys
76
- * whose values differ between two contracts. Prefers precomputed
77
- * `runtimeFields`; falls back to recomputing (hence the ports).
78
- */
79
- export function changedRuntimeFields(current, next, ports) {
80
- const currentFields = current?.runtimeFields || frozenRuntimeFields(current || {}, ports);
81
- const nextFields = next?.runtimeFields || frozenRuntimeFields(next || {}, ports);
82
- const keys = [...new Set([...Object.keys(currentFields), ...Object.keys(nextFields)])];
83
- return keys.filter((key) => currentFields[key] !== nextFields[key]);
84
- }
85
- /**
86
- * Engine `frozenContractChangedError` (`contract.js:412-421`). Message and
87
- * `code` are byte-exact.
88
- */
89
- export function frozenContractChangedError(current, next, ports) {
90
- const changed = changedRuntimeFields(current, next, ports);
91
- const label = changed.length ? ` (${changed.join(', ')})` : '';
92
- const err = new Error(`Frozen session contract changed${label}; start a new session for auth/harness/computer/instruction/MCP changes`);
93
- err.code = 'FROZEN_SESSION_CONTRACT_CHANGED';
94
- err.changedFields = changed;
95
- return err;
96
- }
97
- /**
98
- * Engine `continueFrozenRuntimeContract` (`contract.js:423-458`): when the
99
- * next turn's contract drifts, keep the frozen identity from the current
100
- * contract, carry over per-turn fields from `next`, and record the drifted
101
- * keys in `continuedFromChangedContract` (warn semantics — the turn proceeds).
102
- */
103
- export function continueFrozenRuntimeContract(current, next, ports) {
104
- if (!current)
105
- return next;
106
- const changed = changedRuntimeFields(current, next, ports);
107
- if (changed.length === 0)
108
- return next;
109
- return {
110
- ...next,
111
- userId: current.userId,
112
- computerId: current.computerId,
113
- agentId: current.agentId,
114
- agentConfigId: current.agentConfigId,
115
- agentConfig: current.agentConfig,
116
- runtimeHomeLayout: current.runtimeHomeLayout,
117
- harness: current.harness,
118
- authMethod: current.authMethod,
119
- modelId: current.modelId,
120
- usageModelId: current.usageModelId,
121
- cliModel: current.cliModel,
122
- reasoningEffort: current.reasoningEffort,
123
- fastMode: current.fastMode,
124
- contextWindow: current.contextWindow,
125
- maxTokens: current.maxTokens,
126
- cwd: current.cwd,
127
- origin: current.origin,
128
- constructs: current.constructs,
129
- localBaseUrl: current.localBaseUrl,
130
- mcpServers: current.mcpServers,
131
- systemPrompt: current.systemPrompt,
132
- compiledAgentInstructions: current.compiledAgentInstructions,
133
- usageOwner: current.usageOwner,
134
- auth: current.auth,
135
- runtimeFields: current.runtimeFields,
136
- runtimeKey: current.runtimeKey,
137
- continuedFromChangedContract: changed,
138
- };
139
- }
140
- /**
141
- * Engine `assertSameContract` (`contract.js:650-655`): hard rejection when
142
- * the runtime key moved. Throws `frozenContractChangedError`.
143
- */
144
- export function assertSameContract(current, next, ports) {
145
- if (!current)
146
- return;
147
- if (current.runtimeKey !== next.runtimeKey) {
148
- throw frozenContractChangedError(current, next, ports);
149
- }
150
- }
151
- //# sourceMappingURL=freeze.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"freeze.js","sourceRoot":"","sources":["../../src/contract/freeze.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,KAAc,EAAE,SAAwB;IAClE,OAAO,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9D,CAAC;AAcD,SAAS,kBAAkB,CAAC,MAAW,EAAE,SAAwB;IAC/D,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE;QAC9C,gBAAgB,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,EAAE,SAAS,CAAC;KAC9D,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAW,EAAE,SAAwB;IAC/D,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;QAChC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,IAAI,MAAM,CAAC;QACpC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC;QAC9B,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC;YACrC,CAAC,CAAC,MAAM,CAAC,OAAO;iBACX,GAAG,CAAC,CAAC,MAAe,EAAE,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;iBAC/D,IAAI,CAAC,CAAC,CAAsB,EAAE,CAAsB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC3F,CAAC,CAAC,EAAE;KACP,CAAC;AACJ,CAAC;AAmCD;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAU,EAAE,KAAkB;IAChE,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAC5B,MAAM,YAAY,GAAG,KAAK,CAAC,UAAU,KAAK,QAAQ;QAChD,CAAC,CAAC,gBAAgB;QAClB,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,gBAAgB,IAAI,IAAI,CAAC;IACzC,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;SACzE,GAAG,CAAC,CAAC,MAAe,EAAE,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;SAC/D,IAAI,CAAC,CAAC,CAAsB,EAAE,CAAsB,EAAE,EAAE,CACvD,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACtF,OAAO;QACL,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,IAAI;QAC9C,QAAQ,EAAE,KAAK,CAAC,QAAQ,KAAK,IAAI;QACjC,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI,IAAI;QAC1C,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI;QAClC,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;QAC1C,YAAY,EAAE,WAAW,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,EAAE,SAAS,CAAC;QAC9D,yBAAyB,EAAE,WAAW,CAAC,KAAK,CAAC,yBAAyB,IAAI,EAAE,EAAE,SAAS,CAAC;QACxF,WAAW,EAAE,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,EAAE,SAAS,CAAC;QAC9E,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,EAAE,SAAS,CAAC;QACpE,UAAU,EAAE,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC;KAC/D,CAAC;AACJ,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,UAAU,CAAC,KAAU,EAAE,KAAkB;IACvD,OAAO,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;AACzF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAY,EAAE,IAAS,EAAE,KAAkB;IAC9E,MAAM,aAAa,GACjB,OAAO,EAAE,aAAa,IAAI,mBAAmB,CAAC,OAAO,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;IACtE,MAAM,UAAU,GACd,IAAI,EAAE,aAAa,IAAI,mBAAmB,CAAC,IAAI,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IACvF,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AACtE,CAAC;AAOD;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAAY,EAAE,IAAS,EAAE,KAAkB;IACpF,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,MAAM,GAAG,GAAG,IAAI,KAAK,CACnB,kCAAkC,KAAK,yEAAyE,CACnF,CAAC;IAChC,GAAG,CAAC,IAAI,GAAG,iCAAiC,CAAC;IAC7C,GAAG,CAAC,aAAa,GAAG,OAAO,CAAC;IAC5B,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,6BAA6B,CAC3C,OAAY,EACZ,IAAO,EACP,KAAkB;IAElB,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC3D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtC,OAAO;QACL,GAAG,IAAI;QACP,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;QAC5C,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,yBAAyB,EAAE,OAAO,CAAC,yBAAyB;QAC5D,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,4BAA4B,EAAE,OAAO;KACtC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAY,EAAE,IAAS,EAAE,KAAkB;IAC5E,IAAI,CAAC,OAAO;QAAE,OAAO;IACrB,IAAI,OAAO,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;QAC3C,MAAM,0BAA0B,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACzD,CAAC;AACH,CAAC"}
@@ -1,21 +0,0 @@
1
- /**
2
- * Harness identity — engine `chat-core/contract.js:12-22` (agentToHarness)
3
- * and the hard allowlist enforced by `createContract` (`contract.js:575-577`),
4
- * ported byte-exact.
5
- */
6
- /** The only harnesses the clean chat core accepts. Order as in the engine. */
7
- export declare const SUPPORTED_HARNESSES: readonly ["claude_code", "codex", "opencode", "cursor", "pi"];
8
- export type Harness = (typeof SUPPORTED_HARNESSES)[number];
9
- /**
10
- * Engine `agentToHarness`: map a UI agent id onto a harness id. Unknown
11
- * non-empty values pass through unchanged (the allowlist check happens in
12
- * `assertSupportedHarness` / `createContract`); empty input defaults to
13
- * `'claude_code'`.
14
- */
15
- export declare function agentToHarness(agent: unknown): string;
16
- /**
17
- * The allowlist gate from `createContract` (`contract.js:575-577`).
18
- * Throw message is byte-exact with the engine.
19
- */
20
- export declare function assertSupportedHarness(harness: string): asserts harness is Harness;
21
- //# sourceMappingURL=harnesses.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"harnesses.d.ts","sourceRoot":"","sources":["../../src/contract/harnesses.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,8EAA8E;AAC9E,eAAO,MAAM,mBAAmB,+DAAgE,CAAC;AAEjG,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CASrD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAIlF"}
@@ -1,39 +0,0 @@
1
- /**
2
- * Harness identity — engine `chat-core/contract.js:12-22` (agentToHarness)
3
- * and the hard allowlist enforced by `createContract` (`contract.js:575-577`),
4
- * ported byte-exact.
5
- */
6
- /** The only harnesses the clean chat core accepts. Order as in the engine. */
7
- export const SUPPORTED_HARNESSES = ['claude_code', 'codex', 'opencode', 'cursor', 'pi'];
8
- /**
9
- * Engine `agentToHarness`: map a UI agent id onto a harness id. Unknown
10
- * non-empty values pass through unchanged (the allowlist check happens in
11
- * `assertSupportedHarness` / `createContract`); empty input defaults to
12
- * `'claude_code'`.
13
- */
14
- export function agentToHarness(agent) {
15
- const clean = String(agent || '').trim();
16
- if (clean === 'claude')
17
- return 'claude_code';
18
- if (clean === 'codex')
19
- return 'codex';
20
- if (clean === 'opencode')
21
- return 'opencode';
22
- if (clean === 'cursor')
23
- return 'cursor';
24
- if (clean === 'pi')
25
- return 'pi';
26
- if (clean === 'claude_code')
27
- return 'claude_code';
28
- return clean || 'claude_code';
29
- }
30
- /**
31
- * The allowlist gate from `createContract` (`contract.js:575-577`).
32
- * Throw message is byte-exact with the engine.
33
- */
34
- export function assertSupportedHarness(harness) {
35
- if (!SUPPORTED_HARNESSES.includes(harness)) {
36
- throw new Error(`Unsupported harness for clean chat core: ${harness}`);
37
- }
38
- }
39
- //# sourceMappingURL=harnesses.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"harnesses.js","sourceRoot":"","sources":["../../src/contract/harnesses.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,8EAA8E;AAC9E,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAU,CAAC;AAIjG;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACzC,IAAI,KAAK,KAAK,QAAQ;QAAE,OAAO,aAAa,CAAC;IAC7C,IAAI,KAAK,KAAK,OAAO;QAAE,OAAO,OAAO,CAAC;IACtC,IAAI,KAAK,KAAK,UAAU;QAAE,OAAO,UAAU,CAAC;IAC5C,IAAI,KAAK,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IACxC,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,KAAK,KAAK,aAAa;QAAE,OAAO,aAAa,CAAC;IAClD,OAAO,KAAK,IAAI,aAAa,CAAC;AAChC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAe;IACpD,IAAI,CAAE,mBAAyC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAClE,MAAM,IAAI,KAAK,CAAC,4CAA4C,OAAO,EAAE,CAAC,CAAC;IACzE,CAAC;AACH,CAAC"}
@@ -1,17 +0,0 @@
1
- /**
2
- * @amalgm/chat contract — the frozen session contract.
3
- *
4
- * Sources of truth (engine working tree, ported byte-exact):
5
- * - `runtime/scripts/chat-core/contract.js` → harnesses / models / freeze / create
6
- * - `runtime/lib/chatInput.js` → chat-input
7
- * - `runtime/scripts/chat-core/chat-payload.js:33-185` → payload-merge
8
- * - `runtime/scripts/chat-core/input.js` → input
9
- */
10
- export * from './harnesses.js';
11
- export * from './models.js';
12
- export * from './freeze.js';
13
- export * from './create.js';
14
- export * from './chat-input.js';
15
- export * from './payload-merge.js';
16
- export * from './input.js';
17
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contract/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC"}
@@ -1,17 +0,0 @@
1
- /**
2
- * @amalgm/chat contract — the frozen session contract.
3
- *
4
- * Sources of truth (engine working tree, ported byte-exact):
5
- * - `runtime/scripts/chat-core/contract.js` → harnesses / models / freeze / create
6
- * - `runtime/lib/chatInput.js` → chat-input
7
- * - `runtime/scripts/chat-core/chat-payload.js:33-185` → payload-merge
8
- * - `runtime/scripts/chat-core/input.js` → input
9
- */
10
- export * from './harnesses.js';
11
- export * from './models.js';
12
- export * from './freeze.js';
13
- export * from './create.js';
14
- export * from './chat-input.js';
15
- export * from './payload-merge.js';
16
- export * from './input.js';
17
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/contract/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC"}