@fased/fased 0.1.55 → 0.1.56
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config/capability-catalog.json +12 -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 +2 -2
- package/dist/agents/authenticated-model-catalog.js +3 -2
- package/dist/agents/bash-tools.exec-host-node.js +1 -1
- package/dist/agents/bash-tools.exec.js +1 -1
- package/dist/agents/bash-tools.shared.js +2 -2
- package/dist/agents/cli-credentials.js +4 -4
- package/dist/agents/copilot-dynamic-headers.js +37 -0
- package/dist/agents/current-model-catalog.js +6 -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/model-catalog-source.js +2 -2
- package/dist/agents/model-catalog.js +1 -1
- package/dist/agents/model-metadata.js +34 -6
- package/dist/agents/openai-codex-app-server.js +499 -0
- package/dist/agents/pi-embedded-runner/compact.js +3 -3
- package/dist/agents/pi-embedded-runner/extra-params.js +159 -95
- package/dist/agents/pi-embedded-runner/model.js +62 -1
- package/dist/agents/pi-embedded-runner/moonshot-stream-wrappers.js +46 -0
- package/dist/agents/pi-embedded-runner/openai-stream-wrappers.js +221 -0
- package/dist/agents/pi-embedded-runner/run/attempt.js +6 -4
- package/dist/agents/pi-embedded-runner/run.js +5 -2
- package/dist/agents/pi-embedded-runner/utils.js +1 -1
- package/dist/agents/pi-embedded-runner.js +1 -1
- 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-tools.js +2 -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/local-loader.js +6 -6
- package/dist/agents/skills/plugin-skills.js +2 -2
- package/dist/agents/skills/workspace.js +13 -13
- 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-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/discord-actions-messaging.js +1 -1
- package/dist/agents/tools/message-tool.js +1 -1
- package/dist/agents/tools/session-status-tool.js +3 -3
- package/dist/agents/tools/slack-actions.js +1 -1
- package/dist/agents/tools/tts-tool.js +1 -1
- 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/commands-models.js +1 -1
- package/dist/auto-reply/reply/directive-handling.impl.js +4 -1
- package/dist/auto-reply/reply/dispatch-acp.js +1 -1
- package/dist/auto-reply/reply/dispatch-from-config.js +1 -1
- package/dist/auto-reply/reply/get-reply-run.js +20 -2
- package/dist/auto-reply/reply/model-selection.js +1 -1
- 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 +1 -1
- package/dist/auto-reply/reply/session.js +3 -3
- package/dist/auto-reply/skill-commands.js +3 -3
- package/dist/auto-reply/status.js +7 -7
- package/dist/auto-reply/thinking.js +1 -1
- package/dist/brand.js +1 -1
- package/dist/browser/cdp.helpers.js +2 -2
- package/dist/browser/chrome.executables.js +3 -3
- package/dist/browser/chrome.js +5 -5
- package/dist/browser/chrome.profile-decoration.js +6 -6
- package/dist/browser/extension-relay.js +7 -7
- 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/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-add.js +1 -1
- 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 +2 -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/register.agent.js +1 -1
- package/dist/cli/secrets-cli.js +3 -3
- package/dist/cli/windows-argv.js +2 -2
- package/dist/commands/agent.js +22 -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-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/hosted-dashboard-probe.js +3 -3
- package/dist/commands/managed-up.js +2 -2
- package/dist/commands/model-picker.js +4 -3
- package/dist/commands/models/list.probe.js +1 -1
- package/dist/commands/models/list.registry.js +3 -2
- package/dist/commands/models/list.status-command.js +2 -2
- package/dist/commands/onboard-auth.credentials.js +3 -3
- package/dist/commands/onboarding/plugin-install.js +2 -2
- package/dist/commands/openai-codex-model-default.js +3 -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 +47 -47
- package/dist/config/cache-utils.js +2 -2
- package/dist/config/includes.js +5 -5
- package/dist/config/io.js +2 -2
- package/dist/config/paths.js +3 -3
- package/dist/config/sat-runtime-ids.js +3 -3
- 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-defaults.js +4 -2
- package/dist/config/zod-schema.agent-runtime.js +4 -2
- package/dist/config/zod-schema.core.js +4 -2
- package/dist/control-ui/assets/{app-D2RaTXoV.js → app-D7TXyNRi.js} +390 -383
- package/dist/control-ui/assets/chat-model-ref-Djkv93yn.js +2 -0
- package/dist/control-ui/assets/{index-D2nC6I-9.js → index-BmSBom-w.js} +3 -3
- package/dist/control-ui/assets/{providers-CyjiG5Jw.js → providers-Cc89iMdx.js} +3 -3
- package/dist/control-ui/index.html +1 -1
- package/dist/control-ui/version.json +1 -1
- package/dist/cron/isolated-agent/run.js +6 -2
- package/dist/cron/service/jobs.js +11 -1
- package/dist/cron/service/store.js +2 -2
- package/dist/cron/store.js +6 -6
- package/dist/daemon/systemd-system.js +5 -5
- package/dist/discord/monitor/gateway-plugin.js +2 -2
- package/dist/discord/monitor/thread-bindings.state.js +2 -2
- package/dist/discord/voice/manager.js +1 -1
- package/dist/extensions/sat-mining/src/sat-bond-layout.js +9 -9
- package/dist/gateway/client.js +4 -4
- 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/hooks-mapping.js +4 -4
- package/dist/gateway/protocol/schema/agents-models-skills.js +63 -4
- package/dist/gateway/server-discovery.js +2 -2
- package/dist/gateway/server-http.js +4 -4
- package/dist/gateway/server-methods/chat.js +3 -3
- package/dist/gateway/server-methods/models.js +4 -3
- package/dist/gateway/server-methods/sessions.js +8 -8
- package/dist/gateway/server-methods/tts.js +2 -2
- package/dist/gateway/server-methods/usage.js +2 -2
- package/dist/gateway/server-model-catalog.js +1 -1
- package/dist/gateway/server.impl.js +3 -3
- 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 +27 -24
- 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/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/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/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/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/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/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/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-CeRNo5Ae.js → accounts-DzWlKv1U.js} +1 -1
- package/dist/plugin-sdk/{actions-OMRHtXPj.js → actions-BplQVLL6.js} +4 -4
- package/dist/plugin-sdk/{active-listener-BlIkS3iR.js → active-listener-x4MLhYUw.js} +1 -1
- package/dist/plugin-sdk/{allow-list-BYeKk0Sy.js → allow-list-DyAxs4yw.js} +1 -1
- package/dist/plugin-sdk/{audio-preflight-B2n3a2Tj.js → audio-preflight-G8h3Sn8_.js} +43 -47
- package/dist/plugin-sdk/{audit-Ppg6dR_b.js → audit-CWknklvI.js} +1 -1
- package/dist/plugin-sdk/{channel-access-af8dWWRv.js → channel-access-a9Dnfw7-.js} +1 -1
- package/dist/plugin-sdk/{channel-access-configure-B6IAGlE0.js → channel-access-configure-CD4QDN5E.js} +1 -1
- package/dist/plugin-sdk/{channel-adapters.discord-IOZP8Cv5.js → channel-adapters.discord-BS4S4Svh.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-CD76Byie.js → chunk-B8EZkwiT.js} +1 -1
- package/dist/plugin-sdk/{chunk-items-Bu19zrYH.js → chunk-items-CEPklxGe.js} +1 -1
- package/dist/plugin-sdk/command-status.d.ts +2 -2
- package/dist/plugin-sdk/command-status.js +43 -47
- package/dist/plugin-sdk/{commands-registry-DgS55tNj.js → commands-registry-BfEa4tFA.js} +2 -2
- package/dist/plugin-sdk/{common-CWvfeiX0.js → common-CbfckC19.js} +1 -1
- package/dist/plugin-sdk/{config-CYDETqcF.js → config-Bt5GhnA-.js} +29 -15
- package/dist/plugin-sdk/{config-schema-CQ4EVcQG.js → config-schema-B9DKr6J5.js} +95877 -81287
- package/dist/plugin-sdk/device-pair.d.ts +1 -1
- package/dist/plugin-sdk/device-pair.js +2 -3
- package/dist/plugin-sdk/{diagnostic-Dfn1iERm.js → diagnostic-DLL_zekv.js} +3 -3
- package/dist/plugin-sdk/{directory-live-DatqU-eS.js → directory-live-CSuYxdwk.js} +1 -1
- package/dist/plugin-sdk/{directory-live-ClwN5KKq.js → directory-live-Dw7ZgC9_.js} +1 -1
- package/dist/plugin-sdk/discord.d.ts +5 -5
- package/dist/plugin-sdk/discord.js +31 -32
- package/dist/plugin-sdk/{draft-stream-controls-D4Tb_iS_.js → draft-stream-controls-BqchW1vi.js} +1 -1
- package/dist/plugin-sdk/{fetch-guard-BuYrl6q2.js → fetch-guard-CeG6u6ld.js} +1 -1
- package/dist/plugin-sdk/{filesystem-manager-B9DDPgfU.js → filesystem-manager-BGGGrkiN.js} +2 -2
- package/dist/plugin-sdk/{fs-safe-BG-VzVkL.js → fs-safe-xBqok6yR.js} +1 -1
- package/dist/plugin-sdk/{group-mentions-BxDgHCgj.d.ts → group-mentions-BHRff6j8.d.ts} +1 -1
- package/dist/plugin-sdk/{guilds-BeT3iHHJ.js → guilds-CDhRIX57.js} +1 -1
- package/dist/plugin-sdk/{handle-action-B75UVKxF.js → handle-action-DbzZFYnG.js} +24 -25
- package/dist/plugin-sdk/{helpers-BuEwju6y.js → helpers-CluGKuIV.js} +1 -1
- package/dist/plugin-sdk/{image-ops-C66HPeAZ.js → image-ops-CUaLtIFj.js} +1 -1
- package/dist/plugin-sdk/index.d.ts +7 -7
- package/dist/plugin-sdk/index.js +47 -51
- package/dist/plugin-sdk/json-store.js +6 -6
- package/dist/plugin-sdk/{login-Amr2DpKU.js → login-DJuHYDiK.js} +3 -3
- package/dist/plugin-sdk/{login-qr-DMQNEi9m.js → login-qr-CbHL5ayf.js} +3 -3
- package/dist/plugin-sdk/{manager-Bvpq49BI.js → manager-oHAvZCT3.js} +7 -7
- package/dist/plugin-sdk/{markdown-tables-DmQ7oXOm.js → markdown-tables-Mkx7k92Y.js} +1 -1
- package/dist/plugin-sdk/{media-ByLQbEwJ.js → media-CA8sTmVE.js} +4 -4
- package/dist/plugin-sdk/{monitor-K_u6daGa.js → monitor-CZrN9pev.js} +51 -55
- package/dist/plugin-sdk/{monitor-S_7LrvSj.js → monitor-CmwGqNyV.js} +61 -65
- package/dist/plugin-sdk/{openresponses-http-BrDJUZXR.js → openresponses-http-CWOd4war.js} +43 -47
- package/dist/plugin-sdk/{optional-runtime-dependency-CbYjAC2b.js → optional-runtime-dependency-DKmk9PZa.js} +1 -1
- package/dist/plugin-sdk/{outbound-BuDafBBI.js → outbound-0oN9IfNw.js} +9 -9
- package/dist/plugin-sdk/{outbound-attachment-DmZmUqFP.js → outbound-attachment-DdVkqUzE.js} +2 -2
- package/dist/plugin-sdk/{pairing-message-D0-UWGFJ.d.ts → pairing-message-BMkkS038.d.ts} +2 -2
- package/dist/plugin-sdk/{pairing-message-e4D4eBDA.js → pairing-message-ClqhfCUk.js} +1 -1
- package/dist/plugin-sdk/{pairing-store-T3IGoGZg.js → pairing-store-B01mCSct.js} +2 -2
- package/dist/plugin-sdk/{pi-model-discovery-DvAG_Png.js → pi-model-discovery-Buz0JC1Y.js} +1 -1
- package/dist/plugin-sdk/{pi-model-discovery-runtime-NjkUgjIf.js → pi-model-discovery-runtime-DuwuoteY.js} +2 -2
- package/dist/plugin-sdk/{probe-Cyb-DGA3.js → probe--7xtfzMm.js} +3 -3
- package/dist/plugin-sdk/{probe-Dlk0Jxpw.js → probe-BFroeK3g.js} +1 -1
- package/dist/plugin-sdk/{probe-D8JAILir.js → probe-l_whvGLY.js} +1 -1
- package/dist/plugin-sdk/{resolve-channels-zEnvugag.js → probe-xY3Ky0Tx.js} +3 -4
- package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +2 -2
- package/dist/plugin-sdk/{pw-ai-D7eW43DL.js → pw-ai-B0domrii.js} +6 -8
- package/dist/plugin-sdk/{qmd-manager-DCUE21Kj.js → qmd-manager-CFFeM4Fl.js} +3 -3
- package/dist/plugin-sdk/{query-expansion-Zr9qQixm.js → query-expansion-CAI2kKLQ.js} +1 -1
- package/dist/plugin-sdk/{replies-BMIPmEoP.js → replies-1macZ1mZ.js} +4 -4
- package/dist/plugin-sdk/{resolve-channels-ChWKWtA9.js → resolve-channels-87LZrFk_.js} +2 -2
- package/dist/plugin-sdk/resolve-channels-CwB2_019.js +4 -0
- package/dist/plugin-sdk/{resolve-outbound-target-CXCqUUPV.js → resolve-outbound-target-BdH6LUoW.js} +2 -2
- package/dist/plugin-sdk/{resolve-route-DJN-SUSt.js → resolve-route-CkNIKKEW.js} +1 -1
- package/dist/plugin-sdk/{resolve-users-BTvjQuui.js → resolve-users-Cxb5wpAQ.js} +1 -1
- package/dist/plugin-sdk/{resolve-users-CTzoruIZ.js → resolve-users-V6dHh_2B.js} +2 -2
- package/dist/plugin-sdk/{retry-policy-CY1qY6d7.js → retry-policy-9ybIh4Fq.js} +1 -1
- package/dist/plugin-sdk/{runtime-CgOkQe0w.js → runtime-Dy420wBu.js} +3 -3
- package/dist/plugin-sdk/{runtime-dependency-DvdRNMvs.js → runtime-dependency-CIw9t7-k.js} +123 -15
- package/dist/plugin-sdk/{sandbox-paths-lj7_EVuA.js → sandbox-paths-w64tYl0v.js} +1 -1
- package/dist/plugin-sdk/sat-runtime.d.ts +3 -3
- package/dist/plugin-sdk/sat-runtime.js +44 -10
- package/dist/plugin-sdk/{send-BAz22RZr.js → send-2VcOMTN5.js} +9 -9
- package/dist/plugin-sdk/{send-2ITqny2W.js → send-BQUtCJFW.js} +10 -10
- package/dist/plugin-sdk/{send-Cr-dj6S-.js → send-DPJIIYAs.js} +6 -6
- package/dist/plugin-sdk/{send-BG3RWyil.js → send-Dqes9tdU.js} +13 -13
- package/dist/plugin-sdk/{send-eTxqFFsw.js → send-J4JWKP62.js} +8 -8
- package/dist/plugin-sdk/{session-C8nJmmVE.js → session-C_n2S5ub.js} +3 -3
- package/dist/plugin-sdk/{skill-commands-Rm5by9S8.js → skill-commands-B7wx9ax8.js} +102 -102
- package/dist/plugin-sdk/{slack-xvIVvyEM.js → slack-BouRQG-W.js} +64 -68
- package/dist/plugin-sdk/{slack-actions-BNIALJTA.js → slack-actions-CasHVtiq.js} +20 -21
- package/dist/plugin-sdk/slack.d.ts +5 -5
- package/dist/plugin-sdk/slack.js +13 -13
- package/dist/plugin-sdk/{ssrf-BZG8Ztod.js → ssrf-fG4UHKBw.js} +180 -2
- package/dist/plugin-sdk/{sticker-cache-D3oDiu2u.js → sticker-cache-BvGEUas3.js} +3 -3
- package/dist/plugin-sdk/{tables-DS5L7lCA.js → tables-CjlQJV4r.js} +2 -2
- package/dist/plugin-sdk/{device-pairing-D2Yq-_U6.js → tailscale-status-DwpNdO3Z.js} +104 -2
- package/dist/plugin-sdk/{targets-D6lUomJc.js → targets-QfP164Dh.js} +2 -2
- package/dist/plugin-sdk/{telegram-actions-MSFkDn0m.js → telegram-actions-CwYjV6Db.js} +48 -52
- package/dist/plugin-sdk/telegram.d.ts +5 -5
- package/dist/plugin-sdk/telegram.js +11 -11
- package/dist/plugin-sdk/{thread-bindings.lifecycle-Ry6Vcgw3.js → thread-bindings.lifecycle-DU4iX_Jr.js} +3 -3
- package/dist/plugin-sdk/{thread-bindings.state-C0stmvNk.js → thread-bindings.state-BgYWFjNF.js} +2 -2
- package/dist/plugin-sdk/{tmp-fased-dir-D91GExk4.d.ts → tmp-fased-dir-BdFQvrvw.d.ts} +2 -2
- package/dist/plugin-sdk/{types-DVTIpopt.d.ts → types-BYDL6dQj.d.ts} +2 -2
- package/dist/plugin-sdk/{types-DKvBJHfH.d.ts → types-CLIvQaVg.d.ts} +26 -1
- package/dist/plugin-sdk/{types-BzadOItY.d.ts → types-DyhXnYUr.d.ts} +1 -1
- package/dist/plugin-sdk/{types.plugin-BiHPaDTF.d.ts → types.plugin-_fbu40Re.d.ts} +7 -5
- package/dist/plugin-sdk/{web-DRNJxHXA.js → web-D0yENDve.js} +52 -56
- package/dist/plugin-sdk/{whatsapp-actions-BDXZF2R5.js → whatsapp-actions-BT2nPLyo.js} +18 -19
- package/dist/plugin-sdk/{whatsapp-heartbeat-CKgmwCGr.js → whatsapp-heartbeat-CiABSZ6G.js} +2 -2
- package/dist/plugin-sdk/whatsapp.d.ts +5 -5
- package/dist/plugin-sdk/whatsapp.js +14 -14
- package/dist/plugin-sdk/{wsl-Biw7Mj39.js → wsl-B_ojyEtC.js} +53 -53
- 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/runtime/index.js +1 -1
- 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/github-copilot-model-discovery.js +51 -0
- package/dist/providers/openai-codex-model-discovery.js +166 -0
- package/dist/providers/refresh.js +116 -34
- package/dist/providers/registry.js +2 -2
- package/dist/providers/runtime-model-catalog.js +97 -28
- package/dist/secrets/apply.js +16 -16
- package/dist/secrets/audit.js +11 -11
- 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/model-thinking.js +13 -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/bot-message-context.js +1 -1
- package/dist/telegram/token.js +5 -5
- package/dist/utils.js +5 -5
- package/dist/wallet/local-socket-signer-broker.js +16 -16
- package/dist/wallet/providers/embedded-keystore-adapter.js +5 -5
- package/dist/wallet/providers/local-socket-signer-adapter.js +2 -2
- package/dist/wallet/wallet-approval-auth.js +5 -5
- package/dist/wallet/wallet-audit-log.js +5 -5
- package/dist/wallet/wallet-custody.js +21 -21
- package/dist/wallet/wallet-inbound-events.js +5 -5
- package/dist/wallet/wallet-observability.js +5 -5
- package/dist/wallet/wallet-policy.js +9 -9
- package/dist/wallet/wallet-provider-registry.js +7 -7
- package/dist/wallet/wallet-runtime-config.js +3 -3
- package/dist/wallet/wallet-secrets-store.js +22 -22
- package/dist/wallet/wallet-send-approvals.js +5 -5
- package/dist/wallet/wallet-settlement-links.js +5 -5
- package/dist/web/accounts.js +3 -3
- package/dist/web/auth-store.js +18 -18
- package/dist/web/session.js +4 -4
- package/dist/wizard/host-security-capability.js +2 -2
- package/dist/wizard/onboarding.host-security.js +7 -7
- package/dist/wizard/onboarding.js +7 -7
- package/dist/wizard/onboarding.wallet.js +44 -44
- 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 +6 -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 +6 -0
- package/extensions/msteams/package.json +1 -1
- package/extensions/nextcloud-talk/package.json +1 -1
- package/extensions/nostr/CHANGELOG.md +6 -0
- package/extensions/nostr/package.json +1 -1
- package/extensions/open-prose/package.json +1 -1
- package/extensions/sat-mining/package.json +1 -1
- 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 +6 -0
- package/extensions/twitch/package.json +1 -1
- package/extensions/voice-call/CHANGELOG.md +6 -0
- package/extensions/voice-call/package.json +1 -1
- package/extensions/zalo/CHANGELOG.md +6 -0
- package/extensions/zalo/package.json +1 -1
- package/extensions/zalouser/CHANGELOG.md +6 -0
- package/extensions/zalouser/package.json +1 -1
- package/package.json +2 -1
- package/dist/control-ui/assets/chat-model-ref-BZFblCeY.js +0 -2
- package/dist/plugin-sdk/ip-C70a-YlD.js +0 -181
- package/dist/plugin-sdk/tailscale-status-ClsquRGs.js +0 -104
- package/dist/plugin-sdk/wallet-status-f0HagNeO.js +0 -11947
- package/dist/plugin-sdk/ws-CocpWGhl.js +0 -114
- /package/dist/plugin-sdk/{blocks-input-Dcitfh7h.js → blocks-input-Bg-8S2pl.js} +0 -0
- /package/dist/plugin-sdk/{channel-activity-Cg1xRoc2.js → channel-activity-DBDMQ3yI.js} +0 -0
- /package/dist/plugin-sdk/{channel-core-BOkyXXLa.js → channel-core-CFRs8LPy.js} +0 -0
- /package/dist/plugin-sdk/{client-D2N7hqVu.js → client-pI228AVT.js} +0 -0
- /package/dist/plugin-sdk/{command-poll-backoff-NAePk3eL.js → command-poll-backoff-yJU83wEq.js} +0 -0
- /package/dist/plugin-sdk/{date-time-CE3Uer3C.js → date-time-uUevHscU.js} +0 -0
- /package/dist/plugin-sdk/{diagnostic-session-state-HO94DMou.js → diagnostic-session-state-DqgfGYqZ.js} +0 -0
- /package/dist/plugin-sdk/{draft-stream-loop-CKyHn8IX.js → draft-stream-loop-CrOPfV3F.js} +0 -0
- /package/dist/plugin-sdk/{fetch-Cu-ahkie.js → fetch-BtmoPIlf.js} +0 -0
- /package/dist/plugin-sdk/{gateway-registry-DFsoY6C0.js → gateway-registry-DZDsqicG.js} +0 -0
- /package/dist/plugin-sdk/{inbound-context-BFnIdcqI.js → inbound-context-DrAcXE0y.js} +0 -0
- /package/dist/plugin-sdk/{internal-qo16nNU1.js → internal-CG_nHo-2.js} +0 -0
- /package/dist/plugin-sdk/{memory-search-C3C0bD2H.js → memory-search-VFll-AIb.js} +0 -0
- /package/dist/plugin-sdk/{pairing-token-N_6Jbt1L.js → pairing-token-Cs3BRKc0.js} +0 -0
- /package/dist/plugin-sdk/{path-alias-guards-Dg3gU-MA.js → path-alias-guards-BJZD5JMJ.js} +0 -0
- /package/dist/plugin-sdk/{polls-DQrR-qT3.js → polls-DKQXVfJp.js} +0 -0
- /package/dist/plugin-sdk/{proxy-7xs_rsnV.js → proxy-DWpYcsvR.js} +0 -0
- /package/dist/plugin-sdk/{qmd-scope-D1sSG_Rx.js → qmd-scope-CdX34VCV.js} +0 -0
- /package/dist/plugin-sdk/{redact-identifier-Q3tkvxhm.js → redact-identifier-Lt7t3l7S.js} +0 -0
- /package/dist/plugin-sdk/{redact-sensitive-url-dPvnFFsK.js → redact-sensitive-url-g-ukZjwA.js} +0 -0
- /package/dist/plugin-sdk/{render-Bwu_WxwA.js → render-e7fENCYH.js} +0 -0
- /package/dist/plugin-sdk/{reply-prefix-Bqzm6DC1.js → reply-prefix-ClpxvL_w.js} +0 -0
- /package/dist/plugin-sdk/{reply-reference-BkbK_DWT.js → reply-reference-Bqk-7HXE.js} +0 -0
- /package/dist/plugin-sdk/{secure-random-Bl-AVLVb.js → secure-random-BIkG-k4s.js} +0 -0
- /package/dist/plugin-sdk/{shared-clhhbWN3.js → shared-CBgp_GBw.js} +0 -0
- /package/dist/plugin-sdk/{target-errors-C_SVKoEv.js → target-errors-Ckufe179.js} +0 -0
- /package/dist/plugin-sdk/{targets-BDvvnlph.js → targets-CoMJ1ry1.js} +0 -0
- /package/dist/plugin-sdk/{tokens-BvtlOzVP.js → tokens-BbnqfVuu.js} +0 -0
- /package/dist/plugin-sdk/{tool-loop-detection-CWphm1k_.js → tool-loop-detection-Bp8bPJLs.js} +0 -0
- /package/dist/plugin-sdk/{ui-e020ouhJ.js → ui-Be8cLHIS.js} +0 -0
- /package/dist/plugin-sdk/{with-timeout-BYrRAYFV.js → with-timeout-ckWB8rTo.js} +0 -0
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import { log } from "./logger.js";
|
|
2
|
+
import { streamSimple } from "@mariozechner/pi-ai/compat";
|
|
3
|
+
|
|
4
|
+
//#region src/agents/pi-embedded-runner/openai-stream-wrappers.ts
|
|
5
|
+
const VALID_SERVICE_TIERS = new Set([
|
|
6
|
+
"default",
|
|
7
|
+
"auto",
|
|
8
|
+
"priority",
|
|
9
|
+
"standard_only"
|
|
10
|
+
]);
|
|
11
|
+
const VALID_TEXT_VERBOSITY = new Set([
|
|
12
|
+
"low",
|
|
13
|
+
"medium",
|
|
14
|
+
"high"
|
|
15
|
+
]);
|
|
16
|
+
function withPayloadPatch(baseStreamFn, patch) {
|
|
17
|
+
const underlying = baseStreamFn ?? streamSimple;
|
|
18
|
+
return (model, context, options) => underlying(model, context, {
|
|
19
|
+
...options,
|
|
20
|
+
onPayload: (payload) => {
|
|
21
|
+
if (payload && typeof payload === "object") {
|
|
22
|
+
patch(payload, model);
|
|
23
|
+
}
|
|
24
|
+
return options?.onPayload?.(payload);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
function readParam(extraParams, keys) {
|
|
29
|
+
if (!extraParams) {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
for (const key of keys) {
|
|
33
|
+
if (Object.hasOwn(extraParams, key)) {
|
|
34
|
+
return extraParams[key];
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
function isDirectOpenAI(model) {
|
|
40
|
+
if (typeof model.baseUrl !== "string") {
|
|
41
|
+
return model.baseUrl === undefined && model.provider === "openai";
|
|
42
|
+
}
|
|
43
|
+
if (!model.baseUrl.trim()) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
try {
|
|
47
|
+
return new URL(model.baseUrl).hostname === "api.openai.com";
|
|
48
|
+
} catch {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function isDirectAzureOpenAI(model) {
|
|
53
|
+
if (typeof model.baseUrl !== "string" || !model.baseUrl.trim()) {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
try {
|
|
57
|
+
return new URL(model.baseUrl).hostname.endsWith(".openai.azure.com");
|
|
58
|
+
} catch {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
function isOpenAIResponsesApi(model) {
|
|
63
|
+
return model.api === "openai-responses" || model.api === "azure-openai-responses";
|
|
64
|
+
}
|
|
65
|
+
function isCodexResponsesApi(model) {
|
|
66
|
+
return model.api === "openai-codex-responses";
|
|
67
|
+
}
|
|
68
|
+
function supportsStore(model) {
|
|
69
|
+
const compat = model.compat;
|
|
70
|
+
return !(compat && typeof compat === "object" && compat.supportsStore === false);
|
|
71
|
+
}
|
|
72
|
+
function directResponsesRoute(model) {
|
|
73
|
+
return model.api === "openai-responses" && (isDirectOpenAI(model) || isDirectAzureOpenAI(model)) || model.api === "azure-openai-responses" && isDirectAzureOpenAI(model);
|
|
74
|
+
}
|
|
75
|
+
function serviceTierRoute(model) {
|
|
76
|
+
return isCodexResponsesApi(model) || model.api === "openai-responses" && model.provider === "openai" && isDirectOpenAI(model);
|
|
77
|
+
}
|
|
78
|
+
function resolveOpenAIFastMode(extraParams) {
|
|
79
|
+
return typeof extraParams?.fastMode === "boolean" ? extraParams.fastMode : undefined;
|
|
80
|
+
}
|
|
81
|
+
function formatExtraParamValue(value) {
|
|
82
|
+
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean" || typeof value === "bigint") {
|
|
83
|
+
return String(value);
|
|
84
|
+
}
|
|
85
|
+
try {
|
|
86
|
+
return JSON.stringify(value) ?? typeof value;
|
|
87
|
+
} catch {
|
|
88
|
+
return Object.prototype.toString.call(value);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function resolveOpenAIServiceTier(extraParams) {
|
|
92
|
+
const value = readParam(extraParams, ["serviceTier", "service_tier"]);
|
|
93
|
+
if (value === undefined || value === null) {
|
|
94
|
+
return undefined;
|
|
95
|
+
}
|
|
96
|
+
if (typeof value === "string" && VALID_SERVICE_TIERS.has(value)) {
|
|
97
|
+
return value;
|
|
98
|
+
}
|
|
99
|
+
log.warn(`ignoring invalid OpenAI service tier param: ${formatExtraParamValue(value)}`);
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
102
|
+
function resolveOpenAITextVerbosity(extraParams) {
|
|
103
|
+
const value = readParam(extraParams, ["textVerbosity", "text_verbosity"]);
|
|
104
|
+
if (value === undefined || value === null) {
|
|
105
|
+
return undefined;
|
|
106
|
+
}
|
|
107
|
+
if (typeof value === "string" && VALID_TEXT_VERBOSITY.has(value)) {
|
|
108
|
+
return value;
|
|
109
|
+
}
|
|
110
|
+
log.warn(`ignoring invalid OpenAI text verbosity param: ${formatExtraParamValue(value)}`);
|
|
111
|
+
return undefined;
|
|
112
|
+
}
|
|
113
|
+
function createOpenAIDefaultTransportWrapper(baseStreamFn) {
|
|
114
|
+
const underlying = baseStreamFn ?? streamSimple;
|
|
115
|
+
return (model, context, options) => underlying(model, context, {
|
|
116
|
+
...options,
|
|
117
|
+
transport: options?.transport ?? "auto",
|
|
118
|
+
openaiWsWarmup: options?.openaiWsWarmup ?? true
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
function createOpenAIAttributionHeadersWrapper(baseStreamFn) {
|
|
122
|
+
return baseStreamFn ?? streamSimple;
|
|
123
|
+
}
|
|
124
|
+
function createOpenAIServiceTierWrapper(baseStreamFn, serviceTier) {
|
|
125
|
+
return withPayloadPatch(baseStreamFn, (payload, model) => {
|
|
126
|
+
if (!serviceTierRoute(model)) {
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
if (!("service_tier" in payload)) {
|
|
130
|
+
payload.service_tier = serviceTier;
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
function createOpenAIFastModeWrapper(baseStreamFn) {
|
|
135
|
+
return withPayloadPatch(baseStreamFn, (payload, model) => {
|
|
136
|
+
if (!serviceTierRoute(model)) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
if (!("service_tier" in payload)) {
|
|
140
|
+
payload.service_tier = "priority";
|
|
141
|
+
}
|
|
142
|
+
const text = payload.text;
|
|
143
|
+
if (!text || typeof text !== "object" || !("verbosity" in text)) {
|
|
144
|
+
payload.text = {
|
|
145
|
+
...text && typeof text === "object" ? text : {},
|
|
146
|
+
verbosity: "low"
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
function createOpenAITextVerbosityWrapper(baseStreamFn, textVerbosity) {
|
|
152
|
+
return withPayloadPatch(baseStreamFn, (payload, model) => {
|
|
153
|
+
if (!directResponsesRoute(model) && !isCodexResponsesApi(model)) {
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
const text = payload.text;
|
|
157
|
+
if (!isCodexResponsesApi(model) && text && typeof text === "object" && "verbosity" in text) {
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
payload.text = {
|
|
161
|
+
...text && typeof text === "object" ? text : {},
|
|
162
|
+
verbosity: textVerbosity
|
|
163
|
+
};
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
function createOpenAIReasoningCompatibilityWrapper(baseStreamFn) {
|
|
167
|
+
return withPayloadPatch(baseStreamFn, (payload, model) => {
|
|
168
|
+
if (isOpenAIResponsesApi(model) && !directResponsesRoute(model)) {
|
|
169
|
+
delete payload.reasoning;
|
|
170
|
+
delete payload.reasoningEffort;
|
|
171
|
+
delete payload.reasoning_effort;
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
function createCodexNativeWebSearchWrapper(baseStreamFn, params) {
|
|
176
|
+
return withPayloadPatch(baseStreamFn, (payload, model) => {
|
|
177
|
+
const config = params.config;
|
|
178
|
+
if (!isCodexResponsesApi(model) || config?.tools?.web?.search?.enabled !== true || config.tools.web.search.openaiCodex?.enabled !== true) {
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
const existing = Array.isArray(payload.tools) ? payload.tools : [];
|
|
182
|
+
if (existing.some((tool) => tool && typeof tool === "object" && tool.type === "web_search")) {
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
payload.tools = [...existing, {
|
|
186
|
+
type: "web_search",
|
|
187
|
+
external_web_access: true,
|
|
188
|
+
filters: { allowed_domains: ["example.com"] }
|
|
189
|
+
}];
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
function createOpenAIResponsesContextManagementWrapper(baseStreamFn, extraParams) {
|
|
193
|
+
return withPayloadPatch(baseStreamFn, (payload, model) => {
|
|
194
|
+
if (!supportsStore(model)) {
|
|
195
|
+
delete payload.store;
|
|
196
|
+
} else if (directResponsesRoute(model) && model.api === "openai-responses") {
|
|
197
|
+
payload.store = true;
|
|
198
|
+
}
|
|
199
|
+
if (isCodexResponsesApi(model)) {
|
|
200
|
+
payload.store = false;
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
if (isOpenAIResponsesApi(model) && !directResponsesRoute(model)) {
|
|
204
|
+
delete payload.prompt_cache_key;
|
|
205
|
+
delete payload.prompt_cache_retention;
|
|
206
|
+
}
|
|
207
|
+
const compactionParam = readParam(extraParams, ["responsesServerCompaction", "responses_server_compaction"]);
|
|
208
|
+
const shouldCompact = compactionParam === true || compactionParam !== false && model.api === "openai-responses" && isDirectOpenAI(model);
|
|
209
|
+
if (shouldCompact && !("context_management" in payload) && supportsStore(model) && isOpenAIResponsesApi(model)) {
|
|
210
|
+
const configuredThreshold = readParam(extraParams, ["responsesCompactThreshold", "responses_compact_threshold"]);
|
|
211
|
+
const threshold = typeof configuredThreshold === "number" ? configuredThreshold : typeof model.contextWindow === "number" ? Math.trunc(model.contextWindow * .7) : 8e4;
|
|
212
|
+
payload.context_management = [{
|
|
213
|
+
type: "compaction",
|
|
214
|
+
compact_threshold: threshold
|
|
215
|
+
}];
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
//#endregion
|
|
221
|
+
export { createOpenAIResponsesContextManagementWrapper };
|
|
@@ -20,6 +20,7 @@ import { resolveTelegramInlineButtonsScope } from "../../../telegram/inline-butt
|
|
|
20
20
|
import { resolveTelegramReactionLevel } from "../../../telegram/reaction-level.js";
|
|
21
21
|
import { MAX_IMAGE_BYTES } from "../../../media/constants.js";
|
|
22
22
|
import { buildModelAliasLines } from "../../model-alias-lines.js";
|
|
23
|
+
import { resolveImageSanitizationLimits } from "../../image-sanitization.js";
|
|
23
24
|
import "../model.js";
|
|
24
25
|
import { buildTtsSystemPromptHint } from "../../../tts/tts.js";
|
|
25
26
|
import { isReasoningTagProvider } from "../../../utils/provider-utils.js";
|
|
@@ -27,7 +28,6 @@ import { makeBootstrapWarn, resolveBootstrapContextForRun } from "../../bootstra
|
|
|
27
28
|
import { listChannelSupportedActions, resolveChannelMessageToolHints } from "../../channel-tools.js";
|
|
28
29
|
import { resolveFasedAgentDocsPath } from "../../docs-path.js";
|
|
29
30
|
import { createPreparedEmbeddedPiSettingsManager } from "../../pi-project-settings.js";
|
|
30
|
-
import { resolveImageSanitizationLimits } from "../../image-sanitization.js";
|
|
31
31
|
import { detectRuntimeShell } from "../../shell-utils.js";
|
|
32
32
|
import { isTimeoutError } from "../../failover-error.js";
|
|
33
33
|
import { resolveSandboxRuntimeStatus } from "../../sandbox/runtime-status.js";
|
|
@@ -293,7 +293,9 @@ async function runEmbeddedAttempt(params) {
|
|
|
293
293
|
sessionAgentId
|
|
294
294
|
});
|
|
295
295
|
const modelHasVision = params.model.input?.includes("image") ?? false;
|
|
296
|
-
|
|
296
|
+
const responsesLite = params.model.api === "openai-codex-responses" && params.model.compat?.responsesLite === true;
|
|
297
|
+
const toolsDisabled = params.disableTools === true || responsesLite;
|
|
298
|
+
let toolsRaw = toolsDisabled ? [] : createFasedAgentCodingTools({
|
|
297
299
|
agentId: sessionAgentId,
|
|
298
300
|
exec: {
|
|
299
301
|
...params.execOverrides,
|
|
@@ -332,7 +334,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
332
334
|
disableMessageTool: params.disableMessageTool,
|
|
333
335
|
disabledToolNames: params.disabledToolNames
|
|
334
336
|
});
|
|
335
|
-
if (!
|
|
337
|
+
if (!toolsDisabled) {
|
|
336
338
|
bundleMcpRuntime = await createBundleMcpToolRuntime({
|
|
337
339
|
workspaceDir: effectiveWorkspace,
|
|
338
340
|
cfg: params.config,
|
|
@@ -621,7 +623,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
621
623
|
modelApi: params.model.api,
|
|
622
624
|
workspaceDir: params.workspaceDir
|
|
623
625
|
});
|
|
624
|
-
applyExtraParamsToAgent(activeSession.agent, params.config, params.provider, params.modelId, params.streamParams, params.thinkLevel, sessionAgentId);
|
|
626
|
+
applyExtraParamsToAgent(activeSession.agent, params.config, params.provider, params.modelId, params.streamParams, params.thinkLevel, sessionAgentId, agentDir, params.model, params.resolvedApiKey);
|
|
625
627
|
if (cacheTrace) {
|
|
626
628
|
cacheTrace.recordStage("session:loaded", {
|
|
627
629
|
messages: activeSession.messages,
|
|
@@ -13,7 +13,7 @@ import { isMarkdownCapableMessageChannel } from "../../utils/message-channel.js"
|
|
|
13
13
|
import { generateSecureToken } from "../../infra/secure-random.js";
|
|
14
14
|
import { getGlobalHookRunner } from "../../plugins/hook-runner-global.js";
|
|
15
15
|
import { enqueueCommandInLane } from "../../process/command-queue.js";
|
|
16
|
-
import {
|
|
16
|
+
import { resolveModelForExecution } from "./model.js";
|
|
17
17
|
import { FailoverError, resolveFailoverStatus } from "../failover-error.js";
|
|
18
18
|
import { derivePromptTokens, normalizeUsage } from "../usage.js";
|
|
19
19
|
import { log } from "./logger.js";
|
|
@@ -205,7 +205,7 @@ async function runEmbeddedPiAgent(params) {
|
|
|
205
205
|
modelId = modelResolveOverride.modelOverride;
|
|
206
206
|
log.info(`[hooks] model overridden to ${modelId}`);
|
|
207
207
|
}
|
|
208
|
-
const { model, error, authStorage, modelRegistry } =
|
|
208
|
+
const { model, error, authStorage, modelRegistry } = await resolveModelForExecution(provider, modelId, agentDir, params.config);
|
|
209
209
|
if (!model) {
|
|
210
210
|
throw new FailoverError(error ?? `Unknown model: ${provider}/${modelId}`, {
|
|
211
211
|
reason: "model_not_found",
|
|
@@ -260,6 +260,7 @@ async function runEmbeddedPiAgent(params) {
|
|
|
260
260
|
let thinkLevel = initialThinkLevel;
|
|
261
261
|
const attemptedThinking = new Set();
|
|
262
262
|
let apiKeyInfo = null;
|
|
263
|
+
let resolvedApiKey;
|
|
263
264
|
let lastProfileId;
|
|
264
265
|
const resolveAuthProfileFailoverReason = (params) => {
|
|
265
266
|
if (params.allInCooldown) {
|
|
@@ -308,6 +309,7 @@ async function runEmbeddedPiAgent(params) {
|
|
|
308
309
|
if (!apiKeyInfo.apiKey) {
|
|
309
310
|
throw new Error(`No API key resolved for provider "${model.provider}" (auth mode: ${apiKeyInfo.mode}).`);
|
|
310
311
|
}
|
|
312
|
+
resolvedApiKey = apiKeyInfo.apiKey;
|
|
311
313
|
if (model.provider === "github-copilot") {
|
|
312
314
|
const { resolveCopilotApiToken } = await import("../../providers/github-copilot-token.js");
|
|
313
315
|
const copilotToken = await resolveCopilotApiToken({ githubToken: apiKeyInfo.apiKey });
|
|
@@ -462,6 +464,7 @@ async function runEmbeddedPiAgent(params) {
|
|
|
462
464
|
provider,
|
|
463
465
|
modelId,
|
|
464
466
|
model,
|
|
467
|
+
resolvedApiKey,
|
|
465
468
|
authStorage,
|
|
466
469
|
modelRegistry,
|
|
467
470
|
agentId: workspaceResolution.agentId,
|
|
@@ -5,7 +5,7 @@ import { buildEmbeddedSandboxInfo } from "./pi-embedded-runner/sandbox-info.js";
|
|
|
5
5
|
import { createSystemPromptOverride } from "./pi-embedded-runner/system-prompt.js";
|
|
6
6
|
import { splitSdkTools } from "./pi-embedded-runner/tool-split.js";
|
|
7
7
|
import { compactEmbeddedPiSession } from "./pi-embedded-runner/compact.js";
|
|
8
|
-
import { applyExtraParamsToAgent
|
|
8
|
+
import { applyExtraParamsToAgent } from "./pi-embedded-runner/extra-params.js";
|
|
9
9
|
import { abortEmbeddedPiRun, isEmbeddedPiRunActive, isEmbeddedPiRunStreaming, queueEmbeddedPiMessage, waitForEmbeddedPiRunEnd } from "./pi-embedded-runner/runs.js";
|
|
10
10
|
import { runEmbeddedPiAgent } from "./pi-embedded-runner/run.js";
|
|
11
11
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { resolveStateDir } from "../config/paths.js";
|
|
2
2
|
import { isTruthyEnvValue } from "../infra/env.js";
|
|
3
|
-
import
|
|
3
|
+
import syncFs from "node:fs";
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
|
|
6
6
|
//#region src/agents/pi-embedded-subscribe.raw-stream.ts
|
|
@@ -14,11 +14,11 @@ function appendRawStream(payload) {
|
|
|
14
14
|
if (!rawStreamReady) {
|
|
15
15
|
rawStreamReady = true;
|
|
16
16
|
try {
|
|
17
|
-
|
|
17
|
+
syncFs.mkdirSync(path.dirname(RAW_STREAM_PATH), { recursive: true });
|
|
18
18
|
} catch {}
|
|
19
19
|
}
|
|
20
20
|
try {
|
|
21
|
-
void
|
|
21
|
+
void syncFs.promises.appendFile(RAW_STREAM_PATH, `${JSON.stringify(payload)}\n`);
|
|
22
22
|
} catch {}
|
|
23
23
|
}
|
|
24
24
|
|
|
@@ -3,7 +3,7 @@ import { getCompactionSafeguardRuntime } from "./compaction-safeguard-runtime.js
|
|
|
3
3
|
import { extractSections } from "../../auto-reply/reply/post-compaction-context.js";
|
|
4
4
|
import { BASE_CHUNK_RATIO, MIN_CHUNK_RATIO, SAFETY_MARGIN, SUMMARIZATION_OVERHEAD_TOKENS, computeAdaptiveChunkRatio, estimateMessagesTokens, isOversizedForSummary, pruneHistoryForContextShare, resolveContextWindowTokens, summarizeInStages } from "../compaction.js";
|
|
5
5
|
import { collectTextContentBlocks } from "../content-blocks.js";
|
|
6
|
-
import
|
|
6
|
+
import syncFs from "node:fs";
|
|
7
7
|
import path from "node:path";
|
|
8
8
|
|
|
9
9
|
//#region src/agents/pi-extensions/compaction-safeguard.ts
|
|
@@ -122,10 +122,10 @@ async function readWorkspaceContextForSummary() {
|
|
|
122
122
|
const workspaceDir = process.cwd();
|
|
123
123
|
const agentsPath = path.join(workspaceDir, "AGENTS.md");
|
|
124
124
|
try {
|
|
125
|
-
if (!
|
|
125
|
+
if (!syncFs.existsSync(agentsPath)) {
|
|
126
126
|
return "";
|
|
127
127
|
}
|
|
128
|
-
const content = await
|
|
128
|
+
const content = await syncFs.promises.readFile(agentsPath, "utf-8");
|
|
129
129
|
const sections = extractSections(content, ["Session Startup", "Red Lines"]);
|
|
130
130
|
if (sections.length === 0) {
|
|
131
131
|
return "";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ensureAuthProfileStore } from "./auth-profiles/store.js";
|
|
2
2
|
import "./auth-profiles.js";
|
|
3
3
|
import { resolvePiCredentialMapFromStore } from "./pi-auth-credentials.js";
|
|
4
|
-
import
|
|
4
|
+
import syncFs from "node:fs";
|
|
5
5
|
import path from "node:path";
|
|
6
6
|
import * as PiCodingAgent from "@mariozechner/pi-coding-agent";
|
|
7
7
|
|
|
@@ -25,12 +25,12 @@ function scrubLegacyStaticAuthJsonEntries(pathname) {
|
|
|
25
25
|
if (process.env.FASED_AUTH_STORE_READONLY === "1") {
|
|
26
26
|
return;
|
|
27
27
|
}
|
|
28
|
-
if (!
|
|
28
|
+
if (!syncFs.existsSync(pathname)) {
|
|
29
29
|
return;
|
|
30
30
|
}
|
|
31
31
|
let parsed;
|
|
32
32
|
try {
|
|
33
|
-
parsed = JSON.parse(
|
|
33
|
+
parsed = JSON.parse(syncFs.readFileSync(pathname, "utf8"));
|
|
34
34
|
} catch {
|
|
35
35
|
return;
|
|
36
36
|
}
|
|
@@ -52,11 +52,11 @@ function scrubLegacyStaticAuthJsonEntries(pathname) {
|
|
|
52
52
|
return;
|
|
53
53
|
}
|
|
54
54
|
if (Object.keys(parsed).length === 0) {
|
|
55
|
-
|
|
55
|
+
syncFs.rmSync(pathname, { force: true });
|
|
56
56
|
return;
|
|
57
57
|
}
|
|
58
|
-
|
|
59
|
-
|
|
58
|
+
syncFs.writeFileSync(pathname, `${JSON.stringify(parsed, null, 2)}\n`, "utf8");
|
|
59
|
+
syncFs.chmodSync(pathname, 384);
|
|
60
60
|
}
|
|
61
61
|
function createAuthStorage(AuthStorageLike, path, creds) {
|
|
62
62
|
const withInMemory = AuthStorageLike;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { applyMergePatch } from "../config/merge-patch.js";
|
|
2
2
|
import { applyPiCompactionSettingsFromConfig } from "./pi-settings.js";
|
|
3
|
-
import
|
|
3
|
+
import syncFs from "node:fs";
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
import { SettingsManager } from "@mariozechner/pi-coding-agent";
|
|
6
6
|
|
|
@@ -28,7 +28,7 @@ function buildEmbeddedPiSettingsSnapshot(params) {
|
|
|
28
28
|
}
|
|
29
29
|
function readJsonFile(filePath) {
|
|
30
30
|
try {
|
|
31
|
-
const raw =
|
|
31
|
+
const raw = syncFs.readFileSync(filePath, "utf8");
|
|
32
32
|
const parsed = JSON.parse(raw);
|
|
33
33
|
return parsed && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : {};
|
|
34
34
|
} catch {
|
|
@@ -49,7 +49,7 @@ function loadEnabledBundlePiSettingsSnapshot(params) {
|
|
|
49
49
|
const servers = mcp.mcpServers && typeof mcp.mcpServers === "object" && !Array.isArray(mcp.mcpServers) ? mcp.mcpServers : undefined;
|
|
50
50
|
if (servers) {
|
|
51
51
|
const resolvedServers = {};
|
|
52
|
-
const resolvedRoot =
|
|
52
|
+
const resolvedRoot = syncFs.realpathSync.native?.(pluginRoot) ?? syncFs.realpathSync(pluginRoot);
|
|
53
53
|
for (const [name, server] of Object.entries(servers)) {
|
|
54
54
|
if (!server || typeof server !== "object" || Array.isArray(server)) {
|
|
55
55
|
resolvedServers[name] = server;
|
package/dist/agents/pi-tools.js
CHANGED
|
@@ -5,10 +5,10 @@ import { resolveAgentConfig } from "./agent-scope.js";
|
|
|
5
5
|
import { resolveGatewayMessageChannel } from "../utils/message-channel.js";
|
|
6
6
|
import { resolveToolProfilePolicy } from "./tool-policy-shared.js";
|
|
7
7
|
import { applyOwnerOnlyToolPolicy, collectExplicitAllowlist, mergeAlsoAllowPolicy } from "./tool-policy.js";
|
|
8
|
-
import { listChannelAgentTools } from "./channel-tools.js";
|
|
9
|
-
import { resolveMergedSafeBinProfileFixtures } from "../infra/exec-safe-bin-runtime-policy.js";
|
|
10
8
|
import { resolveImageSanitizationLimits } from "./image-sanitization.js";
|
|
11
9
|
import { getSubagentDepthFromSessionStore } from "./subagent-depth.js";
|
|
10
|
+
import { listChannelAgentTools } from "./channel-tools.js";
|
|
11
|
+
import { resolveMergedSafeBinProfileFixtures } from "../infra/exec-safe-bin-runtime-policy.js";
|
|
12
12
|
import { getPluginToolMeta } from "../plugins/tools.js";
|
|
13
13
|
import { createApplyPatchTool } from "./apply-patch.js";
|
|
14
14
|
import { createExecTool } from "./bash-tools.exec.js";
|
|
@@ -3,7 +3,7 @@ import { PATH_ALIAS_POLICIES } from "../../infra/path-alias-guards.js";
|
|
|
3
3
|
import { execDockerRaw } from "./docker.js";
|
|
4
4
|
import { isPathInsideContainerRoot, normalizeContainerPath } from "./path-utils.js";
|
|
5
5
|
import { buildSandboxFsMounts, resolveSandboxFsPathWithMounts } from "./fs-paths.js";
|
|
6
|
-
import
|
|
6
|
+
import syncFs from "node:fs";
|
|
7
7
|
|
|
8
8
|
//#region src/agents/sandbox/fs-bridge.ts
|
|
9
9
|
function createSandboxFsBridge(params) {
|
|
@@ -160,7 +160,7 @@ var SandboxFsBridgeImpl = class {
|
|
|
160
160
|
throw guarded.error instanceof Error ? guarded.error : new Error(`Sandbox boundary checks failed; cannot ${options.action}: ${target.containerPath}`);
|
|
161
161
|
}
|
|
162
162
|
} else {
|
|
163
|
-
|
|
163
|
+
syncFs.closeSync(guarded.fd);
|
|
164
164
|
}
|
|
165
165
|
const canonicalContainerPath = await this.resolveCanonicalContainerPath({
|
|
166
166
|
containerPath: target.containerPath,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import syncFs from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
|
-
import fs
|
|
3
|
+
import fs from "node:fs/promises";
|
|
4
4
|
|
|
5
5
|
//#region src/agents/session-dirs.ts
|
|
6
6
|
function mapAgentSessionDirs(agentsDir, entries) {
|
|
@@ -9,7 +9,7 @@ function mapAgentSessionDirs(agentsDir, entries) {
|
|
|
9
9
|
async function resolveAgentSessionDirsFromAgentsDir(agentsDir) {
|
|
10
10
|
let entries = [];
|
|
11
11
|
try {
|
|
12
|
-
entries = await fs
|
|
12
|
+
entries = await fs.readdir(agentsDir, { withFileTypes: true });
|
|
13
13
|
} catch (err) {
|
|
14
14
|
const code = err.code;
|
|
15
15
|
if (code === "ENOENT") {
|
|
@@ -22,7 +22,7 @@ async function resolveAgentSessionDirsFromAgentsDir(agentsDir) {
|
|
|
22
22
|
function resolveAgentSessionDirsFromAgentsDirSync(agentsDir) {
|
|
23
23
|
let entries = [];
|
|
24
24
|
try {
|
|
25
|
-
entries =
|
|
25
|
+
entries = syncFs.readdirSync(agentsDir, { withFileTypes: true });
|
|
26
26
|
} catch (err) {
|
|
27
27
|
const code = err.code;
|
|
28
28
|
if (code === "ENOENT") {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { isPidAlive } from "../shared/pid-alive.js";
|
|
2
2
|
import { resolveProcessScopedMap } from "../shared/process-scoped-map.js";
|
|
3
|
-
import
|
|
3
|
+
import syncFs from "node:fs";
|
|
4
4
|
import path from "node:path";
|
|
5
|
-
import fs
|
|
5
|
+
import fs from "node:fs/promises";
|
|
6
6
|
|
|
7
7
|
//#region src/agents/session-write-lock.ts
|
|
8
8
|
const CLEANUP_SIGNALS = [
|
|
@@ -84,7 +84,7 @@ async function releaseHeldLock(normalizedSessionFile, held, opts = {}) {
|
|
|
84
84
|
await held.handle.close();
|
|
85
85
|
} catch {}
|
|
86
86
|
try {
|
|
87
|
-
await fs
|
|
87
|
+
await fs.rm(held.lockPath, { force: true });
|
|
88
88
|
} catch {}
|
|
89
89
|
})();
|
|
90
90
|
try {
|
|
@@ -106,7 +106,7 @@ function releaseAllLocksSync() {
|
|
|
106
106
|
}
|
|
107
107
|
} catch {}
|
|
108
108
|
try {
|
|
109
|
-
|
|
109
|
+
syncFs.rmSync(held.lockPath, { force: true });
|
|
110
110
|
} catch {}
|
|
111
111
|
HELD_LOCKS.delete(sessionFile);
|
|
112
112
|
}
|
|
@@ -175,7 +175,7 @@ function registerCleanupHandlers() {
|
|
|
175
175
|
}
|
|
176
176
|
async function readLockPayload(lockPath) {
|
|
177
177
|
try {
|
|
178
|
-
const raw = await fs
|
|
178
|
+
const raw = await fs.readFile(lockPath, "utf8");
|
|
179
179
|
const parsed = JSON.parse(raw);
|
|
180
180
|
const payload = {};
|
|
181
181
|
if (typeof parsed.pid === "number") {
|
|
@@ -226,7 +226,7 @@ async function shouldReclaimContendedLockFile(lockPath, details, staleMs, nowMs)
|
|
|
226
226
|
return true;
|
|
227
227
|
}
|
|
228
228
|
try {
|
|
229
|
-
const stat = await fs
|
|
229
|
+
const stat = await fs.stat(lockPath);
|
|
230
230
|
const ageMs = Math.max(0, nowMs - stat.mtimeMs);
|
|
231
231
|
return ageMs > staleMs;
|
|
232
232
|
} catch (error) {
|
|
@@ -241,7 +241,7 @@ async function cleanStaleLockFiles(params) {
|
|
|
241
241
|
const nowMs = params.nowMs ?? Date.now();
|
|
242
242
|
let entries = [];
|
|
243
243
|
try {
|
|
244
|
-
entries = await fs
|
|
244
|
+
entries = await fs.readdir(sessionsDir, { withFileTypes: true });
|
|
245
245
|
} catch (err) {
|
|
246
246
|
const code = err.code;
|
|
247
247
|
if (code === "ENOENT") {
|
|
@@ -265,7 +265,7 @@ async function cleanStaleLockFiles(params) {
|
|
|
265
265
|
removed: false
|
|
266
266
|
};
|
|
267
267
|
if (lockInfo.stale && removeStale) {
|
|
268
|
-
await fs
|
|
268
|
+
await fs.rm(lockPath, { force: true });
|
|
269
269
|
lockInfo.removed = true;
|
|
270
270
|
cleaned.push(lockInfo);
|
|
271
271
|
params.log?.warn?.(`removed stale session lock: ${lockPath} (${lockInfo.staleReasons.join(", ") || "unknown"})`);
|
|
@@ -284,10 +284,10 @@ async function acquireSessionWriteLock(params) {
|
|
|
284
284
|
const maxHoldMs = resolvePositiveMs(params.maxHoldMs, DEFAULT_MAX_HOLD_MS);
|
|
285
285
|
const sessionFile = path.resolve(params.sessionFile);
|
|
286
286
|
const sessionDir = path.dirname(sessionFile);
|
|
287
|
-
await fs
|
|
287
|
+
await fs.mkdir(sessionDir, { recursive: true });
|
|
288
288
|
let normalizedDir = sessionDir;
|
|
289
289
|
try {
|
|
290
|
-
normalizedDir = await fs
|
|
290
|
+
normalizedDir = await fs.realpath(sessionDir);
|
|
291
291
|
} catch {}
|
|
292
292
|
const normalizedSessionFile = path.join(normalizedDir, path.basename(sessionFile));
|
|
293
293
|
const lockPath = `${normalizedSessionFile}.lock`;
|
|
@@ -305,7 +305,7 @@ async function acquireSessionWriteLock(params) {
|
|
|
305
305
|
attempt += 1;
|
|
306
306
|
let handle = null;
|
|
307
307
|
try {
|
|
308
|
-
handle = await fs
|
|
308
|
+
handle = await fs.open(lockPath, "wx");
|
|
309
309
|
const createdAt = new Date().toISOString();
|
|
310
310
|
await handle.writeFile(JSON.stringify({
|
|
311
311
|
pid: process.pid,
|
|
@@ -328,7 +328,7 @@ async function acquireSessionWriteLock(params) {
|
|
|
328
328
|
await handle.close();
|
|
329
329
|
} catch {}
|
|
330
330
|
try {
|
|
331
|
-
await fs
|
|
331
|
+
await fs.rm(lockPath, { force: true });
|
|
332
332
|
} catch {}
|
|
333
333
|
}
|
|
334
334
|
const code = err.code;
|
|
@@ -339,7 +339,7 @@ async function acquireSessionWriteLock(params) {
|
|
|
339
339
|
const nowMs = Date.now();
|
|
340
340
|
const inspected = inspectLockPayload(payload, staleMs, nowMs);
|
|
341
341
|
if (await shouldReclaimContendedLockFile(lockPath, inspected, staleMs, nowMs)) {
|
|
342
|
-
await fs
|
|
342
|
+
await fs.rm(lockPath, { force: true });
|
|
343
343
|
continue;
|
|
344
344
|
}
|
|
345
345
|
const delay = Math.min(1e3, 50 * attempt);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import syncFs from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { spawn } from "node:child_process";
|
|
4
4
|
|
|
@@ -6,13 +6,13 @@ import { spawn } from "node:child_process";
|
|
|
6
6
|
function resolvePowerShellPath() {
|
|
7
7
|
const programFiles = process.env.ProgramFiles || process.env.PROGRAMFILES || "C:\\Program Files";
|
|
8
8
|
const pwsh7 = path.join(programFiles, "PowerShell", "7", "pwsh.exe");
|
|
9
|
-
if (
|
|
9
|
+
if (syncFs.existsSync(pwsh7)) {
|
|
10
10
|
return pwsh7;
|
|
11
11
|
}
|
|
12
12
|
const programW6432 = process.env.ProgramW6432;
|
|
13
13
|
if (programW6432 && programW6432 !== programFiles) {
|
|
14
14
|
const pwsh7Alt = path.join(programW6432, "PowerShell", "7", "pwsh.exe");
|
|
15
|
-
if (
|
|
15
|
+
if (syncFs.existsSync(pwsh7Alt)) {
|
|
16
16
|
return pwsh7Alt;
|
|
17
17
|
}
|
|
18
18
|
}
|
|
@@ -23,7 +23,7 @@ function resolvePowerShellPath() {
|
|
|
23
23
|
const systemRoot = process.env.SystemRoot || process.env.WINDIR;
|
|
24
24
|
if (systemRoot) {
|
|
25
25
|
const candidate = path.join(systemRoot, "System32", "WindowsPowerShell", "v1.0", "powershell.exe");
|
|
26
|
-
if (
|
|
26
|
+
if (syncFs.existsSync(candidate)) {
|
|
27
27
|
return candidate;
|
|
28
28
|
}
|
|
29
29
|
}
|
|
@@ -73,7 +73,7 @@ function resolveShellFromPath(name) {
|
|
|
73
73
|
for (const entry of entries) {
|
|
74
74
|
const candidate = path.join(entry, name);
|
|
75
75
|
try {
|
|
76
|
-
|
|
76
|
+
syncFs.accessSync(candidate, syncFs.constants.X_OK);
|
|
77
77
|
return candidate;
|
|
78
78
|
} catch {}
|
|
79
79
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { resolveFasedAgentPackageRootSync } from "../../infra/fased-root.js";
|
|
2
2
|
import { fileURLToPath } from "node:url";
|
|
3
|
-
import
|
|
3
|
+
import syncFs from "node:fs";
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
|
|
6
6
|
//#region src/agents/skills/bundled-dir.ts
|
|
7
7
|
function looksLikeSkillsDir(dir) {
|
|
8
8
|
try {
|
|
9
|
-
const entries =
|
|
9
|
+
const entries = syncFs.readdirSync(dir, { withFileTypes: true });
|
|
10
10
|
for (const entry of entries) {
|
|
11
11
|
if (entry.name.startsWith(".")) {
|
|
12
12
|
continue;
|
|
@@ -16,7 +16,7 @@ function looksLikeSkillsDir(dir) {
|
|
|
16
16
|
return true;
|
|
17
17
|
}
|
|
18
18
|
if (entry.isDirectory()) {
|
|
19
|
-
if (
|
|
19
|
+
if (syncFs.existsSync(path.join(fullPath, "SKILL.md"))) {
|
|
20
20
|
return true;
|
|
21
21
|
}
|
|
22
22
|
}
|
|
@@ -35,7 +35,7 @@ function resolveBundledSkillsDir(opts = {}) {
|
|
|
35
35
|
const execPath = opts.execPath ?? process.execPath;
|
|
36
36
|
const execDir = path.dirname(execPath);
|
|
37
37
|
const sibling = path.join(execDir, "skills");
|
|
38
|
-
if (
|
|
38
|
+
if (syncFs.existsSync(sibling)) {
|
|
39
39
|
return sibling;
|
|
40
40
|
}
|
|
41
41
|
} catch {}
|