@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
@@ -3,7 +3,7 @@ import { openBoundaryFileSync } from "../infra/boundary-file-read.js";
3
3
  import { resolveBundledPluginsDir } from "./bundled-dir.js";
4
4
  import { DEFAULT_PLUGIN_ENTRY_CANDIDATES, getPackageManifestMetadata, loadPluginManifest } from "./manifest.js";
5
5
  import { formatPosixMode, isPathInside, safeRealpathSync, safeStatSync } from "./path-safety.js";
6
- import fs from "node:fs";
6
+ import syncFs from "node:fs";
7
7
  import path from "node:path";
8
8
 
9
9
  //#region src/plugins/discovery.ts
@@ -168,12 +168,12 @@ function readPackageManifest(dir) {
168
168
  return null;
169
169
  }
170
170
  try {
171
- const raw = fs.readFileSync(opened.fd, "utf-8");
171
+ const raw = syncFs.readFileSync(opened.fd, "utf-8");
172
172
  return JSON.parse(raw);
173
173
  } catch {
174
174
  return null;
175
175
  } finally {
176
- fs.closeSync(opened.fd);
176
+ syncFs.closeSync(opened.fd);
177
177
  }
178
178
  }
179
179
  function normalizePackageEntry(entry) {
@@ -212,7 +212,7 @@ function inferLegacyPluginManifestExtensions(manifest, packageDir) {
212
212
  if (!isPathInside(packageDir, resolved)) {
213
213
  continue;
214
214
  }
215
- if (fs.existsSync(resolved) && isExtensionFile(resolved)) {
215
+ if (syncFs.existsSync(resolved) && isExtensionFile(resolved)) {
216
216
  entries.push(normalized);
217
217
  }
218
218
  }
@@ -283,16 +283,16 @@ function resolvePackageEntrySource(params) {
283
283
  return null;
284
284
  }
285
285
  const safeSource = opened.path;
286
- fs.closeSync(opened.fd);
286
+ syncFs.closeSync(opened.fd);
287
287
  return safeSource;
288
288
  }
289
289
  function discoverInDirectory(params) {
290
- if (!fs.existsSync(params.dir)) {
290
+ if (!syncFs.existsSync(params.dir)) {
291
291
  return;
292
292
  }
293
293
  let entries = [];
294
294
  try {
295
- entries = fs.readdirSync(params.dir, { withFileTypes: true });
295
+ entries = syncFs.readdirSync(params.dir, { withFileTypes: true });
296
296
  } catch (err) {
297
297
  params.diagnostics.push({
298
298
  level: "warn",
@@ -364,7 +364,7 @@ function discoverInDirectory(params) {
364
364
  "index.mjs",
365
365
  "index.cjs"
366
366
  ];
367
- const indexFile = indexCandidates.map((candidate) => path.join(fullPath, candidate)).find((candidate) => fs.existsSync(candidate));
367
+ const indexFile = indexCandidates.map((candidate) => path.join(fullPath, candidate)).find((candidate) => syncFs.existsSync(candidate));
368
368
  if (indexFile && isExtensionFile(indexFile)) {
369
369
  addCandidate({
370
370
  candidates: params.candidates,
@@ -384,7 +384,7 @@ function discoverInDirectory(params) {
384
384
  }
385
385
  function discoverFromPath(params) {
386
386
  const resolved = resolveUserPath(params.rawPath);
387
- if (!fs.existsSync(resolved)) {
387
+ if (!syncFs.existsSync(resolved)) {
388
388
  params.diagnostics.push({
389
389
  level: "error",
390
390
  message: `plugin path not found: ${resolved}`,
@@ -392,7 +392,7 @@ function discoverFromPath(params) {
392
392
  });
393
393
  return;
394
394
  }
395
- const stat = fs.statSync(resolved);
395
+ const stat = syncFs.statSync(resolved);
396
396
  if (stat.isFile()) {
397
397
  if (!isExtensionFile(resolved)) {
398
398
  params.diagnostics.push({
@@ -455,7 +455,7 @@ function discoverFromPath(params) {
455
455
  "index.mjs",
456
456
  "index.cjs"
457
457
  ];
458
- const indexFile = indexCandidates.map((candidate) => path.join(resolved, candidate)).find((candidate) => fs.existsSync(candidate));
458
+ const indexFile = indexCandidates.map((candidate) => path.join(resolved, candidate)).find((candidate) => syncFs.existsSync(candidate));
459
459
  if (indexFile && isExtensionFile(indexFile)) {
460
460
  addCandidate({
461
461
  candidates: params.candidates,
@@ -13,7 +13,7 @@ import { setActivePluginRegistry } from "./runtime.js";
13
13
  import { initializeGlobalHookRunner } from "./hook-runner-global.js";
14
14
  import { createPluginRuntime } from "./runtime/index.js";
15
15
  import { fileURLToPath, pathToFileURL } from "node:url";
16
- import fs from "node:fs";
16
+ import syncFs from "node:fs";
17
17
  import path from "node:path";
18
18
  import { createJiti } from "jiti";
19
19
 
@@ -36,7 +36,7 @@ const resolvePluginSdkAliasFile = (params) => {
36
36
  const distCandidate = path.join(cursor, "dist", "plugin-sdk", params.distFile);
37
37
  const orderedCandidates = isDistRuntime ? [distCandidate, srcCandidate] : isProduction ? isTest ? [distCandidate, srcCandidate] : [distCandidate] : [srcCandidate, distCandidate];
38
38
  for (const candidate of orderedCandidates) {
39
- if (fs.existsSync(candidate)) {
39
+ if (syncFs.existsSync(candidate)) {
40
40
  return candidate;
41
41
  }
42
42
  }
@@ -122,7 +122,7 @@ function repairOfficialChannelRuntimeDependencies(params) {
122
122
  }
123
123
  let manifest;
124
124
  try {
125
- manifest = JSON.parse(fs.readFileSync(path.join(params.pluginRoot, "package.json"), "utf8"));
125
+ manifest = JSON.parse(syncFs.readFileSync(path.join(params.pluginRoot, "package.json"), "utf8"));
126
126
  } catch {
127
127
  return;
128
128
  }
@@ -133,31 +133,31 @@ function repairOfficialChannelRuntimeDependencies(params) {
133
133
  for (const dependencyName of dependencyNames) {
134
134
  const segments = dependencyName.split("/");
135
135
  const source = path.join(params.pluginRoot, "node_modules", ...segments);
136
- if (!fs.existsSync(source)) {
136
+ if (!syncFs.existsSync(source)) {
137
137
  continue;
138
138
  }
139
139
  const target = path.join(coreRoot, "node_modules", ...segments);
140
140
  try {
141
- const sourceReal = fs.realpathSync(source);
141
+ const sourceReal = syncFs.realpathSync(source);
142
142
  let shouldCreate = true;
143
143
  try {
144
- const current = fs.lstatSync(target);
144
+ const current = syncFs.lstatSync(target);
145
145
  if (!current.isSymbolicLink()) {
146
146
  shouldCreate = false;
147
147
  } else {
148
- const targetReal = fs.realpathSync(target);
148
+ const targetReal = syncFs.realpathSync(target);
149
149
  if (targetReal === sourceReal) {
150
150
  shouldCreate = false;
151
151
  } else {
152
- fs.unlinkSync(target);
152
+ syncFs.unlinkSync(target);
153
153
  }
154
154
  }
155
155
  } catch {}
156
156
  if (!shouldCreate) {
157
157
  continue;
158
158
  }
159
- fs.mkdirSync(path.dirname(target), { recursive: true });
160
- fs.symlinkSync(sourceReal, target, process.platform === "win32" ? "junction" : "dir");
159
+ syncFs.mkdirSync(path.dirname(target), { recursive: true });
160
+ syncFs.symlinkSync(sourceReal, target, process.platform === "win32" ? "junction" : "dir");
161
161
  } catch (error) {
162
162
  params.logger.warn(`[plugins] unable to expose ${dependencyName} from ${params.pluginId}: ${String(error)}`);
163
163
  }
@@ -228,7 +228,7 @@ async function preloadNativePluginModules(options = {}) {
228
228
  continue;
229
229
  }
230
230
  const safeSource = opened.path;
231
- fs.closeSync(opened.fd);
231
+ syncFs.closeSync(opened.fd);
232
232
  const startedAt = Date.now();
233
233
  try {
234
234
  const moduleUrl = pathToFileURL(safeSource).href;
@@ -644,7 +644,7 @@ function loadFasedAgentPlugins(options = {}) {
644
644
  continue;
645
645
  }
646
646
  const safeSource = opened.path;
647
- fs.closeSync(opened.fd);
647
+ syncFs.closeSync(opened.fd);
648
648
  repairOfficialChannelRuntimeDependencies({
649
649
  pluginId,
650
650
  pluginRoot,
@@ -808,7 +808,7 @@ function resolveRuntimePluginRegistry(options = {}) {
808
808
  }
809
809
  function safeRealpathOrResolve(value) {
810
810
  try {
811
- return fs.realpathSync(value);
811
+ return syncFs.realpathSync(value);
812
812
  } catch {
813
813
  return path.resolve(value);
814
814
  }
@@ -5,7 +5,7 @@ import { loadPluginManifest } from "./manifest.js";
5
5
  import { safeRealpathSync } from "./path-safety.js";
6
6
  import { discoverFasedAgentPlugins } from "./discovery.js";
7
7
  import { checkMinHostVersion } from "./min-host-version.js";
8
- import fs from "node:fs";
8
+ import syncFs from "node:fs";
9
9
  import path from "node:path";
10
10
 
11
11
  //#region src/plugins/manifest-registry.ts
@@ -49,7 +49,7 @@ function buildCacheKey(params) {
49
49
  }
50
50
  function safeStatMtimeMs(filePath) {
51
51
  try {
52
- return fs.statSync(filePath).mtimeMs;
52
+ return syncFs.statSync(filePath).mtimeMs;
53
53
  } catch {
54
54
  return null;
55
55
  }
@@ -1,7 +1,7 @@
1
1
  import { isRecord } from "../utils.js";
2
2
  import { openBoundaryFileSync } from "../infra/boundary-file-read.js";
3
3
  import { MANIFEST_KEY } from "../project.js";
4
- import fs from "node:fs";
4
+ import syncFs from "node:fs";
5
5
  import path from "node:path";
6
6
  import JSON5 from "json5";
7
7
 
@@ -169,7 +169,7 @@ function normalizeChannelConfigs(value) {
169
169
  function resolvePluginManifestPath(rootDir) {
170
170
  for (const filename of PLUGIN_MANIFEST_FILENAMES) {
171
171
  const candidate = path.join(rootDir, filename);
172
- if (fs.existsSync(candidate)) {
172
+ if (syncFs.existsSync(candidate)) {
173
173
  return candidate;
174
174
  }
175
175
  }
@@ -198,7 +198,7 @@ function loadPluginManifest(rootDir) {
198
198
  }
199
199
  let raw;
200
200
  try {
201
- raw = JSON5.parse(fs.readFileSync(opened.fd, "utf-8"));
201
+ raw = JSON5.parse(syncFs.readFileSync(opened.fd, "utf-8"));
202
202
  } catch (err) {
203
203
  return {
204
204
  ok: false,
@@ -206,7 +206,7 @@ function loadPluginManifest(rootDir) {
206
206
  manifestPath
207
207
  };
208
208
  } finally {
209
- fs.closeSync(opened.fd);
209
+ syncFs.closeSync(opened.fd);
210
210
  }
211
211
  if (!isRecord(raw)) {
212
212
  return {
@@ -1,5 +1,5 @@
1
1
  import { isPathInside as isPathInside$1 } from "../infra/path-guards.js";
2
- import fs from "node:fs";
2
+ import syncFs from "node:fs";
3
3
 
4
4
  //#region src/plugins/path-safety.ts
5
5
  function isPathInside(baseDir, targetPath) {
@@ -11,7 +11,7 @@ function safeRealpathSync(targetPath, cache) {
11
11
  return cached;
12
12
  }
13
13
  try {
14
- const resolved = fs.realpathSync(targetPath);
14
+ const resolved = syncFs.realpathSync(targetPath);
15
15
  cache?.set(targetPath, resolved);
16
16
  return resolved;
17
17
  } catch {
@@ -20,7 +20,7 @@ function safeRealpathSync(targetPath, cache) {
20
20
  }
21
21
  function safeStatSync(targetPath) {
22
22
  try {
23
- return fs.statSync(targetPath);
23
+ return syncFs.statSync(targetPath);
24
24
  } catch {
25
25
  return null;
26
26
  }
@@ -20,7 +20,6 @@ import { resolveEffectiveMessagesConfig, resolveHumanDelayConfig } from "../../a
20
20
  import { mediaKindFromMime } from "../../media/constants.js";
21
21
  import { detectMime } from "../../media/mime.js";
22
22
  import { isVoiceCompatibleAudio } from "../../media/audio.js";
23
- import { textToSpeechTelephony } from "../../tts/tts.js";
24
23
  import { getImageMetadata, resizeToJpeg } from "../../media/image-ops.js";
25
24
  import { createMemoryGetTool, createMemorySearchTool } from "../../agents/tools/memory-tool.js";
26
25
  import { chunkByNewline, chunkMarkdownText, chunkMarkdownTextWithMode, chunkText, chunkTextWithMode, resolveChunkMode, resolveTextChunkLimit } from "../../auto-reply/chunk.js";
@@ -65,6 +64,7 @@ import "../../signal/index.js";
65
64
  import { auditTelegramGroupMembership, collectTelegramUnmentionedGroupIds } from "../../telegram/audit.js";
66
65
  import { getActiveWebListener } from "../../web/active-listener.js";
67
66
  import { formatNativeDependencyHint } from "./native-deps.js";
67
+ import { textToSpeechTelephony } from "../../tts/tts.js";
68
68
  import { createRequire } from "node:module";
69
69
 
70
70
  //#region src/plugins/runtime/index.ts
@@ -1,4 +1,4 @@
1
- import fs from "node:fs";
1
+ import syncFs from "node:fs";
2
2
  import os from "node:os";
3
3
  import path from "node:path";
4
4
  import { createHash } from "node:crypto";
@@ -7,7 +7,7 @@ import { createHash } from "node:crypto";
7
7
  const CACHE_SCHEMA_VERSION = 2;
8
8
  function statMtimeMs(filePath) {
9
9
  try {
10
- return fs.statSync(filePath).mtimeMs;
10
+ return syncFs.statSync(filePath).mtimeMs;
11
11
  } catch {
12
12
  return null;
13
13
  }
@@ -23,7 +23,7 @@ function canonicalize(value) {
23
23
  }
24
24
  function configFingerprint(configPath) {
25
25
  try {
26
- const parsed = JSON.parse(fs.readFileSync(configPath, "utf8"));
26
+ const parsed = JSON.parse(syncFs.readFileSync(configPath, "utf8"));
27
27
  return createHash("sha256").update(JSON.stringify(canonicalize({ plugins: parsed.plugins }))).digest("hex");
28
28
  } catch {
29
29
  return createHash("sha256").update("missing-config").digest("hex");
@@ -41,9 +41,9 @@ function readCurrentPackageVersion(argv1) {
41
41
  return null;
42
42
  }
43
43
  try {
44
- const entry = fs.realpathSync(argv1);
44
+ const entry = syncFs.realpathSync(argv1);
45
45
  const packagePath = path.join(path.dirname(entry), "package.json");
46
- const parsed = JSON.parse(fs.readFileSync(packagePath, "utf8"));
46
+ const parsed = JSON.parse(syncFs.readFileSync(packagePath, "utf8"));
47
47
  return typeof parsed.version === "string" ? parsed.version : null;
48
48
  } catch {
49
49
  return null;
@@ -53,7 +53,7 @@ function readValidPluginStatusCache(params) {
53
53
  const cachePath = params.cachePath ?? resolvePluginStatusCachePath();
54
54
  const configPath = params.configPath ?? resolvePluginStatusConfigPath();
55
55
  try {
56
- const parsed = JSON.parse(fs.readFileSync(cachePath, "utf8"));
56
+ const parsed = JSON.parse(syncFs.readFileSync(cachePath, "utf8"));
57
57
  if (parsed.schemaVersion !== CACHE_SCHEMA_VERSION || parsed.packageVersion !== params.packageVersion || parsed.configPath !== configPath || parsed.configFingerprint !== configFingerprint(configPath) || !Array.isArray(parsed.plugins) || !Array.isArray(parsed.diagnostics)) {
58
58
  return null;
59
59
  }
@@ -96,16 +96,16 @@ function writePluginStatusCache(params) {
96
96
  source: diagnostic.source
97
97
  }))
98
98
  };
99
- fs.mkdirSync(path.dirname(cachePath), {
99
+ syncFs.mkdirSync(path.dirname(cachePath), {
100
100
  recursive: true,
101
101
  mode: 448
102
102
  });
103
103
  const temporaryPath = `${cachePath}.tmp-${process.pid}`;
104
- fs.writeFileSync(temporaryPath, `${JSON.stringify(cache)}\n`, {
104
+ syncFs.writeFileSync(temporaryPath, `${JSON.stringify(cache)}\n`, {
105
105
  encoding: "utf8",
106
106
  mode: 384
107
107
  });
108
- fs.renameSync(temporaryPath, cachePath);
108
+ syncFs.renameSync(temporaryPath, cachePath);
109
109
  }
110
110
 
111
111
  //#endregion
@@ -3,7 +3,7 @@ import { openBoundaryFileSync } from "../infra/boundary-file-read.js";
3
3
  import { installPluginFromNpmSpec, resolvePluginInstallDir } from "./install.js";
4
4
  import { resolveBundledPluginSources } from "./bundled-sources.js";
5
5
  import { buildNpmResolutionInstallFields, recordPluginInstall } from "./installs.js";
6
- import fs from "node:fs";
6
+ import syncFs from "node:fs";
7
7
  import path from "node:path";
8
8
 
9
9
  //#region src/plugins/update.ts
@@ -86,14 +86,14 @@ async function readInstalledPackageVersion(dir, opts) {
86
86
  return undefined;
87
87
  }
88
88
  try {
89
- const raw = fs.readFileSync(opened.fd, "utf-8");
89
+ const raw = syncFs.readFileSync(opened.fd, "utf-8");
90
90
  const parsed = JSON.parse(raw);
91
91
  return typeof parsed.version === "string" ? parsed.version : undefined;
92
92
  } catch (err) {
93
93
  opts?.logger?.warn?.(`Could not inspect installed package for "${opts.pluginId ?? path.basename(dir)}": package.json is unreadable (${formatUpdateError(err)}). Continuing update with unknown current version.`);
94
94
  return undefined;
95
95
  } finally {
96
- fs.closeSync(opened.fd);
96
+ syncFs.closeSync(opened.fd);
97
97
  }
98
98
  }
99
99
  function pathsEqual(left, right) {
@@ -1,7 +1,7 @@
1
1
  import { CONFIG_DIR, isRecord, resolveUserPath } from "../utils.js";
2
2
  import { resolveFasedAgentPackageRootSync } from "../infra/fased-root.js";
3
3
  import { enablePluginInConfig } from "./enable.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/plugins/web-search-install-catalog.ts
@@ -48,11 +48,11 @@ function parseCatalogEntries(raw) {
48
48
  function loadCatalogEntriesFromPaths(paths) {
49
49
  const entries = [];
50
50
  for (const resolved of paths) {
51
- if (!fs.existsSync(resolved)) {
51
+ if (!syncFs.existsSync(resolved)) {
52
52
  continue;
53
53
  }
54
54
  try {
55
- const payload = JSON.parse(fs.readFileSync(resolved, "utf-8"));
55
+ const payload = JSON.parse(syncFs.readFileSync(resolved, "utf-8"));
56
56
  entries.push(...parseCatalogEntries(payload));
57
57
  } catch {}
58
58
  }
@@ -0,0 +1,51 @@
1
+ import { resolveCopilotApiToken } from "./github-copilot-token.js";
2
+ import { listProfilesForProvider } from "../agents/auth-profiles/profiles.js";
3
+ import { resolveApiKeyForProfile } from "../agents/auth-profiles/oauth.js";
4
+ import "../agents/auth-profiles.js";
5
+ import { buildCopilotIdeHeaders } from "../agents/copilot-dynamic-headers.js";
6
+ import { parseGenericModelSnapshotsFromModelsResponse } from "./refresh.js";
7
+
8
+ //#region src/providers/github-copilot-model-discovery.ts
9
+ const GITHUB_COPILOT_ROUTE = "github-copilot";
10
+ const DISCOVERY_TIMEOUT_MS = 8e3;
11
+ function modelsUrl(baseUrl) {
12
+ return `${baseUrl.replace(/\/+$/, "")}/models`;
13
+ }
14
+ async function discoverGitHubCopilotModels(params) {
15
+ const profileId = listProfilesForProvider(params.store, GITHUB_COPILOT_ROUTE)[0];
16
+ if (!profileId) {
17
+ return [];
18
+ }
19
+ const resolved = await resolveApiKeyForProfile({
20
+ cfg: params.cfg,
21
+ store: params.store,
22
+ profileId,
23
+ agentDir: params.agentDir
24
+ });
25
+ if (!resolved?.apiKey) {
26
+ return [];
27
+ }
28
+ const fetchImpl = params.fetchImpl ?? fetch;
29
+ const copilot = await resolveCopilotApiToken({
30
+ githubToken: resolved.apiKey,
31
+ fetchImpl
32
+ });
33
+ const response = await fetchImpl(modelsUrl(copilot.baseUrl), {
34
+ headers: {
35
+ Accept: "application/json",
36
+ Authorization: `Bearer ${copilot.token}`,
37
+ ...buildCopilotIdeHeaders({ includeApiVersion: true })
38
+ },
39
+ signal: AbortSignal.timeout(DISCOVERY_TIMEOUT_MS)
40
+ });
41
+ if (!response.ok) {
42
+ throw new Error(`GitHub Copilot model discovery failed (${response.status})`);
43
+ }
44
+ return parseGenericModelSnapshotsFromModelsResponse(await response.json()).map((model) => ({
45
+ ...model,
46
+ source: "github-copilot-account"
47
+ }));
48
+ }
49
+
50
+ //#endregion
51
+ export { discoverGitHubCopilotModels };
@@ -0,0 +1,166 @@
1
+ import { normalizeThinkLevel } from "../shared/model-thinking.js";
2
+ import { listProfilesForProvider } from "../agents/auth-profiles/profiles.js";
3
+ import { resolveApiKeyForProfile } from "../agents/auth-profiles/oauth.js";
4
+ import "../agents/auth-profiles.js";
5
+ import { listOpenAICodexAppServerModels } from "../agents/openai-codex-app-server.js";
6
+
7
+ //#region src/providers/openai-codex-model-discovery.ts
8
+ const OPENAI_CODEX_MODELS_URL = "https://chatgpt.com/backend-api/codex/models";
9
+ const OPENAI_CODEX_ROUTE = "openai-codex";
10
+ const OPENAI_CODEX_CATALOG_CLIENT_VERSION = "0.144.0";
11
+ const DISCOVERY_TIMEOUT_MS = 8e3;
12
+ function decodeJwtPayload(token) {
13
+ const encoded = token.split(".")[1];
14
+ if (!encoded) {
15
+ return null;
16
+ }
17
+ try {
18
+ return JSON.parse(Buffer.from(encoded, "base64url").toString("utf8"));
19
+ } catch {
20
+ return null;
21
+ }
22
+ }
23
+ function extractChatGptAccountId(token) {
24
+ const payload = decodeJwtPayload(token);
25
+ const auth = payload?.["https://api.openai.com/auth"];
26
+ if (!auth || typeof auth !== "object" || Array.isArray(auth)) {
27
+ return null;
28
+ }
29
+ const accountId = auth.chatgpt_account_id;
30
+ return typeof accountId === "string" && accountId.trim() ? accountId.trim() : null;
31
+ }
32
+ function positiveInteger(value) {
33
+ return typeof value === "number" && Number.isInteger(value) && value > 0 ? value : undefined;
34
+ }
35
+ function inputModalities(value) {
36
+ if (!Array.isArray(value)) {
37
+ return ["text"];
38
+ }
39
+ const values = value.filter((entry) => entry === "text" || entry === "image");
40
+ return values.length > 0 ? values : ["text"];
41
+ }
42
+ function modelCapabilities(model) {
43
+ const rawLevels = Array.isArray(model.supported_reasoning_levels) ? model.supported_reasoning_levels : [];
44
+ const thinkingLevels = rawLevels.flatMap((entry) => {
45
+ if (!entry || typeof entry !== "object" || Array.isArray(entry)) {
46
+ return [];
47
+ }
48
+ const effort = entry.effort;
49
+ const normalized = typeof effort === "string" ? normalizeThinkLevel(effort) : undefined;
50
+ return normalized ? [normalized] : [];
51
+ });
52
+ const defaultThinkingLevel = typeof model.default_reasoning_level === "string" ? normalizeThinkLevel(model.default_reasoning_level) : undefined;
53
+ return {
54
+ tools: true,
55
+ json: true,
56
+ streaming: true,
57
+ ...thinkingLevels.length > 0 ? { thinkingLevels } : {},
58
+ ...defaultThinkingLevel ? { defaultThinkingLevel } : {},
59
+ thinkingMode: "openai-reasoning-effort",
60
+ reasoningBudgetSupported: thinkingLevels.length > 0
61
+ };
62
+ }
63
+ function parseModels(value) {
64
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
65
+ return [];
66
+ }
67
+ const models = value.models;
68
+ if (!Array.isArray(models)) {
69
+ return [];
70
+ }
71
+ return models.flatMap((entry) => {
72
+ if (!entry || typeof entry !== "object" || Array.isArray(entry)) {
73
+ return [];
74
+ }
75
+ const model = entry;
76
+ const id = typeof model.slug === "string" ? model.slug.trim() : "";
77
+ if (!id || model.visibility !== "list") {
78
+ return [];
79
+ }
80
+ const capabilities = modelCapabilities(model);
81
+ return [{
82
+ id,
83
+ name: typeof model.display_name === "string" && model.display_name.trim() ? model.display_name.trim().replace(/-(Sol|Terra|Luna|Mini)$/i, " $1") : id,
84
+ input: inputModalities(model.input_modalities),
85
+ reasoning: true,
86
+ tools: capabilities.tools,
87
+ json: capabilities.json,
88
+ thinkingLevels: capabilities.thinkingLevels,
89
+ defaultThinkingLevel: capabilities.defaultThinkingLevel,
90
+ thinkingMode: capabilities.thinkingMode,
91
+ reasoningBudgetSupported: capabilities.reasoningBudgetSupported,
92
+ contextWindow: positiveInteger(model.context_window),
93
+ responsesLite: model.use_responses_lite === true,
94
+ source: "openai-codex-account"
95
+ }];
96
+ });
97
+ }
98
+ function parseAppServerModels(models) {
99
+ return models.map((model) => {
100
+ const thinkingLevels = model.supportedReasoningEfforts.flatMap((effort) => {
101
+ const normalized = normalizeThinkLevel(effort);
102
+ return normalized ? [normalized] : [];
103
+ });
104
+ const defaultThinkingLevel = normalizeThinkLevel(model.defaultReasoningEffort);
105
+ const responsesLite = /^gpt-5\.6-(?:sol|terra|luna)$/i.test(model.id);
106
+ return {
107
+ id: model.id,
108
+ name: model.displayName.replace(/-(Sol|Terra|Luna|Mini)$/i, " $1"),
109
+ input: model.inputModalities,
110
+ reasoning: thinkingLevels.length > 0,
111
+ tools: !responsesLite,
112
+ json: !responsesLite,
113
+ thinkingLevels,
114
+ ...defaultThinkingLevel ? { defaultThinkingLevel } : {},
115
+ thinkingMode: "openai-reasoning-effort",
116
+ reasoningBudgetSupported: false,
117
+ responsesLite,
118
+ source: "openai-codex-app-server"
119
+ };
120
+ });
121
+ }
122
+ async function discoverOpenAICodexModels(params) {
123
+ const profileId = listProfilesForProvider(params.store, OPENAI_CODEX_ROUTE)[0];
124
+ if (!profileId) {
125
+ return [];
126
+ }
127
+ const resolved = await resolveApiKeyForProfile({
128
+ cfg: params.cfg,
129
+ store: params.store,
130
+ profileId,
131
+ agentDir: params.agentDir
132
+ });
133
+ if (!resolved?.apiKey) {
134
+ return [];
135
+ }
136
+ const accountId = extractChatGptAccountId(resolved.apiKey);
137
+ if (!accountId) {
138
+ throw new Error("OpenAI sign-in token does not contain a ChatGPT account ID");
139
+ }
140
+ if (!params.fetchImpl) {
141
+ return parseAppServerModels(await (params.listAppServerModels ?? listOpenAICodexAppServerModels)({ token: resolved.apiKey }));
142
+ }
143
+ const url = new URL(OPENAI_CODEX_MODELS_URL);
144
+ url.searchParams.set("client_version", OPENAI_CODEX_CATALOG_CLIENT_VERSION);
145
+ const response = await (params.fetchImpl ?? fetch)(url, {
146
+ headers: {
147
+ authorization: `Bearer ${resolved.apiKey}`,
148
+ "chatgpt-account-id": accountId,
149
+ originator: "fased",
150
+ accept: "application/json"
151
+ },
152
+ signal: AbortSignal.timeout(DISCOVERY_TIMEOUT_MS)
153
+ });
154
+ if (!response.ok) {
155
+ throw new Error(`OpenAI account model discovery failed (${response.status})`);
156
+ }
157
+ return parseModels(await response.json());
158
+ }
159
+ const testing = {
160
+ extractChatGptAccountId,
161
+ parseAppServerModels,
162
+ parseModels
163
+ };
164
+
165
+ //#endregion
166
+ export { discoverOpenAICodexModels };