@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
@@ -0,0 +1,221 @@
1
+ import { log } from "./logger.js";
2
+ import { streamSimple } from "@mariozechner/pi-ai/compat";
3
+
4
+ //#region src/agents/pi-embedded-runner/openai-stream-wrappers.ts
5
+ const VALID_SERVICE_TIERS = new Set([
6
+ "default",
7
+ "auto",
8
+ "priority",
9
+ "standard_only"
10
+ ]);
11
+ const VALID_TEXT_VERBOSITY = new Set([
12
+ "low",
13
+ "medium",
14
+ "high"
15
+ ]);
16
+ function withPayloadPatch(baseStreamFn, patch) {
17
+ const underlying = baseStreamFn ?? streamSimple;
18
+ return (model, context, options) => underlying(model, context, {
19
+ ...options,
20
+ onPayload: (payload) => {
21
+ if (payload && typeof payload === "object") {
22
+ patch(payload, model);
23
+ }
24
+ return options?.onPayload?.(payload);
25
+ }
26
+ });
27
+ }
28
+ function readParam(extraParams, keys) {
29
+ if (!extraParams) {
30
+ return undefined;
31
+ }
32
+ for (const key of keys) {
33
+ if (Object.hasOwn(extraParams, key)) {
34
+ return extraParams[key];
35
+ }
36
+ }
37
+ return undefined;
38
+ }
39
+ function isDirectOpenAI(model) {
40
+ if (typeof model.baseUrl !== "string") {
41
+ return model.baseUrl === undefined && model.provider === "openai";
42
+ }
43
+ if (!model.baseUrl.trim()) {
44
+ return false;
45
+ }
46
+ try {
47
+ return new URL(model.baseUrl).hostname === "api.openai.com";
48
+ } catch {
49
+ return false;
50
+ }
51
+ }
52
+ function isDirectAzureOpenAI(model) {
53
+ if (typeof model.baseUrl !== "string" || !model.baseUrl.trim()) {
54
+ return false;
55
+ }
56
+ try {
57
+ return new URL(model.baseUrl).hostname.endsWith(".openai.azure.com");
58
+ } catch {
59
+ return false;
60
+ }
61
+ }
62
+ function isOpenAIResponsesApi(model) {
63
+ return model.api === "openai-responses" || model.api === "azure-openai-responses";
64
+ }
65
+ function isCodexResponsesApi(model) {
66
+ return model.api === "openai-codex-responses";
67
+ }
68
+ function supportsStore(model) {
69
+ const compat = model.compat;
70
+ return !(compat && typeof compat === "object" && compat.supportsStore === false);
71
+ }
72
+ function directResponsesRoute(model) {
73
+ return model.api === "openai-responses" && (isDirectOpenAI(model) || isDirectAzureOpenAI(model)) || model.api === "azure-openai-responses" && isDirectAzureOpenAI(model);
74
+ }
75
+ function serviceTierRoute(model) {
76
+ return isCodexResponsesApi(model) || model.api === "openai-responses" && model.provider === "openai" && isDirectOpenAI(model);
77
+ }
78
+ function resolveOpenAIFastMode(extraParams) {
79
+ return typeof extraParams?.fastMode === "boolean" ? extraParams.fastMode : undefined;
80
+ }
81
+ function formatExtraParamValue(value) {
82
+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean" || typeof value === "bigint") {
83
+ return String(value);
84
+ }
85
+ try {
86
+ return JSON.stringify(value) ?? typeof value;
87
+ } catch {
88
+ return Object.prototype.toString.call(value);
89
+ }
90
+ }
91
+ function resolveOpenAIServiceTier(extraParams) {
92
+ const value = readParam(extraParams, ["serviceTier", "service_tier"]);
93
+ if (value === undefined || value === null) {
94
+ return undefined;
95
+ }
96
+ if (typeof value === "string" && VALID_SERVICE_TIERS.has(value)) {
97
+ return value;
98
+ }
99
+ log.warn(`ignoring invalid OpenAI service tier param: ${formatExtraParamValue(value)}`);
100
+ return undefined;
101
+ }
102
+ function resolveOpenAITextVerbosity(extraParams) {
103
+ const value = readParam(extraParams, ["textVerbosity", "text_verbosity"]);
104
+ if (value === undefined || value === null) {
105
+ return undefined;
106
+ }
107
+ if (typeof value === "string" && VALID_TEXT_VERBOSITY.has(value)) {
108
+ return value;
109
+ }
110
+ log.warn(`ignoring invalid OpenAI text verbosity param: ${formatExtraParamValue(value)}`);
111
+ return undefined;
112
+ }
113
+ function createOpenAIDefaultTransportWrapper(baseStreamFn) {
114
+ const underlying = baseStreamFn ?? streamSimple;
115
+ return (model, context, options) => underlying(model, context, {
116
+ ...options,
117
+ transport: options?.transport ?? "auto",
118
+ openaiWsWarmup: options?.openaiWsWarmup ?? true
119
+ });
120
+ }
121
+ function createOpenAIAttributionHeadersWrapper(baseStreamFn) {
122
+ return baseStreamFn ?? streamSimple;
123
+ }
124
+ function createOpenAIServiceTierWrapper(baseStreamFn, serviceTier) {
125
+ return withPayloadPatch(baseStreamFn, (payload, model) => {
126
+ if (!serviceTierRoute(model)) {
127
+ return;
128
+ }
129
+ if (!("service_tier" in payload)) {
130
+ payload.service_tier = serviceTier;
131
+ }
132
+ });
133
+ }
134
+ function createOpenAIFastModeWrapper(baseStreamFn) {
135
+ return withPayloadPatch(baseStreamFn, (payload, model) => {
136
+ if (!serviceTierRoute(model)) {
137
+ return;
138
+ }
139
+ if (!("service_tier" in payload)) {
140
+ payload.service_tier = "priority";
141
+ }
142
+ const text = payload.text;
143
+ if (!text || typeof text !== "object" || !("verbosity" in text)) {
144
+ payload.text = {
145
+ ...text && typeof text === "object" ? text : {},
146
+ verbosity: "low"
147
+ };
148
+ }
149
+ });
150
+ }
151
+ function createOpenAITextVerbosityWrapper(baseStreamFn, textVerbosity) {
152
+ return withPayloadPatch(baseStreamFn, (payload, model) => {
153
+ if (!directResponsesRoute(model) && !isCodexResponsesApi(model)) {
154
+ return;
155
+ }
156
+ const text = payload.text;
157
+ if (!isCodexResponsesApi(model) && text && typeof text === "object" && "verbosity" in text) {
158
+ return;
159
+ }
160
+ payload.text = {
161
+ ...text && typeof text === "object" ? text : {},
162
+ verbosity: textVerbosity
163
+ };
164
+ });
165
+ }
166
+ function createOpenAIReasoningCompatibilityWrapper(baseStreamFn) {
167
+ return withPayloadPatch(baseStreamFn, (payload, model) => {
168
+ if (isOpenAIResponsesApi(model) && !directResponsesRoute(model)) {
169
+ delete payload.reasoning;
170
+ delete payload.reasoningEffort;
171
+ delete payload.reasoning_effort;
172
+ }
173
+ });
174
+ }
175
+ function createCodexNativeWebSearchWrapper(baseStreamFn, params) {
176
+ return withPayloadPatch(baseStreamFn, (payload, model) => {
177
+ const config = params.config;
178
+ if (!isCodexResponsesApi(model) || config?.tools?.web?.search?.enabled !== true || config.tools.web.search.openaiCodex?.enabled !== true) {
179
+ return;
180
+ }
181
+ const existing = Array.isArray(payload.tools) ? payload.tools : [];
182
+ if (existing.some((tool) => tool && typeof tool === "object" && tool.type === "web_search")) {
183
+ return;
184
+ }
185
+ payload.tools = [...existing, {
186
+ type: "web_search",
187
+ external_web_access: true,
188
+ filters: { allowed_domains: ["example.com"] }
189
+ }];
190
+ });
191
+ }
192
+ function createOpenAIResponsesContextManagementWrapper(baseStreamFn, extraParams) {
193
+ return withPayloadPatch(baseStreamFn, (payload, model) => {
194
+ if (!supportsStore(model)) {
195
+ delete payload.store;
196
+ } else if (directResponsesRoute(model) && model.api === "openai-responses") {
197
+ payload.store = true;
198
+ }
199
+ if (isCodexResponsesApi(model)) {
200
+ payload.store = false;
201
+ return;
202
+ }
203
+ if (isOpenAIResponsesApi(model) && !directResponsesRoute(model)) {
204
+ delete payload.prompt_cache_key;
205
+ delete payload.prompt_cache_retention;
206
+ }
207
+ const compactionParam = readParam(extraParams, ["responsesServerCompaction", "responses_server_compaction"]);
208
+ const shouldCompact = compactionParam === true || compactionParam !== false && model.api === "openai-responses" && isDirectOpenAI(model);
209
+ if (shouldCompact && !("context_management" in payload) && supportsStore(model) && isOpenAIResponsesApi(model)) {
210
+ const configuredThreshold = readParam(extraParams, ["responsesCompactThreshold", "responses_compact_threshold"]);
211
+ const threshold = typeof configuredThreshold === "number" ? configuredThreshold : typeof model.contextWindow === "number" ? Math.trunc(model.contextWindow * .7) : 8e4;
212
+ payload.context_management = [{
213
+ type: "compaction",
214
+ compact_threshold: threshold
215
+ }];
216
+ }
217
+ });
218
+ }
219
+
220
+ //#endregion
221
+ export { createOpenAIResponsesContextManagementWrapper };
@@ -20,6 +20,7 @@ import { resolveTelegramInlineButtonsScope } from "../../../telegram/inline-butt
20
20
  import { resolveTelegramReactionLevel } from "../../../telegram/reaction-level.js";
21
21
  import { MAX_IMAGE_BYTES } from "../../../media/constants.js";
22
22
  import { buildModelAliasLines } from "../../model-alias-lines.js";
23
+ import { resolveImageSanitizationLimits } from "../../image-sanitization.js";
23
24
  import "../model.js";
24
25
  import { buildTtsSystemPromptHint } from "../../../tts/tts.js";
25
26
  import { isReasoningTagProvider } from "../../../utils/provider-utils.js";
@@ -27,7 +28,6 @@ import { makeBootstrapWarn, resolveBootstrapContextForRun } from "../../bootstra
27
28
  import { listChannelSupportedActions, resolveChannelMessageToolHints } from "../../channel-tools.js";
28
29
  import { resolveFasedAgentDocsPath } from "../../docs-path.js";
29
30
  import { createPreparedEmbeddedPiSettingsManager } from "../../pi-project-settings.js";
30
- import { resolveImageSanitizationLimits } from "../../image-sanitization.js";
31
31
  import { detectRuntimeShell } from "../../shell-utils.js";
32
32
  import { isTimeoutError } from "../../failover-error.js";
33
33
  import { resolveSandboxRuntimeStatus } from "../../sandbox/runtime-status.js";
@@ -293,7 +293,9 @@ async function runEmbeddedAttempt(params) {
293
293
  sessionAgentId
294
294
  });
295
295
  const modelHasVision = params.model.input?.includes("image") ?? false;
296
- let toolsRaw = params.disableTools ? [] : createFasedAgentCodingTools({
296
+ const responsesLite = params.model.api === "openai-codex-responses" && params.model.compat?.responsesLite === true;
297
+ const toolsDisabled = params.disableTools === true || responsesLite;
298
+ let toolsRaw = toolsDisabled ? [] : createFasedAgentCodingTools({
297
299
  agentId: sessionAgentId,
298
300
  exec: {
299
301
  ...params.execOverrides,
@@ -332,7 +334,7 @@ async function runEmbeddedAttempt(params) {
332
334
  disableMessageTool: params.disableMessageTool,
333
335
  disabledToolNames: params.disabledToolNames
334
336
  });
335
- if (!params.disableTools) {
337
+ if (!toolsDisabled) {
336
338
  bundleMcpRuntime = await createBundleMcpToolRuntime({
337
339
  workspaceDir: effectiveWorkspace,
338
340
  cfg: params.config,
@@ -621,7 +623,7 @@ async function runEmbeddedAttempt(params) {
621
623
  modelApi: params.model.api,
622
624
  workspaceDir: params.workspaceDir
623
625
  });
624
- applyExtraParamsToAgent(activeSession.agent, params.config, params.provider, params.modelId, params.streamParams, params.thinkLevel, sessionAgentId);
626
+ applyExtraParamsToAgent(activeSession.agent, params.config, params.provider, params.modelId, params.streamParams, params.thinkLevel, sessionAgentId, agentDir, params.model, params.resolvedApiKey);
625
627
  if (cacheTrace) {
626
628
  cacheTrace.recordStage("session:loaded", {
627
629
  messages: activeSession.messages,
@@ -13,7 +13,7 @@ import { isMarkdownCapableMessageChannel } from "../../utils/message-channel.js"
13
13
  import { generateSecureToken } from "../../infra/secure-random.js";
14
14
  import { getGlobalHookRunner } from "../../plugins/hook-runner-global.js";
15
15
  import { enqueueCommandInLane } from "../../process/command-queue.js";
16
- import { resolveModel } from "./model.js";
16
+ import { resolveModelForExecution } from "./model.js";
17
17
  import { FailoverError, resolveFailoverStatus } from "../failover-error.js";
18
18
  import { derivePromptTokens, normalizeUsage } from "../usage.js";
19
19
  import { log } from "./logger.js";
@@ -205,7 +205,7 @@ async function runEmbeddedPiAgent(params) {
205
205
  modelId = modelResolveOverride.modelOverride;
206
206
  log.info(`[hooks] model overridden to ${modelId}`);
207
207
  }
208
- const { model, error, authStorage, modelRegistry } = resolveModel(provider, modelId, agentDir, params.config);
208
+ const { model, error, authStorage, modelRegistry } = await resolveModelForExecution(provider, modelId, agentDir, params.config);
209
209
  if (!model) {
210
210
  throw new FailoverError(error ?? `Unknown model: ${provider}/${modelId}`, {
211
211
  reason: "model_not_found",
@@ -260,6 +260,7 @@ async function runEmbeddedPiAgent(params) {
260
260
  let thinkLevel = initialThinkLevel;
261
261
  const attemptedThinking = new Set();
262
262
  let apiKeyInfo = null;
263
+ let resolvedApiKey;
263
264
  let lastProfileId;
264
265
  const resolveAuthProfileFailoverReason = (params) => {
265
266
  if (params.allInCooldown) {
@@ -308,6 +309,7 @@ async function runEmbeddedPiAgent(params) {
308
309
  if (!apiKeyInfo.apiKey) {
309
310
  throw new Error(`No API key resolved for provider "${model.provider}" (auth mode: ${apiKeyInfo.mode}).`);
310
311
  }
312
+ resolvedApiKey = apiKeyInfo.apiKey;
311
313
  if (model.provider === "github-copilot") {
312
314
  const { resolveCopilotApiToken } = await import("../../providers/github-copilot-token.js");
313
315
  const copilotToken = await resolveCopilotApiToken({ githubToken: apiKeyInfo.apiKey });
@@ -462,6 +464,7 @@ async function runEmbeddedPiAgent(params) {
462
464
  provider,
463
465
  modelId,
464
466
  model,
467
+ resolvedApiKey,
465
468
  authStorage,
466
469
  modelRegistry,
467
470
  agentId: workspaceResolution.agentId,
@@ -3,7 +3,7 @@ function mapThinkingLevel(level) {
3
3
  if (!level) {
4
4
  return "off";
5
5
  }
6
- return level === "max" ? "xhigh" : level;
6
+ return level === "max" || level === "ultra" ? "xhigh" : level;
7
7
  }
8
8
  function describeUnknownError(error) {
9
9
  if (error instanceof Error) {
@@ -5,7 +5,7 @@ import { buildEmbeddedSandboxInfo } from "./pi-embedded-runner/sandbox-info.js";
5
5
  import { createSystemPromptOverride } from "./pi-embedded-runner/system-prompt.js";
6
6
  import { splitSdkTools } from "./pi-embedded-runner/tool-split.js";
7
7
  import { compactEmbeddedPiSession } from "./pi-embedded-runner/compact.js";
8
- import { applyExtraParamsToAgent, resolveExtraParams } from "./pi-embedded-runner/extra-params.js";
8
+ import { applyExtraParamsToAgent } from "./pi-embedded-runner/extra-params.js";
9
9
  import { abortEmbeddedPiRun, isEmbeddedPiRunActive, isEmbeddedPiRunStreaming, queueEmbeddedPiMessage, waitForEmbeddedPiRunEnd } from "./pi-embedded-runner/runs.js";
10
10
  import { runEmbeddedPiAgent } from "./pi-embedded-runner/run.js";
11
11
 
@@ -1,6 +1,6 @@
1
1
  import { resolveStateDir } from "../config/paths.js";
2
2
  import { isTruthyEnvValue } from "../infra/env.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/pi-embedded-subscribe.raw-stream.ts
@@ -14,11 +14,11 @@ function appendRawStream(payload) {
14
14
  if (!rawStreamReady) {
15
15
  rawStreamReady = true;
16
16
  try {
17
- fs.mkdirSync(path.dirname(RAW_STREAM_PATH), { recursive: true });
17
+ syncFs.mkdirSync(path.dirname(RAW_STREAM_PATH), { recursive: true });
18
18
  } catch {}
19
19
  }
20
20
  try {
21
- void fs.promises.appendFile(RAW_STREAM_PATH, `${JSON.stringify(payload)}\n`);
21
+ void syncFs.promises.appendFile(RAW_STREAM_PATH, `${JSON.stringify(payload)}\n`);
22
22
  } catch {}
23
23
  }
24
24
 
@@ -3,7 +3,7 @@ import { getCompactionSafeguardRuntime } from "./compaction-safeguard-runtime.js
3
3
  import { extractSections } from "../../auto-reply/reply/post-compaction-context.js";
4
4
  import { BASE_CHUNK_RATIO, MIN_CHUNK_RATIO, SAFETY_MARGIN, SUMMARIZATION_OVERHEAD_TOKENS, computeAdaptiveChunkRatio, estimateMessagesTokens, isOversizedForSummary, pruneHistoryForContextShare, resolveContextWindowTokens, summarizeInStages } from "../compaction.js";
5
5
  import { collectTextContentBlocks } from "../content-blocks.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/agents/pi-extensions/compaction-safeguard.ts
@@ -122,10 +122,10 @@ async function readWorkspaceContextForSummary() {
122
122
  const workspaceDir = process.cwd();
123
123
  const agentsPath = path.join(workspaceDir, "AGENTS.md");
124
124
  try {
125
- if (!fs.existsSync(agentsPath)) {
125
+ if (!syncFs.existsSync(agentsPath)) {
126
126
  return "";
127
127
  }
128
- const content = await fs.promises.readFile(agentsPath, "utf-8");
128
+ const content = await syncFs.promises.readFile(agentsPath, "utf-8");
129
129
  const sections = extractSections(content, ["Session Startup", "Red Lines"]);
130
130
  if (sections.length === 0) {
131
131
  return "";
@@ -1,7 +1,7 @@
1
1
  import { ensureAuthProfileStore } from "./auth-profiles/store.js";
2
2
  import "./auth-profiles.js";
3
3
  import { resolvePiCredentialMapFromStore } from "./pi-auth-credentials.js";
4
- import fs from "node:fs";
4
+ import syncFs from "node:fs";
5
5
  import path from "node:path";
6
6
  import * as PiCodingAgent from "@mariozechner/pi-coding-agent";
7
7
 
@@ -25,12 +25,12 @@ function scrubLegacyStaticAuthJsonEntries(pathname) {
25
25
  if (process.env.FASED_AUTH_STORE_READONLY === "1") {
26
26
  return;
27
27
  }
28
- if (!fs.existsSync(pathname)) {
28
+ if (!syncFs.existsSync(pathname)) {
29
29
  return;
30
30
  }
31
31
  let parsed;
32
32
  try {
33
- parsed = JSON.parse(fs.readFileSync(pathname, "utf8"));
33
+ parsed = JSON.parse(syncFs.readFileSync(pathname, "utf8"));
34
34
  } catch {
35
35
  return;
36
36
  }
@@ -52,11 +52,11 @@ function scrubLegacyStaticAuthJsonEntries(pathname) {
52
52
  return;
53
53
  }
54
54
  if (Object.keys(parsed).length === 0) {
55
- fs.rmSync(pathname, { force: true });
55
+ syncFs.rmSync(pathname, { force: true });
56
56
  return;
57
57
  }
58
- fs.writeFileSync(pathname, `${JSON.stringify(parsed, null, 2)}\n`, "utf8");
59
- fs.chmodSync(pathname, 384);
58
+ syncFs.writeFileSync(pathname, `${JSON.stringify(parsed, null, 2)}\n`, "utf8");
59
+ syncFs.chmodSync(pathname, 384);
60
60
  }
61
61
  function createAuthStorage(AuthStorageLike, path, creds) {
62
62
  const withInMemory = AuthStorageLike;
@@ -1,6 +1,6 @@
1
1
  import { applyMergePatch } from "../config/merge-patch.js";
2
2
  import { applyPiCompactionSettingsFromConfig } from "./pi-settings.js";
3
- import fs from "node:fs";
3
+ import syncFs from "node:fs";
4
4
  import path from "node:path";
5
5
  import { SettingsManager } from "@mariozechner/pi-coding-agent";
6
6
 
@@ -28,7 +28,7 @@ function buildEmbeddedPiSettingsSnapshot(params) {
28
28
  }
29
29
  function readJsonFile(filePath) {
30
30
  try {
31
- const raw = fs.readFileSync(filePath, "utf8");
31
+ const raw = syncFs.readFileSync(filePath, "utf8");
32
32
  const parsed = JSON.parse(raw);
33
33
  return parsed && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : {};
34
34
  } catch {
@@ -49,7 +49,7 @@ function loadEnabledBundlePiSettingsSnapshot(params) {
49
49
  const servers = mcp.mcpServers && typeof mcp.mcpServers === "object" && !Array.isArray(mcp.mcpServers) ? mcp.mcpServers : undefined;
50
50
  if (servers) {
51
51
  const resolvedServers = {};
52
- const resolvedRoot = fs.realpathSync.native?.(pluginRoot) ?? fs.realpathSync(pluginRoot);
52
+ const resolvedRoot = syncFs.realpathSync.native?.(pluginRoot) ?? syncFs.realpathSync(pluginRoot);
53
53
  for (const [name, server] of Object.entries(servers)) {
54
54
  if (!server || typeof server !== "object" || Array.isArray(server)) {
55
55
  resolvedServers[name] = server;
@@ -5,10 +5,10 @@ import { resolveAgentConfig } from "./agent-scope.js";
5
5
  import { resolveGatewayMessageChannel } from "../utils/message-channel.js";
6
6
  import { resolveToolProfilePolicy } from "./tool-policy-shared.js";
7
7
  import { applyOwnerOnlyToolPolicy, collectExplicitAllowlist, mergeAlsoAllowPolicy } from "./tool-policy.js";
8
- import { listChannelAgentTools } from "./channel-tools.js";
9
- import { resolveMergedSafeBinProfileFixtures } from "../infra/exec-safe-bin-runtime-policy.js";
10
8
  import { resolveImageSanitizationLimits } from "./image-sanitization.js";
11
9
  import { getSubagentDepthFromSessionStore } from "./subagent-depth.js";
10
+ import { listChannelAgentTools } from "./channel-tools.js";
11
+ import { resolveMergedSafeBinProfileFixtures } from "../infra/exec-safe-bin-runtime-policy.js";
12
12
  import { getPluginToolMeta } from "../plugins/tools.js";
13
13
  import { createApplyPatchTool } from "./apply-patch.js";
14
14
  import { createExecTool } from "./bash-tools.exec.js";
@@ -3,7 +3,7 @@ import { PATH_ALIAS_POLICIES } from "../../infra/path-alias-guards.js";
3
3
  import { execDockerRaw } from "./docker.js";
4
4
  import { isPathInsideContainerRoot, normalizeContainerPath } from "./path-utils.js";
5
5
  import { buildSandboxFsMounts, resolveSandboxFsPathWithMounts } from "./fs-paths.js";
6
- import fs from "node:fs";
6
+ import syncFs from "node:fs";
7
7
 
8
8
  //#region src/agents/sandbox/fs-bridge.ts
9
9
  function createSandboxFsBridge(params) {
@@ -160,7 +160,7 @@ var SandboxFsBridgeImpl = class {
160
160
  throw guarded.error instanceof Error ? guarded.error : new Error(`Sandbox boundary checks failed; cannot ${options.action}: ${target.containerPath}`);
161
161
  }
162
162
  } else {
163
- fs.closeSync(guarded.fd);
163
+ syncFs.closeSync(guarded.fd);
164
164
  }
165
165
  const canonicalContainerPath = await this.resolveCanonicalContainerPath({
166
166
  containerPath: target.containerPath,
@@ -1,6 +1,6 @@
1
- import fs from "node:fs";
1
+ import syncFs from "node:fs";
2
2
  import path from "node:path";
3
- import fs$1 from "node:fs/promises";
3
+ import fs from "node:fs/promises";
4
4
 
5
5
  //#region src/agents/session-dirs.ts
6
6
  function mapAgentSessionDirs(agentsDir, entries) {
@@ -9,7 +9,7 @@ function mapAgentSessionDirs(agentsDir, entries) {
9
9
  async function resolveAgentSessionDirsFromAgentsDir(agentsDir) {
10
10
  let entries = [];
11
11
  try {
12
- entries = await fs$1.readdir(agentsDir, { withFileTypes: true });
12
+ entries = await fs.readdir(agentsDir, { withFileTypes: true });
13
13
  } catch (err) {
14
14
  const code = err.code;
15
15
  if (code === "ENOENT") {
@@ -22,7 +22,7 @@ async function resolveAgentSessionDirsFromAgentsDir(agentsDir) {
22
22
  function resolveAgentSessionDirsFromAgentsDirSync(agentsDir) {
23
23
  let entries = [];
24
24
  try {
25
- entries = fs.readdirSync(agentsDir, { withFileTypes: true });
25
+ entries = syncFs.readdirSync(agentsDir, { withFileTypes: true });
26
26
  } catch (err) {
27
27
  const code = err.code;
28
28
  if (code === "ENOENT") {
@@ -1,8 +1,8 @@
1
1
  import { isPidAlive } from "../shared/pid-alive.js";
2
2
  import { resolveProcessScopedMap } from "../shared/process-scoped-map.js";
3
- import fs from "node:fs";
3
+ import syncFs from "node:fs";
4
4
  import path from "node:path";
5
- import fs$1 from "node:fs/promises";
5
+ import fs from "node:fs/promises";
6
6
 
7
7
  //#region src/agents/session-write-lock.ts
8
8
  const CLEANUP_SIGNALS = [
@@ -84,7 +84,7 @@ async function releaseHeldLock(normalizedSessionFile, held, opts = {}) {
84
84
  await held.handle.close();
85
85
  } catch {}
86
86
  try {
87
- await fs$1.rm(held.lockPath, { force: true });
87
+ await fs.rm(held.lockPath, { force: true });
88
88
  } catch {}
89
89
  })();
90
90
  try {
@@ -106,7 +106,7 @@ function releaseAllLocksSync() {
106
106
  }
107
107
  } catch {}
108
108
  try {
109
- fs.rmSync(held.lockPath, { force: true });
109
+ syncFs.rmSync(held.lockPath, { force: true });
110
110
  } catch {}
111
111
  HELD_LOCKS.delete(sessionFile);
112
112
  }
@@ -175,7 +175,7 @@ function registerCleanupHandlers() {
175
175
  }
176
176
  async function readLockPayload(lockPath) {
177
177
  try {
178
- const raw = await fs$1.readFile(lockPath, "utf8");
178
+ const raw = await fs.readFile(lockPath, "utf8");
179
179
  const parsed = JSON.parse(raw);
180
180
  const payload = {};
181
181
  if (typeof parsed.pid === "number") {
@@ -226,7 +226,7 @@ async function shouldReclaimContendedLockFile(lockPath, details, staleMs, nowMs)
226
226
  return true;
227
227
  }
228
228
  try {
229
- const stat = await fs$1.stat(lockPath);
229
+ const stat = await fs.stat(lockPath);
230
230
  const ageMs = Math.max(0, nowMs - stat.mtimeMs);
231
231
  return ageMs > staleMs;
232
232
  } catch (error) {
@@ -241,7 +241,7 @@ async function cleanStaleLockFiles(params) {
241
241
  const nowMs = params.nowMs ?? Date.now();
242
242
  let entries = [];
243
243
  try {
244
- entries = await fs$1.readdir(sessionsDir, { withFileTypes: true });
244
+ entries = await fs.readdir(sessionsDir, { withFileTypes: true });
245
245
  } catch (err) {
246
246
  const code = err.code;
247
247
  if (code === "ENOENT") {
@@ -265,7 +265,7 @@ async function cleanStaleLockFiles(params) {
265
265
  removed: false
266
266
  };
267
267
  if (lockInfo.stale && removeStale) {
268
- await fs$1.rm(lockPath, { force: true });
268
+ await fs.rm(lockPath, { force: true });
269
269
  lockInfo.removed = true;
270
270
  cleaned.push(lockInfo);
271
271
  params.log?.warn?.(`removed stale session lock: ${lockPath} (${lockInfo.staleReasons.join(", ") || "unknown"})`);
@@ -284,10 +284,10 @@ async function acquireSessionWriteLock(params) {
284
284
  const maxHoldMs = resolvePositiveMs(params.maxHoldMs, DEFAULT_MAX_HOLD_MS);
285
285
  const sessionFile = path.resolve(params.sessionFile);
286
286
  const sessionDir = path.dirname(sessionFile);
287
- await fs$1.mkdir(sessionDir, { recursive: true });
287
+ await fs.mkdir(sessionDir, { recursive: true });
288
288
  let normalizedDir = sessionDir;
289
289
  try {
290
- normalizedDir = await fs$1.realpath(sessionDir);
290
+ normalizedDir = await fs.realpath(sessionDir);
291
291
  } catch {}
292
292
  const normalizedSessionFile = path.join(normalizedDir, path.basename(sessionFile));
293
293
  const lockPath = `${normalizedSessionFile}.lock`;
@@ -305,7 +305,7 @@ async function acquireSessionWriteLock(params) {
305
305
  attempt += 1;
306
306
  let handle = null;
307
307
  try {
308
- handle = await fs$1.open(lockPath, "wx");
308
+ handle = await fs.open(lockPath, "wx");
309
309
  const createdAt = new Date().toISOString();
310
310
  await handle.writeFile(JSON.stringify({
311
311
  pid: process.pid,
@@ -328,7 +328,7 @@ async function acquireSessionWriteLock(params) {
328
328
  await handle.close();
329
329
  } catch {}
330
330
  try {
331
- await fs$1.rm(lockPath, { force: true });
331
+ await fs.rm(lockPath, { force: true });
332
332
  } catch {}
333
333
  }
334
334
  const code = err.code;
@@ -339,7 +339,7 @@ async function acquireSessionWriteLock(params) {
339
339
  const nowMs = Date.now();
340
340
  const inspected = inspectLockPayload(payload, staleMs, nowMs);
341
341
  if (await shouldReclaimContendedLockFile(lockPath, inspected, staleMs, nowMs)) {
342
- await fs$1.rm(lockPath, { force: true });
342
+ await fs.rm(lockPath, { force: true });
343
343
  continue;
344
344
  }
345
345
  const delay = Math.min(1e3, 50 * attempt);
@@ -1,4 +1,4 @@
1
- import fs from "node:fs";
1
+ import syncFs from "node:fs";
2
2
  import path from "node:path";
3
3
  import { spawn } from "node:child_process";
4
4
 
@@ -6,13 +6,13 @@ import { spawn } from "node:child_process";
6
6
  function resolvePowerShellPath() {
7
7
  const programFiles = process.env.ProgramFiles || process.env.PROGRAMFILES || "C:\\Program Files";
8
8
  const pwsh7 = path.join(programFiles, "PowerShell", "7", "pwsh.exe");
9
- if (fs.existsSync(pwsh7)) {
9
+ if (syncFs.existsSync(pwsh7)) {
10
10
  return pwsh7;
11
11
  }
12
12
  const programW6432 = process.env.ProgramW6432;
13
13
  if (programW6432 && programW6432 !== programFiles) {
14
14
  const pwsh7Alt = path.join(programW6432, "PowerShell", "7", "pwsh.exe");
15
- if (fs.existsSync(pwsh7Alt)) {
15
+ if (syncFs.existsSync(pwsh7Alt)) {
16
16
  return pwsh7Alt;
17
17
  }
18
18
  }
@@ -23,7 +23,7 @@ function resolvePowerShellPath() {
23
23
  const systemRoot = process.env.SystemRoot || process.env.WINDIR;
24
24
  if (systemRoot) {
25
25
  const candidate = path.join(systemRoot, "System32", "WindowsPowerShell", "v1.0", "powershell.exe");
26
- if (fs.existsSync(candidate)) {
26
+ if (syncFs.existsSync(candidate)) {
27
27
  return candidate;
28
28
  }
29
29
  }
@@ -73,7 +73,7 @@ function resolveShellFromPath(name) {
73
73
  for (const entry of entries) {
74
74
  const candidate = path.join(entry, name);
75
75
  try {
76
- fs.accessSync(candidate, fs.constants.X_OK);
76
+ syncFs.accessSync(candidate, syncFs.constants.X_OK);
77
77
  return candidate;
78
78
  } catch {}
79
79
  }
@@ -1,12 +1,12 @@
1
1
  import { resolveFasedAgentPackageRootSync } from "../../infra/fased-root.js";
2
2
  import { fileURLToPath } from "node:url";
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/skills/bundled-dir.ts
7
7
  function looksLikeSkillsDir(dir) {
8
8
  try {
9
- const entries = fs.readdirSync(dir, { withFileTypes: true });
9
+ const entries = syncFs.readdirSync(dir, { withFileTypes: true });
10
10
  for (const entry of entries) {
11
11
  if (entry.name.startsWith(".")) {
12
12
  continue;
@@ -16,7 +16,7 @@ function looksLikeSkillsDir(dir) {
16
16
  return true;
17
17
  }
18
18
  if (entry.isDirectory()) {
19
- if (fs.existsSync(path.join(fullPath, "SKILL.md"))) {
19
+ if (syncFs.existsSync(path.join(fullPath, "SKILL.md"))) {
20
20
  return true;
21
21
  }
22
22
  }
@@ -35,7 +35,7 @@ function resolveBundledSkillsDir(opts = {}) {
35
35
  const execPath = opts.execPath ?? process.execPath;
36
36
  const execDir = path.dirname(execPath);
37
37
  const sibling = path.join(execDir, "skills");
38
- if (fs.existsSync(sibling)) {
38
+ if (syncFs.existsSync(sibling)) {
39
39
  return sibling;
40
40
  }
41
41
  } catch {}