@fastagent-sh/fastagent 0.21.1 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (388) hide show
  1. package/README.md +9 -12
  2. package/dist/agent.d.ts +24 -37
  3. package/dist/agent.js +7 -15
  4. package/dist/atomic-write.d.ts +13 -17
  5. package/dist/atomic-write.js +18 -29
  6. package/dist/bind.d.ts +12 -22
  7. package/dist/bind.js +18 -27
  8. package/dist/channel.d.ts +11 -33
  9. package/dist/channels/agentcore-limits.d.ts +2 -13
  10. package/dist/channels/agentcore-limits.js +2 -13
  11. package/dist/channels/agentcore-protocol.d.ts +67 -58
  12. package/dist/channels/agentcore-protocol.js +23 -15
  13. package/dist/channels/agentcore-service.d.ts +19 -33
  14. package/dist/channels/agentcore-service.js +176 -59
  15. package/dist/channels/agentcore.d.ts +39 -33
  16. package/dist/channels/agentcore.js +90 -224
  17. package/dist/channels/body.d.ts +15 -2
  18. package/dist/channels/body.js +24 -2
  19. package/dist/channels/busy.d.ts +1 -21
  20. package/dist/channels/busy.js +2 -39
  21. package/dist/channels/control.d.ts +17 -62
  22. package/dist/channels/control.js +74 -182
  23. package/dist/channels/define-channel.d.ts +39 -0
  24. package/dist/channels/define-channel.js +9 -0
  25. package/dist/channels/discover.d.ts +10 -31
  26. package/dist/channels/discover.js +37 -31
  27. package/dist/channels/feishu/bootstrap-token.d.ts +1 -8
  28. package/dist/channels/feishu/bootstrap-token.js +7 -23
  29. package/dist/channels/feishu/card.d.ts +14 -28
  30. package/dist/channels/feishu/card.js +16 -30
  31. package/dist/channels/feishu/cloud.d.ts +1 -5
  32. package/dist/channels/feishu/context-buffer.d.ts +4 -23
  33. package/dist/channels/feishu/context-buffer.js +8 -31
  34. package/dist/channels/feishu/crypto.d.ts +10 -5
  35. package/dist/channels/feishu/crypto.js +12 -19
  36. package/dist/channels/feishu/feishu-api.d.ts +2 -1
  37. package/dist/channels/feishu/feishu-api.js +5 -4
  38. package/dist/channels/feishu/feishu.d.ts +4 -10
  39. package/dist/channels/feishu/feishu.js +113 -227
  40. package/dist/channels/feishu/invoke-turn.d.ts +5 -4
  41. package/dist/channels/feishu/invoke-turn.js +36 -54
  42. package/dist/channels/feishu/model.d.ts +4 -21
  43. package/dist/channels/feishu/model.js +1 -8
  44. package/dist/channels/feishu/normalize.d.ts +2 -10
  45. package/dist/channels/feishu/normalize.js +7 -42
  46. package/dist/channels/feishu/parse.d.ts +9 -29
  47. package/dist/channels/feishu/parse.js +8 -26
  48. package/dist/channels/feishu/preview.d.ts +12 -14
  49. package/dist/channels/feishu/preview.js +108 -207
  50. package/dist/channels/feishu/register-app.d.ts +8 -23
  51. package/dist/channels/feishu/register-app.js +7 -20
  52. package/dist/channels/feishu/register-webhook.d.ts +2 -9
  53. package/dist/channels/feishu/register-webhook.js +9 -33
  54. package/dist/channels/feishu/scaffold/channel.ts +27 -19
  55. package/dist/channels/feishu/scaffold/channel.websocket.ts +31 -0
  56. package/dist/channels/feishu/setup-mode.d.ts +11 -36
  57. package/dist/channels/feishu/setup-mode.js +7 -26
  58. package/dist/channels/feishu/ws-ingress.d.ts +1 -2
  59. package/dist/channels/feishu/ws-ingress.js +6 -8
  60. package/dist/channels/http.d.ts +15 -15
  61. package/dist/channels/http.js +19 -9
  62. package/dist/channels/kit/attachment-path.d.ts +4 -5
  63. package/dist/channels/kit/attachment-path.js +10 -34
  64. package/dist/channels/kit/context-buffer.d.ts +14 -21
  65. package/dist/channels/kit/context-buffer.js +25 -38
  66. package/dist/channels/kit/delivery.d.ts +35 -0
  67. package/dist/channels/kit/delivery.js +129 -0
  68. package/dist/channels/kit/event-stream.d.ts +5 -0
  69. package/dist/channels/kit/event-stream.js +29 -0
  70. package/dist/channels/kit/invoke-turn-kit.d.ts +53 -26
  71. package/dist/channels/kit/invoke-turn-kit.js +89 -32
  72. package/dist/channels/kit/preview-kit.d.ts +18 -72
  73. package/dist/channels/kit/preview-kit.js +22 -88
  74. package/dist/channels/kit/signature.d.ts +3 -9
  75. package/dist/channels/kit/signature.js +3 -9
  76. package/dist/channels/kit/state.d.ts +1 -2
  77. package/dist/channels/kit/state.js +5 -14
  78. package/dist/channels/kit/stop-command.d.ts +1 -2
  79. package/dist/channels/kit/stop-command.js +6 -9
  80. package/dist/channels/kit/tasks.d.ts +1 -1
  81. package/dist/channels/kit/tasks.js +8 -21
  82. package/dist/channels/kit/text.d.ts +2 -16
  83. package/dist/channels/kit/text.js +23 -31
  84. package/dist/channels/kit/thread-participants.d.ts +4 -17
  85. package/dist/channels/kit/thread-participants.js +8 -55
  86. package/dist/channels/kit/transport.d.ts +26 -0
  87. package/dist/channels/kit/transport.js +20 -0
  88. package/dist/channels/kit/turn-queue.d.ts +7 -11
  89. package/dist/channels/kit/turn-queue.js +21 -39
  90. package/dist/channels/kit/turn-runner.d.ts +32 -18
  91. package/dist/channels/kit/turn-runner.js +98 -53
  92. package/dist/channels/kit/turn-store.d.ts +32 -32
  93. package/dist/channels/kit/turn-store.js +45 -88
  94. package/dist/channels/lark/lark.d.ts +1 -5
  95. package/dist/channels/lark/onboard.d.ts +3 -12
  96. package/dist/channels/lark/onboard.js +3 -13
  97. package/dist/channels/lark/scaffold/channel.ts +27 -19
  98. package/dist/channels/lark/scaffold/channel.websocket.ts +31 -0
  99. package/dist/channels/registration.d.ts +9 -35
  100. package/dist/channels/registration.js +6 -37
  101. package/dist/channels/secret.js +2 -5
  102. package/dist/channels/serve.d.ts +47 -44
  103. package/dist/channels/serve.js +165 -101
  104. package/dist/channels/slack/config-api.d.ts +4 -27
  105. package/dist/channels/slack/config-api.js +5 -34
  106. package/dist/channels/slack/context-buffer.d.ts +2 -3
  107. package/dist/channels/slack/context-buffer.js +5 -5
  108. package/dist/channels/slack/invoke-turn.d.ts +3 -1
  109. package/dist/channels/slack/invoke-turn.js +25 -34
  110. package/dist/channels/slack/manifest.js +1 -3
  111. package/dist/channels/slack/model.d.ts +1 -2
  112. package/dist/channels/slack/model.js +1 -1
  113. package/dist/channels/slack/onboard.d.ts +4 -3
  114. package/dist/channels/slack/onboard.js +8 -11
  115. package/dist/channels/slack/onboarding-state.d.ts +3 -5
  116. package/dist/channels/slack/onboarding-state.js +9 -6
  117. package/dist/channels/slack/parse.d.ts +4 -13
  118. package/dist/channels/slack/parse.js +7 -28
  119. package/dist/channels/slack/preview.d.ts +12 -2
  120. package/dist/channels/slack/preview.js +292 -269
  121. package/dist/channels/slack/reaction.d.ts +11 -3
  122. package/dist/channels/slack/reaction.js +19 -8
  123. package/dist/channels/slack/register-webhook.js +4 -7
  124. package/dist/channels/slack/scaffold/channel.ts +20 -13
  125. package/dist/channels/slack/scaffold/slack-send.ts +2 -2
  126. package/dist/channels/slack/setup-server.d.ts +1 -5
  127. package/dist/channels/slack/setup-server.js +1 -5
  128. package/dist/channels/slack/shared-api.d.ts +1 -4
  129. package/dist/channels/slack/shared-api.js +2 -13
  130. package/dist/channels/slack/slack-api.d.ts +2 -1
  131. package/dist/channels/slack/slack-api.js +6 -4
  132. package/dist/channels/slack/slack.d.ts +11 -14
  133. package/dist/channels/slack/slack.js +121 -122
  134. package/dist/channels/sse.d.ts +1 -1
  135. package/dist/channels/sse.js +1 -1
  136. package/dist/channels/telegram/context-buffer.d.ts +7 -22
  137. package/dist/channels/telegram/context-buffer.js +6 -23
  138. package/dist/channels/telegram/invoke-turn.d.ts +7 -7
  139. package/dist/channels/telegram/invoke-turn.js +24 -43
  140. package/dist/channels/telegram/parse.d.ts +24 -51
  141. package/dist/channels/telegram/parse.js +32 -84
  142. package/dist/channels/telegram/preview.d.ts +10 -1
  143. package/dist/channels/telegram/preview.js +79 -100
  144. package/dist/channels/telegram/register-webhook.js +5 -23
  145. package/dist/channels/telegram/scaffold/channel.ts +25 -18
  146. package/dist/channels/telegram/scaffold/telegram-send.ts +6 -4
  147. package/dist/channels/telegram/telegram-api.d.ts +4 -3
  148. package/dist/channels/telegram/telegram-api.js +9 -7
  149. package/dist/channels/telegram/telegram.d.ts +4 -18
  150. package/dist/channels/telegram/telegram.js +38 -94
  151. package/dist/channels/telegram/turn-store.d.ts +11 -14
  152. package/dist/channels/telegram/turn-store.js +8 -6
  153. package/dist/channels/wait-health.d.ts +4 -6
  154. package/dist/channels/wait-health.js +10 -14
  155. package/dist/cli/add-feishu.d.ts +2 -12
  156. package/dist/cli/add-feishu.js +24 -71
  157. package/dist/cli/add-slack.d.ts +5 -3
  158. package/dist/cli/add-slack.js +53 -76
  159. package/dist/cli/auth-view.d.ts +2 -16
  160. package/dist/cli/auth-view.js +2 -16
  161. package/dist/cli/commands/add.js +25 -40
  162. package/dist/cli/commands/chat.d.ts +0 -1
  163. package/dist/cli/commands/chat.js +5 -6
  164. package/dist/cli/commands/deploy/agentcore.js +60 -65
  165. package/dist/cli/commands/deploy/docker.js +50 -23
  166. package/dist/cli/commands/deploy/fly.js +23 -61
  167. package/dist/cli/commands/deploy/railway.js +23 -18
  168. package/dist/cli/commands/deploy/shared.d.ts +38 -57
  169. package/dist/cli/commands/deploy/shared.js +40 -59
  170. package/dist/cli/commands/deploy.d.ts +10 -27
  171. package/dist/cli/commands/deploy.js +38 -60
  172. package/dist/cli/commands/destroy.d.ts +4 -0
  173. package/dist/cli/commands/destroy.js +56 -0
  174. package/dist/cli/commands/dev.d.ts +2 -1
  175. package/dist/cli/commands/dev.js +20 -23
  176. package/dist/cli/commands/info.d.ts +0 -2
  177. package/dist/cli/commands/info.js +83 -49
  178. package/dist/cli/commands/init.d.ts +1 -2
  179. package/dist/cli/commands/init.js +16 -55
  180. package/dist/cli/commands/invoke.d.ts +0 -1
  181. package/dist/cli/commands/invoke.js +5 -7
  182. package/dist/cli/commands/login.d.ts +2 -1
  183. package/dist/cli/commands/login.js +33 -38
  184. package/dist/cli/commands/logs.js +3 -4
  185. package/dist/cli/commands/models.js +1 -5
  186. package/dist/cli/commands/routine-run.d.ts +6 -0
  187. package/dist/cli/commands/routine-run.js +47 -0
  188. package/dist/cli/commands/routine.d.ts +25 -0
  189. package/dist/cli/commands/routine.js +122 -0
  190. package/dist/cli/commands/start.d.ts +31 -3
  191. package/dist/cli/commands/start.js +131 -81
  192. package/dist/cli/commands/tool.js +26 -12
  193. package/dist/cli/fail.d.ts +13 -23
  194. package/dist/cli/fail.js +20 -23
  195. package/dist/cli/invoke-stream.d.ts +1 -8
  196. package/dist/cli/kernel.d.ts +6 -38
  197. package/dist/cli/kernel.js +14 -77
  198. package/dist/cli/models-view.d.ts +1 -9
  199. package/dist/cli/models-view.js +11 -22
  200. package/dist/cli/program.d.ts +5 -6
  201. package/dist/cli/program.js +120 -157
  202. package/dist/cli/serve.d.ts +57 -41
  203. package/dist/cli/serve.js +94 -121
  204. package/dist/cli/shared.d.ts +15 -61
  205. package/dist/cli/shared.js +55 -181
  206. package/dist/cli.js +1 -8
  207. package/dist/collect.d.ts +6 -0
  208. package/dist/collect.js +6 -0
  209. package/dist/core.d.ts +4 -1
  210. package/dist/core.js +9 -7
  211. package/dist/declared-secrets.d.ts +55 -0
  212. package/dist/declared-secrets.js +88 -0
  213. package/dist/deploy/agentcore/aws-cli.d.ts +91 -0
  214. package/dist/deploy/agentcore/aws-cli.js +64 -0
  215. package/dist/deploy/agentcore/destroy.d.ts +51 -0
  216. package/dist/deploy/agentcore/destroy.js +273 -0
  217. package/dist/deploy/agentcore/forwarder.js +28 -79
  218. package/dist/deploy/agentcore/logs.d.ts +2 -18
  219. package/dist/deploy/agentcore/logs.js +27 -51
  220. package/dist/deploy/agentcore/plan.d.ts +85 -105
  221. package/dist/deploy/agentcore/plan.js +152 -314
  222. package/dist/deploy/agentcore/run.d.ts +28 -28
  223. package/dist/deploy/agentcore/run.js +227 -306
  224. package/dist/deploy/agentcore/zip.d.ts +2 -15
  225. package/dist/deploy/agentcore/zip.js +3 -17
  226. package/dist/deploy/build-context.d.ts +21 -0
  227. package/dist/deploy/build-context.js +137 -0
  228. package/dist/deploy/channel-ingress.d.ts +26 -39
  229. package/dist/deploy/channel-ingress.js +57 -28
  230. package/dist/deploy/container.d.ts +20 -34
  231. package/dist/deploy/container.js +49 -100
  232. package/dist/deploy/docker/plan.d.ts +12 -11
  233. package/dist/deploy/docker/plan.js +43 -24
  234. package/dist/deploy/docker/run.d.ts +22 -25
  235. package/dist/deploy/docker/run.js +39 -37
  236. package/dist/deploy/fly/plan.d.ts +15 -44
  237. package/dist/deploy/fly/plan.js +41 -73
  238. package/dist/deploy/fly/run.d.ts +16 -51
  239. package/dist/deploy/fly/run.js +42 -95
  240. package/dist/deploy/hosts.d.ts +24 -3
  241. package/dist/deploy/hosts.js +24 -3
  242. package/dist/deploy/preflight.d.ts +47 -41
  243. package/dist/deploy/preflight.js +282 -383
  244. package/dist/deploy/railway/plan.d.ts +16 -42
  245. package/dist/deploy/railway/plan.js +42 -60
  246. package/dist/deploy/railway/run.d.ts +30 -68
  247. package/dist/deploy/railway/run.js +86 -100
  248. package/dist/deploy/registration-gate.d.ts +6 -13
  249. package/dist/deploy/residency.d.ts +37 -0
  250. package/dist/deploy/residency.js +24 -0
  251. package/dist/deploy/runner.d.ts +10 -9
  252. package/dist/deploy/runner.js +7 -18
  253. package/dist/deploy/secrets.d.ts +40 -41
  254. package/dist/deploy/secrets.js +117 -103
  255. package/dist/deploy/workspace.d.ts +50 -0
  256. package/dist/deploy/workspace.js +197 -0
  257. package/dist/dev-supervisor.d.ts +1 -9
  258. package/dist/dev-supervisor.js +21 -64
  259. package/dist/effect-port.d.ts +50 -0
  260. package/dist/effect-port.js +77 -0
  261. package/dist/engines/pi/agent-session-factory.d.ts +50 -69
  262. package/dist/engines/pi/agent-session-factory.js +249 -146
  263. package/dist/engines/pi/auth.d.ts +15 -11
  264. package/dist/engines/pi/auth.js +96 -99
  265. package/dist/engines/pi/chat.d.ts +1 -5
  266. package/dist/engines/pi/chat.js +2 -14
  267. package/dist/engines/pi/config.d.ts +53 -51
  268. package/dist/engines/pi/config.js +83 -92
  269. package/dist/engines/pi/create.d.ts +60 -75
  270. package/dist/engines/pi/create.js +108 -141
  271. package/dist/engines/pi/definition.d.ts +14 -58
  272. package/dist/engines/pi/definition.js +21 -85
  273. package/dist/engines/pi/invoke-session.d.ts +5 -25
  274. package/dist/engines/pi/invoke-session.js +209 -244
  275. package/dist/engines/pi/login.d.ts +95 -35
  276. package/dist/engines/pi/login.js +259 -107
  277. package/dist/engines/pi/machine.d.ts +31 -0
  278. package/dist/engines/pi/machine.js +106 -0
  279. package/dist/engines/pi/models.d.ts +70 -89
  280. package/dist/engines/pi/models.js +188 -81
  281. package/dist/engines/pi/open.d.ts +65 -53
  282. package/dist/engines/pi/open.js +129 -69
  283. package/dist/engines/pi/report.d.ts +3 -12
  284. package/dist/engines/pi/report.js +2 -16
  285. package/dist/engines/pi/search-tools.d.ts +1 -9
  286. package/dist/engines/pi/search-tools.js +26 -57
  287. package/dist/engines/pi/service.d.ts +2 -16
  288. package/dist/engines/pi/service.js +2 -16
  289. package/dist/engines/pi/session-builder.d.ts +5 -9
  290. package/dist/engines/pi/session-builder.js +44 -82
  291. package/dist/engines/pi/session-control.js +286 -269
  292. package/dist/engines/pi/session-effects.d.ts +14 -0
  293. package/dist/engines/pi/session-effects.js +30 -0
  294. package/dist/engines/pi/session-inheritance.d.ts +9 -18
  295. package/dist/engines/pi/session-inheritance.js +103 -160
  296. package/dist/engines/pi/session-markers.d.ts +31 -30
  297. package/dist/engines/pi/session-markers.js +26 -25
  298. package/dist/engines/pi/session-settings.d.ts +6 -22
  299. package/dist/engines/pi/session-settings.js +10 -21
  300. package/dist/engines/pi/session-store.d.ts +26 -92
  301. package/dist/engines/pi/session-store.js +96 -310
  302. package/dist/engines/pi/tool-context.d.ts +17 -45
  303. package/dist/engines/pi/tool-context.js +7 -26
  304. package/dist/engines/pi/tool.d.ts +45 -36
  305. package/dist/engines/pi/tool.js +43 -57
  306. package/dist/engines/pi/turn-kit.d.ts +14 -52
  307. package/dist/engines/pi/turn-kit.js +18 -67
  308. package/dist/engines/pi/wake-tool.d.ts +2 -10
  309. package/dist/engines/pi/wake-tool.js +7 -27
  310. package/dist/env.d.ts +27 -28
  311. package/dist/env.js +45 -50
  312. package/dist/index.js +0 -2
  313. package/dist/lark.d.ts +1 -2
  314. package/dist/lark.js +1 -2
  315. package/dist/loader.d.ts +14 -55
  316. package/dist/loader.js +24 -43
  317. package/dist/log.d.ts +2 -12
  318. package/dist/log.js +3 -24
  319. package/dist/node.d.ts +2 -15
  320. package/dist/node.js +2 -18
  321. package/dist/observe.d.ts +2 -8
  322. package/dist/open-url.d.ts +1 -1
  323. package/dist/open-url.js +1 -1
  324. package/dist/paths.d.ts +70 -134
  325. package/dist/paths.js +165 -232
  326. package/dist/pi.d.ts +4 -6
  327. package/dist/pi.js +3 -3
  328. package/dist/proxy.d.ts +16 -6
  329. package/dist/proxy.js +52 -16
  330. package/dist/runtime.d.ts +18 -12
  331. package/dist/runtime.js +18 -11
  332. package/dist/scaffold/add-channel.d.ts +14 -31
  333. package/dist/scaffold/add-channel.js +48 -112
  334. package/dist/scaffold/init.d.ts +9 -31
  335. package/dist/scaffold/init.js +45 -138
  336. package/dist/scaffold/templates/env.example +6 -4
  337. package/dist/scaffold/templates/fastagent.config.ts +36 -0
  338. package/dist/scaffold/templates.d.ts +3 -3
  339. package/dist/scaffold/templates.js +5 -8
  340. package/dist/scaffold/vendor-skill.d.ts +2 -5
  341. package/dist/scaffold/vendor-skill.js +19 -29
  342. package/dist/schedule/cron.d.ts +9 -5
  343. package/dist/schedule/cron.js +9 -11
  344. package/dist/schedule/discover.d.ts +12 -12
  345. package/dist/schedule/discover.js +43 -34
  346. package/dist/schedule/routine.d.ts +43 -0
  347. package/dist/schedule/routine.js +32 -0
  348. package/dist/schedule/run.d.ts +55 -0
  349. package/dist/schedule/run.js +146 -0
  350. package/dist/schedule/scheduler.d.ts +44 -55
  351. package/dist/schedule/scheduler.js +291 -265
  352. package/dist/schedule/state.d.ts +105 -10
  353. package/dist/schedule/state.js +293 -19
  354. package/dist/schedule/wake-alarm.d.ts +10 -23
  355. package/dist/schedule/wake-alarm.js +91 -121
  356. package/dist/schedule/wakeups.d.ts +23 -39
  357. package/dist/schedule/wakeups.js +33 -75
  358. package/dist/secrets-gate.d.ts +32 -0
  359. package/dist/secrets-gate.js +33 -0
  360. package/dist/service.d.ts +137 -98
  361. package/dist/service.js +250 -252
  362. package/dist/session-remote.d.ts +33 -44
  363. package/dist/session-remote.js +203 -192
  364. package/dist/session.d.ts +153 -228
  365. package/dist/session.js +33 -55
  366. package/dist/tunnel.d.ts +8 -36
  367. package/dist/tunnel.js +24 -65
  368. package/dist/version.d.ts +2 -2
  369. package/dist/version.js +2 -2
  370. package/package.json +10 -16
  371. package/dist/channels/agentcore-state.d.ts +0 -77
  372. package/dist/channels/agentcore-state.js +0 -276
  373. package/dist/channels/github/github.d.ts +0 -31
  374. package/dist/channels/github/github.js +0 -89
  375. package/dist/channels/github/scaffold/channel.ts +0 -25
  376. package/dist/cli/commands/attach.d.ts +0 -108
  377. package/dist/cli/commands/attach.js +0 -637
  378. package/dist/cli/commands/fire.d.ts +0 -7
  379. package/dist/cli/commands/fire.js +0 -38
  380. package/dist/cli/commands/schedule.d.ts +0 -12
  381. package/dist/cli/commands/schedule.js +0 -87
  382. package/dist/github.d.ts +0 -3
  383. package/dist/github.js +0 -2
  384. package/dist/scaffold/templates/fastagent.config.mjs +0 -23
  385. package/dist/schedule/audit.d.ts +0 -18
  386. package/dist/schedule/audit.js +0 -57
  387. package/dist/schedule/schedule.d.ts +0 -35
  388. package/dist/schedule/schedule.js +0 -23
@@ -1,13 +1,4 @@
1
- /**
2
- * What a session is SET TO, and what it may be set to. Model and thinking level are ONE setting —
3
- * which levels exist is a property of the model — so they resolve together, here, and `state()`, the
4
- * `update({ thinkingLevel })` gate and the per-invoke binding all read this rather than deriving their own.
5
- *
6
- * Read-only by design. The durable record may hold a level the current model cannot do; that record
7
- * is the user's PREFERENCE, so resolving per read restores it when the session returns to a capable
8
- * model. (It could not be made unrepresentable anyway: `model_change`/`thinking_level_change` are
9
- * pi's entries, and pi appends them itself.)
10
- */
1
+ /** What a session is SET TO, and what it may be set to. */
11
2
  import type { ThinkingLevel } from "@earendil-works/pi-agent-core";
12
3
  import { type Models } from "@earendil-works/pi-ai";
13
4
  import type { SessionManager } from "@earendil-works/pi-coding-agent";
@@ -20,8 +11,10 @@ export interface OverrideEntryLike {
20
11
  modelId?: string;
21
12
  thinkingLevel?: string;
22
13
  }
23
- /** The last entry of each kind wins, and a malformed one reads as ABSENT rather than falling through
24
- * to an earlier record — which record is "the" override must not depend on who is asking. */
14
+ /**
15
+ * The last entry of each kind wins, and a malformed one reads as ABSENT rather than falling through to an earlier
16
+ * record.
17
+ */
25
18
  export declare function lastOverrideEntries(entries: OverrideEntryLike[]): {
26
19
  model?: {
27
20
  provider: string;
@@ -50,14 +43,5 @@ export declare function resolveSessionSettings(entries: OverrideEntryLike[], mod
50
43
  model: AnyModel;
51
44
  thinkingLevel: ThinkingLevel;
52
45
  }): SessionSettings;
53
- /**
54
- * The entries on the session's ACTIVE path, root→leaf — what every last-wins settings read walks.
55
- * `getBranch()` is exactly that walk: the journal can hold abandoned branches after a leaf move,
56
- * and reading it flat would run the session on a setting it moved away from.
57
- *
58
- * A chain that is not intact THROWS. `getBranch()` stops where a parent is missing and answers the
59
- * SHORT path, which reads exactly like a short session — every override above the gap gone, the next
60
- * turn silently on assembly defaults. The caller decides what to do with the fault (state() reports
61
- * the settings as absent, dispatch answers with a code); what it must not do is guess.
62
- */
46
+ /** The entries on the session's ACTIVE path, root→leaf — what every last-wins settings read walks. */
63
47
  export declare function activePath(record: SessionManager, from?: string): OverrideEntryLike[];
@@ -1,8 +1,5 @@
1
1
  import { clampThinkingLevel, getSupportedThinkingLevels } from "@earendil-works/pi-ai";
2
- /** Which strings are levels at all — the vocabulary. What a MODEL supports is
3
- * `getSupportedThinkingLevels`. The `satisfies` anchor keeps this exhaustive against pi's union: a
4
- * level pi adds becomes a type error here rather than a value `update({ thinkingLevel })` silently
5
- * rejects. */
2
+ /** Which strings are levels at all — the vocabulary. */
6
3
  const ALL_THINKING_LEVELS = {
7
4
  off: true,
8
5
  minimal: true,
@@ -13,8 +10,10 @@ const ALL_THINKING_LEVELS = {
13
10
  max: true,
14
11
  };
15
12
  export const THINKING_LEVELS = new Set(Object.keys(ALL_THINKING_LEVELS));
16
- /** The last entry of each kind wins, and a malformed one reads as ABSENT rather than falling through
17
- * to an earlier record — which record is "the" override must not depend on who is asking. */
13
+ /**
14
+ * The last entry of each kind wins, and a malformed one reads as ABSENT rather than falling through to an earlier
15
+ * record.
16
+ */
18
17
  export function lastOverrideEntries(entries) {
19
18
  let model;
20
19
  let modelSeen = false;
@@ -56,9 +55,8 @@ export function resolveSessionSettings(entries, models, defaults) {
56
55
  dropped.thinkingLevel = { recorded: level, running: thinkingLevel, known: false };
57
56
  }
58
57
  else {
59
- // pi's clamp takes the lowest supported level AT OR ABOVE the recorded one, falling back
60
- // downward only when nothing is above: a gap resolves UPWARD and costs more, not less. Which is
61
- // why `dropped` names both levels rather than reporting a substitution.
58
+ // pi's clamp takes the lowest supported level AT OR ABOVE the recorded one, falling back downward only when
59
+ // nothing is above.
62
60
  thinkingLevel = clampThinkingLevel(model, level);
63
61
  if (thinkingLevel !== level) {
64
62
  dropped.thinkingLevel = { recorded: level, running: thinkingLevel, known: true };
@@ -72,19 +70,10 @@ export function resolveSessionSettings(entries, models, defaults) {
72
70
  ...(dropped.model || dropped.thinkingLevel ? { dropped } : {}),
73
71
  };
74
72
  }
75
- /**
76
- * The entries on the session's ACTIVE path, root→leaf — what every last-wins settings read walks.
77
- * `getBranch()` is exactly that walk: the journal can hold abandoned branches after a leaf move,
78
- * and reading it flat would run the session on a setting it moved away from.
79
- *
80
- * A chain that is not intact THROWS. `getBranch()` stops where a parent is missing and answers the
81
- * SHORT path, which reads exactly like a short session — every override above the gap gone, the next
82
- * turn silently on assembly defaults. The caller decides what to do with the fault (state() reports
83
- * the settings as absent, dispatch answers with a code); what it must not do is guess.
84
- */
73
+ /** The entries on the session's ACTIVE path, root→leaf — what every last-wins settings read walks. */
85
74
  export function activePath(record, from) {
86
- // `from` asks a different question: the path a leaf move is ABOUT to make active, which a caller
87
- // validating a patch needs before the move exists. Absent, it is the session's current path.
75
+ // `from` asks a different question: the path a leaf move is ABOUT to make active, which a caller validating a patch
76
+ // needs before the move exists.
88
77
  const path = record.getBranch(from);
89
78
  const root = path[0];
90
79
  if (root?.parentId != null) {
@@ -2,50 +2,27 @@ import { SessionManager } from "@earendil-works/pi-coding-agent";
2
2
  import type { SessionSummary, SessionUpdateField } from "../../session.ts";
3
3
  import { type OverrideEntryLike } from "./session-settings.ts";
4
4
  import { type SessionInheritance } from "./session-inheritance.ts";
5
- /**
6
- * The session RECORDS, as operations rather than as pi handles.
7
- *
8
- * The distinction is the point. `openOrCreate`/`openIfExists` hand out a live `SessionManager` for
9
- * the two things that genuinely need one — driving a turn, and reading a session's contents — and
10
- * everything else is a whole-record operation implemented HERE. That line was drawn after the
11
- * lifecycle work: when the control plane wrote properties by calling pi's append methods itself, it
12
- * had to know pi's rules to do it (every append advances the single leaf pointer, so order decides
13
- * where a fork's head lands; `appendSessionInfo` rewrites the name it is given; a record buffers in
14
- * memory until its first assistant message). Every caller learning those separately is how the same
15
- * fact ended up half-known in two modules — so they are known once, here.
16
- */
5
+ /** The session RECORDS, as operations rather than as pi handles. */
17
6
  export interface PiSessionRecordStore {
18
7
  openOrCreate(sessionId: string, inherit?: SessionInheritance): Promise<SessionManager>;
19
- /** OPEN-EXISTING sibling: an unknown session answers undefined, never creates one — sessions are
20
- * the data plane's monopoly. The READ path (state/entries) and the turn binding use this; the
21
- * write path does not, because a caller holding a handle is a caller learning pi's rules. */
22
- openIfExists(sessionId: string): Promise<SessionManager | undefined>;
23
8
  /**
24
- * Write session properties, in the order pi's leaf pointer requires, and report what LANDED.
25
- *
26
- * Each property is its own journal entry — pi has no "append these together" — so a failure
27
- * partway is a real state, and this answers it rather than pretending a rollback happened. The
28
- * caller supplies an already-VALIDATED patch (a model resolved to provider+id, a level this model
29
- * accepts): what belongs here is how a record is written, not what a value means.
30
- *
31
- * `undefined` = no such record (it vanished between the caller's check and this call).
9
+ * OPEN-EXISTING sibling: an unknown session answers undefined, never creates one — sessions are the data plane's
10
+ * monopoly.
32
11
  */
12
+ openIfExists(sessionId: string): Promise<SessionManager | undefined>;
13
+ /** Write session properties, in the order pi's leaf pointer requires, and report what LANDED. */
33
14
  applyProperties(sessionId: string, writes: PropertyWrites): Promise<AppliedProperties | undefined>;
34
- /** Every record this store holds, in CALLER ids. Rejects when the store cannot be enumerated —
35
- * `[]` means "no sessions", so it must not double as "could not look". Answers the CONTRACT's row
36
- * type: the hub forwards it, and a second identical shape here would only be a thing to keep in
37
- * sync. */
15
+ /** Every record this store holds, in CALLER ids. */
38
16
  list(): Promise<SessionSummary[]>;
39
- /** Copy `from`'s history up to entry `at` into a new record named `into`, stamped with `provenance`
40
- * so a repeat of the SAME fork can be recognised as one ({@link forkProvenance}) instead of
41
- * becoming a second record or an overwrite. Throws on any failure: a half-copied fork is never
42
- * left in place, and the caller turns the throw into a coded result. */
17
+ /**
18
+ * Copy `from`'s history up to entry `at` into a new record named `into`, stamped with `provenance` so a repeat of
19
+ * the SAME fork can be recognised as one ({@link forkProvenance}) instead of becoming a second record or an
20
+ * overwrite.
21
+ */
43
22
  fork(from: string, at: string, into: string, provenance: string): Promise<void>;
44
- /** Destroy a record. `false` = there was none (the caller answers `no_such_session`). */
45
23
  delete(sessionId: string): Promise<boolean>;
46
24
  }
47
- /** A validated property patch, in the shape a RECORD takes it: the model already resolved to the
48
- * provider + id pi's append wants, so this layer never asks what a model spec means. */
25
+ /** A validated property patch, in the shape a RECORD takes it. */
49
26
  export interface PropertyWrites {
50
27
  name?: string;
51
28
  model?: {
@@ -57,73 +34,30 @@ export interface PropertyWrites {
57
34
  }
58
35
  /** What a property write actually did, and what the record holds after it. */
59
36
  interface AppliedProperties {
60
- /** In write order. A field asked for but absent here did not land. */
37
+ /** In write order. */
61
38
  landed: SessionUpdateField[];
62
- /** Why the rest stopped, if anything did. The caller turns this into a coded result; the record
63
- * already reflects `landed`. */
39
+ /** Why the rest stopped, if anything did. */
64
40
  failure?: unknown;
65
- /** The record AFTER the writes — what the caller reports, rather than echoing the request. pi
66
- * rewrites a name (newlines collapse, ends trim), so the request is not what was stored. */
41
+ /**
42
+ * The record AFTER the writes — what the caller reports, rather than echoing the request. pi rewrites a name
43
+ * (newlines collapse, ends trim), so the request is not what was stored.
44
+ */
67
45
  name?: string;
68
46
  leafEntryId?: string;
69
- /** The active path after the writes, for a caller that resolves settings against a model registry
70
- * this layer has no business knowing. Absent when the chain cannot be walked — the caller decides
71
- * what an unreadable chain means (design §7); it is never silently a short path. */
47
+ /**
48
+ * The active path after the writes, for a caller that resolves settings against a model registry this layer has no
49
+ * business knowing.
50
+ */
72
51
  path?: OverrideEntryLike[];
73
52
  }
74
- /**
75
- * A Caller's session id, as a name pi will accept.
76
- *
77
- * `SessionManager` enforces `^[A-Za-z0-9](?:[A-Za-z0-9._-]*[A-Za-z0-9])?$` — which no built-in
78
- * channel satisfies: telegram's `-1001234567890` leads with a dash, feishu and slack keys carry
79
- * `:` and `/`, and any custom `route()` may mint anything at all.
80
- *
81
- * The mapping is INJECTIVE, because two conversations resolving to one record is two rooms sharing a
82
- * memory. `s` prefix (the pattern demands an alphanumeric head, and prefixing unconditionally is what
83
- * keeps it injective — a conditional one would map `-a` and `s-a` alike), then each character
84
- * outside `[A-Za-z0-9.-]` becomes `_XX` / `_uXXXX`, self-describing widths so no two inputs can
85
- * produce one output. `_` escapes itself for the same reason. A trailing `.` or `-` is legal
86
- * mid-name but not at the end, so it escapes too.
87
- *
88
- * Injective within this encoding — which is only sufficient because this store's records live in
89
- * their own directory. A name this store did not write draws from the same character set and can
90
- * still decode: a file called `s42` is also this encoding of `42`, so one directory would make some
91
- * names ambiguous no matter how this side spells them.
92
- *
93
- * Readability is deliberate: `-1001234567890` becomes `s-1001234567890`, so an operator can still
94
- * tell which room a file belongs to.
95
- */
53
+ /** A Caller's session id, as a name pi will accept. */
96
54
  export declare function piSessionId(sessionId: string): string;
97
55
  /**
98
- * {@link piSessionId} backwards — what `list()` needs, because a session id belongs to the CALLER and
99
- * a record name is storage detail. The encoding is self-describing (fixed widths, `_` escapes
100
- * itself), so this is a decode rather than a guess; a name this store did not write (no `s` head, a
101
- * truncated escape) answers undefined and is left out of the listing rather than reported under a
102
- * name nobody can dial.
56
+ * {@link piSessionId} backwards — what `list()` needs, because a session id belongs to the CALLER and a record name is
57
+ * storage detail.
103
58
  */
104
59
  export declare function callerSessionId(recordId: string): string | undefined;
105
- /**
106
- * Disk-backed store under `dir`: restart the process, conversations continue.
107
- *
108
- * Lookup is a directory scan of THIS store's own directory, reading ids out of the filenames pi
109
- * writes (`<timestamp>_<id>.jsonl`) — not `SessionManager.list`, which filters by the cwd recorded in
110
- * each header and would make a renamed agent directory look like an empty store (see
111
- * {@link recordFiles}).
112
- *
113
- * Records live in a subdirectory of their own, because a name this store did not write can still
114
- * decode to a Caller id: a file called `s42` beside them is also this encoding of `42`, so a shared
115
- * directory would answer `42` with a record it does not own. Only this directory is scanned, which
116
- * makes this encoding's own injectivity sufficient — a record written before this store existed
117
- * lies outside it and is never read.
118
- *
119
- * SCOPE OF "open-or-create": idempotent against a store that is serialized per session, which is what
120
- * the serving path provides — the single-writer lease is taken before any store call, so no two
121
- * turns of one conversation reach this at once. What it does NOT do is arbitrate a FIRST open racing
122
- * across processes: two instances that scan before either writes will both create, and the
123
- * conversation forks into two records. A horizontally-scaled deployment that wants more owes a lease
124
- * that spans its instances — an in-process one cannot arbitrate between them, and a file lock here
125
- * would only look like it could.
126
- */
60
+ /** Disk-backed store under `dir`: restart the process, conversations continue. */
127
61
  export declare function piSessionRecordStore(options: {
128
62
  dir: string;
129
63
  cwd?: string;