@fased/fased 0.1.56 → 0.1.58

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 (362) hide show
  1. package/dist/acp/client.js +2 -2
  2. package/dist/acp/secret-file.js +2 -2
  3. package/dist/agents/agent-scope.js +2 -2
  4. package/dist/agents/apply-patch.js +8 -8
  5. package/dist/agents/auth-profiles/paths.js +2 -2
  6. package/dist/agents/auth-profiles/store.js +2 -2
  7. package/dist/agents/bash-tools.shared.js +2 -2
  8. package/dist/agents/cli-credentials.js +4 -4
  9. package/dist/agents/current-model-catalog.js +5 -2
  10. package/dist/agents/docs-path.js +3 -3
  11. package/dist/agents/embedded-pi-mcp.js +4 -4
  12. package/dist/agents/identity-avatar.js +3 -3
  13. package/dist/agents/identity-file.js +2 -2
  14. package/dist/agents/model-catalog-snapshot.js +124 -0
  15. package/dist/agents/model-catalog-status.js +6 -1
  16. package/dist/agents/openai-codex-app-server.js +35 -10
  17. package/dist/agents/openai-codex-runtime-component.js +39 -0
  18. package/dist/agents/pi-embedded-runner/compact.js +1 -1
  19. package/dist/agents/pi-embedded-runner/extra-params.js +28 -16
  20. package/dist/agents/pi-embedded-runner/run/attempt.js +1 -1
  21. package/dist/agents/pi-embedded-runner/session-manager-init.js +5 -20
  22. package/dist/agents/pi-embedded-subscribe.raw-stream.js +3 -3
  23. package/dist/agents/pi-extensions/compaction-safeguard.js +3 -3
  24. package/dist/agents/pi-model-discovery.js +6 -6
  25. package/dist/agents/pi-project-settings.js +3 -3
  26. package/dist/agents/provider-extension-catalog-manifest.js +2 -2
  27. package/dist/agents/sandbox/fs-bridge.js +2 -2
  28. package/dist/agents/session-dirs.js +4 -4
  29. package/dist/agents/session-write-lock.js +13 -13
  30. package/dist/agents/shell-utils.js +5 -5
  31. package/dist/agents/skills/bundled-dir.js +4 -4
  32. package/dist/agents/skills/local-loader.js +6 -6
  33. package/dist/agents/skills/plugin-skills.js +2 -2
  34. package/dist/agents/skills/workspace.js +13 -13
  35. package/dist/agents/skills-install-download.js +7 -7
  36. package/dist/agents/skills-install-plan.js +2 -2
  37. package/dist/agents/skills-install.js +2 -2
  38. package/dist/agents/skills-status.js +2 -2
  39. package/dist/agents/subagent-depth.js +2 -2
  40. package/dist/agents/system-prompt-params.js +2 -2
  41. package/dist/agents/tools/session-status-tool.js +1 -1
  42. package/dist/agents/workspace.js +22 -22
  43. package/dist/auto-reply/reply/agent-runner-execution.js +2 -2
  44. package/dist/auto-reply/reply/agent-runner.js +2 -2
  45. package/dist/auto-reply/reply/commands-export-session.js +7 -7
  46. package/dist/auto-reply/reply/post-compaction-audit.js +3 -3
  47. package/dist/auto-reply/reply/post-compaction-context.js +3 -3
  48. package/dist/auto-reply/reply/session.js +3 -3
  49. package/dist/auto-reply/skill-commands.js +3 -3
  50. package/dist/auto-reply/status.js +6 -6
  51. package/dist/brand.js +1 -1
  52. package/dist/browser/chrome.executables.js +3 -3
  53. package/dist/browser/chrome.js +3 -3
  54. package/dist/browser/chrome.profile-decoration.js +6 -6
  55. package/dist/browser/profiles-service.js +2 -2
  56. package/dist/browser/server-context.js +2 -2
  57. package/dist/browser/trash.js +4 -4
  58. package/dist/build-info.json +3 -3
  59. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  60. package/dist/canvas-host/server.js +4 -4
  61. package/dist/capabilities/catalog.js +3 -3
  62. package/dist/capabilities/install.js +43 -0
  63. package/dist/channels/plugins/catalog.js +3 -3
  64. package/dist/cli/browser-cli-extension.js +6 -6
  65. package/dist/cli/command-format.js +2 -2
  66. package/dist/cli/components-cli.js +9 -31
  67. package/dist/cli/cron-cli/register.cron-simple.js +2 -2
  68. package/dist/cli/dns-cli.js +9 -9
  69. package/dist/cli/gateway-cli/dev.js +5 -5
  70. package/dist/cli/gateway-cli/run.js +2 -2
  71. package/dist/cli/hooks-cli.js +6 -6
  72. package/dist/cli/lightweight/gateway-runtime-probe.js +2 -2
  73. package/dist/cli/memory-cli.js +7 -7
  74. package/dist/cli/nodes-media-utils.js +2 -2
  75. package/dist/cli/plugins-cli.js +5 -5
  76. package/dist/cli/secrets-cli.js +3 -3
  77. package/dist/cli/update-cli/update-command.js +50 -12
  78. package/dist/cli/windows-argv.js +2 -2
  79. package/dist/commands/agent.js +1 -1
  80. package/dist/commands/auth-choice.apply.openai.js +9 -0
  81. package/dist/commands/auth-choice.apply.plugin-provider.js +1 -1
  82. package/dist/commands/dashboard-link.js +3 -3
  83. package/dist/commands/doctor-install.js +5 -5
  84. package/dist/commands/doctor-memory-search.js +2 -2
  85. package/dist/commands/doctor-platform-notes.js +2 -2
  86. package/dist/commands/doctor-sandbox.js +2 -2
  87. package/dist/commands/doctor-state-integrity.js +23 -23
  88. package/dist/commands/doctor-workspace.js +3 -3
  89. package/dist/commands/doctor.js +3 -3
  90. package/dist/commands/managed-up.js +2 -2
  91. package/dist/commands/onboard-auth.credentials.js +3 -3
  92. package/dist/commands/onboard-channels.js +1 -1
  93. package/dist/commands/onboarding/plugin-install.js +4 -4
  94. package/dist/commands/sessions-cleanup.js +2 -2
  95. package/dist/commands/signal-install.js +6 -6
  96. package/dist/commands/status-all/channels.js +2 -2
  97. package/dist/commands/wallet.js +47 -47
  98. package/dist/config/cache-utils.js +2 -2
  99. package/dist/config/includes.js +5 -5
  100. package/dist/config/io.js +2 -2
  101. package/dist/config/paths.js +3 -3
  102. package/dist/config/sat-runtime-ids.js +3 -3
  103. package/dist/config/sessions/disk-budget.js +6 -6
  104. package/dist/config/sessions/paths.js +2 -2
  105. package/dist/config/sessions/store.js +17 -17
  106. package/dist/config/sessions/transcript.js +4 -4
  107. package/dist/config/talk.js +2 -2
  108. package/dist/control-ui/assets/{app-D7TXyNRi.js → app-CpgQGqe6.js} +1689 -1689
  109. package/dist/control-ui/assets/{index-BmSBom-w.js → index-DiBBflpv.js} +3 -3
  110. package/dist/control-ui/index.html +1 -1
  111. package/dist/control-ui/version.json +1 -1
  112. package/dist/cron/service/store.js +2 -2
  113. package/dist/cron/store.js +6 -6
  114. package/dist/daemon/systemd-system.js +5 -5
  115. package/dist/discord/monitor/thread-bindings.state.js +2 -2
  116. package/dist/extensions/sat-mining/src/sat-bond-layout.js +9 -9
  117. package/dist/gateway/control-ui-boot-check.js +6 -6
  118. package/dist/gateway/control-ui-login.js +7 -7
  119. package/dist/gateway/control-ui.js +9 -9
  120. package/dist/gateway/hooks-mapping.js +4 -4
  121. package/dist/gateway/protocol/schema/agents-models-skills.js +43 -1
  122. package/dist/gateway/server-discovery.js +2 -2
  123. package/dist/gateway/server-http.js +4 -4
  124. package/dist/gateway/server-methods/chat.js +3 -3
  125. package/dist/gateway/server-methods/hooks.js +1 -1
  126. package/dist/gateway/server-methods/models.js +12 -5
  127. package/dist/gateway/server-methods/plugins-marketplace.js +3 -3
  128. package/dist/gateway/server-methods/services.js +1 -1
  129. package/dist/gateway/server-methods/sessions.js +7 -7
  130. package/dist/gateway/server-methods/usage.js +2 -2
  131. package/dist/gateway/server.impl.js +3 -3
  132. package/dist/gateway/session-compaction-checkpoints.js +4 -4
  133. package/dist/gateway/session-utils.fs.js +24 -24
  134. package/dist/gateway/session-utils.js +6 -6
  135. package/dist/gateway/sessions-patch.js +1 -1
  136. package/dist/hooks/bundled-dir.js +4 -4
  137. package/dist/hooks/gmail-setup-utils.js +6 -6
  138. package/dist/hooks/import-url.js +2 -2
  139. package/dist/hooks/loader.js +4 -4
  140. package/dist/hooks/workspace.js +7 -7
  141. package/dist/infra/archive.js +17 -17
  142. package/dist/infra/boundary-file-read.js +2 -2
  143. package/dist/infra/boundary-path.js +15 -15
  144. package/dist/infra/brew.js +2 -2
  145. package/dist/infra/control-ui-assets.js +14 -14
  146. package/dist/infra/device-auth-store.js +8 -8
  147. package/dist/infra/device-identity.js +8 -8
  148. package/dist/infra/dotenv.js +2 -2
  149. package/dist/infra/exec-approvals.js +8 -8
  150. package/dist/infra/exec-command-resolution.js +4 -4
  151. package/dist/infra/exec-safe-bin-trust.js +2 -2
  152. package/dist/infra/fased-root.js +5 -5
  153. package/dist/infra/fs-safe.js +14 -14
  154. package/dist/infra/gateway-lock.js +11 -11
  155. package/dist/infra/git-commit.js +5 -5
  156. package/dist/infra/git-root.js +4 -4
  157. package/dist/infra/hosted-runtime-artifact.js +3 -3
  158. package/dist/infra/is-main.js +2 -2
  159. package/dist/infra/json-file.js +7 -7
  160. package/dist/infra/outbound/delivery-queue.js +16 -16
  161. package/dist/infra/path-env.js +3 -3
  162. package/dist/infra/ports-lsof.js +4 -4
  163. package/dist/infra/provider-usage.auth.js +3 -3
  164. package/dist/infra/safe-open-sync.js +2 -2
  165. package/dist/infra/session-cost-usage.js +9 -9
  166. package/dist/infra/shell-env.js +2 -2
  167. package/dist/infra/state-migrations.fs.js +6 -6
  168. package/dist/infra/state-migrations.js +23 -23
  169. package/dist/infra/tmp-fased-dir.js +6 -6
  170. package/dist/infra/widearea-dns.js +3 -3
  171. package/dist/infra/wsl.js +2 -2
  172. package/dist/light-update-status.js +11 -11
  173. package/dist/line/accounts.js +2 -2
  174. package/dist/line/download.js +2 -2
  175. package/dist/logging/config.js +3 -3
  176. package/dist/logging/logger.js +7 -7
  177. package/dist/managed/federation.js +3 -3
  178. package/dist/managed/tunnel.js +3 -3
  179. package/dist/media/store.js +13 -13
  180. package/dist/media-understanding/runner.js +3 -3
  181. package/dist/memory/embeddings.js +2 -2
  182. package/dist/memory/internal.js +10 -10
  183. package/dist/memory/manager-sync-ops.js +7 -7
  184. package/dist/memory/repair-executor.js +17 -17
  185. package/dist/node-host/invoke-system-run-plan.js +8 -8
  186. package/dist/node-host/invoke.js +2 -2
  187. package/dist/node-host/runner.js +3 -3
  188. package/dist/pairing/pairing-store.js +3 -3
  189. package/dist/plugin-sdk/{accounts-DzWlKv1U.js → accounts-BJuN64m-.js} +1 -1
  190. package/dist/plugin-sdk/{actions-BplQVLL6.js → actions-DaEvM9Bl.js} +2 -2
  191. package/dist/plugin-sdk/{active-listener-x4MLhYUw.js → active-listener-B8Kuanet.js} +1 -1
  192. package/dist/plugin-sdk/{agent-scope-BbgPlhtw.js → agent-scope-CCjfjKoO.js} +1 -1
  193. package/dist/plugin-sdk/{audio-preflight-G8h3Sn8_.js → audio-preflight-D7tCO0EH.js} +31 -31
  194. package/dist/plugin-sdk/{audit-CWknklvI.js → audit-CVWH4BVP.js} +1 -1
  195. package/dist/plugin-sdk/{channel-access-a9Dnfw7-.js → channel-access-CH9FAS-I.js} +1 -1
  196. package/dist/plugin-sdk/{channel-access-configure-CD4QDN5E.js → channel-access-configure-CI0je66H.js} +1 -1
  197. package/dist/plugin-sdk/channel-plugin-common.d.ts +2 -2
  198. package/dist/plugin-sdk/channel-plugin-common.js +5 -5
  199. package/dist/plugin-sdk/{chunk-B8EZkwiT.js → chunk-01oBnQjh.js} +1 -1
  200. package/dist/plugin-sdk/{chunk-items-CEPklxGe.js → chunk-items-D2zDJ8q8.js} +1 -1
  201. package/dist/plugin-sdk/command-status.js +31 -31
  202. package/dist/plugin-sdk/{commands-registry-BfEa4tFA.js → commands-registry-ckg4fhYa.js} +2 -2
  203. package/dist/plugin-sdk/{common-CbfckC19.js → common-zHvdO8ly.js} +1 -1
  204. package/dist/plugin-sdk/{config-Bt5GhnA-.js → config-DrhYEiCM.js} +1128 -3
  205. package/dist/plugin-sdk/{config-schema-B9DKr6J5.js → config-schema-BtjeV5Hm.js} +1765 -1412
  206. package/dist/plugin-sdk/device-pair.d.ts +1 -1
  207. package/dist/plugin-sdk/discord.d.ts +3 -3
  208. package/dist/plugin-sdk/discord.js +22 -22
  209. package/dist/plugin-sdk/{filesystem-manager-BGGGrkiN.js → filesystem-manager-ZoHU8oA7.js} +2 -2
  210. package/dist/plugin-sdk/{fs-safe-xBqok6yR.js → fs-safe-g4g7GT02.js} +2 -2
  211. package/dist/plugin-sdk/{handle-action-DbzZFYnG.js → handle-action-5dhYpMbP.js} +17 -17
  212. package/dist/plugin-sdk/{helpers-CluGKuIV.js → helpers-E9aafRzA.js} +1 -1
  213. package/dist/plugin-sdk/{image-ops-CUaLtIFj.js → image-ops-D2U9ctmu.js} +1 -1
  214. package/dist/plugin-sdk/index.d.ts +5 -5
  215. package/dist/plugin-sdk/index.js +33 -33
  216. package/dist/plugin-sdk/json-store.js +6 -6
  217. package/dist/plugin-sdk/{login-DJuHYDiK.js → login-hql0fNuL.js} +3 -3
  218. package/dist/plugin-sdk/{login-qr-CbHL5ayf.js → login-qr-DJJ0svux.js} +4 -4
  219. package/dist/plugin-sdk/{manager-oHAvZCT3.js → manager-ciNnAMBn.js} +4 -4
  220. package/dist/plugin-sdk/{markdown-tables-Mkx7k92Y.js → markdown-tables-BKxbua_h.js} +1 -1
  221. package/dist/plugin-sdk/{media-CA8sTmVE.js → media-DUIZ6x9H.js} +4 -4
  222. package/dist/plugin-sdk/{memory-search-VFll-AIb.js → memory-search-DTjIMw8J.js} +1 -1
  223. package/dist/plugin-sdk/{monitor-CZrN9pev.js → monitor-CNSGw4uQ.js} +35 -35
  224. package/dist/plugin-sdk/{monitor-CmwGqNyV.js → monitor-D-giXewh.js} +38 -38
  225. package/dist/plugin-sdk/{openresponses-http-CWOd4war.js → openresponses-http-dbTd8UMk.js} +31 -31
  226. package/dist/plugin-sdk/{optional-runtime-dependency-DKmk9PZa.js → optional-runtime-dependency-CKsJL1PD.js} +1 -1
  227. package/dist/plugin-sdk/{outbound-0oN9IfNw.js → outbound-DhGrjRft.js} +6 -6
  228. package/dist/plugin-sdk/{outbound-attachment-DdVkqUzE.js → outbound-attachment-DAF8huFz.js} +2 -2
  229. package/dist/plugin-sdk/{pairing-message-ClqhfCUk.js → pairing-message-BsJVvXkb.js} +1 -1
  230. package/dist/plugin-sdk/{pairing-message-BMkkS038.d.ts → pairing-message-C403mq4K.d.ts} +1 -1
  231. package/dist/plugin-sdk/{pairing-store-B01mCSct.js → pairing-store-DwM-BNbj.js} +2 -2
  232. package/dist/plugin-sdk/{path-alias-guards-BJZD5JMJ.js → path-alias-guards-DjgDArrp.js} +1 -1
  233. package/dist/plugin-sdk/{pi-model-discovery-Buz0JC1Y.js → pi-model-discovery-DkIdlJvJ.js} +1 -1
  234. package/dist/plugin-sdk/{pi-model-discovery-runtime-DuwuoteY.js → pi-model-discovery-runtime-Cv7okUMt.js} +3 -3
  235. package/dist/plugin-sdk/{probe--7xtfzMm.js → probe-CJb5uR8B.js} +1 -1
  236. package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +1 -1
  237. package/dist/plugin-sdk/{pw-ai-B0domrii.js → pw-ai-Dxd87W3J.js} +6 -6
  238. package/dist/plugin-sdk/{qmd-manager-CFFeM4Fl.js → qmd-manager-DSyx77KY.js} +1 -1
  239. package/dist/plugin-sdk/{replies-1macZ1mZ.js → replies-Bx61SvAC.js} +2 -2
  240. package/dist/plugin-sdk/{reply-prefix-ClpxvL_w.js → reply-prefix-CeVw7Mn2.js} +1 -1
  241. package/dist/plugin-sdk/{probe-xY3Ky0Tx.js → resolve-channels-_-nV-EK2.js} +3 -2
  242. package/dist/plugin-sdk/{resolve-outbound-target-BdH6LUoW.js → resolve-outbound-target-bc-FpPZg.js} +1 -1
  243. package/dist/plugin-sdk/{resolve-route-CkNIKKEW.js → resolve-route-D0eBYPtb.js} +2 -2
  244. package/dist/plugin-sdk/{retry-policy-9ybIh4Fq.js → retry-policy-HTrC4zfC.js} +1 -1
  245. package/dist/plugin-sdk/{runtime-Dy420wBu.js → runtime-BVkIrYLQ.js} +4 -4
  246. package/dist/plugin-sdk/{runtime-dependency-CIw9t7-k.js → runtime-dependency-B2PqMdBu.js} +13 -13
  247. package/dist/plugin-sdk/{sandbox-paths-w64tYl0v.js → sandbox-paths-Dx2lUqCu.js} +2 -2
  248. package/dist/plugin-sdk/sat-runtime.d.ts +2 -2
  249. package/dist/plugin-sdk/sat-runtime.js +31 -31
  250. package/dist/plugin-sdk/{send-J4JWKP62.js → send-BGDGzxUu.js} +6 -6
  251. package/dist/plugin-sdk/{send-BQUtCJFW.js → send-C3QWSYLR.js} +8 -8
  252. package/dist/plugin-sdk/{send-Dqes9tdU.js → send-DT2egZNK.js} +7 -7
  253. package/dist/plugin-sdk/{send-2VcOMTN5.js → send-DgzZUx2i.js} +5 -5
  254. package/dist/plugin-sdk/{send-DPJIIYAs.js → send-KJy3ajA3.js} +6 -6
  255. package/dist/plugin-sdk/{session-C_n2S5ub.js → session-BCIEFOu1.js} +2 -2
  256. package/dist/plugin-sdk/{skill-commands-B7wx9ax8.js → skill-commands-CyIkcR8P.js} +4 -4
  257. package/dist/plugin-sdk/{slack-BouRQG-W.js → slack-DjKNh2uh.js} +47 -47
  258. package/dist/plugin-sdk/{slack-actions-CasHVtiq.js → slack-actions-CeM9LWDp.js} +14 -14
  259. package/dist/plugin-sdk/slack.d.ts +3 -3
  260. package/dist/plugin-sdk/slack.js +12 -12
  261. package/dist/plugin-sdk/{sticker-cache-BvGEUas3.js → sticker-cache-DcWzQ2wx.js} +3 -3
  262. package/dist/plugin-sdk/{tables-CjlQJV4r.js → tables-B2iehyjG.js} +1 -1
  263. package/dist/plugin-sdk/{targets-QfP164Dh.js → targets-BPket0SF.js} +1 -1
  264. package/dist/plugin-sdk/{telegram-actions-CwYjV6Db.js → telegram-actions-Cx_HWVht.js} +34 -34
  265. package/dist/plugin-sdk/telegram.d.ts +3 -3
  266. package/dist/plugin-sdk/telegram.js +9 -9
  267. package/dist/plugin-sdk/{thread-bindings.lifecycle-DU4iX_Jr.js → thread-bindings.lifecycle-CYH69SIw.js} +3 -3
  268. package/dist/plugin-sdk/{thread-bindings.state-BgYWFjNF.js → thread-bindings.state-BN6461WG.js} +2 -2
  269. package/dist/plugin-sdk/{tmp-fased-dir-BdFQvrvw.d.ts → tmp-fased-dir-Ouj58axY.d.ts} +1 -1
  270. package/dist/plugin-sdk/{types-BYDL6dQj.d.ts → types-B4hj6HgR.d.ts} +1 -1
  271. package/dist/plugin-sdk/{types-CLIvQaVg.d.ts → types-dWZFX1fk.d.ts} +2 -2
  272. package/dist/plugin-sdk/{web-D0yENDve.js → web-vR-oNiBv.js} +36 -36
  273. package/dist/plugin-sdk/{whatsapp-actions-BT2nPLyo.js → whatsapp-actions-BYNf8ceY.js} +16 -16
  274. package/dist/plugin-sdk/{whatsapp-heartbeat-CiABSZ6G.js → whatsapp-heartbeat-DZwa8MF0.js} +2 -2
  275. package/dist/plugin-sdk/whatsapp.d.ts +3 -3
  276. package/dist/plugin-sdk/whatsapp.js +13 -13
  277. package/dist/plugin-sdk/{wsl-B_ojyEtC.js → wsl-WGtdw_6h.js} +3 -3
  278. package/dist/plugins/bundled-dir.js +3 -3
  279. package/dist/plugins/discovery.js +11 -11
  280. package/dist/plugins/lifecycle.js +1 -1
  281. package/dist/plugins/loader.js +13 -13
  282. package/dist/plugins/manifest-registry.js +28 -2
  283. package/dist/plugins/manifest.js +6 -4
  284. package/dist/plugins/marketplace.js +1 -1
  285. package/dist/plugins/path-safety.js +3 -3
  286. package/dist/plugins/status-cache.js +9 -9
  287. package/dist/plugins/update.js +4 -4
  288. package/dist/plugins/web-search-install-catalog.js +3 -3
  289. package/dist/providers/openai-codex-model-discovery.js +11 -1
  290. package/dist/providers/runtime-model-catalog.js +2 -2
  291. package/dist/secrets/apply.js +16 -16
  292. package/dist/secrets/audit.js +11 -11
  293. package/dist/secrets/shared.js +9 -9
  294. package/dist/security/scan-paths.js +2 -2
  295. package/dist/shared/config-eval.js +2 -2
  296. package/dist/shared/pid-alive.js +2 -2
  297. package/dist/tasks/standing-orders.js +5 -5
  298. package/dist/tasks/task-flow-registry.js +5 -5
  299. package/dist/tasks/task-registry.js +5 -5
  300. package/dist/tasks/workflow-definitions.js +6 -6
  301. package/dist/telegram/token.js +5 -5
  302. package/dist/utils.js +5 -5
  303. package/dist/wallet/local-socket-signer-broker.js +16 -16
  304. package/dist/wallet/providers/embedded-keystore-adapter.js +5 -5
  305. package/dist/wallet/providers/local-socket-signer-adapter.js +2 -2
  306. package/dist/wallet/wallet-approval-auth.js +5 -5
  307. package/dist/wallet/wallet-audit-log.js +5 -5
  308. package/dist/wallet/wallet-custody.js +21 -21
  309. package/dist/wallet/wallet-inbound-events.js +5 -5
  310. package/dist/wallet/wallet-observability.js +5 -5
  311. package/dist/wallet/wallet-policy.js +9 -9
  312. package/dist/wallet/wallet-provider-registry.js +7 -7
  313. package/dist/wallet/wallet-runtime-config.js +3 -3
  314. package/dist/wallet/wallet-secrets-store.js +22 -22
  315. package/dist/wallet/wallet-send-approvals.js +5 -5
  316. package/dist/wallet/wallet-settlement-links.js +5 -5
  317. package/dist/web/accounts.js +3 -3
  318. package/dist/web/auth-store.js +18 -18
  319. package/dist/web/session.js +4 -4
  320. package/dist/wizard/host-security-capability.js +2 -2
  321. package/dist/wizard/onboarding.finalize.js +1 -1
  322. package/dist/wizard/onboarding.host-security.js +7 -7
  323. package/dist/wizard/onboarding.js +7 -7
  324. package/dist/wizard/onboarding.wallet.js +44 -44
  325. package/extensions/acpx/package.json +1 -1
  326. package/extensions/bluebubbles/package.json +1 -1
  327. package/extensions/copilot-proxy/package.json +1 -1
  328. package/extensions/diagnostics-otel/package.json +1 -1
  329. package/extensions/fased-federation/package.json +1 -1
  330. package/extensions/google-gemini-cli-auth/package.json +1 -1
  331. package/extensions/imessage/package.json +1 -1
  332. package/extensions/irc/package.json +1 -1
  333. package/extensions/line/package.json +1 -1
  334. package/extensions/llm-task/package.json +1 -1
  335. package/extensions/lobster/package.json +1 -1
  336. package/extensions/matrix/CHANGELOG.md +12 -0
  337. package/extensions/matrix/package.json +1 -1
  338. package/extensions/mattermost/package.json +1 -1
  339. package/extensions/memory-core/package.json +2 -2
  340. package/extensions/memory-lancedb/package.json +1 -1
  341. package/extensions/minimax-portal-auth/package.json +1 -1
  342. package/extensions/msteams/CHANGELOG.md +12 -0
  343. package/extensions/msteams/package.json +1 -1
  344. package/extensions/nextcloud-talk/package.json +1 -1
  345. package/extensions/nostr/CHANGELOG.md +12 -0
  346. package/extensions/nostr/package.json +1 -1
  347. package/extensions/open-prose/package.json +1 -1
  348. package/extensions/sat-mining/package.json +1 -1
  349. package/extensions/signal/package.json +1 -1
  350. package/extensions/synology-chat/package.json +1 -1
  351. package/extensions/tlon/package.json +1 -1
  352. package/extensions/twitch/CHANGELOG.md +12 -0
  353. package/extensions/twitch/package.json +1 -1
  354. package/extensions/voice-call/CHANGELOG.md +12 -0
  355. package/extensions/voice-call/package.json +1 -1
  356. package/extensions/zalo/CHANGELOG.md +12 -0
  357. package/extensions/zalo/package.json +1 -1
  358. package/extensions/zalouser/CHANGELOG.md +12 -0
  359. package/extensions/zalouser/package.json +1 -1
  360. package/package.json +1 -1
  361. package/dist/plugin-sdk/resolve-channels-CwB2_019.js +0 -4
  362. /package/dist/plugin-sdk/{resolve-users-Cxb5wpAQ.js → resolve-users-DN9VQBwv.js} +0 -0
@@ -1,9 +1,12 @@
1
1
  import { resolveFasedAgentAgentDir } from "../agent-paths.js";
2
2
  import { ensureAuthProfileStore } from "../auth-profiles/store.js";
3
3
  import { listProfilesForProvider } from "../auth-profiles/profiles.js";
4
+ import { loadConfig, writeConfigFile } from "../../config/io.js";
5
+ import "../../config/config.js";
4
6
  import { resolveApiKeyForProfile } from "../auth-profiles/oauth.js";
5
7
  import "../auth-profiles.js";
6
8
  import { createOpenAICodexAppServerStreamFn } from "../openai-codex-app-server.js";
9
+ import { ensureOpenAICodexRuntimeComponent } from "../openai-codex-runtime-component.js";
7
10
  import { log } from "./logger.js";
8
11
  import { createMoonshotThinkingWrapper, resolveMoonshotThinkingType } from "./moonshot-stream-wrappers.js";
9
12
  import { createOpenAIResponsesContextManagementWrapper } from "./openai-stream-wrappers.js";
@@ -399,23 +402,32 @@ function usesCodexResponsesLite(model) {
399
402
  }
400
403
  function createCodexResponsesLiteWrapper(baseStreamFn, params) {
401
404
  const underlying = baseStreamFn ?? streamSimple;
402
- const appServer = createOpenAICodexAppServerStreamFn({ resolveToken: async () => {
403
- if (params?.resolvedApiKey?.trim()) {
404
- return params.resolvedApiKey.trim();
405
- }
406
- const agentDir = params?.agentDir ?? resolveFasedAgentAgentDir();
407
- const store = ensureAuthProfileStore(agentDir, { allowKeychainPrompt: false });
408
- const profileId = listProfilesForProvider(store, "openai-codex")[0];
409
- if (!profileId) {
410
- return undefined;
405
+ const appServer = createOpenAICodexAppServerStreamFn({
406
+ resolveExecutable: async () => {
407
+ const runtime = await ensureOpenAICodexRuntimeComponent({ config: params?.cfg ?? loadConfig() });
408
+ if (runtime.installed) {
409
+ await writeConfigFile(runtime.config);
410
+ }
411
+ return runtime.executable;
412
+ },
413
+ resolveToken: async () => {
414
+ if (params?.resolvedApiKey?.trim()) {
415
+ return params.resolvedApiKey.trim();
416
+ }
417
+ const agentDir = params?.agentDir ?? resolveFasedAgentAgentDir();
418
+ const store = ensureAuthProfileStore(agentDir, { allowKeychainPrompt: false });
419
+ const profileId = listProfilesForProvider(store, "openai-codex")[0];
420
+ if (!profileId) {
421
+ return undefined;
422
+ }
423
+ return (await resolveApiKeyForProfile({
424
+ cfg: params?.cfg ?? {},
425
+ store,
426
+ profileId,
427
+ agentDir
428
+ }))?.apiKey;
411
429
  }
412
- return (await resolveApiKeyForProfile({
413
- cfg: params?.cfg ?? {},
414
- store,
415
- profileId,
416
- agentDir
417
- }))?.apiKey;
418
- } });
430
+ });
419
431
  return (model, context, options) => {
420
432
  if (!usesCodexResponsesLite(model)) {
421
433
  return underlying(model, context, options);
@@ -19,8 +19,8 @@ import { resolveSignalReactionLevel } from "../../../signal/reaction-level.js";
19
19
  import { resolveTelegramInlineButtonsScope } from "../../../telegram/inline-buttons.js";
20
20
  import { resolveTelegramReactionLevel } from "../../../telegram/reaction-level.js";
21
21
  import { MAX_IMAGE_BYTES } from "../../../media/constants.js";
22
- import { buildModelAliasLines } from "../../model-alias-lines.js";
23
22
  import { resolveImageSanitizationLimits } from "../../image-sanitization.js";
23
+ import { buildModelAliasLines } from "../../model-alias-lines.js";
24
24
  import "../model.js";
25
25
  import { buildTtsSystemPromptHint } from "../../../tts/tts.js";
26
26
  import { isReasoningTagProvider } from "../../../utils/provider-utils.js";
@@ -1,33 +1,18 @@
1
- import fs from "node:fs/promises";
2
-
3
1
  //#region src/agents/pi-embedded-runner/session-manager-init.ts
4
2
  /**
5
- * pi-coding-agent SessionManager persistence quirk:
6
- * - If the file exists but has no assistant message, SessionManager marks itself `flushed=true`
7
- * and will never persist the initial user message.
8
- * - If the file doesn't exist yet, SessionManager builds a new session in memory and flushes
9
- * header+user+assistant once the first assistant arrives (good).
10
- *
11
- * This normalizes the file/session state so the first user prompt is persisted before the first
12
- * assistant entry, even for pre-created session files.
3
+ * Keep Fased's requested identity for new transcripts while leaving existing
4
+ * transcripts under SessionManager's append lifecycle. In particular, an
5
+ * existing header-only file is already marked flushed by SessionManager and
6
+ * must not be truncated or reset to unflushed: its next assistant write uses
7
+ * exclusive creation and would fail with EEXIST.
13
8
  */
14
9
  async function prepareSessionManagerForRun(params) {
15
10
  const sm = params.sessionManager;
16
11
  const header = sm.fileEntries.find((e) => e.type === "session");
17
- const hasAssistant = sm.fileEntries.some((e) => e.type === "message" && e.message?.role === "assistant");
18
12
  if (!params.hadSessionFile && header) {
19
13
  header.id = params.sessionId;
20
14
  header.cwd = params.cwd;
21
15
  sm.sessionId = params.sessionId;
22
- return;
23
- }
24
- if (params.hadSessionFile && header && !hasAssistant) {
25
- await fs.writeFile(params.sessionFile, "", "utf-8");
26
- sm.fileEntries = [header];
27
- sm.byId?.clear?.();
28
- sm.labelsById?.clear?.();
29
- sm.leafId = null;
30
- sm.flushed = false;
31
16
  }
32
17
  }
33
18
 
@@ -1,6 +1,6 @@
1
1
  import { resolveStateDir } from "../config/paths.js";
2
2
  import { isTruthyEnvValue } from "../infra/env.js";
3
- import syncFs from "node:fs";
3
+ import fs 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
- syncFs.mkdirSync(path.dirname(RAW_STREAM_PATH), { recursive: true });
17
+ fs.mkdirSync(path.dirname(RAW_STREAM_PATH), { recursive: true });
18
18
  } catch {}
19
19
  }
20
20
  try {
21
- void syncFs.promises.appendFile(RAW_STREAM_PATH, `${JSON.stringify(payload)}\n`);
21
+ void fs.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 syncFs from "node:fs";
6
+ import fs 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 (!syncFs.existsSync(agentsPath)) {
125
+ if (!fs.existsSync(agentsPath)) {
126
126
  return "";
127
127
  }
128
- const content = await syncFs.promises.readFile(agentsPath, "utf-8");
128
+ const content = await fs.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 syncFs from "node:fs";
4
+ import fs 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 (!syncFs.existsSync(pathname)) {
28
+ if (!fs.existsSync(pathname)) {
29
29
  return;
30
30
  }
31
31
  let parsed;
32
32
  try {
33
- parsed = JSON.parse(syncFs.readFileSync(pathname, "utf8"));
33
+ parsed = JSON.parse(fs.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
- syncFs.rmSync(pathname, { force: true });
55
+ fs.rmSync(pathname, { force: true });
56
56
  return;
57
57
  }
58
- syncFs.writeFileSync(pathname, `${JSON.stringify(parsed, null, 2)}\n`, "utf8");
59
- syncFs.chmodSync(pathname, 384);
58
+ fs.writeFileSync(pathname, `${JSON.stringify(parsed, null, 2)}\n`, "utf8");
59
+ fs.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 syncFs from "node:fs";
3
+ import fs 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 = syncFs.readFileSync(filePath, "utf8");
31
+ const raw = fs.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 = syncFs.realpathSync.native?.(pluginRoot) ?? syncFs.realpathSync(pluginRoot);
52
+ const resolvedRoot = fs.realpathSync.native?.(pluginRoot) ?? fs.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;
@@ -56,8 +56,8 @@ const FASED_PROVIDER_EXTENSION_CATALOG_MANIFEST = [
56
56
  upstreamProviderId: "kimi-coding",
57
57
  upstreamCatalogPaths: ["extensions/kimi-coding/provider-catalog.ts"],
58
58
  status: "mapped",
59
- fasedProviderIds: ["kimi"],
60
- fasedProviderAliases: ["kimi-coding", "kimi-code"],
59
+ fasedProviderIds: ["kimi-coding"],
60
+ fasedProviderAliases: ["kimi", "kimi-code"],
61
61
  docsPath: "docs/providers/moonshot.md",
62
62
  authSurface: "api-key",
63
63
  authChoiceIds: ["kimi-code-api-key"]
@@ -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 syncFs from "node:fs";
6
+ import fs 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
- syncFs.closeSync(guarded.fd);
163
+ fs.closeSync(guarded.fd);
164
164
  }
165
165
  const canonicalContainerPath = await this.resolveCanonicalContainerPath({
166
166
  containerPath: target.containerPath,
@@ -1,6 +1,6 @@
1
- import syncFs from "node:fs";
1
+ import fs from "node:fs";
2
2
  import path from "node:path";
3
- import fs from "node:fs/promises";
3
+ import fs$1 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.readdir(agentsDir, { withFileTypes: true });
12
+ entries = await fs$1.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 = syncFs.readdirSync(agentsDir, { withFileTypes: true });
25
+ entries = fs.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 syncFs from "node:fs";
3
+ import fs from "node:fs";
4
4
  import path from "node:path";
5
- import fs from "node:fs/promises";
5
+ import fs$1 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.rm(held.lockPath, { force: true });
87
+ await fs$1.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
- syncFs.rmSync(held.lockPath, { force: true });
109
+ fs.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.readFile(lockPath, "utf8");
178
+ const raw = await fs$1.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.stat(lockPath);
229
+ const stat = await fs$1.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.readdir(sessionsDir, { withFileTypes: true });
244
+ entries = await fs$1.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.rm(lockPath, { force: true });
268
+ await fs$1.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.mkdir(sessionDir, { recursive: true });
287
+ await fs$1.mkdir(sessionDir, { recursive: true });
288
288
  let normalizedDir = sessionDir;
289
289
  try {
290
- normalizedDir = await fs.realpath(sessionDir);
290
+ normalizedDir = await fs$1.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.open(lockPath, "wx");
308
+ handle = await fs$1.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.rm(lockPath, { force: true });
331
+ await fs$1.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.rm(lockPath, { force: true });
342
+ await fs$1.rm(lockPath, { force: true });
343
343
  continue;
344
344
  }
345
345
  const delay = Math.min(1e3, 50 * attempt);
@@ -1,4 +1,4 @@
1
- import syncFs from "node:fs";
1
+ import fs 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 (syncFs.existsSync(pwsh7)) {
9
+ if (fs.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 (syncFs.existsSync(pwsh7Alt)) {
15
+ if (fs.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 (syncFs.existsSync(candidate)) {
26
+ if (fs.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
- syncFs.accessSync(candidate, syncFs.constants.X_OK);
76
+ fs.accessSync(candidate, fs.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 syncFs from "node:fs";
3
+ import fs 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 = syncFs.readdirSync(dir, { withFileTypes: true });
9
+ const entries = fs.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 (syncFs.existsSync(path.join(fullPath, "SKILL.md"))) {
19
+ if (fs.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 (syncFs.existsSync(sibling)) {
38
+ if (fs.existsSync(sibling)) {
39
39
  return sibling;
40
40
  }
41
41
  } catch {}
@@ -1,7 +1,7 @@
1
1
  import { openVerifiedFileSync } from "../../infra/safe-open-sync.js";
2
2
  import { parseFrontmatter, resolveSkillInvocationPolicy } from "./frontmatter.js";
3
3
  import { createSyntheticSourceInfo } from "./skill-contract.js";
4
- import syncFs from "node:fs";
4
+ import fs from "node:fs";
5
5
  import path from "node:path";
6
6
 
7
7
  //#region src/agents/skills/local-loader.ts
@@ -22,9 +22,9 @@ function readSkillFileSync(params) {
22
22
  if (!isPathWithinRoot(params.rootRealPath, opened.path)) {
23
23
  return null;
24
24
  }
25
- return syncFs.readFileSync(opened.fd, "utf8");
25
+ return fs.readFileSync(opened.fd, "utf8");
26
26
  } finally {
27
- syncFs.closeSync(opened.fd);
27
+ fs.closeSync(opened.fd);
28
28
  }
29
29
  }
30
30
  function loadSingleSkillDirectory(params) {
@@ -69,7 +69,7 @@ function loadSingleSkillDirectory(params) {
69
69
  }
70
70
  function listCandidateSkillDirs(dir) {
71
71
  try {
72
- return syncFs.readdirSync(dir, { withFileTypes: true }).filter((entry) => entry.isDirectory() && !entry.name.startsWith(".") && entry.name !== "node_modules").map((entry) => path.join(dir, entry.name)).sort((left, right) => left.localeCompare(right));
72
+ return fs.readdirSync(dir, { withFileTypes: true }).filter((entry) => entry.isDirectory() && !entry.name.startsWith(".") && entry.name !== "node_modules").map((entry) => path.join(dir, entry.name)).sort((left, right) => left.localeCompare(right));
73
73
  } catch {
74
74
  return [];
75
75
  }
@@ -78,7 +78,7 @@ function loadSkillsFromDirSafe(params) {
78
78
  const rootDir = path.resolve(params.dir);
79
79
  let rootRealPath;
80
80
  try {
81
- rootRealPath = syncFs.realpathSync(rootDir);
81
+ rootRealPath = fs.realpathSync(rootDir);
82
82
  } catch {
83
83
  return { skills: [] };
84
84
  }
@@ -102,7 +102,7 @@ function loadSkillsFromDirSafe(params) {
102
102
  function readSkillFrontmatterSafe(params) {
103
103
  let rootRealPath;
104
104
  try {
105
- rootRealPath = syncFs.realpathSync(path.resolve(params.rootDir));
105
+ rootRealPath = fs.realpathSync(path.resolve(params.rootDir));
106
106
  } catch {
107
107
  return null;
108
108
  }
@@ -1,7 +1,7 @@
1
1
  import { createSubsystemLogger } from "../../logging/subsystem.js";
2
2
  import { normalizePluginsConfig, resolveEffectiveEnableState, resolveMemorySlotDecision } from "../../plugins/config-state.js";
3
3
  import { loadPluginManifestRegistry } from "../../plugins/manifest-registry.js";
4
- import syncFs from "node:fs";
4
+ import fs from "node:fs";
5
5
  import path from "node:path";
6
6
 
7
7
  //#region src/agents/skills/plugin-skills.ts
@@ -58,7 +58,7 @@ function resolvePluginSkillDirs(params) {
58
58
  continue;
59
59
  }
60
60
  const candidate = path.resolve(record.rootDir, trimmed);
61
- if (!syncFs.existsSync(candidate)) {
61
+ if (!fs.existsSync(candidate)) {
62
62
  log.warn(`plugin skill path not found (${record.id}): ${candidate}`);
63
63
  continue;
64
64
  }
@@ -8,13 +8,13 @@ import { shouldIncludeSkill } from "./config.js";
8
8
  import { resolveBundledSkillsDir } from "./bundled-dir.js";
9
9
  import { resolvePluginSkillDirs } from "./plugin-skills.js";
10
10
  import { serializeByKey } from "./serialize.js";
11
- import syncFs from "node:fs";
11
+ import fs from "node:fs";
12
12
  import os from "node:os";
13
13
  import path from "node:path";
14
14
  import { formatSkillsForPrompt, loadSkillsFromDir } from "@mariozechner/pi-coding-agent";
15
15
 
16
16
  //#region src/agents/skills/workspace.ts
17
- const fsp = syncFs.promises;
17
+ const fsp = fs.promises;
18
18
  const skillsLogger = createSubsystemLogger("skills");
19
19
  const skillCommandDebugOnce = new Set();
20
20
  /**
@@ -84,10 +84,10 @@ function isPathWithinRoot(candidatePath, rootPath) {
84
84
  let candidate = path.resolve(candidatePath);
85
85
  let root = path.resolve(rootPath);
86
86
  try {
87
- candidate = syncFs.realpathSync.native(candidate);
87
+ candidate = fs.realpathSync.native(candidate);
88
88
  } catch {}
89
89
  try {
90
- root = syncFs.realpathSync.native(root);
90
+ root = fs.realpathSync.native(root);
91
91
  } catch {}
92
92
  const relative = path.relative(root, candidate);
93
93
  return relative === "" || !relative.startsWith("..") && !path.isAbsolute(relative);
@@ -135,7 +135,7 @@ function resolveSkillsLimits(config) {
135
135
  }
136
136
  function listChildDirectories(dir) {
137
137
  try {
138
- const entries = syncFs.readdirSync(dir, { withFileTypes: true });
138
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
139
139
  const dirs = [];
140
140
  for (const entry of entries) {
141
141
  if (entry.name.startsWith(".")) continue;
@@ -147,7 +147,7 @@ function listChildDirectories(dir) {
147
147
  }
148
148
  if (entry.isSymbolicLink()) {
149
149
  try {
150
- if (syncFs.statSync(fullPath).isDirectory()) {
150
+ if (fs.statSync(fullPath).isDirectory()) {
151
151
  dirs.push(entry.name);
152
152
  }
153
153
  } catch {}
@@ -161,7 +161,7 @@ function listChildDirectories(dir) {
161
161
  function resolveNestedSkillsRoot(dir, opts) {
162
162
  const nested = path.join(dir, "skills");
163
163
  try {
164
- if (!syncFs.existsSync(nested) || !syncFs.statSync(nested).isDirectory()) {
164
+ if (!fs.existsSync(nested) || !fs.statSync(nested).isDirectory()) {
165
165
  return { baseDir: dir };
166
166
  }
167
167
  } catch {
@@ -172,7 +172,7 @@ function resolveNestedSkillsRoot(dir, opts) {
172
172
  const toScan = scanLimit === 0 ? [] : nestedDirs.slice(0, Math.min(nestedDirs.length, scanLimit));
173
173
  for (const name of toScan) {
174
174
  const skillMd = path.join(nested, name, "SKILL.md");
175
- if (syncFs.existsSync(skillMd)) {
175
+ if (fs.existsSync(skillMd)) {
176
176
  return {
177
177
  baseDir: nested,
178
178
  note: `Detected nested skills root at ${nested}`
@@ -199,9 +199,9 @@ function loadSkillEntries(workspaceDir, opts) {
199
199
  const resolved = resolveNestedSkillsRoot(params.dir, { maxEntriesToScan: limits.maxCandidatesPerRoot });
200
200
  const baseDir = resolved.baseDir;
201
201
  const rootSkillMd = path.join(baseDir, "SKILL.md");
202
- if (syncFs.existsSync(rootSkillMd)) {
202
+ if (fs.existsSync(rootSkillMd)) {
203
203
  try {
204
- const size = syncFs.statSync(rootSkillMd).size;
204
+ const size = fs.statSync(rootSkillMd).size;
205
205
  if (size > limits.maxSkillFileBytes) {
206
206
  skillsLogger.warn("Skipping skills root due to oversized SKILL.md.", {
207
207
  dir: baseDir,
@@ -244,11 +244,11 @@ function loadSkillEntries(workspaceDir, opts) {
244
244
  for (const name of limitedChildren) {
245
245
  const skillDir = path.join(baseDir, name);
246
246
  const skillMd = path.join(skillDir, "SKILL.md");
247
- if (!syncFs.existsSync(skillMd)) {
247
+ if (!fs.existsSync(skillMd)) {
248
248
  continue;
249
249
  }
250
250
  try {
251
- const size = syncFs.statSync(skillMd).size;
251
+ const size = fs.statSync(skillMd).size;
252
252
  if (size > limits.maxSkillFileBytes) {
253
253
  skillsLogger.warn("Skipping skill due to oversized SKILL.md.", {
254
254
  skill: name,
@@ -336,7 +336,7 @@ function loadSkillEntries(workspaceDir, opts) {
336
336
  const skillEntries = Array.from(merged.values()).map((skill) => {
337
337
  let frontmatter = {};
338
338
  try {
339
- const raw = syncFs.readFileSync(skill.filePath, "utf-8");
339
+ const raw = fs.readFileSync(skill.filePath, "utf-8");
340
340
  frontmatter = parseFrontmatter(raw);
341
341
  } catch {}
342
342
  return {