@amalgm/chat 0.1.2 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (286) hide show
  1. package/AGENTS.md +98 -0
  2. package/PURPOSE.md +143 -112
  3. package/README.md +87 -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 +22 -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 +146 -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 -26
  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,225 +0,0 @@
1
- /**
2
- * Internal port of engine `chat-core/tool-shape.js` (173 lines): tool
3
- * identity — kind classification, human titles, and MCP name parsing
4
- * (`mcp__<server>__<tool>`, `amalgm_<tool>`), ported byte-exact.
5
- *
6
- * NOTE (dedupe): the canonical public home for tool identity is the
7
- * transcript module (`src/transcript/`, per ROADMAP). This copy exists so
8
- * `src/events` + `src/wire` build stand-alone; unify when the transcript
9
- * port lands. Not re-exported from the events barrel.
10
- */
11
- import { compactText, isRecord, stringifyResult } from './tool-display.js';
12
- /** Engine tool-shape.js:9-17. Hostname without `www.`; unparseable URLs compact to 80 chars. */
13
- export function hostLabel(url) {
14
- if (url === undefined || url === null || url === '')
15
- return '';
16
- try {
17
- const host = new URL(String(url)).hostname.replace(/^www\./, '');
18
- return host || String(url);
19
- }
20
- catch {
21
- return compactText(url, 80);
22
- }
23
- }
24
- /** Engine tool-shape.js:19-28. */
25
- export function humanizeToolName(value = '') {
26
- const text = String(value || '')
27
- .replace(/^mcp__/, '')
28
- .replace(/^amalgm[_-]/i, '')
29
- .replace(/__/g, ' ')
30
- .replace(/[_-]+/g, ' ')
31
- .trim();
32
- if (!text)
33
- return 'Tool';
34
- return text.charAt(0).toUpperCase() + text.slice(1);
35
- }
36
- /** Engine tool-shape.js:30-37. `mcp__<server>__<tool>` or `amalgm_<tool>`; null otherwise. */
37
- export function parseMcpName(name = '') {
38
- const text = String(name || '');
39
- const mcp = text.match(/^mcp__([^_]+(?:_[^_]+)*)__([\s\S]+)$/);
40
- if (mcp)
41
- return { server: mcp[1], tool: mcp[2] };
42
- const amalgm = text.match(/^amalgm_(.+)$/);
43
- if (amalgm)
44
- return { server: 'amalgm', tool: amalgm[1] };
45
- return null;
46
- }
47
- /** Engine tool-shape.js:39-51. Falsy errors normalize to undefined; records keep themselves as `details`. */
48
- export function normalizeError(error, fallback = 'Tool failed') {
49
- if (!error)
50
- return undefined;
51
- if (typeof error === 'string')
52
- return { message: error };
53
- if (isRecord(error)) {
54
- const message = error['message'] || error['error'] || error['details'] || fallback;
55
- return {
56
- message: typeof message === 'string' ? message : stringifyResult(message),
57
- ...(error['code'] ? { code: String(error['code']) } : {}),
58
- details: error,
59
- };
60
- }
61
- return { message: String(error) || fallback };
62
- }
63
- /** Engine tool-shape.js:53-76. Canonical kind classifier (name, then MCP, then input-shape heuristics). */
64
- export function toolKind(name = '', input = {}, metadata = {}) {
65
- const clean = String(name || '').toLowerCase();
66
- const compact = clean.replace(/[^a-z0-9]/g, '');
67
- const mcp = metadata['mcp'] || parseMcpName(name);
68
- if (metadata['subagent'] || clean === 'task' || clean.includes('spawnagent') || clean.includes('collabagent'))
69
- return 'subagent';
70
- if (clean.includes('todo'))
71
- return 'todo';
72
- if (clean.includes('question') || clean.includes('askuser'))
73
- return 'question';
74
- if (compact.includes('toolsearch'))
75
- return 'search';
76
- if (clean.includes('bash') || clean.includes('command'))
77
- return 'bash';
78
- if (clean.includes('websearch') || clean === 'websearch')
79
- return 'web_search';
80
- if (clean.includes('browser') || mcp?.tool?.startsWith?.('browser_'))
81
- return 'browser';
82
- if (clean.includes('webfetch') || clean === 'webfetch')
83
- return 'browser';
84
- if (clean.includes('read'))
85
- return 'file_read';
86
- if (clean.includes('write'))
87
- return 'file_write';
88
- if (clean.includes('edit') || clean.includes('filechange'))
89
- return 'file_edit';
90
- if (mcp)
91
- return 'mcp';
92
- if (input && typeof input === 'object') {
93
- const record = input;
94
- if (record['command'] !== undefined)
95
- return 'bash';
96
- if (record['url'] !== undefined)
97
- return 'browser';
98
- if (record['query'] !== undefined)
99
- return 'web_search';
100
- if (record['file_path'] !== undefined || record['filePath'] !== undefined || record['path'] !== undefined)
101
- return 'file_read';
102
- }
103
- return 'unknown';
104
- }
105
- /**
106
- * Engine tool-shape.js:78-88. Browser action out of a tool name, across
107
- * naming eras: current toolbox__browser_open, era-2
108
- * toolbox__browser_browser_open / browser_open, and bare
109
- * record_start/cua_click. Null for non-browser tools.
110
- */
111
- function browserAction(name) {
112
- const match = String(name || '').match(/^(?:toolbox__browser_|browser_)(.+)$/);
113
- if (match)
114
- return match[1].replace(/^browser_/, '');
115
- if (/^(?:record_(?:start|stop|list)|cua(?:_[a-z_]+)?)$/.test(String(name)))
116
- return name;
117
- return null;
118
- }
119
- /** Engine tool-shape.js:90-123. */
120
- function titleFromMcp(tool, input = {}) {
121
- const name = String(tool || '');
122
- const action = browserAction(name);
123
- if (action === 'open')
124
- return input['url'] ? `Opening ${hostLabel(input['url'])}` : 'Opening browser page';
125
- if (action === 'snapshot')
126
- return 'Reading browser page';
127
- if (action === 'screenshot' || action === 'cua_screenshot')
128
- return 'Taking browser screenshot';
129
- if (action === 'fill')
130
- return input['text'] ? `Typing "${compactText(input['text'], 60)}"` : 'Typing in browser';
131
- if (action === 'click')
132
- return 'Clicking in browser';
133
- if (action === 'press')
134
- return input['key'] ? `Pressing ${compactText(input['key'], 20)}` : 'Pressing key in browser';
135
- if (action === 'eval')
136
- return 'Running JavaScript in browser';
137
- if (action === 'wait')
138
- return 'Waiting for page';
139
- if (action === 'cli')
140
- return Array.isArray(input['args']) ? `Browser: ${compactText(input['args'].join(' '), 60)}` : 'Running browser command';
141
- if (action === 'cua') {
142
- const cuaAction = String(input['action'] || '');
143
- if (cuaAction === 'screenshot')
144
- return 'Taking browser screenshot';
145
- if (cuaAction === 'type')
146
- return input['text'] ? `Typing "${compactText(input['text'], 60)}"` : 'Typing in browser';
147
- return cuaAction ? `Browser ${cuaAction.replace(/_/g, ' ')} (coordinates)` : 'Browser computer-use action';
148
- }
149
- if (action === 'dialog')
150
- return input['action'] === 'dismiss' ? 'Dismissing browser dialog' : 'Accepting browser dialog';
151
- if (action === 'tab')
152
- return `Browser tab ${compactText(String(input['action'] || 'list'), 20)}`;
153
- if (action === 'console')
154
- return 'Reading browser console';
155
- if (action === 'close')
156
- return 'Closing browser session';
157
- if (action === 'record_start')
158
- return 'Starting browser recording';
159
- if (action === 'record_stop')
160
- return 'Saving browser recording';
161
- if (action === 'record_list')
162
- return 'Listing browser recordings';
163
- if (action === 'auth_list')
164
- return 'Listing browser logins';
165
- if (name === 'apps_register')
166
- return input['cwd'] ? `Registering app from ${compactText(input['cwd'], 60)}` : 'Registering app';
167
- if (name === 'apps_start')
168
- return 'Starting app';
169
- if (name === 'apps_stop')
170
- return 'Stopping app';
171
- if (name === 'apps_list')
172
- return 'Listing apps';
173
- if (name === 'agents_list')
174
- return 'Listing agents';
175
- if (name === 'talk_to_agent')
176
- return 'Talking to agent';
177
- return humanizeToolName(action || name);
178
- }
179
- /** Engine tool-shape.js:125-157. Descriptor > metadata title > MCP title > per-tool heuristics > fallback. */
180
- export function titleForTool({ name, input = {}, error, metadata = {}, fallback } = {}) {
181
- if (metadata['actionDescriptor'])
182
- return compactText(metadata['actionDescriptor'], 160);
183
- if (metadata['title'])
184
- return compactText(metadata['title'], 160);
185
- const mcp = metadata['mcp'] || parseMcpName(name);
186
- if (mcp)
187
- return titleFromMcp(mcp.tool, input);
188
- const clean = String(name || '').toLowerCase();
189
- const compact = clean.replace(/[^a-z0-9]/g, '');
190
- const action = metadata['action'];
191
- if (action?.['type'] === 'search') {
192
- return `Searching ${compactText(action['query'] || input['query'] || 'the web', 80)}`;
193
- }
194
- if (action?.['type'] === 'openPage') {
195
- const host = hostLabel(action['url'] || input['url'] || input['query']);
196
- return host ? `Opening ${host}` : 'Opening web page';
197
- }
198
- if (action?.['type'] === 'findInPage') {
199
- const pattern = action['pattern'] || input['pattern'];
200
- const url = action['url'] || input['url'];
201
- const host = hostLabel(url) || 'current page';
202
- return pattern ? `Finding "${compactText(pattern, 60)}" on ${host}` : `Finding text on ${host}`;
203
- }
204
- if (compact.includes('toolsearch')) {
205
- const selected = String(input['query'] || '').replace(/^select:/i, '').trim();
206
- return selected ? `Selecting ${compactText(selected, 80)}` : 'Selecting tool';
207
- }
208
- if (clean.includes('websearch'))
209
- return input['query'] ? `Searching ${compactText(input['query'], 80)}` : 'Searching the web';
210
- if (clean.includes('webfetch'))
211
- return input['url'] ? `Opening ${hostLabel(input['url'])}` : 'Opening web page';
212
- if (clean === 'bash' || clean.includes('command'))
213
- return input['command'] ? `$ ${compactText(input['command'], 120)}` : 'Running command';
214
- if (clean === 'task' || metadata['subagent'])
215
- return compactText(input['description'] || metadata['description'] || fallback || 'Running subagent', 120);
216
- if (error)
217
- return normalizeError(error)?.message || 'Tool failed';
218
- return compactText(fallback || humanizeToolName(name), 120);
219
- }
220
- /** Engine tool-shape.js:159-162. */
221
- export function mcpMetadataFromName(name) {
222
- const mcp = parseMcpName(name);
223
- return mcp ? { mcp } : {};
224
- }
225
- //# sourceMappingURL=tool-shape.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tool-shape.js","sourceRoot":"","sources":["../../src/events/tool-shape.ts"],"names":[],"mappings":"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"}
@@ -1,65 +0,0 @@
1
- /**
2
- * Session-bound relay laws.
3
- * Engine references:
4
- * - runtime/scripts/chat-core/egress.js
5
- * - runtime/scripts/chat-core/tooling/mcp-relay.js
6
- * - runtime/scripts/chat-core/tooling/mcp-bundle.js
7
- * - runtime/scripts/chat-core/server.js:115-133
8
- */
9
- export interface RelayHeader {
10
- readonly name: string;
11
- readonly value: string;
12
- }
13
- export interface RelayServer {
14
- readonly name: string;
15
- readonly type: 'http' | 'sse';
16
- readonly url: string;
17
- readonly headers: readonly RelayHeader[];
18
- }
19
- export interface ChatRelayContract {
20
- readonly sessionId: string;
21
- readonly userId?: string;
22
- readonly computerId?: string;
23
- readonly agentId?: string;
24
- readonly harness?: string;
25
- readonly authMethod: string;
26
- readonly modelId?: string;
27
- readonly usageModelId?: string;
28
- readonly cwd?: string;
29
- readonly usageOwner?: string;
30
- readonly auth?: {
31
- readonly tokenRef?: string | null;
32
- };
33
- readonly mcpServers?: readonly unknown[];
34
- }
35
- export interface ChatRelayTurn {
36
- readonly turnId?: string;
37
- readonly assistantMessageId?: string;
38
- }
39
- export type RelayFetchPort = (input: string, init: RequestInit) => Promise<Response>;
40
- export interface ChatRelayApiOptions {
41
- readonly contractForSession: (sessionId: string) => ChatRelayContract | null;
42
- readonly turnForSession?: (sessionId: string) => ChatRelayTurn | null;
43
- readonly proxyCredentials: () => Promise<{
44
- readonly baseUrl: string;
45
- readonly token: string;
46
- }>;
47
- readonly defaultMcpServer?: (contract: ChatRelayContract) => unknown;
48
- readonly fetch: RelayFetchPort;
49
- }
50
- export declare function parseEgressPath(pathname: unknown): {
51
- sessionId: string;
52
- upstreamPath: string;
53
- } | null;
54
- export declare function parseMcpRelayPath(pathname: unknown): {
55
- sessionId: string;
56
- serverName: string;
57
- } | null;
58
- export declare function metadataHeaders(contract: ChatRelayContract, turn?: ChatRelayTurn | null): Record<string, string>;
59
- export declare function safeMcpServerName(name: unknown): string;
60
- export declare function headerArrayToRecord(headers: unknown): Record<string, string>;
61
- export declare function normalizeMcpServer(server: unknown): RelayServer | null;
62
- export declare function mcpServers(contract: ChatRelayContract, defaultServer?: unknown): RelayServer[];
63
- export declare function findMcpRelayTarget(contract: ChatRelayContract, serverName: unknown, defaultServer?: unknown): RelayServer | null;
64
- export declare function createChatRelayApi(options: ChatRelayApiOptions): (request: Request) => Promise<Response>;
65
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/relay/index.ts"],"names":[],"mappings":"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"}
@@ -1,197 +0,0 @@
1
- /**
2
- * Session-bound relay laws.
3
- * Engine references:
4
- * - runtime/scripts/chat-core/egress.js
5
- * - runtime/scripts/chat-core/tooling/mcp-relay.js
6
- * - runtime/scripts/chat-core/tooling/mcp-bundle.js
7
- * - runtime/scripts/chat-core/server.js:115-133
8
- */
9
- const MCP_HOP_HEADERS = new Set([
10
- 'connection',
11
- 'content-length',
12
- 'host',
13
- 'keep-alive',
14
- 'proxy-authenticate',
15
- 'proxy-authorization',
16
- 'te',
17
- 'trailer',
18
- 'transfer-encoding',
19
- 'upgrade',
20
- ]);
21
- const EGRESS_DROP_REQUEST_HEADERS = new Set([
22
- 'host', 'authorization', 'x-api-key', 'connection', 'content-length', 'accept-encoding',
23
- ]);
24
- const EGRESS_DROP_RESPONSE_HEADERS = new Set(['connection', 'content-encoding', 'transfer-encoding']);
25
- export function parseEgressPath(pathname) {
26
- const parts = String(pathname || '').split('/').filter(Boolean);
27
- if (parts[0] !== 'egress' || !parts[1])
28
- return null;
29
- return { sessionId: decodeURIComponent(parts[1]), upstreamPath: `/${parts.slice(2).join('/')}` };
30
- }
31
- export function parseMcpRelayPath(pathname) {
32
- const parts = String(pathname || '').split('/').filter(Boolean);
33
- if (parts[0] !== 'mcp-relay' || !parts[1] || !parts[2])
34
- return null;
35
- return { sessionId: decodeURIComponent(parts[1]), serverName: decodeURIComponent(parts[2]) };
36
- }
37
- export function metadataHeaders(contract, turn = null) {
38
- return {
39
- 'x-amalgm-session-id': contract.sessionId,
40
- 'x-amalgm-message-id': turn?.assistantMessageId || turn?.turnId || '',
41
- 'x-amalgm-turn-id': turn?.turnId || '',
42
- 'x-amalgm-agent-id': contract.agentId || '',
43
- 'x-amalgm-harness-id': contract.harness || '',
44
- 'x-amalgm-auth-method': contract.authMethod,
45
- 'x-amalgm-model-id': contract.usageModelId || contract.modelId || '',
46
- 'x-amalgm-cwd': contract.cwd || '',
47
- 'x-amalgm-usage-owner': contract.usageOwner || '',
48
- };
49
- }
50
- export function safeMcpServerName(name) {
51
- return String(name || '')
52
- .trim()
53
- .replace(/[^A-Za-z0-9_.-]+/g, '_')
54
- .replace(/^_+|_+$/g, '')
55
- || 'mcp';
56
- }
57
- export function headerArrayToRecord(headers) {
58
- const out = {};
59
- for (const header of Array.isArray(headers) ? headers : []) {
60
- const value = header;
61
- const name = String(value?.name || '').trim();
62
- if (name)
63
- out[name] = String(value?.value || '');
64
- }
65
- return out;
66
- }
67
- export function normalizeMcpServer(server) {
68
- if (!server || typeof server !== 'object')
69
- return null;
70
- const input = server;
71
- const name = safeMcpServerName(input.name);
72
- const url = String(input.url || '').trim();
73
- if (!name || !url)
74
- return null;
75
- const rawHeaders = Array.isArray(input.headers)
76
- ? input.headers
77
- : Object.entries(input.headers && typeof input.headers === 'object' ? input.headers : {})
78
- .filter(([headerName, value]) => headerName && value != null)
79
- .map(([headerName, value]) => ({ name: headerName, value: String(value) }));
80
- return {
81
- name,
82
- type: String(input.type || '').toLowerCase() === 'sse' ? 'sse' : 'http',
83
- url,
84
- headers: rawHeaders.map((header) => ({
85
- name: String(header.name || ''),
86
- value: String(header.value || ''),
87
- })),
88
- };
89
- }
90
- export function mcpServers(contract, defaultServer) {
91
- const byName = new Map();
92
- const add = (server) => {
93
- const normalized = normalizeMcpServer(server);
94
- if (normalized)
95
- byName.set(normalized.name, normalized);
96
- };
97
- if (defaultServer)
98
- add(defaultServer);
99
- for (const server of Array.isArray(contract.mcpServers) ? contract.mcpServers : [])
100
- add(server);
101
- return [...byName.values()];
102
- }
103
- export function findMcpRelayTarget(contract, serverName, defaultServer) {
104
- const clean = safeMcpServerName(serverName);
105
- return mcpServers(contract, defaultServer).find((server) => server.name === clean) || null;
106
- }
107
- export function createChatRelayApi(options) {
108
- return async (request) => {
109
- const url = new URL(request.url);
110
- if (request.method === 'GET' && url.pathname === '/egress') {
111
- return json(200, { service: 'egress', sessionBound: true, route: '/egress/:session/*' });
112
- }
113
- if (request.method === 'GET' && url.pathname === '/mcp-relay') {
114
- return json(200, { service: 'mcp-relay', sessionBound: true, route: '/mcp-relay/:session/:server' });
115
- }
116
- const egress = parseEgressPath(url.pathname);
117
- if (egress)
118
- return forwardEgress(request, url, egress, options);
119
- const relay = parseMcpRelayPath(url.pathname);
120
- if (relay)
121
- return forwardMcpRelay(request, url, relay, options);
122
- return json(404, { error: 'Not found' });
123
- };
124
- }
125
- async function forwardEgress(request, url, route, options) {
126
- const contract = options.contractForSession(route.sessionId);
127
- if (!contract || contract.authMethod !== 'amalgm') {
128
- return json(404, { error: 'No Amalgm egress session', sessionId: route.sessionId });
129
- }
130
- const authorization = request.headers.get('authorization') || '';
131
- const bearer = authorization.replace(/^Bearer\s+/i, '').trim();
132
- const provided = bearer || (request.headers.get('x-api-key') || '').trim();
133
- if (!contract.auth?.tokenRef || provided !== contract.auth.tokenRef) {
134
- return json(401, { error: 'Invalid egress token' });
135
- }
136
- const proxy = await options.proxyCredentials();
137
- const headers = copyHeaders(request.headers, EGRESS_DROP_REQUEST_HEADERS);
138
- Object.assign(headers, metadataHeaders(contract, options.turnForSession?.(route.sessionId) || null));
139
- headers.Authorization = `Bearer ${proxy.token}`;
140
- const body = await requestBody(request);
141
- const response = await options.fetch(`${proxy.baseUrl.replace(/\/$/, '')}${route.upstreamPath}${url.search}`, { method: request.method, headers, ...(body ? { body } : {}) });
142
- return copyResponse(response, EGRESS_DROP_RESPONSE_HEADERS);
143
- }
144
- async function forwardMcpRelay(request, url, route, options) {
145
- const contract = options.contractForSession(route.sessionId);
146
- if (!contract)
147
- return json(404, { error: 'No MCP relay session', sessionId: route.sessionId });
148
- const target = findMcpRelayTarget(contract, route.serverName, options.defaultMcpServer?.(contract));
149
- if (!target)
150
- return json(404, { error: 'Unknown MCP server', serverName: route.serverName });
151
- const headers = copyHeaders(request.headers, new Set([...MCP_HOP_HEADERS, 'authorization']));
152
- Object.assign(headers, headerArrayToRecord(target.headers), {
153
- 'x-amalgm-session-id': contract.sessionId,
154
- 'x-amalgm-user-id': contract.userId || '',
155
- 'x-amalgm-computer-id': contract.computerId || '',
156
- });
157
- for (const key of Object.keys(headers))
158
- if (!headers[key])
159
- delete headers[key];
160
- const body = await requestBody(request);
161
- const response = await options.fetch(`${target.url}${url.search}`, {
162
- method: request.method,
163
- headers,
164
- ...(body ? { body } : {}),
165
- redirect: 'manual',
166
- });
167
- return copyResponse(response, MCP_HOP_HEADERS);
168
- }
169
- function copyHeaders(headers, drop) {
170
- const out = {};
171
- headers.forEach((value, name) => {
172
- if (!drop.has(name.toLowerCase()))
173
- out[name] = value;
174
- });
175
- return out;
176
- }
177
- async function requestBody(request) {
178
- if (request.method === 'GET' || request.method === 'HEAD')
179
- return undefined;
180
- const body = await request.arrayBuffer();
181
- return body.byteLength > 0 ? body : undefined;
182
- }
183
- function copyResponse(response, drop) {
184
- const headers = new Headers();
185
- response.headers.forEach((value, name) => {
186
- if (!drop.has(name.toLowerCase()))
187
- headers.set(name, value);
188
- });
189
- return new Response(response.body, { status: response.status, headers });
190
- }
191
- function json(status, body) {
192
- return new Response(JSON.stringify(body), {
193
- status,
194
- headers: { 'content-type': 'application/json', 'cache-control': 'no-cache' },
195
- });
196
- }
197
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/relay/index.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- /**
2
- * @amalgm/chat — turns module barrel. The turn machine's pure laws:
3
- * the TurnStore tempstore (stores.js), the status vocabulary, the replay
4
- * grammar (streams.js), and the /active + /runtime-idle query shapes
5
- * (engine.js:101-118).
6
- */
7
- export { TURN_STATUSES, IDLE_STATUS, ACTIVE_STATUSES, STOP_REASONS, isActiveStatus, isTerminalStatus, type TurnStatus, type QueryStatus, type ActiveStatus, type StopReason, } from './status.js';
8
- export { TurnStore, addChunkOrThrow, RAW_STREAM_WRITE_FAILED_MESSAGE, type TurnChunk, type TurnEntry, type StartTurnInput, type ChunkFrame, type AddChunkOptions, type TurnListener, } from './turn-store.js';
9
- export { HEARTBEAT_INTERVAL_MS, KEEP_ALIVE_FRAME, SSE_HEADERS, CHAT_STREAM_FALLBACK_ERROR, jsonSse, namedSse, normalizeAfterIndex, parseAfterIndexParam, findTurn, createTurnTail, createRawTempTail, chatErrorWrites, type ReplayFormat, type TailOutput, type TurnTail, type TurnTailOptions, } from './replay.js';
10
- export { activeQuery, idleStatusQuery, type ActiveQueryResult, type IdleStatusResult, } from './queries.js';
11
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/turns/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,aAAa,EACb,WAAW,EACX,eAAe,EACf,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,UAAU,GAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,SAAS,EACT,eAAe,EACf,+BAA+B,EAC/B,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,YAAY,GAClB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,WAAW,EACX,0BAA0B,EAC1B,OAAO,EACP,QAAQ,EACR,mBAAmB,EACnB,oBAAoB,EACpB,QAAQ,EACR,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,eAAe,GACrB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,WAAW,EACX,eAAe,EACf,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,GACtB,MAAM,cAAc,CAAC"}
@@ -1,11 +0,0 @@
1
- /**
2
- * @amalgm/chat — turns module barrel. The turn machine's pure laws:
3
- * the TurnStore tempstore (stores.js), the status vocabulary, the replay
4
- * grammar (streams.js), and the /active + /runtime-idle query shapes
5
- * (engine.js:101-118).
6
- */
7
- export { TURN_STATUSES, IDLE_STATUS, ACTIVE_STATUSES, STOP_REASONS, isActiveStatus, isTerminalStatus, } from './status.js';
8
- export { TurnStore, addChunkOrThrow, RAW_STREAM_WRITE_FAILED_MESSAGE, } from './turn-store.js';
9
- export { HEARTBEAT_INTERVAL_MS, KEEP_ALIVE_FRAME, SSE_HEADERS, CHAT_STREAM_FALLBACK_ERROR, jsonSse, namedSse, normalizeAfterIndex, parseAfterIndexParam, findTurn, createTurnTail, createRawTempTail, chatErrorWrites, } from './replay.js';
10
- export { activeQuery, idleStatusQuery, } from './queries.js';
11
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/turns/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,aAAa,EACb,WAAW,EACX,eAAe,EACf,YAAY,EACZ,cAAc,EACd,gBAAgB,GAKjB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,SAAS,EACT,eAAe,EACf,+BAA+B,GAOhC,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,WAAW,EACX,0BAA0B,EAC1B,OAAO,EACP,QAAQ,EACR,mBAAmB,EACnB,oBAAoB,EACpB,QAAQ,EACR,cAAc,EACd,iBAAiB,EACjB,eAAe,GAKhB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,WAAW,EACX,eAAe,GAGhB,MAAM,cAAc,CAAC"}
@@ -1,36 +0,0 @@
1
- /**
2
- * Turn query response shapes — engine `chat-core/engine.js:101-118`, the
3
- * pure builders behind `GET /active` and `GET /runtime-idle`
4
- * (server.js:101,45). They read only a TurnStore; the host serializes.
5
- */
6
- import type { TurnStore } from './turn-store.js';
7
- import { type QueryStatus } from './status.js';
8
- /** `GET /active` response body (engine.js:101-109). */
9
- export interface ActiveQueryResult {
10
- active: boolean;
11
- codeSessionId: string;
12
- assistantMessageId: string | null;
13
- status: QueryStatus;
14
- }
15
- /**
16
- * `ChatCore.active()` (engine.js:101-109): the session's active entry, with
17
- * the active flag re-checked against the status predicate (a `cancelling`
18
- * turn is still active) and `'idle'` synthesized when nothing is stored.
19
- * Falsy assistantMessageId coerces to null via `||`, as the engine does.
20
- */
21
- export declare function activeQuery(store: TurnStore, sessionId: string): ActiveQueryResult;
22
- /** `GET /runtime-idle` response body (engine.js:111-118). */
23
- export interface IdleStatusResult {
24
- idle: boolean;
25
- active_turns: number;
26
- tempstore_count: number;
27
- }
28
- /**
29
- * `ChatCore.idleStatus()` (engine.js:111-118): idle iff no turn holds a
30
- * tempstore slot; both counters report the same activeCount. The engine's
31
- * `typeof this.turns.activeCount === 'function'` guard is dropped — the
32
- * store is typed here, so activeCount always exists (engineParity: true,
33
- * guard unreachable).
34
- */
35
- export declare function idleStatusQuery(store: TurnStore): IdleStatusResult;
36
- //# sourceMappingURL=queries.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/turns/queries.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAe,KAAK,WAAW,EAAkB,MAAM,aAAa,CAAC;AAE5E,uDAAuD;AACvD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,MAAM,EAAE,WAAW,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,iBAAiB,CAQlF;AAED,6DAA6D;AAC7D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,gBAAgB,CAOlE"}
@@ -1,37 +0,0 @@
1
- /**
2
- * Turn query response shapes — engine `chat-core/engine.js:101-118`, the
3
- * pure builders behind `GET /active` and `GET /runtime-idle`
4
- * (server.js:101,45). They read only a TurnStore; the host serializes.
5
- */
6
- import { IDLE_STATUS, isActiveStatus } from './status.js';
7
- /**
8
- * `ChatCore.active()` (engine.js:101-109): the session's active entry, with
9
- * the active flag re-checked against the status predicate (a `cancelling`
10
- * turn is still active) and `'idle'` synthesized when nothing is stored.
11
- * Falsy assistantMessageId coerces to null via `||`, as the engine does.
12
- */
13
- export function activeQuery(store, sessionId) {
14
- const entry = store.active(sessionId);
15
- return {
16
- active: !!entry && isActiveStatus(entry.status),
17
- codeSessionId: sessionId,
18
- assistantMessageId: entry?.assistantMessageId || null,
19
- status: entry?.status || IDLE_STATUS,
20
- };
21
- }
22
- /**
23
- * `ChatCore.idleStatus()` (engine.js:111-118): idle iff no turn holds a
24
- * tempstore slot; both counters report the same activeCount. The engine's
25
- * `typeof this.turns.activeCount === 'function'` guard is dropped — the
26
- * store is typed here, so activeCount always exists (engineParity: true,
27
- * guard unreachable).
28
- */
29
- export function idleStatusQuery(store) {
30
- const tempstoreCount = store.activeCount();
31
- return {
32
- idle: tempstoreCount === 0,
33
- active_turns: tempstoreCount,
34
- tempstore_count: tempstoreCount,
35
- };
36
- }
37
- //# sourceMappingURL=queries.js.map