@fased/fased 0.1.55 → 0.1.56

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 (453) hide show
  1. package/config/capability-catalog.json +12 -0
  2. package/dist/acp/client.js +2 -2
  3. package/dist/acp/secret-file.js +2 -2
  4. package/dist/agents/agent-scope.js +2 -2
  5. package/dist/agents/apply-patch.js +8 -8
  6. package/dist/agents/auth-profiles/paths.js +2 -2
  7. package/dist/agents/auth-profiles/store.js +2 -2
  8. package/dist/agents/authenticated-model-catalog.js +3 -2
  9. package/dist/agents/bash-tools.exec-host-node.js +1 -1
  10. package/dist/agents/bash-tools.exec.js +1 -1
  11. package/dist/agents/bash-tools.shared.js +2 -2
  12. package/dist/agents/cli-credentials.js +4 -4
  13. package/dist/agents/copilot-dynamic-headers.js +37 -0
  14. package/dist/agents/current-model-catalog.js +6 -3
  15. package/dist/agents/docs-path.js +3 -3
  16. package/dist/agents/embedded-pi-mcp.js +4 -4
  17. package/dist/agents/identity-avatar.js +3 -3
  18. package/dist/agents/identity-file.js +2 -2
  19. package/dist/agents/model-catalog-source.js +2 -2
  20. package/dist/agents/model-catalog.js +1 -1
  21. package/dist/agents/model-metadata.js +34 -6
  22. package/dist/agents/openai-codex-app-server.js +499 -0
  23. package/dist/agents/pi-embedded-runner/compact.js +3 -3
  24. package/dist/agents/pi-embedded-runner/extra-params.js +159 -95
  25. package/dist/agents/pi-embedded-runner/model.js +62 -1
  26. package/dist/agents/pi-embedded-runner/moonshot-stream-wrappers.js +46 -0
  27. package/dist/agents/pi-embedded-runner/openai-stream-wrappers.js +221 -0
  28. package/dist/agents/pi-embedded-runner/run/attempt.js +6 -4
  29. package/dist/agents/pi-embedded-runner/run.js +5 -2
  30. package/dist/agents/pi-embedded-runner/utils.js +1 -1
  31. package/dist/agents/pi-embedded-runner.js +1 -1
  32. package/dist/agents/pi-embedded-subscribe.raw-stream.js +3 -3
  33. package/dist/agents/pi-extensions/compaction-safeguard.js +3 -3
  34. package/dist/agents/pi-model-discovery.js +6 -6
  35. package/dist/agents/pi-project-settings.js +3 -3
  36. package/dist/agents/pi-tools.js +2 -2
  37. package/dist/agents/sandbox/fs-bridge.js +2 -2
  38. package/dist/agents/session-dirs.js +4 -4
  39. package/dist/agents/session-write-lock.js +13 -13
  40. package/dist/agents/shell-utils.js +5 -5
  41. package/dist/agents/skills/bundled-dir.js +4 -4
  42. package/dist/agents/skills/local-loader.js +6 -6
  43. package/dist/agents/skills/plugin-skills.js +2 -2
  44. package/dist/agents/skills/workspace.js +13 -13
  45. package/dist/agents/skills-install-download.js +7 -7
  46. package/dist/agents/skills-install-plan.js +2 -2
  47. package/dist/agents/skills-install.js +2 -2
  48. package/dist/agents/skills-status.js +2 -2
  49. package/dist/agents/subagent-depth.js +2 -2
  50. package/dist/agents/system-prompt-params.js +2 -2
  51. package/dist/agents/tools/discord-actions-messaging.js +1 -1
  52. package/dist/agents/tools/message-tool.js +1 -1
  53. package/dist/agents/tools/session-status-tool.js +3 -3
  54. package/dist/agents/tools/slack-actions.js +1 -1
  55. package/dist/agents/tools/tts-tool.js +1 -1
  56. package/dist/agents/workspace.js +22 -22
  57. package/dist/auto-reply/reply/agent-runner-execution.js +2 -2
  58. package/dist/auto-reply/reply/agent-runner.js +2 -2
  59. package/dist/auto-reply/reply/commands-export-session.js +7 -7
  60. package/dist/auto-reply/reply/commands-models.js +1 -1
  61. package/dist/auto-reply/reply/directive-handling.impl.js +4 -1
  62. package/dist/auto-reply/reply/dispatch-acp.js +1 -1
  63. package/dist/auto-reply/reply/dispatch-from-config.js +1 -1
  64. package/dist/auto-reply/reply/get-reply-run.js +20 -2
  65. package/dist/auto-reply/reply/model-selection.js +1 -1
  66. package/dist/auto-reply/reply/post-compaction-audit.js +3 -3
  67. package/dist/auto-reply/reply/post-compaction-context.js +3 -3
  68. package/dist/auto-reply/reply/session-reset-model.js +1 -1
  69. package/dist/auto-reply/reply/session.js +3 -3
  70. package/dist/auto-reply/skill-commands.js +3 -3
  71. package/dist/auto-reply/status.js +7 -7
  72. package/dist/auto-reply/thinking.js +1 -1
  73. package/dist/brand.js +1 -1
  74. package/dist/browser/cdp.helpers.js +2 -2
  75. package/dist/browser/chrome.executables.js +3 -3
  76. package/dist/browser/chrome.js +5 -5
  77. package/dist/browser/chrome.profile-decoration.js +6 -6
  78. package/dist/browser/extension-relay.js +7 -7
  79. package/dist/browser/profiles-service.js +2 -2
  80. package/dist/browser/server-context.js +2 -2
  81. package/dist/browser/trash.js +4 -4
  82. package/dist/build-info.json +3 -3
  83. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  84. package/dist/canvas-host/server.js +4 -4
  85. package/dist/capabilities/catalog.js +3 -3
  86. package/dist/channels/plugins/catalog.js +3 -3
  87. package/dist/cli/browser-cli-extension.js +6 -6
  88. package/dist/cli/command-format.js +2 -2
  89. package/dist/cli/cron-cli/register.cron-add.js +1 -1
  90. package/dist/cli/cron-cli/register.cron-simple.js +2 -2
  91. package/dist/cli/dns-cli.js +9 -9
  92. package/dist/cli/gateway-cli/dev.js +5 -5
  93. package/dist/cli/gateway-cli/run.js +2 -2
  94. package/dist/cli/hooks-cli.js +5 -5
  95. package/dist/cli/lightweight/gateway-runtime-probe.js +2 -2
  96. package/dist/cli/memory-cli.js +7 -7
  97. package/dist/cli/nodes-media-utils.js +2 -2
  98. package/dist/cli/plugins-cli.js +2 -2
  99. package/dist/cli/program/register.agent.js +1 -1
  100. package/dist/cli/secrets-cli.js +3 -3
  101. package/dist/cli/windows-argv.js +2 -2
  102. package/dist/commands/agent.js +22 -3
  103. package/dist/commands/dashboard-link.js +3 -3
  104. package/dist/commands/doctor-config-flow.js +1 -1
  105. package/dist/commands/doctor-install.js +5 -5
  106. package/dist/commands/doctor-memory-search.js +2 -2
  107. package/dist/commands/doctor-platform-notes.js +2 -2
  108. package/dist/commands/doctor-sandbox.js +2 -2
  109. package/dist/commands/doctor-state-integrity.js +23 -23
  110. package/dist/commands/doctor-workspace.js +3 -3
  111. package/dist/commands/doctor.js +3 -3
  112. package/dist/commands/hosted-dashboard-probe.js +3 -3
  113. package/dist/commands/managed-up.js +2 -2
  114. package/dist/commands/model-picker.js +4 -3
  115. package/dist/commands/models/list.probe.js +1 -1
  116. package/dist/commands/models/list.registry.js +3 -2
  117. package/dist/commands/models/list.status-command.js +2 -2
  118. package/dist/commands/onboard-auth.credentials.js +3 -3
  119. package/dist/commands/onboarding/plugin-install.js +2 -2
  120. package/dist/commands/openai-codex-model-default.js +3 -2
  121. package/dist/commands/sessions-cleanup.js +2 -2
  122. package/dist/commands/signal-install.js +6 -6
  123. package/dist/commands/status-all/channels.js +2 -2
  124. package/dist/commands/wallet.js +47 -47
  125. package/dist/config/cache-utils.js +2 -2
  126. package/dist/config/includes.js +5 -5
  127. package/dist/config/io.js +2 -2
  128. package/dist/config/paths.js +3 -3
  129. package/dist/config/sat-runtime-ids.js +3 -3
  130. package/dist/config/sessions/disk-budget.js +6 -6
  131. package/dist/config/sessions/paths.js +2 -2
  132. package/dist/config/sessions/store.js +17 -17
  133. package/dist/config/sessions/transcript.js +4 -4
  134. package/dist/config/talk.js +2 -2
  135. package/dist/config/zod-schema.agent-defaults.js +4 -2
  136. package/dist/config/zod-schema.agent-runtime.js +4 -2
  137. package/dist/config/zod-schema.core.js +4 -2
  138. package/dist/control-ui/assets/{app-D2RaTXoV.js → app-D7TXyNRi.js} +390 -383
  139. package/dist/control-ui/assets/chat-model-ref-Djkv93yn.js +2 -0
  140. package/dist/control-ui/assets/{index-D2nC6I-9.js → index-BmSBom-w.js} +3 -3
  141. package/dist/control-ui/assets/{providers-CyjiG5Jw.js → providers-Cc89iMdx.js} +3 -3
  142. package/dist/control-ui/index.html +1 -1
  143. package/dist/control-ui/version.json +1 -1
  144. package/dist/cron/isolated-agent/run.js +6 -2
  145. package/dist/cron/service/jobs.js +11 -1
  146. package/dist/cron/service/store.js +2 -2
  147. package/dist/cron/store.js +6 -6
  148. package/dist/daemon/systemd-system.js +5 -5
  149. package/dist/discord/monitor/gateway-plugin.js +2 -2
  150. package/dist/discord/monitor/thread-bindings.state.js +2 -2
  151. package/dist/discord/voice/manager.js +1 -1
  152. package/dist/extensions/sat-mining/src/sat-bond-layout.js +9 -9
  153. package/dist/gateway/client.js +4 -4
  154. package/dist/gateway/control-ui-boot-check.js +6 -6
  155. package/dist/gateway/control-ui-login.js +7 -7
  156. package/dist/gateway/control-ui.js +9 -9
  157. package/dist/gateway/hooks-mapping.js +4 -4
  158. package/dist/gateway/protocol/schema/agents-models-skills.js +63 -4
  159. package/dist/gateway/server-discovery.js +2 -2
  160. package/dist/gateway/server-http.js +4 -4
  161. package/dist/gateway/server-methods/chat.js +3 -3
  162. package/dist/gateway/server-methods/models.js +4 -3
  163. package/dist/gateway/server-methods/sessions.js +8 -8
  164. package/dist/gateway/server-methods/tts.js +2 -2
  165. package/dist/gateway/server-methods/usage.js +2 -2
  166. package/dist/gateway/server-model-catalog.js +1 -1
  167. package/dist/gateway/server.impl.js +3 -3
  168. package/dist/gateway/session-compaction-checkpoints.js +4 -4
  169. package/dist/gateway/session-utils.fs.js +24 -24
  170. package/dist/gateway/session-utils.js +6 -6
  171. package/dist/gateway/sessions-patch.js +27 -24
  172. package/dist/hooks/bundled-dir.js +4 -4
  173. package/dist/hooks/gmail-setup-utils.js +6 -6
  174. package/dist/hooks/import-url.js +2 -2
  175. package/dist/hooks/loader.js +4 -4
  176. package/dist/hooks/workspace.js +7 -7
  177. package/dist/infra/archive.js +17 -17
  178. package/dist/infra/boundary-file-read.js +2 -2
  179. package/dist/infra/boundary-path.js +15 -15
  180. package/dist/infra/brew.js +2 -2
  181. package/dist/infra/control-ui-assets.js +14 -14
  182. package/dist/infra/device-auth-store.js +8 -8
  183. package/dist/infra/device-identity.js +8 -8
  184. package/dist/infra/dotenv.js +2 -2
  185. package/dist/infra/exec-approvals.js +8 -8
  186. package/dist/infra/exec-command-resolution.js +4 -4
  187. package/dist/infra/exec-safe-bin-trust.js +2 -2
  188. package/dist/infra/fased-root.js +5 -5
  189. package/dist/infra/fs-safe.js +14 -14
  190. package/dist/infra/gateway-lock.js +11 -11
  191. package/dist/infra/git-commit.js +5 -5
  192. package/dist/infra/git-root.js +4 -4
  193. package/dist/infra/hosted-runtime-artifact.js +3 -3
  194. package/dist/infra/is-main.js +2 -2
  195. package/dist/infra/json-file.js +7 -7
  196. package/dist/infra/outbound/delivery-queue.js +16 -16
  197. package/dist/infra/path-env.js +3 -3
  198. package/dist/infra/ports-lsof.js +4 -4
  199. package/dist/infra/provider-usage.auth.js +3 -3
  200. package/dist/infra/safe-open-sync.js +2 -2
  201. package/dist/infra/session-cost-usage.js +9 -9
  202. package/dist/infra/shell-env.js +2 -2
  203. package/dist/infra/state-migrations.fs.js +6 -6
  204. package/dist/infra/state-migrations.js +23 -23
  205. package/dist/infra/tmp-fased-dir.js +6 -6
  206. package/dist/infra/widearea-dns.js +3 -3
  207. package/dist/infra/wsl.js +2 -2
  208. package/dist/light-update-status.js +11 -11
  209. package/dist/line/accounts.js +2 -2
  210. package/dist/line/download.js +2 -2
  211. package/dist/logging/config.js +3 -3
  212. package/dist/logging/logger.js +7 -7
  213. package/dist/managed/federation.js +3 -3
  214. package/dist/managed/tunnel.js +3 -3
  215. package/dist/media/store.js +13 -13
  216. package/dist/media-understanding/runner.js +3 -3
  217. package/dist/memory/embeddings.js +2 -2
  218. package/dist/memory/internal.js +10 -10
  219. package/dist/memory/manager-sync-ops.js +7 -7
  220. package/dist/memory/repair-executor.js +17 -17
  221. package/dist/node-host/invoke-system-run-plan.js +8 -8
  222. package/dist/node-host/invoke.js +2 -2
  223. package/dist/node-host/runner.js +3 -3
  224. package/dist/pairing/pairing-store.js +3 -3
  225. package/dist/plugin-sdk/{accounts-CeRNo5Ae.js → accounts-DzWlKv1U.js} +1 -1
  226. package/dist/plugin-sdk/{actions-OMRHtXPj.js → actions-BplQVLL6.js} +4 -4
  227. package/dist/plugin-sdk/{active-listener-BlIkS3iR.js → active-listener-x4MLhYUw.js} +1 -1
  228. package/dist/plugin-sdk/{allow-list-BYeKk0Sy.js → allow-list-DyAxs4yw.js} +1 -1
  229. package/dist/plugin-sdk/{audio-preflight-B2n3a2Tj.js → audio-preflight-G8h3Sn8_.js} +43 -47
  230. package/dist/plugin-sdk/{audit-Ppg6dR_b.js → audit-CWknklvI.js} +1 -1
  231. package/dist/plugin-sdk/{channel-access-af8dWWRv.js → channel-access-a9Dnfw7-.js} +1 -1
  232. package/dist/plugin-sdk/{channel-access-configure-B6IAGlE0.js → channel-access-configure-CD4QDN5E.js} +1 -1
  233. package/dist/plugin-sdk/{channel-adapters.discord-IOZP8Cv5.js → channel-adapters.discord-BS4S4Svh.js} +1 -1
  234. package/dist/plugin-sdk/channel-plugin-common.d.ts +3 -3
  235. package/dist/plugin-sdk/channel-plugin-common.js +4 -4
  236. package/dist/plugin-sdk/{chunk-CD76Byie.js → chunk-B8EZkwiT.js} +1 -1
  237. package/dist/plugin-sdk/{chunk-items-Bu19zrYH.js → chunk-items-CEPklxGe.js} +1 -1
  238. package/dist/plugin-sdk/command-status.d.ts +2 -2
  239. package/dist/plugin-sdk/command-status.js +43 -47
  240. package/dist/plugin-sdk/{commands-registry-DgS55tNj.js → commands-registry-BfEa4tFA.js} +2 -2
  241. package/dist/plugin-sdk/{common-CWvfeiX0.js → common-CbfckC19.js} +1 -1
  242. package/dist/plugin-sdk/{config-CYDETqcF.js → config-Bt5GhnA-.js} +29 -15
  243. package/dist/plugin-sdk/{config-schema-CQ4EVcQG.js → config-schema-B9DKr6J5.js} +95877 -81287
  244. package/dist/plugin-sdk/device-pair.d.ts +1 -1
  245. package/dist/plugin-sdk/device-pair.js +2 -3
  246. package/dist/plugin-sdk/{diagnostic-Dfn1iERm.js → diagnostic-DLL_zekv.js} +3 -3
  247. package/dist/plugin-sdk/{directory-live-DatqU-eS.js → directory-live-CSuYxdwk.js} +1 -1
  248. package/dist/plugin-sdk/{directory-live-ClwN5KKq.js → directory-live-Dw7ZgC9_.js} +1 -1
  249. package/dist/plugin-sdk/discord.d.ts +5 -5
  250. package/dist/plugin-sdk/discord.js +31 -32
  251. package/dist/plugin-sdk/{draft-stream-controls-D4Tb_iS_.js → draft-stream-controls-BqchW1vi.js} +1 -1
  252. package/dist/plugin-sdk/{fetch-guard-BuYrl6q2.js → fetch-guard-CeG6u6ld.js} +1 -1
  253. package/dist/plugin-sdk/{filesystem-manager-B9DDPgfU.js → filesystem-manager-BGGGrkiN.js} +2 -2
  254. package/dist/plugin-sdk/{fs-safe-BG-VzVkL.js → fs-safe-xBqok6yR.js} +1 -1
  255. package/dist/plugin-sdk/{group-mentions-BxDgHCgj.d.ts → group-mentions-BHRff6j8.d.ts} +1 -1
  256. package/dist/plugin-sdk/{guilds-BeT3iHHJ.js → guilds-CDhRIX57.js} +1 -1
  257. package/dist/plugin-sdk/{handle-action-B75UVKxF.js → handle-action-DbzZFYnG.js} +24 -25
  258. package/dist/plugin-sdk/{helpers-BuEwju6y.js → helpers-CluGKuIV.js} +1 -1
  259. package/dist/plugin-sdk/{image-ops-C66HPeAZ.js → image-ops-CUaLtIFj.js} +1 -1
  260. package/dist/plugin-sdk/index.d.ts +7 -7
  261. package/dist/plugin-sdk/index.js +47 -51
  262. package/dist/plugin-sdk/json-store.js +6 -6
  263. package/dist/plugin-sdk/{login-Amr2DpKU.js → login-DJuHYDiK.js} +3 -3
  264. package/dist/plugin-sdk/{login-qr-DMQNEi9m.js → login-qr-CbHL5ayf.js} +3 -3
  265. package/dist/plugin-sdk/{manager-Bvpq49BI.js → manager-oHAvZCT3.js} +7 -7
  266. package/dist/plugin-sdk/{markdown-tables-DmQ7oXOm.js → markdown-tables-Mkx7k92Y.js} +1 -1
  267. package/dist/plugin-sdk/{media-ByLQbEwJ.js → media-CA8sTmVE.js} +4 -4
  268. package/dist/plugin-sdk/{monitor-K_u6daGa.js → monitor-CZrN9pev.js} +51 -55
  269. package/dist/plugin-sdk/{monitor-S_7LrvSj.js → monitor-CmwGqNyV.js} +61 -65
  270. package/dist/plugin-sdk/{openresponses-http-BrDJUZXR.js → openresponses-http-CWOd4war.js} +43 -47
  271. package/dist/plugin-sdk/{optional-runtime-dependency-CbYjAC2b.js → optional-runtime-dependency-DKmk9PZa.js} +1 -1
  272. package/dist/plugin-sdk/{outbound-BuDafBBI.js → outbound-0oN9IfNw.js} +9 -9
  273. package/dist/plugin-sdk/{outbound-attachment-DmZmUqFP.js → outbound-attachment-DdVkqUzE.js} +2 -2
  274. package/dist/plugin-sdk/{pairing-message-D0-UWGFJ.d.ts → pairing-message-BMkkS038.d.ts} +2 -2
  275. package/dist/plugin-sdk/{pairing-message-e4D4eBDA.js → pairing-message-ClqhfCUk.js} +1 -1
  276. package/dist/plugin-sdk/{pairing-store-T3IGoGZg.js → pairing-store-B01mCSct.js} +2 -2
  277. package/dist/plugin-sdk/{pi-model-discovery-DvAG_Png.js → pi-model-discovery-Buz0JC1Y.js} +1 -1
  278. package/dist/plugin-sdk/{pi-model-discovery-runtime-NjkUgjIf.js → pi-model-discovery-runtime-DuwuoteY.js} +2 -2
  279. package/dist/plugin-sdk/{probe-Cyb-DGA3.js → probe--7xtfzMm.js} +3 -3
  280. package/dist/plugin-sdk/{probe-Dlk0Jxpw.js → probe-BFroeK3g.js} +1 -1
  281. package/dist/plugin-sdk/{probe-D8JAILir.js → probe-l_whvGLY.js} +1 -1
  282. package/dist/plugin-sdk/{resolve-channels-zEnvugag.js → probe-xY3Ky0Tx.js} +3 -4
  283. package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +2 -2
  284. package/dist/plugin-sdk/{pw-ai-D7eW43DL.js → pw-ai-B0domrii.js} +6 -8
  285. package/dist/plugin-sdk/{qmd-manager-DCUE21Kj.js → qmd-manager-CFFeM4Fl.js} +3 -3
  286. package/dist/plugin-sdk/{query-expansion-Zr9qQixm.js → query-expansion-CAI2kKLQ.js} +1 -1
  287. package/dist/plugin-sdk/{replies-BMIPmEoP.js → replies-1macZ1mZ.js} +4 -4
  288. package/dist/plugin-sdk/{resolve-channels-ChWKWtA9.js → resolve-channels-87LZrFk_.js} +2 -2
  289. package/dist/plugin-sdk/resolve-channels-CwB2_019.js +4 -0
  290. package/dist/plugin-sdk/{resolve-outbound-target-CXCqUUPV.js → resolve-outbound-target-BdH6LUoW.js} +2 -2
  291. package/dist/plugin-sdk/{resolve-route-DJN-SUSt.js → resolve-route-CkNIKKEW.js} +1 -1
  292. package/dist/plugin-sdk/{resolve-users-BTvjQuui.js → resolve-users-Cxb5wpAQ.js} +1 -1
  293. package/dist/plugin-sdk/{resolve-users-CTzoruIZ.js → resolve-users-V6dHh_2B.js} +2 -2
  294. package/dist/plugin-sdk/{retry-policy-CY1qY6d7.js → retry-policy-9ybIh4Fq.js} +1 -1
  295. package/dist/plugin-sdk/{runtime-CgOkQe0w.js → runtime-Dy420wBu.js} +3 -3
  296. package/dist/plugin-sdk/{runtime-dependency-DvdRNMvs.js → runtime-dependency-CIw9t7-k.js} +123 -15
  297. package/dist/plugin-sdk/{sandbox-paths-lj7_EVuA.js → sandbox-paths-w64tYl0v.js} +1 -1
  298. package/dist/plugin-sdk/sat-runtime.d.ts +3 -3
  299. package/dist/plugin-sdk/sat-runtime.js +44 -10
  300. package/dist/plugin-sdk/{send-BAz22RZr.js → send-2VcOMTN5.js} +9 -9
  301. package/dist/plugin-sdk/{send-2ITqny2W.js → send-BQUtCJFW.js} +10 -10
  302. package/dist/plugin-sdk/{send-Cr-dj6S-.js → send-DPJIIYAs.js} +6 -6
  303. package/dist/plugin-sdk/{send-BG3RWyil.js → send-Dqes9tdU.js} +13 -13
  304. package/dist/plugin-sdk/{send-eTxqFFsw.js → send-J4JWKP62.js} +8 -8
  305. package/dist/plugin-sdk/{session-C8nJmmVE.js → session-C_n2S5ub.js} +3 -3
  306. package/dist/plugin-sdk/{skill-commands-Rm5by9S8.js → skill-commands-B7wx9ax8.js} +102 -102
  307. package/dist/plugin-sdk/{slack-xvIVvyEM.js → slack-BouRQG-W.js} +64 -68
  308. package/dist/plugin-sdk/{slack-actions-BNIALJTA.js → slack-actions-CasHVtiq.js} +20 -21
  309. package/dist/plugin-sdk/slack.d.ts +5 -5
  310. package/dist/plugin-sdk/slack.js +13 -13
  311. package/dist/plugin-sdk/{ssrf-BZG8Ztod.js → ssrf-fG4UHKBw.js} +180 -2
  312. package/dist/plugin-sdk/{sticker-cache-D3oDiu2u.js → sticker-cache-BvGEUas3.js} +3 -3
  313. package/dist/plugin-sdk/{tables-DS5L7lCA.js → tables-CjlQJV4r.js} +2 -2
  314. package/dist/plugin-sdk/{device-pairing-D2Yq-_U6.js → tailscale-status-DwpNdO3Z.js} +104 -2
  315. package/dist/plugin-sdk/{targets-D6lUomJc.js → targets-QfP164Dh.js} +2 -2
  316. package/dist/plugin-sdk/{telegram-actions-MSFkDn0m.js → telegram-actions-CwYjV6Db.js} +48 -52
  317. package/dist/plugin-sdk/telegram.d.ts +5 -5
  318. package/dist/plugin-sdk/telegram.js +11 -11
  319. package/dist/plugin-sdk/{thread-bindings.lifecycle-Ry6Vcgw3.js → thread-bindings.lifecycle-DU4iX_Jr.js} +3 -3
  320. package/dist/plugin-sdk/{thread-bindings.state-C0stmvNk.js → thread-bindings.state-BgYWFjNF.js} +2 -2
  321. package/dist/plugin-sdk/{tmp-fased-dir-D91GExk4.d.ts → tmp-fased-dir-BdFQvrvw.d.ts} +2 -2
  322. package/dist/plugin-sdk/{types-DVTIpopt.d.ts → types-BYDL6dQj.d.ts} +2 -2
  323. package/dist/plugin-sdk/{types-DKvBJHfH.d.ts → types-CLIvQaVg.d.ts} +26 -1
  324. package/dist/plugin-sdk/{types-BzadOItY.d.ts → types-DyhXnYUr.d.ts} +1 -1
  325. package/dist/plugin-sdk/{types.plugin-BiHPaDTF.d.ts → types.plugin-_fbu40Re.d.ts} +7 -5
  326. package/dist/plugin-sdk/{web-DRNJxHXA.js → web-D0yENDve.js} +52 -56
  327. package/dist/plugin-sdk/{whatsapp-actions-BDXZF2R5.js → whatsapp-actions-BT2nPLyo.js} +18 -19
  328. package/dist/plugin-sdk/{whatsapp-heartbeat-CKgmwCGr.js → whatsapp-heartbeat-CiABSZ6G.js} +2 -2
  329. package/dist/plugin-sdk/whatsapp.d.ts +5 -5
  330. package/dist/plugin-sdk/whatsapp.js +14 -14
  331. package/dist/plugin-sdk/{wsl-Biw7Mj39.js → wsl-B_ojyEtC.js} +53 -53
  332. package/dist/plugins/bundled-dir.js +3 -3
  333. package/dist/plugins/discovery.js +11 -11
  334. package/dist/plugins/loader.js +13 -13
  335. package/dist/plugins/manifest-registry.js +2 -2
  336. package/dist/plugins/manifest.js +4 -4
  337. package/dist/plugins/path-safety.js +3 -3
  338. package/dist/plugins/runtime/index.js +1 -1
  339. package/dist/plugins/status-cache.js +9 -9
  340. package/dist/plugins/update.js +3 -3
  341. package/dist/plugins/web-search-install-catalog.js +3 -3
  342. package/dist/providers/github-copilot-model-discovery.js +51 -0
  343. package/dist/providers/openai-codex-model-discovery.js +166 -0
  344. package/dist/providers/refresh.js +116 -34
  345. package/dist/providers/registry.js +2 -2
  346. package/dist/providers/runtime-model-catalog.js +97 -28
  347. package/dist/secrets/apply.js +16 -16
  348. package/dist/secrets/audit.js +11 -11
  349. package/dist/secrets/shared.js +9 -9
  350. package/dist/security/scan-paths.js +2 -2
  351. package/dist/shared/config-eval.js +2 -2
  352. package/dist/shared/model-thinking.js +13 -2
  353. package/dist/shared/pid-alive.js +2 -2
  354. package/dist/tasks/standing-orders.js +5 -5
  355. package/dist/tasks/task-flow-registry.js +5 -5
  356. package/dist/tasks/task-registry.js +5 -5
  357. package/dist/tasks/workflow-definitions.js +6 -6
  358. package/dist/telegram/bot-message-context.js +1 -1
  359. package/dist/telegram/token.js +5 -5
  360. package/dist/utils.js +5 -5
  361. package/dist/wallet/local-socket-signer-broker.js +16 -16
  362. package/dist/wallet/providers/embedded-keystore-adapter.js +5 -5
  363. package/dist/wallet/providers/local-socket-signer-adapter.js +2 -2
  364. package/dist/wallet/wallet-approval-auth.js +5 -5
  365. package/dist/wallet/wallet-audit-log.js +5 -5
  366. package/dist/wallet/wallet-custody.js +21 -21
  367. package/dist/wallet/wallet-inbound-events.js +5 -5
  368. package/dist/wallet/wallet-observability.js +5 -5
  369. package/dist/wallet/wallet-policy.js +9 -9
  370. package/dist/wallet/wallet-provider-registry.js +7 -7
  371. package/dist/wallet/wallet-runtime-config.js +3 -3
  372. package/dist/wallet/wallet-secrets-store.js +22 -22
  373. package/dist/wallet/wallet-send-approvals.js +5 -5
  374. package/dist/wallet/wallet-settlement-links.js +5 -5
  375. package/dist/web/accounts.js +3 -3
  376. package/dist/web/auth-store.js +18 -18
  377. package/dist/web/session.js +4 -4
  378. package/dist/wizard/host-security-capability.js +2 -2
  379. package/dist/wizard/onboarding.host-security.js +7 -7
  380. package/dist/wizard/onboarding.js +7 -7
  381. package/dist/wizard/onboarding.wallet.js +44 -44
  382. package/extensions/acpx/package.json +1 -1
  383. package/extensions/bluebubbles/package.json +1 -1
  384. package/extensions/copilot-proxy/package.json +1 -1
  385. package/extensions/diagnostics-otel/package.json +1 -1
  386. package/extensions/fased-federation/package.json +1 -1
  387. package/extensions/google-gemini-cli-auth/package.json +1 -1
  388. package/extensions/imessage/package.json +1 -1
  389. package/extensions/irc/package.json +1 -1
  390. package/extensions/line/package.json +1 -1
  391. package/extensions/llm-task/package.json +1 -1
  392. package/extensions/lobster/package.json +1 -1
  393. package/extensions/matrix/CHANGELOG.md +6 -0
  394. package/extensions/matrix/package.json +1 -1
  395. package/extensions/mattermost/package.json +1 -1
  396. package/extensions/memory-core/package.json +2 -2
  397. package/extensions/memory-lancedb/package.json +1 -1
  398. package/extensions/minimax-portal-auth/package.json +1 -1
  399. package/extensions/msteams/CHANGELOG.md +6 -0
  400. package/extensions/msteams/package.json +1 -1
  401. package/extensions/nextcloud-talk/package.json +1 -1
  402. package/extensions/nostr/CHANGELOG.md +6 -0
  403. package/extensions/nostr/package.json +1 -1
  404. package/extensions/open-prose/package.json +1 -1
  405. package/extensions/sat-mining/package.json +1 -1
  406. package/extensions/signal/package.json +1 -1
  407. package/extensions/synology-chat/package.json +1 -1
  408. package/extensions/tlon/package.json +1 -1
  409. package/extensions/twitch/CHANGELOG.md +6 -0
  410. package/extensions/twitch/package.json +1 -1
  411. package/extensions/voice-call/CHANGELOG.md +6 -0
  412. package/extensions/voice-call/package.json +1 -1
  413. package/extensions/zalo/CHANGELOG.md +6 -0
  414. package/extensions/zalo/package.json +1 -1
  415. package/extensions/zalouser/CHANGELOG.md +6 -0
  416. package/extensions/zalouser/package.json +1 -1
  417. package/package.json +2 -1
  418. package/dist/control-ui/assets/chat-model-ref-BZFblCeY.js +0 -2
  419. package/dist/plugin-sdk/ip-C70a-YlD.js +0 -181
  420. package/dist/plugin-sdk/tailscale-status-ClsquRGs.js +0 -104
  421. package/dist/plugin-sdk/wallet-status-f0HagNeO.js +0 -11947
  422. package/dist/plugin-sdk/ws-CocpWGhl.js +0 -114
  423. /package/dist/plugin-sdk/{blocks-input-Dcitfh7h.js → blocks-input-Bg-8S2pl.js} +0 -0
  424. /package/dist/plugin-sdk/{channel-activity-Cg1xRoc2.js → channel-activity-DBDMQ3yI.js} +0 -0
  425. /package/dist/plugin-sdk/{channel-core-BOkyXXLa.js → channel-core-CFRs8LPy.js} +0 -0
  426. /package/dist/plugin-sdk/{client-D2N7hqVu.js → client-pI228AVT.js} +0 -0
  427. /package/dist/plugin-sdk/{command-poll-backoff-NAePk3eL.js → command-poll-backoff-yJU83wEq.js} +0 -0
  428. /package/dist/plugin-sdk/{date-time-CE3Uer3C.js → date-time-uUevHscU.js} +0 -0
  429. /package/dist/plugin-sdk/{diagnostic-session-state-HO94DMou.js → diagnostic-session-state-DqgfGYqZ.js} +0 -0
  430. /package/dist/plugin-sdk/{draft-stream-loop-CKyHn8IX.js → draft-stream-loop-CrOPfV3F.js} +0 -0
  431. /package/dist/plugin-sdk/{fetch-Cu-ahkie.js → fetch-BtmoPIlf.js} +0 -0
  432. /package/dist/plugin-sdk/{gateway-registry-DFsoY6C0.js → gateway-registry-DZDsqicG.js} +0 -0
  433. /package/dist/plugin-sdk/{inbound-context-BFnIdcqI.js → inbound-context-DrAcXE0y.js} +0 -0
  434. /package/dist/plugin-sdk/{internal-qo16nNU1.js → internal-CG_nHo-2.js} +0 -0
  435. /package/dist/plugin-sdk/{memory-search-C3C0bD2H.js → memory-search-VFll-AIb.js} +0 -0
  436. /package/dist/plugin-sdk/{pairing-token-N_6Jbt1L.js → pairing-token-Cs3BRKc0.js} +0 -0
  437. /package/dist/plugin-sdk/{path-alias-guards-Dg3gU-MA.js → path-alias-guards-BJZD5JMJ.js} +0 -0
  438. /package/dist/plugin-sdk/{polls-DQrR-qT3.js → polls-DKQXVfJp.js} +0 -0
  439. /package/dist/plugin-sdk/{proxy-7xs_rsnV.js → proxy-DWpYcsvR.js} +0 -0
  440. /package/dist/plugin-sdk/{qmd-scope-D1sSG_Rx.js → qmd-scope-CdX34VCV.js} +0 -0
  441. /package/dist/plugin-sdk/{redact-identifier-Q3tkvxhm.js → redact-identifier-Lt7t3l7S.js} +0 -0
  442. /package/dist/plugin-sdk/{redact-sensitive-url-dPvnFFsK.js → redact-sensitive-url-g-ukZjwA.js} +0 -0
  443. /package/dist/plugin-sdk/{render-Bwu_WxwA.js → render-e7fENCYH.js} +0 -0
  444. /package/dist/plugin-sdk/{reply-prefix-Bqzm6DC1.js → reply-prefix-ClpxvL_w.js} +0 -0
  445. /package/dist/plugin-sdk/{reply-reference-BkbK_DWT.js → reply-reference-Bqk-7HXE.js} +0 -0
  446. /package/dist/plugin-sdk/{secure-random-Bl-AVLVb.js → secure-random-BIkG-k4s.js} +0 -0
  447. /package/dist/plugin-sdk/{shared-clhhbWN3.js → shared-CBgp_GBw.js} +0 -0
  448. /package/dist/plugin-sdk/{target-errors-C_SVKoEv.js → target-errors-Ckufe179.js} +0 -0
  449. /package/dist/plugin-sdk/{targets-BDvvnlph.js → targets-CoMJ1ry1.js} +0 -0
  450. /package/dist/plugin-sdk/{tokens-BvtlOzVP.js → tokens-BbnqfVuu.js} +0 -0
  451. /package/dist/plugin-sdk/{tool-loop-detection-CWphm1k_.js → tool-loop-detection-Bp8bPJLs.js} +0 -0
  452. /package/dist/plugin-sdk/{ui-e020ouhJ.js → ui-Be8cLHIS.js} +0 -0
  453. /package/dist/plugin-sdk/{with-timeout-BYrRAYFV.js → with-timeout-ckWB8rTo.js} +0 -0
@@ -1,7 +1,7 @@
1
1
  import { openVerifiedFileSync } from "../../infra/safe-open-sync.js";
2
2
  import { parseFrontmatter, resolveSkillInvocationPolicy } from "./frontmatter.js";
3
3
  import { createSyntheticSourceInfo } from "./skill-contract.js";
4
- import fs from "node:fs";
4
+ import syncFs from "node:fs";
5
5
  import path from "node:path";
6
6
 
7
7
  //#region src/agents/skills/local-loader.ts
@@ -22,9 +22,9 @@ function readSkillFileSync(params) {
22
22
  if (!isPathWithinRoot(params.rootRealPath, opened.path)) {
23
23
  return null;
24
24
  }
25
- return fs.readFileSync(opened.fd, "utf8");
25
+ return syncFs.readFileSync(opened.fd, "utf8");
26
26
  } finally {
27
- fs.closeSync(opened.fd);
27
+ syncFs.closeSync(opened.fd);
28
28
  }
29
29
  }
30
30
  function loadSingleSkillDirectory(params) {
@@ -69,7 +69,7 @@ function loadSingleSkillDirectory(params) {
69
69
  }
70
70
  function listCandidateSkillDirs(dir) {
71
71
  try {
72
- return fs.readdirSync(dir, { withFileTypes: true }).filter((entry) => entry.isDirectory() && !entry.name.startsWith(".") && entry.name !== "node_modules").map((entry) => path.join(dir, entry.name)).sort((left, right) => left.localeCompare(right));
72
+ return syncFs.readdirSync(dir, { withFileTypes: true }).filter((entry) => entry.isDirectory() && !entry.name.startsWith(".") && entry.name !== "node_modules").map((entry) => path.join(dir, entry.name)).sort((left, right) => left.localeCompare(right));
73
73
  } catch {
74
74
  return [];
75
75
  }
@@ -78,7 +78,7 @@ function loadSkillsFromDirSafe(params) {
78
78
  const rootDir = path.resolve(params.dir);
79
79
  let rootRealPath;
80
80
  try {
81
- rootRealPath = fs.realpathSync(rootDir);
81
+ rootRealPath = syncFs.realpathSync(rootDir);
82
82
  } catch {
83
83
  return { skills: [] };
84
84
  }
@@ -102,7 +102,7 @@ function loadSkillsFromDirSafe(params) {
102
102
  function readSkillFrontmatterSafe(params) {
103
103
  let rootRealPath;
104
104
  try {
105
- rootRealPath = fs.realpathSync(path.resolve(params.rootDir));
105
+ rootRealPath = syncFs.realpathSync(path.resolve(params.rootDir));
106
106
  } catch {
107
107
  return null;
108
108
  }
@@ -1,7 +1,7 @@
1
1
  import { createSubsystemLogger } from "../../logging/subsystem.js";
2
2
  import { normalizePluginsConfig, resolveEffectiveEnableState, resolveMemorySlotDecision } from "../../plugins/config-state.js";
3
3
  import { loadPluginManifestRegistry } from "../../plugins/manifest-registry.js";
4
- import fs from "node:fs";
4
+ import syncFs from "node:fs";
5
5
  import path from "node:path";
6
6
 
7
7
  //#region src/agents/skills/plugin-skills.ts
@@ -58,7 +58,7 @@ function resolvePluginSkillDirs(params) {
58
58
  continue;
59
59
  }
60
60
  const candidate = path.resolve(record.rootDir, trimmed);
61
- if (!fs.existsSync(candidate)) {
61
+ if (!syncFs.existsSync(candidate)) {
62
62
  log.warn(`plugin skill path not found (${record.id}): ${candidate}`);
63
63
  continue;
64
64
  }
@@ -8,13 +8,13 @@ import { shouldIncludeSkill } from "./config.js";
8
8
  import { resolveBundledSkillsDir } from "./bundled-dir.js";
9
9
  import { resolvePluginSkillDirs } from "./plugin-skills.js";
10
10
  import { serializeByKey } from "./serialize.js";
11
- import fs from "node:fs";
11
+ import syncFs from "node:fs";
12
12
  import os from "node:os";
13
13
  import path from "node:path";
14
14
  import { formatSkillsForPrompt, loadSkillsFromDir } from "@mariozechner/pi-coding-agent";
15
15
 
16
16
  //#region src/agents/skills/workspace.ts
17
- const fsp = fs.promises;
17
+ const fsp = syncFs.promises;
18
18
  const skillsLogger = createSubsystemLogger("skills");
19
19
  const skillCommandDebugOnce = new Set();
20
20
  /**
@@ -84,10 +84,10 @@ function isPathWithinRoot(candidatePath, rootPath) {
84
84
  let candidate = path.resolve(candidatePath);
85
85
  let root = path.resolve(rootPath);
86
86
  try {
87
- candidate = fs.realpathSync.native(candidate);
87
+ candidate = syncFs.realpathSync.native(candidate);
88
88
  } catch {}
89
89
  try {
90
- root = fs.realpathSync.native(root);
90
+ root = syncFs.realpathSync.native(root);
91
91
  } catch {}
92
92
  const relative = path.relative(root, candidate);
93
93
  return relative === "" || !relative.startsWith("..") && !path.isAbsolute(relative);
@@ -135,7 +135,7 @@ function resolveSkillsLimits(config) {
135
135
  }
136
136
  function listChildDirectories(dir) {
137
137
  try {
138
- const entries = fs.readdirSync(dir, { withFileTypes: true });
138
+ const entries = syncFs.readdirSync(dir, { withFileTypes: true });
139
139
  const dirs = [];
140
140
  for (const entry of entries) {
141
141
  if (entry.name.startsWith(".")) continue;
@@ -147,7 +147,7 @@ function listChildDirectories(dir) {
147
147
  }
148
148
  if (entry.isSymbolicLink()) {
149
149
  try {
150
- if (fs.statSync(fullPath).isDirectory()) {
150
+ if (syncFs.statSync(fullPath).isDirectory()) {
151
151
  dirs.push(entry.name);
152
152
  }
153
153
  } catch {}
@@ -161,7 +161,7 @@ function listChildDirectories(dir) {
161
161
  function resolveNestedSkillsRoot(dir, opts) {
162
162
  const nested = path.join(dir, "skills");
163
163
  try {
164
- if (!fs.existsSync(nested) || !fs.statSync(nested).isDirectory()) {
164
+ if (!syncFs.existsSync(nested) || !syncFs.statSync(nested).isDirectory()) {
165
165
  return { baseDir: dir };
166
166
  }
167
167
  } catch {
@@ -172,7 +172,7 @@ function resolveNestedSkillsRoot(dir, opts) {
172
172
  const toScan = scanLimit === 0 ? [] : nestedDirs.slice(0, Math.min(nestedDirs.length, scanLimit));
173
173
  for (const name of toScan) {
174
174
  const skillMd = path.join(nested, name, "SKILL.md");
175
- if (fs.existsSync(skillMd)) {
175
+ if (syncFs.existsSync(skillMd)) {
176
176
  return {
177
177
  baseDir: nested,
178
178
  note: `Detected nested skills root at ${nested}`
@@ -199,9 +199,9 @@ function loadSkillEntries(workspaceDir, opts) {
199
199
  const resolved = resolveNestedSkillsRoot(params.dir, { maxEntriesToScan: limits.maxCandidatesPerRoot });
200
200
  const baseDir = resolved.baseDir;
201
201
  const rootSkillMd = path.join(baseDir, "SKILL.md");
202
- if (fs.existsSync(rootSkillMd)) {
202
+ if (syncFs.existsSync(rootSkillMd)) {
203
203
  try {
204
- const size = fs.statSync(rootSkillMd).size;
204
+ const size = syncFs.statSync(rootSkillMd).size;
205
205
  if (size > limits.maxSkillFileBytes) {
206
206
  skillsLogger.warn("Skipping skills root due to oversized SKILL.md.", {
207
207
  dir: baseDir,
@@ -244,11 +244,11 @@ function loadSkillEntries(workspaceDir, opts) {
244
244
  for (const name of limitedChildren) {
245
245
  const skillDir = path.join(baseDir, name);
246
246
  const skillMd = path.join(skillDir, "SKILL.md");
247
- if (!fs.existsSync(skillMd)) {
247
+ if (!syncFs.existsSync(skillMd)) {
248
248
  continue;
249
249
  }
250
250
  try {
251
- const size = fs.statSync(skillMd).size;
251
+ const size = syncFs.statSync(skillMd).size;
252
252
  if (size > limits.maxSkillFileBytes) {
253
253
  skillsLogger.warn("Skipping skill due to oversized SKILL.md.", {
254
254
  skill: name,
@@ -336,7 +336,7 @@ function loadSkillEntries(workspaceDir, opts) {
336
336
  const skillEntries = Array.from(merged.values()).map((skill) => {
337
337
  let frontmatter = {};
338
338
  try {
339
- const raw = fs.readFileSync(skill.filePath, "utf-8");
339
+ const raw = syncFs.readFileSync(skill.filePath, "utf-8");
340
340
  frontmatter = parseFrontmatter(raw);
341
341
  } catch {}
342
342
  return {
@@ -8,7 +8,7 @@ import { hasBinary } from "../shared/config-eval.js";
8
8
  import "./skills.js";
9
9
  import { formatInstallFailureMessage } from "./skills-install-output.js";
10
10
  import { resolveSkillToolsRootDir } from "./skills/tools-dir.js";
11
- import fs from "node:fs";
11
+ import syncFs from "node:fs";
12
12
  import path from "node:path";
13
13
  import { createHash } from "node:crypto";
14
14
  import { Readable } from "node:stream";
@@ -85,11 +85,11 @@ async function downloadFile(url, destPath, timeoutMs) {
85
85
  throw new Error(`Download failed (${response.status} ${response.statusText})`);
86
86
  }
87
87
  await ensureDir(path.dirname(destPath));
88
- const file = fs.createWriteStream(destPath);
88
+ const file = syncFs.createWriteStream(destPath);
89
89
  const body = response.body;
90
90
  const readable = isNodeReadableStream(body) ? body : Readable.fromWeb(body);
91
91
  await pipeline(readable, file);
92
- const stat = await fs.promises.stat(destPath);
92
+ const stat = await syncFs.promises.stat(destPath);
93
93
  return { bytes: stat.size };
94
94
  } finally {
95
95
  await release();
@@ -100,7 +100,7 @@ function normalizeHex(value) {
100
100
  }
101
101
  async function digestFile(filePath, algorithm, encoding) {
102
102
  const hash = createHash(algorithm);
103
- await pipeline(fs.createReadStream(filePath), hash);
103
+ await pipeline(syncFs.createReadStream(filePath), hash);
104
104
  return hash.digest(encoding);
105
105
  }
106
106
  async function verifyDownloadIntegrity(archivePath, spec) {
@@ -183,7 +183,7 @@ async function extractArchive(params) {
183
183
  };
184
184
  }
185
185
  const readArchiveFingerprint = async () => {
186
- const stat = await fs.promises.stat(archivePath);
186
+ const stat = await syncFs.promises.stat(archivePath);
187
187
  return {
188
188
  size: stat.size,
189
189
  mtimeMs: stat.mtimeMs
@@ -196,7 +196,7 @@ async function extractArchive(params) {
196
196
  for (const part of parts) {
197
197
  current = path.join(current, part);
198
198
  try {
199
- const stat = await fs.promises.lstat(current);
199
+ const stat = await syncFs.promises.lstat(current);
200
200
  if (stat.isSymbolicLink()) {
201
201
  throw new Error(`archive entry traverses symlink in destination: ${originalPath}`);
202
202
  }
@@ -352,7 +352,7 @@ async function installDownloadSpec(params) {
352
352
  try {
353
353
  targetDir = resolveDownloadTargetDir(entry, spec);
354
354
  await ensureDir(targetDir);
355
- const stat = await fs.promises.lstat(targetDir);
355
+ const stat = await syncFs.promises.lstat(targetDir);
356
356
  if (stat.isSymbolicLink()) {
357
357
  throw new Error(`targetDir is a symlink: ${targetDir}`);
358
358
  }
@@ -1,7 +1,7 @@
1
1
  import { hasBinary } from "../shared/config-eval.js";
2
2
  import "./skills.js";
3
3
  import { resolveBrewExecutable } from "../infra/brew.js";
4
- import fs from "node:fs";
4
+ import syncFs from "node:fs";
5
5
  import path from "node:path";
6
6
 
7
7
  //#region src/agents/skills-install-plan.ts
@@ -153,7 +153,7 @@ function candidateSkillBinPaths(bin) {
153
153
  function findSkillBinaryOutsidePath(bin) {
154
154
  for (const candidate of candidateSkillBinPaths(bin)) {
155
155
  try {
156
- if (fs.existsSync(candidate)) {
156
+ if (syncFs.existsSync(candidate)) {
157
157
  return candidate;
158
158
  }
159
159
  } catch {}
@@ -8,7 +8,7 @@ import { resolveBrewExecutable } from "../infra/brew.js";
8
8
  import { summarizeSkillInstallTrust } from "./skills-install-trust.js";
9
9
  import { formatInstallFailureMessage } from "./skills-install-output.js";
10
10
  import { installDownloadSpec } from "./skills-install-download.js";
11
- import fs from "node:fs";
11
+ import syncFs from "node:fs";
12
12
  import path from "node:path";
13
13
 
14
14
  //#region src/agents/skills-install.ts
@@ -236,7 +236,7 @@ function candidateBinPaths(bin) {
236
236
  function findBinaryOutsidePath(bin) {
237
237
  for (const candidate of candidateBinPaths(bin)) {
238
238
  try {
239
- if (fs.existsSync(candidate)) {
239
+ if (syncFs.existsSync(candidate)) {
240
240
  return candidate;
241
241
  }
242
242
  } catch {}
@@ -8,7 +8,7 @@ import { evaluateEntryRequirementsForCurrentPlatform } from "../shared/entry-sta
8
8
  import { resolveSkillInstallPlan } from "./skills-install-plan.js";
9
9
  import { summarizeSkillInstallTrust } from "./skills-install-trust.js";
10
10
  import { resolveBundledSkillsContext } from "./skills/bundled-context.js";
11
- import fs from "node:fs";
11
+ import syncFs from "node:fs";
12
12
  import path from "node:path";
13
13
 
14
14
  //#region src/agents/skills-status.ts
@@ -116,7 +116,7 @@ function readSkillMarketplaceStatus(skillDir) {
116
116
  const candidates = [path.join(skillDir, ".clawhub", "origin.json"), path.join(skillDir, ".clawdhub", "origin.json")];
117
117
  for (const candidate of candidates) {
118
118
  try {
119
- const raw = JSON.parse(fs.readFileSync(candidate, "utf8"));
119
+ const raw = JSON.parse(syncFs.readFileSync(candidate, "utf8"));
120
120
  if (raw.version !== 1 || typeof raw.registry !== "string" || typeof raw.slug !== "string" || typeof raw.installedVersion !== "string" || typeof raw.installedAt !== "number") {
121
121
  continue;
122
122
  }
@@ -1,7 +1,7 @@
1
1
  import { getSubagentDepth, parseAgentSessionKey } from "../sessions/session-key-utils.js";
2
2
  import { resolveDefaultAgentId } from "./agent-scope.js";
3
3
  import { resolveStorePath } from "../config/sessions/paths.js";
4
- import fs from "node:fs";
4
+ import syncFs from "node:fs";
5
5
  import JSON5 from "json5";
6
6
 
7
7
  //#region src/agents/subagent-depth.ts
@@ -28,7 +28,7 @@ function normalizeSessionKey(value) {
28
28
  }
29
29
  function readSessionStore(storePath) {
30
30
  try {
31
- const raw = fs.readFileSync(storePath, "utf-8");
31
+ const raw = syncFs.readFileSync(storePath, "utf-8");
32
32
  const parsed = JSON5.parse(raw);
33
33
  if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
34
34
  return parsed;
@@ -1,6 +1,6 @@
1
1
  import { formatUserTime, resolveUserTimeFormat, resolveUserTimezone } from "./date-time.js";
2
2
  import { findGitRoot } from "../infra/git-root.js";
3
- import fs from "node:fs";
3
+ import syncFs from "node:fs";
4
4
  import path from "node:path";
5
5
 
6
6
  //#region src/agents/system-prompt-params.ts
@@ -29,7 +29,7 @@ function resolveRepoRoot(params) {
29
29
  if (configured) {
30
30
  try {
31
31
  const resolved = path.resolve(configured);
32
- const stat = fs.statSync(resolved);
32
+ const stat = syncFs.statSync(resolved);
33
33
  if (stat.isDirectory()) {
34
34
  return resolved;
35
35
  }
@@ -1,5 +1,5 @@
1
- import { withNormalizedTimestamp } from "../date-time.js";
2
1
  import { jsonResult, readReactionParams, readStringArrayParam, readStringParam } from "./common.js";
2
+ import { withNormalizedTimestamp } from "../date-time.js";
3
3
  import { assertMediaNotDataUrl } from "../sandbox-paths.js";
4
4
  import { resolveDiscordChannelId } from "../../discord/targets.js";
5
5
  import { fetchChannelPermissionsDiscord } from "../../discord/send.permissions.js";
@@ -8,11 +8,11 @@ import { normalizeMessageChannel } from "../../utils/message-channel.js";
8
8
  import { stripReasoningTagsFromText } from "../../shared/text/reasoning-tags.js";
9
9
  import { CHANNEL_MESSAGE_ACTION_NAMES } from "../../channels/plugins/message-action-names.js";
10
10
  import { BLUEBUBBLES_GROUP_ACTIONS } from "../../channels/plugins/bluebubbles-actions.js";
11
- import { listChannelSupportedActions } from "../channel-tools.js";
12
11
  import { jsonResult, readNumberParam, readStringParam } from "./common.js";
13
12
  import { normalizeTargetForProvider } from "../../infra/outbound/target-normalization.js";
14
13
  import { channelTargetSchema, channelTargetsSchema, stringEnum } from "../schema/typebox.js";
15
14
  import { resolveGatewayOptions } from "./gateway.js";
15
+ import { listChannelSupportedActions } from "../channel-tools.js";
16
16
  import { listChannelMessageActions, supportsChannelMessageButtons, supportsChannelMessageButtonsForChannel, supportsChannelMessageCards, supportsChannelMessageCardsForChannel } from "../../channels/plugins/message-actions.js";
17
17
  import "../../channels/plugins/types.js";
18
18
  import { getToolResult, runMessageAction } from "../../infra/outbound/message-action-runner.js";
@@ -9,7 +9,7 @@ import { resolveStorePath } from "../../config/sessions/paths.js";
9
9
  import { loadSessionStore, updateSessionStore } from "../../config/sessions/store.js";
10
10
  import "../../config/sessions.js";
11
11
  import { loadCombinedSessionStoreForGateway } from "../../gateway/session-utils.js";
12
- import { formatUserTime, resolveUserTimeFormat, resolveUserTimezone } from "../date-time.js";
12
+ import { buildCredentialScopedAllowedModelSet } from "../model-catalog-access.js";
13
13
  import { readStringParam } from "./common.js";
14
14
  import { resolveInternalSessionKey, resolveMainSessionAlias, shouldResolveSessionIdInput } from "./sessions-resolution.js";
15
15
  import { createAgentToAgentPolicy } from "./sessions-access.js";
@@ -17,6 +17,8 @@ import "./sessions-helpers.js";
17
17
  import { getFollowupQueueDepth } from "../../auto-reply/reply/queue/enqueue.js";
18
18
  import { resolveQueueSettings } from "../../auto-reply/reply/queue/settings.js";
19
19
  import "../../auto-reply/reply/queue.js";
20
+ import { formatUserTime, resolveUserTimeFormat, resolveUserTimezone } from "../date-time.js";
21
+ import { loadModelCatalog } from "../model-catalog.js";
20
22
  import { normalizeGroupActivation } from "../../auto-reply/group-activation.js";
21
23
  import { buildStatusMessage } from "../../auto-reply/status.js";
22
24
  import { resolveUsageProviderId } from "../../infra/provider-usage.shared.js";
@@ -26,8 +28,6 @@ import "../../infra/provider-usage.js";
26
28
  import { applyModelOverrideToSessionEntry } from "../../sessions/model-overrides.js";
27
29
  import { buildTaskStatusSnapshotForRelatedSessionKeyForOwner } from "../../tasks/task-owner-access.js";
28
30
  import { resolveModelAuthLabel } from "../model-auth-label.js";
29
- import { buildCredentialScopedAllowedModelSet } from "../model-catalog-access.js";
30
- import { loadModelCatalog } from "../model-catalog.js";
31
31
  import { Type } from "@sinclair/typebox";
32
32
 
33
33
  //#region src/agents/tools/session-status-tool.ts
@@ -1,7 +1,7 @@
1
1
  import { resolveSlackAccount } from "../../slack/accounts.js";
2
2
  import { parseSlackTarget, resolveSlackChannelId } from "../../slack/targets.js";
3
- import { withNormalizedTimestamp } from "../date-time.js";
4
3
  import { createActionGate, jsonResult, readNumberParam, readReactionParams, readStringParam } from "./common.js";
4
+ import { withNormalizedTimestamp } from "../date-time.js";
5
5
  import { parseSlackBlocksInput } from "../../slack/blocks-input.js";
6
6
  import { deleteSlackMessage, editSlackMessage, getSlackMemberInfo, listSlackEmojis, listSlackPins, listSlackReactions, pinSlackMessage, reactSlackMessage, readSlackMessages, removeOwnSlackReactions, removeSlackReaction, sendSlackMessage, unpinSlackMessage } from "../../slack/actions.js";
7
7
 
@@ -1,8 +1,8 @@
1
1
  import { loadConfig } from "../../config/io.js";
2
2
  import "../../config/config.js";
3
3
  import { SILENT_REPLY_TOKEN } from "../../auto-reply/tokens.js";
4
- import { textToSpeech } from "../../tts/tts.js";
5
4
  import { readStringParam } from "./common.js";
5
+ import { textToSpeech } from "../../tts/tts.js";
6
6
  import { Type } from "@sinclair/typebox";
7
7
 
8
8
  //#region src/agents/tools/tts-tool.ts
@@ -5,10 +5,10 @@ import "../routing/session-key.js";
5
5
  import { openBoundaryFile } from "../infra/boundary-file-read.js";
6
6
  import { runCommandWithTimeout } from "../process/exec.js";
7
7
  import { resolveWorkspaceTemplateDir } from "./workspace-templates.js";
8
- import fs from "node:fs";
8
+ import syncFs from "node:fs";
9
9
  import os from "node:os";
10
10
  import path from "node:path";
11
- import fs$1 from "node:fs/promises";
11
+ import fs from "node:fs/promises";
12
12
 
13
13
  //#region src/agents/workspace.ts
14
14
  function resolveDefaultAgentWorkspaceDir(env = process.env, homedir = os.homedir) {
@@ -95,14 +95,14 @@ async function readWorkspaceFileWithGuards(params) {
95
95
  const identity = workspaceFileIdentity(opened.stat, opened.path);
96
96
  const cached = workspaceFileCache.get(params.filePath);
97
97
  if (cached && cached.identity === identity) {
98
- fs.closeSync(opened.fd);
98
+ syncFs.closeSync(opened.fd);
99
99
  return {
100
100
  ok: true,
101
101
  content: cached.content
102
102
  };
103
103
  }
104
104
  try {
105
- const content = fs.readFileSync(opened.fd, "utf-8");
105
+ const content = syncFs.readFileSync(opened.fd, "utf-8");
106
106
  workspaceFileCache.set(params.filePath, {
107
107
  content,
108
108
  identity
@@ -119,7 +119,7 @@ async function readWorkspaceFileWithGuards(params) {
119
119
  error
120
120
  };
121
121
  } finally {
122
- fs.closeSync(opened.fd);
122
+ syncFs.closeSync(opened.fd);
123
123
  }
124
124
  }
125
125
  function stripFrontMatter(content) {
@@ -144,7 +144,7 @@ async function loadTemplate(name) {
144
144
  const templateDir = await resolveWorkspaceTemplateDir();
145
145
  const templatePath = path.join(templateDir, name);
146
146
  try {
147
- const content = await fs$1.readFile(templatePath, "utf-8");
147
+ const content = await fs.readFile(templatePath, "utf-8");
148
148
  return stripFrontMatter(content);
149
149
  } catch {
150
150
  const fallback = BUILTIN_WORKSPACE_TEMPLATES[name];
@@ -176,7 +176,7 @@ const VALID_BOOTSTRAP_NAMES = new Set([
176
176
  ]);
177
177
  async function writeFileIfMissing(filePath, content) {
178
178
  try {
179
- await fs$1.writeFile(filePath, content, {
179
+ await fs.writeFile(filePath, content, {
180
180
  encoding: "utf-8",
181
181
  flag: "wx"
182
182
  });
@@ -191,14 +191,14 @@ async function writeFileIfMissing(filePath, content) {
191
191
  }
192
192
  async function fileExists(filePath) {
193
193
  try {
194
- await fs$1.access(filePath);
194
+ await fs.access(filePath);
195
195
  return true;
196
196
  } catch {
197
197
  return false;
198
198
  }
199
199
  }
200
200
  async function ensureMemoryRoots(dir) {
201
- await fs$1.mkdir(path.join(dir, "memory"), { recursive: true });
201
+ await fs.mkdir(path.join(dir, "memory"), { recursive: true });
202
202
  await writeFileIfMissing(path.join(dir, DEFAULT_MEMORY_FILENAME), DEFAULT_MEMORY_CONTENT);
203
203
  }
204
204
  function resolveWorkspaceStatePath(dir) {
@@ -221,7 +221,7 @@ function parseWorkspaceOnboardingState(raw) {
221
221
  }
222
222
  async function readWorkspaceOnboardingState(statePath) {
223
223
  try {
224
- const raw = await fs$1.readFile(statePath, "utf-8");
224
+ const raw = await fs.readFile(statePath, "utf-8");
225
225
  return parseWorkspaceOnboardingState(raw) ?? { version: WORKSPACE_STATE_VERSION };
226
226
  } catch (err) {
227
227
  const anyErr = err;
@@ -240,20 +240,20 @@ async function isWorkspaceOnboardingCompleted(dir) {
240
240
  return typeof state.onboardingCompletedAt === "string" && state.onboardingCompletedAt.trim().length > 0;
241
241
  }
242
242
  async function writeWorkspaceOnboardingState(statePath, state) {
243
- await fs$1.mkdir(path.dirname(statePath), { recursive: true });
243
+ await fs.mkdir(path.dirname(statePath), { recursive: true });
244
244
  const payload = `${JSON.stringify(state, null, 2)}\n`;
245
245
  const tmpPath = `${statePath}.tmp-${process.pid}-${Date.now().toString(36)}`;
246
246
  try {
247
- await fs$1.writeFile(tmpPath, payload, { encoding: "utf-8" });
248
- await fs$1.rename(tmpPath, statePath);
247
+ await fs.writeFile(tmpPath, payload, { encoding: "utf-8" });
248
+ await fs.rename(tmpPath, statePath);
249
249
  } catch (err) {
250
- await fs$1.unlink(tmpPath).catch(() => {});
250
+ await fs.unlink(tmpPath).catch(() => {});
251
251
  throw err;
252
252
  }
253
253
  }
254
254
  async function hasGitRepo(dir) {
255
255
  try {
256
- await fs$1.stat(path.join(dir, ".git"));
256
+ await fs.stat(path.join(dir, ".git"));
257
257
  return true;
258
258
  } catch {
259
259
  return false;
@@ -293,7 +293,7 @@ async function ensureGitRepo(dir, isBrandNewWorkspace) {
293
293
  async function ensureAgentWorkspace(params) {
294
294
  const rawDir = params?.dir?.trim() ? params.dir.trim() : DEFAULT_AGENT_WORKSPACE_DIR;
295
295
  const dir = resolveUserPath(rawDir);
296
- await fs$1.mkdir(dir, { recursive: true });
296
+ await fs.mkdir(dir, { recursive: true });
297
297
  if (!params?.ensureBootstrapFiles) {
298
298
  return { dir };
299
299
  }
@@ -322,7 +322,7 @@ async function ensureAgentWorkspace(params) {
322
322
  const paths = [...templatePaths, ...userContentPaths];
323
323
  const existing = await Promise.all(paths.map(async (p) => {
324
324
  try {
325
- await fs$1.access(p);
325
+ await fs.access(p);
326
326
  return true;
327
327
  } catch {
328
328
  return false;
@@ -360,7 +360,7 @@ async function ensureAgentWorkspace(params) {
360
360
  markState({ onboardingCompletedAt: nowIso() });
361
361
  }
362
362
  if (!state.bootstrapSeededAt && !state.onboardingCompletedAt && !bootstrapExists) {
363
- const [identityContent, userContent] = await Promise.all([fs$1.readFile(identityPath, "utf-8"), fs$1.readFile(userPath, "utf-8")]);
363
+ const [identityContent, userContent] = await Promise.all([fs.readFile(identityPath, "utf-8"), fs.readFile(userPath, "utf-8")]);
364
364
  const hasUserContent = await (async () => {
365
365
  const indicators = [
366
366
  path.join(dir, "memory"),
@@ -369,7 +369,7 @@ async function ensureAgentWorkspace(params) {
369
369
  ];
370
370
  for (const indicator of indicators) {
371
371
  try {
372
- await fs$1.access(indicator);
372
+ await fs.access(indicator);
373
373
  return true;
374
374
  } catch {}
375
375
  }
@@ -413,7 +413,7 @@ async function resolveMemoryBootstrapEntries(resolvedDir) {
413
413
  for (const name of candidates) {
414
414
  const filePath = path.join(resolvedDir, name);
415
415
  try {
416
- await fs$1.access(filePath);
416
+ await fs.access(filePath);
417
417
  entries.push({
418
418
  name,
419
419
  filePath
@@ -428,7 +428,7 @@ async function resolveMemoryBootstrapEntries(resolvedDir) {
428
428
  for (const entry of entries) {
429
429
  let key = entry.filePath;
430
430
  try {
431
- key = await fs$1.realpath(entry.filePath);
431
+ key = await fs.realpath(entry.filePath);
432
432
  } catch {}
433
433
  if (seen.has(key)) {
434
434
  continue;
@@ -523,7 +523,7 @@ async function loadExtraBootstrapFilesWithDiagnostics(dir, extraPatterns) {
523
523
  for (const pattern of extraPatterns) {
524
524
  if (pattern.includes("*") || pattern.includes("?") || pattern.includes("{")) {
525
525
  try {
526
- const matches = fs$1.glob(pattern, { cwd: resolvedDir });
526
+ const matches = fs.glob(pattern, { cwd: resolvedDir });
527
527
  for await (const m of matches) {
528
528
  resolvedPaths.add(m);
529
529
  }
@@ -18,7 +18,7 @@ import { isCompactionFailureError, isContextOverflowError, isLikelyContextOverfl
18
18
  import "../../agents/pi-embedded-helpers.js";
19
19
  import { buildEmbeddedRunBaseParams, buildEmbeddedRunContexts, resolveModelFallbackOptions } from "./agent-runner-utils.js";
20
20
  import { createBlockReplyDeliveryHandler } from "./reply-delivery.js";
21
- import fs from "node:fs";
21
+ import syncFs from "node:fs";
22
22
  import crypto from "node:crypto";
23
23
 
24
24
  //#region src/auto-reply/reply/agent-runner-execution.ts
@@ -369,7 +369,7 @@ async function runAgentTurnWithFallback(params) {
369
369
  if (corruptedSessionId) {
370
370
  const transcriptPath = resolveSessionTranscriptPath(corruptedSessionId);
371
371
  try {
372
- fs.unlinkSync(transcriptPath);
372
+ syncFs.unlinkSync(transcriptPath);
373
373
  } catch {}
374
374
  }
375
375
  delete params.activeSessionStore[sessionKey];
@@ -35,7 +35,7 @@ import { createTypingSignaler } from "./typing-mode.js";
35
35
  import { createFollowupRunner } from "./followup-runner.js";
36
36
  import { auditPostCompactionReads, extractReadPaths, formatAuditWarning, readSessionMessages } from "./post-compaction-audit.js";
37
37
  import { resolveActiveRunQueueAction } from "./queue-policy.js";
38
- import fs from "node:fs";
38
+ import syncFs from "node:fs";
39
39
 
40
40
  //#region src/auto-reply/reply/agent-runner.ts
41
41
  const BLOCK_REPLY_SEND_TIMEOUT_MS = 15e3;
@@ -305,7 +305,7 @@ async function runReplyAgent(params) {
305
305
  transcriptCandidates.add(resolveSessionTranscriptPath(prevSessionId, agentId));
306
306
  for (const candidate of transcriptCandidates) {
307
307
  try {
308
- fs.unlinkSync(candidate);
308
+ syncFs.unlinkSync(candidate);
309
309
  } catch {}
310
310
  }
311
311
  }
@@ -2,14 +2,14 @@ import { resolveDefaultSessionStorePath, resolveSessionFilePath, resolveSessionF
2
2
  import { loadSessionStore } from "../../config/sessions/store.js";
3
3
  import { resolveCommandsSystemPromptBundle } from "./commands-system-prompt.js";
4
4
  import { fileURLToPath } from "node:url";
5
- import fs from "node:fs";
5
+ import syncFs from "node:fs";
6
6
  import path from "node:path";
7
7
  import { SessionManager } from "@mariozechner/pi-coding-agent";
8
8
 
9
9
  //#region src/auto-reply/reply/commands-export-session.ts
10
10
  const EXPORT_HTML_DIR = path.join(path.dirname(fileURLToPath(import.meta.url)), "export-html");
11
11
  function loadTemplate(fileName) {
12
- return fs.readFileSync(path.join(EXPORT_HTML_DIR, fileName), "utf-8");
12
+ return syncFs.readFileSync(path.join(EXPORT_HTML_DIR, fileName), "utf-8");
13
13
  }
14
14
  function generateHtml(sessionData) {
15
15
  const template = loadTemplate("template.html");
@@ -84,7 +84,7 @@ function writeNewDefaultExportFile(filePath, html) {
84
84
  for (let suffix = 1; suffix <= 100; suffix++) {
85
85
  const candidate = suffix === 1 ? filePath : addCollisionSuffix(filePath, suffix);
86
86
  try {
87
- fs.writeFileSync(candidate, html, {
87
+ syncFs.writeFileSync(candidate, html, {
88
88
  encoding: "utf-8",
89
89
  flag: "wx"
90
90
  });
@@ -119,7 +119,7 @@ async function buildExportSessionReply(params) {
119
119
  } catch (err) {
120
120
  return { text: `❌ Failed to resolve session file: ${err instanceof Error ? err.message : String(err)}` };
121
121
  }
122
- if (!fs.existsSync(sessionFile)) {
122
+ if (!syncFs.existsSync(sessionFile)) {
123
123
  return { text: `❌ Session file not found: ${sessionFile}` };
124
124
  }
125
125
  const sessionManager = SessionManager.open(sessionFile);
@@ -143,11 +143,11 @@ async function buildExportSessionReply(params) {
143
143
  const defaultFileName = `fased-session-${entry.sessionId.slice(0, 8)}-${timestamp}.html`;
144
144
  let outputPath = args.outputPath ? path.resolve(args.outputPath.startsWith("~") ? args.outputPath.replace("~", process.env.HOME ?? "") : args.outputPath) : path.join(params.workspaceDir, defaultFileName);
145
145
  const outputDir = path.dirname(outputPath);
146
- if (!fs.existsSync(outputDir)) {
147
- fs.mkdirSync(outputDir, { recursive: true });
146
+ if (!syncFs.existsSync(outputDir)) {
147
+ syncFs.mkdirSync(outputDir, { recursive: true });
148
148
  }
149
149
  if (args.outputPath) {
150
- fs.writeFileSync(outputPath, html, "utf-8");
150
+ syncFs.writeFileSync(outputPath, html, "utf-8");
151
151
  } else {
152
152
  outputPath = writeNewDefaultExportFile(outputPath, html);
153
153
  }
@@ -3,9 +3,9 @@ import { DEFAULT_MODEL, DEFAULT_PROVIDER } from "../../agents/defaults.js";
3
3
  import { ensureAuthProfileStore } from "../../agents/auth-profiles/store.js";
4
4
  import "../../agents/auth-profiles.js";
5
5
  import { buildModelAliasIndex, normalizeProviderId, resolveConfiguredModelRef, resolveModelRefFromString } from "../../agents/model-selection.js";
6
- import { resolveModelAuthLabel } from "../../agents/model-auth-label.js";
7
6
  import { buildCredentialScopedAllowedModelSet } from "../../agents/model-catalog-access.js";
8
7
  import { loadModelCatalog } from "../../agents/model-catalog.js";
8
+ import { resolveModelAuthLabel } from "../../agents/model-auth-label.js";
9
9
  import { buildModelsKeyboard, buildProviderKeyboard, calculateTotalPages, getModelsPageSize } from "../../telegram/model-buttons.js";
10
10
 
11
11
  //#region src/auto-reply/reply/commands-models.ts