@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.
- package/CHANGELOG.md +43 -0
- package/README.md +38 -30
- package/config/dependency-ownership.json +1 -1
- package/config/signer-policies/README.md +49 -0
- package/config/signer-policies/agent.json.template +32 -0
- package/config/signer-policies/mining.json.template +69 -0
- package/config/signer-policies/network.json.template +5 -0
- package/config/signer-policies/vault.json.template +70 -0
- package/config/signer-protocol-v2.json +76 -0
- package/config/typescript-noemit-baseline.json +680 -0
- package/dist/acp/client.js +2 -2
- package/dist/acp/secret-file.js +2 -2
- package/dist/agents/agent-scope.js +2 -2
- package/dist/agents/apply-patch.js +8 -8
- package/dist/agents/auth-profiles/paths.js +2 -2
- package/dist/agents/auth-profiles/store.js +269 -33
- package/dist/agents/bash-tools.exec.js +10 -4
- package/dist/agents/bash-tools.shared.js +2 -2
- package/dist/agents/cli-credentials.js +4 -4
- package/dist/agents/current-model-catalog.js +3 -3
- package/dist/agents/docs-path.js +3 -3
- package/dist/agents/embedded-pi-mcp.js +4 -4
- package/dist/agents/identity-avatar.js +3 -3
- package/dist/agents/identity-file.js +2 -2
- package/dist/agents/memory-search.js +7 -1
- package/dist/agents/model-catalog-access.js +1 -2
- package/dist/agents/model-catalog-snapshot.js +1 -1
- package/dist/agents/model-catalog-source.js +1 -1
- package/dist/agents/model-metadata.js +1 -1
- package/dist/agents/model-selection.js +2 -28
- package/dist/agents/models-config.providers.js +6 -6
- package/dist/agents/openai-codex-app-server.js +5 -5
- package/dist/agents/pi-embedded-runner/compact.js +15 -7
- package/dist/agents/pi-embedded-runner/model.js +1 -1
- package/dist/agents/pi-embedded-runner/run/attempt.js +24 -13
- package/dist/agents/pi-embedded-runner/run.js +2 -0
- package/dist/agents/pi-embedded-runner/tool-split.js +40 -2
- package/dist/agents/pi-embedded-subscribe.raw-stream.js +3 -3
- package/dist/agents/pi-extensions/compaction-safeguard.js +3 -3
- package/dist/agents/pi-model-discovery.js +6 -6
- package/dist/agents/pi-project-settings.js +3 -3
- package/dist/agents/pi-tool-definition-adapter.js +16 -1
- package/dist/agents/pi-tools.js +2 -1
- package/dist/agents/sandbox/config.js +1 -1
- package/dist/agents/sandbox/context.js +27 -2
- package/dist/agents/sandbox/fs-bridge.js +2 -2
- package/dist/agents/session-dirs.js +4 -4
- package/dist/agents/session-write-lock.js +13 -13
- package/dist/agents/shell-utils.js +5 -5
- package/dist/agents/skills/bundled-dir.js +4 -4
- package/dist/agents/skills/env-overrides.js +38 -28
- package/dist/agents/skills/local-loader.js +6 -6
- package/dist/agents/skills/plugin-skills.js +2 -2
- package/dist/agents/skills/trust.js +93 -0
- package/dist/agents/skills/workspace.js +141 -13
- package/dist/agents/skills-clawhub.js +36 -11
- package/dist/agents/skills-install-download.js +7 -7
- package/dist/agents/skills-install-plan.js +2 -2
- package/dist/agents/skills-install.js +2 -2
- package/dist/agents/skills-marketplace-scan.js +49 -0
- package/dist/agents/skills-status.js +2 -2
- package/dist/agents/subagent-depth.js +2 -2
- package/dist/agents/system-prompt-params.js +2 -2
- package/dist/agents/tools/marketplace-offer-draft-tool.js +1 -1
- package/dist/agents/tools/mining-tool.js +1 -1
- package/dist/agents/tools/session-status-tool.js +1 -1
- package/dist/agents/tools/wallet-action-tool.js +172 -36
- package/dist/agents/tools/wallet-skill-policy.js +65 -23
- package/dist/agents/tools/wallet-tool.js +7 -11
- package/dist/agents/workspace.js +22 -22
- package/dist/auto-reply/reply/agent-runner-execution.js +2 -2
- package/dist/auto-reply/reply/agent-runner.js +2 -2
- package/dist/auto-reply/reply/commands-export-session.js +7 -7
- package/dist/auto-reply/reply/directive-handling.fast-lane.js +2 -1
- package/dist/auto-reply/reply/directive-handling.impl.js +2 -1
- package/dist/auto-reply/reply/directive-handling.model.js +2 -1
- package/dist/auto-reply/reply/directive-handling.persist.js +2 -2
- package/dist/auto-reply/reply/get-reply-directives-apply.js +2 -0
- package/dist/auto-reply/reply/get-reply-inline-actions.js +25 -1
- package/dist/auto-reply/reply/model-selection.js +7 -4
- package/dist/auto-reply/reply/post-compaction-audit.js +3 -3
- package/dist/auto-reply/reply/post-compaction-context.js +3 -3
- package/dist/auto-reply/reply/session-reset-model.js +4 -4
- package/dist/auto-reply/reply/session.js +3 -3
- package/dist/auto-reply/skill-commands.js +3 -3
- package/dist/auto-reply/status.js +6 -6
- package/dist/brand.js +1 -1
- package/dist/browser/chrome.executables.js +3 -3
- package/dist/browser/chrome.js +3 -3
- package/dist/browser/chrome.profile-decoration.js +6 -6
- package/dist/browser/profiles-service.js +2 -2
- package/dist/browser/server-context.js +2 -2
- package/dist/browser/trash.js +4 -4
- package/dist/build-info.json +3 -3
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/canvas-host/server.js +4 -4
- package/dist/capabilities/catalog.js +3 -3
- package/dist/channel-web.js +2 -2
- package/dist/channels/plugins/catalog.js +3 -3
- package/dist/cli/browser-cli-extension.js +6 -6
- package/dist/cli/command-format.js +2 -2
- package/dist/cli/cron-cli/register.cron-simple.js +2 -2
- package/dist/cli/dns-cli.js +9 -9
- package/dist/cli/gateway-cli/dev.js +5 -5
- package/dist/cli/gateway-cli/run.js +10 -2
- package/dist/cli/hooks-cli.js +5 -5
- package/dist/cli/lightweight/gateway-runtime-probe.js +2 -2
- package/dist/cli/memory-cli.js +7 -7
- package/dist/cli/nodes-media-utils.js +2 -2
- package/dist/cli/plugins-cli.js +2 -2
- package/dist/cli/program/command-registry.js +1 -1
- package/dist/cli/program/register.onboard.js +2 -3
- package/dist/cli/program/register.wallet.js +16 -123
- package/dist/cli/providers-cli.js +1 -1
- package/dist/cli/sat-cli.js +129 -2
- package/dist/cli/secrets-cli.js +3 -3
- package/dist/cli/update-cli/update-command.js +260 -11
- package/dist/cli/windows-argv.js +2 -2
- package/dist/commands/auth-choice.apply.api-providers.js +3 -3
- package/dist/commands/dashboard-link.js +3 -3
- package/dist/commands/doctor-config-flow.js +1 -1
- package/dist/commands/doctor-install.js +5 -5
- package/dist/commands/doctor-legacy-config.js +2 -13
- package/dist/commands/doctor-memory-search.js +2 -2
- package/dist/commands/doctor-platform-notes.js +2 -2
- package/dist/commands/doctor-sandbox.js +2 -2
- package/dist/commands/doctor-state-integrity.js +23 -23
- package/dist/commands/doctor-workspace.js +3 -3
- package/dist/commands/doctor.js +3 -3
- package/dist/commands/managed-up.js +2 -2
- package/dist/commands/model-picker.js +6 -6
- package/dist/commands/models/auth.js +1 -1
- package/dist/commands/onboard-auth.config-gateways.js +1 -1
- package/dist/commands/onboard-auth.credentials.js +35 -11
- package/dist/commands/onboard-non-interactive/local/wallet-config.js +28 -27
- package/dist/commands/onboard-non-interactive/local.js +5 -1
- package/dist/commands/onboarding/plugin-install.js +2 -2
- package/dist/commands/sessions-cleanup.js +2 -2
- package/dist/commands/signal-install.js +6 -6
- package/dist/commands/status-all/channels.js +2 -2
- package/dist/commands/wallet.js +570 -1913
- package/dist/config/cache-utils.js +2 -2
- package/dist/config/config.js +2 -2
- package/dist/config/includes.js +5 -5
- package/dist/config/io.js +66 -4
- package/dist/config/paths.js +3 -3
- package/dist/config/sat-runtime-ids.js +3 -3
- package/dist/config/schema.help.js +8 -7
- package/dist/config/schema.labels.js +5 -4
- package/dist/config/sessions/disk-budget.js +6 -6
- package/dist/config/sessions/paths.js +2 -2
- package/dist/config/sessions/store.js +17 -17
- package/dist/config/sessions/transcript.js +4 -4
- package/dist/config/talk.js +2 -2
- package/dist/config/zod-schema.agent-runtime.js +1 -0
- package/dist/config/zod-schema.js +5 -0
- package/dist/control-ui/assets/{app-BXA4gPvN.js → app-bR-fO5ty.js} +1511 -1555
- package/dist/control-ui/assets/{config-CU5Zi8Dh.js → config-LeImukCW.js} +10 -10
- package/dist/control-ui/assets/{federation-D10Q4eP_.js → federation-DgA9e-Pn.js} +364 -422
- package/dist/control-ui/assets/{index-D2QbJhVg.js → index-ckCxHwjy.js} +3 -3
- package/dist/control-ui/assets/{mining-BdhMn18r.js → mining-BgHFh0ei.js} +134 -114
- package/dist/control-ui/assets/mining-commit-DFpB_4JN.js +2 -0
- package/dist/control-ui/assets/{open-external-url-DwSiwMPl.js → open-external-url-ulF1B-sA.js} +3 -3
- package/dist/control-ui/assets/{providers-QMn4w2_f.js → providers-CIx9fxc6.js} +2 -2
- package/dist/control-ui/assets/{wallet-C2g294QT.js → wallet-DvStR_AT.js} +259 -377
- package/dist/control-ui/index.html +1 -1
- package/dist/control-ui/version.json +1 -1
- package/dist/cron/service/store.js +2 -2
- package/dist/cron/store.js +6 -6
- package/dist/daemon/systemd-system.js +60 -54
- package/dist/discord/monitor/thread-bindings.state.js +2 -2
- package/dist/extensions/sat-mining/src/protocol-contract.js +43 -3
- package/dist/extensions/sat-mining/src/rpc-read.js +235 -67
- package/dist/extensions/sat-mining/src/sat-bond-layout.js +14 -11
- package/dist/extensions/sat-mining/src/signer-codec-manifest.js +406 -0
- package/dist/extensions/sat-mining/src/solana-submit.js +1038 -397
- package/dist/extensions/sat-mining/src/submission-ledger.js +349 -0
- package/dist/federation/auto-connect.js +98 -8
- package/dist/federation/marketplace-capability-adapter.js +33 -7
- package/dist/federation/marketplace-delivery-outbox.js +196 -0
- package/dist/federation/marketplace-delivery.js +351 -215
- package/dist/federation/marketplace-direct-payment.js +272 -141
- package/dist/federation/marketplace-escrow.js +607 -249
- package/dist/federation/marketplace-settlement-ledger.js +352 -0
- package/dist/federation/offers.js +9 -7
- package/dist/federation/peer-auth-v2.js +529 -0
- package/dist/gateway/a2a-http.js +425 -96
- package/dist/gateway/a2a-settlement.js +259 -153
- package/dist/gateway/a2a-task-store.js +524 -0
- package/dist/gateway/auth.js +38 -2
- package/dist/gateway/config-reload.js +46 -33
- package/dist/gateway/control-ui-boot-check.js +6 -6
- package/dist/gateway/control-ui-login.js +7 -7
- package/dist/gateway/control-ui.js +9 -9
- package/dist/gateway/durable-capacity.js +31 -0
- package/dist/gateway/federation-http.js +540 -135
- package/dist/gateway/federation-marketplace-run-store.js +397 -0
- package/dist/gateway/federation-marketplace.js +535 -230
- package/dist/gateway/hooks-mapping.js +4 -4
- package/dist/gateway/mutating-admin-rpc-rate-limit.js +5 -0
- package/dist/gateway/security-path.js +1 -1
- package/dist/gateway/server-discovery.js +2 -2
- package/dist/gateway/server-http.js +1088 -1209
- package/dist/gateway/server-methods/chat.js +3 -3
- package/dist/gateway/server-methods/models.js +1 -1
- package/dist/gateway/server-methods/secrets.js +40 -0
- package/dist/gateway/server-methods/sessions.js +6 -6
- package/dist/gateway/server-methods/usage.js +2 -2
- package/dist/gateway/server-methods.js +1 -2
- package/dist/gateway/server-reload-handlers.js +196 -66
- package/dist/gateway/server-runtime-config.js +1 -1
- package/dist/gateway/server-secrets-runtime.js +288 -0
- package/dist/gateway/server.impl.js +73 -42
- package/dist/gateway/session-compaction-checkpoints.js +4 -4
- package/dist/gateway/session-utils.fs.js +24 -24
- package/dist/gateway/session-utils.js +6 -6
- package/dist/gateway/sessions-patch.js +3 -5
- package/dist/hooks/bundled-dir.js +4 -4
- package/dist/hooks/gmail-setup-utils.js +6 -6
- package/dist/hooks/import-url.js +2 -2
- package/dist/hooks/loader.js +4 -4
- package/dist/hooks/workspace.js +7 -7
- package/dist/index.js +4 -2
- package/dist/infra/archive.js +17 -17
- package/dist/infra/boundary-file-read.js +2 -2
- package/dist/infra/boundary-path.js +15 -15
- package/dist/infra/brew.js +2 -2
- package/dist/infra/control-ui-assets.js +14 -14
- package/dist/infra/device-auth-store.js +8 -8
- package/dist/infra/device-identity.js +8 -8
- package/dist/infra/dotenv.js +2 -2
- package/dist/infra/exec-approvals.js +8 -8
- package/dist/infra/exec-command-resolution.js +4 -4
- package/dist/infra/exec-safe-bin-trust.js +2 -2
- package/dist/infra/fased-root.js +5 -5
- package/dist/infra/fasedhub.js +64 -1
- package/dist/infra/fs-safe.js +14 -14
- package/dist/infra/gateway-lock.js +11 -11
- package/dist/infra/git-commit.js +5 -5
- package/dist/infra/git-root.js +4 -4
- package/dist/infra/hosted-runtime-artifact.js +3 -3
- package/dist/infra/is-main.js +2 -2
- package/dist/infra/json-file.js +7 -7
- package/dist/infra/local-source-paired-update.js +538 -0
- package/dist/infra/managed-runtime-bootstrap.js +6 -6
- package/dist/infra/outbound/delivery-queue.js +16 -16
- package/dist/infra/path-env.js +3 -3
- package/dist/infra/ports-lsof.js +4 -4
- package/dist/infra/provider-usage.auth.js +3 -3
- package/dist/infra/restart.js +41 -10
- package/dist/infra/safe-open-sync.js +2 -2
- package/dist/infra/session-cost-usage.js +9 -9
- package/dist/infra/shell-env.js +2 -2
- package/dist/infra/state-migrations.fs.js +6 -6
- package/dist/infra/state-migrations.js +23 -23
- package/dist/infra/tmp-fased-dir.js +6 -6
- package/dist/infra/update-runner.js +96 -0
- package/dist/infra/widearea-dns.js +3 -3
- package/dist/infra/wsl.js +2 -2
- package/dist/light-update-status.js +11 -11
- package/dist/line/accounts.js +2 -2
- package/dist/line/download.js +2 -2
- package/dist/logging/config.js +3 -3
- package/dist/logging/logger.js +7 -7
- package/dist/managed/federation.js +3 -3
- package/dist/managed/tunnel.js +3 -3
- package/dist/media/store.js +13 -13
- package/dist/media-understanding/runner.js +3 -3
- package/dist/memory/backend-config.js +2 -1
- package/dist/memory/embeddings.js +2 -2
- package/dist/memory/internal.js +10 -10
- package/dist/memory/manager-sync-ops.js +7 -7
- package/dist/memory/repair-executor.js +17 -17
- package/dist/memory/session-files.js +16 -2
- package/dist/node-host/invoke-system-run-plan.js +8 -8
- package/dist/node-host/invoke.js +2 -2
- package/dist/node-host/runner.js +3 -3
- package/dist/pairing/pairing-store.js +3 -3
- package/dist/plugin-sdk/{accounts-DxblobYM.js → accounts-Brn3-uWN.js} +1 -1
- package/dist/plugin-sdk/{actions-D4UNimWa.js → actions-DRu135h0.js} +2 -2
- package/dist/plugin-sdk/{active-listener-CFuy106s.js → active-listener-B_NMtgPL.js} +1 -1
- package/dist/plugin-sdk/{audio-preflight-Bv0hUOWL.js → audio-preflight-BYxAt775.js} +27 -27
- package/dist/plugin-sdk/{audit-Cs0K7LBp.js → audit-C5d2z5U1.js} +1 -1
- package/dist/plugin-sdk/{channel-access-D5aHoTY8.js → channel-access-CcFRdRPO.js} +1 -1
- package/dist/plugin-sdk/{channel-access-configure-Dvch9mMQ.js → channel-access-configure-DaI5wevh.js} +1 -1
- package/dist/plugin-sdk/channel-plugin-common.d.ts +3 -3
- package/dist/plugin-sdk/channel-plugin-common.js +4 -4
- package/dist/plugin-sdk/{chunk-B0FUGc5A.js → chunk-CyoyqpbG.js} +1 -1
- package/dist/plugin-sdk/{chunk-items-Bk--NU3E.js → chunk-items-DIRHG2gJ.js} +1 -1
- package/dist/plugin-sdk/command-status.d.ts +2 -2
- package/dist/plugin-sdk/command-status.js +27 -27
- package/dist/plugin-sdk/{commands-registry-DmDRhRAU.js → commands-registry-BfqdEWdF.js} +2 -2
- package/dist/plugin-sdk/{common-CfUOowOp.js → common-HCcXU-NR.js} +1 -1
- package/dist/plugin-sdk/{config-mxULv0fQ.js → config-DlWVeLFB.js} +7113 -6877
- package/dist/plugin-sdk/{config-schema-CGW6J3Pv.js → config-schema-BOT7kHb6.js} +6779 -3696
- package/dist/plugin-sdk/device-pair.d.ts +1 -1
- package/dist/plugin-sdk/discord.d.ts +5 -5
- package/dist/plugin-sdk/discord.js +19 -19
- package/dist/plugin-sdk/file-lock.js +35 -4
- package/dist/plugin-sdk/{filesystem-manager-ZoHU8oA7.js → filesystem-manager-DoI8IBNF.js} +1 -1
- package/dist/plugin-sdk/{group-mentions-BHRff6j8.d.ts → group-mentions-q3hUTCt7.d.ts} +1 -1
- package/dist/plugin-sdk/{handle-action-DbVCF9HZ.js → handle-action-hvwapMKg.js} +13 -13
- package/dist/plugin-sdk/{helpers-BXbdgs5H.js → helpers-DMBU4oTo.js} +1 -1
- package/dist/plugin-sdk/{image-ops-D7jPxaph.js → image-ops-DQi0n_Tt.js} +1 -1
- package/dist/plugin-sdk/index.d.ts +9 -27
- package/dist/plugin-sdk/index.js +29 -29
- package/dist/plugin-sdk/json-store.js +6 -6
- package/dist/plugin-sdk/{login-BRxww6nv.js → login-Ca583Okc.js} +3 -3
- package/dist/plugin-sdk/{login-qr-DJXsk9XH.js → login-qr-CGciBSNP.js} +3 -3
- package/dist/plugin-sdk/{manager-Y2S_5IlI.js → manager-BegWxNYX.js} +4 -4
- package/dist/plugin-sdk/{markdown-tables-DHLFQqaF.js → markdown-tables-DCOXEUfZ.js} +1 -1
- package/dist/plugin-sdk/{media-Czo4carg.js → media-CAdQF5TG.js} +47 -47
- package/dist/plugin-sdk/{memory-search-DTjIMw8J.js → memory-search-CrFPOeTH.js} +4 -1
- package/dist/plugin-sdk/{monitor-B9Cmt_Je.js → monitor-BCFDaqJ-.js} +31 -31
- package/dist/plugin-sdk/{monitor-B71iwAgC.js → monitor-BgbjRiPM.js} +32 -32
- package/dist/plugin-sdk/{openresponses-http-Du4GMmwo.js → openresponses-http-DFf87SMM.js} +27 -27
- package/dist/plugin-sdk/{optional-runtime-dependency-DdMbxS24.js → optional-runtime-dependency-0dznm3ZO.js} +1 -1
- package/dist/plugin-sdk/{outbound-Db8mRN6P.js → outbound-BgVDdHxx.js} +6 -6
- package/dist/plugin-sdk/{outbound-attachment-BqFjcypb.js → outbound-attachment-QqTnIhZL.js} +2 -2
- package/dist/plugin-sdk/{pairing-message-BMkkS038.d.ts → pairing-message-CS-9BHug.d.ts} +2 -2
- package/dist/plugin-sdk/{pairing-message-B3GC_7CD.js → pairing-message-D0CoLHRJ.js} +1 -1
- package/dist/plugin-sdk/{pairing-store-CQikgIbw.js → pairing-store-BChahgI2.js} +2 -2
- package/dist/plugin-sdk/{pi-model-discovery-CY3m5zJP.js → pi-model-discovery-BX_JLcEJ.js} +1 -1
- package/dist/plugin-sdk/{pi-model-discovery-runtime-DSh1T2pn.js → pi-model-discovery-runtime-DxTMz_XF.js} +2 -2
- package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +2 -2
- package/dist/plugin-sdk/{pw-ai-AFUqn-tQ.js → pw-ai-natjh3rm.js} +3 -3
- package/dist/plugin-sdk/{qmd-manager-DSyx77KY.js → qmd-manager-CgRaTxUq.js} +1 -1
- package/dist/plugin-sdk/{query-expansion-CAI2kKLQ.js → query-expansion-BG3FgzF7.js} +14 -3
- package/dist/plugin-sdk/{replies-Fzh9PhXl.js → replies-ChYo5ZQM.js} +2 -2
- package/dist/plugin-sdk/{resolve-outbound-target-KpF3co6T.js → resolve-outbound-target-D-KGgHJZ.js} +1 -1
- package/dist/plugin-sdk/{resolve-route-CDl74O19.js → resolve-route-C8tvQm8Z.js} +1 -1
- package/dist/plugin-sdk/{retry-policy-D4uiqUOG.js → retry-policy-C6SjKjQA.js} +1 -1
- package/dist/plugin-sdk/{runtime-Bb6KRnCC.js → runtime-2B9_WKoI.js} +8 -3
- package/dist/plugin-sdk/{runtime-dependency-DLDmB94f.js → runtime-dependency-DczkvPxn.js} +2 -2
- package/dist/plugin-sdk/sat-runtime.d.ts +549 -309
- package/dist/plugin-sdk/sat-runtime.js +29 -29
- package/dist/plugin-sdk/{send-C4k4JuJN.js → send-B6KkGKZD.js} +6 -6
- package/dist/plugin-sdk/{send-D-uDKGIq.js → send-CFzGKJXo.js} +6 -6
- package/dist/plugin-sdk/{send-Du8ykP1k.js → send-DCO441U7.js} +8 -8
- package/dist/plugin-sdk/{send-5nFktR1n.js → send-gDoGA-7e.js} +5 -5
- package/dist/plugin-sdk/{send-Bfzf11VY.js → send-q9HXrSwK.js} +7 -7
- package/dist/plugin-sdk/{session-CS-Td9EM.js → session-DHD4ZKyG.js} +2 -2
- package/dist/plugin-sdk/{skill-commands-CFAlXWHk.js → skill-commands-FKEPLS7T.js} +201 -26
- package/dist/plugin-sdk/{slack-D_bbE6Yd.js → slack-BUTt8cxK.js} +39 -39
- package/dist/plugin-sdk/{slack-actions-BcMkNv1Z.js → slack-actions-DhbMcp8M.js} +11 -11
- package/dist/plugin-sdk/slack.d.ts +5 -5
- package/dist/plugin-sdk/slack.js +9 -9
- package/dist/plugin-sdk/{sticker-cache-Dqo9nRhi.js → sticker-cache-D0wHVqjt.js} +3 -3
- package/dist/plugin-sdk/{tables-bFXyRpkx.js → tables-B3jr0Pvq.js} +1 -1
- package/dist/plugin-sdk/{targets-DH7a9lKB.js → targets-CtSbTxYX.js} +1 -1
- package/dist/plugin-sdk/{telegram-actions-Cnag7JTH.js → telegram-actions-CC_qN4v0.js} +30 -30
- package/dist/plugin-sdk/telegram.d.ts +5 -5
- package/dist/plugin-sdk/telegram.js +8 -8
- package/dist/plugin-sdk/{thread-bindings.lifecycle-CgOvvdw8.js → thread-bindings.lifecycle-QbkNl-m6.js} +3 -3
- package/dist/plugin-sdk/{thread-bindings.state-CQpk44Hq.js → thread-bindings.state-D9hg_M1c.js} +2 -2
- package/dist/plugin-sdk/tmp-fased-dir-xOTGlzBE.d.ts +486 -0
- package/dist/plugin-sdk/{types-CLIvQaVg.d.ts → types-C3avNytw.d.ts} +3 -4
- package/dist/plugin-sdk/{types-DyhXnYUr.d.ts → types-D0kDG8l0.d.ts} +3 -2
- package/dist/plugin-sdk/{types-BYDL6dQj.d.ts → types-DWfbSAaM.d.ts} +2 -2
- package/dist/plugin-sdk/{types.plugin-_fbu40Re.d.ts → types.plugin-BcSBq42x.d.ts} +8 -3
- package/dist/plugin-sdk/{web-BInKQkc4.js → web-BXsJ1vqe.js} +32 -32
- package/dist/plugin-sdk/{whatsapp-actions-BtSc2CBv.js → whatsapp-actions-Bj_rOncr.js} +13 -13
- package/dist/plugin-sdk/{whatsapp-heartbeat-Bg9TuYzl.js → whatsapp-heartbeat-B1WHkJIg.js} +2 -2
- package/dist/plugin-sdk/whatsapp.d.ts +5 -5
- package/dist/plugin-sdk/whatsapp.js +12 -12
- package/dist/plugin-sdk/{wsl-C4DGFkOd.js → wsl-J-HscWxS.js} +3 -3
- package/dist/plugins/bundled-dir.js +3 -3
- package/dist/plugins/discovery.js +11 -11
- package/dist/plugins/loader.js +13 -13
- package/dist/plugins/manifest-registry.js +2 -2
- package/dist/plugins/manifest.js +4 -4
- package/dist/plugins/path-safety.js +3 -3
- package/dist/plugins/status-cache.js +9 -9
- package/dist/plugins/update.js +3 -3
- package/dist/plugins/web-search-install-catalog.js +3 -3
- package/dist/providers/refresh.js +1 -1
- package/dist/providers/registry.js +1 -1
- package/dist/secrets/apply.js +17 -17
- package/dist/secrets/audit.js +11 -11
- package/dist/secrets/runtime.js +1 -1
- package/dist/secrets/shared.js +9 -9
- package/dist/security/scan-paths.js +2 -2
- package/dist/shared/config-eval.js +2 -2
- package/dist/shared/pid-alive.js +2 -2
- package/dist/tasks/standing-orders.js +5 -5
- package/dist/tasks/task-flow-registry.js +5 -5
- package/dist/tasks/task-registry.js +5 -5
- package/dist/tasks/workflow-definitions.js +6 -6
- package/dist/telegram/token.js +5 -5
- package/dist/utils.js +5 -5
- package/dist/wallet/external-submission-ledger.js +376 -0
- package/dist/wallet/legacy-embedded-keystore.js +40 -0
- package/dist/wallet/local-socket-signer-archive.js +30 -0
- package/dist/wallet/local-socket-signer-lifecycle.js +97 -0
- package/dist/wallet/local-socket-signer-policy.js +166 -0
- package/dist/wallet/local-socket-signer-protocol.js +561 -118
- package/dist/wallet/native-signer-wallet-id.js +25 -0
- package/dist/wallet/providers/alchemy-adapter.js +3 -0
- package/dist/wallet/providers/local-socket-signer-adapter.js +382 -107
- package/dist/wallet/providers/turnkey-adapter.js +292 -34
- package/dist/wallet/providers/wallet-standard-adapter.js +100 -0
- package/dist/wallet/signer-network-admin.js +184 -0
- package/dist/wallet/signer-protocol-v2.generated.js +90 -0
- package/dist/wallet/solana-bond-signing.js +157 -69
- package/dist/wallet/solana-reviewed-transaction.js +375 -0
- package/dist/wallet/solana-swap.js +520 -64
- package/dist/wallet/solana-transaction-inspection.js +106 -4
- package/dist/wallet/solana-trigger.js +658 -320
- package/dist/wallet/turnkey-reviewed-state.js +370 -0
- package/dist/wallet/wallet-approval-auth.js +20 -31
- package/dist/wallet/wallet-atomic-state.js +53 -0
- package/dist/wallet/wallet-audit-log.js +5 -5
- package/dist/wallet/wallet-canary.js +0 -1
- package/dist/wallet/wallet-inbound-events.js +19 -14
- package/dist/wallet/wallet-observability.js +5 -5
- package/dist/wallet/wallet-policy-simulation.js +1 -1
- package/dist/wallet/wallet-policy.js +95 -41
- package/dist/wallet/wallet-provider-capabilities.js +28 -4
- package/dist/wallet/wallet-provider-registry.js +64 -51
- package/dist/wallet/wallet-provider-resolver.js +62 -63
- package/dist/wallet/wallet-runtime-config.js +31 -44
- package/dist/wallet/wallet-secrets-store.js +44 -22
- package/dist/wallet/wallet-send-approvals.js +1894 -592
- package/dist/wallet/wallet-send-execution-ledger.js +292 -0
- package/dist/wallet/wallet-settlement-links.js +17 -16
- package/dist/wallet/wallet-standard-review.js +353 -0
- package/dist/wallet/wallet-status.js +0 -9
- package/dist/wallet/wallet-task-ledger.js +16 -2
- package/dist/web/accounts.js +3 -3
- package/dist/web/auth-store.js +18 -18
- package/dist/web/auto-reply/heartbeat-runner.js +1 -1
- package/dist/web/auto-reply/monitor.js +2 -2
- package/dist/web/session.js +4 -4
- package/dist/wizard/host-security-capability.js +15 -24
- package/dist/wizard/onboarding.finalize.js +63 -184
- package/dist/wizard/onboarding.host-security.js +118 -1368
- package/dist/wizard/onboarding.js +180 -242
- package/dist/wizard/onboarding.wallet.js +323 -829
- package/extensions/acpx/package.json +1 -1
- package/extensions/bluebubbles/package.json +1 -1
- package/extensions/copilot-proxy/package.json +1 -1
- package/extensions/diagnostics-otel/package.json +1 -1
- package/extensions/fased-federation/package.json +1 -1
- package/extensions/google-gemini-cli-auth/package.json +1 -1
- package/extensions/imessage/package.json +1 -1
- package/extensions/irc/package.json +1 -1
- package/extensions/line/package.json +1 -1
- package/extensions/llm-task/package.json +1 -1
- package/extensions/lobster/package.json +1 -1
- package/extensions/matrix/CHANGELOG.md +18 -0
- package/extensions/matrix/package.json +1 -1
- package/extensions/mattermost/package.json +1 -1
- package/extensions/memory-core/package.json +2 -2
- package/extensions/memory-lancedb/package.json +1 -1
- package/extensions/minimax-portal-auth/package.json +1 -1
- package/extensions/msteams/CHANGELOG.md +18 -0
- package/extensions/msteams/package.json +1 -1
- package/extensions/nextcloud-talk/package.json +1 -1
- package/extensions/nostr/CHANGELOG.md +18 -0
- package/extensions/nostr/package.json +1 -1
- package/extensions/open-prose/package.json +1 -1
- package/extensions/sat-mining/index.ts +498 -153
- package/extensions/sat-mining/package.json +1 -1
- package/extensions/sat-mining/signer-codec-schema.v1.json +374 -0
- package/extensions/sat-mining/src/audit-store.ts +50 -5
- package/extensions/sat-mining/src/claim-service.ts +85 -14
- package/extensions/sat-mining/src/config.ts +9 -0
- package/extensions/sat-mining/src/cycle-progress.ts +16 -8
- package/extensions/sat-mining/src/epoch-service.ts +9 -5
- package/extensions/sat-mining/src/gateway-runner.ts +21 -1
- package/extensions/sat-mining/src/protocol-contract.ts +45 -1
- package/extensions/sat-mining/src/recovery-service.ts +312 -0
- package/extensions/sat-mining/src/round-watcher.ts +391 -81
- package/extensions/sat-mining/src/rpc-read.ts +330 -89
- package/extensions/sat-mining/src/runtime.ts +14 -0
- package/extensions/sat-mining/src/sat-bond-layout.ts +6 -0
- package/extensions/sat-mining/src/signer-codec-manifest.ts +429 -0
- package/extensions/sat-mining/src/solana-submit.ts +1199 -428
- package/extensions/sat-mining/src/submission-ledger.ts +433 -0
- package/extensions/signal/package.json +1 -1
- package/extensions/synology-chat/package.json +1 -1
- package/extensions/tlon/package.json +1 -1
- package/extensions/twitch/CHANGELOG.md +18 -0
- package/extensions/twitch/package.json +1 -1
- package/extensions/voice-call/CHANGELOG.md +18 -0
- package/extensions/voice-call/package.json +1 -1
- package/extensions/zalo/CHANGELOG.md +18 -0
- package/extensions/zalo/package.json +1 -1
- package/extensions/zalouser/CHANGELOG.md +18 -0
- package/extensions/zalouser/package.json +1 -1
- package/install.sh +4955 -0
- package/package.json +24 -5
- package/scripts/fased-host-updater.mjs +1421 -0
- package/scripts/fased-host-updaterctl.mjs +186 -0
- package/scripts/fased-managed-service.sh +36 -0
- package/scripts/fased-managed-updater.mjs +3065 -156
- package/scripts/fased-signer-enroll-hosting.sh +275 -0
- package/scripts/fased-signer-network-hosting.sh +143 -0
- package/scripts/fased-signer-owner-policy.mjs +1430 -0
- package/scripts/fased-signer-policy-hosting.sh +50 -0
- package/scripts/fased-signer-policy-local.sh +26 -0
- package/scripts/hosted-release-manifest.mjs +185 -0
- package/scripts/install-fased-signerd.sh +217 -0
- package/scripts/install-managed-runtime.mjs +212 -10
- package/scripts/managed-runtime-layout.mjs +75 -3
- package/scripts/migrate-hosted-signer-v2.mjs +58 -0
- package/scripts/start-managed.sh +169 -360
- package/dist/control-ui/assets/mining-commit-R-6nu87p.js +0 -2
- package/dist/plugin-sdk/tmp-fased-dir-BdFQvrvw.d.ts +0 -77
- package/dist/wallet/local-socket-signer-broker.js +0 -224
- package/dist/wallet/local-socket-signer-custody.js +0 -42
- package/dist/wallet/providers/embedded-keystore-adapter.js +0 -402
- package/dist/wallet/providers/privy-adapter.js +0 -80
- package/dist/wallet/wallet-custody.js +0 -1836
package/dist/agents/workspace.js
CHANGED
|
@@ -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
|
|
8
|
+
import syncFs from "node:fs";
|
|
9
9
|
import os from "node:os";
|
|
10
10
|
import path from "node:path";
|
|
11
|
-
import fs
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
248
|
-
await fs
|
|
247
|
+
await fs.writeFile(tmpPath, payload, { encoding: "utf-8" });
|
|
248
|
+
await fs.rename(tmpPath, statePath);
|
|
249
249
|
} catch (err) {
|
|
250
|
-
await fs
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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 (!
|
|
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 (!
|
|
147
|
-
|
|
146
|
+
if (!syncFs.existsSync(outputDir)) {
|
|
147
|
+
syncFs.mkdirSync(outputDir, { recursive: true });
|
|
148
148
|
}
|
|
149
149
|
if (args.outputPath) {
|
|
150
|
-
|
|
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.
|
|
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 (
|
|
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
|
|
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 (
|
|
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 (
|
|
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 (
|
|
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
|
|
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 (!
|
|
41
|
+
if (!syncFs.existsSync(sessionFile)) {
|
|
42
42
|
return [];
|
|
43
43
|
}
|
|
44
44
|
try {
|
|
45
|
-
const content =
|
|
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
|
|
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 (!
|
|
13
|
+
if (!syncFs.existsSync(agentsPath)) {
|
|
14
14
|
return null;
|
|
15
15
|
}
|
|
16
|
-
const content = await
|
|
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.
|
|
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
|
|
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 || !
|
|
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
|
-
|
|
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
|
|
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 (!
|
|
46
|
+
if (!syncFs.existsSync(workspaceDir)) {
|
|
47
47
|
continue;
|
|
48
48
|
}
|
|
49
|
-
const canonicalDir =
|
|
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
|
|
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 (!
|
|
138
|
+
if (!syncFs.existsSync(logPath)) {
|
|
139
139
|
return undefined;
|
|
140
140
|
}
|
|
141
141
|
try {
|
|
142
142
|
const TAIL_BYTES = 8192;
|
|
143
|
-
const stat =
|
|
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 =
|
|
146
|
+
const fd = syncFs.openSync(logPath, "r");
|
|
147
147
|
try {
|
|
148
|
-
|
|
148
|
+
syncFs.readSync(fd, buf, 0, buf.length, offset);
|
|
149
149
|
} finally {
|
|
150
|
-
|
|
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.
|
|
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
|
|
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
|
|
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 =
|
|
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=")) {
|