@explyt/ai-agent 0.1.0-rc.1 → 0.1.3
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/README.md +14 -15
- package/THIRD-PARTY-NOTICES.md +153 -5
- package/agent-docs/README.md +43 -0
- package/agent-docs/mcp.md +111 -0
- package/agent-docs/rules.md +92 -0
- package/agent-docs/settings.md +54 -0
- package/agent-docs/skills.md +90 -0
- package/dist/app-bridge.bundle.js +67 -0
- package/dist/cli/engine.js +680 -135
- package/dist/cli/index.js +152 -194
- package/dist/extensions/bash.js +1 -0
- package/dist/extensions/custom-provider.js +1 -0
- package/dist/extensions/hello.js +1 -1
- package/dist/extensions/identity.js +1 -0
- package/dist/extensions/mcp.js +1 -0
- package/dist/extensions/misc-hacks.js +1 -0
- package/dist/extensions/policy.js +1 -1
- package/dist/extensions/rules.js +1 -0
- package/dist/extensions/skills.js +1 -0
- package/dist/mcp-adapter.js +602 -0
- package/dist/mcp-keyring-helper.cjs +89 -0
- package/dist/mcp-script-worker.mjs +130 -0
- package/node_modules/acorn/CHANGELOG.md +998 -0
- package/node_modules/acorn/LICENSE +21 -0
- package/node_modules/acorn/README.md +309 -0
- package/node_modules/acorn/bin/acorn +4 -0
- package/node_modules/acorn/dist/acorn.d.mts +897 -0
- package/node_modules/acorn/dist/acorn.d.ts +897 -0
- package/node_modules/acorn/dist/acorn.js +6342 -0
- package/node_modules/acorn/dist/acorn.mjs +6313 -0
- package/node_modules/acorn/dist/bin.js +90 -0
- package/node_modules/acorn/package.json +50 -0
- package/node_modules/default-browser/package.json +1 -1
- package/node_modules/default-browser/windows.js +3 -1
- package/node_modules/fast-uri/index.js +221 -49
- package/node_modules/fast-uri/lib/schemes.js +9 -4
- package/node_modules/fast-uri/lib/utils.js +396 -92
- package/node_modules/fast-uri/package.json +1 -1
- package/node_modules/fast-uri/test/component-safe-serialization.test.js +163 -0
- package/node_modules/fast-uri/test/equal.test.js +31 -3
- package/node_modules/fast-uri/test/fixtures/uri-js-parse.json +2 -0
- package/node_modules/fast-uri/test/ipv6-canonical.test.js +34 -0
- package/node_modules/fast-uri/test/ipv6-validation.test.js +124 -0
- package/node_modules/fast-uri/test/malformed-percent.test.js +77 -0
- package/node_modules/fast-uri/test/malformed-urn.test.js +61 -0
- package/node_modules/fast-uri/test/parse.test.js +7 -3
- package/node_modules/fast-uri/test/query-fragment-normalization.test.js +33 -0
- package/node_modules/fast-uri/test/reserved-path-normalization.test.js +109 -0
- package/node_modules/fast-uri/test/scheme-validation.test.js +124 -0
- package/node_modules/fast-uri/test/security-normalization.test.js +139 -0
- package/node_modules/fast-uri/test/security.test.js +75 -3
- package/node_modules/fast-uri/test/urn-full-input.test.js +29 -0
- package/node_modules/fast-uri/test/websocket-query-preservation.test.js +24 -0
- package/node_modules/jose/dist/types/index.d.ts +1 -2
- package/node_modules/jose/dist/types/jwe/compact/decrypt.d.ts +12 -25
- package/node_modules/jose/dist/types/jwe/compact/encrypt.d.ts +18 -31
- package/node_modules/jose/dist/types/jwe/flattened/decrypt.d.ts +12 -25
- package/node_modules/jose/dist/types/jwe/flattened/encrypt.d.ts +24 -49
- package/node_modules/jose/dist/types/jwe/general/decrypt.d.ts +15 -30
- package/node_modules/jose/dist/types/jwe/general/encrypt.d.ts +29 -51
- package/node_modules/jose/dist/types/jwk/embedded.d.ts +5 -8
- package/node_modules/jose/dist/types/jwk/thumbprint.d.ts +7 -9
- package/node_modules/jose/dist/types/jwks/local.d.ts +10 -13
- package/node_modules/jose/dist/types/jwks/remote.d.ts +30 -42
- package/node_modules/jose/dist/types/jws/compact/sign.d.ts +8 -13
- package/node_modules/jose/dist/types/jws/compact/verify.d.ts +14 -26
- package/node_modules/jose/dist/types/jws/flattened/sign.d.ts +10 -19
- package/node_modules/jose/dist/types/jws/flattened/verify.d.ts +14 -26
- package/node_modules/jose/dist/types/jws/general/sign.d.ts +19 -33
- package/node_modules/jose/dist/types/jws/general/verify.d.ts +17 -32
- package/node_modules/jose/dist/types/jwt/decrypt.d.ts +20 -27
- package/node_modules/jose/dist/types/jwt/encrypt.d.ts +32 -42
- package/node_modules/jose/dist/types/jwt/sign.d.ts +10 -21
- package/node_modules/jose/dist/types/jwt/unsecured.d.ts +13 -28
- package/node_modules/jose/dist/types/jwt/verify.d.ts +19 -22
- package/node_modules/jose/dist/types/key/export.d.ts +10 -10
- package/node_modules/jose/dist/types/key/generate_key_pair.d.ts +15 -22
- package/node_modules/jose/dist/types/key/generate_secret.d.ts +12 -19
- package/node_modules/jose/dist/types/key/import.d.ts +25 -31
- package/node_modules/jose/dist/types/types.d.ts +186 -319
- package/node_modules/jose/dist/types/util/base64url.d.ts +7 -7
- package/node_modules/jose/dist/types/util/decode_jwt.d.ts +5 -7
- package/node_modules/jose/dist/types/util/decode_protected_header.d.ts +6 -5
- package/node_modules/jose/dist/types/util/errors.d.ts +50 -88
- package/node_modules/jose/dist/webapi/index.js +70 -32
- package/node_modules/jose/dist/webapi/jwe/compact/decrypt.js +6 -8
- package/node_modules/jose/dist/webapi/jwe/compact/encrypt.js +25 -26
- package/node_modules/jose/dist/webapi/jwe/flattened/decrypt.js +14 -10
- package/node_modules/jose/dist/webapi/jwe/flattened/encrypt.js +34 -71
- package/node_modules/jose/dist/webapi/jwe/general/decrypt.js +38 -49
- package/node_modules/jose/dist/webapi/jwe/general/encrypt.js +100 -161
- package/node_modules/jose/dist/webapi/jwk/embedded.js +29 -18
- package/node_modules/jose/dist/webapi/jwk/thumbprint.js +51 -64
- package/node_modules/jose/dist/webapi/jwks/local.js +55 -74
- package/node_modules/jose/dist/webapi/jwks/remote.js +91 -160
- package/node_modules/jose/dist/webapi/jws/compact/sign.js +19 -20
- package/node_modules/jose/dist/webapi/jws/compact/verify.js +7 -8
- package/node_modules/jose/dist/webapi/jws/flattened/sign.js +22 -30
- package/node_modules/jose/dist/webapi/jws/flattened/verify.js +11 -23
- package/node_modules/jose/dist/webapi/jws/general/sign.js +55 -71
- package/node_modules/jose/dist/webapi/jws/general/verify.js +45 -41
- package/node_modules/jose/dist/webapi/jwt/decrypt.js +12 -22
- package/node_modules/jose/dist/webapi/jwt/encrypt.js +44 -100
- package/node_modules/jose/dist/webapi/jwt/sign.js +18 -50
- package/node_modules/jose/dist/webapi/jwt/unsecured.js +33 -63
- package/node_modules/jose/dist/webapi/jwt/verify.js +12 -14
- package/node_modules/jose/dist/webapi/key/export.js +32 -41
- package/node_modules/jose/dist/webapi/key/generate_key_pair.js +32 -45
- package/node_modules/jose/dist/webapi/key/generate_secret.js +35 -39
- package/node_modules/jose/dist/webapi/key/import.js +48 -52
- package/node_modules/jose/dist/webapi/lib/asn1.js +128 -164
- package/node_modules/jose/dist/webapi/lib/buffer_utils.js +72 -41
- package/node_modules/jose/dist/webapi/lib/content_encryption.js +75 -127
- package/node_modules/jose/dist/webapi/lib/deflate.js +36 -40
- package/node_modules/jose/dist/webapi/lib/jwe_algorithms.js +102 -93
- package/node_modules/jose/dist/webapi/lib/jwe_decrypt.js +178 -177
- package/node_modules/jose/dist/webapi/lib/jwe_encrypt.js +72 -107
- package/node_modules/jose/dist/webapi/lib/jws_algorithms.js +62 -61
- package/node_modules/jose/dist/webapi/lib/jws_sign.js +44 -72
- package/node_modules/jose/dist/webapi/lib/jws_verify.js +82 -103
- package/node_modules/jose/dist/webapi/lib/jwt_claims_set.js +134 -185
- package/node_modules/jose/dist/webapi/lib/key.js +147 -124
- package/node_modules/jose/dist/webapi/lib/key_algorithm.js +13 -8
- package/node_modules/jose/dist/webapi/lib/key_descriptor.js +8 -6
- package/node_modules/jose/dist/webapi/lib/key_management.js +169 -229
- package/node_modules/jose/dist/webapi/lib/validate.js +122 -0
- package/node_modules/jose/dist/webapi/util/base64url.js +14 -37
- package/node_modules/jose/dist/webapi/util/decode_jwt.js +32 -31
- package/node_modules/jose/dist/webapi/util/decode_protected_header.js +18 -23
- package/node_modules/jose/dist/webapi/util/errors.js +94 -84
- package/node_modules/jose/package.json +17 -81
- package/node_modules/pi-mcp-adapter/CHANGELOG.md +156 -0
- package/node_modules/pi-mcp-adapter/README.md +121 -13
- package/node_modules/pi-mcp-adapter/agent-dir.ts +12 -4
- package/node_modules/pi-mcp-adapter/agent-plugin-loader.ts +1 -1
- package/node_modules/pi-mcp-adapter/cli.js +188 -5
- package/node_modules/pi-mcp-adapter/commands.ts +136 -20
- package/node_modules/pi-mcp-adapter/config.ts +74 -15
- package/node_modules/pi-mcp-adapter/direct-tools.ts +134 -72
- package/node_modules/pi-mcp-adapter/dist/agent-dir.d.ts +10 -0
- package/node_modules/pi-mcp-adapter/dist/agent-dir.js +63 -0
- package/node_modules/pi-mcp-adapter/dist/agent-dir.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/agent-plugin-loader.d.ts +8 -0
- package/node_modules/pi-mcp-adapter/dist/agent-plugin-loader.js +356 -0
- package/node_modules/pi-mcp-adapter/dist/agent-plugin-loader.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/config.d.ts +123 -0
- package/node_modules/pi-mcp-adapter/dist/config.js +1088 -0
- package/node_modules/pi-mcp-adapter/dist/config.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/mcp-bearer-store.d.ts +24 -0
- package/node_modules/pi-mcp-adapter/dist/mcp-bearer-store.js +336 -0
- package/node_modules/pi-mcp-adapter/dist/mcp-bearer-store.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/metadata-cache.d.ts +19 -0
- package/node_modules/pi-mcp-adapter/dist/metadata-cache.js +319 -0
- package/node_modules/pi-mcp-adapter/dist/metadata-cache.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/package-mcp-loader.d.ts +2 -0
- package/node_modules/pi-mcp-adapter/dist/package-mcp-loader.js +156 -0
- package/node_modules/pi-mcp-adapter/dist/package-mcp-loader.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/resource-tools.d.ts +1 -0
- package/node_modules/pi-mcp-adapter/dist/resource-tools.js +15 -0
- package/node_modules/pi-mcp-adapter/dist/resource-tools.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/types.d.ts +566 -0
- package/node_modules/pi-mcp-adapter/dist/types.js +287 -0
- package/node_modules/pi-mcp-adapter/dist/types.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/ui-app-bridge-helpers.d.ts +6 -0
- package/node_modules/pi-mcp-adapter/dist/ui-app-bridge-helpers.js +37 -0
- package/node_modules/pi-mcp-adapter/dist/ui-app-bridge-helpers.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/ui-stream-types.d.ts +104 -0
- package/node_modules/pi-mcp-adapter/dist/ui-stream-types.js +59 -0
- package/node_modules/pi-mcp-adapter/dist/ui-stream-types.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/ui-tool-visibility.d.ts +4 -0
- package/node_modules/pi-mcp-adapter/dist/ui-tool-visibility.js +27 -0
- package/node_modules/pi-mcp-adapter/dist/ui-tool-visibility.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/utils.d.ts +32 -0
- package/node_modules/pi-mcp-adapter/dist/utils.js +338 -0
- package/node_modules/pi-mcp-adapter/dist/utils.js.map +1 -0
- package/node_modules/pi-mcp-adapter/failure-backoff.ts +23 -0
- package/node_modules/pi-mcp-adapter/host-html-template.ts +0 -8
- package/node_modules/pi-mcp-adapter/index.ts +434 -36
- package/node_modules/pi-mcp-adapter/init.ts +102 -35
- package/node_modules/pi-mcp-adapter/lifecycle.ts +323 -28
- package/node_modules/pi-mcp-adapter/mcp-auth-flow.ts +161 -37
- package/node_modules/pi-mcp-adapter/mcp-auth.ts +60 -2
- package/node_modules/pi-mcp-adapter/mcp-bearer-store.ts +385 -0
- package/node_modules/pi-mcp-adapter/mcp-callback-server.ts +27 -3
- package/node_modules/pi-mcp-adapter/mcp-code.ts +6 -0
- package/node_modules/pi-mcp-adapter/mcp-oauth-provider.ts +155 -16
- package/node_modules/pi-mcp-adapter/mcp-output-guard.ts +95 -7
- package/node_modules/pi-mcp-adapter/mcp-panel.ts +87 -22
- package/node_modules/pi-mcp-adapter/mcp-probe.ts +18 -4
- package/node_modules/pi-mcp-adapter/mcp-references.ts +376 -0
- package/node_modules/pi-mcp-adapter/mcp-script-worker.mjs +22 -20
- package/node_modules/pi-mcp-adapter/mcp-setup-panel.ts +2 -1
- package/node_modules/pi-mcp-adapter/mcp-status.ts +8 -19
- package/node_modules/pi-mcp-adapter/metadata-cache.ts +66 -14
- package/node_modules/pi-mcp-adapter/namespace-tools.ts +276 -0
- package/node_modules/pi-mcp-adapter/npx-resolver.ts +81 -26
- package/node_modules/pi-mcp-adapter/package-mcp-loader.ts +168 -0
- package/node_modules/pi-mcp-adapter/package.json +29 -8
- package/node_modules/pi-mcp-adapter/proxy-modes.ts +229 -50
- package/node_modules/pi-mcp-adapter/request-headers-command.ts +330 -0
- package/node_modules/pi-mcp-adapter/search-ranking.ts +167 -16
- package/node_modules/pi-mcp-adapter/server-manager.ts +243 -14
- package/node_modules/pi-mcp-adapter/session-recovery.ts +15 -2
- package/node_modules/pi-mcp-adapter/state.ts +1 -3
- package/node_modules/pi-mcp-adapter/tool-approval.ts +63 -9
- package/node_modules/pi-mcp-adapter/tool-metadata.ts +62 -4
- package/node_modules/pi-mcp-adapter/tool-result-renderer.ts +195 -15
- package/node_modules/pi-mcp-adapter/types.ts +229 -29
- package/node_modules/pi-mcp-adapter/ui-server.ts +41 -36
- package/node_modules/pi-mcp-adapter/ui-session.ts +2 -1
- package/node_modules/pi-mcp-adapter/utils.ts +91 -19
- package/node_modules/pi-subagents/CHANGELOG.md +582 -0
- package/node_modules/pi-subagents/README.md +6 -0
- package/node_modules/pi-subagents/agents/claude-code-writer.md +15 -0
- package/node_modules/pi-subagents/agents/claude-code.md +15 -0
- package/node_modules/pi-subagents/agents/codex-exec-writer.md +15 -0
- package/node_modules/pi-subagents/agents/codex-exec.md +15 -0
- package/node_modules/pi-subagents/agents/cursor-agent-writer.md +14 -0
- package/node_modules/pi-subagents/agents/cursor-agent.md +14 -0
- package/node_modules/pi-subagents/agents/oracle.md +9 -5
- package/node_modules/pi-subagents/agents/researcher.md +1 -1
- package/node_modules/pi-subagents/agents/reviewer.md +15 -4
- package/node_modules/pi-subagents/agents/scout.md +3 -3
- package/node_modules/pi-subagents/agents/worker.md +3 -2
- package/node_modules/pi-subagents/async-retention-discovery-worker.mjs +180 -0
- package/node_modules/pi-subagents/docs/agents.md +164 -14
- package/node_modules/pi-subagents/docs/configuration.md +204 -24
- package/node_modules/pi-subagents/docs/extension-api.md +146 -11
- package/node_modules/pi-subagents/docs/missions.md +5 -3
- package/node_modules/pi-subagents/docs/models.md +74 -8
- package/node_modules/pi-subagents/docs/observability.md +100 -12
- package/node_modules/pi-subagents/docs/tool-reference.md +185 -46
- package/node_modules/pi-subagents/docs/workflows.md +317 -5
- package/node_modules/pi-subagents/index.ts +10 -1
- package/node_modules/pi-subagents/install.mjs +1 -1
- package/node_modules/pi-subagents/package.json +7 -2
- package/node_modules/pi-subagents/prompts/council.md +60 -0
- package/node_modules/pi-subagents/prompts/parallel-review.md +5 -1
- package/node_modules/pi-subagents/prompts/review-loop.md +11 -7
- package/node_modules/pi-subagents/skills/council-mode/SKILL.md +59 -0
- package/node_modules/pi-subagents/skills/council-mode/references/pass-contracts.md +150 -0
- package/node_modules/pi-subagents/skills/pi-subagents/SKILL.md +87 -25
- package/node_modules/pi-subagents/skills/pi-subagents/references/constraints-and-recipes.md +40 -221
- package/node_modules/pi-subagents/skills/pi-subagents/references/execution-controls.md +136 -26
- package/node_modules/pi-subagents/skills/pi-subagents/references/management-authoring-rpc.md +8 -8
- package/node_modules/pi-subagents/skills/pi-subagents/references/multi-lane-orchestration.md +51 -0
- package/node_modules/pi-subagents/skills/pi-subagents/references/prompting-and-roles.md +99 -46
- package/node_modules/pi-subagents/skills/pi-subagents/references/review-and-validation.md +73 -0
- package/node_modules/pi-subagents/src/agents/agent-management.ts +541 -442
- package/node_modules/pi-subagents/src/agents/agent-refinements.ts +4 -4
- package/node_modules/pi-subagents/src/agents/agent-serializer.ts +20 -4
- package/node_modules/pi-subagents/src/agents/agents.ts +1177 -267
- package/node_modules/pi-subagents/src/agents/builtin-names.ts +15 -0
- package/node_modules/pi-subagents/src/agents/runtime-agent-events.ts +70 -0
- package/node_modules/pi-subagents/src/agents/runtime-agent-registry.ts +429 -0
- package/node_modules/pi-subagents/src/agents/skills.ts +1 -1
- package/node_modules/pi-subagents/src/api/agents.ts +12 -0
- package/node_modules/pi-subagents/src/api/background-work.ts +12 -3
- package/node_modules/pi-subagents/src/api/delegation.ts +0 -7
- package/node_modules/pi-subagents/src/api/external-job-provider.ts +195 -0
- package/node_modules/pi-subagents/src/api/external-runs.ts +237 -84
- package/node_modules/pi-subagents/src/api/preflight.ts +140 -42
- package/node_modules/pi-subagents/src/api/project-panes.ts +2 -0
- package/node_modules/pi-subagents/src/api/shared-types.ts +5 -0
- package/node_modules/pi-subagents/src/extension/config.ts +134 -2
- package/node_modules/pi-subagents/src/extension/doctor.ts +54 -6
- package/node_modules/pi-subagents/src/extension/fanout-child.ts +9 -6
- package/node_modules/pi-subagents/src/extension/index.ts +361 -118
- package/node_modules/pi-subagents/src/extension/public-execution.ts +149 -10
- package/node_modules/pi-subagents/src/extension/rpc.ts +229 -23
- package/node_modules/pi-subagents/src/extension/schemas.ts +81 -58
- package/node_modules/pi-subagents/src/extension/tool-description.ts +70 -31
- package/node_modules/pi-subagents/src/extension/tool-result.ts +19 -0
- package/node_modules/pi-subagents/src/inspectors/herdr/actions.ts +16 -10
- package/node_modules/pi-subagents/src/inspectors/herdr/client.ts +3 -3
- package/node_modules/pi-subagents/src/inspectors/herdr/focus.ts +55 -0
- package/node_modules/pi-subagents/src/inspectors/herdr/inspector-runner.ts +10 -4
- package/node_modules/pi-subagents/src/inspectors/herdr/project-panes.ts +230 -50
- package/node_modules/pi-subagents/src/inspectors/herdr/session-roots-codec.ts +42 -0
- package/node_modules/pi-subagents/src/inspectors/herdr/shell-command.ts +16 -0
- package/node_modules/pi-subagents/src/integrations/herdr-status.ts +75 -5
- package/node_modules/pi-subagents/src/intercom/intercom-bridge.ts +9 -5
- package/node_modules/pi-subagents/src/intercom/native-supervisor-channel.ts +51 -52
- package/node_modules/pi-subagents/src/intercom/result-intercom.ts +2 -0
- package/node_modules/pi-subagents/src/missions/goal-driver.ts +3 -1
- package/node_modules/pi-subagents/src/missions/lifecycle.ts +10 -8
- package/node_modules/pi-subagents/src/missions/store.ts +16 -16
- package/node_modules/pi-subagents/src/missions/workflow-state.ts +8 -4
- package/node_modules/pi-subagents/src/profiles/profiles.ts +8 -7
- package/node_modules/pi-subagents/src/runs/background/active-async-capacity.ts +517 -0
- package/node_modules/pi-subagents/src/runs/background/active-run-index.ts +100 -3
- package/node_modules/pi-subagents/src/runs/background/async-execution.ts +630 -184
- package/node_modules/pi-subagents/src/runs/background/async-job-tracker.ts +143 -33
- package/node_modules/pi-subagents/src/runs/background/async-resume.ts +117 -44
- package/node_modules/pi-subagents/src/runs/background/async-retention.ts +903 -0
- package/node_modules/pi-subagents/src/runs/background/async-status-snapshot.ts +48 -0
- package/node_modules/pi-subagents/src/runs/background/async-status.ts +235 -69
- package/node_modules/pi-subagents/src/runs/background/auto-drain.ts +2 -1
- package/node_modules/pi-subagents/src/runs/background/chain-append.ts +44 -51
- package/node_modules/pi-subagents/src/runs/background/chain-root-attachment.ts +79 -8
- package/node_modules/pi-subagents/src/runs/background/completion-dedupe.ts +5 -1
- package/node_modules/pi-subagents/src/runs/background/completion-replay.ts +33 -13
- package/node_modules/pi-subagents/src/runs/background/control-channel.ts +108 -73
- package/node_modules/pi-subagents/src/runs/background/fleet-view.ts +125 -45
- package/node_modules/pi-subagents/src/runs/background/index-segment.ts +59 -0
- package/node_modules/pi-subagents/src/runs/background/inspect-rpc.ts +443 -0
- package/node_modules/pi-subagents/src/runs/background/notify.ts +272 -10
- package/node_modules/pi-subagents/src/runs/background/owned-process-tree.ts +104 -0
- package/node_modules/pi-subagents/src/runs/background/process-terminal.ts +33 -3
- package/node_modules/pi-subagents/src/runs/background/result-delivery-ownership.ts +45 -0
- package/node_modules/pi-subagents/src/runs/background/result-files.ts +519 -0
- package/node_modules/pi-subagents/src/runs/background/result-watcher.ts +329 -54
- package/node_modules/pi-subagents/src/runs/background/resume-guidance.ts +35 -12
- package/node_modules/pi-subagents/src/runs/background/retained-children.ts +85 -18
- package/node_modules/pi-subagents/src/runs/background/run-id-query.ts +7 -0
- package/node_modules/pi-subagents/src/runs/background/run-id-resolver.ts +37 -29
- package/node_modules/pi-subagents/src/runs/background/run-status.ts +204 -32
- package/node_modules/pi-subagents/src/runs/background/scheduled-runs.ts +228 -40
- package/node_modules/pi-subagents/src/runs/background/stale-run-reconciler.ts +42 -16
- package/node_modules/pi-subagents/src/runs/background/steering.ts +18 -15
- package/node_modules/pi-subagents/src/runs/background/subagent-runner.ts +1419 -546
- package/node_modules/pi-subagents/src/runs/background/subagent-wait.ts +105 -44
- package/node_modules/pi-subagents/src/runs/background/terminal-run-index.ts +138 -0
- package/node_modules/pi-subagents/src/runs/background/wait-completions.ts +54 -4
- package/node_modules/pi-subagents/src/runs/background/wait-config.ts +23 -9
- package/node_modules/pi-subagents/src/runs/background/wait-subscriptions.ts +81 -2
- package/node_modules/pi-subagents/src/runs/background/wait-tool.ts +28 -19
- package/node_modules/pi-subagents/src/runs/foreground/async-dismiss-action.ts +2 -1
- package/node_modules/pi-subagents/src/runs/foreground/async-steering-action.ts +23 -16
- package/node_modules/pi-subagents/src/runs/foreground/async-stop-action.ts +23 -2
- package/node_modules/pi-subagents/src/runs/foreground/execution.ts +730 -168
- package/node_modules/pi-subagents/src/runs/foreground/foreground-control.ts +21 -0
- package/node_modules/pi-subagents/src/runs/foreground/foreground-history.ts +26 -3
- package/node_modules/pi-subagents/src/runs/foreground/prompt-audit.ts +172 -0
- package/node_modules/pi-subagents/src/runs/foreground/subagent-executor.ts +2705 -1726
- package/node_modules/pi-subagents/src/runs/foreground/workflow-detach-reconcile.ts +299 -0
- package/node_modules/pi-subagents/src/runs/foreground/workflow-foreground-steering.ts +6 -5
- package/node_modules/pi-subagents/src/runs/shared/abort-recovery.ts +119 -0
- package/node_modules/pi-subagents/src/runs/shared/acceptance.ts +183 -39
- package/node_modules/pi-subagents/src/runs/shared/agent-contract.ts +1 -1
- package/node_modules/pi-subagents/src/runs/shared/async-status-projection.ts +597 -0
- package/node_modules/pi-subagents/src/runs/shared/background-process-options.ts +9 -0
- package/node_modules/pi-subagents/src/runs/shared/capability-ceiling.ts +1 -0
- package/node_modules/pi-subagents/src/runs/shared/chain-outputs.ts +1 -3
- package/node_modules/pi-subagents/src/runs/shared/child-identity.ts +51 -0
- package/node_modules/pi-subagents/src/runs/shared/child-launch-plan.ts +151 -0
- package/node_modules/pi-subagents/src/runs/shared/child-protocol.ts +21 -7
- package/node_modules/pi-subagents/src/runs/shared/claude-code-adapter.ts +129 -0
- package/node_modules/pi-subagents/src/runs/shared/codex-exec-adapter.ts +129 -0
- package/node_modules/pi-subagents/src/runs/shared/completion-evidence.ts +89 -0
- package/node_modules/pi-subagents/src/runs/shared/completion-guard.ts +163 -6
- package/node_modules/pi-subagents/src/runs/shared/cursor-agent-adapter.ts +114 -0
- package/node_modules/pi-subagents/src/runs/shared/dynamic-fanout.ts +4 -4
- package/node_modules/pi-subagents/src/runs/shared/extension-bindings.ts +78 -0
- package/node_modules/pi-subagents/src/runs/shared/external-cli-contract.ts +167 -0
- package/node_modules/pi-subagents/src/runs/shared/external-cli-preflight.ts +122 -0
- package/node_modules/pi-subagents/src/runs/shared/external-cli-runner.ts +353 -54
- package/node_modules/pi-subagents/src/runs/shared/external-job-bridge.ts +460 -0
- package/node_modules/pi-subagents/src/runs/shared/external-job-runner.ts +389 -0
- package/node_modules/pi-subagents/src/runs/shared/fast-mode-extension.ts +10 -0
- package/node_modules/pi-subagents/src/runs/shared/host-step-status.ts +231 -0
- package/node_modules/pi-subagents/src/runs/shared/lane-metadata.ts +105 -0
- package/node_modules/pi-subagents/src/runs/shared/launch-cwd.ts +16 -0
- package/node_modules/pi-subagents/src/runs/shared/llm-intent-arbiter.ts +302 -0
- package/node_modules/pi-subagents/src/runs/shared/long-running-guard.ts +2 -1
- package/node_modules/pi-subagents/src/runs/shared/mcp-config-sources.ts +422 -0
- package/node_modules/pi-subagents/src/runs/shared/mcp-direct-tool-allowlist.ts +230 -153
- package/node_modules/pi-subagents/src/runs/shared/mcp-direct-tool-grant.ts +194 -0
- package/node_modules/pi-subagents/src/runs/shared/model-exclusions.ts +305 -0
- package/node_modules/pi-subagents/src/runs/shared/model-fallback.ts +300 -62
- package/node_modules/pi-subagents/src/runs/shared/model-scope.ts +106 -39
- package/node_modules/pi-subagents/src/runs/shared/mutation-evidence.ts +199 -0
- package/node_modules/pi-subagents/src/runs/shared/nested-events.ts +75 -65
- package/node_modules/pi-subagents/src/runs/shared/nested-render.ts +9 -5
- package/node_modules/pi-subagents/src/runs/shared/orca-progress-tabs.ts +499 -0
- package/node_modules/pi-subagents/src/runs/shared/parallel-handoff.ts +464 -10
- package/node_modules/pi-subagents/src/runs/shared/parallel-utils.ts +38 -20
- package/node_modules/pi-subagents/src/runs/shared/permissions.ts +6 -2
- package/node_modules/pi-subagents/src/runs/shared/pi-args.ts +279 -21
- package/node_modules/pi-subagents/src/runs/shared/pi-spawn.ts +69 -35
- package/node_modules/pi-subagents/src/runs/shared/process-signal.ts +13 -0
- package/node_modules/pi-subagents/src/runs/shared/run-fanout-budget.ts +280 -0
- package/node_modules/pi-subagents/src/runs/shared/run-history.ts +21 -1
- package/node_modules/pi-subagents/src/runs/shared/session-lease.ts +0 -6
- package/node_modules/pi-subagents/src/runs/shared/single-output.ts +93 -24
- package/node_modules/pi-subagents/src/runs/shared/structured-output.ts +46 -5
- package/node_modules/pi-subagents/src/runs/shared/subagent-control.ts +66 -7
- package/node_modules/pi-subagents/src/runs/shared/subagent-prompt-runtime.ts +195 -44
- package/node_modules/pi-subagents/src/runs/shared/subagent-startup-retry.ts +12 -0
- package/node_modules/pi-subagents/src/runs/shared/task-intent.ts +36 -9
- package/node_modules/pi-subagents/src/runs/shared/tool-availability.ts +1 -3
- package/node_modules/pi-subagents/src/runs/shared/tool-timeout.ts +93 -0
- package/node_modules/pi-subagents/src/runs/shared/workflow-graph.ts +17 -23
- package/node_modules/pi-subagents/src/runs/shared/worktree-cleanup-plan.ts +847 -0
- package/node_modules/pi-subagents/src/runs/shared/worktree.ts +49 -7
- package/node_modules/pi-subagents/src/shared/agent-stream-options.ts +5 -0
- package/node_modules/pi-subagents/src/shared/artifacts.ts +2 -6
- package/node_modules/pi-subagents/src/shared/atomic-json.ts +24 -2
- package/node_modules/pi-subagents/src/shared/capacity-resilient-json.ts +102 -0
- package/node_modules/pi-subagents/src/shared/child-session-name.ts +46 -0
- package/node_modules/pi-subagents/src/shared/completion-owner.ts +14 -0
- package/node_modules/pi-subagents/src/shared/display-text.ts +50 -0
- package/node_modules/pi-subagents/src/shared/extension-context.ts +24 -0
- package/node_modules/pi-subagents/src/shared/file-system-retry.ts +49 -1
- package/node_modules/pi-subagents/src/shared/fork-context.ts +80 -13
- package/node_modules/pi-subagents/src/shared/fork-session-cwd.ts +27 -0
- package/node_modules/pi-subagents/src/shared/formatters.ts +18 -3
- package/node_modules/pi-subagents/src/shared/launch-contract.ts +20 -6
- package/node_modules/pi-subagents/src/shared/model-info.ts +20 -0
- package/node_modules/pi-subagents/src/shared/node-executable.ts +21 -0
- package/node_modules/pi-subagents/src/shared/prompt-resources.ts +0 -40
- package/node_modules/pi-subagents/src/shared/pruned-fork.ts +450 -0
- package/node_modules/pi-subagents/src/shared/session-file-trust.ts +19 -0
- package/node_modules/pi-subagents/src/shared/session-tokens.ts +14 -3
- package/node_modules/pi-subagents/src/shared/settings.ts +25 -130
- package/node_modules/pi-subagents/src/shared/shortcuts.ts +17 -0
- package/node_modules/pi-subagents/src/shared/thinking-ceiling.ts +52 -0
- package/node_modules/pi-subagents/src/shared/types.ts +788 -64
- package/node_modules/pi-subagents/src/shared/utils.ts +52 -85
- package/node_modules/pi-subagents/src/shared/watch-strategy.ts +10 -0
- package/node_modules/pi-subagents/src/shared/workflow-child-permit.ts +207 -0
- package/node_modules/pi-subagents/src/slash/delegation-adapters.ts +1 -9
- package/node_modules/pi-subagents/src/slash/delegation-request.ts +0 -4
- package/node_modules/pi-subagents/src/slash/prompt-template-bridge.ts +37 -1
- package/node_modules/pi-subagents/src/slash/slash-commands.ts +457 -135
- package/node_modules/pi-subagents/src/slash/slash-live-state.ts +28 -14
- package/node_modules/pi-subagents/src/slash/subagents-admin.ts +5 -0
- package/node_modules/pi-subagents/src/tui/fleet-status.ts +402 -71
- package/node_modules/pi-subagents/src/tui/fleet-transcript.ts +12 -53
- package/node_modules/pi-subagents/src/tui/fleet.ts +500 -53
- package/node_modules/pi-subagents/src/tui/render-helpers.ts +31 -0
- package/node_modules/pi-subagents/src/tui/render.ts +1192 -192
- package/node_modules/pi-subagents/src/watchdog/change-signature.ts +41 -2
- package/node_modules/pi-subagents/src/watchdog/lsp-diagnostics.ts +1 -0
- package/node_modules/pi-subagents/src/watchdog/permission-arbiter.ts +60 -51
- package/node_modules/pi-subagents/src/watchdog/review.ts +4 -3
- package/node_modules/pi-subagents/src/watchdog/turn-delta.ts +1 -1
- package/node_modules/pi-subagents/src/workflows/chat-progress.ts +17 -6
- package/node_modules/pi-subagents/src/workflows/host-command.ts +235 -0
- package/node_modules/pi-subagents/src/workflows/scripted-workflow.ts +1654 -174
- package/node_modules/pi-subagents/src/workflows/workflow-child-summary.ts +121 -0
- package/node_modules/pi-subagents/src/workflows/workflow-preflight.ts +270 -0
- package/node_modules/pi-subagents/src/workflows/workflow-receipt.ts +366 -0
- package/node_modules/pi-subagents/src/workflows/workflow-resources.ts +150 -0
- package/node_modules/pi-subagents/src/workflows/workflow-settlement.ts +246 -0
- package/node_modules/zod/README.md +29 -2
- package/node_modules/zod/compile.cjs +96 -0
- package/node_modules/zod/compile.d.cts +1 -0
- package/node_modules/zod/compile.d.ts +1 -0
- package/node_modules/zod/compile.js +52 -0
- package/node_modules/zod/index.cjs +21 -2
- package/node_modules/zod/index.d.cts +1 -2
- package/node_modules/zod/index.d.ts +1 -2
- package/node_modules/zod/index.js +5 -2
- package/node_modules/zod/locales/index.cjs +19 -0
- package/node_modules/zod/mini/index.cjs +19 -0
- package/node_modules/zod/package.json +20 -8
- package/node_modules/zod/src/compile.ts +56 -0
- package/node_modules/zod/src/index.ts +5 -2
- package/node_modules/zod/src/v3/ZodError.ts +22 -12
- package/node_modules/zod/src/v3/helpers/errorUtil.ts +1 -1
- package/node_modules/zod/src/v3/tests/error.test.ts +35 -0
- package/node_modules/zod/src/v3/tests/intersection.test.ts +18 -0
- package/node_modules/zod/src/v3/tests/language-server.test.ts +1 -2
- package/node_modules/zod/src/v3/tests/object.test.ts +3 -6
- package/node_modules/zod/src/v3/tests/readonly.test.ts +0 -80
- package/node_modules/zod/src/v3/tests/string.test.ts +6 -0
- package/node_modules/zod/src/v3/types.ts +5 -5
- package/node_modules/zod/src/v4/classic/checks.ts +1 -0
- package/node_modules/zod/src/v4/classic/compat.ts +26 -18
- package/node_modules/zod/src/v4/classic/deep-partial.ts +76 -0
- package/node_modules/zod/src/v4/classic/errors.ts +59 -44
- package/node_modules/zod/src/v4/classic/external.ts +14 -9
- package/node_modules/zod/src/v4/classic/from-json-schema.ts +363 -78
- package/node_modules/zod/src/v4/classic/in-out.ts +45 -0
- package/node_modules/zod/src/v4/classic/index.ts +2 -2
- package/node_modules/zod/src/v4/classic/iso.ts +2 -72
- package/node_modules/zod/src/v4/classic/parse.ts +10 -4
- package/node_modules/zod/src/v4/classic/schemas.ts +640 -375
- package/node_modules/zod/src/v4/classic/tests/apply.test.ts +27 -0
- package/node_modules/zod/src/v4/classic/tests/array.test.ts +2 -2
- package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +186 -0
- package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +36 -1
- package/node_modules/zod/src/v4/classic/tests/catch.test.ts +278 -0
- package/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +1 -2
- package/node_modules/zod/src/v4/classic/tests/codec.test.ts +2 -1
- package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +3 -3
- package/node_modules/zod/src/v4/classic/tests/credit-card.test.ts +76 -0
- package/node_modules/zod/src/v4/classic/tests/cyclic-data.test.ts +985 -0
- package/node_modules/zod/src/v4/classic/tests/date.test.ts +30 -0
- package/node_modules/zod/src/v4/classic/tests/datetime.test.ts +32 -18
- package/node_modules/zod/src/v4/classic/tests/deep-partial.test.ts +380 -0
- package/node_modules/zod/src/v4/classic/tests/default-locale.test.ts +32 -0
- package/node_modules/zod/src/v4/classic/tests/default.test.ts +46 -0
- package/node_modules/zod/src/v4/classic/tests/detached-methods.test.ts +31 -7
- package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +261 -13
- package/node_modules/zod/src/v4/classic/tests/enum.test.ts +20 -0
- package/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +112 -2
- package/node_modules/zod/src/v4/classic/tests/error.test.ts +403 -6
- package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +582 -10
- package/node_modules/zod/src/v4/classic/tests/function.test.ts +31 -0
- package/node_modules/zod/src/v4/classic/tests/global-config.test.ts +2 -9
- package/node_modules/zod/src/v4/classic/tests/hash.test.ts +1 -2
- package/node_modules/zod/src/v4/classic/tests/iban.test.ts +81 -0
- package/node_modules/zod/src/v4/classic/tests/in-out.test.ts +159 -0
- package/node_modules/zod/src/v4/classic/tests/index.test.ts +21 -2
- package/node_modules/zod/src/v4/classic/tests/instance-footprint.test.ts +319 -0
- package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +67 -0
- package/node_modules/zod/src/v4/classic/tests/intersection.test.ts +136 -0
- package/node_modules/zod/src/v4/classic/tests/issue-schema.test.ts +215 -0
- package/node_modules/zod/src/v4/classic/tests/jitless-allows-eval.test.ts +3 -10
- package/node_modules/zod/src/v4/classic/tests/lazy.test.ts +36 -1
- package/node_modules/zod/src/v4/classic/tests/literal.test.ts +12 -1
- package/node_modules/zod/src/v4/classic/tests/map.test.ts +12 -0
- package/node_modules/zod/src/v4/classic/tests/number.test.ts +85 -9
- package/node_modules/zod/src/v4/classic/tests/object.test.ts +301 -12
- package/node_modules/zod/src/v4/classic/tests/optin-ladder.test.ts +235 -0
- package/node_modules/zod/src/v4/classic/tests/optional.test.ts +49 -16
- package/node_modules/zod/src/v4/classic/tests/partial.test.ts +51 -4
- package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +70 -0
- package/node_modules/zod/src/v4/classic/tests/preprocess-types.test.ts +20 -2
- package/node_modules/zod/src/v4/classic/tests/properties.test.ts +141 -0
- package/node_modules/zod/src/v4/classic/tests/readonly.test.ts +0 -68
- package/node_modules/zod/src/v4/classic/tests/record.test.ts +186 -18
- package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +79 -3
- package/node_modules/zod/src/v4/classic/tests/redos.test.ts +68 -0
- package/node_modules/zod/src/v4/classic/tests/refine.test.ts +60 -0
- package/node_modules/zod/src/v4/classic/tests/set.test.ts +9 -0
- package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +19 -0
- package/node_modules/zod/src/v4/classic/tests/string.test.ts +222 -6
- package/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +18 -0
- package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +44 -3
- package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +1812 -204
- package/node_modules/zod/src/v4/classic/tests/tuple.test.ts +45 -30
- package/node_modules/zod/src/v4/classic/tests/union.test.ts +39 -2
- package/node_modules/zod/src/v4/classic/tests/validate.test.ts +645 -0
- package/node_modules/zod/src/v4/classic/tests/validations.test.ts +2 -2
- package/node_modules/zod/src/v4/core/api.ts +87 -35
- package/node_modules/zod/src/v4/core/checks.ts +119 -146
- package/node_modules/zod/src/v4/core/compile.ts +2313 -0
- package/node_modules/zod/src/v4/core/core.ts +99 -22
- package/node_modules/zod/src/v4/core/doc.ts +17 -9
- package/node_modules/zod/src/v4/core/errors.ts +113 -25
- package/node_modules/zod/src/v4/core/index.ts +3 -0
- package/node_modules/zod/src/v4/core/json-schema-generator.ts +8 -3
- package/node_modules/zod/src/v4/core/json-schema-processors.ts +424 -156
- package/node_modules/zod/src/v4/core/json-schema.ts +2 -1
- package/node_modules/zod/src/v4/core/memoizer.ts +331 -0
- package/node_modules/zod/src/v4/core/parse.ts +164 -50
- package/node_modules/zod/src/v4/core/regexes.ts +42 -15
- package/node_modules/zod/src/v4/core/registries.ts +2 -2
- package/node_modules/zod/src/v4/core/schemas.ts +1000 -538
- package/node_modules/zod/src/v4/core/tests/cached.test.ts +54 -0
- package/node_modules/zod/src/v4/core/tests/compile-differential.test.ts +1004 -0
- package/node_modules/zod/src/v4/core/tests/compile-generative.test.ts +445 -0
- package/node_modules/zod/src/v4/core/tests/compile-global.test.ts +89 -0
- package/node_modules/zod/src/v4/core/tests/compile-off-by-default.test.ts +26 -0
- package/node_modules/zod/src/v4/core/tests/compile-stats.test.ts +34 -0
- package/node_modules/zod/src/v4/core/tests/compile.test.ts +2036 -0
- package/node_modules/zod/src/v4/core/tests/email-regex.test.ts +140 -0
- package/node_modules/zod/src/v4/core/tests/locales/el.test.ts +1 -2
- package/node_modules/zod/src/v4/core/tests/locales/es.test.ts +1 -2
- package/node_modules/zod/src/v4/core/tests/locales/fr.test.ts +3 -3
- package/node_modules/zod/src/v4/core/tests/locales/parity.test.ts +42 -0
- package/node_modules/zod/src/v4/core/tests/locales/tg.test.ts +85 -0
- package/node_modules/zod/src/v4/core/tests/locales/tk.test.ts +69 -0
- package/node_modules/zod/src/v4/core/tests/polyfill-collision.test.ts +46 -0
- package/node_modules/zod/src/v4/core/tests/treeshake.test.ts +51 -0
- package/node_modules/zod/src/v4/core/tests/url-no-canparse.test.ts +133 -0
- package/node_modules/zod/src/v4/core/to-json-schema.ts +283 -48
- package/node_modules/zod/src/v4/core/util.ts +454 -157
- package/node_modules/zod/src/v4/core/versions.ts +2 -2
- package/node_modules/zod/src/v4/core/visit.ts +193 -0
- package/node_modules/zod/src/v4/index.ts +3 -3
- package/node_modules/zod/src/v4/locales/ar.ts +5 -0
- package/node_modules/zod/src/v4/locales/az.ts +5 -0
- package/node_modules/zod/src/v4/locales/be.ts +12 -0
- package/node_modules/zod/src/v4/locales/bg.ts +5 -0
- package/node_modules/zod/src/v4/locales/bn.ts +123 -0
- package/node_modules/zod/src/v4/locales/ca.ts +5 -0
- package/node_modules/zod/src/v4/locales/ckb.ts +140 -0
- package/node_modules/zod/src/v4/locales/cs.ts +5 -0
- package/node_modules/zod/src/v4/locales/da.ts +7 -2
- package/node_modules/zod/src/v4/locales/de.ts +5 -0
- package/node_modules/zod/src/v4/locales/el.ts +3 -0
- package/node_modules/zod/src/v4/locales/en.ts +17 -4
- package/node_modules/zod/src/v4/locales/eo.ts +5 -0
- package/node_modules/zod/src/v4/locales/es.ts +4 -0
- package/node_modules/zod/src/v4/locales/fa.ts +5 -0
- package/node_modules/zod/src/v4/locales/fi.ts +5 -0
- package/node_modules/zod/src/v4/locales/fr-CA.ts +5 -0
- package/node_modules/zod/src/v4/locales/fr.ts +21 -14
- package/node_modules/zod/src/v4/locales/gu.ts +123 -0
- package/node_modules/zod/src/v4/locales/he.ts +8 -1
- package/node_modules/zod/src/v4/locales/hi.ts +126 -0
- package/node_modules/zod/src/v4/locales/hr.ts +4 -0
- package/node_modules/zod/src/v4/locales/hu.ts +5 -0
- package/node_modules/zod/src/v4/locales/hy.ts +11 -0
- package/node_modules/zod/src/v4/locales/id.ts +5 -0
- package/node_modules/zod/src/v4/locales/index.ts +11 -0
- package/node_modules/zod/src/v4/locales/is.ts +5 -0
- package/node_modules/zod/src/v4/locales/it.ts +5 -0
- package/node_modules/zod/src/v4/locales/ja.ts +5 -0
- package/node_modules/zod/src/v4/locales/ka.ts +5 -0
- package/node_modules/zod/src/v4/locales/km.ts +5 -0
- package/node_modules/zod/src/v4/locales/kn.ts +126 -0
- package/node_modules/zod/src/v4/locales/ko.ts +5 -0
- package/node_modules/zod/src/v4/locales/lt.ts +4 -0
- package/node_modules/zod/src/v4/locales/mk.ts +5 -0
- package/node_modules/zod/src/v4/locales/ms.ts +5 -0
- package/node_modules/zod/src/v4/locales/ne.ts +128 -0
- package/node_modules/zod/src/v4/locales/nl.ts +5 -0
- package/node_modules/zod/src/v4/locales/nn.ts +121 -0
- package/node_modules/zod/src/v4/locales/no.ts +7 -2
- package/node_modules/zod/src/v4/locales/ota.ts +5 -0
- package/node_modules/zod/src/v4/locales/pl.ts +5 -0
- package/node_modules/zod/src/v4/locales/ps.ts +5 -0
- package/node_modules/zod/src/v4/locales/pt-BR.ts +161 -0
- package/node_modules/zod/src/v4/locales/pt.ts +101 -58
- package/node_modules/zod/src/v4/locales/ro.ts +3 -0
- package/node_modules/zod/src/v4/locales/ru.ts +12 -0
- package/node_modules/zod/src/v4/locales/sk.ts +123 -0
- package/node_modules/zod/src/v4/locales/sl.ts +5 -0
- package/node_modules/zod/src/v4/locales/sv.ts +7 -2
- package/node_modules/zod/src/v4/locales/ta.ts +5 -0
- package/node_modules/zod/src/v4/locales/tg.ts +135 -0
- package/node_modules/zod/src/v4/locales/th.ts +5 -0
- package/node_modules/zod/src/v4/locales/tk.ts +113 -0
- package/node_modules/zod/src/v4/locales/tr.ts +5 -0
- package/node_modules/zod/src/v4/locales/uk.ts +5 -0
- package/node_modules/zod/src/v4/locales/ur.ts +5 -0
- package/node_modules/zod/src/v4/locales/uz.ts +3 -0
- package/node_modules/zod/src/v4/locales/vi.ts +5 -0
- package/node_modules/zod/src/v4/locales/yo.ts +5 -0
- package/node_modules/zod/src/v4/locales/zh-CN.ts +5 -0
- package/node_modules/zod/src/v4/locales/zh-TW.ts +5 -0
- package/node_modules/zod/src/v4/mini/checks.ts +1 -0
- package/node_modules/zod/src/v4/mini/deep-partial.ts +73 -0
- package/node_modules/zod/src/v4/mini/external.ts +12 -1
- package/node_modules/zod/src/v4/mini/in-out.ts +45 -0
- package/node_modules/zod/src/v4/mini/parse.ts +2 -0
- package/node_modules/zod/src/v4/mini/schemas.ts +167 -63
- package/node_modules/zod/src/v4/mini/tests/apply.test.ts +33 -0
- package/node_modules/zod/src/v4/mini/tests/assignability.test.ts +62 -1
- package/node_modules/zod/src/v4/mini/tests/checks.test.ts +14 -0
- package/node_modules/zod/src/v4/mini/tests/codec.test.ts +35 -1
- package/node_modules/zod/src/v4/mini/tests/computed.test.ts +11 -17
- package/node_modules/zod/src/v4/mini/tests/cyclic-data.test.ts +84 -0
- package/node_modules/zod/src/v4/mini/tests/deep-partial.test.ts +54 -0
- package/node_modules/zod/src/v4/mini/tests/error.test.ts +23 -4
- package/node_modules/zod/src/v4/mini/tests/functions.test.ts +9 -0
- package/node_modules/zod/src/v4/mini/tests/index.test.ts +158 -5
- package/node_modules/zod/src/v4/mini/tests/number.test.ts +14 -0
- package/node_modules/zod/src/v4/mini/tests/object.test.ts +65 -0
- package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +16 -0
- package/node_modules/zod/src/v4/mini/tests/string.test.ts +44 -0
- package/node_modules/zod/v3/ZodError.cjs +41 -12
- package/node_modules/zod/v3/ZodError.d.cts +1 -1
- package/node_modules/zod/v3/ZodError.d.ts +1 -1
- package/node_modules/zod/v3/ZodError.js +22 -12
- package/node_modules/zod/v3/errors.cjs +19 -0
- package/node_modules/zod/v3/external.cjs +19 -0
- package/node_modules/zod/v3/helpers/enumUtil.cjs +19 -0
- package/node_modules/zod/v3/helpers/errorUtil.cjs +20 -1
- package/node_modules/zod/v3/helpers/errorUtil.js +1 -1
- package/node_modules/zod/v3/helpers/parseUtil.cjs +19 -0
- package/node_modules/zod/v3/helpers/partialUtil.cjs +19 -0
- package/node_modules/zod/v3/helpers/typeAliases.cjs +19 -0
- package/node_modules/zod/v3/helpers/util.cjs +19 -0
- package/node_modules/zod/v3/index.cjs +19 -0
- package/node_modules/zod/v3/standard-schema.cjs +19 -0
- package/node_modules/zod/v3/types.cjs +26 -5
- package/node_modules/zod/v3/types.js +7 -5
- package/node_modules/zod/v4/classic/checks.cjs +21 -1
- package/node_modules/zod/v4/classic/checks.d.cts +1 -1
- package/node_modules/zod/v4/classic/checks.d.ts +1 -1
- package/node_modules/zod/v4/classic/checks.js +1 -1
- package/node_modules/zod/v4/classic/coerce.cjs +19 -0
- package/node_modules/zod/v4/classic/compat.cjs +19 -0
- package/node_modules/zod/v4/classic/compat.d.cts +9 -11
- package/node_modules/zod/v4/classic/compat.d.ts +9 -11
- package/node_modules/zod/v4/classic/deep-partial.cjs +58 -0
- package/node_modules/zod/v4/classic/deep-partial.d.cts +14 -0
- package/node_modules/zod/v4/classic/deep-partial.d.ts +14 -0
- package/node_modules/zod/v4/classic/deep-partial.js +13 -0
- package/node_modules/zod/v4/classic/errors.cjs +62 -34
- package/node_modules/zod/v4/classic/errors.d.cts +3 -4
- package/node_modules/zod/v4/classic/errors.d.ts +3 -4
- package/node_modules/zod/v4/classic/errors.js +43 -34
- package/node_modules/zod/v4/classic/external.cjs +51 -27
- package/node_modules/zod/v4/classic/external.d.cts +5 -2
- package/node_modules/zod/v4/classic/external.d.ts +5 -2
- package/node_modules/zod/v4/classic/external.js +5 -8
- package/node_modules/zod/v4/classic/from-json-schema.cjs +376 -75
- package/node_modules/zod/v4/classic/from-json-schema.js +357 -75
- package/node_modules/zod/v4/classic/in-out.cjs +82 -0
- package/node_modules/zod/v4/classic/in-out.d.cts +8 -0
- package/node_modules/zod/v4/classic/in-out.d.ts +8 -0
- package/node_modules/zod/v4/classic/in-out.js +36 -0
- package/node_modules/zod/v4/classic/index.cjs +21 -2
- package/node_modules/zod/v4/classic/index.d.cts +1 -2
- package/node_modules/zod/v4/classic/index.d.ts +1 -2
- package/node_modules/zod/v4/classic/index.js +2 -2
- package/node_modules/zod/v4/classic/iso.cjs +30 -22
- package/node_modules/zod/v4/classic/iso.d.cts +2 -17
- package/node_modules/zod/v4/classic/iso.d.ts +2 -17
- package/node_modules/zod/v4/classic/iso.js +2 -17
- package/node_modules/zod/v4/classic/parse.cjs +23 -1
- package/node_modules/zod/v4/classic/parse.d.cts +17 -4
- package/node_modules/zod/v4/classic/parse.d.ts +17 -4
- package/node_modules/zod/v4/classic/parse.js +1 -0
- package/node_modules/zod/v4/classic/schemas.cjs +591 -426
- package/node_modules/zod/v4/classic/schemas.d.cts +68 -19
- package/node_modules/zod/v4/classic/schemas.d.ts +68 -19
- package/node_modules/zod/v4/classic/schemas.js +564 -424
- package/node_modules/zod/v4/core/api.cjs +66 -24
- package/node_modules/zod/v4/core/api.d.cts +22 -12
- package/node_modules/zod/v4/core/api.d.ts +22 -12
- package/node_modules/zod/v4/core/api.js +44 -24
- package/node_modules/zod/v4/core/checks.cjs +88 -128
- package/node_modules/zod/v4/core/checks.d.cts +29 -13
- package/node_modules/zod/v4/core/checks.d.ts +29 -13
- package/node_modules/zod/v4/core/checks.js +68 -127
- package/node_modules/zod/v4/core/compile.cjs +1908 -0
- package/node_modules/zod/v4/core/compile.d.cts +65 -0
- package/node_modules/zod/v4/core/compile.d.ts +65 -0
- package/node_modules/zod/v4/core/compile.js +1858 -0
- package/node_modules/zod/v4/core/core.cjs +101 -19
- package/node_modules/zod/v4/core/core.d.cts +16 -4
- package/node_modules/zod/v4/core/core.d.ts +16 -4
- package/node_modules/zod/v4/core/core.js +83 -20
- package/node_modules/zod/v4/core/doc.cjs +31 -9
- package/node_modules/zod/v4/core/doc.d.cts +3 -1
- package/node_modules/zod/v4/core/doc.d.ts +3 -1
- package/node_modules/zod/v4/core/doc.js +12 -9
- package/node_modules/zod/v4/core/errors.cjs +126 -25
- package/node_modules/zod/v4/core/errors.d.cts +4 -0
- package/node_modules/zod/v4/core/errors.d.ts +4 -0
- package/node_modules/zod/v4/core/errors.js +107 -25
- package/node_modules/zod/v4/core/index.cjs +24 -1
- package/node_modules/zod/v4/core/index.d.cts +3 -0
- package/node_modules/zod/v4/core/index.d.ts +3 -0
- package/node_modules/zod/v4/core/index.js +3 -0
- package/node_modules/zod/v4/core/json-schema-generator.cjs +24 -1
- package/node_modules/zod/v4/core/json-schema-generator.d.cts +2 -2
- package/node_modules/zod/v4/core/json-schema-generator.d.ts +2 -2
- package/node_modules/zod/v4/core/json-schema-generator.js +6 -2
- package/node_modules/zod/v4/core/json-schema-processors.cjs +441 -156
- package/node_modules/zod/v4/core/json-schema-processors.d.cts +16 -0
- package/node_modules/zod/v4/core/json-schema-processors.d.ts +16 -0
- package/node_modules/zod/v4/core/json-schema-processors.js +400 -158
- package/node_modules/zod/v4/core/json-schema.cjs +19 -0
- package/node_modules/zod/v4/core/json-schema.d.cts +2 -1
- package/node_modules/zod/v4/core/json-schema.d.ts +2 -1
- package/node_modules/zod/v4/core/memoizer.cjs +360 -0
- package/node_modules/zod/v4/core/memoizer.d.cts +15 -0
- package/node_modules/zod/v4/core/memoizer.d.ts +15 -0
- package/node_modules/zod/v4/core/memoizer.js +311 -0
- package/node_modules/zod/v4/core/parse.cjs +148 -46
- package/node_modules/zod/v4/core/parse.d.cts +14 -11
- package/node_modules/zod/v4/core/parse.d.ts +14 -11
- package/node_modules/zod/v4/core/parse.js +127 -45
- package/node_modules/zod/v4/core/regexes.cjs +54 -17
- package/node_modules/zod/v4/core/regexes.d.cts +5 -0
- package/node_modules/zod/v4/core/regexes.d.ts +5 -0
- package/node_modules/zod/v4/core/regexes.js +32 -15
- package/node_modules/zod/v4/core/registries.cjs +19 -0
- package/node_modules/zod/v4/core/registries.js +2 -2
- package/node_modules/zod/v4/core/schemas.cjs +785 -386
- package/node_modules/zod/v4/core/schemas.d.cts +123 -34
- package/node_modules/zod/v4/core/schemas.d.ts +123 -34
- package/node_modules/zod/v4/core/schemas.js +753 -386
- package/node_modules/zod/v4/core/standard-schema.cjs +19 -0
- package/node_modules/zod/v4/core/to-json-schema.cjs +269 -45
- package/node_modules/zod/v4/core/to-json-schema.d.cts +45 -5
- package/node_modules/zod/v4/core/to-json-schema.d.ts +45 -5
- package/node_modules/zod/v4/core/to-json-schema.js +247 -44
- package/node_modules/zod/v4/core/util.cjs +372 -157
- package/node_modules/zod/v4/core/util.d.cts +79 -1
- package/node_modules/zod/v4/core/util.d.ts +79 -1
- package/node_modules/zod/v4/core/util.js +341 -156
- package/node_modules/zod/v4/core/versions.cjs +21 -2
- package/node_modules/zod/v4/core/versions.d.cts +1 -1
- package/node_modules/zod/v4/core/versions.d.ts +1 -1
- package/node_modules/zod/v4/core/versions.js +2 -2
- package/node_modules/zod/v4/core/visit.cjs +214 -0
- package/node_modules/zod/v4/core/visit.d.cts +30 -0
- package/node_modules/zod/v4/core/visit.d.ts +30 -0
- package/node_modules/zod/v4/core/visit.js +169 -0
- package/node_modules/zod/v4/index.cjs +34 -5
- package/node_modules/zod/v4/index.d.cts +2 -2
- package/node_modules/zod/v4/index.d.ts +2 -2
- package/node_modules/zod/v4/index.js +3 -2
- package/node_modules/zod/v4/locales/ar.cjs +5 -0
- package/node_modules/zod/v4/locales/ar.js +5 -0
- package/node_modules/zod/v4/locales/az.cjs +5 -0
- package/node_modules/zod/v4/locales/az.js +5 -0
- package/node_modules/zod/v4/locales/be.cjs +12 -0
- package/node_modules/zod/v4/locales/be.js +12 -0
- package/node_modules/zod/v4/locales/bg.cjs +5 -0
- package/node_modules/zod/v4/locales/bg.js +5 -0
- package/node_modules/zod/v4/locales/bn.cjs +140 -0
- package/node_modules/zod/v4/locales/bn.d.cts +5 -0
- package/node_modules/zod/v4/locales/bn.d.ts +4 -0
- package/node_modules/zod/v4/locales/bn.js +113 -0
- package/node_modules/zod/v4/locales/ca.cjs +5 -0
- package/node_modules/zod/v4/locales/ca.js +5 -0
- package/node_modules/zod/v4/locales/ckb.cjs +160 -0
- package/node_modules/zod/v4/locales/ckb.d.cts +5 -0
- package/node_modules/zod/v4/locales/ckb.d.ts +4 -0
- package/node_modules/zod/v4/locales/ckb.js +133 -0
- package/node_modules/zod/v4/locales/cs.cjs +5 -0
- package/node_modules/zod/v4/locales/cs.js +5 -0
- package/node_modules/zod/v4/locales/da.cjs +7 -2
- package/node_modules/zod/v4/locales/da.js +7 -2
- package/node_modules/zod/v4/locales/de.cjs +5 -0
- package/node_modules/zod/v4/locales/de.js +5 -0
- package/node_modules/zod/v4/locales/el.cjs +3 -0
- package/node_modules/zod/v4/locales/el.js +3 -0
- package/node_modules/zod/v4/locales/en.cjs +16 -4
- package/node_modules/zod/v4/locales/en.js +16 -4
- package/node_modules/zod/v4/locales/eo.cjs +5 -0
- package/node_modules/zod/v4/locales/eo.js +5 -0
- package/node_modules/zod/v4/locales/es.cjs +4 -0
- package/node_modules/zod/v4/locales/es.js +4 -0
- package/node_modules/zod/v4/locales/fa.cjs +5 -0
- package/node_modules/zod/v4/locales/fa.js +5 -0
- package/node_modules/zod/v4/locales/fi.cjs +5 -0
- package/node_modules/zod/v4/locales/fi.js +5 -0
- package/node_modules/zod/v4/locales/fr-CA.cjs +5 -0
- package/node_modules/zod/v4/locales/fr-CA.js +5 -0
- package/node_modules/zod/v4/locales/fr.cjs +18 -14
- package/node_modules/zod/v4/locales/fr.js +18 -14
- package/node_modules/zod/v4/locales/gu.cjs +140 -0
- package/node_modules/zod/v4/locales/gu.d.cts +5 -0
- package/node_modules/zod/v4/locales/gu.d.ts +4 -0
- package/node_modules/zod/v4/locales/gu.js +113 -0
- package/node_modules/zod/v4/locales/he.cjs +7 -0
- package/node_modules/zod/v4/locales/he.js +7 -0
- package/node_modules/zod/v4/locales/hi.cjs +138 -0
- package/node_modules/zod/v4/locales/hi.d.cts +5 -0
- package/node_modules/zod/v4/locales/hi.d.ts +4 -0
- package/node_modules/zod/v4/locales/hi.js +111 -0
- package/node_modules/zod/v4/locales/hr.cjs +4 -0
- package/node_modules/zod/v4/locales/hr.js +4 -0
- package/node_modules/zod/v4/locales/hu.cjs +5 -0
- package/node_modules/zod/v4/locales/hu.js +5 -0
- package/node_modules/zod/v4/locales/hy.cjs +11 -0
- package/node_modules/zod/v4/locales/hy.js +11 -0
- package/node_modules/zod/v4/locales/id.cjs +5 -0
- package/node_modules/zod/v4/locales/id.js +5 -0
- package/node_modules/zod/v4/locales/index.cjs +43 -2
- package/node_modules/zod/v4/locales/index.d.cts +11 -0
- package/node_modules/zod/v4/locales/index.d.ts +11 -0
- package/node_modules/zod/v4/locales/index.js +11 -0
- package/node_modules/zod/v4/locales/is.cjs +5 -0
- package/node_modules/zod/v4/locales/is.js +5 -0
- package/node_modules/zod/v4/locales/it.cjs +5 -0
- package/node_modules/zod/v4/locales/it.js +5 -0
- package/node_modules/zod/v4/locales/ja.cjs +5 -0
- package/node_modules/zod/v4/locales/ja.js +5 -0
- package/node_modules/zod/v4/locales/ka.cjs +5 -0
- package/node_modules/zod/v4/locales/ka.js +5 -0
- package/node_modules/zod/v4/locales/km.cjs +5 -0
- package/node_modules/zod/v4/locales/km.js +5 -0
- package/node_modules/zod/v4/locales/kn.cjs +143 -0
- package/node_modules/zod/v4/locales/kn.d.cts +5 -0
- package/node_modules/zod/v4/locales/kn.d.ts +4 -0
- package/node_modules/zod/v4/locales/kn.js +116 -0
- package/node_modules/zod/v4/locales/ko.cjs +5 -0
- package/node_modules/zod/v4/locales/ko.js +5 -0
- package/node_modules/zod/v4/locales/lt.cjs +4 -0
- package/node_modules/zod/v4/locales/lt.js +4 -0
- package/node_modules/zod/v4/locales/mk.cjs +5 -0
- package/node_modules/zod/v4/locales/mk.js +5 -0
- package/node_modules/zod/v4/locales/ms.cjs +5 -0
- package/node_modules/zod/v4/locales/ms.js +5 -0
- package/node_modules/zod/v4/locales/ne.cjs +138 -0
- package/node_modules/zod/v4/locales/ne.d.cts +5 -0
- package/node_modules/zod/v4/locales/ne.d.ts +4 -0
- package/node_modules/zod/v4/locales/ne.js +111 -0
- package/node_modules/zod/v4/locales/nl.cjs +5 -0
- package/node_modules/zod/v4/locales/nl.js +5 -0
- package/node_modules/zod/v4/locales/nn.cjs +140 -0
- package/node_modules/zod/v4/locales/nn.d.cts +5 -0
- package/node_modules/zod/v4/locales/nn.d.ts +4 -0
- package/node_modules/zod/v4/locales/nn.js +113 -0
- package/node_modules/zod/v4/locales/no.cjs +7 -2
- package/node_modules/zod/v4/locales/no.js +7 -2
- package/node_modules/zod/v4/locales/ota.cjs +5 -0
- package/node_modules/zod/v4/locales/ota.js +5 -0
- package/node_modules/zod/v4/locales/pl.cjs +5 -0
- package/node_modules/zod/v4/locales/pl.js +5 -0
- package/node_modules/zod/v4/locales/ps.cjs +5 -0
- package/node_modules/zod/v4/locales/ps.js +5 -0
- package/node_modules/zod/v4/locales/pt-BR.cjs +170 -0
- package/node_modules/zod/v4/locales/pt-BR.d.cts +5 -0
- package/node_modules/zod/v4/locales/pt-BR.d.ts +4 -0
- package/node_modules/zod/v4/locales/pt-BR.js +143 -0
- package/node_modules/zod/v4/locales/pt.cjs +89 -55
- package/node_modules/zod/v4/locales/pt.js +89 -55
- package/node_modules/zod/v4/locales/ro.cjs +3 -0
- package/node_modules/zod/v4/locales/ro.js +3 -0
- package/node_modules/zod/v4/locales/ru.cjs +12 -0
- package/node_modules/zod/v4/locales/ru.js +12 -0
- package/node_modules/zod/v4/locales/sk.cjs +143 -0
- package/node_modules/zod/v4/locales/sk.d.cts +5 -0
- package/node_modules/zod/v4/locales/sk.d.ts +4 -0
- package/node_modules/zod/v4/locales/sk.js +116 -0
- package/node_modules/zod/v4/locales/sl.cjs +5 -0
- package/node_modules/zod/v4/locales/sl.js +5 -0
- package/node_modules/zod/v4/locales/sv.cjs +7 -2
- package/node_modules/zod/v4/locales/sv.js +7 -2
- package/node_modules/zod/v4/locales/ta.cjs +5 -0
- package/node_modules/zod/v4/locales/ta.js +5 -0
- package/node_modules/zod/v4/locales/tg.cjs +144 -0
- package/node_modules/zod/v4/locales/tg.d.cts +5 -0
- package/node_modules/zod/v4/locales/tg.d.ts +4 -0
- package/node_modules/zod/v4/locales/tg.js +117 -0
- package/node_modules/zod/v4/locales/th.cjs +5 -0
- package/node_modules/zod/v4/locales/th.js +5 -0
- package/node_modules/zod/v4/locales/tk.cjs +134 -0
- package/node_modules/zod/v4/locales/tk.d.cts +5 -0
- package/node_modules/zod/v4/locales/tk.d.ts +4 -0
- package/node_modules/zod/v4/locales/tk.js +107 -0
- package/node_modules/zod/v4/locales/tr.cjs +5 -0
- package/node_modules/zod/v4/locales/tr.js +5 -0
- package/node_modules/zod/v4/locales/uk.cjs +5 -0
- package/node_modules/zod/v4/locales/uk.js +5 -0
- package/node_modules/zod/v4/locales/ur.cjs +5 -0
- package/node_modules/zod/v4/locales/ur.js +5 -0
- package/node_modules/zod/v4/locales/uz.cjs +3 -0
- package/node_modules/zod/v4/locales/uz.js +3 -0
- package/node_modules/zod/v4/locales/vi.cjs +5 -0
- package/node_modules/zod/v4/locales/vi.js +5 -0
- package/node_modules/zod/v4/locales/yo.cjs +5 -0
- package/node_modules/zod/v4/locales/yo.js +5 -0
- package/node_modules/zod/v4/locales/zh-CN.cjs +5 -0
- package/node_modules/zod/v4/locales/zh-CN.js +5 -0
- package/node_modules/zod/v4/locales/zh-TW.cjs +5 -0
- package/node_modules/zod/v4/locales/zh-TW.js +5 -0
- package/node_modules/zod/v4/mini/checks.cjs +21 -1
- package/node_modules/zod/v4/mini/checks.d.cts +1 -1
- package/node_modules/zod/v4/mini/checks.d.ts +1 -1
- package/node_modules/zod/v4/mini/checks.js +1 -1
- package/node_modules/zod/v4/mini/coerce.cjs +19 -0
- package/node_modules/zod/v4/mini/deep-partial.cjs +58 -0
- package/node_modules/zod/v4/mini/deep-partial.d.cts +14 -0
- package/node_modules/zod/v4/mini/deep-partial.d.ts +14 -0
- package/node_modules/zod/v4/mini/deep-partial.js +13 -0
- package/node_modules/zod/v4/mini/external.cjs +33 -1
- package/node_modules/zod/v4/mini/external.d.cts +5 -2
- package/node_modules/zod/v4/mini/external.d.ts +5 -2
- package/node_modules/zod/v4/mini/external.js +3 -1
- package/node_modules/zod/v4/mini/in-out.cjs +82 -0
- package/node_modules/zod/v4/mini/in-out.d.cts +8 -0
- package/node_modules/zod/v4/mini/in-out.d.ts +8 -0
- package/node_modules/zod/v4/mini/in-out.js +36 -0
- package/node_modules/zod/v4/mini/index.cjs +19 -0
- package/node_modules/zod/v4/mini/iso.cjs +19 -0
- package/node_modules/zod/v4/mini/parse.cjs +22 -1
- package/node_modules/zod/v4/mini/parse.d.cts +1 -1
- package/node_modules/zod/v4/mini/parse.d.ts +1 -1
- package/node_modules/zod/v4/mini/parse.js +1 -1
- package/node_modules/zod/v4/mini/schemas.cjs +117 -53
- package/node_modules/zod/v4/mini/schemas.d.cts +49 -14
- package/node_modules/zod/v4/mini/schemas.d.ts +49 -14
- package/node_modules/zod/v4/mini/schemas.js +92 -51
- package/node_modules/zod/v4-mini/index.cjs +19 -0
- package/package.json +172 -11
- package/dist/acp/index.js +0 -62
- package/dist/extensions/tool-gradle.js +0 -1
- package/dist/extensions/usage.js +0 -1
- package/node_modules/jose/dist/webapi/lib/base64.js +0 -22
- package/node_modules/jose/dist/webapi/lib/crypto_key.js +0 -28
- package/node_modules/jose/dist/webapi/lib/helpers.js +0 -42
- package/node_modules/jose/dist/webapi/lib/invalid_key_input.js +0 -26
- package/node_modules/jose/dist/webapi/lib/is_key_like.js +0 -17
- package/node_modules/jose/dist/webapi/lib/jwk_to_key.js +0 -17
- package/node_modules/jose/dist/webapi/lib/options.js +0 -48
- package/node_modules/jose/dist/webapi/lib/signing.js +0 -26
- package/node_modules/jose/dist/webapi/lib/type_checks.js +0 -35
- package/node_modules/pi-subagents/src/runs/foreground/chain-clarify.ts +0 -1354
- package/node_modules/pi-subagents/src/runs/foreground/chain-execution.ts +0 -1530
- package/node_modules/pi-subagents/src/runs/shared/turn-budget.ts +0 -98
- package/node_modules/zod/src/v4/core/config.ts +0 -15
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/LICENSE +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/README.md +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/bin.mjs +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/compose/compose-collection.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/compose/compose-doc.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/compose/compose-node.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/compose/compose-scalar.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/compose/composer.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/compose/resolve-block-map.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/compose/resolve-block-scalar.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/compose/resolve-block-seq.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/compose/resolve-end.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/compose/resolve-flow-collection.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/compose/resolve-flow-scalar.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/compose/resolve-props.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/compose/util-contains-newline.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/compose/util-empty-scalar-position.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/compose/util-flow-indent-check.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/compose/util-map-includes.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/doc/Document.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/doc/anchors.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/doc/applyReviver.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/doc/createNode.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/doc/directives.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/errors.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/index.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/log.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/nodes/Alias.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/nodes/Collection.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/nodes/Node.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/nodes/Pair.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/nodes/Scalar.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/nodes/YAMLMap.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/nodes/YAMLSeq.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/nodes/addPairToJSMap.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/nodes/identity.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/nodes/toJS.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/parse/cst-scalar.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/parse/cst-stringify.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/parse/cst-visit.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/parse/cst.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/parse/lexer.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/parse/line-counter.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/parse/parser.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/public-api.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/Schema.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/common/map.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/common/null.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/common/seq.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/common/string.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/core/bool.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/core/float.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/core/int.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/core/schema.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/json/schema.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/tags.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/yaml-1.1/binary.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/yaml-1.1/bool.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/yaml-1.1/float.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/yaml-1.1/int.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/yaml-1.1/merge.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/yaml-1.1/omap.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/yaml-1.1/pairs.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/yaml-1.1/schema.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/yaml-1.1/set.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/yaml-1.1/timestamp.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/stringify/foldFlowLines.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/stringify/stringify.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/stringify/stringifyCollection.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/stringify/stringifyComment.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/stringify/stringifyDocument.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/stringify/stringifyNumber.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/stringify/stringifyPair.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/stringify/stringifyString.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/util.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/visit.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/index.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/package.json +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/cli.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/cli.mjs +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/compose-collection.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/compose-collection.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/compose-doc.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/compose-doc.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/compose-node.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/compose-node.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/compose-scalar.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/compose-scalar.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/composer.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/composer.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/resolve-block-map.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/resolve-block-map.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/resolve-block-scalar.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/resolve-block-scalar.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/resolve-block-seq.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/resolve-block-seq.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/resolve-end.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/resolve-end.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/resolve-flow-collection.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/resolve-flow-collection.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/resolve-flow-scalar.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/resolve-flow-scalar.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/resolve-props.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/resolve-props.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/util-contains-newline.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/util-contains-newline.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/util-empty-scalar-position.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/util-empty-scalar-position.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/util-flow-indent-check.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/util-flow-indent-check.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/util-map-includes.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/util-map-includes.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/doc/Document.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/doc/Document.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/doc/anchors.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/doc/anchors.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/doc/applyReviver.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/doc/applyReviver.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/doc/createNode.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/doc/createNode.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/doc/directives.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/doc/directives.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/errors.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/errors.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/index.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/index.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/log.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/log.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/nodes/Alias.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/nodes/Alias.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/nodes/Collection.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/nodes/Collection.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/nodes/Node.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/nodes/Node.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/nodes/Pair.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/nodes/Pair.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/nodes/Scalar.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/nodes/Scalar.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/nodes/YAMLMap.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/nodes/YAMLMap.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/nodes/YAMLSeq.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/nodes/YAMLSeq.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/nodes/addPairToJSMap.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/nodes/addPairToJSMap.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/nodes/identity.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/nodes/identity.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/nodes/toJS.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/nodes/toJS.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/options.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/parse/cst-scalar.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/parse/cst-scalar.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/parse/cst-stringify.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/parse/cst-stringify.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/parse/cst-visit.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/parse/cst-visit.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/parse/cst.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/parse/cst.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/parse/lexer.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/parse/lexer.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/parse/line-counter.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/parse/line-counter.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/parse/parser.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/parse/parser.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/public-api.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/public-api.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/Schema.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/Schema.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/common/map.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/common/map.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/common/null.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/common/null.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/common/seq.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/common/seq.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/common/string.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/common/string.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/core/bool.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/core/bool.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/core/float.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/core/float.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/core/int.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/core/int.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/core/schema.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/core/schema.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/json/schema.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/json/schema.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/json-schema.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/tags.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/tags.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/types.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/yaml-1.1/binary.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/yaml-1.1/binary.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/yaml-1.1/bool.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/yaml-1.1/bool.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/yaml-1.1/float.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/yaml-1.1/float.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/yaml-1.1/int.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/yaml-1.1/int.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/yaml-1.1/merge.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/yaml-1.1/merge.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/yaml-1.1/omap.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/yaml-1.1/omap.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/yaml-1.1/pairs.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/yaml-1.1/pairs.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/yaml-1.1/schema.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/yaml-1.1/schema.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/yaml-1.1/set.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/yaml-1.1/set.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/yaml-1.1/timestamp.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/yaml-1.1/timestamp.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/stringify/foldFlowLines.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/stringify/foldFlowLines.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/stringify/stringify.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/stringify/stringify.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/stringify/stringifyCollection.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/stringify/stringifyCollection.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/stringify/stringifyComment.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/stringify/stringifyComment.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/stringify/stringifyDocument.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/stringify/stringifyDocument.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/stringify/stringifyNumber.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/stringify/stringifyNumber.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/stringify/stringifyPair.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/stringify/stringifyPair.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/stringify/stringifyString.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/stringify/stringifyString.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/test-events.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/test-events.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/util.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/util.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/visit.d.ts +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/visit.js +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/package.json +0 -0
- /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/util.js +0 -0
package/dist/cli/engine.js
CHANGED
|
@@ -1,167 +1,121 @@
|
|
|
1
1
|
// Pure helpers for the user-facing CLI. Kept free of side effects so they can be
|
|
2
2
|
// unit-tested without spawning anything.
|
|
3
3
|
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
import {
|
|
5
|
+
accessSync,
|
|
6
|
+
constants,
|
|
7
|
+
copyFileSync,
|
|
8
|
+
existsSync,
|
|
9
|
+
lstatSync,
|
|
10
|
+
mkdirSync,
|
|
11
|
+
readFileSync,
|
|
12
|
+
readlinkSync,
|
|
13
|
+
renameSync,
|
|
14
|
+
rmSync,
|
|
15
|
+
statSync,
|
|
16
|
+
symlinkSync,
|
|
17
|
+
writeFileSync,
|
|
18
|
+
} from "node:fs";
|
|
19
|
+
import { basename, delimiter, dirname, isAbsolute, join, resolve, sep } from "node:path";
|
|
20
|
+
import { homedir, platform } from "node:os";
|
|
21
|
+
import { fileURLToPath } from "node:url";
|
|
22
|
+
import { randomBytes } from "node:crypto";
|
|
7
23
|
|
|
8
24
|
export const ENGINE_PACKAGE = "@earendil-works/pi-coding-agent";
|
|
9
25
|
|
|
10
26
|
export const SELF_PACKAGE = "@explyt/ai-agent";
|
|
11
27
|
|
|
12
28
|
/**
|
|
13
|
-
*
|
|
29
|
+
* The name the engine presents itself under: its TUI header, terminal title, `/help`,
|
|
30
|
+
* dialog texts, process title and debug-log name.
|
|
14
31
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
32
|
+
* ONE WORD, deliberately. The engine derives the name of its configuration-directory
|
|
33
|
+
* variable from this string (`${name.toUpperCase()}_CODING_AGENT_DIR`,
|
|
34
|
+
* `dist/config.js`), and a space would put a space into an environment variable
|
|
35
|
+
* name. The full product name goes into the header our own extension draws.
|
|
18
36
|
*/
|
|
19
|
-
export
|
|
20
|
-
return typeof resolvedFrom === "string" && /^https?:\/\//.test(resolvedFrom);
|
|
21
|
-
}
|
|
37
|
+
export const ENGINE_BRAND = "Explyt";
|
|
22
38
|
|
|
23
39
|
/**
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* Honours `XDG_DATA_HOME`, falling back to `~/.local/share` as the spec prescribes.
|
|
27
|
-
* A sibling of the `local-release` directory that `scripts/setup.mjs` manages, so
|
|
28
|
-
* the published wrapper and a locally built release never overwrite each other.
|
|
40
|
+
* Engine variable naming the directory it keeps its configuration in, as the
|
|
41
|
+
* UNBRANDED engine and the third-party extensions we bundle spell it.
|
|
29
42
|
*
|
|
30
|
-
* The
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
* `local-release`, leaving two places to look on Windows instead of one.
|
|
43
|
+
* The engine resolves it as `$PI_CODING_AGENT_DIR ?? ~/.pi/agent`
|
|
44
|
+
* (`@earendil-works/pi-coding-agent/dist/config.js`, `getAgentDir`), and the whole
|
|
45
|
+
* configuration tree hangs off that one root: `auth.json`, `models.json`,
|
|
46
|
+
* `settings.json`, `sessions/`, `bin/`, `prompts/`, `tools/`.
|
|
35
47
|
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
48
|
+
* This spelling stays even though the engine is rebranded: `pi-subagents` reads the
|
|
49
|
+
* literal `PI_CODING_AGENT_DIR` (`src/shared/utils.ts`), `pi-mcp-adapter` falls back to
|
|
50
|
+
* it, and so does the ACP adapter fork (`vendor/pi-acp/src/acp/agent-dir.ts`). All of
|
|
51
|
+
* them live in the same engine process and must agree on one directory.
|
|
39
52
|
*/
|
|
40
|
-
export
|
|
41
|
-
const configured = typeof xdgDataHome === "string" ? xdgDataHome.trim() : "";
|
|
42
|
-
const base = configured && isAbsolute(configured) ? configured : join(home, ".local", "share");
|
|
43
|
-
return join(base, "explyt-ai-agent", "installed");
|
|
44
|
-
}
|
|
53
|
+
export const AGENT_DIR_ENV = "PI_CODING_AGENT_DIR";
|
|
45
54
|
|
|
46
55
|
/**
|
|
47
|
-
*
|
|
56
|
+
* The same variable as the BRANDED engine spells it.
|
|
48
57
|
*
|
|
49
|
-
*
|
|
58
|
+
* The engine builds this name from `piConfig.name` at load time, so it follows
|
|
59
|
+
* ENGINE_BRAND mechanically. Set alongside AGENT_DIR_ENV with the same value: with only
|
|
60
|
+
* the old name the engine silently falls back to `~/.pi/agent`; with only the new one
|
|
61
|
+
* the bundled extensions do. A test pins that the engine really derives THIS name.
|
|
50
62
|
*
|
|
51
|
-
* The
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
* are then picked up live, which is the whole point of developing against it.
|
|
63
|
+
* The engine derives `${NAME}_CODING_AGENT_SESSION_DIR` the same way. It is not
|
|
64
|
+
* mirrored here because this project never sets it -- sessions live under the agent
|
|
65
|
+
* directory above -- but a developer exporting `PI_CODING_AGENT_SESSION_DIR` by hand
|
|
66
|
+
* should know the branded engine no longer reads that spelling.
|
|
56
67
|
*/
|
|
57
|
-
export
|
|
58
|
-
return lockPathFor(packageRoot) !== null;
|
|
59
|
-
}
|
|
68
|
+
export const BRANDED_AGENT_DIR_ENV = `${ENGINE_BRAND.toUpperCase()}_CODING_AGENT_DIR`;
|
|
60
69
|
|
|
61
70
|
/**
|
|
62
|
-
*
|
|
71
|
+
* Silences the engine's "New version X is available. Run `<name> update`" banner.
|
|
63
72
|
*
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
73
|
+
* Under our brand that banner would tell the user to run `Explyt update` -- a command
|
|
74
|
+
* that does not exist -- and link them to the engine's own changelog. The engine's
|
|
75
|
+
* version is pinned by the wrapper's release, so the check is meaningless here anyway.
|
|
67
76
|
*/
|
|
68
|
-
export
|
|
69
|
-
const normalised = relativePath.split(sep).join("/");
|
|
70
|
-
return normalised === "node_modules/@earendil-works"
|
|
71
|
-
|| normalised.startsWith("node_modules/@earendil-works/");
|
|
72
|
-
}
|
|
77
|
+
export const SKIP_VERSION_CHECK_ENV = "PI_SKIP_VERSION_CHECK";
|
|
73
78
|
|
|
74
79
|
/**
|
|
75
|
-
*
|
|
80
|
+
* Engine variable overriding where it looks for ITS OWN package directory.
|
|
76
81
|
*
|
|
77
|
-
*
|
|
78
|
-
* engine
|
|
79
|
-
*
|
|
80
|
-
* `
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
* we control is strictly cheaper.
|
|
82
|
+
* `getPackageDir()` in the engine's `dist/config.js` returns this when set, and
|
|
83
|
+
* everything the engine reads about itself hangs off that one directory: its
|
|
84
|
+
* `package.json` (name, version, `piConfig`), `docs/`, `examples/`, `README.md`,
|
|
85
|
+
* `CHANGELOG.md`, and under `dist/` its themes, export template and assets. Upstream
|
|
86
|
+
* added it for Nix/Guix store paths; it is also the one supported way to hand the engine
|
|
87
|
+
* a manifest that is not the installed one -- see `ensureEngineShim`.
|
|
84
88
|
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
89
|
+
* The name is literal, not derived from `piConfig.name`: it has to be readable before
|
|
90
|
+
* the manifest is.
|
|
87
91
|
*/
|
|
88
|
-
export
|
|
89
|
-
return installedRoot
|
|
90
|
-
? { source: installedRoot, kind: "copied" }
|
|
91
|
-
: { source: packageRoot, kind: "in-place" };
|
|
92
|
-
}
|
|
92
|
+
export const PACKAGE_DIR_ENV = "PI_PACKAGE_DIR";
|
|
93
93
|
|
|
94
94
|
/**
|
|
95
|
-
*
|
|
95
|
+
* Everything the engine resolves relative to `getPackageDir()`, and therefore
|
|
96
|
+
* everything the shim directory must contain.
|
|
96
97
|
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
* package
|
|
102
|
-
*
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
* registration from any of them: the current copied directory, a checkout
|
|
106
|
-
* registered in place, or an `npm:` spec written by an older build of this wrapper.
|
|
107
|
-
*
|
|
108
|
-
* The spec is intentionally unversioned. The engine matches npm packages by name
|
|
109
|
-
* (verified: an unversioned remove clears a versioned entry), which lets a newer
|
|
110
|
-
* build uninstall a registration written by an older one.
|
|
98
|
+
* Taken from `dist/config.js`: `getPackageJsonPath`, `getReadmePath`, `getDocsPath`,
|
|
99
|
+
* `getExamplesPath`, `getChangelogPath`, plus `getThemesDir`, `getExportTemplateDir`
|
|
100
|
+
* and `getInteractiveAssetsDir`, which all resolve under `dist/` in the node layout
|
|
101
|
+
* (the bare `theme`, `export-html`, `assets` spellings in that file are the Bun-binary
|
|
102
|
+
* layout, which we never run). `package.json` is the shim's own file, so it is not a
|
|
103
|
+
* link. A test greps that file for `join(getPackageDir(), "<x>")` and fails when an
|
|
104
|
+
* entry appears here that is not covered -- an upstream addition would otherwise be a
|
|
105
|
+
* silent ENOENT at some later feature.
|
|
111
106
|
*/
|
|
112
|
-
export
|
|
113
|
-
const sources = [];
|
|
114
|
-
if (installedRoot) sources.push(installedRoot);
|
|
115
|
-
if (packageRoot !== installedRoot) sources.push(packageRoot);
|
|
116
|
-
sources.push(`npm:${SELF_PACKAGE}`);
|
|
117
|
-
return sources;
|
|
118
|
-
}
|
|
107
|
+
export const ENGINE_SHIM_LINKS = Object.freeze(["dist", "docs", "examples", "README.md", "CHANGELOG.md"]);
|
|
119
108
|
|
|
120
109
|
/**
|
|
121
|
-
*
|
|
122
|
-
* cannot exist.
|
|
110
|
+
* Flag that pins the agent to exactly one package of resources: ours.
|
|
123
111
|
*
|
|
124
|
-
* The
|
|
125
|
-
*
|
|
126
|
-
*
|
|
112
|
+
* The name is historical -- it was introduced for developing against a checkout --
|
|
113
|
+
* and it is INTERNAL, travelling only from this wrapper to the ACP adapter we ship
|
|
114
|
+
* in the same tarball. The adapter expands it into the engine's isolation flags plus
|
|
115
|
+
* `--extension <path>` for every engine process it spawns; `devPackageArgs()` in
|
|
116
|
+
* vendor/pi-acp/src/cli.ts is the authoritative list.
|
|
127
117
|
*/
|
|
128
|
-
export
|
|
129
|
-
const at = packageRoot.lastIndexOf(`node_modules${sep}`);
|
|
130
|
-
if (at === -1) return null;
|
|
131
|
-
return join(packageRoot.slice(0, at), "node_modules", ".package-lock.json");
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
/**
|
|
135
|
-
* `resolved` recorded for THIS package, or null when absent.
|
|
136
|
-
*
|
|
137
|
-
* The key is derived from the real location instead of matching any key that ends
|
|
138
|
-
* with our package name: a nested duplicate
|
|
139
|
-
* (`node_modules/other/node_modules/@explyt/ai-agent`) would otherwise win when it
|
|
140
|
-
* happens to come first in the object, and report a different origin than ours.
|
|
141
|
-
*/
|
|
142
|
-
export function resolvedFromLock(lock, packageRoot) {
|
|
143
|
-
const at = packageRoot.lastIndexOf(`node_modules${sep}`);
|
|
144
|
-
if (at === -1) return null;
|
|
145
|
-
const key = packageRoot.slice(at).split(sep).join("/");
|
|
146
|
-
return lock?.packages?.[key]?.resolved ?? null;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
/**
|
|
150
|
-
* Entries in settings' `packages` that refer to THIS agent.
|
|
151
|
-
*
|
|
152
|
-
* Used to tell a real uninstall from the engine's silent no-op. Path entries are
|
|
153
|
-
* stored relative to the settings file, so they are resolved before comparison.
|
|
154
|
-
*/
|
|
155
|
-
export function selfRegistrations(packages, { packageRoot, installedRoot, settingsDir }) {
|
|
156
|
-
const ourPaths = [packageRoot, installedRoot].filter(Boolean).map((p) => resolve(p));
|
|
157
|
-
return (Array.isArray(packages) ? packages : []).filter((entry) => {
|
|
158
|
-
const source = typeof entry === "string" ? entry : entry?.source;
|
|
159
|
-
if (typeof source !== "string") return false;
|
|
160
|
-
if (source.startsWith(`npm:${SELF_PACKAGE}`)) return true;
|
|
161
|
-
if (source.startsWith("npm:") || source.startsWith("git:") || source.startsWith("http")) return false;
|
|
162
|
-
return ourPaths.includes(resolve(settingsDir, source));
|
|
163
|
-
});
|
|
164
|
-
}
|
|
118
|
+
export const ISOLATION_FLAG = "--dev-package";
|
|
165
119
|
|
|
166
120
|
/** npm writes `pi` on POSIX and `pi.cmd` on Windows. */
|
|
167
121
|
export function engineShimName(os = platform()) {
|
|
@@ -293,8 +247,584 @@ export function withEnginePath(env, binDir) {
|
|
|
293
247
|
return { ...env, PATH: current ? `${binDir}${delimiter}${current}` : binDir };
|
|
294
248
|
}
|
|
295
249
|
|
|
296
|
-
/**
|
|
297
|
-
|
|
250
|
+
/**
|
|
251
|
+
* The one parent directory everything this project writes lives under.
|
|
252
|
+
*
|
|
253
|
+
* The layout is XDG-like on EVERY platform -- no `%LOCALAPPDATA%`, no
|
|
254
|
+
* `~/Library/Application Support` -- so that every directory this project owns is a
|
|
255
|
+
* sibling of the others: one place to inspect, one to delete. The engine we embed is
|
|
256
|
+
* home-relative and free of platform branches itself, so a platform-specific layout
|
|
257
|
+
* here would make us the odd one out rather than the native one.
|
|
258
|
+
*
|
|
259
|
+
* A RELATIVE `XDG_DATA_HOME` is ignored, as the XDG specification requires: honouring
|
|
260
|
+
* it would resolve the path against the current working directory and scatter our
|
|
261
|
+
* data wherever the program happened to be started from.
|
|
262
|
+
*
|
|
263
|
+
* This function exists so that rule lives in exactly ONE place. It did not, and the
|
|
264
|
+
* two halves disagreed: the agent's own state followed `XDG_DATA_HOME` while the
|
|
265
|
+
* local-release installer in `scripts/setup.mjs` ignored it, so relocating user data
|
|
266
|
+
* split this project's tree across two parents. A copy of the rule is what allowed
|
|
267
|
+
* that, which is why callers must derive their directory from here rather than
|
|
268
|
+
* rebuilding the base themselves.
|
|
269
|
+
*/
|
|
270
|
+
export function appDataDir(env = process.env, home = homedir()) {
|
|
271
|
+
const dataHome = env.XDG_DATA_HOME;
|
|
272
|
+
const base = typeof dataHome === "string" && isAbsolute(dataHome)
|
|
273
|
+
? dataHome
|
|
274
|
+
: join(home, ".local", "share");
|
|
275
|
+
return join(base, "explyt-ai-agent");
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* Directory this agent keeps ITS engine configuration in.
|
|
280
|
+
*
|
|
281
|
+
* The agent is a product of its own, so its credentials, model catalogue, settings
|
|
282
|
+
* and sessions are its own too: they live here rather than in the `~/.pi/agent`
|
|
283
|
+
* directory belonging to a pi the user may also run by hand. Sharing that directory
|
|
284
|
+
* made the agent read and rewrite another program's credential file, and left the
|
|
285
|
+
* model choice a property of the machine rather than of the pinned version.
|
|
286
|
+
*/
|
|
287
|
+
export function agentConfigDir(env = process.env, home = homedir()) {
|
|
288
|
+
return join(appDataDir(env, home), "agent");
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* Env with the engine pointed at this agent's own configuration directory.
|
|
293
|
+
*
|
|
294
|
+
* Set once in our own process before the adapter is imported: the adapter passes
|
|
295
|
+
* `env: process.env` to every engine it spawns, so the child inherits it. That is the
|
|
296
|
+
* only channel available -- one of our IDE clients can pass a backend nothing but
|
|
297
|
+
* `command` and `args`, and the ACP host it embeds forwards a fixed whitelist of
|
|
298
|
+
* variables (HOME, PATH, SHELL, TERM, USER), so nothing set outside would reach us.
|
|
299
|
+
*
|
|
300
|
+
* An explicit value is never overwritten, for the same reason `withIsolation` never
|
|
301
|
+
* overwrites an explicit `--dev-package`: a developer pointing the agent at a
|
|
302
|
+
* scratch directory must not have it silently replaced by the product default.
|
|
303
|
+
*
|
|
304
|
+
* An explicit value IS normalised, the way the engine normalises it (`getAgentDir` ->
|
|
305
|
+
* `expandTildePath` -> `normalizePath` in `dist/utils/paths.js`): `~` and `~/x` expand
|
|
306
|
+
* against the home directory, a `file://` URL becomes a path, and the result is made
|
|
307
|
+
* absolute. The wrapper reads this directory itself -- `ensureAgentSettings` writes
|
|
308
|
+
* into it and `engineShimDir` builds next to it -- so it has to read the SAME directory
|
|
309
|
+
* the engine will: with `PI_CODING_AGENT_DIR=~/x` taken literally, the settings landed
|
|
310
|
+
* in a directory named `~` while the engine read `$HOME/x`. A whitespace-only value is
|
|
311
|
+
* treated as absent, like the empty string the engine already ignores.
|
|
312
|
+
*
|
|
313
|
+
* Not reproduced: the engine's `normalizeWindowsShellPath` (Git Bash `/c/x` -> `C:\x`),
|
|
314
|
+
* a win32-only branch this project has no way to exercise; a user who spells the
|
|
315
|
+
* directory in MSYS form on Windows gets a split until that is confirmed on a machine.
|
|
316
|
+
*/
|
|
317
|
+
export function withAgentDir(env, home = homedir()) {
|
|
318
|
+
// The unbranded name wins when both are set and disagree: it is the one every
|
|
319
|
+
// reader in the process understands, and two different directories in one process
|
|
320
|
+
// is the split this function exists to prevent.
|
|
321
|
+
const explicit = explicitAgentDir(env[AGENT_DIR_ENV], home) ?? explicitAgentDir(env[BRANDED_AGENT_DIR_ENV], home);
|
|
322
|
+
const dir = explicit ?? agentConfigDir(env, home);
|
|
323
|
+
return { ...env, [AGENT_DIR_ENV]: dir, [BRANDED_AGENT_DIR_ENV]: dir };
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
/** The engine's reading of an explicit agent-directory value; null when it counts as unset. */
|
|
327
|
+
function explicitAgentDir(value, home) {
|
|
328
|
+
if (typeof value !== "string" || value.trim() === "") return null;
|
|
329
|
+
let path = value;
|
|
330
|
+
if (path === "~") path = home;
|
|
331
|
+
else if (path.startsWith("~/") || (platform() === "win32" && path.startsWith("~\\"))) path = join(home, path.slice(2));
|
|
332
|
+
else if (/^file:\/\//.test(path)) path = fileURLToPath(path);
|
|
333
|
+
return resolve(path);
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
/**
|
|
337
|
+
* Directory the engine shim lives in: a SIBLING of the agent directory, never inside it.
|
|
338
|
+
*
|
|
339
|
+
* Inside would make it a resource root -- the engine scans its agent directory for
|
|
340
|
+
* `extensions/`, `skills/`, `prompts/`, and a `dist/` link pointing at the whole engine
|
|
341
|
+
* package would be walked as one. Next to it keeps it under the one parent this project
|
|
342
|
+
* owns, and moves with an explicit `PI_CODING_AGENT_DIR` (the agent directory's parent
|
|
343
|
+
* is what a developer relocating the state relocates).
|
|
344
|
+
*/
|
|
345
|
+
export function engineShimDir(env = process.env, home = homedir()) {
|
|
346
|
+
const agentDir = withAgentDir(env, home)[AGENT_DIR_ENV];
|
|
347
|
+
return join(dirname(agentDir), "engine");
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
/**
|
|
351
|
+
* Env for an engine we spawn: our configuration directory under both names, no update
|
|
352
|
+
* banner, and -- when the shim exists -- the shim as the engine's package directory.
|
|
353
|
+
* See the constants for why each is there.
|
|
354
|
+
*
|
|
355
|
+
* @param {object} env the environment to extend
|
|
356
|
+
* @param {string} [home] home directory, injectable for tests
|
|
357
|
+
* @param {{ shimDir?: string | null }} [options] `shimDir` is the result of
|
|
358
|
+
* `ensureEngineShim`; null (shim not created) REMOVES any inherited PI_PACKAGE_DIR so
|
|
359
|
+
* the engine runs from its installed directory and shows its own name. Inherited is
|
|
360
|
+
* not hypothetical: the ACP path assigns this env into `process.env`, and a user may
|
|
361
|
+
* have exported one -- either would point a shim-less engine at a foreign or stale
|
|
362
|
+
* directory instead of its own.
|
|
363
|
+
*/
|
|
364
|
+
export function engineEnv(env, home = homedir(), { shimDir = null } = {}) {
|
|
365
|
+
const result = { ...withAgentDir(env, home), [SKIP_VERSION_CHECK_ENV]: "1" };
|
|
366
|
+
if (shimDir) result[PACKAGE_DIR_ENV] = shimDir;
|
|
367
|
+
else delete result[PACKAGE_DIR_ENV];
|
|
368
|
+
return result;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
/**
|
|
372
|
+
* Settings the engine must start with in a configuration directory we own.
|
|
373
|
+
*
|
|
374
|
+
* `quietStartup` suppresses the engine's built-in startup header. Our own header
|
|
375
|
+
* replaces it through `ctx.ui.setHeader()` from the identity extension, but that hook
|
|
376
|
+
* runs on `session_start`, which the engine fires AFTER it has drawn its header and
|
|
377
|
+
* finished downloading its managed tools -- so for up to a second on a first run the
|
|
378
|
+
* user sees the engine's own name and its "Pi can explain its own features" sentence
|
|
379
|
+
* before ours appears. With the setting on, the engine mounts an empty header instead
|
|
380
|
+
* (`interactive-mode.js`, "Minimal header when silenced") and ours is the first thing
|
|
381
|
+
* drawn. The setting also hides the loaded-resources listing, which names the bundled
|
|
382
|
+
* packages by directory; it stays reachable through the engine's expand key.
|
|
383
|
+
*/
|
|
384
|
+
export const SEEDED_SETTINGS = Object.freeze({ quietStartup: true });
|
|
385
|
+
|
|
386
|
+
/**
|
|
387
|
+
* Writes SEEDED_SETTINGS into the agent directory's `settings.json`, adding only the
|
|
388
|
+
* keys that are absent.
|
|
389
|
+
*
|
|
390
|
+
* Absent, not different: a user who set `quietStartup: false` by hand asked for the
|
|
391
|
+
* engine's header and keeps it. The engine itself merges only the fields it modified
|
|
392
|
+
* into this file (`settings-manager.js`, `persistScopedSettings`), so a key seeded here
|
|
393
|
+
* survives the engine's own writes. Same temp+rename discipline as the manifest: the
|
|
394
|
+
* engine reads this file at every start and a truncated one is a load error.
|
|
395
|
+
*
|
|
396
|
+
* @param {string} agentDir the engine configuration directory
|
|
397
|
+
* @returns {{ status: "unchanged" | "seeded" | "failed", detail?: string }}
|
|
398
|
+
*/
|
|
399
|
+
export function ensureAgentSettings(agentDir, {
|
|
400
|
+
read = readFileSync,
|
|
401
|
+
write = writeFileSync,
|
|
402
|
+
rename = renameSync,
|
|
403
|
+
remove = rmSync,
|
|
404
|
+
mkdir = mkdirSync,
|
|
405
|
+
} = {}) {
|
|
406
|
+
const settingsPath = join(agentDir, "settings.json");
|
|
407
|
+
let current = {};
|
|
408
|
+
try {
|
|
409
|
+
current = JSON.parse(read(settingsPath, "utf8"));
|
|
410
|
+
} catch (error) {
|
|
411
|
+
if (error.code !== "ENOENT") {
|
|
412
|
+
// Malformed or unreadable: the engine will report that itself; do not paper over it.
|
|
413
|
+
return { status: "failed", detail: `cannot read ${settingsPath}: ${error.message}` };
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
if (current === null || typeof current !== "object" || Array.isArray(current)) {
|
|
417
|
+
return { status: "failed", detail: `${settingsPath} is not a JSON object` };
|
|
418
|
+
}
|
|
419
|
+
const missing = Object.entries(SEEDED_SETTINGS).filter(([key]) => !(key in current));
|
|
420
|
+
if (missing.length === 0) return { status: "unchanged" };
|
|
421
|
+
|
|
422
|
+
const seeded = { ...current, ...Object.fromEntries(missing) };
|
|
423
|
+
const tempPath = join(agentDir, `.settings.json.${process.pid}.${Date.now()}.tmp`);
|
|
424
|
+
try {
|
|
425
|
+
mkdir(agentDir, { recursive: true });
|
|
426
|
+
} catch (error) {
|
|
427
|
+
return { status: "failed", detail: `cannot create ${agentDir}: ${error.message}` };
|
|
428
|
+
}
|
|
429
|
+
const written = writeAtomically(settingsPath, tempPath, `${JSON.stringify(seeded, null, 2)}\n`, { write, rename, remove });
|
|
430
|
+
if (written !== null) return { status: "failed", detail: `cannot write ${settingsPath}: ${written.message}` };
|
|
431
|
+
return { status: "seeded" };
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
/**
|
|
435
|
+
* Writes `text` to `path` through `tempPath` + rename, so a reader never sees a
|
|
436
|
+
* truncated file. Returns null on success, the error otherwise. The temp file is
|
|
437
|
+
* removed on EITHER failure: a `write` that dies halfway (ENOSPC) leaves one behind
|
|
438
|
+
* just as a failed `rename` does, and each launch would add another.
|
|
439
|
+
*/
|
|
440
|
+
function writeAtomically(path, tempPath, text, { write, rename, remove }) {
|
|
441
|
+
try {
|
|
442
|
+
write(tempPath, text);
|
|
443
|
+
rename(tempPath, path);
|
|
444
|
+
return null;
|
|
445
|
+
} catch (error) {
|
|
446
|
+
try { remove(tempPath, { force: true }); } catch { /* the temp file is the lesser leftover */ }
|
|
447
|
+
return error;
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
/**
|
|
452
|
+
* Builds (or refreshes) the directory the engine is told is its own package.
|
|
453
|
+
*
|
|
454
|
+
* ## Why a shim and not the installed manifest
|
|
455
|
+
*
|
|
456
|
+
* The engine reads its `package.json` once at load and takes its display name, terminal
|
|
457
|
+
* title and the name of its configuration-directory variable from `piConfig.name` -- a
|
|
458
|
+
* mechanism upstream documents for forks. That file belongs to a peer dependency that
|
|
459
|
+
* npm installs into whatever prefix runs us (`release/`, an IDE's private prefix, the
|
|
460
|
+
* `npx` cache), sometimes deduplicated with a `pi` the user installed globally. Editing
|
|
461
|
+
* it in place worked but meant rewriting a file we do not own, in a directory that may
|
|
462
|
+
* be shared with another program: a global `pi` next to a global install of this package
|
|
463
|
+
* would silently start answering as ours.
|
|
464
|
+
*
|
|
465
|
+
* `PI_PACKAGE_DIR` is the engine's own override of where that manifest lives. So the
|
|
466
|
+
* wrapper keeps a directory of its own next to the agent directory holding a COPY of the
|
|
467
|
+
* engine's manifest with `piConfig.name` set, and links for everything else the engine
|
|
468
|
+
* resolves relative to its package directory (`ENGINE_SHIM_LINKS`). The engine runs
|
|
469
|
+
* from its installed `dist/`, reads its identity from our copy, and finds its docs,
|
|
470
|
+
* themes and assets through the links. Nothing under `node_modules` is touched, and the
|
|
471
|
+
* paths the engine prints about itself ("see .../docs/providers.md") are ours.
|
|
472
|
+
*
|
|
473
|
+
* ## Idempotence
|
|
474
|
+
*
|
|
475
|
+
* Rebuilt only when the shim no longer describes the installed engine; what "describes"
|
|
476
|
+
* checks is in `shimIsCurrent`. A version bump of the engine, an install in a new
|
|
477
|
+
* prefix, a reinstall of the same version with a changed manifest, or a link whose
|
|
478
|
+
* target is gone all rebuild the whole directory. The copy is `version`-exact on
|
|
479
|
+
* purpose -- the engine prints that version, and the self-update code compares it.
|
|
480
|
+
*
|
|
481
|
+
* ## Concurrency
|
|
482
|
+
*
|
|
483
|
+
* The rebuild is STAGED in a sibling directory and PUBLISHED by rename, never built in
|
|
484
|
+
* place: two wrappers (the IDE adapter and a terminal `login`) can start together on a
|
|
485
|
+
* first run or right after an engine bump, and an in-place `rm -rf` + rebuild would let
|
|
486
|
+
* one delete the directory the other was filling -- or the one an engine was already
|
|
487
|
+
* reading. With staging, the live directory is replaced by a whole one in a single
|
|
488
|
+
* rename; the loser of the race finds the winner's directory in the way, and if that
|
|
489
|
+
* directory is current, that is the result it wanted. No lock file: one that survives a
|
|
490
|
+
* crash would have to be aged out, and a wait loop belongs in neither of these
|
|
491
|
+
* launches.
|
|
492
|
+
*
|
|
493
|
+
* ## Failure
|
|
494
|
+
*
|
|
495
|
+
* Reported, not thrown, and the caller launches WITHOUT `PI_PACKAGE_DIR`: the engine then
|
|
496
|
+
* shows its own name, which is a cosmetic defect; a refused login is not. The manifest
|
|
497
|
+
* copy goes through temp + rename (same reason as `ensureAgentSettings`: the engine
|
|
498
|
+
* reads it at every start and a truncated one is a load error).
|
|
499
|
+
*
|
|
500
|
+
* ## Links and copies
|
|
501
|
+
*
|
|
502
|
+
* Directories are linked as `"junction"` so Windows needs no privilege (a junction is
|
|
503
|
+
* the one reparse type an unprivileged user may create; Node maps the type to a plain
|
|
504
|
+
* symlink elsewhere). Files (`README.md`, `CHANGELOG.md`) are COPIED, not linked: a file
|
|
505
|
+
* symlink on Windows needs Developer Mode or elevation, and failing the whole shim over
|
|
506
|
+
* two small text files the engine only shows on request would be the wrong trade. The
|
|
507
|
+
* copies are compared by size on every launch (see `shimIsCurrent`); a same-size edit
|
|
508
|
+
* of a file the engine only shows on request is the accepted blind spot.
|
|
509
|
+
*
|
|
510
|
+
* @param {string} engineDir directory of the installed engine (holds its package.json)
|
|
511
|
+
* @param {string} shimDir where the shim lives; see `engineShimDir`
|
|
512
|
+
* @param {object} [io] file operations, injectable for tests
|
|
513
|
+
* @returns {{ status: "unchanged" | "built" | "failed", shimDir: string | null, detail?: string }}
|
|
514
|
+
*/
|
|
515
|
+
export function ensureEngineShim(engineDir, shimDir, {
|
|
516
|
+
read = readFileSync,
|
|
517
|
+
write = writeFileSync,
|
|
518
|
+
rename = renameSync,
|
|
519
|
+
remove = rmSync,
|
|
520
|
+
mkdir = mkdirSync,
|
|
521
|
+
symlink = symlinkSync,
|
|
522
|
+
copy = copyFileSync,
|
|
523
|
+
readlink = readlinkSync,
|
|
524
|
+
lstat = lstatSync,
|
|
525
|
+
stat = statSync,
|
|
526
|
+
} = {}) {
|
|
527
|
+
const installedPath = join(engineDir, "package.json");
|
|
528
|
+
const shimManifestPath = join(shimDir, "package.json");
|
|
529
|
+
let installed;
|
|
530
|
+
try {
|
|
531
|
+
installed = JSON.parse(read(installedPath, "utf8"));
|
|
532
|
+
} catch (error) {
|
|
533
|
+
return { status: "failed", shimDir: null, detail: `cannot read ${installedPath}: ${error.message}` };
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
const branded = { ...installed, piConfig: { ...(installed.piConfig ?? {}), name: ENGINE_BRAND } };
|
|
537
|
+
const brandedText = `${JSON.stringify(branded, null, 2)}\n`;
|
|
538
|
+
const fsOps = { read, readlink, lstat, stat };
|
|
539
|
+
const linksOf = (dir) => ENGINE_SHIM_LINKS.map((entry) => [join(dir, entry), join(engineDir, entry)]);
|
|
540
|
+
|
|
541
|
+
if (shimIsCurrent(brandedText, shimManifestPath, linksOf(shimDir), fsOps)) {
|
|
542
|
+
return { status: "unchanged", shimDir };
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
// Stage in a sibling, publish by rename: see "Concurrency" above. The random part
|
|
546
|
+
// keeps two builds in one process (or two processes in one millisecond) apart.
|
|
547
|
+
const stamp = `${process.pid}.${Date.now()}.${randomBytes(4).toString("hex")}`;
|
|
548
|
+
const staging = join(dirname(shimDir), `.${basename(shimDir)}.${stamp}.tmp`);
|
|
549
|
+
const retired = join(dirname(shimDir), `.${basename(shimDir)}.${stamp}.old`);
|
|
550
|
+
const discard = (dir) => { try { remove(dir, { recursive: true, force: true }); } catch { /* a leftover is the lesser defect */ } };
|
|
551
|
+
const failed = (detail) => { discard(staging); return { status: "failed", shimDir: null, detail }; };
|
|
552
|
+
|
|
553
|
+
try {
|
|
554
|
+
mkdir(staging, { recursive: true });
|
|
555
|
+
} catch (error) {
|
|
556
|
+
return failed(`cannot create ${staging}: ${error.message}`);
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
const stagedManifest = join(staging, "package.json");
|
|
560
|
+
const written = writeAtomically(stagedManifest, join(staging, `.package.json.${stamp}.tmp`), brandedText, { write, rename, remove });
|
|
561
|
+
if (written !== null) return failed(`cannot write ${stagedManifest}: ${written.message}`);
|
|
562
|
+
|
|
563
|
+
for (const [linkPath, target] of linksOf(staging)) {
|
|
564
|
+
let isDirectory = false;
|
|
565
|
+
try {
|
|
566
|
+
isDirectory = stat(target).isDirectory();
|
|
567
|
+
} catch (error) {
|
|
568
|
+
return failed(`engine has no ${target}: ${error.message}`);
|
|
569
|
+
}
|
|
570
|
+
try {
|
|
571
|
+
if (isDirectory) symlink(target, linkPath, "junction");
|
|
572
|
+
else copy(target, linkPath);
|
|
573
|
+
} catch (error) {
|
|
574
|
+
return failed(`cannot ${isDirectory ? "link" : "copy"} ${linkPath}: ${error.message}`);
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
// Publish. The previous directory is moved aside first (a rename onto a non-empty
|
|
579
|
+
// directory fails on every platform), then removed once the new one is in place.
|
|
580
|
+
try {
|
|
581
|
+
try {
|
|
582
|
+
rename(shimDir, retired);
|
|
583
|
+
} catch (error) {
|
|
584
|
+
if (error.code !== "ENOENT") throw error;
|
|
585
|
+
}
|
|
586
|
+
rename(staging, shimDir);
|
|
587
|
+
} catch (error) {
|
|
588
|
+
discard(staging);
|
|
589
|
+
// Another wrapper published between our check and our rename: its directory is the
|
|
590
|
+
// one in the way. If it describes this engine, that is exactly the result we wanted.
|
|
591
|
+
if (shimIsCurrent(brandedText, shimManifestPath, linksOf(shimDir), fsOps)) {
|
|
592
|
+
discard(retired);
|
|
593
|
+
return { status: "built", shimDir };
|
|
594
|
+
}
|
|
595
|
+
// Nothing usable is in place and we moved a working shim aside a moment ago, so the
|
|
596
|
+
// publish failed for a reason of our own (EACCES, EIO, a full disk). Put the old
|
|
597
|
+
// directory back instead of discarding it: it was valid until we touched it, and
|
|
598
|
+
// destroying it would leave every LATER launch unbranded too, until a rebuild happens
|
|
599
|
+
// to succeed. THIS launch still reports failure -- the restored shim describes the
|
|
600
|
+
// engine we were replacing, so handing it over would make the engine read a stale
|
|
601
|
+
// version out of it.
|
|
602
|
+
try {
|
|
603
|
+
rename(retired, shimDir);
|
|
604
|
+
} catch {
|
|
605
|
+
discard(retired);
|
|
606
|
+
}
|
|
607
|
+
return { status: "failed", shimDir: null, detail: `cannot publish ${shimDir}: ${error.message}` };
|
|
608
|
+
}
|
|
609
|
+
discard(retired);
|
|
610
|
+
return { status: "built", shimDir };
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
/**
|
|
614
|
+
* Whether an existing shim already describes THIS installed engine.
|
|
615
|
+
*
|
|
616
|
+
* The check is what a launch can afford: everything it reads is either already in
|
|
617
|
+
* memory or a single `stat`.
|
|
618
|
+
*
|
|
619
|
+
* - The manifest copy must be byte-identical to what we would write now. The installed
|
|
620
|
+
* manifest is read anyway, so this costs one string comparison, and it catches what a
|
|
621
|
+
* `name` + `version` check let through: a reinstall of the same version whose manifest
|
|
622
|
+
* changed (`npm link` to a checkout, a patched `bin`).
|
|
623
|
+
* - Every directory link must point at the installed engine AND its target must exist:
|
|
624
|
+
* the text of a link says where it pointed, not whether anything is still there, so
|
|
625
|
+
* an engine removed from under the shim (uninstall, `npx` cache eviction) is a
|
|
626
|
+
* dangling link with the right text.
|
|
627
|
+
* - Every file copy must exist with the SAME SIZE as its source. Content is not compared
|
|
628
|
+
* -- two file reads per launch for files the engine only shows on request -- so a
|
|
629
|
+
* same-size edit is the accepted blind spot.
|
|
630
|
+
*
|
|
631
|
+
* `brandedText` is the exact text `ensureEngineShim` writes.
|
|
632
|
+
*/
|
|
633
|
+
function shimIsCurrent(brandedText, shimManifestPath, linkTargets, { read, readlink, lstat, stat }) {
|
|
634
|
+
try {
|
|
635
|
+
if (read(shimManifestPath, "utf8") !== brandedText) return false;
|
|
636
|
+
} catch {
|
|
637
|
+
return false;
|
|
638
|
+
}
|
|
639
|
+
for (const [linkPath, target] of linkTargets) {
|
|
640
|
+
try {
|
|
641
|
+
const entry = lstat(linkPath);
|
|
642
|
+
if (entry.isSymbolicLink()) {
|
|
643
|
+
if (resolve(readlink(linkPath)) !== resolve(target)) return false;
|
|
644
|
+
if (!stat(linkPath).isDirectory()) return false; // follows the link: throws when the target is gone
|
|
645
|
+
} else if (!entry.isFile() || entry.size !== stat(target).size) {
|
|
646
|
+
return false;
|
|
647
|
+
}
|
|
648
|
+
} catch {
|
|
649
|
+
return false;
|
|
650
|
+
}
|
|
651
|
+
}
|
|
652
|
+
return true;
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
/**
|
|
656
|
+
* Where an interactive engine should read the user's keystrokes from.
|
|
657
|
+
*
|
|
658
|
+
* Returns `0` when our own stdin is already a terminal, the descriptor of the
|
|
659
|
+
* controlling terminal when it is not, and `null` when there is no terminal at all.
|
|
660
|
+
*
|
|
661
|
+
* The middle case is the one that matters, and it is not a corner case: it is how an
|
|
662
|
+
* IDE runs the login. A client offers the "Authenticate" action by launching the
|
|
663
|
+
* command from its config with the auth method's `args` appended, and it wires the
|
|
664
|
+
* child's OUTPUT to a terminal panel while leaving stdin a pipe it controls. Judging
|
|
665
|
+
* "is there a terminal?" by `process.stdin.isTTY` therefore answers a different
|
|
666
|
+
* question than the one being asked, and refusing on that basis closes the window
|
|
667
|
+
* the user just opened.
|
|
668
|
+
*
|
|
669
|
+
* `/dev/tty` is the process's CONTROLLING terminal rather than one of its
|
|
670
|
+
* descriptors, so it stays reachable when fd 0 has been replaced -- and it fails with
|
|
671
|
+
* ENXIO precisely when the process has no terminal to fall back on, which is the
|
|
672
|
+
* genuinely unusable case (a headless pipe, cron, CI). That makes opening it both the
|
|
673
|
+
* fix and the test.
|
|
674
|
+
*
|
|
675
|
+
* `openTty` is injected so the decision can be exercised without depending on the
|
|
676
|
+
* machine the tests run on.
|
|
677
|
+
*/
|
|
678
|
+
export function interactiveStdin({ isTTY, openTty }) {
|
|
679
|
+
if (isTTY) return 0;
|
|
680
|
+
try {
|
|
681
|
+
return openTty();
|
|
682
|
+
} catch {
|
|
683
|
+
return null;
|
|
684
|
+
}
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
/**
|
|
688
|
+
* Adapter arguments with resource isolation guaranteed.
|
|
689
|
+
*
|
|
690
|
+
* Every ACP run is isolated from the machine's own pi resources: the engine loads
|
|
691
|
+
* the extensions, skills and prompt templates of OUR package, and none of the user's.
|
|
692
|
+
* The flag list and its rationale live in `vendor/pi-acp/src/cli.ts` (`devPackageArgs`),
|
|
693
|
+
* which is the single source of truth for what isolation covers.
|
|
694
|
+
*
|
|
695
|
+
* Without this the engine merges its user-level registrations into the session, so
|
|
696
|
+
* the agent's tool set becomes a property of the machine it runs on -- and any
|
|
697
|
+
* pi package the user already registered collides with the copy we bundle. That is
|
|
698
|
+
* not hypothetical: a pre-existing `pi-subagents` registration makes the engine
|
|
699
|
+
* exit 1 with `Tool "subagent" conflicts`, killing the session before a single
|
|
700
|
+
* protocol frame is written.
|
|
701
|
+
*
|
|
702
|
+
* An explicit flag is never overwritten, so the wrapper's own root is a DEFAULT and
|
|
703
|
+
* not a policy. Every backend this project writes relies on that default and passes
|
|
704
|
+
* no path at all; the flag is for pointing a wrapper at some OTHER package root --
|
|
705
|
+
* an experiment, a bisect, a second build -- and silently rewriting it to the
|
|
706
|
+
* wrapper's own would run something different from what was asked for while
|
|
707
|
+
* reporting success.
|
|
708
|
+
*
|
|
709
|
+
* The scan is deliberately flat and does NOT stop at a `--` separator, even though
|
|
710
|
+
* that means data after `--` can look like the flag. Teaching it about `--` would be
|
|
711
|
+
* strictly worse: the adapter scans the whole argv the same way and rejects a second
|
|
712
|
+
* occurrence outright (`--dev-package may only be specified once`, vendor/pi-acp/src/
|
|
713
|
+
* cli.ts), so on `acp -- --dev-package x` we would add a duplicate and the agent would
|
|
714
|
+
* not start at all. Matching the consumer's parser beats being right in isolation.
|
|
715
|
+
*/
|
|
716
|
+
export function withIsolation(rest, packageRoot) {
|
|
717
|
+
if (!packageRoot) return [...rest];
|
|
718
|
+
if (rest.includes(ISOLATION_FLAG)) return [...rest];
|
|
719
|
+
return [ISOLATION_FLAG, packageRoot, ...rest];
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
/**
|
|
723
|
+
* Subcommands this CLI understands.
|
|
724
|
+
*
|
|
725
|
+
* `tui` (also the bare invocation) is the terminal product. `login` exists because
|
|
726
|
+
* the agent's configuration directory is its own: a fresh one holds no credentials,
|
|
727
|
+
* and the engine has no non-interactive command that writes them -- `pi auth ...`
|
|
728
|
+
* only prints and checks. So the one supported bootstrap is the engine's own
|
|
729
|
+
* interactive UI, started directly against our directory; `logout` removes what it
|
|
730
|
+
* stored. `acp` is parsed everywhere but only FUNCTIONS in the managed-backend and
|
|
731
|
+
* debug artifacts, where the adapter ships next to the wrapper; the public terminal
|
|
732
|
+
* package answers it with a migration error.
|
|
733
|
+
*/
|
|
734
|
+
export const COMMANDS = new Set(["acp", "login", "logout", "tui"]);
|
|
735
|
+
|
|
736
|
+
/**
|
|
737
|
+
* Engine flags that confine a terminal run to a single package: ours.
|
|
738
|
+
*
|
|
739
|
+
* The same three flags the ACP adapter's `devPackageArgs()` passes (vendor/pi-acp/
|
|
740
|
+
* src/cli.ts), duplicated here DELIBERATELY: the public terminal artifact ships
|
|
741
|
+
* without the adapter and without `scripts/`, so nothing in the tarball can derive
|
|
742
|
+
* the list from the adapter source. A test compares the two where the submodule is
|
|
743
|
+
* present, so the copies cannot drift silently.
|
|
744
|
+
*/
|
|
745
|
+
export const TERMINAL_ISOLATION_FLAGS = ["--no-extensions", "--no-skills", "--no-prompt-templates"];
|
|
746
|
+
|
|
747
|
+
/**
|
|
748
|
+
* Engine flag that keeps a run out of the session store.
|
|
749
|
+
*
|
|
750
|
+
* `login` is not a work session: nothing said in it is worth resuming, and the engine's
|
|
751
|
+
* exit hint ("To resume this session: <name> --session <id>") names a command that does
|
|
752
|
+
* not exist under our brand. Ephemeral, the engine writes no session file and prints no
|
|
753
|
+
* hint. The bare TUI keeps its sessions -- there resuming is a feature.
|
|
754
|
+
*/
|
|
755
|
+
export const NO_SESSION_FLAG = "--no-session";
|
|
756
|
+
|
|
757
|
+
/**
|
|
758
|
+
* Engine flags that ask for a stored session, which `login` cannot honour.
|
|
759
|
+
*
|
|
760
|
+
* In the engine, `--no-session` is checked BEFORE `--session`, `--fork`, `--resume` and
|
|
761
|
+
* `--continue` (`dist/main.js`, `createSessionManager`): with NO_SESSION_FLAG present
|
|
762
|
+
* they parse fine and do nothing. Passing them through would therefore ACCEPT a
|
|
763
|
+
* `login --session <id>` and silently ignore it, so `terminalEngineArgs` refuses them
|
|
764
|
+
* for login instead. Spellings are the engine's own (`dist/cli/args.js`): the long
|
|
765
|
+
* flags, the `-c`/`-r` shorts, and the `--flag=value` form -- which the engine's parser
|
|
766
|
+
* does not even recognise as these flags, but the user meant it, and a mis-spelled
|
|
767
|
+
* request that is refused beats one that is quietly dropped. `--session-id` is NOT
|
|
768
|
+
* here: the engine honours it for an in-memory session too.
|
|
769
|
+
*/
|
|
770
|
+
export const LOGIN_SESSION_CONFLICTS = Object.freeze(["--session", "--fork", "--resume", "-r", "--continue", "-c"]);
|
|
771
|
+
|
|
772
|
+
/**
|
|
773
|
+
* The first argument in `extra` that asks for a stored session, or null.
|
|
774
|
+
* Exported so the entrypoint can turn it into a message without repeating the list.
|
|
775
|
+
*/
|
|
776
|
+
export function loginSessionConflict(extra) {
|
|
777
|
+
const valueForm = LOGIN_SESSION_CONFLICTS.filter((flag) => flag.startsWith("--")).map((flag) => `${flag}=`);
|
|
778
|
+
return extra.find((arg) => LOGIN_SESSION_CONFLICTS.includes(arg) || valueForm.some((prefix) => arg.startsWith(prefix))) ?? null;
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
/**
|
|
782
|
+
* The engine argv for a terminal run (TUI or interactive login).
|
|
783
|
+
*
|
|
784
|
+
* Assembled as a WHOLE so a caller cannot spread the isolation flags and forget the
|
|
785
|
+
* `--extension` value, or vice versa: the engine would start fine either way and load
|
|
786
|
+
* something other than the product.
|
|
787
|
+
*
|
|
788
|
+
* Throws for `login` combined with a LOGIN_SESSION_CONFLICTS flag: the engine would
|
|
789
|
+
* take the flag and do nothing with it. The message is for a person.
|
|
790
|
+
*
|
|
791
|
+
* @param {string} entrypoint the engine's JS entrypoint
|
|
792
|
+
* @param {string} packageRoot the package the engine must load exclusively
|
|
793
|
+
* @param {string[]} extra flags the user passed through
|
|
794
|
+
* @param {{ login?: boolean }} [options] `login: true` adds NO_SESSION_FLAG
|
|
795
|
+
*/
|
|
796
|
+
export function terminalEngineArgs(entrypoint, packageRoot, extra = [], { login = false } = {}) {
|
|
797
|
+
if (login) {
|
|
798
|
+
const conflict = loginSessionConflict(extra);
|
|
799
|
+
if (conflict !== null) {
|
|
800
|
+
throw new Error(
|
|
801
|
+
`\`login\` does not accept ${conflict}: login is not a work session and stores nothing to resume.\n` +
|
|
802
|
+
" Store the credential with `login` alone, then open the session with `tui` and that flag.",
|
|
803
|
+
);
|
|
804
|
+
}
|
|
805
|
+
}
|
|
806
|
+
const session = login && !extra.includes(NO_SESSION_FLAG) ? [NO_SESSION_FLAG] : [];
|
|
807
|
+
return [entrypoint, ...TERMINAL_ISOLATION_FLAGS, "--extension", packageRoot, ...session, ...extra];
|
|
808
|
+
}
|
|
809
|
+
|
|
810
|
+
/**
|
|
811
|
+
* The adapter's spelling of `login`, which we must answer to as well.
|
|
812
|
+
*
|
|
813
|
+
* Only the managed-backend artifact ever emits it: there the adapter advertises, in
|
|
814
|
+
* its `authMethods`, a terminal command built from `process.argv[0..1]`
|
|
815
|
+
* (`vendor/pi-acp/src/acp/auth.ts`) -- `<node> <wrapper> --terminal-login` -- and the
|
|
816
|
+
* client appends those args to the command line already in its config, so what runs
|
|
817
|
+
* is `... index.js acp --terminal-login`. `parseArgs` lets the flag OUTRANK the
|
|
818
|
+
* leading `acp`, mapping it to `command = "login"`; the wrapper then spawns the
|
|
819
|
+
* engine's interactive UI directly (`terminalEngineArgs`), exactly as a typed `login`
|
|
820
|
+
* does. Letting `acp` win would start a protocol server in the user's terminal,
|
|
821
|
+
* waiting for frames nobody types. In the public terminal artifact the flag is
|
|
822
|
+
* accepted as a harmless synonym: nothing there advertises it.
|
|
823
|
+
*
|
|
824
|
+
* Accepting the flag rather than teaching the fork to advertise `login` keeps the
|
|
825
|
+
* edit out of a file that merges with upstream.
|
|
826
|
+
*/
|
|
827
|
+
export const ADAPTER_LOGIN_FLAG = "--terminal-login";
|
|
298
828
|
|
|
299
829
|
/**
|
|
300
830
|
* Flags belonging to other programs that consume the NEXT argument as their value.
|
|
@@ -304,7 +834,7 @@ export const COMMANDS = new Set(["install", "uninstall", "acp"]);
|
|
|
304
834
|
* which it rejects. Only pass-through flags need listing; our own flags are handled
|
|
305
835
|
* explicitly below.
|
|
306
836
|
*/
|
|
307
|
-
export const VALUE_FLAGS = new Set([
|
|
837
|
+
export const VALUE_FLAGS = new Set([ISOLATION_FLAG, "--extension", "--model", "--cwd"]);
|
|
308
838
|
|
|
309
839
|
/**
|
|
310
840
|
* Argument shape of the user-facing CLI.
|
|
@@ -334,6 +864,13 @@ export function parseArgs(argv) {
|
|
|
334
864
|
if (arg === "--help" || arg === "-h") { help = true; continue; }
|
|
335
865
|
if (arg === "--version" || arg === "-v") { version = true; continue; }
|
|
336
866
|
|
|
867
|
+
// The flag form of `login`, which is what a client runs from `authMethods`. It
|
|
868
|
+
// overrides a subcommand instead of yielding to it, because the client appends it
|
|
869
|
+
// to the `acp` invocation from its own config -- see ADAPTER_LOGIN_FLAG. It is also
|
|
870
|
+
// consumed rather than forwarded: the entrypoint re-adds it for the adapter, so
|
|
871
|
+
// passing it through as well would hand the adapter the same flag twice.
|
|
872
|
+
if (arg === ADAPTER_LOGIN_FLAG) { command = "login"; continue; }
|
|
873
|
+
|
|
337
874
|
// A foreign flag plus its value: forward both, and never read the value as a
|
|
338
875
|
// subcommand.
|
|
339
876
|
if (VALUE_FLAGS.has(arg)) {
|
|
@@ -360,18 +897,26 @@ export function helpText(name = "explyt-ai-agent") {
|
|
|
360
897
|
return [
|
|
361
898
|
"Explyt AI Agent",
|
|
362
899
|
"",
|
|
900
|
+
"A terminal AI coding agent. There is nothing to install: run it and it starts,",
|
|
901
|
+
"carrying its own engine and its own extensions.",
|
|
902
|
+
"",
|
|
363
903
|
"Usage:",
|
|
364
|
-
` npx ${name}
|
|
365
|
-
` npx ${name}
|
|
366
|
-
` npx ${name}
|
|
904
|
+
` npx ${name} start the terminal UI (needs an interactive terminal)`,
|
|
905
|
+
` npx ${name} tui the same, spelled explicitly`,
|
|
906
|
+
` npx ${name} login store a provider credential for this agent`,
|
|
907
|
+
` npx ${name} logout remove the stored credentials`,
|
|
367
908
|
"",
|
|
368
909
|
"Options:",
|
|
369
910
|
" -h, --help show this message",
|
|
370
911
|
" -v, --version print the version",
|
|
371
912
|
"",
|
|
372
|
-
"
|
|
373
|
-
"
|
|
374
|
-
|
|
913
|
+
"The agent keeps its own credentials, model catalogue, settings and sessions, so",
|
|
914
|
+
"they are separate from a pi you may run by hand: logging in there does not log in",
|
|
915
|
+
"here. Run `login` once in a terminal, pick a provider, and enter a key or complete",
|
|
916
|
+
"an OAuth flow.",
|
|
917
|
+
"",
|
|
918
|
+
"IDE (ACP) integration is not part of this package: it ships in the Explyt managed",
|
|
919
|
+
"backend, which the Neo plugin downloads, verifies and manages.",
|
|
375
920
|
"",
|
|
376
921
|
].join("\n");
|
|
377
922
|
}
|