@fastagent-sh/fastagent 0.24.4 → 0.25.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 (480) hide show
  1. package/README.md +53 -82
  2. package/dist/agent-api.d.ts +452 -0
  3. package/dist/agent-api.js +201 -0
  4. package/dist/answer-text.d.ts +8 -0
  5. package/dist/answer-text.js +18 -0
  6. package/dist/atomic-write.d.ts +2 -2
  7. package/dist/atomic-write.js +2 -2
  8. package/dist/authoring.d.ts +77 -0
  9. package/dist/authoring.js +238 -0
  10. package/dist/channel.d.ts +29 -15
  11. package/dist/channel.js +4 -1
  12. package/dist/channels/agentcore-protocol.d.ts +36 -50
  13. package/dist/channels/agentcore-protocol.js +3 -3
  14. package/dist/channels/agentcore-service.d.ts +8 -18
  15. package/dist/channels/agentcore-service.js +108 -127
  16. package/dist/channels/agentcore.d.ts +8 -24
  17. package/dist/channels/agentcore.js +32 -65
  18. package/dist/channels/body.d.ts +0 -16
  19. package/dist/channels/body.js +0 -25
  20. package/dist/channels/busy.js +6 -1
  21. package/dist/channels/context.d.ts +4 -0
  22. package/dist/channels/context.js +35 -0
  23. package/dist/channels/discover.d.ts +18 -20
  24. package/dist/channels/discover.js +41 -99
  25. package/dist/channels/feishu/feishu-api.d.ts +54 -4
  26. package/dist/channels/feishu/feishu-api.js +192 -149
  27. package/dist/channels/feishu/feishu.d.ts +3 -0
  28. package/dist/channels/feishu/feishu.js +117 -106
  29. package/dist/channels/feishu/history.d.ts +55 -0
  30. package/dist/channels/feishu/history.js +199 -0
  31. package/dist/channels/feishu/invoke-turn.d.ts +13 -11
  32. package/dist/channels/feishu/invoke-turn.js +9 -10
  33. package/dist/channels/feishu/model.d.ts +2 -1
  34. package/dist/channels/feishu/normalize.js +100 -0
  35. package/dist/channels/feishu/preview.d.ts +2 -2
  36. package/dist/channels/feishu/register-webhook.d.ts +1 -0
  37. package/dist/channels/feishu/register-webhook.js +3 -2
  38. package/dist/channels/feishu/scaffold/channel.ts +65 -46
  39. package/dist/channels/feishu/scaffold/feishu-send.ts +38 -33
  40. package/dist/channels/feishu/scaffold/feishu-threads.ts +25 -0
  41. package/dist/channels/feishu/setup-mode.d.ts +45 -25
  42. package/dist/channels/feishu/setup-mode.js +74 -23
  43. package/dist/channels/feishu/shared-api.d.ts +24 -6
  44. package/dist/channels/feishu/shared-api.js +30 -24
  45. package/dist/channels/kit/context-buffer.d.ts +11 -2
  46. package/dist/channels/kit/context-buffer.js +7 -4
  47. package/dist/channels/kit/delivery.d.ts +19 -3
  48. package/dist/channels/kit/delivery.js +74 -15
  49. package/dist/channels/kit/event-stream.js +2 -1
  50. package/dist/channels/kit/invoke-turn-kit.d.ts +41 -41
  51. package/dist/channels/kit/invoke-turn-kit.js +62 -71
  52. package/dist/channels/kit/place-history.d.ts +107 -0
  53. package/dist/channels/kit/place-history.js +182 -0
  54. package/dist/channels/kit/preview-kit.d.ts +9 -5
  55. package/dist/channels/kit/preview-kit.js +36 -15
  56. package/dist/channels/kit/room-threads.d.ts +46 -0
  57. package/dist/channels/kit/room-threads.js +81 -0
  58. package/dist/channels/kit/seen.js +1 -1
  59. package/dist/channels/kit/stop-command.d.ts +6 -3
  60. package/dist/channels/kit/stop-command.js +20 -18
  61. package/dist/channels/kit/thread-fork.d.ts +17 -0
  62. package/dist/channels/kit/thread-fork.js +43 -0
  63. package/dist/channels/kit/thread-participants.js +1 -1
  64. package/dist/channels/kit/transport.d.ts +5 -0
  65. package/dist/channels/kit/transport.js +5 -0
  66. package/dist/channels/kit/turn-runner.d.ts +10 -9
  67. package/dist/channels/kit/turn-runner.js +17 -19
  68. package/dist/channels/kit/turn-store.d.ts +5 -4
  69. package/dist/channels/kit/turn-store.js +5 -5
  70. package/dist/channels/lark/lark.d.ts +3 -0
  71. package/dist/channels/lark/lark.js +5 -0
  72. package/dist/channels/lark/onboard.d.ts +5 -3
  73. package/dist/channels/lark/onboard.js +14 -14
  74. package/dist/channels/lark/scaffold/channel.ts +67 -44
  75. package/dist/channels/lark/scaffold/lark-send.ts +38 -33
  76. package/dist/channels/lark/scaffold/lark-threads.ts +25 -0
  77. package/dist/channels/respond.d.ts +0 -4
  78. package/dist/channels/respond.js +1 -1
  79. package/dist/channels/router.d.ts +18 -0
  80. package/dist/channels/router.js +68 -0
  81. package/dist/channels/serve.d.ts +5 -70
  82. package/dist/channels/serve.js +105 -287
  83. package/dist/channels/slack/history.d.ts +42 -0
  84. package/dist/channels/slack/history.js +282 -0
  85. package/dist/channels/slack/invoke-turn.d.ts +12 -5
  86. package/dist/channels/slack/invoke-turn.js +7 -5
  87. package/dist/channels/slack/manifest.d.ts +1 -4
  88. package/dist/channels/slack/manifest.js +22 -10
  89. package/dist/channels/slack/model.d.ts +2 -1
  90. package/dist/channels/slack/onboard.d.ts +0 -2
  91. package/dist/channels/slack/onboard.js +2 -4
  92. package/dist/channels/slack/onboarding-state.d.ts +0 -2
  93. package/dist/channels/slack/onboarding-state.js +0 -1
  94. package/dist/channels/slack/parse.d.ts +0 -5
  95. package/dist/channels/slack/parse.js +1 -16
  96. package/dist/channels/slack/preview.d.ts +2 -3
  97. package/dist/channels/slack/preview.js +78 -52
  98. package/dist/channels/slack/register-webhook.d.ts +1 -0
  99. package/dist/channels/slack/register-webhook.js +6 -5
  100. package/dist/channels/slack/scaffold/channel.ts +23 -24
  101. package/dist/channels/slack/scaffold/slack-send.ts +50 -43
  102. package/dist/channels/slack/scaffold/slack-threads.ts +29 -0
  103. package/dist/channels/slack/setup-server.d.ts +19 -0
  104. package/dist/channels/slack/setup-server.js +113 -11
  105. package/dist/channels/slack/shared-api.d.ts +15 -4
  106. package/dist/channels/slack/shared-api.js +19 -14
  107. package/dist/channels/slack/slack-api.d.ts +61 -2
  108. package/dist/channels/slack/slack-api.js +28 -5
  109. package/dist/channels/slack/slack.js +97 -52
  110. package/dist/channels/slack/welcomed.js +1 -1
  111. package/dist/channels/telegram/context-buffer.d.ts +6 -1
  112. package/dist/channels/telegram/context-buffer.js +19 -0
  113. package/dist/channels/telegram/invoke-turn.d.ts +8 -4
  114. package/dist/channels/telegram/invoke-turn.js +7 -7
  115. package/dist/channels/telegram/parse.d.ts +7 -2
  116. package/dist/channels/telegram/parse.js +7 -0
  117. package/dist/channels/telegram/preview.d.ts +2 -2
  118. package/dist/channels/telegram/register-webhook.d.ts +1 -0
  119. package/dist/channels/telegram/register-webhook.js +3 -2
  120. package/dist/channels/telegram/scaffold/channel.ts +27 -28
  121. package/dist/channels/telegram/scaffold/telegram-send.ts +61 -108
  122. package/dist/channels/telegram/shared-api.d.ts +34 -0
  123. package/dist/channels/telegram/shared-api.js +79 -0
  124. package/dist/channels/telegram/telegram-api.d.ts +15 -5
  125. package/dist/channels/telegram/telegram-api.js +10 -6
  126. package/dist/channels/telegram/telegram.js +27 -21
  127. package/dist/channels/telegram/turn-store.js +1 -1
  128. package/dist/channels/{kit/turn-queue.d.ts → turn-queue.d.ts} +2 -2
  129. package/dist/channels/{kit/turn-queue.js → turn-queue.js} +10 -10
  130. package/dist/cli/add-feishu.d.ts +42 -12
  131. package/dist/cli/add-feishu.js +177 -124
  132. package/dist/cli/add-slack.d.ts +8 -3
  133. package/dist/cli/add-slack.js +115 -63
  134. package/dist/cli/auth-view.d.ts +10 -3
  135. package/dist/cli/auth-view.js +8 -6
  136. package/dist/cli/box-login.d.ts +17 -7
  137. package/dist/cli/box-login.js +46 -12
  138. package/dist/cli/commands/add.d.ts +15 -4
  139. package/dist/cli/commands/add.js +252 -143
  140. package/dist/cli/commands/auth.d.ts +6 -0
  141. package/dist/cli/commands/auth.js +50 -0
  142. package/dist/cli/commands/content.d.ts +6 -0
  143. package/dist/cli/commands/content.js +45 -0
  144. package/dist/cli/commands/deploy/agentcore.js +50 -77
  145. package/dist/cli/commands/deploy/docker.js +38 -39
  146. package/dist/cli/commands/deploy/fly.js +21 -18
  147. package/dist/cli/commands/deploy/host-login.d.ts +26 -0
  148. package/dist/cli/commands/deploy/host-login.js +90 -0
  149. package/dist/cli/commands/deploy/railway.js +21 -26
  150. package/dist/cli/commands/deploy/shared.d.ts +45 -17
  151. package/dist/cli/commands/deploy/shared.js +34 -15
  152. package/dist/cli/commands/deploy.d.ts +0 -4
  153. package/dist/cli/commands/deploy.js +237 -50
  154. package/dist/cli/commands/destroy.js +8 -6
  155. package/dist/cli/commands/dev.d.ts +0 -2
  156. package/dist/cli/commands/dev.js +20 -19
  157. package/dist/cli/commands/env.d.ts +12 -0
  158. package/dist/cli/commands/env.js +190 -0
  159. package/dist/cli/commands/info.js +95 -156
  160. package/dist/cli/commands/init.d.ts +2 -2
  161. package/dist/cli/commands/init.js +35 -33
  162. package/dist/cli/commands/invoke.d.ts +6 -0
  163. package/dist/cli/commands/invoke.js +131 -16
  164. package/dist/cli/commands/login.d.ts +31 -2
  165. package/dist/cli/commands/login.js +413 -64
  166. package/dist/cli/commands/logout.d.ts +4 -0
  167. package/dist/cli/commands/logout.js +53 -0
  168. package/dist/cli/commands/logs.js +8 -6
  169. package/dist/cli/commands/models.d.ts +2 -1
  170. package/dist/cli/commands/models.js +39 -37
  171. package/dist/cli/commands/schedules.d.ts +21 -0
  172. package/dist/cli/commands/schedules.js +143 -0
  173. package/dist/cli/commands/start.d.ts +11 -10
  174. package/dist/cli/commands/start.js +35 -62
  175. package/dist/cli/content-view.d.ts +9 -0
  176. package/dist/cli/content-view.js +26 -0
  177. package/dist/cli/fail.d.ts +9 -12
  178. package/dist/cli/fail.js +17 -14
  179. package/dist/cli/invoke-stream.d.ts +12 -3
  180. package/dist/cli/invoke-stream.js +85 -23
  181. package/dist/cli/kernel.d.ts +9 -2
  182. package/dist/cli/kernel.js +15 -6
  183. package/dist/cli/login-relay.d.ts +3 -2
  184. package/dist/cli/login-relay.js +18 -6
  185. package/dist/cli/models-view.d.ts +5 -1
  186. package/dist/cli/models-view.js +1 -1
  187. package/dist/cli/person.d.ts +10 -0
  188. package/dist/cli/person.js +23 -0
  189. package/dist/cli/program.js +421 -203
  190. package/dist/cli/serve.d.ts +13 -63
  191. package/dist/cli/serve.js +31 -121
  192. package/dist/cli/shared.d.ts +21 -48
  193. package/dist/cli/shared.js +68 -89
  194. package/dist/cli/ticket.d.ts +136 -0
  195. package/dist/cli/ticket.js +476 -0
  196. package/dist/client.d.ts +7 -0
  197. package/dist/client.js +2 -0
  198. package/dist/content/declare.d.ts +70 -0
  199. package/dist/content/declare.js +163 -0
  200. package/dist/content/file.d.ts +32 -0
  201. package/dist/content/file.js +119 -0
  202. package/dist/content/git.d.ts +41 -0
  203. package/dist/content/git.js +217 -0
  204. package/dist/content/mount.d.ts +2 -0
  205. package/dist/content/mount.js +15 -0
  206. package/dist/content/resolve.d.ts +52 -0
  207. package/dist/content/resolve.js +151 -0
  208. package/dist/content/source.d.ts +27 -0
  209. package/dist/content/source.js +53 -0
  210. package/dist/conversation-sessions.d.ts +26 -0
  211. package/dist/conversation-sessions.js +99 -0
  212. package/dist/declared-secrets.d.ts +19 -37
  213. package/dist/declared-secrets.js +16 -58
  214. package/dist/deploy/agentcore/destroy.d.ts +3 -3
  215. package/dist/deploy/agentcore/destroy.js +46 -28
  216. package/dist/deploy/agentcore/forwarder.js +105 -22
  217. package/dist/deploy/agentcore/logs.js +1 -1
  218. package/dist/deploy/agentcore/plan.d.ts +10 -24
  219. package/dist/deploy/agentcore/plan.js +31 -135
  220. package/dist/deploy/agentcore/run.d.ts +1 -1
  221. package/dist/deploy/agentcore/run.js +8 -5
  222. package/dist/deploy/agentcore/shell.d.ts +1 -1
  223. package/dist/deploy/agentcore/shell.js +5 -5
  224. package/dist/deploy/api.d.ts +34 -0
  225. package/dist/deploy/api.js +50 -0
  226. package/dist/deploy/box-shell.d.ts +6 -0
  227. package/dist/deploy/box-shell.js +7 -0
  228. package/dist/deploy/build-context.d.ts +7 -5
  229. package/dist/deploy/build-context.js +41 -35
  230. package/dist/deploy/channel-ingress.d.ts +6 -1
  231. package/dist/deploy/channel-ingress.js +18 -5
  232. package/dist/deploy/container.d.ts +22 -9
  233. package/dist/deploy/container.js +96 -55
  234. package/dist/deploy/docker/plan.d.ts +3 -2
  235. package/dist/deploy/docker/plan.js +13 -14
  236. package/dist/deploy/docker/run.d.ts +2 -2
  237. package/dist/deploy/docker/run.js +8 -4
  238. package/dist/deploy/fly/plan.d.ts +1 -1
  239. package/dist/deploy/fly/plan.js +12 -21
  240. package/dist/deploy/fly/run.d.ts +10 -6
  241. package/dist/deploy/fly/run.js +11 -6
  242. package/dist/deploy/hosts.d.ts +2 -1
  243. package/dist/deploy/hosts.js +2 -1
  244. package/dist/deploy/preflight.d.ts +21 -23
  245. package/dist/deploy/preflight.js +222 -201
  246. package/dist/deploy/railway/plan.d.ts +8 -6
  247. package/dist/deploy/railway/plan.js +15 -58
  248. package/dist/deploy/railway/run.d.ts +8 -3
  249. package/dist/deploy/railway/run.js +12 -8
  250. package/dist/deploy/residency.d.ts +5 -11
  251. package/dist/deploy/residency.js +0 -6
  252. package/dist/deploy/runner.d.ts +1 -1
  253. package/dist/deploy/runner.js +1 -1
  254. package/dist/deploy/secrets.d.ts +16 -2
  255. package/dist/deploy/secrets.js +33 -6
  256. package/dist/deploy/workspace.d.ts +11 -6
  257. package/dist/deploy/workspace.js +55 -38
  258. package/dist/dev-supervisor.d.ts +11 -2
  259. package/dist/dev-supervisor.js +51 -26
  260. package/dist/effect-port.d.ts +4 -4
  261. package/dist/effect-port.js +4 -4
  262. package/dist/environment/apt.d.ts +4 -0
  263. package/dist/environment/apt.js +32 -0
  264. package/dist/environment/declare.d.ts +59 -0
  265. package/dist/environment/declare.js +210 -0
  266. package/dist/environment/mise.d.ts +50 -0
  267. package/dist/environment/mise.js +268 -0
  268. package/dist/feishu.d.ts +2 -2
  269. package/dist/feishu.js +2 -2
  270. package/dist/git.d.ts +13 -0
  271. package/dist/git.js +55 -0
  272. package/dist/harnesses/models/catalog.d.ts +20 -0
  273. package/dist/harnesses/models/catalog.js +254 -0
  274. package/dist/{engines/pi/auth.d.ts → harnesses/models/credentials.d.ts} +3 -3
  275. package/dist/{engines/pi/auth.js → harnesses/models/credentials.js} +3 -3
  276. package/dist/harnesses/models/environment.d.ts +43 -0
  277. package/dist/harnesses/models/environment.js +82 -0
  278. package/dist/{engines/pi → harnesses/models}/login.d.ts +57 -26
  279. package/dist/{engines/pi → harnesses/models}/login.js +187 -79
  280. package/dist/harnesses/models/models.d.ts +83 -0
  281. package/dist/harnesses/models/models.js +158 -0
  282. package/dist/harnesses/pi-durable/agent.d.ts +42 -0
  283. package/dist/harnesses/pi-durable/agent.js +579 -0
  284. package/dist/harnesses/pi-durable/defaults.d.ts +28 -0
  285. package/dist/harnesses/pi-durable/defaults.js +26 -0
  286. package/dist/harnesses/pi-durable/define.d.ts +77 -0
  287. package/dist/harnesses/pi-durable/define.js +28 -0
  288. package/dist/harnesses/pi-durable/entries.d.ts +32 -0
  289. package/dist/harnesses/pi-durable/entries.js +126 -0
  290. package/dist/harnesses/pi-durable/events.d.ts +25 -0
  291. package/dist/harnesses/pi-durable/events.js +238 -0
  292. package/dist/harnesses/pi-durable/ids.d.ts +16 -0
  293. package/dist/harnesses/pi-durable/ids.js +55 -0
  294. package/dist/harnesses/pi-durable/messages.d.ts +41 -0
  295. package/dist/harnesses/pi-durable/messages.js +116 -0
  296. package/dist/harnesses/pi-durable/open.d.ts +88 -0
  297. package/dist/harnesses/pi-durable/open.js +329 -0
  298. package/dist/harnesses/pi-durable/reads.d.ts +30 -0
  299. package/dist/harnesses/pi-durable/reads.js +94 -0
  300. package/dist/harnesses/pi-durable/registry.d.ts +18 -0
  301. package/dist/harnesses/pi-durable/registry.js +56 -0
  302. package/dist/harnesses/pi-durable/release.d.ts +13 -0
  303. package/dist/harnesses/pi-durable/release.js +40 -0
  304. package/dist/harnesses/pi-durable/serve.d.ts +80 -0
  305. package/dist/harnesses/pi-durable/serve.js +156 -0
  306. package/dist/harnesses/pi-durable/sessions.d.ts +27 -0
  307. package/dist/harnesses/pi-durable/sessions.js +47 -0
  308. package/dist/harnesses/pi-durable/storage.d.ts +4 -0
  309. package/dist/harnesses/pi-durable/storage.js +49 -0
  310. package/dist/harnesses/pi-durable/stream.d.ts +20 -0
  311. package/dist/harnesses/pi-durable/stream.js +221 -0
  312. package/dist/harnesses/pi-durable/text.d.ts +30 -0
  313. package/dist/harnesses/pi-durable/text.js +292 -0
  314. package/dist/harnesses/pi-durable/wake.d.ts +4 -0
  315. package/dist/harnesses/pi-durable/wake.js +81 -0
  316. package/dist/http/client.d.ts +6 -0
  317. package/dist/http/client.js +256 -0
  318. package/dist/http/contract.d.ts +541 -0
  319. package/dist/http/contract.js +179 -0
  320. package/dist/http/server.d.ts +34 -0
  321. package/dist/http/server.js +194 -0
  322. package/dist/index.d.ts +17 -4
  323. package/dist/index.js +10 -5
  324. package/dist/lark.d.ts +2 -2
  325. package/dist/lark.js +2 -2
  326. package/dist/locked-file.d.ts +17 -0
  327. package/dist/{engines/pi/locked-file.js → locked-file.js} +16 -10
  328. package/dist/once.d.ts +6 -0
  329. package/dist/once.js +23 -0
  330. package/dist/paths.d.ts +36 -52
  331. package/dist/paths.js +66 -182
  332. package/dist/runtime.d.ts +25 -2
  333. package/dist/runtime.js +27 -0
  334. package/dist/scaffold/add-channel.d.ts +14 -27
  335. package/dist/scaffold/add-channel.js +82 -180
  336. package/dist/scaffold/init.d.ts +17 -18
  337. package/dist/scaffold/init.js +87 -99
  338. package/dist/scaffold/templates/SYSTEM.md +12 -0
  339. package/dist/scaffold/templates/env.example +4 -10
  340. package/dist/scaffold/templates/fastagent.config.ts +21 -33
  341. package/dist/scaffold/templates/gitignore +8 -1
  342. package/dist/scaffold/templates/skills/writing-great-skills/SKILL.md +1 -2
  343. package/dist/scaffold/templates.d.ts +9 -4
  344. package/dist/scaffold/templates.js +7 -5
  345. package/dist/scaffold/vendor-skill.d.ts +1 -4
  346. package/dist/scaffold/vendor-skill.js +5 -6
  347. package/dist/schedule/cron.d.ts +13 -0
  348. package/dist/schedule/cron.js +52 -0
  349. package/dist/schedule/eventbridge-cron.d.ts +17 -0
  350. package/dist/schedule/eventbridge-cron.js +88 -0
  351. package/dist/schedule/schedule.d.ts +23 -0
  352. package/dist/schedule/schedule.js +34 -0
  353. package/dist/schedule/scheduler.d.ts +34 -33
  354. package/dist/schedule/scheduler.js +251 -137
  355. package/dist/schedule/state.d.ts +4 -14
  356. package/dist/schedule/state.js +7 -7
  357. package/dist/schedule/wake-alarm.d.ts +22 -2
  358. package/dist/schedule/wake-alarm.js +66 -20
  359. package/dist/schedule/wakeups.d.ts +16 -15
  360. package/dist/schedule/wakeups.js +47 -45
  361. package/dist/service.d.ts +56 -169
  362. package/dist/service.js +91 -187
  363. package/dist/serving-command.d.ts +10 -0
  364. package/dist/serving-command.js +16 -0
  365. package/dist/slack.d.ts +1 -1
  366. package/dist/slack.js +1 -1
  367. package/dist/{channels/kit/state.js → state-file.js} +6 -6
  368. package/dist/telegram.d.ts +1 -0
  369. package/dist/telegram.js +1 -0
  370. package/dist/tunnel.d.ts +3 -0
  371. package/dist/tunnel.js +12 -4
  372. package/dist/value-file.d.ts +21 -0
  373. package/dist/value-file.js +108 -0
  374. package/dist/version.d.ts +5 -0
  375. package/dist/version.js +14 -1
  376. package/package.json +18 -28
  377. package/dist/agent.d.ts +0 -106
  378. package/dist/agent.js +0 -21
  379. package/dist/channels/control.d.ts +0 -31
  380. package/dist/channels/control.js +0 -329
  381. package/dist/channels/define-channel.d.ts +0 -39
  382. package/dist/channels/define-channel.js +0 -9
  383. package/dist/channels/feishu/context-buffer.d.ts +0 -35
  384. package/dist/channels/feishu/context-buffer.js +0 -65
  385. package/dist/channels/feishu/scaffold/channel.websocket.ts +0 -31
  386. package/dist/channels/http.d.ts +0 -23
  387. package/dist/channels/http.js +0 -57
  388. package/dist/channels/lark/scaffold/channel.websocket.ts +0 -31
  389. package/dist/channels/slack/context-buffer.d.ts +0 -23
  390. package/dist/channels/slack/context-buffer.js +0 -37
  391. package/dist/channels/sse.d.ts +0 -4
  392. package/dist/channels/sse.js +0 -66
  393. package/dist/cli/commands/chat.d.ts +0 -3
  394. package/dist/cli/commands/chat.js +0 -14
  395. package/dist/cli/commands/routine-run.d.ts +0 -6
  396. package/dist/cli/commands/routine-run.js +0 -46
  397. package/dist/cli/commands/routine.d.ts +0 -25
  398. package/dist/cli/commands/routine.js +0 -122
  399. package/dist/cli/commands/tool.d.ts +0 -1
  400. package/dist/cli/commands/tool.js +0 -57
  401. package/dist/collect.d.ts +0 -63
  402. package/dist/collect.js +0 -90
  403. package/dist/core.d.ts +0 -13
  404. package/dist/core.js +0 -15
  405. package/dist/engines/pi/agent-models.d.ts +0 -83
  406. package/dist/engines/pi/agent-models.js +0 -120
  407. package/dist/engines/pi/agent-session-factory.d.ts +0 -121
  408. package/dist/engines/pi/agent-session-factory.js +0 -535
  409. package/dist/engines/pi/chat.d.ts +0 -3
  410. package/dist/engines/pi/chat.js +0 -8
  411. package/dist/engines/pi/config.d.ts +0 -71
  412. package/dist/engines/pi/config.js +0 -199
  413. package/dist/engines/pi/create.d.ts +0 -170
  414. package/dist/engines/pi/create.js +0 -343
  415. package/dist/engines/pi/definition.d.ts +0 -74
  416. package/dist/engines/pi/definition.js +0 -236
  417. package/dist/engines/pi/entry-images.d.ts +0 -14
  418. package/dist/engines/pi/entry-images.js +0 -23
  419. package/dist/engines/pi/invoke-session.d.ts +0 -18
  420. package/dist/engines/pi/invoke-session.js +0 -403
  421. package/dist/engines/pi/locked-file.d.ts +0 -9
  422. package/dist/engines/pi/machine.d.ts +0 -53
  423. package/dist/engines/pi/machine.js +0 -137
  424. package/dist/engines/pi/models.d.ts +0 -200
  425. package/dist/engines/pi/models.js +0 -533
  426. package/dist/engines/pi/open.d.ts +0 -180
  427. package/dist/engines/pi/open.js +0 -270
  428. package/dist/engines/pi/openai-account-models.d.ts +0 -35
  429. package/dist/engines/pi/openai-account-models.js +0 -116
  430. package/dist/engines/pi/report.d.ts +0 -18
  431. package/dist/engines/pi/report.js +0 -59
  432. package/dist/engines/pi/retry-event.d.ts +0 -6
  433. package/dist/engines/pi/retry-event.js +0 -15
  434. package/dist/engines/pi/service.d.ts +0 -9
  435. package/dist/engines/pi/service.js +0 -14
  436. package/dist/engines/pi/session-builder.d.ts +0 -13
  437. package/dist/engines/pi/session-builder.js +0 -117
  438. package/dist/engines/pi/session-control.d.ts +0 -77
  439. package/dist/engines/pi/session-control.js +0 -908
  440. package/dist/engines/pi/session-effects.d.ts +0 -14
  441. package/dist/engines/pi/session-effects.js +0 -30
  442. package/dist/engines/pi/session-inheritance.d.ts +0 -21
  443. package/dist/engines/pi/session-inheritance.js +0 -204
  444. package/dist/engines/pi/session-markers.d.ts +0 -49
  445. package/dist/engines/pi/session-markers.js +0 -60
  446. package/dist/engines/pi/session-settings.d.ts +0 -67
  447. package/dist/engines/pi/session-settings.js +0 -119
  448. package/dist/engines/pi/session-store.d.ts +0 -69
  449. package/dist/engines/pi/session-store.js +0 -430
  450. package/dist/engines/pi/tool-context.d.ts +0 -45
  451. package/dist/engines/pi/tool-context.js +0 -31
  452. package/dist/engines/pi/tool.d.ts +0 -99
  453. package/dist/engines/pi/tool.js +0 -118
  454. package/dist/engines/pi/turn-kit.d.ts +0 -92
  455. package/dist/engines/pi/turn-kit.js +0 -288
  456. package/dist/engines/pi/wake-tool.d.ts +0 -9
  457. package/dist/engines/pi/wake-tool.js +0 -92
  458. package/dist/loader.d.ts +0 -41
  459. package/dist/loader.js +0 -116
  460. package/dist/node.d.ts +0 -3
  461. package/dist/node.js +0 -4
  462. package/dist/observe.d.ts +0 -6
  463. package/dist/observe.js +0 -47
  464. package/dist/pi.d.ts +0 -25
  465. package/dist/pi.js +0 -15
  466. package/dist/scaffold/templates/APPEND_SYSTEM.md +0 -12
  467. package/dist/scaffold/templates/tools/fetch-url.ts +0 -25
  468. package/dist/schedule/discover.d.ts +0 -17
  469. package/dist/schedule/discover.js +0 -61
  470. package/dist/schedule/routine.d.ts +0 -43
  471. package/dist/schedule/routine.js +0 -32
  472. package/dist/schedule/run.d.ts +0 -55
  473. package/dist/schedule/run.js +0 -146
  474. package/dist/secrets-gate.d.ts +0 -32
  475. package/dist/secrets-gate.js +0 -33
  476. package/dist/session-remote.d.ts +0 -47
  477. package/dist/session-remote.js +0 -460
  478. package/dist/session.d.ts +0 -466
  479. package/dist/session.js +0 -57
  480. /package/dist/{channels/kit/state.d.ts → state-file.d.ts} +0 -0
@@ -0,0 +1,35 @@
1
+ /**
2
+ * What a channel is handed when it is mounted (channel.ts): the Agent, a directory of its own, the sessions its
3
+ * conversations talk in, and its turns. Every mount builds a channel's context here, so a channel file, a first-party
4
+ * channel and a test mount the same way.
5
+ */
6
+ import { isAbsolute, join } from "node:path";
7
+ import { conversationSessions, forkedSession } from "../conversation-sessions.js";
8
+ import * as Effect from "effect/Effect";
9
+ import { portError, portJoin } from "../effect-port.js";
10
+ import { log } from "../log.js";
11
+ import { ensureStateHome } from "../state-file.js";
12
+ import { createTurnQueue } from "./turn-queue.js";
13
+ /** The context of the channel `name` (its file's name under `src/channels/`), its state under `stateRoot`. */
14
+ export function channelContext(agent, stateRoot, name) {
15
+ if (!isAbsolute(stateRoot))
16
+ throw new Error(`a channel's state root must be absolute, got "${stateRoot}"`);
17
+ const stateDir = join(stateRoot, "channels", name);
18
+ ensureStateHome(stateDir);
19
+ const sessions = conversationSessions(join(stateDir, "sessions.json"));
20
+ const turns = createTurnQueue({
21
+ label: `[${name}]`,
22
+ // The channel's own failure surface: `turn` promises a failed one goes to the log, said as the author wrote it.
23
+ run: ({ conversation, work }) => portJoin(work).pipe(Effect.catchCause((cause) => Effect.sync(() => log.error(`[${name}] turn failed (place=${conversation}): ${String(portError(cause))}`)))),
24
+ });
25
+ return {
26
+ agent,
27
+ stateDir,
28
+ sessionFor: (key, options) => {
29
+ const forkFrom = options?.forkFrom;
30
+ return sessions.of(key, agent, forkFrom === undefined ? undefined : async () => forkedSession(agent, await forkFrom()));
31
+ },
32
+ recordedSession: (key) => sessions.get(key),
33
+ turn: (place, work) => turns.accept({ conversation: place, work }),
34
+ };
35
+ }
@@ -1,16 +1,18 @@
1
- import type { ChannelContext, LongConnection, Routes } from "../channel.ts";
2
- import { type ModuleLoadFailure } from "../loader.ts";
3
- import { type DeclaredSecret } from "../declared-secrets.ts";
4
- /** A dropped route: two channels claim the same key. */
5
- export interface ChannelCollision {
6
- route: string;
7
- source: string;
8
- }
1
+ /**
2
+ * A definition's channels, mounted: each route channel's routes, and each long connection bound to its context. The
3
+ * modules are what the definition built (`BuiltDefinition.channels`); a channel's shape is checked there, by
4
+ * {@link channelModuleProblem}, and its routes here, where it is first called.
5
+ */
6
+ import type { Agent } from "../agent-api.ts";
7
+ import type { ChannelModule, LongConnection, LongConnectionChannelModule, Routes } from "../channel.ts";
8
+ export type AnyChannelModule = ChannelModule | LongConnectionChannelModule;
9
9
  /** A long-connection module bound to the same context route factories receive. */
10
10
  export interface LoadedLongConnectionChannel {
11
11
  name: string;
12
12
  connect(signal: AbortSignal): LongConnection;
13
13
  }
14
+ /** Why `value` is not a channel module: a route channel's `(ctx) => Routes`, or a long connection's object. */
15
+ export declare function channelModuleProblem(value: unknown): string | undefined;
14
16
  /** HOW A CHANNEL IS REACHED — the authored structural fact, and the ONE shape it travels in. */
15
17
  export type ChannelIngress = "webhook" | "long-connection";
16
18
  /** One channel a directory declares, with the ingress its module shape says it has. */
@@ -20,18 +22,14 @@ export interface DeclaredChannel {
20
22
  }
21
23
  /** Declared channels from basenames that share one ingress. */
22
24
  export declare function declaredChannels(names: readonly string[], ingress?: ChannelIngress): DeclaredChannel[];
23
- /** Import channel files without mounting route factories or opening connections. */
24
- export declare function inspectChannels(dir: string): Promise<{
25
- channels: DeclaredChannel[];
26
- /** What each channel declared through {@link defineChannel}, BY CHANNEL NAME — the only way a
27
- * CUSTOM channel's credentials can reach a deploy, since nothing else here can name them. */
28
- secrets: Map<string, DeclaredSecret[]>;
29
- failures: ModuleLoadFailure[];
30
- }>;
31
- export declare function loadChannels(dir: string, ctx: ChannelContext): Promise<{
25
+ /** How a channel module is reached: its routes, or the connection it opens. */
26
+ export declare function channelIngress(module: AnyChannelModule): ChannelIngress;
27
+ /**
28
+ * Mount the channels, each with its own context (context.ts): every route of every route channel (two claiming one
29
+ * route is refused), and the connections.
30
+ */
31
+ export declare function mountChannels(modules: ReadonlyMap<string, AnyChannelModule>, agent: Agent, stateRoot: string): {
32
32
  routes: Routes;
33
33
  longConnections: LoadedLongConnectionChannel[];
34
34
  routeChannels: string[];
35
- collisions: ChannelCollision[];
36
- failures: ModuleLoadFailure[];
37
- }>;
35
+ };
@@ -1,50 +1,25 @@
1
- /** Channel discovery (the N axis, filesystem form). */
2
- import { isAbsolute, join } from "node:path";
3
- import { assertRouteKey, routeKeysConflict } from "./serve.js";
4
- import { loadModuleDir } from "../loader.js";
5
- import { readSecretDeclaration } from "../declared-secrets.js";
6
- import { gateSecrets } from "../secrets-gate.js";
7
- import { assertInsideAgentDir } from "../paths.js";
1
+ import { channelContext } from "./context.js";
2
+ import { assertRouteKey, routeKeysConflict } from "./router.js";
8
3
  function longConnectionModule(value) {
9
4
  return value !== null && typeof value === "object" && typeof value.connect === "function";
10
5
  }
11
- function validateLongConnectionModule(value, label) {
12
- if (typeof value.name !== "string" || value.name.trim() === "") {
13
- throw new Error(`${label}: long-connection channel name must be a non-empty string`);
14
- }
6
+ /** Why `value` is not a channel module: a route channel's `(ctx) => Routes`, or a long connection's object. */
7
+ export function channelModuleProblem(value) {
8
+ if (typeof value === "function")
9
+ return undefined;
10
+ if (!longConnectionModule(value))
11
+ return "must default-export (ctx) => Routes or { name, connect(ctx, signal) }";
12
+ return typeof value.name === "string" && value.name.trim() !== ""
13
+ ? undefined
14
+ : "long-connection channel name must be a non-empty string";
15
15
  }
16
16
  /** Declared channels from basenames that share one ingress. */
17
17
  export function declaredChannels(names, ingress = "webhook") {
18
18
  return names.map((name) => ({ name, ingress }));
19
19
  }
20
- /** Import channel files without mounting route factories or opening connections. */
21
- export async function inspectChannels(dir) {
22
- await assertInsideAgentDir(dir, "channels");
23
- const { modules, failures } = await loadModuleDir(join(dir, "channels"));
24
- const channels = [];
25
- const secrets = new Map();
26
- for (const { name, label, file, mod } of modules) {
27
- try {
28
- const declaration = readSecretDeclaration(mod.default, label);
29
- if (declaration.error !== undefined)
30
- throw new Error(declaration.error);
31
- if (typeof mod.default === "function") {
32
- channels.push({ name, ingress: "webhook" });
33
- }
34
- else if (longConnectionModule(mod.default)) {
35
- validateLongConnectionModule(mod.default, label);
36
- channels.push({ name, ingress: "long-connection" });
37
- }
38
- else {
39
- throw new Error(`${label} must default-export (ctx) => Routes or { name, connect(ctx, signal) }`);
40
- }
41
- secrets.set(name, declaration.secrets);
42
- }
43
- catch (error) {
44
- failures.push({ label, file, message: error.message });
45
- }
46
- }
47
- return { channels, secrets, failures };
20
+ /** How a channel module is reached: its routes, or the connection it opens. */
21
+ export function channelIngress(module) {
22
+ return typeof module === "function" ? "webhook" : "long-connection";
48
23
  }
49
24
  function validateRoutes(value, label) {
50
25
  if (value === null || typeof value !== "object" || value instanceof Map) {
@@ -62,71 +37,38 @@ function validateRoutes(value, label) {
62
37
  }
63
38
  return routes;
64
39
  }
65
- export async function loadChannels(dir, ctx) {
66
- if (!isAbsolute(ctx.stateRoot)) {
67
- throw new Error(`ChannelContext.stateRoot must be absolute, got "${ctx.stateRoot}"`);
68
- }
69
- await assertInsideAgentDir(dir, "channels");
70
- const { modules, failures } = await loadModuleDir(join(dir, "channels"));
40
+ /**
41
+ * Mount the channels, each with its own context (context.ts): every route of every route channel (two claiming one
42
+ * route is refused), and the connections.
43
+ */
44
+ export function mountChannels(modules, agent, stateRoot) {
71
45
  const routes = {};
46
+ const owners = new Map();
72
47
  const longConnections = [];
73
48
  const routeChannels = [];
74
- const collisions = [];
75
- // Collected from the channels that actually MOUNTED, GATED at the end of the function: this is a
76
- // serving path, so an unset declared value must stop it (a channel built from an empty credential
77
- // is the failure the declaration exists to prevent — a webhook that accepts forged updates, a bot
78
- // that cannot reply), while `inspectChannels` — the reporting reader — only collects. A channel
79
- // that failed to mount does not gate: its own failure is the report the author needs.
80
- const declaredSecrets = new Map();
81
- const declaring = modules.flatMap((entry) => {
82
- const declaration = readSecretDeclaration(entry.mod.default, entry.label);
83
- if (declaration.error !== undefined) {
84
- failures.push({ label: entry.label, file: entry.file, message: declaration.error });
85
- return [];
49
+ for (const [name, module] of modules) {
50
+ const label = `src/channels/${name}`;
51
+ const ctx = channelContext(agent, stateRoot, name);
52
+ if (typeof module !== "function") {
53
+ longConnections.push({ name: module.name, connect: (signal) => module.connect(ctx, signal) });
54
+ continue;
86
55
  }
87
- return [{ ...entry, secrets: declaration.secrets }];
88
- });
89
- for (const { name, label, file, mod, secrets } of declaring) {
90
- try {
91
- if (longConnectionModule(mod.default)) {
92
- validateLongConnectionModule(mod.default, label);
93
- const channel = mod.default;
94
- longConnections.push({
95
- name: channel.name,
96
- connect: (signal) => channel.connect(ctx, signal),
97
- });
98
- declaredSecrets.set(name, secrets);
99
- continue;
100
- }
101
- if (typeof mod.default !== "function") {
102
- throw new Error(`${label} must default-export (ctx) => Routes or { name, connect(ctx, signal) }`);
103
- }
104
- const declared = mod.default(ctx);
105
- if (declared !== null &&
106
- typeof declared === "object" &&
107
- typeof declared.then === "function") {
108
- declared.catch(() => { });
109
- throw new Error(`${label} must return Routes synchronously, not a Promise`);
110
- }
111
- const declaredRoutes = validateRoutes(declared, label);
112
- for (const [route, handler] of declaredRoutes) {
113
- const clash = Object.keys(routes).some((key) => routeKeysConflict(key, route));
114
- if (clash) {
115
- collisions.push({ route, source: label });
116
- continue;
117
- }
118
- routes[route] = handler;
119
- }
120
- routeChannels.push(name);
121
- declaredSecrets.set(name, secrets);
56
+ const declared = module(ctx);
57
+ if (declared !== null &&
58
+ typeof declared === "object" &&
59
+ typeof declared.then === "function") {
60
+ declared.catch(() => { });
61
+ throw new Error(`${label} must return Routes synchronously, not a Promise`);
122
62
  }
123
- catch (error) {
124
- failures.push({ label, file, message: error.message });
63
+ for (const [route, handler] of validateRoutes(declared, label)) {
64
+ const taken = [...owners.keys()].find((key) => routeKeysConflict(key, route));
65
+ if (taken !== undefined) {
66
+ throw new Error(`${label} serves "${route}", which ${owners.get(taken)} already serves as "${taken}"`);
67
+ }
68
+ owners.set(route, label);
69
+ routes[route] = handler;
125
70
  }
71
+ routeChannels.push(name);
126
72
  }
127
- // Gated LAST, after the loop has said what it found (the gate reports those failures before it
128
- // refuses — src/secrets-gate.ts, decision 2). Binding a module ahead of the gate costs nothing: a
129
- // route factory builds handlers; nothing listens or dials until the caller mounts what this returns.
130
- gateSecrets({ declared: declaredSecrets, failures });
131
- return { routes, longConnections, routeChannels, collisions, failures };
73
+ return { routes, longConnections, routeChannels };
132
74
  }
@@ -1,4 +1,4 @@
1
- import type { ImageRef } from "../../agent.ts";
1
+ import type { ImageAttachment as ImageRef } from "../kit/invoke-turn-kit.ts";
2
2
  import type { FeishuCloudKind } from "./cloud.ts";
3
3
  import type { CallOptions } from "../kit/transport.ts";
4
4
  /** Where a reply goes: a chat, optionally quote-replying a message inside a platform thread. */
@@ -35,6 +35,31 @@ export interface FeishuApiOptions {
35
35
  appId: string;
36
36
  appSecret: string;
37
37
  }
38
+ /** One message as `GET /im/v1/messages` lists it — the fields the history read uses. */
39
+ export interface FeishuListedMessage {
40
+ message_id?: string;
41
+ chat_id?: string;
42
+ msg_type?: string;
43
+ /** Milliseconds since the epoch, as a string. */
44
+ create_time?: string;
45
+ parent_id?: string;
46
+ root_id?: string;
47
+ thread_id?: string;
48
+ deleted?: boolean;
49
+ body?: {
50
+ content?: string;
51
+ };
52
+ mentions?: {
53
+ key?: string;
54
+ name?: string;
55
+ id?: string;
56
+ }[];
57
+ sender?: {
58
+ id?: string;
59
+ id_type?: string;
60
+ sender_type?: string;
61
+ };
62
+ }
38
63
  export interface FeishuAppScope {
39
64
  name: string;
40
65
  grantStatus: number;
@@ -45,6 +70,12 @@ export interface FeishuAppScope {
45
70
  * single pipeline (module header). Throws {@link FeishuApiError} on any failure.
46
71
  */
47
72
  export interface FeishuApi {
73
+ /**
74
+ * This client over the same pipeline and token cache, reporting the id of every message it creates (a send, a reply,
75
+ * each chunk of a long text). The channel sends through one to know which messages in a chat's history are its own
76
+ * turn output; the send tool shares the plain client, so what the agent sends itself stays part of the discussion.
77
+ */
78
+ recordingSends(onSent: (messageId: string) => void): FeishuApi;
48
79
  /** Validate appId/appSecret by acquiring the tenant token through this pipeline. Does not require
49
80
  * the bot capability (unlike botInfo), so guided onboarding can fail before persisting a typo. */
50
81
  verifyCredentials(): Promise<void>;
@@ -66,6 +97,28 @@ export interface FeishuApi {
66
97
  editTextMessage(messageId: string, text: string): Promise<void>;
67
98
  /** Recall (delete) a message the bot sent. */
68
99
  deleteMessage(messageId: string): Promise<void>;
100
+ /**
101
+ * A place's messages, NEWEST first: a chat's (an ordinary group lists a thread's root only; a topic group lists
102
+ * every message) or a thread's. Cards come back as sent, and senders as open_ids.
103
+ */
104
+ listMessages(container: {
105
+ type: "chat" | "thread";
106
+ id: string;
107
+ }, pageSize: number,
108
+ /** Seconds since the epoch, inclusive: list nothing created after this second. */
109
+ endTime?: number, opts?: CallOptions): Promise<{
110
+ items: FeishuListedMessage[];
111
+ hasMore: boolean;
112
+ }>;
113
+ /**
114
+ * Names for `wanted` open_ids among a chat's members (needs `im:chat.members:read`). Pages until every wanted id is
115
+ * named or the member list ends, up to {@link MEMBER_PAGES} pages; `complete` says whether the list was read to its
116
+ * end, so an id still unnamed is known not to be a member rather than beyond the cap.
117
+ */
118
+ chatMemberNames(chatId: string, wanted: ReadonlySet<string>, opts?: CallOptions): Promise<{
119
+ names: Map<string, string>;
120
+ complete: boolean;
121
+ }>;
69
122
  /** Fetch one message (the reply-referent path). Undefined when the API returns no item.
70
123
  *
71
124
  * `sender` is typed rather than `unknown` because the referent path READS it: an app-sent message
@@ -105,9 +158,6 @@ export interface FeishuApi {
105
158
  /** List the app's scopes and grant state. Used by onboarding/runtime to make group visibility
106
159
  * explicit instead of silently assuming unmentioned group events are delivered. */
107
160
  listAppScopes(): Promise<FeishuAppScope[]>;
108
- /** Add tenant scopes to the app draft through application-v7 config. Approval + version publishing
109
- * remain console actions; this method only removes the error-prone manual draft edit. */
110
- addAppScopes(appId: string, scopeNames: string[]): Promise<void>;
111
161
  /** Update the app's own event subscription (application-v7 config PATCH — tenant token can only
112
162
  * operate on itself; the request-URL change takes effect immediately, no version publish). The
113
163
  * platform VERIFIES `requestUrl` with a url_verification challenge during this call, so the server