@code-yeongyu/senpi 2026.9.22-2 → 2026.9.22-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/CHANGELOG.md +37 -17
- package/dist/bundle/chunks/{anthropic-messages-2P7APOOQ.js → anthropic-messages-V4CUY3UU.js} +1 -1
- package/dist/bundle/chunks/{app-server-command-PRNA6QQU.js → app-server-command-P5WP2YVC.js} +2 -2
- package/dist/bundle/chunks/azure-openai-responses-SBCCU4KI.js +2 -0
- package/dist/bundle/chunks/chatgpt-subscription.js +75 -0
- package/dist/bundle/chunks/chunk-2VZJTDUX.js +2 -0
- package/dist/bundle/chunks/{chunk-BOZ37BOT.js → chunk-3KLWJIXM.js} +3 -4
- package/dist/bundle/chunks/{chunk-M2HSO7MH.js → chunk-3UO3QYMZ.js} +1 -1
- package/dist/bundle/chunks/{chunk-6OD4TT33.js → chunk-5T3V75HH.js} +113 -111
- package/dist/bundle/chunks/chunk-6KXIFAMC.js +11 -0
- package/dist/bundle/chunks/{chunk-UCPWK6TZ.js → chunk-6MIPLTQG.js} +1 -1
- package/dist/bundle/chunks/{chunk-JZ6YQU3A.js → chunk-7ZPFQY76.js} +3 -3
- package/dist/bundle/chunks/{chunk-MUYK27UR.js → chunk-AEJUOQ7U.js} +1 -1
- package/dist/bundle/chunks/{chunk-F3DXL5MX.js → chunk-AJ722VIQ.js} +1 -1
- package/dist/bundle/chunks/{chunk-VYIJQQ5I.js → chunk-DTD3QN3S.js} +1 -1
- package/dist/bundle/chunks/chunk-DY6FUAWH.js +2 -0
- package/dist/bundle/chunks/{chunk-5XC2FNJ5.js → chunk-GLDP7LH2.js} +1 -1
- package/dist/bundle/chunks/{chunk-OPNVT7BU.js → chunk-KB3DR2ZH.js} +1 -1
- package/dist/bundle/chunks/{chunk-JR4X6ECO.js → chunk-M4NQKQUK.js} +1 -1
- package/dist/bundle/chunks/{chunk-GXUYWMN2.js → chunk-PODQ2IEB.js} +1 -1
- package/dist/bundle/chunks/{chunk-ARJJU3MS.js → chunk-PU7UDZ5F.js} +1 -1
- package/dist/bundle/chunks/{chunk-64JQFFHH.js → chunk-SSJ5OP3B.js} +2 -2
- package/dist/bundle/chunks/{chunk-X63BXA24.js → chunk-TAFYWUE4.js} +1 -1
- package/dist/bundle/chunks/{chunk-KICRBRVS.js → chunk-TU37KLCN.js} +2 -2
- package/dist/bundle/chunks/{chunk-R6LVC7SP.js → chunk-TWTHGDQS.js} +4 -4
- package/dist/bundle/chunks/chunk-WS7QGU5H.js +8 -0
- package/dist/bundle/chunks/{chunk-IPRJIKLL.js → chunk-WSQMYWLV.js} +1 -1
- package/dist/bundle/chunks/chunk-ZBHRTH5C.js +2 -0
- package/dist/bundle/chunks/cli-main-O4CFWDWV.js +3 -0
- package/dist/bundle/chunks/{google-generative-ai-Y2IYMUVC.js → google-generative-ai-UJIX64UU.js} +1 -1
- package/dist/bundle/chunks/{google-vertex-TKBBMPHV.js → google-vertex-KJEY5SZY.js} +1 -1
- package/dist/bundle/chunks/help-fast-path-KFMAFECE.js +2 -0
- package/dist/bundle/chunks/host-command-JEBCPKMK.js +2 -0
- package/dist/bundle/chunks/host-lifecycle-FWIB56UI.js +3 -0
- package/dist/bundle/chunks/host-lifecycle.js +2 -2
- package/dist/bundle/chunks/{interactive-host-runtime-F5L4USLR.js → interactive-host-runtime-HBK4XNHJ.js} +1 -1
- package/dist/bundle/chunks/interactive-mode-WKFWOHXN.js +2 -0
- package/dist/bundle/chunks/{mistral-conversations-ZYDVFRYF.js → mistral-conversations-PNYVN6YU.js} +1 -1
- package/dist/bundle/chunks/{multi-session-host-EUTEGVLS.js → multi-session-host-DWBOLTS7.js} +2 -2
- package/dist/bundle/chunks/openai-codex-responses-TBF5EMKG.js +10 -0
- package/dist/bundle/chunks/{openai-completions-4V76L5ZJ.js → openai-completions-IJIBZB2G.js} +1 -1
- package/dist/bundle/chunks/{openai-images-4XAZQLDT.js → openai-images-JA5N5DUU.js} +1 -1
- package/dist/bundle/chunks/openai-responses-3XYO7ROE.js +2 -0
- package/dist/bundle/chunks/{openrouter-images-Z3WQ5BDR.js → openrouter-images-T4GY3JYM.js} +1 -1
- package/dist/bundle/chunks/{package-manager-cli-JPUWMUEJ.js → package-manager-cli-JUKHAT7U.js} +1 -1
- package/dist/bundle/chunks/{rotation-stream-S56Y7WMM.js → rotation-stream-67OZ4U6R.js} +1 -1
- package/dist/bundle/chunks/rpc-mode-746KEL7Z.js +2 -0
- package/dist/bundle/chunks/{session-picker-PFPJVVIC.js → session-picker-TO42QRV2.js} +1 -1
- package/dist/bundle/chunks/session-worker.js +399 -398
- package/dist/bundle/cli.js +1 -1
- package/dist/bundle/index.js +1 -1
- package/dist/bundle/rpc-entry.js +1 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +10 -2
- package/dist/cli/args.js.map +1 -1
- package/dist/core/agent-session.d.ts +1 -1
- package/dist/core/agent-session.js +8 -8
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-provider-key-migration.d.ts +27 -0
- package/dist/core/auth-provider-key-migration.d.ts.map +1 -0
- package/dist/core/auth-provider-key-migration.js +40 -0
- package/dist/core/auth-provider-key-migration.js.map +1 -0
- package/dist/core/auth-storage.d.ts +26 -1
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +93 -20
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/credential-accounts.d.ts +1 -1
- package/dist/core/credential-accounts.d.ts.map +1 -1
- package/dist/core/credential-accounts.js +8 -5
- package/dist/core/credential-accounts.js.map +1 -1
- package/dist/core/credential-pool/env-slots.d.ts.map +1 -1
- package/dist/core/credential-pool/env-slots.js +5 -2
- package/dist/core/credential-pool/env-slots.js.map +1 -1
- package/dist/core/dynamic-prompt/build.js +1 -1
- package/dist/core/dynamic-prompt/build.js.map +1 -1
- package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/account-command.d.ts +2 -2
- package/dist/core/extensions/builtin/anthropic-subscription/account-command.d.ts.map +1 -0
- package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/account-command.js +24 -24
- package/dist/core/extensions/builtin/anthropic-subscription/account-command.js.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/account-events.d.ts.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/account-events.js.map +1 -0
- package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/account-management.d.ts +1 -1
- package/dist/core/extensions/builtin/anthropic-subscription/account-management.d.ts.map +1 -0
- package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/account-management.js +2 -2
- package/dist/core/extensions/builtin/anthropic-subscription/account-management.js.map +1 -0
- package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/accounts.d.ts +8 -8
- package/dist/core/extensions/builtin/anthropic-subscription/accounts.d.ts.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/accounts.js.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/affinity.d.ts.map +1 -0
- package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/affinity.js +2 -2
- package/dist/core/extensions/builtin/anthropic-subscription/affinity.js.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/api-id.d.ts.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/api-id.js.map +1 -0
- package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/auth-attempt.d.ts +2 -2
- package/dist/core/extensions/builtin/anthropic-subscription/auth-attempt.d.ts.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/auth-attempt.js.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/auth-environment.d.ts.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/auth-environment.js.map +1 -0
- package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/auth-lane.d.ts +5 -5
- package/dist/core/extensions/builtin/anthropic-subscription/auth-lane.d.ts.map +1 -0
- package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/auth-lane.js +10 -10
- package/dist/core/extensions/builtin/anthropic-subscription/auth-lane.js.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/availability.d.ts.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/availability.js.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/bounded-queue.d.ts.map +1 -0
- package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/bounded-queue.js +1 -1
- package/dist/core/extensions/builtin/anthropic-subscription/bounded-queue.js.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/config-dir-credentials.d.ts +18 -0
- package/dist/core/extensions/builtin/anthropic-subscription/config-dir-credentials.d.ts.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/config-dir-credentials.js +81 -0
- package/dist/core/extensions/builtin/anthropic-subscription/config-dir-credentials.js.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/content-blocks.d.ts.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/content-blocks.js.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/custom-tools-schema.d.ts.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/custom-tools-schema.js.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/custom-tools.d.ts.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/custom-tools.js.map +1 -0
- package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/errors.d.ts +1 -1
- package/dist/core/extensions/builtin/anthropic-subscription/errors.d.ts.map +1 -0
- package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/errors.js +1 -1
- package/dist/core/extensions/builtin/anthropic-subscription/errors.js.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/executable-path-lookup.d.ts.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/executable-path-lookup.js.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/executable.d.ts.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/executable.js.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/failover.d.ts.map +1 -0
- package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/failover.js +1 -1
- package/dist/core/extensions/builtin/anthropic-subscription/failover.js.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/guidance.d.ts.map +1 -0
- package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/guidance.js +2 -2
- package/dist/core/extensions/builtin/anthropic-subscription/guidance.js.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/index.d.ts +11 -0
- package/dist/core/extensions/builtin/anthropic-subscription/index.d.ts.map +1 -0
- package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/index.js +19 -13
- package/dist/core/extensions/builtin/anthropic-subscription/index.js.map +1 -0
- package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/oauth-login.d.ts +3 -3
- package/dist/core/extensions/builtin/anthropic-subscription/oauth-login.d.ts.map +1 -0
- package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/oauth-login.js +3 -3
- package/dist/core/extensions/builtin/anthropic-subscription/oauth-login.js.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/options.d.ts +18 -0
- package/dist/core/extensions/builtin/anthropic-subscription/options.d.ts.map +1 -0
- package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/options.js +3 -3
- package/dist/core/extensions/builtin/anthropic-subscription/options.js.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/prompt-bridge.d.ts.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/prompt-bridge.js.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/prompt-directive-dedupe.d.ts.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/prompt-directive-dedupe.js.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/refusal.d.ts.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/refusal.js.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/sdk-boundary.d.ts.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/sdk-boundary.js.map +1 -0
- package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/sdk-boundary.lazy.d.ts +1 -1
- package/dist/core/extensions/builtin/anthropic-subscription/sdk-boundary.lazy.d.ts.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/sdk-boundary.lazy.js.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/session-binding-store.d.ts.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/session-binding-store.js.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/session-binding.d.ts.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/session-binding.js.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/session-commit-boundary.d.ts.map +1 -0
- package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-commit-boundary.js +4 -3
- package/dist/core/extensions/builtin/anthropic-subscription/session-commit-boundary.js.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/session-continuity.d.ts.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/session-continuity.js.map +1 -0
- package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-entry-annotations.d.ts +3 -3
- package/dist/core/extensions/builtin/anthropic-subscription/session-entry-annotations.d.ts.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/session-entry-annotations.js.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/session-observability.d.ts.map +1 -0
- package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-observability.js +1 -1
- package/dist/core/extensions/builtin/anthropic-subscription/session-observability.js.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/session-reaper.d.ts.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/session-reaper.js.map +1 -0
- package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-reattach.d.ts +5 -5
- package/dist/core/extensions/builtin/anthropic-subscription/session-reattach.d.ts.map +1 -0
- package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-reattach.js +1 -1
- package/dist/core/extensions/builtin/anthropic-subscription/session-reattach.js.map +1 -0
- package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-registry-pump.d.ts +2 -2
- package/dist/core/extensions/builtin/anthropic-subscription/session-registry-pump.d.ts.map +1 -0
- package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-registry-pump.js +6 -6
- package/dist/core/extensions/builtin/anthropic-subscription/session-registry-pump.js.map +1 -0
- package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-registry-state.d.ts +3 -3
- package/dist/core/extensions/builtin/anthropic-subscription/session-registry-state.d.ts.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/session-registry-state.js.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/session-registry-wiring.d.ts.map +1 -0
- package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-registry-wiring.js +2 -2
- package/dist/core/extensions/builtin/anthropic-subscription/session-registry-wiring.js.map +1 -0
- package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-registry.d.ts +12 -12
- package/dist/core/extensions/builtin/anthropic-subscription/session-registry.d.ts.map +1 -0
- package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-registry.js +4 -4
- package/dist/core/extensions/builtin/anthropic-subscription/session-registry.js.map +1 -0
- package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-restored-admission.d.ts +2 -2
- package/dist/core/extensions/builtin/anthropic-subscription/session-restored-admission.d.ts.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/session-restored-admission.js.map +1 -0
- package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-stream.d.ts +2 -2
- package/dist/core/extensions/builtin/anthropic-subscription/session-stream.d.ts.map +1 -0
- package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-stream.js +1 -1
- package/dist/core/extensions/builtin/anthropic-subscription/session-stream.js.map +1 -0
- package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-sync.d.ts +5 -5
- package/dist/core/extensions/builtin/anthropic-subscription/session-sync.d.ts.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/session-sync.js.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/session-turn-attempt.d.ts +11 -0
- package/dist/core/extensions/builtin/anthropic-subscription/session-turn-attempt.d.ts.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/session-turn-attempt.js.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/session-turn-claim.d.ts +14 -0
- package/dist/core/extensions/builtin/anthropic-subscription/session-turn-claim.d.ts.map +1 -0
- package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-turn-claim.js +1 -1
- package/dist/core/extensions/builtin/anthropic-subscription/session-turn-claim.js.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/session-turn-types.d.ts.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/session-turn-types.js.map +1 -0
- package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/settings.d.ts +11 -11
- package/dist/core/extensions/builtin/anthropic-subscription/settings.d.ts.map +1 -0
- package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/settings.js +9 -9
- package/dist/core/extensions/builtin/anthropic-subscription/settings.js.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/stream-events.d.ts.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/stream-events.js.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/stream-guidance.d.ts.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/stream-guidance.js.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/stream-protocol.d.ts.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/stream-protocol.js.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/stream.d.ts +3 -0
- package/dist/core/extensions/builtin/anthropic-subscription/stream.d.ts.map +1 -0
- package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/stream.js +5 -5
- package/dist/core/extensions/builtin/anthropic-subscription/stream.js.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/system-prompt.d.ts.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/system-prompt.js.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/tool-watch.d.ts.map +1 -0
- package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/tool-watch.js +6 -2
- package/dist/core/extensions/builtin/anthropic-subscription/tool-watch.js.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/tools.d.ts.map +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/tools.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/index.js +2 -2
- package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/lane-policy.d.ts +5 -5
- package/dist/core/extensions/builtin/compaction/lane-policy.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/lane-policy.js +9 -9
- package/dist/core/extensions/builtin/compaction/lane-policy.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/openai-remote-model.d.ts +1 -1
- package/dist/core/extensions/builtin/compaction/openai-remote-model.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/openai-remote-model.js +6 -6
- package/dist/core/extensions/builtin/compaction/openai-remote-model.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/openai-remote.js +1 -1
- package/dist/core/extensions/builtin/compaction/openai-remote.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/speculative-summary.js +2 -2
- package/dist/core/extensions/builtin/compaction/speculative-summary.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/speculative.js +1 -1
- package/dist/core/extensions/builtin/compaction/speculative.js.map +1 -1
- package/dist/core/extensions/builtin/cursor-cli-oauth/account-command.js +1 -1
- package/dist/core/extensions/builtin/cursor-cli-oauth/account-command.js.map +1 -1
- package/dist/core/extensions/builtin/goal/terminal-provider-error.js +1 -1
- package/dist/core/extensions/builtin/goal/terminal-provider-error.js.map +1 -1
- package/dist/core/extensions/builtin/gpt-account.js +18 -18
- package/dist/core/extensions/builtin/gpt-account.js.map +1 -1
- package/dist/core/extensions/builtin/index.js +2 -2
- package/dist/core/extensions/builtin/index.js.map +1 -1
- package/dist/core/extensions/builtin/oauth-login-interaction.d.ts +2 -2
- package/dist/core/extensions/builtin/oauth-login-interaction.d.ts.map +1 -1
- package/dist/core/extensions/builtin/oauth-login-interaction.js +1 -1
- package/dist/core/extensions/builtin/oauth-login-interaction.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/file-operations.d.ts +9 -1
- package/dist/core/extensions/builtin/prompt-preset/file-operations.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/file-operations.js +60 -17
- package/dist/core/extensions/builtin/prompt-preset/file-operations.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.2.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.2.js +7 -3
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.2.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.3-codex.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.3-codex.js +7 -3
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.3-codex.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.4.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.4.js +7 -3
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.4.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.5.js +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.5.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.js +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.js +7 -3
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-6-astra.js +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-6-astra.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/grok-4.5.js +2 -2
- package/dist/core/extensions/builtin/prompt-preset/grok-4.5.js.map +1 -1
- package/dist/core/extensions/builtin/rules/rules/constants.d.ts +1 -1
- package/dist/core/extensions/builtin/rules/rules/constants.js +1 -1
- package/dist/core/extensions/builtin/rules/rules/constants.js.map +1 -1
- package/dist/core/extensions/builtin/service-tier.js +3 -3
- package/dist/core/extensions/builtin/service-tier.js.map +1 -1
- package/dist/core/model-config.d.ts +3 -0
- package/dist/core/model-config.d.ts.map +1 -1
- package/dist/core/model-config.js +26 -3
- package/dist/core/model-config.js.map +1 -1
- package/dist/core/model-resolver.js +1 -1
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/model-runtime.d.ts +2 -0
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +10 -2
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/provider-display-names.d.ts.map +1 -1
- package/dist/core/provider-display-names.js +2 -1
- package/dist/core/provider-display-names.js.map +1 -1
- package/dist/core/retry-fallback/expansion.js +1 -1
- package/dist/core/retry-fallback/expansion.js.map +1 -1
- package/dist/core/retry-fallback/settings.d.ts +1 -1
- package/dist/core/retry-fallback/settings.js +1 -1
- package/dist/core/retry-fallback/settings.js.map +1 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +16 -4
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts +5 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +68 -2
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/modes/app-server/server/account.d.ts +1 -1
- package/dist/modes/app-server/server/account.d.ts.map +1 -1
- package/dist/modes/app-server/server/account.js +6 -1
- package/dist/modes/app-server/server/account.js.map +1 -1
- package/dist/modes/app-server/server/server-core.js +1 -1
- package/dist/modes/app-server/server/server-core.js.map +1 -1
- package/dist/modes/interactive/components/progressive-transcript-container.d.ts +12 -0
- package/dist/modes/interactive/components/progressive-transcript-container.d.ts.map +1 -1
- package/dist/modes/interactive/components/progressive-transcript-container.js +17 -2
- package/dist/modes/interactive/components/progressive-transcript-container.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +14 -1
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/rpc/connection-handler.js +3 -3
- package/dist/modes/rpc/connection-handler.js.map +1 -1
- package/dist/modes/rpc/host-process-metrics.d.ts.map +1 -1
- package/dist/modes/rpc/host-process-metrics.js +24 -31
- package/dist/modes/rpc/host-process-metrics.js.map +1 -1
- package/dist/modes/rpc/host-process-table.d.ts +36 -0
- package/dist/modes/rpc/host-process-table.d.ts.map +1 -0
- package/dist/modes/rpc/host-process-table.js +162 -0
- package/dist/modes/rpc/host-process-table.js.map +1 -0
- package/dist/modes/rpc/rpc-client.d.ts +1 -1
- package/dist/modes/rpc/rpc-client.js +1 -1
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/modes/rpc/worker-session-registry.d.ts.map +1 -1
- package/dist/modes/rpc/worker-session-registry.js +30 -0
- package/dist/modes/rpc/worker-session-registry.js.map +1 -1
- package/docs/providers.md +9 -9
- package/docs/release-guide.md +1 -1
- package/docs/rpc.md +4 -4
- package/docs/settings.md +5 -5
- package/docs/usage.md +2 -2
- package/examples/extensions/AGENTS.md +1 -1
- package/examples/extensions/README.md +1 -1
- package/examples/extensions/{openai-codex-usage → chatgpt-subscription-usage}/codex-usage.ts +1 -1
- package/examples/extensions/{openai-codex-usage → chatgpt-subscription-usage}/index.ts +4 -4
- package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +12 -0
- package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
- package/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
- package/node_modules/@earendil-works/pi-ai/README.md +3 -3
- package/node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.js +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses/fallback-state.d.ts +3 -3
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses/fallback-state.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses/fallback-state.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.d.ts +5 -5
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js +10 -10
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-prompt-cache.d.ts +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-prompt-cache.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-prompt-cache.js +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-prompt-cache.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.js +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/{openai-codex.d.ts → chatgpt-subscription.d.ts} +3 -3
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/chatgpt-subscription.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/{openai-codex.js → chatgpt-subscription.js} +35 -35
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/chatgpt-subscription.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/load.d.ts +2 -2
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/load.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/load.js +4 -3
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/load.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/pool/slots.d.ts +7 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/pool/slots.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/pool/slots.js +20 -2
- package/node_modules/@earendil-works/pi-ai/dist/auth/pool/slots.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/bun-oauth.js +2 -2
- package/node_modules/@earendil-works/pi-ai/dist/bun-oauth.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/index.d.ts +2 -2
- package/node_modules/@earendil-works/pi-ai/dist/index.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/index.js +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/index.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/legacy-provider-ids.d.ts +20 -0
- package/node_modules/@earendil-works/pi-ai/dist/legacy-provider-ids.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/legacy-provider-ids.js +56 -0
- package/node_modules/@earendil-works/pi-ai/dist/legacy-provider-ids.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts +2 -2
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.js +2 -2
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/all.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/all.js +2 -2
- package/node_modules/@earendil-works/pi-ai/dist/providers/all.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/chatgpt-subscription.d.ts +3 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/chatgpt-subscription.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/chatgpt-subscription.js +22 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/chatgpt-subscription.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/chatgpt-subscription.models.d.ts +4 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/chatgpt-subscription.models.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/chatgpt-subscription.models.js +6 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/chatgpt-subscription.models.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/amazon-bedrock.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/anthropic.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/chatgpt-subscription.json +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/{openai-codex-auth.d.ts → chatgpt-subscription-auth.d.ts} +3 -3
- package/node_modules/@earendil-works/pi-ai/dist/utils/chatgpt-subscription-auth.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/{openai-codex-auth.js → chatgpt-subscription-auth.js} +4 -4
- package/node_modules/@earendil-works/pi-ai/dist/utils/chatgpt-subscription-auth.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/package.json +2 -2
- package/node_modules/@earendil-works/pi-pty/package.json +1 -1
- package/node_modules/@earendil-works/pi-telemetry/package.json +1 -1
- package/node_modules/@earendil-works/pi-tui/package.json +1 -1
- package/package.json +7 -7
- package/dist/bundle/chunks/azure-openai-responses-3AH7MJWF.js +0 -2
- package/dist/bundle/chunks/chunk-56TWFZ2C.js +0 -2
- package/dist/bundle/chunks/chunk-JEFYJDHP.js +0 -8
- package/dist/bundle/chunks/chunk-K3HEWWSS.js +0 -2
- package/dist/bundle/chunks/chunk-NK2RNX25.js +0 -11
- package/dist/bundle/chunks/chunk-NMB4C6ZZ.js +0 -2
- package/dist/bundle/chunks/cli-main-AFJNXUSL.js +0 -3
- package/dist/bundle/chunks/help-fast-path-4KYBVD2Z.js +0 -2
- package/dist/bundle/chunks/host-command-OVA6GEWC.js +0 -2
- package/dist/bundle/chunks/host-lifecycle-IDQPLYEA.js +0 -3
- package/dist/bundle/chunks/interactive-mode-UFBSCOP7.js +0 -2
- package/dist/bundle/chunks/openai-codex-responses-MEIUNROM.js +0 -10
- package/dist/bundle/chunks/openai-codex.js +0 -75
- package/dist/bundle/chunks/openai-responses-YR7WRBG3.js +0 -2
- package/dist/bundle/chunks/rpc-mode-JDVHUBZY.js +0 -2
- package/dist/core/extensions/builtin/claude-sdk-oauth/account-command.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/account-command.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/account-events.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/account-events.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/account-management.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/account-management.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/accounts.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/accounts.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/affinity.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/affinity.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/api-id.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/api-id.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/auth-attempt.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/auth-attempt.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/auth-environment.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/auth-environment.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/auth-lane.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/auth-lane.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/availability.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/availability.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/bounded-queue.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/bounded-queue.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/config-dir-credentials.d.ts +0 -3
- package/dist/core/extensions/builtin/claude-sdk-oauth/config-dir-credentials.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/config-dir-credentials.js +0 -27
- package/dist/core/extensions/builtin/claude-sdk-oauth/config-dir-credentials.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/content-blocks.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/content-blocks.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/custom-tools-schema.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/custom-tools-schema.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/custom-tools.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/custom-tools.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/errors.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/errors.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/executable-path-lookup.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/executable-path-lookup.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/executable.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/executable.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/failover.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/failover.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/guidance.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/guidance.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/index.d.ts +0 -11
- package/dist/core/extensions/builtin/claude-sdk-oauth/index.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/index.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/oauth-login.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/oauth-login.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/options.d.ts +0 -18
- package/dist/core/extensions/builtin/claude-sdk-oauth/options.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/options.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/prompt-bridge.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/prompt-bridge.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/prompt-directive-dedupe.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/prompt-directive-dedupe.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/refusal.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/refusal.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/sdk-boundary.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/sdk-boundary.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/sdk-boundary.lazy.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/sdk-boundary.lazy.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-binding-store.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-binding-store.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-binding.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-binding.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-commit-boundary.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-commit-boundary.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-continuity.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-continuity.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-entry-annotations.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-entry-annotations.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-observability.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-observability.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-reaper.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-reaper.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-reattach.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-reattach.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-pump.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-pump.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-state.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-state.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-wiring.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-wiring.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-restored-admission.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-restored-admission.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-stream.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-stream.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-sync.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-sync.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-turn-attempt.d.ts +0 -11
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-turn-attempt.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-turn-attempt.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-turn-claim.d.ts +0 -14
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-turn-claim.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-turn-claim.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-turn-types.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-turn-types.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/settings.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/settings.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/stream-events.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/stream-events.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/stream-guidance.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/stream-guidance.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/stream-protocol.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/stream-protocol.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/stream.d.ts +0 -3
- package/dist/core/extensions/builtin/claude-sdk-oauth/stream.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/stream.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/system-prompt.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/system-prompt.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/tool-watch.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/tool-watch.js.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/tools.d.ts.map +0 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/tools.js.map +0 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/openai-codex.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/openai-codex.js.map +0 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai-codex.json +0 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.d.ts +0 -3
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.js +0 -22
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.js.map +0 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.d.ts +0 -4
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.js +0 -6
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.js.map +0 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/openai-codex-auth.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/openai-codex-auth.js.map +0 -1
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/account-events.d.ts +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/account-events.js +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/accounts.js +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/affinity.d.ts +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/api-id.d.ts +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/api-id.js +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/auth-attempt.js +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/auth-environment.d.ts +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/auth-environment.js +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/availability.d.ts +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/availability.js +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/bounded-queue.d.ts +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/content-blocks.d.ts +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/content-blocks.js +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/custom-tools-schema.d.ts +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/custom-tools-schema.js +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/custom-tools.d.ts +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/custom-tools.js +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/executable-path-lookup.d.ts +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/executable-path-lookup.js +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/executable.d.ts +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/executable.js +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/failover.d.ts +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/guidance.d.ts +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/prompt-bridge.d.ts +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/prompt-bridge.js +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/prompt-directive-dedupe.d.ts +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/prompt-directive-dedupe.js +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/refusal.d.ts +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/refusal.js +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/sdk-boundary.d.ts +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/sdk-boundary.js +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/sdk-boundary.lazy.js +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-binding-store.d.ts +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-binding-store.js +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-binding.d.ts +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-binding.js +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-commit-boundary.d.ts +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-continuity.d.ts +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-continuity.js +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-entry-annotations.js +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-observability.d.ts +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-reaper.d.ts +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-reaper.js +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-registry-state.js +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-registry-wiring.d.ts +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-restored-admission.js +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-sync.js +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-turn-attempt.js +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-turn-types.d.ts +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/session-turn-types.js +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/stream-events.d.ts +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/stream-events.js +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/stream-guidance.d.ts +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/stream-guidance.js +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/stream-protocol.d.ts +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/stream-protocol.js +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/system-prompt.d.ts +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/system-prompt.js +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/tool-watch.d.ts +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/tools.d.ts +0 -0
- /package/dist/core/extensions/builtin/{claude-sdk-oauth → anthropic-subscription}/tools.js +0 -0
- /package/examples/extensions/{openai-codex-usage → chatgpt-subscription-usage}/README.md +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host-process-metrics.d.ts","sourceRoot":"","sources":["../../../src/modes/rpc/host-process-metrics.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"host-process-metrics.d.ts","sourceRoot":"","sources":["../../../src/modes/rpc/host-process-metrics.ts"],"names":[],"mappings":"AAqBA,MAAM,WAAW,kBAAkB;IAClC,uGAAuG;IACvG,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,2EAA2E;IAC3E,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,gFAAgF;IAChF,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAeD,wBAAsB,sBAAsB,CAC3C,GAAG,EAAE,MAAM,EACX,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAC1C,OAAO,CAAC,kBAAkB,CAAC,CAa7B"}
|
|
@@ -7,22 +7,35 @@
|
|
|
7
7
|
* that holds every session is its child. Reporting only the supervisor would answer "3 MB" for a
|
|
8
8
|
* daemon holding two gigabytes.
|
|
9
9
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
10
|
+
* The table itself is read through the kernel (`host-process-table.ts`), never by spawning `ps`:
|
|
11
|
+
* a daemon-control surface polled at client cadence must not run one probe child per read - on a
|
|
12
|
+
* runtime whose `execFile` does not reap, that is the #1507/omo-desktop#594 zombie machine, one
|
|
13
|
+
* permanent defunct child per status request. Where the kernel reader is unavailable (Node,
|
|
14
|
+
* unsupported platforms) every field is `null`, which means "this platform does not publish it
|
|
15
|
+
* here" rather than zero: a status that reported 0 open descriptors on a platform it cannot count
|
|
16
|
+
* them on would be worse than saying nothing. A failing read never fails the status - an operator
|
|
17
|
+
* asking what a daemon is doing must still get its identity and its sessions.
|
|
14
18
|
*/
|
|
15
|
-
import { execFile } from "node:child_process";
|
|
16
19
|
import { readdir } from "node:fs/promises";
|
|
17
|
-
import {
|
|
18
|
-
const run = promisify(execFile);
|
|
19
|
-
const PS_TIMEOUT_MS = 5_000;
|
|
20
|
-
const KILOBYTES_PER_MEGABYTE = 1024;
|
|
20
|
+
import { loadProcessTableReader } from "./host-process-table.js";
|
|
21
21
|
const UNOBSERVED = { rss_mb: null, open_fds: null, zombies: null };
|
|
22
|
+
/** Resolved once per platform; `undefined` on runtimes that cannot read the table without spawning. */
|
|
23
|
+
const readers = new Map();
|
|
24
|
+
function tableReader(platform) {
|
|
25
|
+
const cached = readers.get(platform);
|
|
26
|
+
if (cached !== undefined)
|
|
27
|
+
return cached;
|
|
28
|
+
const loading = loadProcessTableReader(platform);
|
|
29
|
+
readers.set(platform, loading);
|
|
30
|
+
return loading;
|
|
31
|
+
}
|
|
22
32
|
export async function readHostProcessMetrics(pid, platform = process.platform) {
|
|
23
33
|
if (platform === "win32")
|
|
24
34
|
return UNOBSERVED;
|
|
25
|
-
const
|
|
35
|
+
const read = await tableReader(platform);
|
|
36
|
+
if (read === undefined)
|
|
37
|
+
return UNOBSERVED;
|
|
38
|
+
const rows = read();
|
|
26
39
|
if (rows === undefined)
|
|
27
40
|
return UNOBSERVED;
|
|
28
41
|
const tree = descendants(rows, pid);
|
|
@@ -34,27 +47,6 @@ export async function readHostProcessMetrics(pid, platform = process.platform) {
|
|
|
34
47
|
zombies: tree.filter((row) => row.state.startsWith("Z")).length,
|
|
35
48
|
};
|
|
36
49
|
}
|
|
37
|
-
/**
|
|
38
|
-
* One `ps` reading of the whole table. A daemon's children are found by walking `ppid`, so the
|
|
39
|
-
* table has to be read once rather than probed per pid - and this process spawns nothing else.
|
|
40
|
-
*/
|
|
41
|
-
async function processTable() {
|
|
42
|
-
try {
|
|
43
|
-
const { stdout } = await run("ps", ["-A", "-o", "pid=,ppid=,stat=,rss="], { timeout: PS_TIMEOUT_MS });
|
|
44
|
-
return stdout.split("\n").flatMap((line) => {
|
|
45
|
-
const [pid, ppid, state, rss] = line.trim().split(/\s+/u);
|
|
46
|
-
if (pid === undefined || ppid === undefined || state === undefined || rss === undefined)
|
|
47
|
-
return [];
|
|
48
|
-
const row = { pid: Number(pid), ppid: Number(ppid), state, rssKb: Number(rss) };
|
|
49
|
-
return Number.isInteger(row.pid) && Number.isInteger(row.ppid) && Number.isFinite(row.rssKb) ? [row] : [];
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
catch {
|
|
53
|
-
// `ps` missing, denied or slow: the daemon's own answers still stand, so this stays a gap in
|
|
54
|
-
// the report rather than a failed status.
|
|
55
|
-
return undefined;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
50
|
function descendants(rows, root) {
|
|
59
51
|
const tree = rows.filter((row) => row.pid === root);
|
|
60
52
|
if (tree.length === 0)
|
|
@@ -68,6 +60,7 @@ function descendants(rows, root) {
|
|
|
68
60
|
}
|
|
69
61
|
return tree;
|
|
70
62
|
}
|
|
63
|
+
const KILOBYTES_PER_MEGABYTE = 1024;
|
|
71
64
|
async function openDescriptors(tree) {
|
|
72
65
|
let total = 0;
|
|
73
66
|
let counted = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host-process-metrics.js","sourceRoot":"","sources":["../../../src/modes/rpc/host-process-metrics.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"host-process-metrics.js","sourceRoot":"","sources":["../../../src/modes/rpc/host-process-metrics.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * What the operating system says about a running daemon: its resident memory, its open descriptors\n * and the children it has not reaped.\n *\n * The numbers describe the whole PROCESS TREE rooted at the registered pid, because that is what a\n * daemon costs: the pid a client can prove ownership of is the lifecycle SUPERVISOR, and the host\n * that holds every session is its child. Reporting only the supervisor would answer \"3 MB\" for a\n * daemon holding two gigabytes.\n *\n * The table itself is read through the kernel (`host-process-table.ts`), never by spawning `ps`:\n * a daemon-control surface polled at client cadence must not run one probe child per read - on a\n * runtime whose `execFile` does not reap, that is the #1507/omo-desktop#594 zombie machine, one\n * permanent defunct child per status request. Where the kernel reader is unavailable (Node,\n * unsupported platforms) every field is `null`, which means \"this platform does not publish it\n * here\" rather than zero: a status that reported 0 open descriptors on a platform it cannot count\n * them on would be worse than saying nothing. A failing read never fails the status - an operator\n * asking what a daemon is doing must still get its identity and its sessions.\n */\nimport { readdir } from \"node:fs/promises\";\nimport { loadProcessTableReader, type ProcessTableReader, type ProcessTableRow } from \"./host-process-table.ts\";\n\nexport interface HostProcessMetrics {\n\t/** Resident memory of the daemon's process tree, in megabytes; shared pages count once per process. */\n\treadonly rss_mb: number | null;\n\t/** Open descriptors across the tree. `/proc`-only, so `null` off Linux. */\n\treadonly open_fds: number | null;\n\t/** Processes in the tree that have exited and whose status nobody collected. */\n\treadonly zombies: number | null;\n}\n\nconst UNOBSERVED: HostProcessMetrics = { rss_mb: null, open_fds: null, zombies: null };\n\n/** Resolved once per platform; `undefined` on runtimes that cannot read the table without spawning. */\nconst readers = new Map<string, Promise<ProcessTableReader | undefined>>();\n\nfunction tableReader(platform: NodeJS.Platform): Promise<ProcessTableReader | undefined> {\n\tconst cached = readers.get(platform);\n\tif (cached !== undefined) return cached;\n\tconst loading = loadProcessTableReader(platform);\n\treaders.set(platform, loading);\n\treturn loading;\n}\n\nexport async function readHostProcessMetrics(\n\tpid: number,\n\tplatform: NodeJS.Platform = process.platform,\n): Promise<HostProcessMetrics> {\n\tif (platform === \"win32\") return UNOBSERVED;\n\tconst read = await tableReader(platform);\n\tif (read === undefined) return UNOBSERVED;\n\tconst rows = read();\n\tif (rows === undefined) return UNOBSERVED;\n\tconst tree = descendants(rows, pid);\n\tif (tree.length === 0) return UNOBSERVED;\n\treturn {\n\t\trss_mb: Math.round(tree.reduce((total, row) => total + row.rssKb, 0) / KILOBYTES_PER_MEGABYTE),\n\t\topen_fds: platform === \"linux\" ? await openDescriptors(tree) : null,\n\t\tzombies: tree.filter((row) => row.state.startsWith(\"Z\")).length,\n\t};\n}\n\nfunction descendants(rows: readonly ProcessTableRow[], root: number): readonly ProcessTableRow[] {\n\tconst tree = rows.filter((row) => row.pid === root);\n\tif (tree.length === 0) return tree;\n\tfor (let index = 0; index < tree.length; index++) {\n\t\tconst parent = tree[index].pid;\n\t\tfor (const row of rows) {\n\t\t\tif (row.ppid === parent && !tree.includes(row)) tree.push(row);\n\t\t}\n\t}\n\treturn tree;\n}\n\nconst KILOBYTES_PER_MEGABYTE = 1024;\n\nasync function openDescriptors(tree: readonly ProcessTableRow[]): Promise<number | null> {\n\tlet total = 0;\n\tlet counted = false;\n\tfor (const row of tree) {\n\t\tconst entries = await readdir(`/proc/${row.pid}/fd`).catch(() => undefined);\n\t\tif (entries === undefined) continue;\n\t\tcounted = true;\n\t\ttotal += entries.length;\n\t}\n\treturn counted ? total : null;\n}\n"]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/** One row of the whole-table read; `state` is `"Z"` for zombies, `"U"` otherwise. */
|
|
2
|
+
export interface ProcessTableRow {
|
|
3
|
+
readonly pid: number;
|
|
4
|
+
readonly ppid: number;
|
|
5
|
+
readonly state: string;
|
|
6
|
+
/** Resident memory in kilobytes; 0 where the kernel reports none (zombies). */
|
|
7
|
+
readonly rssKb: number;
|
|
8
|
+
}
|
|
9
|
+
/** Reads the whole process table without spawning anything, or `undefined` when it cannot. */
|
|
10
|
+
export type ProcessTableReader = () => readonly ProcessTableRow[] | undefined;
|
|
11
|
+
export interface ProcessTableReaderOptions {
|
|
12
|
+
/**
|
|
13
|
+
* Size of the first `sysctl` buffer. The reader grows geometrically from here on a
|
|
14
|
+
* short read; tests use a tiny value to force the growth path. Production keeps the
|
|
15
|
+
* default, sized for the busiest observed table.
|
|
16
|
+
*/
|
|
17
|
+
readonly initialTableBytes?: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Loads the platform reader once per process. Node (and any platform without bindings)
|
|
21
|
+
* resolves to `undefined`: the status surface then reports `null` fields rather than
|
|
22
|
+
* falling back to a `ps` child, because a read that spawns a probe is the bug this module
|
|
23
|
+
* exists to prevent.
|
|
24
|
+
*/
|
|
25
|
+
export declare function loadProcessTableReader(platform?: NodeJS.Platform, options?: ProcessTableReaderOptions): Promise<ProcessTableReader | undefined>;
|
|
26
|
+
/**
|
|
27
|
+
* Parses `rowCount` `kinfo_proc` rows out of a `sysctl(KERN_PROC_ALL)` buffer.
|
|
28
|
+
*
|
|
29
|
+
* Fails closed: the parsed table must describe THIS process - its row exists, its ppid
|
|
30
|
+
* equals the kernel's own view (`process.ppid`), and it is not a zombie - or the caller
|
|
31
|
+
* gets `undefined`. The offsets above are pinned by measurement on darwin arm64; if a
|
|
32
|
+
* future SDK or arch moves the layout, that drift surfaces here as a failed self-check and
|
|
33
|
+
* the status reports `null`, never a plausible wrong table.
|
|
34
|
+
*/
|
|
35
|
+
export declare function parseKernelProcessTable(table: Uint8Array, rowCount: number, residentKb: (pid: number) => number): readonly ProcessTableRow[] | undefined;
|
|
36
|
+
//# sourceMappingURL=host-process-table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host-process-table.d.ts","sourceRoot":"","sources":["../../../src/modes/rpc/host-process-table.ts"],"names":[],"mappings":"AAoBA,sFAAsF;AACtF,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,+EAA+E;IAC/E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACvB;AAED,8FAA8F;AAC9F,MAAM,MAAM,kBAAkB,GAAG,MAAM,SAAS,eAAe,EAAE,GAAG,SAAS,CAAC;AAE9E,MAAM,WAAW,yBAAyB;IACzC;;;;OAIG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CACpC;AAQD;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC3C,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAC5C,OAAO,GAAE,yBAA8B,GACrC,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAMzC;AAeD;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACtC,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GACjC,SAAS,eAAe,EAAE,GAAG,SAAS,CAkBxC"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The process table through the kernel, for a long-lived daemon's status surface.
|
|
3
|
+
*
|
|
4
|
+
* Why this exists (omo-desktop#594, senpi#1507): a daemon-control surface that reads its
|
|
5
|
+
* metrics by spawning `ps` runs one short-lived probe child per request, at client poll
|
|
6
|
+
* cadence. On runtimes whose `execFile` does not reap (the condition #1507 measured in the
|
|
7
|
+
* wild - 9,386 zombies), every probe becomes a permanent zombie of whichever long-lived
|
|
8
|
+
* process performed the read. The watchdog lost its `ps` probe for exactly this reason
|
|
9
|
+
* (#1721); this module gives the status metrics the same zero-spawn property: one `sysctl`
|
|
10
|
+
* on darwin (the table `ps` itself reads, zombies included), a `/proc/<pid>/stat` scan on
|
|
11
|
+
* linux, and nothing at all on runtimes without the bindings - the caller reports `null`
|
|
12
|
+
* rather than spawning.
|
|
13
|
+
*
|
|
14
|
+
* RUNTIME BOUNDARY (same shape as `child-reaper-syscalls.ts`): the darwin reader needs
|
|
15
|
+
* `bun:ffi`, a Bun-only builtin whose top-level import makes this module unloadable on Node.
|
|
16
|
+
* The specifier is imported behind the runtime gate, so a Node caller gets `undefined` and
|
|
17
|
+
* answers `null`, never a child process.
|
|
18
|
+
*/
|
|
19
|
+
import { readdirSync, readFileSync } from "node:fs";
|
|
20
|
+
function supportedPlatform(platform) {
|
|
21
|
+
return platform === "darwin" || platform === "linux" ? platform : undefined;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Loads the platform reader once per process. Node (and any platform without bindings)
|
|
25
|
+
* resolves to `undefined`: the status surface then reports `null` fields rather than
|
|
26
|
+
* falling back to a `ps` child, because a read that spawns a probe is the bug this module
|
|
27
|
+
* exists to prevent.
|
|
28
|
+
*/
|
|
29
|
+
export async function loadProcessTableReader(platform = process.platform, options = {}) {
|
|
30
|
+
const supported = supportedPlatform(platform);
|
|
31
|
+
if (supported === undefined)
|
|
32
|
+
return undefined;
|
|
33
|
+
if (typeof globalThis.Bun === "undefined")
|
|
34
|
+
return undefined;
|
|
35
|
+
const read = supported === "darwin" ? await darwinReader(options) : linuxReader;
|
|
36
|
+
return read;
|
|
37
|
+
}
|
|
38
|
+
/** `struct kinfo_proc` fields this reader consumes, byte offsets pinned on darwin arm64. */
|
|
39
|
+
const KINFO_PROC_STRIDE = 648;
|
|
40
|
+
const KINFO_PID_OFFSET = 40;
|
|
41
|
+
const KINFO_PPID_OFFSET = 560;
|
|
42
|
+
/** `p_stat`: SZOMB is 5; every live state is a different value. */
|
|
43
|
+
const KINFO_STAT_OFFSET = 36;
|
|
44
|
+
const SZOMB = 5;
|
|
45
|
+
/** `struct proc_taskinfo` `pti_resident_size`, the same field `ps -o rss` reports. */
|
|
46
|
+
const PROC_PIDTASKINFO = 4;
|
|
47
|
+
const TASKINFO_RESIDENT_OFFSET = 8;
|
|
48
|
+
const TABLE_START_BYTES = 1 << 20;
|
|
49
|
+
const TABLE_MAX_BYTES = 32 << 20;
|
|
50
|
+
/**
|
|
51
|
+
* Parses `rowCount` `kinfo_proc` rows out of a `sysctl(KERN_PROC_ALL)` buffer.
|
|
52
|
+
*
|
|
53
|
+
* Fails closed: the parsed table must describe THIS process - its row exists, its ppid
|
|
54
|
+
* equals the kernel's own view (`process.ppid`), and it is not a zombie - or the caller
|
|
55
|
+
* gets `undefined`. The offsets above are pinned by measurement on darwin arm64; if a
|
|
56
|
+
* future SDK or arch moves the layout, that drift surfaces here as a failed self-check and
|
|
57
|
+
* the status reports `null`, never a plausible wrong table.
|
|
58
|
+
*/
|
|
59
|
+
export function parseKernelProcessTable(table, rowCount, residentKb) {
|
|
60
|
+
if (rowCount <= 0 || table.byteLength < rowCount * KINFO_PROC_STRIDE)
|
|
61
|
+
return undefined;
|
|
62
|
+
const view = new DataView(table.buffer, table.byteOffset, table.byteLength);
|
|
63
|
+
const rows = [];
|
|
64
|
+
let selfSeen = false;
|
|
65
|
+
for (let index = 0; index < rowCount; index++) {
|
|
66
|
+
const base = index * KINFO_PROC_STRIDE;
|
|
67
|
+
const pid = view.getUint32(base + KINFO_PID_OFFSET, true);
|
|
68
|
+
if (!Number.isInteger(pid) || pid <= 0)
|
|
69
|
+
continue;
|
|
70
|
+
const ppid = view.getUint32(base + KINFO_PPID_OFFSET, true);
|
|
71
|
+
const zombie = table[base + KINFO_STAT_OFFSET] === SZOMB;
|
|
72
|
+
if (pid === process.pid) {
|
|
73
|
+
if (ppid !== process.ppid || zombie)
|
|
74
|
+
return undefined;
|
|
75
|
+
selfSeen = true;
|
|
76
|
+
}
|
|
77
|
+
rows.push({ pid, ppid, state: zombie ? "Z" : "U", rssKb: residentKb(pid) });
|
|
78
|
+
}
|
|
79
|
+
return selfSeen ? rows : undefined;
|
|
80
|
+
}
|
|
81
|
+
async function darwinReader(options) {
|
|
82
|
+
const { dlopen, FFIType, ptr } = await import("bun:ffi");
|
|
83
|
+
const library = dlopen("libSystem.B.dylib", {
|
|
84
|
+
sysctl: {
|
|
85
|
+
args: [FFIType.ptr, FFIType.u32, FFIType.ptr, FFIType.ptr, FFIType.ptr, FFIType.i32],
|
|
86
|
+
returns: FFIType.i32,
|
|
87
|
+
},
|
|
88
|
+
proc_pidinfo: {
|
|
89
|
+
// The `u_int64_t arg` parameter is flavor-specific and unused by PROC_PIDTASKINFO;
|
|
90
|
+
// the repo's bun:ffi shim has no u64, and a u32 0 fills the register identically.
|
|
91
|
+
args: [FFIType.i32, FFIType.i32, FFIType.u32, FFIType.ptr, FFIType.i32],
|
|
92
|
+
returns: FFIType.i32,
|
|
93
|
+
},
|
|
94
|
+
});
|
|
95
|
+
const mib = new Int32Array([1, 14, 0]); // CTL_KERN, KERN_PROC, KERN_PROC_ALL
|
|
96
|
+
const none = new Uint8Array(1);
|
|
97
|
+
const requested = options.initialTableBytes;
|
|
98
|
+
let table = new Uint8Array(Number.isFinite(requested) && requested !== undefined && requested > 0
|
|
99
|
+
? Math.min(Math.floor(requested), TABLE_MAX_BYTES)
|
|
100
|
+
: TABLE_START_BYTES);
|
|
101
|
+
const length = new Uint32Array(1);
|
|
102
|
+
const taskInfo = new Uint8Array(256);
|
|
103
|
+
const taskView = new DataView(taskInfo.buffer);
|
|
104
|
+
const residentKb = (pid) => {
|
|
105
|
+
taskInfo.fill(0);
|
|
106
|
+
const filled = library.symbols.proc_pidinfo(pid, PROC_PIDTASKINFO, 0, ptr(taskInfo), taskInfo.byteLength);
|
|
107
|
+
return filled > 0 ? Math.round(Number(taskView.getBigUint64(TASKINFO_RESIDENT_OFFSET, true)) / 1024) : 0;
|
|
108
|
+
};
|
|
109
|
+
return () => {
|
|
110
|
+
for (;;) {
|
|
111
|
+
length[0] = table.byteLength;
|
|
112
|
+
const result = library.symbols.sysctl(ptr(mib), mib.length, ptr(table), ptr(length), ptr(none), 0);
|
|
113
|
+
if (result !== 0) {
|
|
114
|
+
// XNU is not documented to raise `oldlenp` on a too-small KERN_PROC read, so the
|
|
115
|
+
// growth never depends on it: double (or jump to a larger reported size, if the
|
|
116
|
+
// kernel did write one), bounded by the cap, and retry.
|
|
117
|
+
if (table.byteLength >= TABLE_MAX_BYTES)
|
|
118
|
+
return undefined;
|
|
119
|
+
const reported = length[0] > table.byteLength ? length[0] : 0;
|
|
120
|
+
table = new Uint8Array(Math.min(TABLE_MAX_BYTES, Math.max(table.byteLength * 2, reported)));
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
return parseKernelProcessTable(table, Math.floor(length[0] / KINFO_PROC_STRIDE), residentKb);
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
/** `/proc/<pid>/stat`: state is field 3, ppid field 4, rss field 24 in pages. */
|
|
128
|
+
function linuxReader() {
|
|
129
|
+
const rows = [];
|
|
130
|
+
// The stat file reports rss in pages; node exposes no page size, and every platform this
|
|
131
|
+
// ships on today uses 4 KiB pages - arm64 linux kernels with 16 KiB or 64 KiB pages
|
|
132
|
+
// under-report rss by 4x-16x. The figure feeds an advisory MB status, not accounting.
|
|
133
|
+
const pageKb = 4;
|
|
134
|
+
for (const entry of readdirSync("/proc")) {
|
|
135
|
+
const pid = Number(entry);
|
|
136
|
+
if (!Number.isInteger(pid) || pid <= 0)
|
|
137
|
+
continue;
|
|
138
|
+
let stat;
|
|
139
|
+
try {
|
|
140
|
+
stat = readFileSync(`/proc/${pid}/stat`, "utf8");
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
// The process exited between the directory listing and this read.
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
// comm is parenthesised and may contain spaces, so parse after its last ')'.
|
|
147
|
+
const tail = stat.slice(stat.lastIndexOf(")") + 2).split(" ");
|
|
148
|
+
const state = tail[0];
|
|
149
|
+
const ppid = Number(tail[1]);
|
|
150
|
+
if (state === undefined || !Number.isInteger(ppid))
|
|
151
|
+
continue;
|
|
152
|
+
const rssPages = Number(tail[21]);
|
|
153
|
+
rows.push({
|
|
154
|
+
pid,
|
|
155
|
+
ppid,
|
|
156
|
+
state,
|
|
157
|
+
rssKb: Number.isFinite(rssPages) ? Math.round(rssPages * pageKb) : 0,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
return rows;
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=host-process-table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host-process-table.js","sourceRoot":"","sources":["../../../src/modes/rpc/host-process-table.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * The process table through the kernel, for a long-lived daemon's status surface.\n *\n * Why this exists (omo-desktop#594, senpi#1507): a daemon-control surface that reads its\n * metrics by spawning `ps` runs one short-lived probe child per request, at client poll\n * cadence. On runtimes whose `execFile` does not reap (the condition #1507 measured in the\n * wild - 9,386 zombies), every probe becomes a permanent zombie of whichever long-lived\n * process performed the read. The watchdog lost its `ps` probe for exactly this reason\n * (#1721); this module gives the status metrics the same zero-spawn property: one `sysctl`\n * on darwin (the table `ps` itself reads, zombies included), a `/proc/<pid>/stat` scan on\n * linux, and nothing at all on runtimes without the bindings - the caller reports `null`\n * rather than spawning.\n *\n * RUNTIME BOUNDARY (same shape as `child-reaper-syscalls.ts`): the darwin reader needs\n * `bun:ffi`, a Bun-only builtin whose top-level import makes this module unloadable on Node.\n * The specifier is imported behind the runtime gate, so a Node caller gets `undefined` and\n * answers `null`, never a child process.\n */\nimport { readdirSync, readFileSync } from \"node:fs\";\n\n/** One row of the whole-table read; `state` is `\"Z\"` for zombies, `\"U\"` otherwise. */\nexport interface ProcessTableRow {\n\treadonly pid: number;\n\treadonly ppid: number;\n\treadonly state: string;\n\t/** Resident memory in kilobytes; 0 where the kernel reports none (zombies). */\n\treadonly rssKb: number;\n}\n\n/** Reads the whole process table without spawning anything, or `undefined` when it cannot. */\nexport type ProcessTableReader = () => readonly ProcessTableRow[] | undefined;\n\nexport interface ProcessTableReaderOptions {\n\t/**\n\t * Size of the first `sysctl` buffer. The reader grows geometrically from here on a\n\t * short read; tests use a tiny value to force the growth path. Production keeps the\n\t * default, sized for the busiest observed table.\n\t */\n\treadonly initialTableBytes?: number;\n}\n\ntype SupportedPlatform = \"darwin\" | \"linux\";\n\nfunction supportedPlatform(platform: string): SupportedPlatform | undefined {\n\treturn platform === \"darwin\" || platform === \"linux\" ? platform : undefined;\n}\n\n/**\n * Loads the platform reader once per process. Node (and any platform without bindings)\n * resolves to `undefined`: the status surface then reports `null` fields rather than\n * falling back to a `ps` child, because a read that spawns a probe is the bug this module\n * exists to prevent.\n */\nexport async function loadProcessTableReader(\n\tplatform: NodeJS.Platform = process.platform,\n\toptions: ProcessTableReaderOptions = {},\n): Promise<ProcessTableReader | undefined> {\n\tconst supported = supportedPlatform(platform);\n\tif (supported === undefined) return undefined;\n\tif (typeof (globalThis as { Bun?: unknown }).Bun === \"undefined\") return undefined;\n\tconst read = supported === \"darwin\" ? await darwinReader(options) : linuxReader;\n\treturn read;\n}\n\n/** `struct kinfo_proc` fields this reader consumes, byte offsets pinned on darwin arm64. */\nconst KINFO_PROC_STRIDE = 648;\nconst KINFO_PID_OFFSET = 40;\nconst KINFO_PPID_OFFSET = 560;\n/** `p_stat`: SZOMB is 5; every live state is a different value. */\nconst KINFO_STAT_OFFSET = 36;\nconst SZOMB = 5;\n/** `struct proc_taskinfo` `pti_resident_size`, the same field `ps -o rss` reports. */\nconst PROC_PIDTASKINFO = 4;\nconst TASKINFO_RESIDENT_OFFSET = 8;\nconst TABLE_START_BYTES = 1 << 20;\nconst TABLE_MAX_BYTES = 32 << 20;\n\n/**\n * Parses `rowCount` `kinfo_proc` rows out of a `sysctl(KERN_PROC_ALL)` buffer.\n *\n * Fails closed: the parsed table must describe THIS process - its row exists, its ppid\n * equals the kernel's own view (`process.ppid`), and it is not a zombie - or the caller\n * gets `undefined`. The offsets above are pinned by measurement on darwin arm64; if a\n * future SDK or arch moves the layout, that drift surfaces here as a failed self-check and\n * the status reports `null`, never a plausible wrong table.\n */\nexport function parseKernelProcessTable(\n\ttable: Uint8Array,\n\trowCount: number,\n\tresidentKb: (pid: number) => number,\n): readonly ProcessTableRow[] | undefined {\n\tif (rowCount <= 0 || table.byteLength < rowCount * KINFO_PROC_STRIDE) return undefined;\n\tconst view = new DataView(table.buffer, table.byteOffset, table.byteLength);\n\tconst rows: ProcessTableRow[] = [];\n\tlet selfSeen = false;\n\tfor (let index = 0; index < rowCount; index++) {\n\t\tconst base = index * KINFO_PROC_STRIDE;\n\t\tconst pid = view.getUint32(base + KINFO_PID_OFFSET, true);\n\t\tif (!Number.isInteger(pid) || pid <= 0) continue;\n\t\tconst ppid = view.getUint32(base + KINFO_PPID_OFFSET, true);\n\t\tconst zombie = table[base + KINFO_STAT_OFFSET] === SZOMB;\n\t\tif (pid === process.pid) {\n\t\t\tif (ppid !== process.ppid || zombie) return undefined;\n\t\t\tselfSeen = true;\n\t\t}\n\t\trows.push({ pid, ppid, state: zombie ? \"Z\" : \"U\", rssKb: residentKb(pid) });\n\t}\n\treturn selfSeen ? rows : undefined;\n}\n\nasync function darwinReader(options: ProcessTableReaderOptions): Promise<ProcessTableReader | undefined> {\n\tconst { dlopen, FFIType, ptr } = await import(\"bun:ffi\");\n\tconst library = dlopen(\"libSystem.B.dylib\", {\n\t\tsysctl: {\n\t\t\targs: [FFIType.ptr, FFIType.u32, FFIType.ptr, FFIType.ptr, FFIType.ptr, FFIType.i32],\n\t\t\treturns: FFIType.i32,\n\t\t},\n\t\tproc_pidinfo: {\n\t\t\t// The `u_int64_t arg` parameter is flavor-specific and unused by PROC_PIDTASKINFO;\n\t\t\t// the repo's bun:ffi shim has no u64, and a u32 0 fills the register identically.\n\t\t\targs: [FFIType.i32, FFIType.i32, FFIType.u32, FFIType.ptr, FFIType.i32],\n\t\t\treturns: FFIType.i32,\n\t\t},\n\t});\n\tconst mib = new Int32Array([1, 14, 0]); // CTL_KERN, KERN_PROC, KERN_PROC_ALL\n\tconst none = new Uint8Array(1);\n\tconst requested = options.initialTableBytes;\n\tlet table = new Uint8Array(\n\t\tNumber.isFinite(requested) && requested !== undefined && requested > 0\n\t\t\t? Math.min(Math.floor(requested), TABLE_MAX_BYTES)\n\t\t\t: TABLE_START_BYTES,\n\t);\n\tconst length = new Uint32Array(1);\n\tconst taskInfo = new Uint8Array(256);\n\tconst taskView = new DataView(taskInfo.buffer);\n\tconst residentKb = (pid: number): number => {\n\t\ttaskInfo.fill(0);\n\t\tconst filled = library.symbols.proc_pidinfo(pid, PROC_PIDTASKINFO, 0, ptr(taskInfo), taskInfo.byteLength);\n\t\treturn filled > 0 ? Math.round(Number(taskView.getBigUint64(TASKINFO_RESIDENT_OFFSET, true)) / 1024) : 0;\n\t};\n\treturn () => {\n\t\tfor (;;) {\n\t\t\tlength[0] = table.byteLength;\n\t\t\tconst result = library.symbols.sysctl(ptr(mib), mib.length, ptr(table), ptr(length), ptr(none), 0);\n\t\t\tif (result !== 0) {\n\t\t\t\t// XNU is not documented to raise `oldlenp` on a too-small KERN_PROC read, so the\n\t\t\t\t// growth never depends on it: double (or jump to a larger reported size, if the\n\t\t\t\t// kernel did write one), bounded by the cap, and retry.\n\t\t\t\tif (table.byteLength >= TABLE_MAX_BYTES) return undefined;\n\t\t\t\tconst reported = length[0] > table.byteLength ? length[0] : 0;\n\t\t\t\ttable = new Uint8Array(Math.min(TABLE_MAX_BYTES, Math.max(table.byteLength * 2, reported)));\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\treturn parseKernelProcessTable(table, Math.floor(length[0] / KINFO_PROC_STRIDE), residentKb);\n\t\t}\n\t};\n}\n\n/** `/proc/<pid>/stat`: state is field 3, ppid field 4, rss field 24 in pages. */\nfunction linuxReader(): readonly ProcessTableRow[] | undefined {\n\tconst rows: ProcessTableRow[] = [];\n\t// The stat file reports rss in pages; node exposes no page size, and every platform this\n\t// ships on today uses 4 KiB pages - arm64 linux kernels with 16 KiB or 64 KiB pages\n\t// under-report rss by 4x-16x. The figure feeds an advisory MB status, not accounting.\n\tconst pageKb = 4;\n\tfor (const entry of readdirSync(\"/proc\")) {\n\t\tconst pid = Number(entry);\n\t\tif (!Number.isInteger(pid) || pid <= 0) continue;\n\t\tlet stat: string | undefined;\n\t\ttry {\n\t\t\tstat = readFileSync(`/proc/${pid}/stat`, \"utf8\");\n\t\t} catch {\n\t\t\t// The process exited between the directory listing and this read.\n\t\t\tcontinue;\n\t\t}\n\t\t// comm is parenthesised and may contain spaces, so parse after its last ')'.\n\t\tconst tail = stat.slice(stat.lastIndexOf(\")\") + 2).split(\" \");\n\t\tconst state = tail[0];\n\t\tconst ppid = Number(tail[1]);\n\t\tif (state === undefined || !Number.isInteger(ppid)) continue;\n\t\tconst rssPages = Number(tail[21]);\n\t\trows.push({\n\t\t\tpid,\n\t\t\tppid,\n\t\t\tstate,\n\t\t\trssKb: Number.isFinite(rssPages) ? Math.round(rssPages * pageKb) : 0,\n\t\t});\n\t}\n\treturn rows;\n}\n"]}
|
|
@@ -259,7 +259,7 @@ export declare class RpcClient {
|
|
|
259
259
|
*/
|
|
260
260
|
getAvailableThinkingLevels(): Promise<ThinkingLevel[]>;
|
|
261
261
|
/**
|
|
262
|
-
* Turn
|
|
262
|
+
* Turn ChatGPT Subscription fast mode (the `priority` service tier) on or off for the active model.
|
|
263
263
|
*
|
|
264
264
|
* The choice is remembered per model, so a later session on the same model starts the same
|
|
265
265
|
* way. Throws when the request is refused: a non-Codex model, or an active `:priority` model
|
|
@@ -459,7 +459,7 @@ export class RpcClient {
|
|
|
459
459
|
return this.getData(response).levels;
|
|
460
460
|
}
|
|
461
461
|
/**
|
|
462
|
-
* Turn
|
|
462
|
+
* Turn ChatGPT Subscription fast mode (the `priority` service tier) on or off for the active model.
|
|
463
463
|
*
|
|
464
464
|
* The choice is remembered per model, so a later session on the same model starts the same
|
|
465
465
|
* way. Throws when the request is refused: a non-Codex model, or an active `:priority` model
|