@platless/axom-cli 0.3.13 → 0.6.36

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 (320) hide show
  1. package/README.md +18 -5
  2. package/dist/axom-patch/cli/README.md +119 -9
  3. package/dist/axom-patch/cli/account-limits/README.md +27 -0
  4. package/dist/axom-patch/cli/account-limits/antigravity-proxy.mjs +47 -0
  5. package/dist/axom-patch/cli/account-limits/antigravity-read.mjs +90 -0
  6. package/dist/axom-patch/cli/account-limits/antigravity.mjs +46 -0
  7. package/dist/axom-patch/cli/account-limits/generate.py +123 -0
  8. package/dist/axom-patch/cli/account-limits/kimi-proxy.mjs +81 -0
  9. package/dist/axom-patch/cli/account-limits/normalize.mjs +151 -0
  10. package/dist/axom-patch/cli/claude-account-limits.json +37 -0
  11. package/dist/axom-patch/cli/codex-account-limits.json +37 -0
  12. package/dist/axom-patch/cli/codex-terminal-output.json +16 -0
  13. package/dist/axom-patch/cli/commandcode-account-limits.json +30 -0
  14. package/dist/axom-patch/cli/kimi-quota.mjs +12 -0
  15. package/dist/axom-patch/cli/kimi-subagents.mjs +173 -0
  16. package/dist/axom-patch/cli/nightly-task.md +194 -0
  17. package/dist/axom-patch/cli/pi-subagent-subwork.json +23 -0
  18. package/dist/axom-patch/cli/probes/claude-late-async-terminal.mjs +5 -1
  19. package/dist/axom-patch/cli/probes/codex-terminal-output.mjs +33 -0
  20. package/dist/axom-patch/cli/probes/kimi-subagent-subwork.mjs +82 -0
  21. package/dist/axom-patch/cli/probes/pi-subagent-subwork.mjs +211 -0
  22. package/dist/axom-patch/cli/probes/zcode-subagent-subwork.mjs +257 -0
  23. package/dist/axom-patch/cli/qoder/dist/axom-acp-compat.mjs +1591 -0
  24. package/dist/axom-patch/cli/qoder/releases/1.1.75.json +360 -0
  25. package/dist/axom-patch/cli/qoder-background-terminal.md +13 -5
  26. package/dist/axom-patch/cli/qoder-foreground-output.md +14 -7
  27. package/dist/axom-patch/cli/qoder-native-acp.json +227 -0
  28. package/dist/axom-patch/cli/qoder-steering.md +20 -25
  29. package/dist/axom-patch/cli/qoder-subagent-subwork.md +17 -68
  30. package/dist/axom-patch/cli/runtime.json +39 -15
  31. package/dist/axom-patch/cli/zcode-account-limits.json +30 -0
  32. package/dist/axom-patch/cli/zcode-models.json +37 -0
  33. package/dist/axom-patch/cli/zcode-subagent-subwork.json +72 -0
  34. package/dist/cli.js +4 -9
  35. package/dist/commands/knowledge.js +47 -0
  36. package/dist/commands/update.js +65 -3
  37. package/dist/commands/workstation.js +73 -7
  38. package/dist/install/claude/commands.js +13 -13
  39. package/dist/keepers/acp/keeper.mjs +3083 -0
  40. package/dist/keepers/acp/manifest.json +9 -0
  41. package/dist/keepers/terminal/keeper.mjs +8469 -0
  42. package/dist/keepers/terminal/manifest.json +9 -0
  43. package/dist/keepers/terminal/node_modules/node-pty/lib/conpty_console_list_agent.js +25 -0
  44. package/dist/keepers/terminal/node_modules/node-pty/lib/eventEmitter2.js +47 -0
  45. package/dist/keepers/terminal/node_modules/node-pty/lib/index.js +52 -0
  46. package/dist/keepers/terminal/node_modules/node-pty/lib/interfaces.js +7 -0
  47. package/dist/keepers/terminal/node_modules/node-pty/lib/shared/conout.js +10 -0
  48. package/dist/keepers/terminal/node_modules/node-pty/lib/terminal.js +190 -0
  49. package/dist/keepers/terminal/node_modules/node-pty/lib/types.js +7 -0
  50. package/dist/keepers/terminal/node_modules/node-pty/lib/unixTerminal.js +351 -0
  51. package/dist/keepers/terminal/node_modules/node-pty/lib/utils.js +38 -0
  52. package/dist/keepers/terminal/node_modules/node-pty/lib/windowsConoutConnection.js +131 -0
  53. package/dist/keepers/terminal/node_modules/node-pty/lib/windowsPtyAgent.js +344 -0
  54. package/dist/keepers/terminal/node_modules/node-pty/lib/windowsTerminal.js +209 -0
  55. package/dist/keepers/terminal/node_modules/node-pty/lib/worker/conoutSocketWorker.js +22 -0
  56. package/dist/keepers/terminal/node_modules/node-pty/package.json +66 -0
  57. package/dist/keepers/terminal/node_modules/node-pty/prebuilds/darwin-arm64/pty.node +0 -0
  58. package/dist/keepers/terminal/node_modules/node-pty/prebuilds/darwin-arm64/spawn-helper +0 -0
  59. package/dist/keepers/terminal/node_modules/node-pty/prebuilds/darwin-x64/pty.node +0 -0
  60. package/dist/keepers/terminal/node_modules/node-pty/prebuilds/darwin-x64/spawn-helper +0 -0
  61. package/dist/keepers/terminal/node_modules/node-pty/prebuilds/linux-arm64/pty.node +0 -0
  62. package/dist/keepers/terminal/node_modules/node-pty/prebuilds/linux-x64/pty.node +0 -0
  63. package/dist/mcp.js +1 -1
  64. package/dist/native/darwin-arm64/axom-quic +0 -0
  65. package/dist/test/keeperKit.js +67 -0
  66. package/dist/workstation/acp/acpAgents.js +2192 -636
  67. package/dist/workstation/acp/acpClient.js +84 -495
  68. package/dist/workstation/acp/adoption.js +10 -396
  69. package/dist/workstation/acp/binaryInstall.js +100 -27
  70. package/dist/workstation/acp/builds/gc.js +245 -0
  71. package/dist/workstation/acp/builds/install/binary.js +28 -0
  72. package/dist/workstation/acp/builds/install/npm.js +324 -0
  73. package/dist/workstation/acp/builds/install/uv.js +254 -0
  74. package/dist/workstation/acp/builds/migrate.js +195 -0
  75. package/dist/workstation/acp/builds/model.js +128 -0
  76. package/dist/workstation/acp/builds/nodeGate.js +100 -0
  77. package/dist/workstation/acp/builds/store.js +352 -0
  78. package/dist/workstation/acp/commandTableProbe.js +68 -0
  79. package/dist/workstation/acp/configOptions.js +103 -1
  80. package/dist/workstation/acp/envSecrets.js +27 -0
  81. package/dist/workstation/acp/initializeResponse.js +290 -0
  82. package/dist/workstation/acp/installErrors.js +12 -2
  83. package/dist/workstation/acp/installProbe.js +1 -1
  84. package/dist/workstation/acp/managedPatches.js +239 -159
  85. package/dist/workstation/acp/managedRuntime.js +314 -0
  86. package/dist/workstation/acp/outbox.js +330 -0
  87. package/dist/workstation/acp/patchAssets.js +60 -3
  88. package/dist/workstation/acp/permission.js +42 -10
  89. package/dist/workstation/acp/processor/checkpoint.js +78 -0
  90. package/dist/workstation/acp/processor/commands.js +35 -0
  91. package/dist/workstation/acp/processor/control.js +282 -0
  92. package/dist/workstation/acp/processor/emit.js +26 -0
  93. package/dist/workstation/acp/processor/jsonrpc.js +172 -0
  94. package/dist/workstation/acp/processor/memoryLog.js +49 -0
  95. package/dist/workstation/acp/processor/origins.js +48 -0
  96. package/dist/workstation/acp/processor/output.js +67 -0
  97. package/dist/workstation/acp/processor/projection.js +42 -0
  98. package/dist/workstation/acp/processor/record.js +128 -0
  99. package/dist/workstation/acp/processor/runtime.js +105 -0
  100. package/dist/workstation/acp/processor/sdkSchemas.js +61 -0
  101. package/dist/workstation/acp/processor/session.js +496 -0
  102. package/dist/workstation/acp/processor/state.js +67 -0
  103. package/dist/workstation/acp/processor/step.js +442 -0
  104. package/dist/workstation/acp/processor/test/fixtureLog.js +58 -0
  105. package/dist/workstation/acp/processor/test/harness.js +120 -0
  106. package/dist/workstation/acp/processor/test/largeIdEcho.js +50 -0
  107. package/dist/workstation/acp/processor/test/rawAgent.js +70 -0
  108. package/dist/workstation/acp/processor/transport/generations.js +76 -0
  109. package/dist/workstation/acp/processor/transport/keeper.js +130 -0
  110. package/dist/workstation/acp/processor/transport/local.js +269 -0
  111. package/dist/workstation/acp/processor/transport/types.js +78 -0
  112. package/dist/workstation/acp/processor/updates.js +390 -0
  113. package/dist/workstation/acp/processorSession.js +1348 -0
  114. package/dist/workstation/acp/registry/catalog.js +189 -41
  115. package/dist/workstation/acp/registry/launch.js +76 -119
  116. package/dist/workstation/acp/sessionUpdateMapper.js +18 -7
  117. package/dist/workstation/acp/steering.js +58 -0
  118. package/dist/workstation/acp/switching.js +111 -0
  119. package/dist/workstation/acp/terminalLogin.js +16 -42
  120. package/dist/workstation/acp/terminalLoginSpec.js +41 -0
  121. package/dist/workstation/acp/test/adapterFixtures.js +256 -0
  122. package/dist/workstation/acp/test/daemonLife.js +106 -0
  123. package/dist/workstation/acp/test/fakeAgent.js +13 -0
  124. package/dist/workstation/acp/test/keeperWorld.js +295 -0
  125. package/dist/workstation/acp/test/memoryOutbox.js +55 -0
  126. package/dist/workstation/acp/test/raw/fixtures.js +196 -0
  127. package/dist/workstation/acp/test/raw/sanitize.js +344 -0
  128. package/dist/workstation/acp/test/raw/sources.js +135 -0
  129. package/dist/workstation/acp/test/realAdapter.js +331 -0
  130. package/dist/workstation/acp/test/scriptAgent.js +214 -0
  131. package/dist/workstation/acp/test/sessionFrames.js +42 -0
  132. package/dist/workstation/acp/timedCommand.js +4 -2
  133. package/dist/workstation/acp/uvxInstall.js +72 -122
  134. package/dist/workstation/agentFlow.js +103 -0
  135. package/dist/workstation/agentSessions.js +1289 -544
  136. package/dist/workstation/channels/agent.js +7 -5
  137. package/dist/workstation/channels/computer.js +69 -21
  138. package/dist/workstation/channels/computerExecs.js +200 -0
  139. package/dist/workstation/channels/management.js +172 -8
  140. package/dist/workstation/channels/url.js +1 -1
  141. package/dist/workstation/config.js +16 -4
  142. package/dist/workstation/connection/encryptedChannel.js +4 -1
  143. package/dist/workstation/control/bindingStore.js +200 -0
  144. package/dist/workstation/control/commands.js +124 -0
  145. package/dist/workstation/control/daemonIdentity.js +53 -0
  146. package/dist/workstation/control/enrollment.js +106 -0
  147. package/dist/workstation/control/inspect.js +71 -0
  148. package/dist/workstation/control/locks.js +63 -0
  149. package/dist/workstation/control/protocol.js +40 -0
  150. package/dist/workstation/control/restartGuard.js +46 -0
  151. package/dist/workstation/control/runtimeClient.js +97 -0
  152. package/dist/workstation/control/runtimeHost.js +148 -0
  153. package/dist/workstation/control/serverIdentity.js +35 -0
  154. package/dist/workstation/daemon.js +393 -12
  155. package/dist/workstation/daemonctl.js +103 -14
  156. package/dist/workstation/desktopControl/audio.js +99 -0
  157. package/dist/workstation/desktopControl/capabilities.js +92 -0
  158. package/dist/workstation/desktopControl/captureModes.js +9 -0
  159. package/dist/workstation/desktopControl/captureTargetLabel.js +9 -0
  160. package/dist/workstation/desktopControl/deviceSockets.js +246 -0
  161. package/dist/workstation/desktopControl/helperProcess.js +353 -0
  162. package/dist/workstation/desktopControl/lobby.js +129 -0
  163. package/dist/workstation/desktopControl/macProvider.js +155 -0
  164. package/dist/workstation/desktopControl/media.js +331 -0
  165. package/dist/workstation/desktopControl/nativeProvider.js +1018 -0
  166. package/dist/workstation/desktopControl/networkEvidence.js +43 -0
  167. package/dist/workstation/desktopControl/overview.js +58 -0
  168. package/dist/workstation/desktopControl/protocol.js +302 -0
  169. package/dist/workstation/desktopControl/quicMedia.js +240 -0
  170. package/dist/workstation/desktopControl/rateController.js +226 -0
  171. package/dist/workstation/desktopControl/supervisor.js +1681 -0
  172. package/dist/workstation/desktopControl/transport.js +27 -0
  173. package/dist/workstation/desktopControl/wallpaper.js +78 -0
  174. package/dist/workstation/exec/attach.js +126 -0
  175. package/dist/workstation/exec/command.js +40 -0
  176. package/dist/workstation/exec/durable.js +517 -0
  177. package/dist/workstation/exec/fallback.js +106 -0
  178. package/dist/workstation/exec/policy.js +837 -0
  179. package/dist/workstation/exec/shaping.js +211 -0
  180. package/dist/workstation/exec.js +3 -112
  181. package/dist/workstation/files/adapters/computerFileFrames.js +51 -0
  182. package/dist/workstation/files/adapters/toolRequests.js +121 -0
  183. package/dist/workstation/files/client.js +455 -0
  184. package/dist/workstation/files/credentials.js +142 -0
  185. package/dist/workstation/files/errors.js +28 -0
  186. package/dist/workstation/files/fence.js +350 -0
  187. package/dist/workstation/files/find/fileIndex.js +153 -0
  188. package/dist/workstation/files/find/fuzzy.js +155 -0
  189. package/dist/workstation/files/host.js +122 -0
  190. package/dist/workstation/files/hostProtocol.js +2 -0
  191. package/dist/workstation/files/media/cache.js +620 -0
  192. package/dist/workstation/files/media/encoding.js +308 -0
  193. package/dist/workstation/files/media/estimator.js +100 -0
  194. package/dist/workstation/files/media/media.js +325 -0
  195. package/dist/workstation/files/media/packedAudio.js +23 -0
  196. package/dist/workstation/files/media/scheduler.js +551 -0
  197. package/dist/workstation/files/media/types.js +5 -0
  198. package/dist/workstation/files/scope.js +45 -0
  199. package/dist/workstation/files/structured.js +284 -0
  200. package/dist/workstation/{fileOps.js → files/text.js} +152 -39
  201. package/dist/workstation/files/uploads.js +351 -0
  202. package/dist/workstation/journal.js +65 -236
  203. package/dist/workstation/keepers/acp/client.js +101 -0
  204. package/dist/workstation/keepers/acp/envelope.js +62 -0
  205. package/dist/workstation/keepers/acp/host.js +419 -0
  206. package/dist/workstation/keepers/acp/main.js +18 -0
  207. package/dist/workstation/keepers/acp/memoryStream.js +121 -0
  208. package/dist/workstation/keepers/acp/params.js +137 -0
  209. package/dist/workstation/keepers/acp/protocol.js +66 -0
  210. package/dist/workstation/keepers/acp/recover.js +120 -0
  211. package/dist/workstation/keepers/acp/session.js +584 -0
  212. package/dist/workstation/keepers/acp/stderr.js +154 -0
  213. package/dist/workstation/keepers/kit/activity.js +103 -0
  214. package/dist/workstation/keepers/kit/bootstrap.js +164 -0
  215. package/dist/workstation/keepers/kit/buildVersion.js +51 -0
  216. package/dist/workstation/keepers/kit/bundle.js +124 -0
  217. package/dist/workstation/keepers/kit/client.js +432 -0
  218. package/dist/workstation/keepers/kit/identity.js +21 -0
  219. package/dist/workstation/keepers/kit/ipc.js +112 -0
  220. package/dist/workstation/keepers/kit/launchConfig.js +8 -0
  221. package/dist/workstation/keepers/kit/launcher.js +289 -0
  222. package/dist/workstation/keepers/kit/lock.js +123 -0
  223. package/dist/workstation/keepers/kit/orphanSweep.js +86 -0
  224. package/dist/workstation/keepers/kit/paths.js +76 -0
  225. package/dist/workstation/keepers/kit/protocol.js +43 -0
  226. package/dist/workstation/keepers/kit/server.js +518 -0
  227. package/dist/workstation/keepers/kit/streamLog.js +697 -0
  228. package/dist/workstation/keepers/legacy.js +296 -0
  229. package/dist/workstation/keepers/policy.js +576 -0
  230. package/dist/workstation/keepers/stop.js +34 -0
  231. package/dist/workstation/keepers/terminal/client.js +213 -0
  232. package/dist/workstation/keepers/terminal/exec.js +981 -0
  233. package/dist/workstation/keepers/terminal/generations.js +129 -0
  234. package/dist/workstation/keepers/terminal/keeper.js +62 -0
  235. package/dist/workstation/keepers/terminal/main.js +43 -0
  236. package/dist/workstation/keepers/terminal/orphanSweep.js +3 -0
  237. package/dist/workstation/keepers/terminal/params.js +27 -0
  238. package/dist/workstation/keepers/terminal/protocol.js +56 -0
  239. package/dist/workstation/keepers/terminal/pty.js +330 -0
  240. package/dist/workstation/managedInstall.js +57 -0
  241. package/dist/workstation/protocol/accountLimits.js +47 -0
  242. package/dist/workstation/protocol/agent.js +50 -19
  243. package/dist/workstation/protocol/common.js +30 -0
  244. package/dist/workstation/protocol/computer.js +15 -4
  245. package/dist/workstation/protocol/management.js +141 -4
  246. package/dist/workstation/protocol/runtimeDiagnostics.js +15 -0
  247. package/dist/workstation/rd/artifact.js +119 -0
  248. package/dist/workstation/rd/control.js +119 -0
  249. package/dist/workstation/rd/display.js +29 -0
  250. package/dist/workstation/rd/provider.js +222 -0
  251. package/dist/workstation/rd/sessions.js +391 -0
  252. package/dist/workstation/rd/state.js +45 -0
  253. package/dist/workstation/rd/update.js +171 -0
  254. package/dist/workstation/rd/upkeep.js +38 -0
  255. package/dist/workstation/register.js +27 -37
  256. package/dist/workstation/service/installer.js +104 -13
  257. package/dist/workstation/service/launchd.js +1 -0
  258. package/dist/workstation/storageMetrics.js +118 -0
  259. package/dist/workstation/systemMetrics.js +154 -93
  260. package/dist/workstation/toolchain.js +94 -0
  261. package/dist/workstation/tools/browser.js +28 -4
  262. package/dist/workstation/tools/client.js +9 -1
  263. package/dist/workstation/tools/info.js +50 -0
  264. package/dist/workstation/tools/keeperProcess.js +15 -5
  265. package/dist/workstation/tools/router.js +55 -0
  266. package/dist/workstation/tools/terminalRouter.js +222 -0
  267. package/dist/workstation/tools/validation.js +37 -1
  268. package/dist/workstation/update/artifact.js +2 -1
  269. package/dist/workstation/update/coordinator.js +3 -0
  270. package/dist/workstation/update/globalInstall.js +116 -0
  271. package/dist/workstation/update/npmInstaller.js +49 -23
  272. package/dist/workstation/update/ptyPreflight.js +21 -0
  273. package/dist/workstation/update/rdRollback.js +145 -0
  274. package/dist/workstation/update/runUpdate.js +3 -2
  275. package/dist/workstation/update/taskRegistry.js +105 -11
  276. package/dist/workstation/update/watchdog.js +16790 -334
  277. package/package.json +11 -8
  278. package/skills/axom/SKILL.md +11 -11
  279. package/skills/axom-definition/SKILL.md +3 -3
  280. package/skills/axom-platform/SKILL.md +3 -3
  281. package/dist/axom-patch/cli/probes/qoder-steering.mjs +0 -89
  282. package/dist/axom-patch/cli/probes/qoder-subagent-origin.mjs +0 -49
  283. package/dist/axom-patch/cli/qoder-steering.json +0 -52
  284. package/dist/axom-patch/cli/qoder-subagent-origin.json +0 -73
  285. package/dist/commands/guide.js +0 -38
  286. package/dist/workstation/acp/acpSession.js +0 -1475
  287. package/dist/workstation/acp/contract.js +0 -499
  288. package/dist/workstation/acp/delegationMcp.js +0 -24
  289. package/dist/workstation/acp/draftInterceptor.js +0 -163
  290. package/dist/workstation/acp/qoderStartup.js +0 -45
  291. package/dist/workstation/acp/sessionScope.js +0 -19
  292. package/dist/workstation/filePaths.js +0 -174
  293. package/dist/workstation/fileWorker.js +0 -81
  294. package/dist/workstation/fileWorkerClient.js +0 -121
  295. package/dist/workstation/qoderAdapter/backgroundProcess.js +0 -106
  296. package/dist/workstation/qoderAdapter/backgroundTerminal.js +0 -262
  297. package/dist/workstation/qoderAdapter/completedContinuation.js +0 -139
  298. package/dist/workstation/qoderAdapter/contract.js +0 -78
  299. package/dist/workstation/qoderAdapter/foregroundOutput.js +0 -30
  300. package/dist/workstation/qoderAdapter/history.js +0 -87
  301. package/dist/workstation/qoderAdapter/identityIndex.js +0 -191
  302. package/dist/workstation/qoderAdapter/inputQueue.js +0 -42
  303. package/dist/workstation/qoderAdapter/main.js +0 -93
  304. package/dist/workstation/qoderAdapter/mapper.js +0 -117
  305. package/dist/workstation/qoderAdapter/observerPlugin.js +0 -245
  306. package/dist/workstation/qoderAdapter/observerReceiver.js +0 -187
  307. package/dist/workstation/qoderAdapter/permissions.js +0 -61
  308. package/dist/workstation/qoderAdapter/profile.js +0 -93
  309. package/dist/workstation/qoderAdapter/sdkDriver.js +0 -49
  310. package/dist/workstation/qoderAdapter/session.js +0 -319
  311. package/dist/workstation/qoderAdapter/subagentMeta.js +0 -28
  312. package/dist/workstation/qoderAdapter/subwork.js +0 -77
  313. package/dist/workstation/qoderAdapter/taskControl.js +0 -38
  314. package/dist/workstation/qoderAdapter/taskEvent.js +0 -26
  315. package/dist/workstation/qoderAdapter/taskLedger.js +0 -163
  316. package/dist/workstation/qoderAdapter/usage.js +0 -37
  317. package/dist/workstation/tools/core.js +0 -50
  318. package/dist/workstation/tools/files.js +0 -525
  319. package/dist/workstation/tools/terminal.js +0 -214
  320. /package/dist/workstation/{qoderAdapter/types.js → desktopControl/provider.js} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@platless/axom-cli",
3
- "version": "0.3.13",
3
+ "version": "0.6.36",
4
4
  "description": "Axomwork CLI - manage Axomwork structures, records and executions over MCP",
5
5
  "type": "module",
6
6
  "bin": {
@@ -11,33 +11,36 @@
11
11
  "skills"
12
12
  ],
13
13
  "engines": {
14
- "node": ">=20"
14
+ "node": ">=24"
15
15
  },
16
16
  "scripts": {
17
- "build": "rm -rf dist && tsc && node scripts/copy-patches.mjs",
17
+ "build": "rm -rf dist && tsc && node scripts/bundle-watchdog.mjs && node scripts/copy-patches.mjs && node scripts/bundle-keepers.mjs && node scripts/bundle-quic.mjs",
18
18
  "pretest": "npm run build",
19
- "test": "vitest run",
19
+ "test": "vitest run && npm run test:qoder-patch",
20
+ "test:qoder-patch": "vitest run --config ../axom-patch/cli/qoder/vitest.config.ts",
20
21
  "typecheck": "tsc --noEmit",
21
- "prepack": "node scripts/copy-patches.mjs --check"
22
+ "prepack": "node scripts/copy-patches.mjs --check && node scripts/bundle-keepers.mjs --check && node scripts/bundle-quic.mjs --check"
22
23
  },
23
24
  "dependencies": {
24
- "@agentclientprotocol/sdk": "^1.4.0",
25
+ "@agentclientprotocol/sdk": "1.4.0",
25
26
  "@modelcontextprotocol/sdk": "^1.29.0",
26
27
  "@napi-rs/keyring": "^1.1.3",
27
- "@qoder-ai/qoder-agent-sdk": "1.0.50",
28
28
  "@xterm/addon-serialize": "^0.14.0",
29
29
  "@xterm/headless": "^6.0.0",
30
30
  "commander": "^15.0.0",
31
31
  "js-yaml": "^4.1.0",
32
+ "proper-lockfile": "4.1.2",
32
33
  "semver": "^7.8.5",
33
34
  "ws": "^8.18.0",
34
35
  "zod": "^4.4.3"
35
36
  },
36
37
  "devDependencies": {
37
38
  "@types/js-yaml": "^4.0.9",
38
- "@types/node": "^20.11.0",
39
+ "@types/node": "^24.19.2",
40
+ "@types/proper-lockfile": "4.1.4",
39
41
  "@types/semver": "^7.8.0",
40
42
  "@types/ws": "^8.5.13",
43
+ "esbuild": "0.27.7",
41
44
  "typescript": "^5.2.2",
42
45
  "vitest": "^2.1.9"
43
46
  },
@@ -29,8 +29,8 @@ Start by discovering structure before changing records. Use `axom__app_struct__l
29
29
 
30
30
  ## Query Criteria
31
31
 
32
- For the complete filter, sort, and page contract, load guide
33
- `agent-integration/mcp/record-query-criteria.md` with `axom__guide__load`.
32
+ For the complete filter, sort, and page contract, see knowledge page
33
+ `agent-integration/mcp/record-query-criteria.md` (`axom__knowledge__get`).
34
34
 
35
35
  Pass filters and sorts inside `criteria`, with `page` as a separate top-level field:
36
36
 
@@ -51,8 +51,8 @@ Filter `op` values are `eq|gt|lt|like|in|and|or`. Use nested `filters` for `and`
51
51
  ## Upserting a Record
52
52
 
53
53
  Use `axom__record_write__upsert_record` when a stable external identifier should select an existing record or create a new one. Supply the canonical fields in this order, and include the identity value inside `record`:
54
- For create/update/upsert safety, load guide
55
- `agent-integration/operating-patterns/safe-record-mutations.md`; before deletion, load
54
+ For create/update/upsert safety, see knowledge page
55
+ `agent-integration/operating-patterns/safe-record-mutations.md`; before deletion, see knowledge page
56
56
  `agent-integration/operating-patterns/destructive-actions.md`.
57
57
 
58
58
  ```json
@@ -70,7 +70,7 @@ For create/update/upsert safety, load guide
70
70
  ## Execution Results
71
71
 
72
72
  `axom__execute__run_operation` and `axom__execute__run_service` return an OperationResult-style payload. Interpret `success` as the primary outcome, `text` as user-facing output, `data` as structured result data, `message` as diagnostic detail, `processing` as whether work continues asynchronously, and `runId` as the related run identifier when one is started.
73
- For asynchronous continuation, load guides
73
+ For asynchronous continuation, see knowledge pages
74
74
  `concepts/execution/synchronous-and-task-execution.md` and
75
75
  `agent-integration/operating-patterns/following-runs.md`.
76
76
 
@@ -112,10 +112,10 @@ Requires the `setting_user` scope. These tools only ever act on the authenticate
112
112
  - `axom__setting_user__delete_memory({ factId })` - deletes one of the calling user's memory facts; another user's fact id answers not-found.
113
113
  - `axom__setting_user__list_workstations()` - lists the calling user's personal workstations and their status.
114
114
 
115
- ## Guide
115
+ ## Knowledge
116
116
 
117
- Axomwork ships an AI-first manual. Call `axom__guide__load` with no arguments for the table of
118
- contents, `axom__guide__load` with `path` (e.g. `script-language/sdk/records.md`) for one page, and
119
- `axom__guide__search` with `query` for ranked snippets. Guide references omit the locale and include
120
- `.md`, for example `script-language/sdk/records.md`. When a tool description references a guide
121
- path, load that page first.
117
+ Axomwork ships an AI-first manual. Call `axom__knowledge__get` with no arguments for the table of
118
+ contents, `axom__knowledge__get` with `path` (e.g. `script-language/sdk/records.md`) for one page, and
119
+ `axom__knowledge__search` with `query` for ranked snippets. Knowledge page paths omit the locale and
120
+ include `.md`, for example `script-language/sdk/records.md`. When a tool description says "see knowledge
121
+ page `<path>`", read that page first.
@@ -16,7 +16,7 @@ Call each tool directly with camelCase arguments:
16
16
  ## ETag workflow
17
17
 
18
18
  Read the target resource or its list before a mutation, then send the returned `etag` as `expectedEtag`. Body updates use `expectedBodyEtag`. If a conflict occurs, reread the resource, merge intentionally, and retry. Confirm delete actions with the user.
19
- Load guides `agent-integration/operating-patterns/etag-write-workflow.md` and
19
+ See knowledge pages `agent-integration/operating-patterns/etag-write-workflow.md` and
20
20
  `agent-integration/operating-patterns/destructive-actions.md` for the complete safety contract.
21
21
 
22
22
  ## Applications
@@ -65,9 +65,9 @@ Load guides `agent-integration/operating-patterns/etag-write-workflow.md` and
65
65
  - `axom__app_studio__get_workflow_body` — `applicationName`, `modelName`, `workflowName`
66
66
  - `axom__app_studio__update_workflow_body` — `applicationName`, `modelName`, `workflowName`, `content`, `expectedBodyEtag`
67
67
 
68
- ## Guide
68
+ ## Knowledge
69
69
 
70
- Before authoring `.axom.kts` bodies, load the relevant guide pages with `axom__guide__load`:
70
+ Before authoring `.axom.kts` bodies, read the relevant knowledge pages with `axom__knowledge__get`:
71
71
  `script-language/sdk/index.md` (script SDK),
72
72
  `script-language/workflows/workflow-script.md` (workflow DSL),
73
73
  `script-language/patterns/index.md` (sync/task/streaming patterns), and
@@ -16,7 +16,7 @@ Call each tool directly with camelCase arguments:
16
16
  ## ETag workflow
17
17
 
18
18
  Read the target resource or list before a mutation, then send its `etag` as `expectedEtag`. Prompt and workflow-body updates use `expectedBodyEtag`. On conflict, reread and merge intentionally. Confirm delete actions with the user. Report the returned `requiresRestart` value for every datasource or settings mutation.
19
- For the full concurrency workflow, load guide
19
+ For the full concurrency workflow, see knowledge page
20
20
  `agent-integration/operating-patterns/etag-write-workflow.md`.
21
21
 
22
22
  ## Platform skills
@@ -68,9 +68,9 @@ For the full concurrency workflow, load guide
68
68
  - `axom__setting_platform__get_settings`
69
69
  - `axom__setting_platform__update_settings`
70
70
 
71
- ## Guide
71
+ ## Knowledge
72
72
 
73
- Before editing, load the matching guide with `axom__guide__load`:
73
+ Before editing, read the matching knowledge page with `axom__knowledge__get`:
74
74
  `platform-operations/ai-providers-and-profiles.md`,
75
75
  `platform-operations/cowork-agent-configuration.md`,
76
76
  `platform-operations/datasource-configuration.md`,
@@ -1,89 +0,0 @@
1
- // Exercise the real native ACP methods, without model calls or credentials.
2
- import assert from 'node:assert/strict';
3
- import { readFile } from 'node:fs/promises';
4
- import { join } from 'node:path';
5
- import { pathToFileURL } from 'node:url';
6
-
7
- export async function verifyQoderSteering(bundle) {
8
- const slice = (start, end) => {
9
- const from = bundle.indexOf(start), to = bundle.indexOf(end, from);
10
- assert(from >= 0 && to > from, `Native Qoder lacks ${start}`);
11
- return bundle.slice(from, to);
12
- };
13
- class RequestError extends Error {
14
- static invalidParams(_data, message) { return new this(message); }
15
- }
16
- const methods = slice('axomQoderSteer(A){', 'async axomQoderPromptOnce(A,e,t,i,n){');
17
- const Session = new Function('as', 'mte', `return class {
18
- axomQoderSteeringMessages=[];active=true;disposed=false;promptRunning=true;
19
- pendingPrompt=new AbortController;queryEngine={activeAbortController:{},abort:()=>{this.aborts++}};aborts=0;
20
- ${methods}
21
- }`)(RequestError, () => 'generated-id');
22
- const request = text => ({ prompt: [{ type: 'text', text }],
23
- _meta: { steering: { idleBehavior: 'promptRequired', priority: 'now' } } });
24
- const session = new Session();
25
- let finishFirst, finishSecond;
26
- const inputs = [];
27
- session.axomQoderPromptOnce = async (prompt, signal) => {
28
- inputs.push(prompt);
29
- assert.equal(signal, session.pendingPrompt.signal);
30
- return new Promise(resolve => {
31
- if (inputs.length === 1) finishFirst = resolve; else finishSecond = resolve;
32
- });
33
- };
34
- let completed = false;
35
- const pending = session.promptViaQueryEngine([{ type: 'text', text: 'original' }],
36
- session.pendingPrompt.signal, 'prompt-id', 'user-id').then(value => { completed = true; return value; });
37
- assert.deepEqual(session.axomQoderSteer(request('changed')), { outcome: 'injected' });
38
- assert.equal(session.aborts, 1);
39
- assert.equal(session.pendingPrompt.signal.aborted, false, 'steering must not cancel the host prompt');
40
- finishFirst({ stopReason: 'cancelled' });
41
- await new Promise(resolve => setImmediate(resolve));
42
- assert.equal(completed, false, 'the interrupted native result must not finish the host turn');
43
- assert.deepEqual(inputs[1], [{ type: 'text', text: 'changed' }]);
44
- finishSecond({ stopReason: 'end_turn' });
45
- assert.equal((await pending).stopReason, 'end_turn');
46
- assert.equal(session.axomQoderSteeringMessages.length, 0);
47
-
48
- // Native promptRunning remains true for a microtask after its query iterator finishes.
49
- // Accepting a message there would report delivery after the wrapper already stopped draining.
50
- const finished = new Session(); finished.queryEngine.activeAbortController = undefined;
51
- assert.deepEqual(finished.axomQoderSteer(request('arrived at completion')),
52
- { outcome: 'promptRequired', reason: 'noRunningTurn' });
53
- assert.equal(finished.axomQoderSteeringMessages.length, 0);
54
-
55
- for (const key of ['active', 'promptRunning']) {
56
- const idle = new Session(); idle[key] = false;
57
- assert.deepEqual(idle.axomQoderSteer(request('idle')), { outcome: 'promptRequired', reason: 'noRunningTurn' });
58
- assert.equal(idle.aborts, 0);
59
- }
60
- const invalid = new Session();
61
- for (const value of [request(' '), request('x'.repeat(131073)),
62
- { ...request('x'), prompt: [{ type: 'image', data: 'x', mimeType: 'image/png' }] },
63
- { ...request('x'), _meta: { steering: { priority: 'next' } } }]) {
64
- assert.throws(() => invalid.axomQoderSteer(value));
65
- }
66
- assert.equal(invalid.aborts, 0);
67
- assert.equal(invalid.axomQoderSteeringMessages.length, 0);
68
-
69
- const stopped = new Session();
70
- stopped.axomQoderPromptOnce = async () => { stopped.pendingPrompt.abort(); return { stopReason: 'cancelled' }; };
71
- stopped.axomQoderSteer(request('must not run after Stop'));
72
- assert.equal((await stopped.promptViaQueryEngine([], stopped.pendingPrompt.signal, 'p', 'u')).stopReason, 'cancelled');
73
- assert.equal(stopped.axomQoderSteeringMessages.length, 0);
74
-
75
- const broken = new Session();
76
- broken.axomQoderPromptOnce = async () => { throw new Error('real failure'); };
77
- broken.axomQoderSteer(request('cannot hide a failure'));
78
- await assert.rejects(broken.promptViaQueryEngine([], broken.pendingPrompt.signal, 'p', 'u'), /real failure/);
79
- assert.equal(broken.axomQoderSteeringMessages.length, 0);
80
- }
81
-
82
- if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {
83
- const directory = process.argv[2];
84
- if (!directory) throw new Error('Usage: node qoder-steering.mjs <patched-qoder-package>');
85
- const metadata = JSON.parse(await readFile(join(directory, 'package.json'), 'utf8'));
86
- assert.equal(metadata.name, '@qoder-ai/qodercli'); assert.equal(metadata.version, '1.1.61');
87
- await verifyQoderSteering(await readFile(join(directory, 'bundle/qodercli.js'), 'utf8'));
88
- console.log('Native Qoder steering: host-turn lifetime, interruption, idle, validation, Stop and failure checks passed');
89
- }
@@ -1,49 +0,0 @@
1
- // Run against the hash-verified patched official bundle. Exercises its actual ACP dispatch methods
2
- // without starting a model or reading credentials. Real model acceptance is separate.
3
- import { readFile } from 'node:fs/promises';
4
- import assert from 'node:assert/strict';
5
- import { join } from 'node:path';
6
- const directory = process.argv[2];
7
- if (!directory) throw new Error('Usage: node qoder-subagent-origin.mjs <patched-package-directory>');
8
- const metadata = JSON.parse(await readFile(join(directory, 'package.json'), 'utf8'));
9
- assert.equal(metadata.name, '@qoder-ai/qodercli'); assert.equal(metadata.version, '1.1.61');
10
- const bundle = await readFile(join(directory, 'bundle/qodercli.js'), 'utf8');
11
- const method = (start, end) => {
12
- const from = bundle.indexOf(start), to = bundle.indexOf(end, from);
13
- assert(from >= 0 && to > from, `Missing real ACP method ${start}`);
14
- return bundle.slice(from, to);
15
- };
16
- const helper = method('axomQoderId(value)', 'supportsTerminalOutput(){');
17
- const dispatch = method('async dispatchSDKMessage(A)', 'createAcpSlashCommandHandler(){');
18
- const Session = new Function('brr', 'kRs', 'PRs', 'xc', 'Qze', `return class {
19
- axomQoderToolOrigins=new Map;toolCallNames=new Map;permissionToolCallIds=new Set;
20
- constructor(connection){this.connection=connection;this.id='root';this.context={toolRegistry:{getTool:()=>({kind:'read'})},config:{isTasksEnabled:()=>false}}}
21
- supportsTerminalOutput(){return false} async sendPlanUpdate(){}
22
- ${helper} ${dispatch}
23
- }`)(v => ({ toolCallId: v.toolCallId, kind: 'read', rawInput: v.input, status: v.status,
24
- _meta: { qoder: { toolName: v.name } } }), () => null,
25
- v => ({ toolCallId: v.toolCallId, status: v.isError ? 'failed' : 'completed', rawOutput: v.content }), 'Plan', new Set());
26
- const events = [];
27
- const session = new Session({ sessionUpdate: async value => events.push(value) });
28
- const tool = (id, parent) => ({ type: 'assistant', parent_tool_use_id: parent,
29
- message: { content: [{ type: 'tool_use', id, name: 'Read', input: { path: '/probe' } }] } });
30
- await session.dispatchSDKMessage(tool('read-a', 'agent-a'));
31
- await session.dispatchSDKMessage(tool('read-b', 'agent-b'));
32
- await session.dispatchSDKMessage({ type: 'user', message: { content: [{ type: 'tool_result', tool_use_id: 'read-b', content: 'B' }] } });
33
- await session.dispatchSDKMessage({ type: 'user', message: { content: [{ type: 'tool_result', tool_use_id: 'read-a', content: 'A' }] } });
34
- for (const [id, parent] of [['read-a', 'agent-a'], ['read-b', 'agent-b']]) {
35
- const owned = events.filter(v => v.update.toolCallId === id);
36
- assert.equal(owned.length, 2);
37
- for (const event of owned) assert.equal(event.update._meta.qoder.parentToolUseId, parent);
38
- }
39
- await session.dispatchSDKMessage({ type: 'stream_event', parent_tool_use_id: 'agent-b',
40
- event: { type: 'content_block_delta', delta: { type: 'text_delta', text: 'child B' } } });
41
- assert.equal(events.at(-1).update._meta.qoder.parentToolUseId, 'agent-b');
42
- await session.dispatchSDKMessage({ type: 'stream_event', parent_tool_use_id: null,
43
- event: { type: 'content_block_delta', delta: { type: 'text_delta', text: 'root' } } });
44
- assert.equal(events.at(-1).update._meta, undefined);
45
- await session.dispatchSDKMessage(tool('root-read', null));
46
- assert.equal(events.at(-1).update._meta.qoder.parentToolUseId, undefined);
47
- await session.dispatchSDKMessage(tool('read-a', 'wrong-agent'));
48
- assert.equal(events.at(-1).update._meta.qoder.parentToolUseId, undefined);
49
- console.log('Official Qoder 1.1.61 ACP dispatch: parallel tool/result, child text, root and conflict checks passed');
@@ -1,52 +0,0 @@
1
- {
2
- "id": "qoder-steering",
3
- "package": "@qoder-ai/qodercli",
4
- "versions": [
5
- "1.1.61"
6
- ],
7
- "bin": "qodercli",
8
- "edits": [
9
- {
10
- "file": "bundle/qodercli.js",
11
- "before_sha256": "88829cdc00f1d435d6b9fb4cd8088d678731a99e8c414cb02159a770ddedc32d",
12
- "after_sha256": "b2401c8cae2370a486eae2d14f0d8a39826887886f558982b73ba2c839a9d9a3",
13
- "before": "protocolVersion:xbs,authMethods:e,agentInfo:{name:HQ,title:Hn,version:t},agentCapabilities:",
14
- "after": "protocolVersion:xbs,authMethods:e,agentInfo:{name:HQ,title:Hn,version:t},_meta:{steering:{supported:true,timings:[\"now\"]}},agentCapabilities:"
15
- },
16
- {
17
- "file": "bundle/qodercli.js",
18
- "before_sha256": "b2401c8cae2370a486eae2d14f0d8a39826887886f558982b73ba2c839a9d9a3",
19
- "after_sha256": "d2725132d0ff3bb9a234f7d3a782e463bc6c2637a9e995569c5702ce50130dd4",
20
- "before": "async prompt(A){await this.ensureAuthenticated();let e=this.sessions.get(A.sessionId);",
21
- "after": "async extMethod(method,params){\n if(method !== \"_session/steering\") throw as.methodNotFound(method);\n await this.ensureAuthenticated();\n if(!params || typeof params.sessionId !== \"string\" || !params.sessionId) throw as.invalidParams(undefined,\"Missing sessionId\");\n const session=this.sessions.get(params.sessionId);\n if(!session) throw as.invalidParams(undefined,\"Unknown sessionId\");\n return session.axomQoderSteer(params);\n}\nasync prompt(A){await this.ensureAuthenticated();let e=this.sessions.get(A.sessionId);"
22
- },
23
- {
24
- "file": "bundle/qodercli.js",
25
- "before_sha256": "d2725132d0ff3bb9a234f7d3a782e463bc6c2637a9e995569c5702ce50130dd4",
26
- "after_sha256": "c3fc2dae248e7e9105417fabe289b52609daea7512ca770e4dc9cbd3d2cfdb61",
27
- "before": "promptRunning=!1;pendingMessages=[];",
28
- "after": "promptRunning=!1;pendingMessages=[];axomQoderSteeringMessages=[];"
29
- },
30
- {
31
- "file": "bundle/qodercli.js",
32
- "before_sha256": "c3fc2dae248e7e9105417fabe289b52609daea7512ca770e4dc9cbd3d2cfdb61",
33
- "after_sha256": "88dd0b3900897e3d9737ac63e5261711aa7aa277e4ca4d38ee59bdb987584eb5",
34
- "before": "async promptViaQueryEngine(A,e,t,i,n){",
35
- "after": "axomQoderSteer(A){\n const steering=A._meta?.steering;\n if(steering?.priority !== undefined && steering.priority !== \"now\") throw as.invalidParams(undefined,\"Qoder supports only now steering\");\n if(steering?.idleBehavior !== undefined && steering.idleBehavior !== \"promptRequired\") throw as.invalidParams(undefined,\"Unsupported steering idleBehavior\");\n if(!Array.isArray(A.prompt) || !A.prompt.length || A.prompt.some(block=>!block || block.type !== \"text\" || typeof block.text !== \"string\")) throw as.invalidParams(undefined,\"Qoder steering requires text blocks\");\n const text=A.prompt.map(block=>block.text).join(\"\\n\");\n if(!text.trim() || text.length > 131072) throw as.invalidParams(undefined,\"Invalid steering text length\");\n if(this.disposed || !this.active || !this.promptRunning || !this.queryEngine?.activeAbortController || !this.pendingPrompt || this.pendingPrompt.signal.aborted) return {outcome:\"promptRequired\",reason:\"noRunningTurn\"};\n if(this.axomQoderSteeringMessages.length >= 32) throw as.invalidParams(undefined,\"Too many pending steering messages\");\n const message={prompt:A.prompt.map(block=>({type:\"text\",text:block.text})),id:mte()};\n this.axomQoderSteeringMessages.push(message);\n try{this.queryEngine.abort({source:\"sdk_interrupt\",origin:\"user\"});}\n catch(error){this.axomQoderSteeringMessages.pop();throw error;}\n return {outcome:\"injected\"};\n}\nasync promptViaQueryEngine(A,e,t,i,n){\n let result;\n try{\n result=await this.axomQoderPromptOnce(A,e,t,i,n);\n const originalId=result.userMessageId;\n while(!e.aborted && !this.disposed && this.active && this.axomQoderSteeringMessages.length){\n const message=this.axomQoderSteeringMessages.shift();\n const next=await this.axomQoderPromptOnce(message.prompt,e,mte(),message.id);\n if(result.usage && next.usage){\n const inputTokens=result.usage.inputTokens+next.usage.inputTokens;\n const outputTokens=result.usage.outputTokens+next.usage.outputTokens;\n next.usage={inputTokens,outputTokens,totalTokens:inputTokens+outputTokens};\n const models=new Map;\n for(const item of [...result._meta?.quota?.model_usage??[],...next._meta?.quota?.model_usage??[]]){\n const prior=models.get(item.model)??{input_tokens:0,output_tokens:0};\n models.set(item.model,{input_tokens:prior.input_tokens+item.token_count.input_tokens,output_tokens:prior.output_tokens+item.token_count.output_tokens});\n }\n next._meta={...next._meta,quota:{token_count:{input_tokens:inputTokens,output_tokens:outputTokens},model_usage:Array.from(models,([model,token_count])=>({model,token_count}))}};\n }\n result=next;\n }\n return {...result,...(originalId?{userMessageId:originalId}:{})};\n }finally{this.axomQoderSteeringMessages.length=0;}\n}\nasync axomQoderPromptOnce(A,e,t,i,n){"
36
- },
37
- {
38
- "file": "bundle/qodercli.js",
39
- "before_sha256": "88dd0b3900897e3d9737ac63e5261711aa7aa277e4ca4d38ee59bdb987584eb5",
40
- "after_sha256": "e45ea5a46d85285a41739fe391fe83dae491e1de3ba1882452b34e5b1453fab4",
41
- "before": "if(!A.includes(\"Operation aborted\"))throw new as(500,A);",
42
- "after": "if(!A.includes(\"Operation aborted\")&&!(this.axomQoderSteeringMessages.length&&[\"aborted_tools\",\"aborted_streaming\"].includes(c.terminal_reason)))throw new as(500,A);"
43
- },
44
- {
45
- "file": "bundle/qodercli.js",
46
- "before_sha256": "e45ea5a46d85285a41739fe391fe83dae491e1de3ba1882452b34e5b1453fab4",
47
- "after_sha256": "a776c9f78e10cb1231229efebf3364ba0259f40b43bb09de77e2a0fb890f7199",
48
- "before": "else if(\"error_during_execution\"===A.subtype&&\"refusal\"!==A.stop_reason){let e=A.errors??[];",
49
- "after": "else if(\"error_during_execution\"===A.subtype&&\"refusal\"!==A.stop_reason&&!(this.axomQoderSteeringMessages.length&&[\"aborted_tools\",\"aborted_streaming\"].includes(A.terminal_reason))){let e=A.errors??[];"
50
- }
51
- ]
52
- }
@@ -1,73 +0,0 @@
1
- {
2
- "id": "qoder-subagent-origin",
3
- "package": "@qoder-ai/qodercli",
4
- "versions": [
5
- "1.1.61"
6
- ],
7
- "edits": [
8
- {
9
- "file": "bundle/qodercli.js",
10
- "before_sha256": "34875088fd8af9c97e88446cbbfa11bca24c1b6558cec048ac1152bd5486f4e9",
11
- "after_sha256": "b29a975245a7194ef2ac4f2a742090d9e0d8f64ba3471bae475a564ee96600c1",
12
- "before": "toolCallNames=new Map;",
13
- "after": "toolCallNames=new Map;axomQoderToolOrigins=new Map;"
14
- },
15
- {
16
- "file": "bundle/qodercli.js",
17
- "before_sha256": "b29a975245a7194ef2ac4f2a742090d9e0d8f64ba3471bae475a564ee96600c1",
18
- "after_sha256": "8d6dac333c191312ffdd5180554279dc168405cffc3720833f21139f9242d5fe",
19
- "before": "async sendUpdate(A){let e={sessionId:this.id,update:A};await this.connection.sessionUpdate(e)}",
20
- "after": "axomQoderId(value){return typeof value === \"string\" && value.length > 0 && value.length <= 256 && !/[\\x00-\\x1f\\x7f]/.test(value)}\naxomQoderObserveSdk(message){\n if(message.type !== \"assistant\" || !Array.isArray(message.message?.content)) return;\n const parent=message.parent_tool_use_id;\n if(parent !== null && !this.axomQoderId(parent)) return;\n for(const block of message.message.content){\n if(block?.type !== \"tool_use\" || !this.axomQoderId(block.id) || !this.axomQoderId(block.name)) continue;\n const prior=this.axomQoderToolOrigins.get(block.id);\n if(this.axomQoderToolOrigins.has(block.id)){\n if(prior && (prior.parent !== parent || prior.name !== block.name)) this.axomQoderToolOrigins.set(block.id,null);\n continue;\n }\n if(this.axomQoderToolOrigins.size >= 4096) continue;\n this.axomQoderToolOrigins.set(block.id,{parent,name:block.name});\n }\n}\naxomQoderSdkUpdate(message,update){\n if(this.axomQoderId(message.parent_tool_use_id)) update={...update,_meta:{...update._meta,qoder:{...update._meta?.qoder,version:1,source:\"native-acp-patch\",parentToolUseId:message.parent_tool_use_id,route:\"child\"}}};\n return this.sendUpdate(update);\n}\nasync sendUpdate(A){\n if(A.sessionUpdate === \"tool_call\" || A.sessionUpdate === \"tool_call_update\"){\n const origin=this.axomQoderToolOrigins.get(A.toolCallId);\n if(origin) A={...A,_meta:{...A._meta,qoder:{...A._meta?.qoder,version:1,source:\"native-acp-patch\",toolName:origin.name,...(origin.parent ? {parentToolUseId:origin.parent,route:\"child\"} : {})}}};\n }\n let e={sessionId:this.id,update:A};await this.connection.sessionUpdate(e)\n}"
21
- },
22
- {
23
- "file": "bundle/qodercli.js",
24
- "before_sha256": "8d6dac333c191312ffdd5180554279dc168405cffc3720833f21139f9242d5fe",
25
- "after_sha256": "c606c209aa5c89afacb411c68acc071817de29dc31fe0978e7c22e713eaba5cd",
26
- "before": "async dispatchSDKMessage(A){switch(A.type){",
27
- "after": "async dispatchSDKMessage(A){this.axomQoderObserveSdk(A);switch(A.type){"
28
- },
29
- {
30
- "file": "bundle/qodercli.js",
31
- "before_sha256": "c606c209aa5c89afacb411c68acc071817de29dc31fe0978e7c22e713eaba5cd",
32
- "after_sha256": "fa8a112848de34c682943d97a6f59c3eb6c882d388c9478c7edf2c7ae6597973",
33
- "before": "await this.sendUpdate({sessionUpdate:\"agent_message_chunk\",content:{type:\"text\",text:e.delta.text}})",
34
- "after": "await this.axomQoderSdkUpdate(A,{sessionUpdate:\"agent_message_chunk\",content:{type:\"text\",text:e.delta.text}})"
35
- },
36
- {
37
- "file": "bundle/qodercli.js",
38
- "before_sha256": "fa8a112848de34c682943d97a6f59c3eb6c882d388c9478c7edf2c7ae6597973",
39
- "after_sha256": "9b0bce311b17ac72f1bcdda18bc587d7cc5383994ca56893085e1568b57f5940",
40
- "before": "await this.sendUpdate({sessionUpdate:\"agent_thought_chunk\",content:{type:\"text\",text:e.delta.thinking}})",
41
- "after": "await this.axomQoderSdkUpdate(A,{sessionUpdate:\"agent_thought_chunk\",content:{type:\"text\",text:e.delta.thinking}})"
42
- },
43
- {
44
- "file": "bundle/qodercli.js",
45
- "before_sha256": "9b0bce311b17ac72f1bcdda18bc587d7cc5383994ca56893085e1568b57f5940",
46
- "after_sha256": "c5af49f3d42a8f525af8813b97b93078fa0bc3433e7331b47b55cd9a13b7b0d9",
47
- "before": "async streamHistory(A){let e=gnd(A);for(let t of A){",
48
- "after": "async streamHistory(A){let e=gnd(A);for(let t of A){this.axomQoderObserveSdk(t);"
49
- },
50
- {
51
- "file": "bundle/qodercli.js",
52
- "before_sha256": "c5af49f3d42a8f525af8813b97b93078fa0bc3433e7331b47b55cd9a13b7b0d9",
53
- "after_sha256": "5a4a47e3812f5cef51847852b400bab9d74acfd4932c890d9072c0ec58a552a9",
54
- "before": "await this.sendUpdate({sessionUpdate:\"user_message_chunk\",content:{type:\"text\",text:A},messageId:t.uuid})",
55
- "after": "await this.axomQoderSdkUpdate(t,{sessionUpdate:\"user_message_chunk\",content:{type:\"text\",text:A},messageId:t.uuid})"
56
- },
57
- {
58
- "file": "bundle/qodercli.js",
59
- "before_sha256": "5a4a47e3812f5cef51847852b400bab9d74acfd4932c890d9072c0ec58a552a9",
60
- "after_sha256": "0041e7a85e0ed7a8a811c7fd5b2cc7f7df710b529e087af319411a8cbd5a481d",
61
- "before": "await this.sendUpdate({sessionUpdate:\"agent_message_chunk\",content:{type:\"text\",text:A},messageId:t.uuid})",
62
- "after": "await this.axomQoderSdkUpdate(t,{sessionUpdate:\"agent_message_chunk\",content:{type:\"text\",text:A},messageId:t.uuid})"
63
- },
64
- {
65
- "file": "bundle/qodercli.js",
66
- "before_sha256": "0041e7a85e0ed7a8a811c7fd5b2cc7f7df710b529e087af319411a8cbd5a481d",
67
- "after_sha256": "88829cdc00f1d435d6b9fb4cd8088d678731a99e8c414cb02159a770ddedc32d",
68
- "before": "await this.sendUpdate({sessionUpdate:\"agent_thought_chunk\",content:{type:\"text\",text:A.thinking},messageId:t.uuid})",
69
- "after": "await this.axomQoderSdkUpdate(t,{sessionUpdate:\"agent_thought_chunk\",content:{type:\"text\",text:A.thinking},messageId:t.uuid})"
70
- }
71
- ],
72
- "bin": "qodercli"
73
- }
@@ -1,38 +0,0 @@
1
- import { loadConfig, resolveServer } from '../config.js';
2
- import { callAxomTool } from '../mcp.js';
3
- import { printOutcome, runCommand } from '../output.js';
4
- export function registerGuideCommands(program) {
5
- const guide = program.command('guide').description('Read and search the Axomwork Guide');
6
- const serverOption = () => program.opts().server;
7
- guide
8
- .command('load')
9
- .description('Load a guide page, or the table of contents when no path is given')
10
- .argument('[path]', 'guide page path, e.g. script-language/sdk/records')
11
- .option('--locale <locale>', 'guide locale (en|zh)')
12
- .action((path, options) => runCommand(() => guideLoadAction({ path, locale: options.locale, server: serverOption() })));
13
- guide
14
- .command('search')
15
- .description('Search the guide with keywords or a question')
16
- .argument('<query>')
17
- .option('--locale <locale>', 'guide locale (en|zh)')
18
- .option('--limit <n>', 'maximum hits')
19
- .action((query, options) => runCommand(() => guideSearchAction({ query, locale: options.locale, limit: options.limit, server: serverOption() })));
20
- }
21
- export async function guideLoadAction(options) {
22
- const server = resolveServer(await loadConfig(), options.server);
23
- const args = {};
24
- if (options.path !== undefined)
25
- args.path = options.path;
26
- if (options.locale !== undefined)
27
- args.locale = options.locale;
28
- printOutcome(await callAxomTool(server, 'axom__guide__load', args));
29
- }
30
- export async function guideSearchAction(options) {
31
- const server = resolveServer(await loadConfig(), options.server);
32
- const args = { query: options.query };
33
- if (options.locale !== undefined)
34
- args.locale = options.locale;
35
- if (options.limit !== undefined)
36
- args.limit = Number(options.limit);
37
- printOutcome(await callAxomTool(server, 'axom__guide__search', args));
38
- }