@fased/fased 0.1.61 → 0.1.64

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 (514) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/README.md +38 -30
  3. package/config/dependency-ownership.json +1 -1
  4. package/config/signer-policies/README.md +49 -0
  5. package/config/signer-policies/agent.json.template +32 -0
  6. package/config/signer-policies/mining.json.template +69 -0
  7. package/config/signer-policies/network.json.template +5 -0
  8. package/config/signer-policies/vault.json.template +70 -0
  9. package/config/signer-protocol-v2.json +76 -0
  10. package/config/typescript-noemit-baseline.json +680 -0
  11. package/dist/acp/client.js +2 -2
  12. package/dist/acp/secret-file.js +2 -2
  13. package/dist/agents/agent-scope.js +2 -2
  14. package/dist/agents/apply-patch.js +8 -8
  15. package/dist/agents/auth-profiles/paths.js +2 -2
  16. package/dist/agents/auth-profiles/store.js +269 -33
  17. package/dist/agents/bash-tools.exec.js +10 -4
  18. package/dist/agents/bash-tools.shared.js +2 -2
  19. package/dist/agents/cli-credentials.js +4 -4
  20. package/dist/agents/current-model-catalog.js +3 -3
  21. package/dist/agents/docs-path.js +3 -3
  22. package/dist/agents/embedded-pi-mcp.js +4 -4
  23. package/dist/agents/identity-avatar.js +3 -3
  24. package/dist/agents/identity-file.js +2 -2
  25. package/dist/agents/memory-search.js +7 -1
  26. package/dist/agents/model-catalog-access.js +1 -2
  27. package/dist/agents/model-catalog-snapshot.js +1 -1
  28. package/dist/agents/model-catalog-source.js +1 -1
  29. package/dist/agents/model-metadata.js +1 -1
  30. package/dist/agents/model-selection.js +2 -28
  31. package/dist/agents/models-config.providers.js +6 -6
  32. package/dist/agents/openai-codex-app-server.js +5 -5
  33. package/dist/agents/pi-embedded-runner/compact.js +15 -7
  34. package/dist/agents/pi-embedded-runner/model.js +1 -1
  35. package/dist/agents/pi-embedded-runner/run/attempt.js +24 -13
  36. package/dist/agents/pi-embedded-runner/run.js +2 -0
  37. package/dist/agents/pi-embedded-runner/tool-split.js +40 -2
  38. package/dist/agents/pi-embedded-subscribe.raw-stream.js +3 -3
  39. package/dist/agents/pi-extensions/compaction-safeguard.js +3 -3
  40. package/dist/agents/pi-model-discovery.js +6 -6
  41. package/dist/agents/pi-project-settings.js +3 -3
  42. package/dist/agents/pi-tool-definition-adapter.js +16 -1
  43. package/dist/agents/pi-tools.js +2 -1
  44. package/dist/agents/sandbox/config.js +1 -1
  45. package/dist/agents/sandbox/context.js +27 -2
  46. package/dist/agents/sandbox/fs-bridge.js +2 -2
  47. package/dist/agents/session-dirs.js +4 -4
  48. package/dist/agents/session-write-lock.js +13 -13
  49. package/dist/agents/shell-utils.js +5 -5
  50. package/dist/agents/skills/bundled-dir.js +4 -4
  51. package/dist/agents/skills/env-overrides.js +38 -28
  52. package/dist/agents/skills/local-loader.js +6 -6
  53. package/dist/agents/skills/plugin-skills.js +2 -2
  54. package/dist/agents/skills/trust.js +93 -0
  55. package/dist/agents/skills/workspace.js +141 -13
  56. package/dist/agents/skills-clawhub.js +36 -11
  57. package/dist/agents/skills-install-download.js +7 -7
  58. package/dist/agents/skills-install-plan.js +2 -2
  59. package/dist/agents/skills-install.js +2 -2
  60. package/dist/agents/skills-marketplace-scan.js +49 -0
  61. package/dist/agents/skills-status.js +2 -2
  62. package/dist/agents/subagent-depth.js +2 -2
  63. package/dist/agents/system-prompt-params.js +2 -2
  64. package/dist/agents/tools/marketplace-offer-draft-tool.js +1 -1
  65. package/dist/agents/tools/mining-tool.js +1 -1
  66. package/dist/agents/tools/session-status-tool.js +1 -1
  67. package/dist/agents/tools/wallet-action-tool.js +172 -36
  68. package/dist/agents/tools/wallet-skill-policy.js +65 -23
  69. package/dist/agents/tools/wallet-tool.js +7 -11
  70. package/dist/agents/workspace.js +22 -22
  71. package/dist/auto-reply/reply/agent-runner-execution.js +2 -2
  72. package/dist/auto-reply/reply/agent-runner.js +2 -2
  73. package/dist/auto-reply/reply/commands-export-session.js +7 -7
  74. package/dist/auto-reply/reply/directive-handling.fast-lane.js +2 -1
  75. package/dist/auto-reply/reply/directive-handling.impl.js +2 -1
  76. package/dist/auto-reply/reply/directive-handling.model.js +2 -1
  77. package/dist/auto-reply/reply/directive-handling.persist.js +2 -2
  78. package/dist/auto-reply/reply/get-reply-directives-apply.js +2 -0
  79. package/dist/auto-reply/reply/get-reply-inline-actions.js +25 -1
  80. package/dist/auto-reply/reply/model-selection.js +7 -4
  81. package/dist/auto-reply/reply/post-compaction-audit.js +3 -3
  82. package/dist/auto-reply/reply/post-compaction-context.js +3 -3
  83. package/dist/auto-reply/reply/session-reset-model.js +4 -4
  84. package/dist/auto-reply/reply/session.js +3 -3
  85. package/dist/auto-reply/skill-commands.js +3 -3
  86. package/dist/auto-reply/status.js +6 -6
  87. package/dist/brand.js +1 -1
  88. package/dist/browser/chrome.executables.js +3 -3
  89. package/dist/browser/chrome.js +3 -3
  90. package/dist/browser/chrome.profile-decoration.js +6 -6
  91. package/dist/browser/profiles-service.js +2 -2
  92. package/dist/browser/server-context.js +2 -2
  93. package/dist/browser/trash.js +4 -4
  94. package/dist/build-info.json +3 -3
  95. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  96. package/dist/canvas-host/server.js +4 -4
  97. package/dist/capabilities/catalog.js +3 -3
  98. package/dist/channel-web.js +2 -2
  99. package/dist/channels/plugins/catalog.js +3 -3
  100. package/dist/cli/browser-cli-extension.js +6 -6
  101. package/dist/cli/command-format.js +2 -2
  102. package/dist/cli/cron-cli/register.cron-simple.js +2 -2
  103. package/dist/cli/dns-cli.js +9 -9
  104. package/dist/cli/gateway-cli/dev.js +5 -5
  105. package/dist/cli/gateway-cli/run.js +10 -2
  106. package/dist/cli/hooks-cli.js +5 -5
  107. package/dist/cli/lightweight/gateway-runtime-probe.js +2 -2
  108. package/dist/cli/memory-cli.js +7 -7
  109. package/dist/cli/nodes-media-utils.js +2 -2
  110. package/dist/cli/plugins-cli.js +2 -2
  111. package/dist/cli/program/command-registry.js +1 -1
  112. package/dist/cli/program/register.onboard.js +2 -3
  113. package/dist/cli/program/register.wallet.js +16 -123
  114. package/dist/cli/providers-cli.js +1 -1
  115. package/dist/cli/sat-cli.js +129 -2
  116. package/dist/cli/secrets-cli.js +3 -3
  117. package/dist/cli/update-cli/update-command.js +260 -11
  118. package/dist/cli/windows-argv.js +2 -2
  119. package/dist/commands/auth-choice.apply.api-providers.js +3 -3
  120. package/dist/commands/dashboard-link.js +3 -3
  121. package/dist/commands/doctor-config-flow.js +1 -1
  122. package/dist/commands/doctor-install.js +5 -5
  123. package/dist/commands/doctor-legacy-config.js +2 -13
  124. package/dist/commands/doctor-memory-search.js +2 -2
  125. package/dist/commands/doctor-platform-notes.js +2 -2
  126. package/dist/commands/doctor-sandbox.js +2 -2
  127. package/dist/commands/doctor-state-integrity.js +23 -23
  128. package/dist/commands/doctor-workspace.js +3 -3
  129. package/dist/commands/doctor.js +3 -3
  130. package/dist/commands/managed-up.js +2 -2
  131. package/dist/commands/model-picker.js +6 -6
  132. package/dist/commands/models/auth.js +1 -1
  133. package/dist/commands/onboard-auth.config-gateways.js +1 -1
  134. package/dist/commands/onboard-auth.credentials.js +35 -11
  135. package/dist/commands/onboard-non-interactive/local/wallet-config.js +28 -27
  136. package/dist/commands/onboard-non-interactive/local.js +5 -1
  137. package/dist/commands/onboarding/plugin-install.js +2 -2
  138. package/dist/commands/sessions-cleanup.js +2 -2
  139. package/dist/commands/signal-install.js +6 -6
  140. package/dist/commands/status-all/channels.js +2 -2
  141. package/dist/commands/wallet.js +570 -1913
  142. package/dist/config/cache-utils.js +2 -2
  143. package/dist/config/config.js +2 -2
  144. package/dist/config/includes.js +5 -5
  145. package/dist/config/io.js +66 -4
  146. package/dist/config/paths.js +3 -3
  147. package/dist/config/sat-runtime-ids.js +3 -3
  148. package/dist/config/schema.help.js +8 -7
  149. package/dist/config/schema.labels.js +5 -4
  150. package/dist/config/sessions/disk-budget.js +6 -6
  151. package/dist/config/sessions/paths.js +2 -2
  152. package/dist/config/sessions/store.js +17 -17
  153. package/dist/config/sessions/transcript.js +4 -4
  154. package/dist/config/talk.js +2 -2
  155. package/dist/config/zod-schema.agent-runtime.js +1 -0
  156. package/dist/config/zod-schema.js +5 -0
  157. package/dist/control-ui/assets/{app-BXA4gPvN.js → app-bR-fO5ty.js} +1511 -1555
  158. package/dist/control-ui/assets/{config-CU5Zi8Dh.js → config-LeImukCW.js} +10 -10
  159. package/dist/control-ui/assets/{federation-D10Q4eP_.js → federation-DgA9e-Pn.js} +364 -422
  160. package/dist/control-ui/assets/{index-D2QbJhVg.js → index-ckCxHwjy.js} +3 -3
  161. package/dist/control-ui/assets/{mining-BdhMn18r.js → mining-BgHFh0ei.js} +134 -114
  162. package/dist/control-ui/assets/mining-commit-DFpB_4JN.js +2 -0
  163. package/dist/control-ui/assets/{open-external-url-DwSiwMPl.js → open-external-url-ulF1B-sA.js} +3 -3
  164. package/dist/control-ui/assets/{providers-QMn4w2_f.js → providers-CIx9fxc6.js} +2 -2
  165. package/dist/control-ui/assets/{wallet-C2g294QT.js → wallet-DvStR_AT.js} +259 -377
  166. package/dist/control-ui/index.html +1 -1
  167. package/dist/control-ui/version.json +1 -1
  168. package/dist/cron/service/store.js +2 -2
  169. package/dist/cron/store.js +6 -6
  170. package/dist/daemon/systemd-system.js +60 -54
  171. package/dist/discord/monitor/thread-bindings.state.js +2 -2
  172. package/dist/extensions/sat-mining/src/protocol-contract.js +43 -3
  173. package/dist/extensions/sat-mining/src/rpc-read.js +235 -67
  174. package/dist/extensions/sat-mining/src/sat-bond-layout.js +14 -11
  175. package/dist/extensions/sat-mining/src/signer-codec-manifest.js +406 -0
  176. package/dist/extensions/sat-mining/src/solana-submit.js +1038 -397
  177. package/dist/extensions/sat-mining/src/submission-ledger.js +349 -0
  178. package/dist/federation/auto-connect.js +98 -8
  179. package/dist/federation/marketplace-capability-adapter.js +33 -7
  180. package/dist/federation/marketplace-delivery-outbox.js +196 -0
  181. package/dist/federation/marketplace-delivery.js +351 -215
  182. package/dist/federation/marketplace-direct-payment.js +272 -141
  183. package/dist/federation/marketplace-escrow.js +607 -249
  184. package/dist/federation/marketplace-settlement-ledger.js +352 -0
  185. package/dist/federation/offers.js +9 -7
  186. package/dist/federation/peer-auth-v2.js +529 -0
  187. package/dist/gateway/a2a-http.js +425 -96
  188. package/dist/gateway/a2a-settlement.js +259 -153
  189. package/dist/gateway/a2a-task-store.js +524 -0
  190. package/dist/gateway/auth.js +38 -2
  191. package/dist/gateway/config-reload.js +46 -33
  192. package/dist/gateway/control-ui-boot-check.js +6 -6
  193. package/dist/gateway/control-ui-login.js +7 -7
  194. package/dist/gateway/control-ui.js +9 -9
  195. package/dist/gateway/durable-capacity.js +31 -0
  196. package/dist/gateway/federation-http.js +540 -135
  197. package/dist/gateway/federation-marketplace-run-store.js +397 -0
  198. package/dist/gateway/federation-marketplace.js +535 -230
  199. package/dist/gateway/hooks-mapping.js +4 -4
  200. package/dist/gateway/mutating-admin-rpc-rate-limit.js +5 -0
  201. package/dist/gateway/security-path.js +1 -1
  202. package/dist/gateway/server-discovery.js +2 -2
  203. package/dist/gateway/server-http.js +1088 -1209
  204. package/dist/gateway/server-methods/chat.js +3 -3
  205. package/dist/gateway/server-methods/models.js +1 -1
  206. package/dist/gateway/server-methods/secrets.js +40 -0
  207. package/dist/gateway/server-methods/sessions.js +6 -6
  208. package/dist/gateway/server-methods/usage.js +2 -2
  209. package/dist/gateway/server-methods.js +1 -2
  210. package/dist/gateway/server-reload-handlers.js +196 -66
  211. package/dist/gateway/server-runtime-config.js +1 -1
  212. package/dist/gateway/server-secrets-runtime.js +288 -0
  213. package/dist/gateway/server.impl.js +73 -42
  214. package/dist/gateway/session-compaction-checkpoints.js +4 -4
  215. package/dist/gateway/session-utils.fs.js +24 -24
  216. package/dist/gateway/session-utils.js +6 -6
  217. package/dist/gateway/sessions-patch.js +3 -5
  218. package/dist/hooks/bundled-dir.js +4 -4
  219. package/dist/hooks/gmail-setup-utils.js +6 -6
  220. package/dist/hooks/import-url.js +2 -2
  221. package/dist/hooks/loader.js +4 -4
  222. package/dist/hooks/workspace.js +7 -7
  223. package/dist/index.js +4 -2
  224. package/dist/infra/archive.js +17 -17
  225. package/dist/infra/boundary-file-read.js +2 -2
  226. package/dist/infra/boundary-path.js +15 -15
  227. package/dist/infra/brew.js +2 -2
  228. package/dist/infra/control-ui-assets.js +14 -14
  229. package/dist/infra/device-auth-store.js +8 -8
  230. package/dist/infra/device-identity.js +8 -8
  231. package/dist/infra/dotenv.js +2 -2
  232. package/dist/infra/exec-approvals.js +8 -8
  233. package/dist/infra/exec-command-resolution.js +4 -4
  234. package/dist/infra/exec-safe-bin-trust.js +2 -2
  235. package/dist/infra/fased-root.js +5 -5
  236. package/dist/infra/fasedhub.js +64 -1
  237. package/dist/infra/fs-safe.js +14 -14
  238. package/dist/infra/gateway-lock.js +11 -11
  239. package/dist/infra/git-commit.js +5 -5
  240. package/dist/infra/git-root.js +4 -4
  241. package/dist/infra/hosted-runtime-artifact.js +3 -3
  242. package/dist/infra/is-main.js +2 -2
  243. package/dist/infra/json-file.js +7 -7
  244. package/dist/infra/local-source-paired-update.js +538 -0
  245. package/dist/infra/managed-runtime-bootstrap.js +6 -6
  246. package/dist/infra/outbound/delivery-queue.js +16 -16
  247. package/dist/infra/path-env.js +3 -3
  248. package/dist/infra/ports-lsof.js +4 -4
  249. package/dist/infra/provider-usage.auth.js +3 -3
  250. package/dist/infra/restart.js +41 -10
  251. package/dist/infra/safe-open-sync.js +2 -2
  252. package/dist/infra/session-cost-usage.js +9 -9
  253. package/dist/infra/shell-env.js +2 -2
  254. package/dist/infra/state-migrations.fs.js +6 -6
  255. package/dist/infra/state-migrations.js +23 -23
  256. package/dist/infra/tmp-fased-dir.js +6 -6
  257. package/dist/infra/update-runner.js +96 -0
  258. package/dist/infra/widearea-dns.js +3 -3
  259. package/dist/infra/wsl.js +2 -2
  260. package/dist/light-update-status.js +11 -11
  261. package/dist/line/accounts.js +2 -2
  262. package/dist/line/download.js +2 -2
  263. package/dist/logging/config.js +3 -3
  264. package/dist/logging/logger.js +7 -7
  265. package/dist/managed/federation.js +3 -3
  266. package/dist/managed/tunnel.js +3 -3
  267. package/dist/media/store.js +13 -13
  268. package/dist/media-understanding/runner.js +3 -3
  269. package/dist/memory/backend-config.js +2 -1
  270. package/dist/memory/embeddings.js +2 -2
  271. package/dist/memory/internal.js +10 -10
  272. package/dist/memory/manager-sync-ops.js +7 -7
  273. package/dist/memory/repair-executor.js +17 -17
  274. package/dist/memory/session-files.js +16 -2
  275. package/dist/node-host/invoke-system-run-plan.js +8 -8
  276. package/dist/node-host/invoke.js +2 -2
  277. package/dist/node-host/runner.js +3 -3
  278. package/dist/pairing/pairing-store.js +3 -3
  279. package/dist/plugin-sdk/{accounts-DxblobYM.js → accounts-Brn3-uWN.js} +1 -1
  280. package/dist/plugin-sdk/{actions-D4UNimWa.js → actions-DRu135h0.js} +2 -2
  281. package/dist/plugin-sdk/{active-listener-CFuy106s.js → active-listener-B_NMtgPL.js} +1 -1
  282. package/dist/plugin-sdk/{audio-preflight-Bv0hUOWL.js → audio-preflight-BYxAt775.js} +27 -27
  283. package/dist/plugin-sdk/{audit-Cs0K7LBp.js → audit-C5d2z5U1.js} +1 -1
  284. package/dist/plugin-sdk/{channel-access-D5aHoTY8.js → channel-access-CcFRdRPO.js} +1 -1
  285. package/dist/plugin-sdk/{channel-access-configure-Dvch9mMQ.js → channel-access-configure-DaI5wevh.js} +1 -1
  286. package/dist/plugin-sdk/channel-plugin-common.d.ts +3 -3
  287. package/dist/plugin-sdk/channel-plugin-common.js +4 -4
  288. package/dist/plugin-sdk/{chunk-B0FUGc5A.js → chunk-CyoyqpbG.js} +1 -1
  289. package/dist/plugin-sdk/{chunk-items-Bk--NU3E.js → chunk-items-DIRHG2gJ.js} +1 -1
  290. package/dist/plugin-sdk/command-status.d.ts +2 -2
  291. package/dist/plugin-sdk/command-status.js +27 -27
  292. package/dist/plugin-sdk/{commands-registry-DmDRhRAU.js → commands-registry-BfqdEWdF.js} +2 -2
  293. package/dist/plugin-sdk/{common-CfUOowOp.js → common-HCcXU-NR.js} +1 -1
  294. package/dist/plugin-sdk/{config-mxULv0fQ.js → config-DlWVeLFB.js} +7113 -6877
  295. package/dist/plugin-sdk/{config-schema-CGW6J3Pv.js → config-schema-BOT7kHb6.js} +6779 -3696
  296. package/dist/plugin-sdk/device-pair.d.ts +1 -1
  297. package/dist/plugin-sdk/discord.d.ts +5 -5
  298. package/dist/plugin-sdk/discord.js +19 -19
  299. package/dist/plugin-sdk/file-lock.js +35 -4
  300. package/dist/plugin-sdk/{filesystem-manager-ZoHU8oA7.js → filesystem-manager-DoI8IBNF.js} +1 -1
  301. package/dist/plugin-sdk/{group-mentions-BHRff6j8.d.ts → group-mentions-q3hUTCt7.d.ts} +1 -1
  302. package/dist/plugin-sdk/{handle-action-DbVCF9HZ.js → handle-action-hvwapMKg.js} +13 -13
  303. package/dist/plugin-sdk/{helpers-BXbdgs5H.js → helpers-DMBU4oTo.js} +1 -1
  304. package/dist/plugin-sdk/{image-ops-D7jPxaph.js → image-ops-DQi0n_Tt.js} +1 -1
  305. package/dist/plugin-sdk/index.d.ts +9 -27
  306. package/dist/plugin-sdk/index.js +29 -29
  307. package/dist/plugin-sdk/json-store.js +6 -6
  308. package/dist/plugin-sdk/{login-BRxww6nv.js → login-Ca583Okc.js} +3 -3
  309. package/dist/plugin-sdk/{login-qr-DJXsk9XH.js → login-qr-CGciBSNP.js} +3 -3
  310. package/dist/plugin-sdk/{manager-Y2S_5IlI.js → manager-BegWxNYX.js} +4 -4
  311. package/dist/plugin-sdk/{markdown-tables-DHLFQqaF.js → markdown-tables-DCOXEUfZ.js} +1 -1
  312. package/dist/plugin-sdk/{media-Czo4carg.js → media-CAdQF5TG.js} +47 -47
  313. package/dist/plugin-sdk/{memory-search-DTjIMw8J.js → memory-search-CrFPOeTH.js} +4 -1
  314. package/dist/plugin-sdk/{monitor-B9Cmt_Je.js → monitor-BCFDaqJ-.js} +31 -31
  315. package/dist/plugin-sdk/{monitor-B71iwAgC.js → monitor-BgbjRiPM.js} +32 -32
  316. package/dist/plugin-sdk/{openresponses-http-Du4GMmwo.js → openresponses-http-DFf87SMM.js} +27 -27
  317. package/dist/plugin-sdk/{optional-runtime-dependency-DdMbxS24.js → optional-runtime-dependency-0dznm3ZO.js} +1 -1
  318. package/dist/plugin-sdk/{outbound-Db8mRN6P.js → outbound-BgVDdHxx.js} +6 -6
  319. package/dist/plugin-sdk/{outbound-attachment-BqFjcypb.js → outbound-attachment-QqTnIhZL.js} +2 -2
  320. package/dist/plugin-sdk/{pairing-message-BMkkS038.d.ts → pairing-message-CS-9BHug.d.ts} +2 -2
  321. package/dist/plugin-sdk/{pairing-message-B3GC_7CD.js → pairing-message-D0CoLHRJ.js} +1 -1
  322. package/dist/plugin-sdk/{pairing-store-CQikgIbw.js → pairing-store-BChahgI2.js} +2 -2
  323. package/dist/plugin-sdk/{pi-model-discovery-CY3m5zJP.js → pi-model-discovery-BX_JLcEJ.js} +1 -1
  324. package/dist/plugin-sdk/{pi-model-discovery-runtime-DSh1T2pn.js → pi-model-discovery-runtime-DxTMz_XF.js} +2 -2
  325. package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +2 -2
  326. package/dist/plugin-sdk/{pw-ai-AFUqn-tQ.js → pw-ai-natjh3rm.js} +3 -3
  327. package/dist/plugin-sdk/{qmd-manager-DSyx77KY.js → qmd-manager-CgRaTxUq.js} +1 -1
  328. package/dist/plugin-sdk/{query-expansion-CAI2kKLQ.js → query-expansion-BG3FgzF7.js} +14 -3
  329. package/dist/plugin-sdk/{replies-Fzh9PhXl.js → replies-ChYo5ZQM.js} +2 -2
  330. package/dist/plugin-sdk/{resolve-outbound-target-KpF3co6T.js → resolve-outbound-target-D-KGgHJZ.js} +1 -1
  331. package/dist/plugin-sdk/{resolve-route-CDl74O19.js → resolve-route-C8tvQm8Z.js} +1 -1
  332. package/dist/plugin-sdk/{retry-policy-D4uiqUOG.js → retry-policy-C6SjKjQA.js} +1 -1
  333. package/dist/plugin-sdk/{runtime-Bb6KRnCC.js → runtime-2B9_WKoI.js} +8 -3
  334. package/dist/plugin-sdk/{runtime-dependency-DLDmB94f.js → runtime-dependency-DczkvPxn.js} +2 -2
  335. package/dist/plugin-sdk/sat-runtime.d.ts +549 -309
  336. package/dist/plugin-sdk/sat-runtime.js +29 -29
  337. package/dist/plugin-sdk/{send-C4k4JuJN.js → send-B6KkGKZD.js} +6 -6
  338. package/dist/plugin-sdk/{send-D-uDKGIq.js → send-CFzGKJXo.js} +6 -6
  339. package/dist/plugin-sdk/{send-Du8ykP1k.js → send-DCO441U7.js} +8 -8
  340. package/dist/plugin-sdk/{send-5nFktR1n.js → send-gDoGA-7e.js} +5 -5
  341. package/dist/plugin-sdk/{send-Bfzf11VY.js → send-q9HXrSwK.js} +7 -7
  342. package/dist/plugin-sdk/{session-CS-Td9EM.js → session-DHD4ZKyG.js} +2 -2
  343. package/dist/plugin-sdk/{skill-commands-CFAlXWHk.js → skill-commands-FKEPLS7T.js} +201 -26
  344. package/dist/plugin-sdk/{slack-D_bbE6Yd.js → slack-BUTt8cxK.js} +39 -39
  345. package/dist/plugin-sdk/{slack-actions-BcMkNv1Z.js → slack-actions-DhbMcp8M.js} +11 -11
  346. package/dist/plugin-sdk/slack.d.ts +5 -5
  347. package/dist/plugin-sdk/slack.js +9 -9
  348. package/dist/plugin-sdk/{sticker-cache-Dqo9nRhi.js → sticker-cache-D0wHVqjt.js} +3 -3
  349. package/dist/plugin-sdk/{tables-bFXyRpkx.js → tables-B3jr0Pvq.js} +1 -1
  350. package/dist/plugin-sdk/{targets-DH7a9lKB.js → targets-CtSbTxYX.js} +1 -1
  351. package/dist/plugin-sdk/{telegram-actions-Cnag7JTH.js → telegram-actions-CC_qN4v0.js} +30 -30
  352. package/dist/plugin-sdk/telegram.d.ts +5 -5
  353. package/dist/plugin-sdk/telegram.js +8 -8
  354. package/dist/plugin-sdk/{thread-bindings.lifecycle-CgOvvdw8.js → thread-bindings.lifecycle-QbkNl-m6.js} +3 -3
  355. package/dist/plugin-sdk/{thread-bindings.state-CQpk44Hq.js → thread-bindings.state-D9hg_M1c.js} +2 -2
  356. package/dist/plugin-sdk/tmp-fased-dir-xOTGlzBE.d.ts +486 -0
  357. package/dist/plugin-sdk/{types-CLIvQaVg.d.ts → types-C3avNytw.d.ts} +3 -4
  358. package/dist/plugin-sdk/{types-DyhXnYUr.d.ts → types-D0kDG8l0.d.ts} +3 -2
  359. package/dist/plugin-sdk/{types-BYDL6dQj.d.ts → types-DWfbSAaM.d.ts} +2 -2
  360. package/dist/plugin-sdk/{types.plugin-_fbu40Re.d.ts → types.plugin-BcSBq42x.d.ts} +8 -3
  361. package/dist/plugin-sdk/{web-BInKQkc4.js → web-BXsJ1vqe.js} +32 -32
  362. package/dist/plugin-sdk/{whatsapp-actions-BtSc2CBv.js → whatsapp-actions-Bj_rOncr.js} +13 -13
  363. package/dist/plugin-sdk/{whatsapp-heartbeat-Bg9TuYzl.js → whatsapp-heartbeat-B1WHkJIg.js} +2 -2
  364. package/dist/plugin-sdk/whatsapp.d.ts +5 -5
  365. package/dist/plugin-sdk/whatsapp.js +12 -12
  366. package/dist/plugin-sdk/{wsl-C4DGFkOd.js → wsl-J-HscWxS.js} +3 -3
  367. package/dist/plugins/bundled-dir.js +3 -3
  368. package/dist/plugins/discovery.js +11 -11
  369. package/dist/plugins/loader.js +13 -13
  370. package/dist/plugins/manifest-registry.js +2 -2
  371. package/dist/plugins/manifest.js +4 -4
  372. package/dist/plugins/path-safety.js +3 -3
  373. package/dist/plugins/status-cache.js +9 -9
  374. package/dist/plugins/update.js +3 -3
  375. package/dist/plugins/web-search-install-catalog.js +3 -3
  376. package/dist/providers/refresh.js +1 -1
  377. package/dist/providers/registry.js +1 -1
  378. package/dist/secrets/apply.js +17 -17
  379. package/dist/secrets/audit.js +11 -11
  380. package/dist/secrets/runtime.js +1 -1
  381. package/dist/secrets/shared.js +9 -9
  382. package/dist/security/scan-paths.js +2 -2
  383. package/dist/shared/config-eval.js +2 -2
  384. package/dist/shared/pid-alive.js +2 -2
  385. package/dist/tasks/standing-orders.js +5 -5
  386. package/dist/tasks/task-flow-registry.js +5 -5
  387. package/dist/tasks/task-registry.js +5 -5
  388. package/dist/tasks/workflow-definitions.js +6 -6
  389. package/dist/telegram/token.js +5 -5
  390. package/dist/utils.js +5 -5
  391. package/dist/wallet/external-submission-ledger.js +376 -0
  392. package/dist/wallet/legacy-embedded-keystore.js +40 -0
  393. package/dist/wallet/local-socket-signer-archive.js +30 -0
  394. package/dist/wallet/local-socket-signer-lifecycle.js +97 -0
  395. package/dist/wallet/local-socket-signer-policy.js +166 -0
  396. package/dist/wallet/local-socket-signer-protocol.js +561 -118
  397. package/dist/wallet/native-signer-wallet-id.js +25 -0
  398. package/dist/wallet/providers/alchemy-adapter.js +3 -0
  399. package/dist/wallet/providers/local-socket-signer-adapter.js +382 -107
  400. package/dist/wallet/providers/turnkey-adapter.js +292 -34
  401. package/dist/wallet/providers/wallet-standard-adapter.js +100 -0
  402. package/dist/wallet/signer-network-admin.js +184 -0
  403. package/dist/wallet/signer-protocol-v2.generated.js +90 -0
  404. package/dist/wallet/solana-bond-signing.js +157 -69
  405. package/dist/wallet/solana-reviewed-transaction.js +375 -0
  406. package/dist/wallet/solana-swap.js +520 -64
  407. package/dist/wallet/solana-transaction-inspection.js +106 -4
  408. package/dist/wallet/solana-trigger.js +658 -320
  409. package/dist/wallet/turnkey-reviewed-state.js +370 -0
  410. package/dist/wallet/wallet-approval-auth.js +20 -31
  411. package/dist/wallet/wallet-atomic-state.js +53 -0
  412. package/dist/wallet/wallet-audit-log.js +5 -5
  413. package/dist/wallet/wallet-canary.js +0 -1
  414. package/dist/wallet/wallet-inbound-events.js +19 -14
  415. package/dist/wallet/wallet-observability.js +5 -5
  416. package/dist/wallet/wallet-policy-simulation.js +1 -1
  417. package/dist/wallet/wallet-policy.js +95 -41
  418. package/dist/wallet/wallet-provider-capabilities.js +28 -4
  419. package/dist/wallet/wallet-provider-registry.js +64 -51
  420. package/dist/wallet/wallet-provider-resolver.js +62 -63
  421. package/dist/wallet/wallet-runtime-config.js +31 -44
  422. package/dist/wallet/wallet-secrets-store.js +44 -22
  423. package/dist/wallet/wallet-send-approvals.js +1894 -592
  424. package/dist/wallet/wallet-send-execution-ledger.js +292 -0
  425. package/dist/wallet/wallet-settlement-links.js +17 -16
  426. package/dist/wallet/wallet-standard-review.js +353 -0
  427. package/dist/wallet/wallet-status.js +0 -9
  428. package/dist/wallet/wallet-task-ledger.js +16 -2
  429. package/dist/web/accounts.js +3 -3
  430. package/dist/web/auth-store.js +18 -18
  431. package/dist/web/auto-reply/heartbeat-runner.js +1 -1
  432. package/dist/web/auto-reply/monitor.js +2 -2
  433. package/dist/web/session.js +4 -4
  434. package/dist/wizard/host-security-capability.js +15 -24
  435. package/dist/wizard/onboarding.finalize.js +63 -184
  436. package/dist/wizard/onboarding.host-security.js +118 -1368
  437. package/dist/wizard/onboarding.js +180 -242
  438. package/dist/wizard/onboarding.wallet.js +323 -829
  439. package/extensions/acpx/package.json +1 -1
  440. package/extensions/bluebubbles/package.json +1 -1
  441. package/extensions/copilot-proxy/package.json +1 -1
  442. package/extensions/diagnostics-otel/package.json +1 -1
  443. package/extensions/fased-federation/package.json +1 -1
  444. package/extensions/google-gemini-cli-auth/package.json +1 -1
  445. package/extensions/imessage/package.json +1 -1
  446. package/extensions/irc/package.json +1 -1
  447. package/extensions/line/package.json +1 -1
  448. package/extensions/llm-task/package.json +1 -1
  449. package/extensions/lobster/package.json +1 -1
  450. package/extensions/matrix/CHANGELOG.md +18 -0
  451. package/extensions/matrix/package.json +1 -1
  452. package/extensions/mattermost/package.json +1 -1
  453. package/extensions/memory-core/package.json +2 -2
  454. package/extensions/memory-lancedb/package.json +1 -1
  455. package/extensions/minimax-portal-auth/package.json +1 -1
  456. package/extensions/msteams/CHANGELOG.md +18 -0
  457. package/extensions/msteams/package.json +1 -1
  458. package/extensions/nextcloud-talk/package.json +1 -1
  459. package/extensions/nostr/CHANGELOG.md +18 -0
  460. package/extensions/nostr/package.json +1 -1
  461. package/extensions/open-prose/package.json +1 -1
  462. package/extensions/sat-mining/index.ts +498 -153
  463. package/extensions/sat-mining/package.json +1 -1
  464. package/extensions/sat-mining/signer-codec-schema.v1.json +374 -0
  465. package/extensions/sat-mining/src/audit-store.ts +50 -5
  466. package/extensions/sat-mining/src/claim-service.ts +85 -14
  467. package/extensions/sat-mining/src/config.ts +9 -0
  468. package/extensions/sat-mining/src/cycle-progress.ts +16 -8
  469. package/extensions/sat-mining/src/epoch-service.ts +9 -5
  470. package/extensions/sat-mining/src/gateway-runner.ts +21 -1
  471. package/extensions/sat-mining/src/protocol-contract.ts +45 -1
  472. package/extensions/sat-mining/src/recovery-service.ts +312 -0
  473. package/extensions/sat-mining/src/round-watcher.ts +391 -81
  474. package/extensions/sat-mining/src/rpc-read.ts +330 -89
  475. package/extensions/sat-mining/src/runtime.ts +14 -0
  476. package/extensions/sat-mining/src/sat-bond-layout.ts +6 -0
  477. package/extensions/sat-mining/src/signer-codec-manifest.ts +429 -0
  478. package/extensions/sat-mining/src/solana-submit.ts +1199 -428
  479. package/extensions/sat-mining/src/submission-ledger.ts +433 -0
  480. package/extensions/signal/package.json +1 -1
  481. package/extensions/synology-chat/package.json +1 -1
  482. package/extensions/tlon/package.json +1 -1
  483. package/extensions/twitch/CHANGELOG.md +18 -0
  484. package/extensions/twitch/package.json +1 -1
  485. package/extensions/voice-call/CHANGELOG.md +18 -0
  486. package/extensions/voice-call/package.json +1 -1
  487. package/extensions/zalo/CHANGELOG.md +18 -0
  488. package/extensions/zalo/package.json +1 -1
  489. package/extensions/zalouser/CHANGELOG.md +18 -0
  490. package/extensions/zalouser/package.json +1 -1
  491. package/install.sh +4955 -0
  492. package/package.json +24 -5
  493. package/scripts/fased-host-updater.mjs +1421 -0
  494. package/scripts/fased-host-updaterctl.mjs +186 -0
  495. package/scripts/fased-managed-service.sh +36 -0
  496. package/scripts/fased-managed-updater.mjs +3065 -156
  497. package/scripts/fased-signer-enroll-hosting.sh +275 -0
  498. package/scripts/fased-signer-network-hosting.sh +143 -0
  499. package/scripts/fased-signer-owner-policy.mjs +1430 -0
  500. package/scripts/fased-signer-policy-hosting.sh +50 -0
  501. package/scripts/fased-signer-policy-local.sh +26 -0
  502. package/scripts/hosted-release-manifest.mjs +185 -0
  503. package/scripts/install-fased-signerd.sh +217 -0
  504. package/scripts/install-managed-runtime.mjs +212 -10
  505. package/scripts/managed-runtime-layout.mjs +75 -3
  506. package/scripts/migrate-hosted-signer-v2.mjs +58 -0
  507. package/scripts/start-managed.sh +169 -360
  508. package/dist/control-ui/assets/mining-commit-R-6nu87p.js +0 -2
  509. package/dist/plugin-sdk/tmp-fased-dir-BdFQvrvw.d.ts +0 -77
  510. package/dist/wallet/local-socket-signer-broker.js +0 -224
  511. package/dist/wallet/local-socket-signer-custody.js +0 -42
  512. package/dist/wallet/providers/embedded-keystore-adapter.js +0 -402
  513. package/dist/wallet/providers/privy-adapter.js +0 -80
  514. package/dist/wallet/wallet-custody.js +0 -1836
@@ -5,10 +5,10 @@ import "../routing/session-key.js";
5
5
  import { openBoundaryFile } from "../infra/boundary-file-read.js";
6
6
  import { runCommandWithTimeout } from "../process/exec.js";
7
7
  import { resolveWorkspaceTemplateDir } from "./workspace-templates.js";
8
- import fs from "node:fs";
8
+ import syncFs from "node:fs";
9
9
  import os from "node:os";
10
10
  import path from "node:path";
11
- import fs$1 from "node:fs/promises";
11
+ import fs from "node:fs/promises";
12
12
 
13
13
  //#region src/agents/workspace.ts
14
14
  function resolveDefaultAgentWorkspaceDir(env = process.env, homedir = os.homedir) {
@@ -95,14 +95,14 @@ async function readWorkspaceFileWithGuards(params) {
95
95
  const identity = workspaceFileIdentity(opened.stat, opened.path);
96
96
  const cached = workspaceFileCache.get(params.filePath);
97
97
  if (cached && cached.identity === identity) {
98
- fs.closeSync(opened.fd);
98
+ syncFs.closeSync(opened.fd);
99
99
  return {
100
100
  ok: true,
101
101
  content: cached.content
102
102
  };
103
103
  }
104
104
  try {
105
- const content = fs.readFileSync(opened.fd, "utf-8");
105
+ const content = syncFs.readFileSync(opened.fd, "utf-8");
106
106
  workspaceFileCache.set(params.filePath, {
107
107
  content,
108
108
  identity
@@ -119,7 +119,7 @@ async function readWorkspaceFileWithGuards(params) {
119
119
  error
120
120
  };
121
121
  } finally {
122
- fs.closeSync(opened.fd);
122
+ syncFs.closeSync(opened.fd);
123
123
  }
124
124
  }
125
125
  function stripFrontMatter(content) {
@@ -144,7 +144,7 @@ async function loadTemplate(name) {
144
144
  const templateDir = await resolveWorkspaceTemplateDir();
145
145
  const templatePath = path.join(templateDir, name);
146
146
  try {
147
- const content = await fs$1.readFile(templatePath, "utf-8");
147
+ const content = await fs.readFile(templatePath, "utf-8");
148
148
  return stripFrontMatter(content);
149
149
  } catch {
150
150
  const fallback = BUILTIN_WORKSPACE_TEMPLATES[name];
@@ -176,7 +176,7 @@ const VALID_BOOTSTRAP_NAMES = new Set([
176
176
  ]);
177
177
  async function writeFileIfMissing(filePath, content) {
178
178
  try {
179
- await fs$1.writeFile(filePath, content, {
179
+ await fs.writeFile(filePath, content, {
180
180
  encoding: "utf-8",
181
181
  flag: "wx"
182
182
  });
@@ -191,14 +191,14 @@ async function writeFileIfMissing(filePath, content) {
191
191
  }
192
192
  async function fileExists(filePath) {
193
193
  try {
194
- await fs$1.access(filePath);
194
+ await fs.access(filePath);
195
195
  return true;
196
196
  } catch {
197
197
  return false;
198
198
  }
199
199
  }
200
200
  async function ensureMemoryRoots(dir) {
201
- await fs$1.mkdir(path.join(dir, "memory"), { recursive: true });
201
+ await fs.mkdir(path.join(dir, "memory"), { recursive: true });
202
202
  await writeFileIfMissing(path.join(dir, DEFAULT_MEMORY_FILENAME), DEFAULT_MEMORY_CONTENT);
203
203
  }
204
204
  function resolveWorkspaceStatePath(dir) {
@@ -221,7 +221,7 @@ function parseWorkspaceOnboardingState(raw) {
221
221
  }
222
222
  async function readWorkspaceOnboardingState(statePath) {
223
223
  try {
224
- const raw = await fs$1.readFile(statePath, "utf-8");
224
+ const raw = await fs.readFile(statePath, "utf-8");
225
225
  return parseWorkspaceOnboardingState(raw) ?? { version: WORKSPACE_STATE_VERSION };
226
226
  } catch (err) {
227
227
  const anyErr = err;
@@ -240,20 +240,20 @@ async function isWorkspaceOnboardingCompleted(dir) {
240
240
  return typeof state.onboardingCompletedAt === "string" && state.onboardingCompletedAt.trim().length > 0;
241
241
  }
242
242
  async function writeWorkspaceOnboardingState(statePath, state) {
243
- await fs$1.mkdir(path.dirname(statePath), { recursive: true });
243
+ await fs.mkdir(path.dirname(statePath), { recursive: true });
244
244
  const payload = `${JSON.stringify(state, null, 2)}\n`;
245
245
  const tmpPath = `${statePath}.tmp-${process.pid}-${Date.now().toString(36)}`;
246
246
  try {
247
- await fs$1.writeFile(tmpPath, payload, { encoding: "utf-8" });
248
- await fs$1.rename(tmpPath, statePath);
247
+ await fs.writeFile(tmpPath, payload, { encoding: "utf-8" });
248
+ await fs.rename(tmpPath, statePath);
249
249
  } catch (err) {
250
- await fs$1.unlink(tmpPath).catch(() => {});
250
+ await fs.unlink(tmpPath).catch(() => {});
251
251
  throw err;
252
252
  }
253
253
  }
254
254
  async function hasGitRepo(dir) {
255
255
  try {
256
- await fs$1.stat(path.join(dir, ".git"));
256
+ await fs.stat(path.join(dir, ".git"));
257
257
  return true;
258
258
  } catch {
259
259
  return false;
@@ -293,7 +293,7 @@ async function ensureGitRepo(dir, isBrandNewWorkspace) {
293
293
  async function ensureAgentWorkspace(params) {
294
294
  const rawDir = params?.dir?.trim() ? params.dir.trim() : DEFAULT_AGENT_WORKSPACE_DIR;
295
295
  const dir = resolveUserPath(rawDir);
296
- await fs$1.mkdir(dir, { recursive: true });
296
+ await fs.mkdir(dir, { recursive: true });
297
297
  if (!params?.ensureBootstrapFiles) {
298
298
  return { dir };
299
299
  }
@@ -322,7 +322,7 @@ async function ensureAgentWorkspace(params) {
322
322
  const paths = [...templatePaths, ...userContentPaths];
323
323
  const existing = await Promise.all(paths.map(async (p) => {
324
324
  try {
325
- await fs$1.access(p);
325
+ await fs.access(p);
326
326
  return true;
327
327
  } catch {
328
328
  return false;
@@ -360,7 +360,7 @@ async function ensureAgentWorkspace(params) {
360
360
  markState({ onboardingCompletedAt: nowIso() });
361
361
  }
362
362
  if (!state.bootstrapSeededAt && !state.onboardingCompletedAt && !bootstrapExists) {
363
- const [identityContent, userContent] = await Promise.all([fs$1.readFile(identityPath, "utf-8"), fs$1.readFile(userPath, "utf-8")]);
363
+ const [identityContent, userContent] = await Promise.all([fs.readFile(identityPath, "utf-8"), fs.readFile(userPath, "utf-8")]);
364
364
  const hasUserContent = await (async () => {
365
365
  const indicators = [
366
366
  path.join(dir, "memory"),
@@ -369,7 +369,7 @@ async function ensureAgentWorkspace(params) {
369
369
  ];
370
370
  for (const indicator of indicators) {
371
371
  try {
372
- await fs$1.access(indicator);
372
+ await fs.access(indicator);
373
373
  return true;
374
374
  } catch {}
375
375
  }
@@ -413,7 +413,7 @@ async function resolveMemoryBootstrapEntries(resolvedDir) {
413
413
  for (const name of candidates) {
414
414
  const filePath = path.join(resolvedDir, name);
415
415
  try {
416
- await fs$1.access(filePath);
416
+ await fs.access(filePath);
417
417
  entries.push({
418
418
  name,
419
419
  filePath
@@ -428,7 +428,7 @@ async function resolveMemoryBootstrapEntries(resolvedDir) {
428
428
  for (const entry of entries) {
429
429
  let key = entry.filePath;
430
430
  try {
431
- key = await fs$1.realpath(entry.filePath);
431
+ key = await fs.realpath(entry.filePath);
432
432
  } catch {}
433
433
  if (seen.has(key)) {
434
434
  continue;
@@ -523,7 +523,7 @@ async function loadExtraBootstrapFilesWithDiagnostics(dir, extraPatterns) {
523
523
  for (const pattern of extraPatterns) {
524
524
  if (pattern.includes("*") || pattern.includes("?") || pattern.includes("{")) {
525
525
  try {
526
- const matches = fs$1.glob(pattern, { cwd: resolvedDir });
526
+ const matches = fs.glob(pattern, { cwd: resolvedDir });
527
527
  for await (const m of matches) {
528
528
  resolvedPaths.add(m);
529
529
  }
@@ -18,7 +18,7 @@ import { isCompactionFailureError, isContextOverflowError, isLikelyContextOverfl
18
18
  import "../../agents/pi-embedded-helpers.js";
19
19
  import { buildEmbeddedRunBaseParams, buildEmbeddedRunContexts, resolveModelFallbackOptions } from "./agent-runner-utils.js";
20
20
  import { createBlockReplyDeliveryHandler } from "./reply-delivery.js";
21
- import fs from "node:fs";
21
+ import syncFs from "node:fs";
22
22
  import crypto from "node:crypto";
23
23
 
24
24
  //#region src/auto-reply/reply/agent-runner-execution.ts
@@ -369,7 +369,7 @@ async function runAgentTurnWithFallback(params) {
369
369
  if (corruptedSessionId) {
370
370
  const transcriptPath = resolveSessionTranscriptPath(corruptedSessionId);
371
371
  try {
372
- fs.unlinkSync(transcriptPath);
372
+ syncFs.unlinkSync(transcriptPath);
373
373
  } catch {}
374
374
  }
375
375
  delete params.activeSessionStore[sessionKey];
@@ -35,7 +35,7 @@ import { createTypingSignaler } from "./typing-mode.js";
35
35
  import { createFollowupRunner } from "./followup-runner.js";
36
36
  import { auditPostCompactionReads, extractReadPaths, formatAuditWarning, readSessionMessages } from "./post-compaction-audit.js";
37
37
  import { resolveActiveRunQueueAction } from "./queue-policy.js";
38
- import fs from "node:fs";
38
+ import syncFs from "node:fs";
39
39
 
40
40
  //#region src/auto-reply/reply/agent-runner.ts
41
41
  const BLOCK_REPLY_SEND_TIMEOUT_MS = 15e3;
@@ -305,7 +305,7 @@ async function runReplyAgent(params) {
305
305
  transcriptCandidates.add(resolveSessionTranscriptPath(prevSessionId, agentId));
306
306
  for (const candidate of transcriptCandidates) {
307
307
  try {
308
- fs.unlinkSync(candidate);
308
+ syncFs.unlinkSync(candidate);
309
309
  } catch {}
310
310
  }
311
311
  }
@@ -2,14 +2,14 @@ import { resolveDefaultSessionStorePath, resolveSessionFilePath, resolveSessionF
2
2
  import { loadSessionStore } from "../../config/sessions/store.js";
3
3
  import { resolveCommandsSystemPromptBundle } from "./commands-system-prompt.js";
4
4
  import { fileURLToPath } from "node:url";
5
- import fs from "node:fs";
5
+ import syncFs from "node:fs";
6
6
  import path from "node:path";
7
7
  import { SessionManager } from "@mariozechner/pi-coding-agent";
8
8
 
9
9
  //#region src/auto-reply/reply/commands-export-session.ts
10
10
  const EXPORT_HTML_DIR = path.join(path.dirname(fileURLToPath(import.meta.url)), "export-html");
11
11
  function loadTemplate(fileName) {
12
- return fs.readFileSync(path.join(EXPORT_HTML_DIR, fileName), "utf-8");
12
+ return syncFs.readFileSync(path.join(EXPORT_HTML_DIR, fileName), "utf-8");
13
13
  }
14
14
  function generateHtml(sessionData) {
15
15
  const template = loadTemplate("template.html");
@@ -84,7 +84,7 @@ function writeNewDefaultExportFile(filePath, html) {
84
84
  for (let suffix = 1; suffix <= 100; suffix++) {
85
85
  const candidate = suffix === 1 ? filePath : addCollisionSuffix(filePath, suffix);
86
86
  try {
87
- fs.writeFileSync(candidate, html, {
87
+ syncFs.writeFileSync(candidate, html, {
88
88
  encoding: "utf-8",
89
89
  flag: "wx"
90
90
  });
@@ -119,7 +119,7 @@ async function buildExportSessionReply(params) {
119
119
  } catch (err) {
120
120
  return { text: `❌ Failed to resolve session file: ${err instanceof Error ? err.message : String(err)}` };
121
121
  }
122
- if (!fs.existsSync(sessionFile)) {
122
+ if (!syncFs.existsSync(sessionFile)) {
123
123
  return { text: `❌ Session file not found: ${sessionFile}` };
124
124
  }
125
125
  const sessionManager = SessionManager.open(sessionFile);
@@ -143,11 +143,11 @@ async function buildExportSessionReply(params) {
143
143
  const defaultFileName = `fased-session-${entry.sessionId.slice(0, 8)}-${timestamp}.html`;
144
144
  let outputPath = args.outputPath ? path.resolve(args.outputPath.startsWith("~") ? args.outputPath.replace("~", process.env.HOME ?? "") : args.outputPath) : path.join(params.workspaceDir, defaultFileName);
145
145
  const outputDir = path.dirname(outputPath);
146
- if (!fs.existsSync(outputDir)) {
147
- fs.mkdirSync(outputDir, { recursive: true });
146
+ if (!syncFs.existsSync(outputDir)) {
147
+ syncFs.mkdirSync(outputDir, { recursive: true });
148
148
  }
149
149
  if (args.outputPath) {
150
- fs.writeFileSync(outputPath, html, "utf-8");
150
+ syncFs.writeFileSync(outputPath, html, "utf-8");
151
151
  } else {
152
152
  outputPath = writeNewDefaultExportFile(outputPath, html);
153
153
  }
@@ -4,7 +4,7 @@ import { isDirectiveOnly } from "./directive-handling.parse.js";
4
4
 
5
5
  //#region src/auto-reply/reply/directive-handling.fast-lane.ts
6
6
  async function applyInlineDirectivesFastLane(params) {
7
- const { directives, commandAuthorized, ctx, cfg, agentId, isGroup, sessionEntry, sessionStore, sessionKey, storePath, elevatedEnabled, elevatedAllowed, elevatedFailures, messageProviderKey, defaultProvider, defaultModel, aliasIndex, allowedModelKeys, allowedModelCatalog, resetModelOverride, formatModelSwitchEvent, modelState } = params;
7
+ const { directives, commandAuthorized, ctx, cfg, agentId, isGroup, sessionEntry, sessionStore, sessionKey, storePath, elevatedEnabled, elevatedAllowed, elevatedFailures, messageProviderKey, defaultProvider, defaultModel, aliasIndex, allowAnyModel, allowedModelKeys, allowedModelCatalog, resetModelOverride, formatModelSwitchEvent, modelState } = params;
8
8
  let { provider, model } = params;
9
9
  if (!commandAuthorized || isDirectiveOnly({
10
10
  directives,
@@ -40,6 +40,7 @@ async function applyInlineDirectivesFastLane(params) {
40
40
  defaultProvider,
41
41
  defaultModel,
42
42
  aliasIndex,
43
+ allowAnyModel,
43
44
  allowedModelKeys,
44
45
  allowedModelCatalog,
45
46
  resetModelOverride,
@@ -24,7 +24,7 @@ function resolveExecDefaults(params) {
24
24
  };
25
25
  }
26
26
  async function handleDirectiveOnly(params) {
27
- const { directives, sessionEntry, sessionStore, sessionKey, storePath, elevatedEnabled, elevatedAllowed, defaultProvider, defaultModel, aliasIndex, allowedModelKeys, allowedModelCatalog, resetModelOverride, provider, model, initialModelLabel, formatModelSwitchEvent, currentThinkLevel, currentVerboseLevel, currentReasoningLevel, currentElevatedLevel } = params;
27
+ const { directives, sessionEntry, sessionStore, sessionKey, storePath, elevatedEnabled, elevatedAllowed, defaultProvider, defaultModel, aliasIndex, allowAnyModel, allowedModelKeys, allowedModelCatalog, resetModelOverride, provider, model, initialModelLabel, formatModelSwitchEvent, currentThinkLevel, currentVerboseLevel, currentReasoningLevel, currentElevatedLevel } = params;
28
28
  const activeAgentId = resolveSessionAgentId({
29
29
  sessionKey: params.sessionKey,
30
30
  config: params.cfg
@@ -60,6 +60,7 @@ async function handleDirectiveOnly(params) {
60
60
  defaultProvider,
61
61
  defaultModel,
62
62
  aliasIndex,
63
+ allowAnyModel,
63
64
  allowedModelKeys,
64
65
  allowedModelCatalog,
65
66
  provider
@@ -283,7 +283,7 @@ function resolveModelSelectionFromDirective(params) {
283
283
  });
284
284
  if (explicit) {
285
285
  const explicitKey = modelKey(explicit.ref.provider, explicit.ref.model);
286
- if (params.allowedModelKeys.size === 0 || params.allowedModelKeys.has(explicitKey)) {
286
+ if (params.allowAnyModel || params.allowedModelKeys.has(explicitKey)) {
287
287
  modelSelection = {
288
288
  provider: explicit.ref.provider,
289
289
  model: explicit.ref.model,
@@ -298,6 +298,7 @@ function resolveModelSelectionFromDirective(params) {
298
298
  defaultProvider: params.defaultProvider,
299
299
  defaultModel: params.defaultModel,
300
300
  aliasIndex: params.aliasIndex,
301
+ allowAnyModel: params.allowAnyModel,
301
302
  allowedModelKeys: params.allowedModelKeys
302
303
  });
303
304
  if (resolved.error) {
@@ -12,7 +12,7 @@ import { enqueueModeSwitchEvents } from "./directive-handling.shared.js";
12
12
 
13
13
  //#region src/auto-reply/reply/directive-handling.persist.ts
14
14
  async function persistInlineDirectives(params) {
15
- const { directives, cfg, sessionEntry, sessionStore, sessionKey, storePath, elevatedEnabled, elevatedAllowed, defaultProvider, defaultModel, aliasIndex, allowedModelKeys, initialModelLabel, formatModelSwitchEvent, agentCfg } = params;
15
+ const { directives, cfg, sessionEntry, sessionStore, sessionKey, storePath, elevatedEnabled, elevatedAllowed, defaultProvider, defaultModel, aliasIndex, allowAnyModel, allowedModelKeys, initialModelLabel, formatModelSwitchEvent, agentCfg } = params;
16
16
  let { provider, model } = params;
17
17
  const activeAgentId = sessionKey ? resolveSessionAgentId({
18
18
  sessionKey,
@@ -74,7 +74,7 @@ async function persistInlineDirectives(params) {
74
74
  });
75
75
  if (resolved) {
76
76
  const key = modelKey(resolved.ref.provider, resolved.ref.model);
77
- if (allowedModelKeys.size === 0 || allowedModelKeys.has(key)) {
77
+ if (allowAnyModel || allowedModelKeys.has(key)) {
78
78
  let profileOverride;
79
79
  if (directives.rawModelProfile) {
80
80
  const profileResolved = resolveProfileOverride({
@@ -15,6 +15,7 @@ async function applyInlineDirectiveOverrides(params) {
15
15
  let { provider, model } = params;
16
16
  let { contextTokens } = params;
17
17
  const directiveModelState = {
18
+ allowAnyModel: modelState.allowAnyModel,
18
19
  allowedModelKeys: modelState.allowedModelKeys,
19
20
  allowedModelCatalog: modelState.allowedModelCatalog,
20
21
  resetModelOverride: modelState.resetModelOverride
@@ -155,6 +156,7 @@ async function applyInlineDirectiveOverrides(params) {
155
156
  defaultProvider,
156
157
  defaultModel,
157
158
  aliasIndex,
159
+ allowAnyModel: modelState.allowAnyModel,
158
160
  allowedModelKeys: modelState.allowedModelKeys,
159
161
  provider,
160
162
  model,
@@ -5,6 +5,8 @@ import { applyOwnerOnlyToolPolicy } from "../../agents/tool-policy.js";
5
5
  import { generateSecureToken } from "../../infra/secure-random.js";
6
6
  import { clearAbortCutoffInSession, readAbortCutoffFromSessionEntry, resolveAbortCutoffFromContext, shouldSkipMessageByAbortCutoff } from "./abort-cutoff.js";
7
7
  import { getAbortMemory, isAbortRequestText } from "./abort.js";
8
+ import { readClawHubSkillOrigin } from "../../agents/skills-clawhub.js";
9
+ import { isMarketplaceSkillDir, marketplaceSkillProvenanceMatchesContent } from "../../agents/skills/trust.js";
8
10
  import { createFasedAgentTools } from "../../agents/fased-tools.js";
9
11
  import { collectTextContentBlocks } from "../../agents/content-blocks.js";
10
12
  import { listReservedChatSlashCommandNames, listSkillCommandsForWorkspace, resolveSkillCommandInvocation } from "../skill-commands.js";
@@ -14,6 +16,7 @@ import { isDirectiveOnly } from "./directive-handling.parse.js";
14
16
  import "./directive-handling.js";
15
17
  import "./commands.js";
16
18
  import { extractInlineSimpleCommand } from "./reply-inline.js";
19
+ import path from "node:path";
17
20
 
18
21
  //#region src/auto-reply/reply/get-reply-inline-actions.ts
19
22
  const builtinSlashCommands = (() => {
@@ -77,6 +80,24 @@ async function handleInlineActions(params) {
77
80
  }
78
81
  const dispatch = skillInvocation.command.dispatch;
79
82
  if (dispatch?.kind === "tool") {
83
+ const sourceFile = skillInvocation.command.sourceFilePath?.trim();
84
+ const skillDir = sourceFile ? path.dirname(sourceFile) : "";
85
+ const marketplaceSkill = Boolean(skillDir && isMarketplaceSkillDir(skillDir));
86
+ const marketplaceOrigin = skillDir ? await readClawHubSkillOrigin(skillDir) : null;
87
+ if (marketplaceSkill && (!marketplaceOrigin || !marketplaceSkillProvenanceMatchesContent(skillDir))) {
88
+ typing.cleanup();
89
+ return {
90
+ kind: "reply",
91
+ reply: { text: `❌ Marketplace skill ${skillInvocation.command.skillName} failed its installed-content integrity check. Reinstall the reviewed archive before using direct tool commands.` }
92
+ };
93
+ }
94
+ if (marketplaceOrigin && !(marketplaceOrigin.permissions?.toolAccess ?? []).includes(dispatch.toolName)) {
95
+ typing.cleanup();
96
+ return {
97
+ kind: "reply",
98
+ reply: { text: `❌ Marketplace skill ${marketplaceOrigin.slug} is not authorized for tool ${dispatch.toolName}. Reinstall a reviewed version whose manifest explicitly requests that tool.` }
99
+ };
100
+ }
80
101
  const rawArgs = (skillInvocation.args ?? "").trim();
81
102
  const channel = resolveGatewayMessageChannel(ctx.Surface) ?? resolveGatewayMessageChannel(ctx.Provider) ?? undefined;
82
103
  const tools = createFasedAgentTools({
@@ -122,7 +143,10 @@ async function handleInlineActions(params) {
122
143
  };
123
144
  }
124
145
  }
125
- const promptParts = [`Use the "${skillInvocation.command.skillName}" skill for this request.`, skillInvocation.args ? `User input:\n${skillInvocation.args}` : null].filter((entry) => Boolean(entry));
146
+ const commandTemplate = skillInvocation.command.promptTemplate?.trim();
147
+ const commandArgs = skillInvocation.args?.trim();
148
+ const renderedTemplate = commandTemplate ? commandTemplate.includes("$ARGUMENTS") ? commandTemplate.replaceAll("$ARGUMENTS", commandArgs ?? "") : commandTemplate : null;
149
+ const promptParts = [renderedTemplate ?? `Use the "${skillInvocation.command.skillName}" skill for this request.`, commandArgs && (!renderedTemplate || !commandTemplate?.includes("$ARGUMENTS")) ? `User input:\n${commandArgs}` : null].filter((entry) => Boolean(entry));
126
150
  const rewrittenBody = promptParts.join("\n\n");
127
151
  ctx.Body = rewrittenBody;
128
152
  ctx.BodyForAgent = rewrittenBody;
@@ -207,6 +207,7 @@ async function createModelSelectionState(params) {
207
207
  const needsModelCatalog = params.hasModelDirective || hasAllowlist || hasStoredOverride;
208
208
  let allowedModelKeys = new Set();
209
209
  let allowedModelCatalog = [];
210
+ let allowAnyModel = true;
210
211
  let modelCatalog = null;
211
212
  let resetModelOverride = false;
212
213
  if (needsModelCatalog) {
@@ -228,13 +229,14 @@ async function createModelSelectionState(params) {
228
229
  });
229
230
  allowedModelCatalog = allowed.allowedCatalog;
230
231
  allowedModelKeys = allowed.allowedKeys;
232
+ allowAnyModel = allowed.allowAny;
231
233
  }
232
234
  if (sessionEntry && sessionStore && sessionKey && hasStoredOverride) {
233
235
  const overrideProvider = sessionEntry.providerOverride?.trim() || defaultProvider;
234
236
  const overrideModel = sessionEntry.modelOverride?.trim();
235
237
  if (overrideModel) {
236
238
  const key = modelKey(overrideProvider, overrideModel);
237
- if (allowedModelKeys.size > 0 && !allowedModelKeys.has(key)) {
239
+ if (!allowAnyModel && !allowedModelKeys.has(key)) {
238
240
  const { updated } = applyModelOverrideToSessionEntry({
239
241
  entry: sessionEntry,
240
242
  selection: {
@@ -265,7 +267,7 @@ async function createModelSelectionState(params) {
265
267
  if (storedOverride?.model && !skipStoredOverride) {
266
268
  const candidateProvider = storedOverride.provider || defaultProvider;
267
269
  const key = modelKey(candidateProvider, storedOverride.model);
268
- if (allowedModelKeys.size === 0 || allowedModelKeys.has(key)) {
270
+ if (allowAnyModel || allowedModelKeys.has(key)) {
269
271
  provider = candidateProvider;
270
272
  model = storedOverride.model;
271
273
  }
@@ -318,6 +320,7 @@ async function createModelSelectionState(params) {
318
320
  return {
319
321
  provider,
320
322
  model,
323
+ allowAnyModel,
321
324
  allowedModelKeys,
322
325
  allowedModelCatalog,
323
326
  resetModelOverride,
@@ -327,7 +330,7 @@ async function createModelSelectionState(params) {
327
330
  };
328
331
  }
329
332
  function resolveModelDirectiveSelection(params) {
330
- const { raw, defaultProvider, defaultModel, aliasIndex, allowedModelKeys } = params;
333
+ const { raw, defaultProvider, defaultModel, aliasIndex, allowAnyModel, allowedModelKeys } = params;
331
334
  const rawTrimmed = raw.trim();
332
335
  const rawLower = rawTrimmed.toLowerCase();
333
336
  const pickAliasForKey = (provider, model) => aliasIndex.byKey.get(modelKey(provider, model))?.[0];
@@ -438,7 +441,7 @@ function resolveModelDirectiveSelection(params) {
438
441
  return { error: `Unrecognized model "${rawTrimmed}". Use /models to list providers, or /models <provider> to list models.` };
439
442
  }
440
443
  const resolvedKey = modelKey(resolved.ref.provider, resolved.ref.model);
441
- if (allowedModelKeys.size === 0 || allowedModelKeys.has(resolvedKey)) {
444
+ if (allowAnyModel || allowedModelKeys.has(resolvedKey)) {
442
445
  return { selection: {
443
446
  provider: resolved.ref.provider,
444
447
  model: resolved.ref.model,
@@ -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
 
4
4
  //#region src/auto-reply/reply/post-compaction-audit.ts
@@ -38,11 +38,11 @@ function auditPostCompactionReads(readFilePaths, workspaceDir, requiredReads = D
38
38
  * Returns messages from the last N lines (default 100).
39
39
  */
40
40
  function readSessionMessages(sessionFile, maxLines = 100) {
41
- if (!fs.existsSync(sessionFile)) {
41
+ if (!syncFs.existsSync(sessionFile)) {
42
42
  return [];
43
43
  }
44
44
  try {
45
- const content = fs.readFileSync(sessionFile, "utf-8");
45
+ const content = syncFs.readFileSync(sessionFile, "utf-8");
46
46
  const lines = content.trim().split("\n");
47
47
  const recentLines = lines.slice(-maxLines);
48
48
  const messages = [];
@@ -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
 
4
4
  //#region src/auto-reply/reply/post-compaction-context.ts
@@ -10,10 +10,10 @@ const MAX_CONTEXT_CHARS = 3e3;
10
10
  async function readPostCompactionContext(workspaceDir) {
11
11
  const agentsPath = path.join(workspaceDir, "AGENTS.md");
12
12
  try {
13
- if (!fs.existsSync(agentsPath)) {
13
+ if (!syncFs.existsSync(agentsPath)) {
14
14
  return null;
15
15
  }
16
- const content = await fs.promises.readFile(agentsPath, "utf-8");
16
+ const content = await syncFs.promises.readFile(agentsPath, "utf-8");
17
17
  const sections = extractSections(content, ["Session Startup", "Red Lines"]);
18
18
  if (sections.length === 0) {
19
19
  return null;
@@ -29,7 +29,7 @@ function buildSelectionFromExplicit(params) {
29
29
  return undefined;
30
30
  }
31
31
  const key = modelKey(resolved.ref.provider, resolved.ref.model);
32
- if (params.allowedModelKeys.size > 0 && !params.allowedModelKeys.has(key)) {
32
+ if (!params.allowAnyModel && !params.allowedModelKeys.has(key)) {
33
33
  return undefined;
34
34
  }
35
35
  const isDefault = resolved.ref.provider === params.defaultProvider && resolved.ref.model === params.defaultModel;
@@ -82,10 +82,8 @@ async function applyResetModelOverride(params) {
82
82
  config: params.cfg
83
83
  }) : resolveDefaultAgentId(params.cfg)), { allowKeychainPrompt: false })
84
84
  });
85
+ const allowAnyModel = allowed.allowAny;
85
86
  const allowedModelKeys = allowed.allowedKeys;
86
- if (allowedModelKeys.size === 0) {
87
- return {};
88
- }
89
87
  const providers = new Set();
90
88
  for (const key of allowedModelKeys) {
91
89
  const slash = key.indexOf("/");
@@ -99,6 +97,7 @@ async function applyResetModelOverride(params) {
99
97
  defaultProvider: params.defaultProvider,
100
98
  defaultModel: params.defaultModel,
101
99
  aliasIndex: params.aliasIndex,
100
+ allowAnyModel,
102
101
  allowedModelKeys
103
102
  });
104
103
  let selection;
@@ -117,6 +116,7 @@ async function applyResetModelOverride(params) {
117
116
  defaultProvider: params.defaultProvider,
118
117
  defaultModel: params.defaultModel,
119
118
  aliasIndex: params.aliasIndex,
119
+ allowAnyModel,
120
120
  allowedModelKeys
121
121
  });
122
122
  if (selection) {
@@ -20,7 +20,7 @@ import { getGlobalHookRunner } from "../../plugins/hook-runner-global.js";
20
20
  import { resolveCommandAuthorization } from "../command-auth.js";
21
21
  import { stripMentions, stripStructuralPrefixes } from "./mentions.js";
22
22
  import { deliverSessionMaintenanceWarning } from "../../infra/session-maintenance-warning.js";
23
- import fs from "node:fs";
23
+ import syncFs from "node:fs";
24
24
  import path from "node:path";
25
25
  import crypto from "node:crypto";
26
26
  import { CURRENT_SESSION_VERSION, SessionManager } from "@mariozechner/pi-coding-agent";
@@ -85,7 +85,7 @@ function forkSessionFromParent(params) {
85
85
  agentId: params.agentId,
86
86
  sessionsDir: params.sessionsDir
87
87
  });
88
- if (!parentSessionFile || !fs.existsSync(parentSessionFile)) {
88
+ if (!parentSessionFile || !syncFs.existsSync(parentSessionFile)) {
89
89
  return null;
90
90
  }
91
91
  try {
@@ -113,7 +113,7 @@ function forkSessionFromParent(params) {
113
113
  cwd: manager.getCwd(),
114
114
  parentSession: parentSessionFile
115
115
  };
116
- fs.writeFileSync(sessionFile, `${JSON.stringify(header)}\n`, "utf-8");
116
+ syncFs.writeFileSync(sessionFile, `${JSON.stringify(header)}\n`, "utf-8");
117
117
  return {
118
118
  sessionId,
119
119
  sessionFile
@@ -3,7 +3,7 @@ import { listChatCommands } from "./commands-registry.js";
3
3
  import { buildWorkspaceSkillCommandSpecs } from "../agents/skills/workspace.js";
4
4
  import "../agents/skills.js";
5
5
  import { getRemoteSkillEligibility } from "../infra/skills-remote.js";
6
- import fs from "node:fs";
6
+ import syncFs from "node:fs";
7
7
 
8
8
  //#region src/auto-reply/skill-commands.ts
9
9
  function listReservedChatSlashCommandNames(extraNames = []) {
@@ -43,10 +43,10 @@ function listSkillCommandsForAgents(params) {
43
43
  const visitedDirs = new Set();
44
44
  for (const agentId of agentIds) {
45
45
  const workspaceDir = resolveAgentWorkspaceDir(params.cfg, agentId);
46
- if (!fs.existsSync(workspaceDir)) {
46
+ if (!syncFs.existsSync(workspaceDir)) {
47
47
  continue;
48
48
  }
49
- const canonicalDir = fs.realpathSync(workspaceDir);
49
+ const canonicalDir = syncFs.realpathSync(workspaceDir);
50
50
  if (visitedDirs.has(canonicalDir)) {
51
51
  continue;
52
52
  }
@@ -20,7 +20,7 @@ import { formatProviderModelRef, resolveSelectedAndActiveModel } from "./model-r
20
20
  import { resolveActiveFallbackState } from "./fallback-state.js";
21
21
  import { resolveSandboxRuntimeStatus } from "../agents/sandbox/runtime-status.js";
22
22
  import "../agents/sandbox.js";
23
- import fs from "node:fs";
23
+ import syncFs from "node:fs";
24
24
 
25
25
  //#region src/auto-reply/status.ts
26
26
  const formatTokenCount = formatTokenCount$1;
@@ -135,19 +135,19 @@ const readUsageFromSessionLog = (sessionId, sessionEntry, agentId, sessionKey, s
135
135
  } catch {
136
136
  return undefined;
137
137
  }
138
- if (!fs.existsSync(logPath)) {
138
+ if (!syncFs.existsSync(logPath)) {
139
139
  return undefined;
140
140
  }
141
141
  try {
142
142
  const TAIL_BYTES = 8192;
143
- const stat = fs.statSync(logPath);
143
+ const stat = syncFs.statSync(logPath);
144
144
  const offset = Math.max(0, stat.size - TAIL_BYTES);
145
145
  const buf = Buffer.alloc(Math.min(TAIL_BYTES, stat.size));
146
- const fd = fs.openSync(logPath, "r");
146
+ const fd = syncFs.openSync(logPath, "r");
147
147
  try {
148
- fs.readSync(fd, buf, 0, buf.length, offset);
148
+ syncFs.readSync(fd, buf, 0, buf.length, offset);
149
149
  } finally {
150
- fs.closeSync(fd);
150
+ syncFs.closeSync(fd);
151
151
  }
152
152
  const tail = buf.toString("utf-8");
153
153
  const lines = (offset > 0 ? tail.slice(tail.indexOf("\n") + 1) : tail).split(/\n+/);
package/dist/brand.js CHANGED
@@ -2,7 +2,7 @@
2
2
  const FASED_BRAND_NAME = "Fased";
3
3
  const FASED_AGENT_NAME = "Fased Agent";
4
4
  const FASED_CONTROL_NAME = "Fased Control";
5
- const FASED_PRODUCT_VERSION = "0.1.61";
5
+ const FASED_PRODUCT_VERSION = "0.1.64";
6
6
  const FASED_DISPLAY_VERSION = `v${FASED_PRODUCT_VERSION}`;
7
7
  function formatFasedDisplayLine() {
8
8
  return `${FASED_AGENT_NAME} ${FASED_DISPLAY_VERSION}`;
@@ -1,4 +1,4 @@
1
- import fs from "node:fs";
1
+ import syncFs from "node:fs";
2
2
  import os from "node:os";
3
3
  import path from "node:path";
4
4
  import { execFileSync } from "node:child_process";
@@ -79,7 +79,7 @@ const CHROMIUM_EXE_NAMES = new Set([
79
79
  ]);
80
80
  function exists(filePath) {
81
81
  try {
82
- return fs.existsSync(filePath);
82
+ return syncFs.existsSync(filePath);
83
83
  } catch {
84
84
  return false;
85
85
  }
@@ -295,7 +295,7 @@ function findDesktopFilePath(desktopId) {
295
295
  }
296
296
  function readDesktopExecLine(desktopPath) {
297
297
  try {
298
- const raw = fs.readFileSync(desktopPath, "utf8");
298
+ const raw = syncFs.readFileSync(desktopPath, "utf8");
299
299
  const lines = raw.split(/\r?\n/);
300
300
  for (const line of lines) {
301
301
  if (line.startsWith("Exec=")) {