@fastagent-sh/fastagent 0.24.4 → 0.26.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 (487) hide show
  1. package/README.md +54 -82
  2. package/dist/agent-api.d.ts +460 -0
  3. package/dist/agent-api.js +209 -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 +81 -0
  9. package/dist/authoring.js +245 -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 +116 -64
  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 +18 -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 +253 -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 +191 -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 +132 -16
  164. package/dist/cli/commands/login.d.ts +31 -2
  165. package/dist/cli/commands/login.js +416 -65
  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 +6 -4
  184. package/dist/cli/login-relay.js +19 -7
  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 +70 -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 +220 -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 +223 -202
  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 +52 -27
  260. package/dist/effect-port.d.ts +4 -4
  261. package/dist/effect-port.js +4 -4
  262. package/dist/env.d.ts +0 -13
  263. package/dist/env.js +1 -44
  264. package/dist/environment/apt.d.ts +4 -0
  265. package/dist/environment/apt.js +32 -0
  266. package/dist/environment/declare.d.ts +59 -0
  267. package/dist/environment/declare.js +210 -0
  268. package/dist/environment/mise.d.ts +51 -0
  269. package/dist/environment/mise.js +272 -0
  270. package/dist/feishu.d.ts +2 -2
  271. package/dist/feishu.js +2 -2
  272. package/dist/git.d.ts +13 -0
  273. package/dist/git.js +55 -0
  274. package/dist/harnesses/models/catalog.d.ts +20 -0
  275. package/dist/harnesses/models/catalog.js +254 -0
  276. package/dist/{engines/pi/auth.d.ts → harnesses/models/credentials.d.ts} +3 -3
  277. package/dist/{engines/pi/auth.js → harnesses/models/credentials.js} +3 -3
  278. package/dist/harnesses/models/environment.d.ts +48 -0
  279. package/dist/harnesses/models/environment.js +88 -0
  280. package/dist/harnesses/models/host.d.ts +30 -0
  281. package/dist/harnesses/models/host.js +97 -0
  282. package/dist/{engines/pi → harnesses/models}/login.d.ts +66 -70
  283. package/dist/harnesses/models/login.js +439 -0
  284. package/dist/harnesses/models/models.d.ts +84 -0
  285. package/dist/harnesses/models/models.js +197 -0
  286. package/dist/harnesses/pi-durable/agent.d.ts +42 -0
  287. package/dist/harnesses/pi-durable/agent.js +581 -0
  288. package/dist/harnesses/pi-durable/defaults.d.ts +28 -0
  289. package/dist/harnesses/pi-durable/defaults.js +26 -0
  290. package/dist/harnesses/pi-durable/define.d.ts +77 -0
  291. package/dist/harnesses/pi-durable/define.js +28 -0
  292. package/dist/harnesses/pi-durable/entries.d.ts +32 -0
  293. package/dist/harnesses/pi-durable/entries.js +126 -0
  294. package/dist/harnesses/pi-durable/events.d.ts +25 -0
  295. package/dist/harnesses/pi-durable/events.js +238 -0
  296. package/dist/harnesses/pi-durable/ids.d.ts +16 -0
  297. package/dist/harnesses/pi-durable/ids.js +55 -0
  298. package/dist/harnesses/pi-durable/messages.d.ts +41 -0
  299. package/dist/harnesses/pi-durable/messages.js +116 -0
  300. package/dist/harnesses/pi-durable/open.d.ts +95 -0
  301. package/dist/harnesses/pi-durable/open.js +330 -0
  302. package/dist/harnesses/pi-durable/reads.d.ts +30 -0
  303. package/dist/harnesses/pi-durable/reads.js +94 -0
  304. package/dist/harnesses/pi-durable/registry.d.ts +18 -0
  305. package/dist/harnesses/pi-durable/registry.js +56 -0
  306. package/dist/harnesses/pi-durable/release.d.ts +13 -0
  307. package/dist/harnesses/pi-durable/release.js +40 -0
  308. package/dist/harnesses/pi-durable/serve.d.ts +90 -0
  309. package/dist/harnesses/pi-durable/serve.js +186 -0
  310. package/dist/harnesses/pi-durable/sessions.d.ts +27 -0
  311. package/dist/harnesses/pi-durable/sessions.js +47 -0
  312. package/dist/harnesses/pi-durable/storage.d.ts +4 -0
  313. package/dist/harnesses/pi-durable/storage.js +49 -0
  314. package/dist/harnesses/pi-durable/stream.d.ts +20 -0
  315. package/dist/harnesses/pi-durable/stream.js +221 -0
  316. package/dist/harnesses/pi-durable/text.d.ts +30 -0
  317. package/dist/harnesses/pi-durable/text.js +292 -0
  318. package/dist/harnesses/pi-durable/wake.d.ts +11 -0
  319. package/dist/harnesses/pi-durable/wake.js +90 -0
  320. package/dist/http/client.d.ts +6 -0
  321. package/dist/http/client.js +256 -0
  322. package/dist/http/contract.d.ts +541 -0
  323. package/dist/http/contract.js +179 -0
  324. package/dist/http/server.d.ts +34 -0
  325. package/dist/http/server.js +194 -0
  326. package/dist/index.d.ts +19 -4
  327. package/dist/index.js +13 -5
  328. package/dist/lark.d.ts +2 -2
  329. package/dist/lark.js +2 -2
  330. package/dist/locked-file.d.ts +17 -0
  331. package/dist/{engines/pi/locked-file.js → locked-file.js} +16 -10
  332. package/dist/once.d.ts +6 -0
  333. package/dist/once.js +23 -0
  334. package/dist/paths.d.ts +36 -52
  335. package/dist/paths.js +66 -182
  336. package/dist/runtime.d.ts +25 -2
  337. package/dist/runtime.js +27 -0
  338. package/dist/scaffold/add-channel.d.ts +14 -27
  339. package/dist/scaffold/add-channel.js +82 -180
  340. package/dist/scaffold/init.d.ts +17 -18
  341. package/dist/scaffold/init.js +87 -99
  342. package/dist/scaffold/templates/SYSTEM.md +12 -0
  343. package/dist/scaffold/templates/env.example +4 -10
  344. package/dist/scaffold/templates/fastagent.config.ts +21 -33
  345. package/dist/scaffold/templates/gitignore +8 -1
  346. package/dist/scaffold/templates/skills/writing-great-skills/SKILL.md +1 -2
  347. package/dist/scaffold/templates.d.ts +9 -4
  348. package/dist/scaffold/templates.js +7 -5
  349. package/dist/scaffold/vendor-skill.d.ts +1 -4
  350. package/dist/scaffold/vendor-skill.js +5 -6
  351. package/dist/schedule/cron.d.ts +13 -0
  352. package/dist/schedule/cron.js +52 -0
  353. package/dist/schedule/eventbridge-cron.d.ts +17 -0
  354. package/dist/schedule/eventbridge-cron.js +88 -0
  355. package/dist/schedule/schedule.d.ts +23 -0
  356. package/dist/schedule/schedule.js +34 -0
  357. package/dist/schedule/scheduler.d.ts +34 -33
  358. package/dist/schedule/scheduler.js +251 -137
  359. package/dist/schedule/state.d.ts +4 -14
  360. package/dist/schedule/state.js +7 -7
  361. package/dist/schedule/wake-alarm.d.ts +22 -2
  362. package/dist/schedule/wake-alarm.js +66 -20
  363. package/dist/schedule/wakeups.d.ts +16 -15
  364. package/dist/schedule/wakeups.js +47 -45
  365. package/dist/service.d.ts +56 -169
  366. package/dist/service.js +91 -187
  367. package/dist/serving-command.d.ts +10 -0
  368. package/dist/serving-command.js +16 -0
  369. package/dist/sign-in-api.d.ts +147 -0
  370. package/dist/sign-in-api.js +9 -0
  371. package/dist/slack.d.ts +1 -1
  372. package/dist/slack.js +1 -1
  373. package/dist/{channels/kit/state.js → state-file.js} +6 -6
  374. package/dist/telegram.d.ts +1 -0
  375. package/dist/telegram.js +1 -0
  376. package/dist/tunnel.d.ts +3 -0
  377. package/dist/tunnel.js +14 -5
  378. package/dist/value-file.d.ts +40 -0
  379. package/dist/value-file.js +164 -0
  380. package/dist/version.d.ts +5 -0
  381. package/dist/version.js +14 -1
  382. package/package.json +18 -28
  383. package/dist/agent.d.ts +0 -106
  384. package/dist/agent.js +0 -21
  385. package/dist/channels/control.d.ts +0 -31
  386. package/dist/channels/control.js +0 -329
  387. package/dist/channels/define-channel.d.ts +0 -39
  388. package/dist/channels/define-channel.js +0 -9
  389. package/dist/channels/feishu/context-buffer.d.ts +0 -35
  390. package/dist/channels/feishu/context-buffer.js +0 -65
  391. package/dist/channels/feishu/scaffold/channel.websocket.ts +0 -31
  392. package/dist/channels/http.d.ts +0 -23
  393. package/dist/channels/http.js +0 -57
  394. package/dist/channels/lark/scaffold/channel.websocket.ts +0 -31
  395. package/dist/channels/slack/context-buffer.d.ts +0 -23
  396. package/dist/channels/slack/context-buffer.js +0 -37
  397. package/dist/channels/sse.d.ts +0 -4
  398. package/dist/channels/sse.js +0 -66
  399. package/dist/cli/commands/chat.d.ts +0 -3
  400. package/dist/cli/commands/chat.js +0 -14
  401. package/dist/cli/commands/routine-run.d.ts +0 -6
  402. package/dist/cli/commands/routine-run.js +0 -46
  403. package/dist/cli/commands/routine.d.ts +0 -25
  404. package/dist/cli/commands/routine.js +0 -122
  405. package/dist/cli/commands/tool.d.ts +0 -1
  406. package/dist/cli/commands/tool.js +0 -57
  407. package/dist/collect.d.ts +0 -63
  408. package/dist/collect.js +0 -90
  409. package/dist/core.d.ts +0 -13
  410. package/dist/core.js +0 -15
  411. package/dist/engines/pi/agent-models.d.ts +0 -83
  412. package/dist/engines/pi/agent-models.js +0 -120
  413. package/dist/engines/pi/agent-session-factory.d.ts +0 -121
  414. package/dist/engines/pi/agent-session-factory.js +0 -535
  415. package/dist/engines/pi/chat.d.ts +0 -3
  416. package/dist/engines/pi/chat.js +0 -8
  417. package/dist/engines/pi/config.d.ts +0 -71
  418. package/dist/engines/pi/config.js +0 -199
  419. package/dist/engines/pi/create.d.ts +0 -170
  420. package/dist/engines/pi/create.js +0 -343
  421. package/dist/engines/pi/definition.d.ts +0 -74
  422. package/dist/engines/pi/definition.js +0 -236
  423. package/dist/engines/pi/entry-images.d.ts +0 -14
  424. package/dist/engines/pi/entry-images.js +0 -23
  425. package/dist/engines/pi/invoke-session.d.ts +0 -18
  426. package/dist/engines/pi/invoke-session.js +0 -403
  427. package/dist/engines/pi/locked-file.d.ts +0 -9
  428. package/dist/engines/pi/login.js +0 -331
  429. package/dist/engines/pi/machine.d.ts +0 -53
  430. package/dist/engines/pi/machine.js +0 -137
  431. package/dist/engines/pi/models.d.ts +0 -200
  432. package/dist/engines/pi/models.js +0 -533
  433. package/dist/engines/pi/open.d.ts +0 -180
  434. package/dist/engines/pi/open.js +0 -270
  435. package/dist/engines/pi/openai-account-models.d.ts +0 -35
  436. package/dist/engines/pi/openai-account-models.js +0 -116
  437. package/dist/engines/pi/report.d.ts +0 -18
  438. package/dist/engines/pi/report.js +0 -59
  439. package/dist/engines/pi/retry-event.d.ts +0 -6
  440. package/dist/engines/pi/retry-event.js +0 -15
  441. package/dist/engines/pi/service.d.ts +0 -9
  442. package/dist/engines/pi/service.js +0 -14
  443. package/dist/engines/pi/session-builder.d.ts +0 -13
  444. package/dist/engines/pi/session-builder.js +0 -117
  445. package/dist/engines/pi/session-control.d.ts +0 -77
  446. package/dist/engines/pi/session-control.js +0 -908
  447. package/dist/engines/pi/session-effects.d.ts +0 -14
  448. package/dist/engines/pi/session-effects.js +0 -30
  449. package/dist/engines/pi/session-inheritance.d.ts +0 -21
  450. package/dist/engines/pi/session-inheritance.js +0 -204
  451. package/dist/engines/pi/session-markers.d.ts +0 -49
  452. package/dist/engines/pi/session-markers.js +0 -60
  453. package/dist/engines/pi/session-settings.d.ts +0 -67
  454. package/dist/engines/pi/session-settings.js +0 -119
  455. package/dist/engines/pi/session-store.d.ts +0 -69
  456. package/dist/engines/pi/session-store.js +0 -430
  457. package/dist/engines/pi/tool-context.d.ts +0 -45
  458. package/dist/engines/pi/tool-context.js +0 -31
  459. package/dist/engines/pi/tool.d.ts +0 -99
  460. package/dist/engines/pi/tool.js +0 -118
  461. package/dist/engines/pi/turn-kit.d.ts +0 -92
  462. package/dist/engines/pi/turn-kit.js +0 -288
  463. package/dist/engines/pi/wake-tool.d.ts +0 -9
  464. package/dist/engines/pi/wake-tool.js +0 -92
  465. package/dist/loader.d.ts +0 -41
  466. package/dist/loader.js +0 -116
  467. package/dist/node.d.ts +0 -3
  468. package/dist/node.js +0 -4
  469. package/dist/observe.d.ts +0 -6
  470. package/dist/observe.js +0 -47
  471. package/dist/pi.d.ts +0 -25
  472. package/dist/pi.js +0 -15
  473. package/dist/scaffold/templates/APPEND_SYSTEM.md +0 -12
  474. package/dist/scaffold/templates/tools/fetch-url.ts +0 -25
  475. package/dist/schedule/discover.d.ts +0 -17
  476. package/dist/schedule/discover.js +0 -61
  477. package/dist/schedule/routine.d.ts +0 -43
  478. package/dist/schedule/routine.js +0 -32
  479. package/dist/schedule/run.d.ts +0 -55
  480. package/dist/schedule/run.js +0 -146
  481. package/dist/secrets-gate.d.ts +0 -32
  482. package/dist/secrets-gate.js +0 -33
  483. package/dist/session-remote.d.ts +0 -47
  484. package/dist/session-remote.js +0 -460
  485. package/dist/session.d.ts +0 -466
  486. package/dist/session.js +0 -57
  487. /package/dist/{channels/kit/state.d.ts → state-file.d.ts} +0 -0
@@ -0,0 +1,51 @@
1
+ import { type MissingRuntime } from "./declare.ts";
2
+ /** Every platform's package: an agent lists them all, so its lockfile has the image's too. */
3
+ export declare const MISE_PACKAGE_NAMES: readonly string[];
4
+ /**
5
+ * The agent's mise on this machine, or undefined when the agent has none installed. Found by its package, not by
6
+ * `node_modules/.bin/mise`: the platform packages all name that bin, and npm drops the link while it skips the
7
+ * other platforms' packages.
8
+ */
9
+ export declare function miseBinary(agentDir: string): string | undefined;
10
+ /**
11
+ * What every run of the agent's mise is given, here and in the image: no configuration file is read, so the packages
12
+ * are the arguments alone, and a runtime is installed from a prebuilt release or not at all (mise compiles python by
13
+ * default, and `all_compile`, already false, does not stop it). Given to these runs alone, never exported to the
14
+ * agent's processes: a mise the agent runs is the machine's.
15
+ */
16
+ export declare const MISE_ENVIRONMENT: Readonly<Record<string, string>>;
17
+ /** What mise is given for `packages`: each as `name@version`, here and in the image (container.ts). */
18
+ export declare function packageSpecs(packages: Record<string, string>): string[];
19
+ /**
20
+ * The agent's mise, added to its `package.json` first when it has none: for the commands an author runs to change the
21
+ * environment (`fastagent env`), never for one that runs the agent. A manifest that does not list FastAgent is
22
+ * refused: the mise would make it a code agent, whose image runs the FastAgent its `package.json` lists.
23
+ */
24
+ export declare function ensureMise(agentDir: string): Promise<string>;
25
+ /** What the packages need before they are installed: refusals, and a PyPI package's undeclared runtime. */
26
+ export interface PackageCheck {
27
+ /** Registry names that resolve to a backend FastAgent leaves out. */
28
+ refusals: string[];
29
+ runtime?: MissingRuntime;
30
+ }
31
+ /**
32
+ * Check `packages` against the backend each resolves to: a written one says it (`npm:prettier`), and mise resolves a
33
+ * registry name (`tokei` is `cargo:tokei`). A name mise does not know fails the check with what mise said.
34
+ */
35
+ export declare function checkPackages(agentDir: string, bin: string, packages: Record<string, string>): Promise<PackageCheck>;
36
+ /**
37
+ * Install `packages` here, each at the newest release its declared version allows. Those `newest` names (every one
38
+ * when it is `"all"`: `fastagent env install`) are given to mise whatever is installed, which installs a newer release
39
+ * where one is out; the rest only when nothing installed matches them, which `mise where` answers without the network,
40
+ * so a start whose packages are installed needs no network and keeps the versions it has. An install that matches may
41
+ * be another project's: mise's data directory is the machine's.
42
+ */
43
+ export declare function installPackages(agentDir: string, bin: string, packages: Record<string, string>, newest?: readonly string[] | "all", env?: NodeJS.ProcessEnv): Promise<void>;
44
+ /**
45
+ * The agent's declared environment, for a process that runs it: install the declared packages that have no install
46
+ * here yet, and answer the variables that put them first on the PATH of the commands the agent runs. mise runs in
47
+ * `env`, the agent's environment so far, and nothing is written into this process's: a process may run several agents.
48
+ * mise itself is not put on the PATH. An agent without packages borrows the machine's commands (no variables). Apt
49
+ * packages are the image's to install; one missing here is said, with how.
50
+ */
51
+ export declare function prepareEnvironment(agentDir: string, env: NodeJS.ProcessEnv): Promise<Record<string, string>>;
@@ -0,0 +1,272 @@
1
+ /**
2
+ * RUNNING an agent's environment with mise. The agent carries its own mise, as optional npm dependencies, one package
3
+ * per platform of which npm installs only this machine's: the author installs nothing, and the image's `npm ci`
4
+ * installs the same mise. mise is given the packages as arguments (`gh@2`), and never reads a configuration file: not
5
+ * the machine's, not an author's own `mise.toml`, not a parent directory's.
6
+ *
7
+ * Nothing is locked. Each place installs the newest release a declared version allows when it first needs a package,
8
+ * and keeps it: a process that runs the agent installs only what has no install matching it yet (the image installs
9
+ * every package when it is built), and `fastagent env install` installs the newest again.
10
+ */
11
+ import { spawn } from "node:child_process";
12
+ import { createRequire } from "node:module";
13
+ import { dirname, join, resolve } from "node:path";
14
+ import { loadEnvironment } from "../content/file.js";
15
+ import { log } from "../log.js";
16
+ import { detectRuntime, listsFastagent, readPackageJson } from "../runtime.js";
17
+ import { aptAdvice, missingAptPackages } from "./apt.js";
18
+ import { missingPythonRuntime, resolvedBackendRefusal, writtenBackend } from "./declare.js";
19
+ /** mise's npm package for each platform it publishes one for, by Node's `${platform}-${arch}`. */
20
+ const MISE_PACKAGES = {
21
+ "darwin-arm64": "@jdxcode/mise-darwin-arm64",
22
+ "darwin-x64": "@jdxcode/mise-darwin-x64",
23
+ "linux-arm64": "@jdxcode/mise-linux-arm64",
24
+ "linux-x64": "@jdxcode/mise-linux-x64",
25
+ };
26
+ /** Every platform's package: an agent lists them all, so its lockfile has the image's too. */
27
+ export const MISE_PACKAGE_NAMES = Object.values(MISE_PACKAGES);
28
+ /** A path no file can be at, for the mise configuration files an agent's environment must not read. */
29
+ const NO_FILE = "/dev/null/none.toml";
30
+ /** This machine's mise package; a platform mise publishes none for cannot run an environment. */
31
+ function platformPackage() {
32
+ const key = `${process.platform}-${process.arch}`;
33
+ const name = MISE_PACKAGES[key];
34
+ if (!name)
35
+ throw new Error(`an agent's environment does not run on ${key} yet: mise has no npm package for it`);
36
+ return name;
37
+ }
38
+ /**
39
+ * The agent's mise on this machine, or undefined when the agent has none installed. Found by its package, not by
40
+ * `node_modules/.bin/mise`: the platform packages all name that bin, and npm drops the link while it skips the
41
+ * other platforms' packages.
42
+ */
43
+ export function miseBinary(agentDir) {
44
+ const require = createRequire(join(resolve(agentDir), "package.json"));
45
+ try {
46
+ return join(dirname(require.resolve(`${platformPackage()}/package.json`)), "bin", "mise");
47
+ }
48
+ catch (error) {
49
+ if (error.code === "MODULE_NOT_FOUND")
50
+ return undefined;
51
+ throw error;
52
+ }
53
+ }
54
+ /**
55
+ * What every run of the agent's mise is given, here and in the image: no configuration file is read, so the packages
56
+ * are the arguments alone, and a runtime is installed from a prebuilt release or not at all (mise compiles python by
57
+ * default, and `all_compile`, already false, does not stop it). Given to these runs alone, never exported to the
58
+ * agent's processes: a mise the agent runs is the machine's.
59
+ */
60
+ export const MISE_ENVIRONMENT = {
61
+ MISE_GLOBAL_CONFIG_FILE: NO_FILE,
62
+ MISE_SYSTEM_CONFIG_FILE: NO_FILE,
63
+ // A path, not a name: mise looks for a file of the name given here in every directory up to the root.
64
+ MISE_OVERRIDE_CONFIG_FILENAMES: NO_FILE,
65
+ MISE_OVERRIDE_TOOL_VERSIONS_FILENAMES: NO_FILE,
66
+ MISE_PYTHON_COMPILE: "false",
67
+ MISE_NODE_COMPILE: "false",
68
+ MISE_RUBY_COMPILE: "false",
69
+ MISE_ERLANG_COMPILE: "false",
70
+ };
71
+ /** What mise is given for `packages`: each as `name@version`, here and in the image (container.ts). */
72
+ export function packageSpecs(packages) {
73
+ return Object.keys(packages).map((name) => specOf(name, packages));
74
+ }
75
+ /** How mise is given the package `name` of `packages`. */
76
+ function specOf(name, packages) {
77
+ return `${name}@${packages[name]}`;
78
+ }
79
+ /**
80
+ * Run the agent's mise with `args` in `cwd`, in `env` (this process's by default). Its errors go to this process's
81
+ * stderr unless `quiet` keeps them for the error, which then says what mise said; `capture` returns its stdout instead
82
+ * of passing it through.
83
+ */
84
+ function runMise(cwd, bin, args, options = {}) {
85
+ return new Promise((done, fail) => {
86
+ const child = spawn(bin, args, {
87
+ cwd,
88
+ env: { ...(options.env ?? process.env), ...MISE_ENVIRONMENT },
89
+ stdio: ["inherit", options.capture ? "pipe" : process.stderr, options.quiet ? "pipe" : "inherit"],
90
+ });
91
+ let stdout = "";
92
+ let stderr = "";
93
+ child.stdout?.setEncoding("utf8").on("data", (chunk) => {
94
+ stdout += chunk;
95
+ });
96
+ child.stderr?.setEncoding("utf8").on("data", (chunk) => {
97
+ stderr += chunk;
98
+ });
99
+ child.on("error", fail);
100
+ child.on("close", (code, signal) => {
101
+ if (code === 0)
102
+ return done(stdout);
103
+ const said = stderr.match(/ERROR\s+(.+)/)?.[1];
104
+ fail(new Error(`mise ${args.join(" ")} failed (${signal ?? `exit ${code}`})${said ? `: ${said}` : ""}`));
105
+ });
106
+ });
107
+ }
108
+ /**
109
+ * The command that puts mise into the agent: every platform's package, at the newest version, pinned. When
110
+ * `package.json` already lists it (a fresh clone), the dependencies are installed as they are, never upgraded.
111
+ */
112
+ async function addMiseCommand(agentDir) {
113
+ const pkg = await readPackageJson(agentDir);
114
+ const { runtime } = detectRuntime(agentDir, pkg);
115
+ if (platformPackage() in (pkg.optionalDependencies ?? {})) {
116
+ return runtime === "bun" ? ["bun", ["install"]] : ["npm", ["install", "--no-audit", "--no-fund"]];
117
+ }
118
+ const packages = MISE_PACKAGE_NAMES.map((name) => `${name}@latest`);
119
+ return runtime === "bun"
120
+ ? ["bun", ["add", "--optional", "--exact", ...packages]]
121
+ : ["npm", ["install", "--save-optional", "--save-exact", "--no-audit", "--no-fund", ...packages]];
122
+ }
123
+ /**
124
+ * The agent's mise, added to its `package.json` first when it has none: for the commands an author runs to change the
125
+ * environment (`fastagent env`), never for one that runs the agent. A manifest that does not list FastAgent is
126
+ * refused: the mise would make it a code agent, whose image runs the FastAgent its `package.json` lists.
127
+ */
128
+ export async function ensureMise(agentDir) {
129
+ const found = miseBinary(agentDir);
130
+ if (found)
131
+ return found;
132
+ if (!listsFastagent(await readPackageJson(agentDir))) {
133
+ throw new Error(`${join(agentDir, "package.json")} does not list @fastagent-sh/fastagent — the agent's mise is one of its ` +
134
+ `dependencies, and an agent with dependencies runs the FastAgent they list. Add it first: ` +
135
+ `\`npm install @fastagent-sh/fastagent\` in ${agentDir}`);
136
+ }
137
+ const [command, args] = await addMiseCommand(agentDir);
138
+ log.info(`[fastagent] installing the agent's mise: ${command} ${args.join(" ")}`);
139
+ await new Promise((done, fail) => {
140
+ const child = spawn(command, args, { cwd: agentDir, stdio: ["inherit", process.stderr, "inherit"] });
141
+ child.on("error", fail);
142
+ child.on("close", (code) => (code === 0 ? done() : fail(new Error(`${command} ${args[0]} failed (exit ${code})`))));
143
+ });
144
+ const added = miseBinary(agentDir);
145
+ if (!added)
146
+ throw new Error(`${command} ${args[0]} added mise to ${agentDir}, and it is still not installed`);
147
+ return added;
148
+ }
149
+ /**
150
+ * Check `packages` against the backend each resolves to: a written one says it (`npm:prettier`), and mise resolves a
151
+ * registry name (`tokei` is `cargo:tokei`). A name mise does not know fails the check with what mise said.
152
+ */
153
+ export async function checkPackages(agentDir, bin, packages) {
154
+ const kinds = new Map();
155
+ const refusals = [];
156
+ await Promise.all(Object.keys(packages).map(async (name) => {
157
+ const written = writtenBackend(name);
158
+ if (written)
159
+ return void kinds.set(name, written);
160
+ const out = await runMise(agentDir, bin, ["tool", name, "--json"], { capture: true, quiet: true });
161
+ const backend = JSON.parse(out).backend;
162
+ if (typeof backend !== "string")
163
+ throw new Error(`mise tool ${name} --json reported no backend`);
164
+ kinds.set(name, backend.split(":")[0] ?? backend);
165
+ const refusal = resolvedBackendRefusal(name, backend);
166
+ if (refusal)
167
+ refusals.push(refusal);
168
+ }));
169
+ const runtime = missingPythonRuntime(packages, kinds);
170
+ return { refusals: refusals.sort(), ...(runtime ? { runtime } : {}) };
171
+ }
172
+ /**
173
+ * Install `packages` here, each at the newest release its declared version allows. Those `newest` names (every one
174
+ * when it is `"all"`: `fastagent env install`) are given to mise whatever is installed, which installs a newer release
175
+ * where one is out; the rest only when nothing installed matches them, which `mise where` answers without the network,
176
+ * so a start whose packages are installed needs no network and keeps the versions it has. An install that matches may
177
+ * be another project's: mise's data directory is the machine's.
178
+ */
179
+ export async function installPackages(agentDir, bin, packages, newest = [], env = process.env) {
180
+ const names = Object.keys(packages);
181
+ const asked = names.filter((name) => newest === "all" || newest.includes(name));
182
+ const others = names.filter((name) => !asked.includes(name));
183
+ const installed = await Promise.all(
184
+ // A failed `where` is what mise says of a package with no install here; the install that follows reports any other
185
+ // reason it cannot be had.
186
+ others.map((name) => runMise(agentDir, bin, ["where", specOf(name, packages)], { capture: true, quiet: true, env }).then(() => true, () => false)));
187
+ const present = new Set(others.filter((_, i) => installed[i]));
188
+ const wanted = names.filter((name) => !present.has(name)).map((name) => specOf(name, packages));
189
+ if (wanted.length === 0)
190
+ return;
191
+ const installedSpecs = [...present].map((name) => specOf(name, packages));
192
+ // A package installs with the ones it needs (a PyPI one runs uv), which mise finds in the packages it is given or on
193
+ // the PATH. The installed ones go on the PATH: given as packages, mise would install a newer release of them.
194
+ await runInstall(agentDir, bin, wanted, {
195
+ ...env,
196
+ ...(installedSpecs.length > 0 ? await packagesEnvironment(agentDir, bin, installedSpecs, env) : {}),
197
+ });
198
+ }
199
+ /** What `mise env` puts in a process's environment for `specs`: the PATH their commands are on. */
200
+ async function packagesEnvironment(agentDir, bin, specs, env) {
201
+ return JSON.parse(await runMise(agentDir, bin, ["env", "--json", ...specs], { capture: true, env }));
202
+ }
203
+ /**
204
+ * The notice mise prints after installing a package no configuration file names, with the `mise use` it suggests: not
205
+ * the agent's way to a package, so it is not passed on.
206
+ */
207
+ const NOT_ACTIVATED = /installed but not activated|^To install and activate, run:|^\s+mise use /;
208
+ /**
209
+ * `mise install` of `specs`, in `env`. Its progress is passed on to this process's stderr as
210
+ * it comes, so a runtime that takes minutes is seen to; a failure carries what mise said, every line of it, since
211
+ * mise names the packages on its first line and the reason (a 404, a proxy, a rate limit) on the lines after.
212
+ */
213
+ function runInstall(agentDir, bin, specs, env) {
214
+ log.info(`[fastagent] installing the agent's packages: ${specs.join(", ")}`);
215
+ return new Promise((done, fail) => {
216
+ const child = spawn(bin, ["install", ...specs], {
217
+ cwd: agentDir,
218
+ env: { ...env, ...MISE_ENVIRONMENT },
219
+ stdio: ["inherit", process.stderr, "pipe"],
220
+ });
221
+ const said = [];
222
+ let partial = "";
223
+ child.stderr?.setEncoding("utf8").on("data", (chunk) => {
224
+ const lines = (partial + chunk).split("\n");
225
+ partial = lines.pop() ?? "";
226
+ for (const line of lines) {
227
+ if (NOT_ACTIVATED.test(line))
228
+ continue;
229
+ process.stderr.write(`${line}\n`);
230
+ said.push(line);
231
+ }
232
+ });
233
+ child.on("error", fail);
234
+ child.on("close", (code, signal) => {
235
+ if (partial !== "")
236
+ said.push(partial);
237
+ if (code === 0)
238
+ return done();
239
+ const reason = said
240
+ .slice(Math.max(0, said.findIndex((line) => /\bERROR\b/.test(line))))
241
+ .filter((line) => !/ERROR\s+(Version:|Run with --verbose)/.test(line))
242
+ .map((line) => line.replace(/^mise\s+ERROR\s+/, "").trim())
243
+ .filter((line) => line !== "");
244
+ fail(new Error(`mise install ${specs.join(" ")} failed (${signal ?? `exit ${code}`})${reason.length > 0 ? `: ${reason.join("; ")}` : ""}`));
245
+ });
246
+ });
247
+ }
248
+ /** What a process that runs the agent says when its environment has no mise to install it with. */
249
+ function missingMise(agentDir) {
250
+ return new Error(`context.json declares packages, and the agent has no mise installed — run \`fastagent env install\` in ${agentDir}`);
251
+ }
252
+ /**
253
+ * The agent's declared environment, for a process that runs it: install the declared packages that have no install
254
+ * here yet, and answer the variables that put them first on the PATH of the commands the agent runs. mise runs in
255
+ * `env`, the agent's environment so far, and nothing is written into this process's: a process may run several agents.
256
+ * mise itself is not put on the PATH. An agent without packages borrows the machine's commands (no variables). Apt
257
+ * packages are the image's to install; one missing here is said, with how.
258
+ */
259
+ export async function prepareEnvironment(agentDir, env) {
260
+ const declared = loadEnvironment(agentDir);
261
+ const missingApt = missingAptPackages(declared?.aptPackages ?? []);
262
+ if (missingApt && missingApt.length > 0)
263
+ log.warn(`[fastagent] ${aptAdvice(missingApt)}`);
264
+ const packages = declared?.packages ?? {};
265
+ if (Object.keys(packages).length === 0)
266
+ return {};
267
+ const bin = miseBinary(agentDir);
268
+ if (!bin)
269
+ throw missingMise(agentDir);
270
+ await installPackages(agentDir, bin, packages, [], env);
271
+ return packagesEnvironment(agentDir, bin, packageSpecs(packages), env);
272
+ }
package/dist/feishu.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  /** `@fastagent-sh/fastagent/feishu` — the canonical Feishu (open.feishu.cn) bot-channel surface. */
2
- export { feishuChannel, feishuWebSocketChannel, defaultFeishuRoute, feishuEnvelope, type FeishuChannelOptions, type FeishuWebSocketChannelOptions, type FeishuMessageEvent, type FeishuMessage, type FeishuRoute, type FeishuFailure, } from "./channels/feishu/feishu.ts";
3
- export { feishuTransport, type FeishuTransport } from "./channels/feishu/shared-api.ts";
2
+ export { feishuChannel, feishuIngress, feishuWebSocketChannel, defaultFeishuRoute, feishuEnvelope, type FeishuChannelOptions, type FeishuWebSocketChannelOptions, type FeishuMessageEvent, type FeishuMessage, type FeishuRoute, type FeishuFailure, } from "./channels/feishu/feishu.ts";
3
+ export { feishuThreads, feishuTransport, type FeishuTransport } from "./channels/feishu/shared-api.ts";
package/dist/feishu.js CHANGED
@@ -1,3 +1,3 @@
1
1
  /** `@fastagent-sh/fastagent/feishu` — the canonical Feishu (open.feishu.cn) bot-channel surface. */
2
- export { feishuChannel, feishuWebSocketChannel, defaultFeishuRoute, feishuEnvelope, } from "./channels/feishu/feishu.js";
3
- export { feishuTransport } from "./channels/feishu/shared-api.js";
2
+ export { feishuChannel, feishuIngress, feishuWebSocketChannel, defaultFeishuRoute, feishuEnvelope, } from "./channels/feishu/feishu.js";
3
+ export { feishuThreads, feishuTransport } from "./channels/feishu/shared-api.js";
package/dist/git.d.ts ADDED
@@ -0,0 +1,13 @@
1
+ /** git is not on the PATH. Its message names what needed it: `git is not installed: <why>`. */
2
+ export declare class GitNotInstalled extends Error {
3
+ }
4
+ /** git for one purpose, `why`: what a missing git is reported as needed for. It runs in `env`. */
5
+ export declare function gitFor(why: string, env?: NodeJS.ProcessEnv): {
6
+ /**
7
+ * git's answer in `cwd` (which must exist), or undefined when it answers with a non-zero exit. A git that cannot
8
+ * run is an error.
9
+ */
10
+ answer(args: string[], cwd: string): string | undefined;
11
+ /** Run git in `cwd`: its output, or its stderr as the error. */
12
+ run(args: string[], cwd: string): Promise<string>;
13
+ };
package/dist/git.js ADDED
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Running git, and what ONE result means: an answer, a "no" (a non-zero exit: not a checkout, no such ref, not
3
+ * ignored), or a git that cannot run at all. Every caller reads git through here, so a new kind of result is decided
4
+ * once; each caller says only why it needed git, which is what a missing git is reported with.
5
+ */
6
+ import { execFile, execFileSync } from "node:child_process";
7
+ import { promisify } from "node:util";
8
+ /** git is not on the PATH. Its message names what needed it: `git is not installed: <why>`. */
9
+ export class GitNotInstalled extends Error {
10
+ }
11
+ /**
12
+ * Never wait on a terminal prompt for a credential: a serving process has nobody to answer it, so git fails and says
13
+ * why instead. Not covered by a test: it takes a remote that asks for a credential.
14
+ */
15
+ const gitEnv = (env) => ({ ...env, GIT_TERMINAL_PROMPT: "0" });
16
+ const execGit = promisify(execFile);
17
+ /** git for one purpose, `why`: what a missing git is reported as needed for. It runs in `env`. */
18
+ export function gitFor(why, env = process.env) {
19
+ const missing = () => new GitNotInstalled(`git is not installed: ${why}`);
20
+ return {
21
+ /**
22
+ * git's answer in `cwd` (which must exist), or undefined when it answers with a non-zero exit. A git that cannot
23
+ * run is an error.
24
+ */
25
+ answer(args, cwd) {
26
+ try {
27
+ return execFileSync("git", args, {
28
+ cwd,
29
+ env: gitEnv(env),
30
+ encoding: "utf8",
31
+ stdio: ["ignore", "pipe", "pipe"],
32
+ }).trim();
33
+ }
34
+ catch (error) {
35
+ if (error.code === "ENOENT")
36
+ throw missing();
37
+ if (typeof error.status === "number")
38
+ return undefined;
39
+ throw error;
40
+ }
41
+ },
42
+ /** Run git in `cwd`: its output, or its stderr as the error. */
43
+ async run(args, cwd) {
44
+ try {
45
+ return (await execGit("git", args, { cwd, env: gitEnv(env) })).stdout;
46
+ }
47
+ catch (error) {
48
+ if (error.code === "ENOENT")
49
+ throw missing();
50
+ const stderr = String(error.stderr ?? "").trim();
51
+ throw new Error(stderr || error.message);
52
+ }
53
+ },
54
+ };
55
+ }
@@ -0,0 +1,20 @@
1
+ import { type Models, type ModelsStore, type Provider } from "@earendil-works/pi-ai";
2
+ export interface Catalogs {
3
+ /** A built-in provider, listing what the published catalog adds to it; one that fetches its own list, as it is. */
4
+ over(provider: Provider): Provider;
5
+ /** Where pi-ai keeps the list of a provider that fetches its own. */
6
+ fetched: ModelsStore;
7
+ /**
8
+ * Bring the lists of `models` (built over {@link over} and {@link fetched}) up to date: the kept ones, then, unless
9
+ * {@link OFFLINE_VARIABLE} is set, what the network has newer. Never rejects: resolves with why a list is not
10
+ * current, when one is not.
11
+ */
12
+ refresh(models: Models, options?: {
13
+ force?: boolean;
14
+ }): Promise<string | undefined>;
15
+ }
16
+ /** The catalogs kept in `dir`, or, without one, for this process alone. `url` and `timeoutMs` are for tests. */
17
+ export declare function catalogsIn(dir: string | undefined, options?: {
18
+ url?: string;
19
+ timeoutMs?: number;
20
+ }): Catalogs;