@0xmaxma/claude-gateway 2.0.5 → 2.0.7
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 -1
- package/dist/agent/builtin-commands.js +5 -5
- package/dist/agent/builtin-commands.js.map +1 -1
- package/dist/agent/command-help.d.ts +9 -0
- package/dist/agent/command-help.d.ts.map +1 -0
- package/dist/agent/command-help.js +50 -0
- package/dist/agent/command-help.js.map +1 -0
- package/dist/agent/dreaming/index.d.ts +6 -3
- package/dist/agent/dreaming/index.d.ts.map +1 -1
- package/dist/agent/dreaming/index.js +21 -1
- package/dist/agent/dreaming/index.js.map +1 -1
- package/dist/agent/knowledge/reflection.d.ts +7 -4
- package/dist/agent/knowledge/reflection.d.ts.map +1 -1
- package/dist/agent/knowledge/reflection.js +19 -1
- package/dist/agent/knowledge/reflection.js.map +1 -1
- package/dist/agent/runner.d.ts +51 -3
- package/dist/agent/runner.d.ts.map +1 -1
- package/dist/agent/runner.js +228 -107
- package/dist/agent/runner.js.map +1 -1
- package/dist/agent/session-compaction-scheduler.d.ts +22 -0
- package/dist/agent/session-compaction-scheduler.d.ts.map +1 -0
- package/dist/agent/session-compaction-scheduler.js +40 -0
- package/dist/agent/session-compaction-scheduler.js.map +1 -0
- package/dist/agent/session-confirmations.d.ts +12 -0
- package/dist/agent/session-confirmations.d.ts.map +1 -0
- package/dist/agent/session-confirmations.js +43 -0
- package/dist/agent/session-confirmations.js.map +1 -0
- package/dist/agent/session-status.d.ts +7 -0
- package/dist/agent/session-status.d.ts.map +1 -0
- package/dist/agent/session-status.js +16 -0
- package/dist/agent/session-status.js.map +1 -0
- package/dist/agent/skill-learning/index.d.ts +5 -1
- package/dist/agent/skill-learning/index.d.ts.map +1 -1
- package/dist/agent/skill-learning/index.js +23 -1
- package/dist/agent/skill-learning/index.js.map +1 -1
- package/dist/agent/skill-learning/notifier.d.ts +2 -1
- package/dist/agent/skill-learning/notifier.d.ts.map +1 -1
- package/dist/agent/skill-learning/notifier.js +1 -0
- package/dist/agent/skill-learning/notifier.js.map +1 -1
- package/dist/api/apps-router.d.ts.map +1 -1
- package/dist/api/apps-router.js +1 -3
- package/dist/api/apps-router.js.map +1 -1
- package/dist/api/cron-router.d.ts +1 -1
- package/dist/api/cron-router.d.ts.map +1 -1
- package/dist/api/cron-router.js +4 -4
- package/dist/api/cron-router.js.map +1 -1
- package/dist/api/dashboard-processes.d.ts +86 -0
- package/dist/api/dashboard-processes.d.ts.map +1 -0
- package/dist/api/dashboard-processes.js +155 -0
- package/dist/api/dashboard-processes.js.map +1 -0
- package/dist/api/dashboard-sessions.d.ts +15 -0
- package/dist/api/dashboard-sessions.d.ts.map +1 -0
- package/dist/api/dashboard-sessions.js +66 -0
- package/dist/api/dashboard-sessions.js.map +1 -0
- package/dist/api/gateway-router.d.ts +3 -4
- package/dist/api/gateway-router.d.ts.map +1 -1
- package/dist/api/gateway-router.js +177 -66
- package/dist/api/gateway-router.js.map +1 -1
- package/dist/api/memory-activity.d.ts +18 -0
- package/dist/api/memory-activity.d.ts.map +1 -0
- package/dist/api/memory-activity.js +97 -0
- package/dist/api/memory-activity.js.map +1 -0
- package/dist/api/oauth-connectors-router.d.ts +1 -1
- package/dist/api/oauth-connectors-router.d.ts.map +1 -1
- package/dist/api/oauth-connectors-router.js +11 -21
- package/dist/api/oauth-connectors-router.js.map +1 -1
- package/dist/api/router.d.ts +1 -1
- package/dist/api/router.d.ts.map +1 -1
- package/dist/api/router.js +3 -9
- package/dist/api/router.js.map +1 -1
- package/dist/api/share-router.d.ts +1 -1
- package/dist/api/share-router.d.ts.map +1 -1
- package/dist/api/share-router.js +1 -1
- package/dist/api/share-router.js.map +1 -1
- package/dist/api/slack-webhook-router.js +1 -1
- package/dist/api/slack-webhook-router.js.map +1 -1
- package/dist/api/voice-router.d.ts +1 -0
- package/dist/api/voice-router.d.ts.map +1 -1
- package/dist/api/voice-router.js +7 -0
- package/dist/api/voice-router.js.map +1 -1
- package/dist/apps/agent-container-migration.d.ts +2 -0
- package/dist/apps/agent-container-migration.d.ts.map +1 -1
- package/dist/apps/agent-container-migration.js +59 -2
- package/dist/apps/agent-container-migration.js.map +1 -1
- package/dist/apps/agent-manager.d.ts +4 -2
- package/dist/apps/agent-manager.d.ts.map +1 -1
- package/dist/apps/agent-manager.js +39 -3
- package/dist/apps/agent-manager.js.map +1 -1
- package/dist/apps/installer.d.ts +4 -3
- package/dist/apps/installer.d.ts.map +1 -1
- package/dist/apps/installer.js +8 -4
- package/dist/apps/installer.js.map +1 -1
- package/dist/build-provenance.json +8 -0
- package/dist/cli/args.js +1 -1
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/commands/app.d.ts.map +1 -1
- package/dist/cli/commands/app.js +39 -3
- package/dist/cli/commands/app.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +6 -2
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/safemode.d.ts +2 -0
- package/dist/cli/commands/safemode.d.ts.map +1 -0
- package/dist/cli/commands/safemode.js +279 -0
- package/dist/cli/commands/safemode.js.map +1 -0
- package/dist/cli/dependencies.d.ts +2 -0
- package/dist/cli/dependencies.d.ts.map +1 -1
- package/dist/cli/dependencies.js +81 -0
- package/dist/cli/dependencies.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +11 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/manager.d.ts.map +1 -1
- package/dist/cli/manager.js +4 -1
- package/dist/cli/manager.js.map +1 -1
- package/dist/config/agent-lifecycle.d.ts +26 -0
- package/dist/config/agent-lifecycle.d.ts.map +1 -0
- package/dist/config/agent-lifecycle.js +63 -0
- package/dist/config/agent-lifecycle.js.map +1 -0
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +11 -0
- package/dist/config/loader.js.map +1 -1
- package/dist/config/reload-policy.d.ts +9 -0
- package/dist/config/reload-policy.d.ts.map +1 -0
- package/dist/config/reload-policy.js +62 -0
- package/dist/config/reload-policy.js.map +1 -0
- package/dist/config/watcher.d.ts +3 -2
- package/dist/config/watcher.d.ts.map +1 -1
- package/dist/config/watcher.js +34 -51
- package/dist/config/watcher.js.map +1 -1
- package/dist/cron/tool-schemas.d.ts +296 -0
- package/dist/cron/tool-schemas.d.ts.map +1 -0
- package/dist/cron/tool-schemas.js +122 -0
- package/dist/cron/tool-schemas.js.map +1 -0
- package/dist/index.js +141 -158
- package/dist/index.js.map +1 -1
- package/dist/orchestration/agent-tool-schemas.js +5 -5
- package/dist/orchestration/agent-tool-schemas.js.map +1 -1
- package/dist/orchestration/background-work.d.ts +9 -0
- package/dist/orchestration/background-work.d.ts.map +1 -0
- package/dist/orchestration/background-work.js +49 -0
- package/dist/orchestration/background-work.js.map +1 -0
- package/dist/orchestration/bridge.d.ts +6 -15
- package/dist/orchestration/bridge.d.ts.map +1 -1
- package/dist/orchestration/bridge.js +67 -32
- package/dist/orchestration/bridge.js.map +1 -1
- package/dist/orchestration/capabilities.d.ts.map +1 -1
- package/dist/orchestration/capabilities.js +18 -10
- package/dist/orchestration/capabilities.js.map +1 -1
- package/dist/orchestration/capacity.d.ts +3 -2
- package/dist/orchestration/capacity.d.ts.map +1 -1
- package/dist/orchestration/capacity.js +7 -0
- package/dist/orchestration/capacity.js.map +1 -1
- package/dist/orchestration/channel-controls.d.ts.map +1 -1
- package/dist/orchestration/channel-controls.js +3 -2
- package/dist/orchestration/channel-controls.js.map +1 -1
- package/dist/orchestration/cli-skills.d.ts +5 -0
- package/dist/orchestration/cli-skills.d.ts.map +1 -1
- package/dist/orchestration/compact-measurements.d.ts +21 -0
- package/dist/orchestration/compact-measurements.d.ts.map +1 -0
- package/dist/orchestration/compact-measurements.js +62 -0
- package/dist/orchestration/compact-measurements.js.map +1 -0
- package/dist/orchestration/config.d.ts +4 -0
- package/dist/orchestration/config.d.ts.map +1 -1
- package/dist/orchestration/config.js +1 -1
- package/dist/orchestration/config.js.map +1 -1
- package/dist/orchestration/container-tool-schemas.d.ts +37 -0
- package/dist/orchestration/container-tool-schemas.d.ts.map +1 -0
- package/dist/orchestration/container-tool-schemas.js +27 -0
- package/dist/orchestration/container-tool-schemas.js.map +1 -0
- package/dist/orchestration/container.d.ts.map +1 -1
- package/dist/orchestration/container.js +7 -0
- package/dist/orchestration/container.js.map +1 -1
- package/dist/orchestration/context-delivery.d.ts +32 -0
- package/dist/orchestration/context-delivery.d.ts.map +1 -0
- package/dist/orchestration/context-delivery.js +101 -0
- package/dist/orchestration/context-delivery.js.map +1 -0
- package/dist/orchestration/conversation-intake.d.ts +10 -6
- package/dist/orchestration/conversation-intake.d.ts.map +1 -1
- package/dist/orchestration/conversation-intake.js +22 -8
- package/dist/orchestration/conversation-intake.js.map +1 -1
- package/dist/orchestration/dashboard-charts.d.ts +32 -0
- package/dist/orchestration/dashboard-charts.d.ts.map +1 -0
- package/dist/orchestration/dashboard-charts.js +77 -0
- package/dist/orchestration/dashboard-charts.js.map +1 -0
- package/dist/orchestration/dashboard-reader-worker.js +28 -10
- package/dist/orchestration/dashboard-reader-worker.js.map +1 -1
- package/dist/orchestration/dashboard-reader.d.ts +1 -1
- package/dist/orchestration/dashboard-reader.d.ts.map +1 -1
- package/dist/orchestration/dashboard-reader.js +2 -2
- package/dist/orchestration/dashboard-reader.js.map +1 -1
- package/dist/orchestration/decision-context.d.ts +1 -1
- package/dist/orchestration/decision-context.d.ts.map +1 -1
- package/dist/orchestration/decision-context.js +3 -3
- package/dist/orchestration/decision-context.js.map +1 -1
- package/dist/orchestration/gateway-tasks/controller.d.ts +29 -0
- package/dist/orchestration/gateway-tasks/controller.d.ts.map +1 -0
- package/dist/orchestration/gateway-tasks/controller.js +139 -0
- package/dist/orchestration/gateway-tasks/controller.js.map +1 -0
- package/dist/orchestration/gateway-tasks/safemode.d.ts +19 -0
- package/dist/orchestration/gateway-tasks/safemode.d.ts.map +1 -0
- package/dist/orchestration/gateway-tasks/safemode.js +128 -0
- package/dist/orchestration/gateway-tasks/safemode.js.map +1 -0
- package/dist/orchestration/mutation-recovery.d.ts +3 -2
- package/dist/orchestration/mutation-recovery.d.ts.map +1 -1
- package/dist/orchestration/mutation-recovery.js +8 -0
- package/dist/orchestration/mutation-recovery.js.map +1 -1
- package/dist/orchestration/native-compact.d.ts +4 -1
- package/dist/orchestration/native-compact.d.ts.map +1 -1
- package/dist/orchestration/native-compact.js +6 -2
- package/dist/orchestration/native-compact.js.map +1 -1
- package/dist/orchestration/process-turn.d.ts +12 -2
- package/dist/orchestration/process-turn.d.ts.map +1 -1
- package/dist/orchestration/process-turn.js +48 -8
- package/dist/orchestration/process-turn.js.map +1 -1
- package/dist/orchestration/recovery.d.ts.map +1 -1
- package/dist/orchestration/recovery.js +4 -2
- package/dist/orchestration/recovery.js.map +1 -1
- package/dist/orchestration/runtime.d.ts +23 -1
- package/dist/orchestration/runtime.d.ts.map +1 -1
- package/dist/orchestration/runtime.js +191 -21
- package/dist/orchestration/runtime.js.map +1 -1
- package/dist/orchestration/session-compaction.d.ts +59 -0
- package/dist/orchestration/session-compaction.d.ts.map +1 -0
- package/dist/orchestration/session-compaction.js +212 -0
- package/dist/orchestration/session-compaction.js.map +1 -0
- package/dist/orchestration/skills.d.ts +2 -0
- package/dist/orchestration/skills.d.ts.map +1 -1
- package/dist/orchestration/skills.js +4 -3
- package/dist/orchestration/skills.js.map +1 -1
- package/dist/orchestration/task-controls.d.ts +12 -0
- package/dist/orchestration/task-controls.d.ts.map +1 -1
- package/dist/orchestration/task-controls.js +3 -1
- package/dist/orchestration/task-controls.js.map +1 -1
- package/dist/orchestration/tasks/driver.d.ts.map +1 -1
- package/dist/orchestration/tasks/driver.js +100 -13
- package/dist/orchestration/tasks/driver.js.map +1 -1
- package/dist/orchestration/tasks/pool.d.ts +2 -0
- package/dist/orchestration/tasks/pool.d.ts.map +1 -1
- package/dist/orchestration/tasks/pool.js +4 -0
- package/dist/orchestration/tasks/pool.js.map +1 -1
- package/dist/orchestration/tasks/scheduler.d.ts.map +1 -1
- package/dist/orchestration/tasks/scheduler.js +4 -0
- package/dist/orchestration/tasks/scheduler.js.map +1 -1
- package/dist/orchestration/tasks/service.d.ts +4 -0
- package/dist/orchestration/tasks/service.d.ts.map +1 -1
- package/dist/orchestration/tasks/service.js +38 -8
- package/dist/orchestration/tasks/service.js.map +1 -1
- package/dist/orchestration/token-ledger.d.ts +8 -0
- package/dist/orchestration/token-ledger.d.ts.map +1 -1
- package/dist/orchestration/token-ledger.js +7 -2
- package/dist/orchestration/token-ledger.js.map +1 -1
- package/dist/orchestration/token-usage.d.ts +3 -0
- package/dist/orchestration/token-usage.d.ts.map +1 -1
- package/dist/orchestration/token-usage.js +12 -3
- package/dist/orchestration/token-usage.js.map +1 -1
- package/dist/orchestration/types.d.ts +19 -1
- package/dist/orchestration/types.d.ts.map +1 -1
- package/dist/orchestration/types.js.map +1 -1
- package/dist/orchestration/worker-crons.d.ts +5 -0
- package/dist/orchestration/worker-crons.d.ts.map +1 -0
- package/dist/orchestration/worker-crons.js +84 -0
- package/dist/orchestration/worker-crons.js.map +1 -0
- package/dist/orchestration/worker-harness.d.ts +15 -0
- package/dist/orchestration/worker-harness.d.ts.map +1 -0
- package/dist/orchestration/worker-harness.js +72 -0
- package/dist/orchestration/worker-harness.js.map +1 -0
- package/dist/safemode/config.d.ts +7 -0
- package/dist/safemode/config.d.ts.map +1 -0
- package/dist/safemode/config.js +67 -0
- package/dist/safemode/config.js.map +1 -0
- package/dist/safemode/context.d.ts +7 -0
- package/dist/safemode/context.d.ts.map +1 -0
- package/dist/safemode/context.js +397 -0
- package/dist/safemode/context.js.map +1 -0
- package/dist/safemode/external-owners.d.ts +19 -0
- package/dist/safemode/external-owners.d.ts.map +1 -0
- package/dist/safemode/external-owners.js +229 -0
- package/dist/safemode/external-owners.js.map +1 -0
- package/dist/safemode/native.d.ts +38 -0
- package/dist/safemode/native.d.ts.map +1 -0
- package/dist/safemode/native.js +220 -0
- package/dist/safemode/native.js.map +1 -0
- package/dist/safemode/params.d.ts +10 -0
- package/dist/safemode/params.d.ts.map +1 -0
- package/dist/safemode/params.js +86 -0
- package/dist/safemode/params.js.map +1 -0
- package/dist/safemode/provenance.d.ts +45 -0
- package/dist/safemode/provenance.d.ts.map +1 -0
- package/dist/safemode/provenance.js +153 -0
- package/dist/safemode/provenance.js.map +1 -0
- package/dist/safemode/runner.d.ts +17 -0
- package/dist/safemode/runner.d.ts.map +1 -0
- package/dist/safemode/runner.js +398 -0
- package/dist/safemode/runner.js.map +1 -0
- package/dist/safemode/store.d.ts +56 -0
- package/dist/safemode/store.d.ts.map +1 -0
- package/dist/safemode/store.js +451 -0
- package/dist/safemode/store.js.map +1 -0
- package/dist/session/codex-auth.d.ts +37 -0
- package/dist/session/codex-auth.d.ts.map +1 -0
- package/dist/session/codex-auth.js +266 -0
- package/dist/session/codex-auth.js.map +1 -0
- package/dist/session/codex-container-runtime.d.ts +15 -0
- package/dist/session/codex-container-runtime.d.ts.map +1 -0
- package/dist/session/codex-container-runtime.js +85 -0
- package/dist/session/codex-container-runtime.js.map +1 -0
- package/dist/session/codex-context-defaults.json +5 -0
- package/dist/session/codex-context.d.ts +13 -0
- package/dist/session/codex-context.d.ts.map +1 -0
- package/dist/session/codex-context.js +27 -0
- package/dist/session/codex-context.js.map +1 -0
- package/dist/session/codex-extension-discovery.d.ts +21 -0
- package/dist/session/codex-extension-discovery.d.ts.map +1 -0
- package/dist/session/codex-extension-discovery.js +132 -0
- package/dist/session/codex-extension-discovery.js.map +1 -0
- package/dist/session/codex-native-mcp-client.d.ts +37 -0
- package/dist/session/codex-native-mcp-client.d.ts.map +1 -0
- package/dist/session/codex-native-mcp-client.js +164 -0
- package/dist/session/codex-native-mcp-client.js.map +1 -0
- package/dist/session/codex-policy.d.ts +6 -0
- package/dist/session/codex-policy.d.ts.map +1 -0
- package/dist/session/codex-policy.js +17 -0
- package/dist/session/codex-policy.js.map +1 -0
- package/dist/session/codex-process.d.ts +114 -0
- package/dist/session/codex-process.d.ts.map +1 -0
- package/dist/session/codex-process.js +759 -0
- package/dist/session/codex-process.js.map +1 -0
- package/dist/session/codex-runtime.d.ts +20 -0
- package/dist/session/codex-runtime.d.ts.map +1 -0
- package/dist/session/codex-runtime.js +182 -0
- package/dist/session/codex-runtime.js.map +1 -0
- package/dist/session/codex-tool-capture.d.ts +35 -0
- package/dist/session/codex-tool-capture.d.ts.map +1 -0
- package/dist/session/codex-tool-capture.js +178 -0
- package/dist/session/codex-tool-capture.js.map +1 -0
- package/dist/session/container-connectors.d.ts +10 -0
- package/dist/session/container-connectors.d.ts.map +1 -0
- package/dist/session/container-connectors.js +41 -0
- package/dist/session/container-connectors.js.map +1 -0
- package/dist/session/container-extensions.d.ts +4 -0
- package/dist/session/container-extensions.d.ts.map +1 -0
- package/dist/session/container-extensions.js +45 -0
- package/dist/session/container-extensions.js.map +1 -0
- package/dist/session/managed-connectors.d.ts +16 -0
- package/dist/session/managed-connectors.d.ts.map +1 -0
- package/dist/session/managed-connectors.js +25 -0
- package/dist/session/managed-connectors.js.map +1 -0
- package/dist/session/process-diagnostics.d.ts +14 -0
- package/dist/session/process-diagnostics.d.ts.map +1 -0
- package/dist/session/process-diagnostics.js +39 -0
- package/dist/session/process-diagnostics.js.map +1 -0
- package/dist/session/process.d.ts +4 -0
- package/dist/session/process.d.ts.map +1 -1
- package/dist/session/process.js +21 -16
- package/dist/session/process.js.map +1 -1
- package/dist/session/request-tool-capture.d.ts +1 -1
- package/dist/session/request-tool-capture.d.ts.map +1 -1
- package/dist/session/runtime-profile.d.ts +8 -0
- package/dist/session/runtime-profile.d.ts.map +1 -1
- package/dist/session/runtime-profile.js +3 -2
- package/dist/session/runtime-profile.js.map +1 -1
- package/dist/session/worker-environment.d.ts +5 -0
- package/dist/session/worker-environment.d.ts.map +1 -0
- package/dist/session/worker-environment.js +27 -0
- package/dist/session/worker-environment.js.map +1 -0
- package/dist/session/worker-extensions.d.ts +20 -0
- package/dist/session/worker-extensions.d.ts.map +1 -0
- package/dist/session/worker-extensions.js +322 -0
- package/dist/session/worker-extensions.js.map +1 -0
- package/dist/skills/loader.d.ts +2 -0
- package/dist/skills/loader.d.ts.map +1 -1
- package/dist/skills/loader.js.map +1 -1
- package/dist/types.d.ts +33 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/ui/codex-context.d.ts +4 -0
- package/dist/ui/codex-context.d.ts.map +1 -0
- package/dist/ui/codex-context.js +15 -0
- package/dist/ui/codex-context.js.map +1 -0
- package/dist/ui/dashboard-charts.d.ts +3 -0
- package/dist/ui/dashboard-charts.d.ts.map +1 -0
- package/dist/ui/dashboard-charts.js +130 -0
- package/dist/ui/dashboard-charts.js.map +1 -0
- package/dist/ui/dashboard-client.d.ts.map +1 -1
- package/dist/ui/dashboard-client.js +20 -21
- package/dist/ui/dashboard-client.js.map +1 -1
- package/dist/ui/dashboard-controls.d.ts +4 -0
- package/dist/ui/dashboard-controls.d.ts.map +1 -0
- package/dist/ui/dashboard-controls.js +27 -0
- package/dist/ui/dashboard-controls.js.map +1 -0
- package/dist/ui/dashboard-presentation.d.ts +4 -1
- package/dist/ui/dashboard-presentation.d.ts.map +1 -1
- package/dist/ui/dashboard-presentation.js +13 -7
- package/dist/ui/dashboard-presentation.js.map +1 -1
- package/dist/ui/dashboard-range.d.ts +3 -3
- package/dist/ui/dashboard-range.d.ts.map +1 -1
- package/dist/ui/dashboard-range.js +21 -5
- package/dist/ui/dashboard-range.js.map +1 -1
- package/dist/ui/dashboard-theme.d.ts +3 -1
- package/dist/ui/dashboard-theme.d.ts.map +1 -1
- package/dist/ui/dashboard-theme.js +80 -3
- package/dist/ui/dashboard-theme.js.map +1 -1
- package/dist/ui/memory-activity.d.ts +4 -0
- package/dist/ui/memory-activity.d.ts.map +1 -0
- package/dist/ui/memory-activity.js +115 -0
- package/dist/ui/memory-activity.js.map +1 -0
- package/dist/ui/token-report-client.d.ts +1 -1
- package/dist/ui/token-report-client.d.ts.map +1 -1
- package/dist/ui/token-report-client.js +1 -1
- package/dist/ui/token-report.d.ts +4 -0
- package/dist/ui/token-report.d.ts.map +1 -1
- package/dist/ui/token-report.js +38 -23
- package/dist/ui/token-report.js.map +1 -1
- package/dist/ui/web-ui.d.ts +1 -1
- package/dist/ui/web-ui.d.ts.map +1 -1
- package/dist/ui/web-ui.js +68 -370
- package/dist/ui/web-ui.js.map +1 -1
- package/mcp/capability-catalog.ts +2 -0
- package/mcp/extension-catalog.ts +18 -0
- package/mcp/lazy-connector.ts +4 -2
- package/mcp/lazy-tools.test.ts +29 -0
- package/mcp/modules.ts +1 -0
- package/mcp/server.ts +2 -2
- package/mcp/tools/cron/module.ts +8 -114
- package/mcp/tools/discord/commands.ts +4 -1
- package/mcp/tools/safemode/module.test.ts +29 -0
- package/mcp/tools/telegram/receiver-server.ts +33 -39
- package/mcp/tools/telegram/session-browser.ts +10 -0
- package/mcp/tools/telegram/task-detail.ts +2 -1
- package/package.json +3 -2
- package/scripts/orchestration/audit-codex-context.cjs +83 -0
- package/scripts/orchestration/benchmark-worker-harnesses.cjs +112 -0
- package/scripts/orchestration/smoke-codex-extensions.ts +29 -0
- package/scripts/orchestration/smoke-codex-worker.cjs +166 -0
- package/scripts/orchestration/smoke-safemode-codex.cjs +66 -0
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ExternalOwnerFound = void 0;
|
|
7
|
+
exports.assertNoExternalNativeOwner = assertNoExternalNativeOwner;
|
|
8
|
+
exports.findExternalNativeOwners = findExternalNativeOwners;
|
|
9
|
+
const fs_1 = __importDefault(require("fs"));
|
|
10
|
+
const os_1 = __importDefault(require("os"));
|
|
11
|
+
const path_1 = __importDefault(require("path"));
|
|
12
|
+
function vanished(error) {
|
|
13
|
+
return ['ENOENT', 'ESRCH'].includes(error.code || '');
|
|
14
|
+
}
|
|
15
|
+
class ExternalOwnerFound extends Error {
|
|
16
|
+
constructor(pid) {
|
|
17
|
+
super(`Busy: external native CLI process ${pid} may own this conversation. Close it before resuming; safemode will not stop an unmanaged process.`);
|
|
18
|
+
this.pid = pid;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.ExternalOwnerFound = ExternalOwnerFound;
|
|
22
|
+
function busy(pid) {
|
|
23
|
+
throw new ExternalOwnerFound(pid);
|
|
24
|
+
}
|
|
25
|
+
function startTime(pid) {
|
|
26
|
+
try {
|
|
27
|
+
const stat = fs_1.default.readFileSync(`/proc/${pid}/stat`, 'utf8');
|
|
28
|
+
const fields = stat.slice(stat.lastIndexOf(')') + 2).split(' ');
|
|
29
|
+
return fields[0] === 'Z' ? undefined : fields[19];
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
if (vanished(error))
|
|
33
|
+
return undefined;
|
|
34
|
+
throw error;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function nativeName(value, cli) {
|
|
38
|
+
const base = path_1.default.basename(value).toLowerCase();
|
|
39
|
+
return cli === 'claude' ? /^(claude|claude\.exe)$/.test(base) : /^(codex|codex\.exe)$/.test(base);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* A conservative preflight, NOT a cross-process lock. Native Claude --resume can
|
|
43
|
+
* bypass safemode's lock. Recheck immediately before spawn and while running.
|
|
44
|
+
* Native Codex versions with writer locks enforce their own atomic exclusion.
|
|
45
|
+
* Only process/registry metadata is inspected; never auth, prompts or histories.
|
|
46
|
+
*/
|
|
47
|
+
function inspectExternalNativeOwner(options) {
|
|
48
|
+
if (process.platform !== 'linux') {
|
|
49
|
+
throw new Error('Safemode cannot verify external native session ownership on this platform (Linux /proc is required).');
|
|
50
|
+
}
|
|
51
|
+
const ignored = new Set([process.pid, ...(options.ignorePids || [])]);
|
|
52
|
+
// A native launcher can spawn its actual CLI; all verified managed descendants
|
|
53
|
+
// share that managed ownership and must not be mistaken for external clients.
|
|
54
|
+
const parents = new Map();
|
|
55
|
+
for (const entry of fs_1.default.readdirSync('/proc')) {
|
|
56
|
+
if (!/^\d+$/.test(entry))
|
|
57
|
+
continue;
|
|
58
|
+
try {
|
|
59
|
+
const stat = fs_1.default.readFileSync(`/proc/${entry}/stat`, 'utf8');
|
|
60
|
+
parents.set(Number(entry), Number(stat.slice(stat.lastIndexOf(')') + 2).split(' ')[1]));
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
if (!vanished(error))
|
|
64
|
+
throw error;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// Only child roots supplied explicitly, never every descendant of this supervisor.
|
|
68
|
+
const managed = new Set(options.ignorePids || []);
|
|
69
|
+
let changed = true;
|
|
70
|
+
while (changed) {
|
|
71
|
+
changed = false;
|
|
72
|
+
for (const [pid, parent] of parents)
|
|
73
|
+
if (managed.has(parent) && !managed.has(pid)) {
|
|
74
|
+
managed.add(pid);
|
|
75
|
+
changed = true;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
for (const pid of managed)
|
|
79
|
+
ignored.add(pid);
|
|
80
|
+
const env = options.env || process.env;
|
|
81
|
+
const home = env.HOME || os_1.default.homedir();
|
|
82
|
+
const nativeHome = options.cli === 'claude'
|
|
83
|
+
? env.CLAUDE_CONFIG_DIR || path_1.default.join(home, '.claude')
|
|
84
|
+
: env.CODEX_HOME || path_1.default.join(home, '.codex');
|
|
85
|
+
const knownRegistry = new Map();
|
|
86
|
+
if (options.cli === 'claude') {
|
|
87
|
+
const registry = path_1.default.join(nativeHome, 'sessions');
|
|
88
|
+
let files = [];
|
|
89
|
+
try {
|
|
90
|
+
files = fs_1.default.readdirSync(registry);
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
if (!vanished(error))
|
|
94
|
+
throw new Error('Cannot verify external Claude session ownership: registry is unreadable.');
|
|
95
|
+
}
|
|
96
|
+
for (const file of files) {
|
|
97
|
+
if (!/^\d+\.json$/.test(file))
|
|
98
|
+
continue;
|
|
99
|
+
const pid = Number(file.slice(0, -5));
|
|
100
|
+
if (ignored.has(pid))
|
|
101
|
+
continue;
|
|
102
|
+
const liveStart = startTime(pid);
|
|
103
|
+
if (!liveStart)
|
|
104
|
+
continue;
|
|
105
|
+
let record;
|
|
106
|
+
try {
|
|
107
|
+
record = JSON.parse(fs_1.default.readFileSync(path_1.default.join(registry, file), 'utf8'));
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
if (vanished(error))
|
|
111
|
+
continue;
|
|
112
|
+
throw new Error(`Cannot verify external Claude session ownership for process ${pid}: registry is unreadable.`);
|
|
113
|
+
}
|
|
114
|
+
if (record.pid !== pid)
|
|
115
|
+
throw new Error(`Cannot verify external Claude session ownership for process ${pid}: registry PID mismatch.`);
|
|
116
|
+
// Older registries lacking a start identity cannot disprove a live owner.
|
|
117
|
+
if (record.procStart !== undefined && String(record.procStart) !== liveStart)
|
|
118
|
+
continue;
|
|
119
|
+
knownRegistry.set(pid, record);
|
|
120
|
+
if (options.nativeSessionId ? record.sessionId === options.nativeSessionId : record.cwd === options.cwd)
|
|
121
|
+
busy(pid);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
for (const entry of fs_1.default.readdirSync('/proc')) {
|
|
125
|
+
if (!/^\d+$/.test(entry))
|
|
126
|
+
continue;
|
|
127
|
+
const pid = Number(entry);
|
|
128
|
+
if (ignored.has(pid))
|
|
129
|
+
continue;
|
|
130
|
+
const root = `/proc/${pid}`;
|
|
131
|
+
try {
|
|
132
|
+
if (typeof process.getuid === 'function' && fs_1.default.statSync(root).uid !== process.getuid())
|
|
133
|
+
continue;
|
|
134
|
+
if (!startTime(pid))
|
|
135
|
+
continue;
|
|
136
|
+
const argv = fs_1.default.readFileSync(path_1.default.join(root, 'cmdline'), 'utf8').split('\0').filter(Boolean);
|
|
137
|
+
// Filter before opening exe/environ/fds: unrelated same-user services can
|
|
138
|
+
// deliberately make those files unreadable (e.g. non-dumpable daemons).
|
|
139
|
+
const candidate = [argv[0] || '', argv[1] || ''].some(value => nativeName(value, options.cli));
|
|
140
|
+
if (!candidate)
|
|
141
|
+
continue;
|
|
142
|
+
// Native homes are distinct stores, so the same UUID in another home is
|
|
143
|
+
// not this conversation. Extract only these three routing keys; never
|
|
144
|
+
// return, log or include process environment/arguments in errors.
|
|
145
|
+
const routing = {};
|
|
146
|
+
for (const field of fs_1.default.readFileSync(path_1.default.join(root, 'environ'), 'utf8').split('\0')) {
|
|
147
|
+
const equals = field.indexOf('=');
|
|
148
|
+
if (equals < 0)
|
|
149
|
+
continue;
|
|
150
|
+
const key = field.slice(0, equals);
|
|
151
|
+
if (['HOME', 'CLAUDE_CONFIG_DIR', 'CODEX_HOME'].includes(key))
|
|
152
|
+
routing[key] = field.slice(equals + 1);
|
|
153
|
+
}
|
|
154
|
+
const processHome = options.cli === 'claude'
|
|
155
|
+
? routing.CLAUDE_CONFIG_DIR || (routing.HOME ? path_1.default.join(routing.HOME, '.claude') : undefined)
|
|
156
|
+
: routing.CODEX_HOME || (routing.HOME ? path_1.default.join(routing.HOME, '.codex') : undefined);
|
|
157
|
+
if (processHome && path_1.default.resolve(processHome) !== path_1.default.resolve(nativeHome))
|
|
158
|
+
continue;
|
|
159
|
+
if (!processHome)
|
|
160
|
+
throw new Error(`Cannot verify external native session ownership for process ${pid}: native home is unknown.`);
|
|
161
|
+
const record = knownRegistry.get(pid);
|
|
162
|
+
if (record && options.nativeSessionId && record.sessionId)
|
|
163
|
+
continue;
|
|
164
|
+
const cwd = fs_1.default.readlinkSync(path_1.default.join(root, 'cwd'));
|
|
165
|
+
if (cwd === options.cwd)
|
|
166
|
+
busy(pid);
|
|
167
|
+
if (options.nativeSessionId) {
|
|
168
|
+
for (let i = 0; i < argv.length; i++) {
|
|
169
|
+
if (['--resume', '-r', '--session-id', 'resume'].includes(argv[i]) && argv[i + 1] === options.nativeSessionId)
|
|
170
|
+
busy(pid);
|
|
171
|
+
if (argv[i] === `--resume=${options.nativeSessionId}` || argv[i] === `--session-id=${options.nativeSessionId}`)
|
|
172
|
+
busy(pid);
|
|
173
|
+
}
|
|
174
|
+
// Codex app-server and resume picker need no UUID in argv. A live file
|
|
175
|
+
// descriptor proves access even when the CLI holds a kernel writer lock.
|
|
176
|
+
for (const fd of fs_1.default.readdirSync(path_1.default.join(root, 'fd'))) {
|
|
177
|
+
let target;
|
|
178
|
+
try {
|
|
179
|
+
target = fs_1.default.readlinkSync(path_1.default.join(root, 'fd', fd)).replace(/ \(deleted\)$/, '');
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
if (vanished(error))
|
|
183
|
+
continue;
|
|
184
|
+
throw error;
|
|
185
|
+
}
|
|
186
|
+
const name = path_1.default.basename(target);
|
|
187
|
+
if ((target.startsWith(path_1.default.join(nativeHome, 'thread-writer-locks') + path_1.default.sep) && name === `${options.nativeSessionId}.lock`)
|
|
188
|
+
|| (target.startsWith(path_1.default.join(nativeHome, 'sessions') + path_1.default.sep) && name.endsWith(`-${options.nativeSessionId}.jsonl`)))
|
|
189
|
+
busy(pid);
|
|
190
|
+
}
|
|
191
|
+
// Claude can switch conversations without changing argv. An unregistered
|
|
192
|
+
// live Claude in this user context cannot be ruled out safely.
|
|
193
|
+
if (options.cli === 'claude' && !record) {
|
|
194
|
+
throw new Error(`Cannot verify external Claude session ownership for process ${pid}: no current native session registration. Close it before resuming.`);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
if (vanished(error))
|
|
200
|
+
continue;
|
|
201
|
+
if (error.code === 'EACCES' || error.code === 'EPERM') {
|
|
202
|
+
throw new Error(`Cannot verify external native session ownership for process ${pid}: process metadata is inaccessible.`);
|
|
203
|
+
}
|
|
204
|
+
throw error;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
function assertNoExternalNativeOwner(options) {
|
|
209
|
+
inspectExternalNativeOwner(options);
|
|
210
|
+
}
|
|
211
|
+
/** Minimal ownership evidence only; never expose native argv or transcript text. */
|
|
212
|
+
function findExternalNativeOwners(options) {
|
|
213
|
+
const owners = [];
|
|
214
|
+
const ignored = [...(options.ignorePids || [])];
|
|
215
|
+
for (let count = 0; count < 64; count++) {
|
|
216
|
+
try {
|
|
217
|
+
inspectExternalNativeOwner({ ...options, ignorePids: ignored });
|
|
218
|
+
return owners;
|
|
219
|
+
}
|
|
220
|
+
catch (error) {
|
|
221
|
+
if (!(error instanceof ExternalOwnerFound))
|
|
222
|
+
throw error;
|
|
223
|
+
owners.push({ pid: error.pid });
|
|
224
|
+
ignored.push(error.pid);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
throw new Error('Too many external native owners to verify safely.');
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=external-owners.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"external-owners.js","sourceRoot":"","sources":["../../src/safemode/external-owners.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export type SafemodeCli = 'claude' | 'codex';
|
|
2
|
+
export interface NativeOptions {
|
|
3
|
+
cli: SafemodeCli;
|
|
4
|
+
mode: 'interactive' | 'headless';
|
|
5
|
+
cwd: string;
|
|
6
|
+
prompt?: string;
|
|
7
|
+
context?: string;
|
|
8
|
+
model?: string;
|
|
9
|
+
nativeSessionId?: string;
|
|
10
|
+
resume?: boolean;
|
|
11
|
+
nativeArgs?: string[];
|
|
12
|
+
nativeResumeIndex?: number;
|
|
13
|
+
env?: NodeJS.ProcessEnv;
|
|
14
|
+
}
|
|
15
|
+
export interface NativeInvocation {
|
|
16
|
+
command: string;
|
|
17
|
+
args: string[];
|
|
18
|
+
cwd: string;
|
|
19
|
+
env: NodeJS.ProcessEnv;
|
|
20
|
+
nativeSessionId?: string;
|
|
21
|
+
}
|
|
22
|
+
/** Only credentials used by the selected native provider belong in its environment. */
|
|
23
|
+
export declare function nativeEnvironment(cli: SafemodeCli, source?: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
|
|
24
|
+
/** Args are passed directly to spawn, never evaluated by a shell. */
|
|
25
|
+
export declare function buildNativeInvocation(options: NativeOptions): NativeInvocation;
|
|
26
|
+
/** Only authoritative init events identify a conversation; arbitrary tool JSON cannot. */
|
|
27
|
+
export declare function extractNativeSessionId(cli: SafemodeCli, line: string): string | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* Codex interactive has no --session-id. Match the persisted session_meta to the
|
|
30
|
+
* dedicated safemode cwd and launch time, never `resume --last` or global history.
|
|
31
|
+
* Read only today's/newer date directories and a bounded first line per rollout.
|
|
32
|
+
*/
|
|
33
|
+
export declare function discoverCodexSession(options: {
|
|
34
|
+
cwd: string;
|
|
35
|
+
startedAt: number | string;
|
|
36
|
+
codexHome?: string;
|
|
37
|
+
}): string | undefined;
|
|
38
|
+
//# sourceMappingURL=native.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../src/safemode/native.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,OAAO,CAAC;AAC7C,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,WAAW,CAAC;IACjB,IAAI,EAAE,aAAa,GAAG,UAAU,CAAC;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AACD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAID,uFAAuF;AACvF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAAC,UAAU,CAW9G;AAoBD,qEAAqE;AACrE,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,aAAa,GAAG,gBAAgB,CAkE9E;AAED,0FAA0F;AAC1F,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQzF;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,GAAG,SAAS,CA0CjI"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.nativeEnvironment = nativeEnvironment;
|
|
7
|
+
exports.buildNativeInvocation = buildNativeInvocation;
|
|
8
|
+
exports.extractNativeSessionId = extractNativeSessionId;
|
|
9
|
+
exports.discoverCodexSession = discoverCodexSession;
|
|
10
|
+
const fs_1 = __importDefault(require("fs"));
|
|
11
|
+
const os_1 = __importDefault(require("os"));
|
|
12
|
+
const path_1 = __importDefault(require("path"));
|
|
13
|
+
const crypto_1 = require("crypto");
|
|
14
|
+
const child_process_1 = require("child_process");
|
|
15
|
+
const claude_bin_1 = require("../session/claude-bin");
|
|
16
|
+
const codex_policy_1 = require("../session/codex-policy");
|
|
17
|
+
const UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
18
|
+
/** Only credentials used by the selected native provider belong in its environment. */
|
|
19
|
+
function nativeEnvironment(cli, source = process.env) {
|
|
20
|
+
const env = {};
|
|
21
|
+
const common = /^(HOME|USER|LOGNAME|PATH|SHELL|TERM|COLORTERM|TERM_PROGRAM|TERM_PROGRAM_VERSION|COLORFGBG|NO_COLOR|FORCE_COLOR|CLICOLOR|CLICOLOR_FORCE|TMUX|TMUX_PANE|LANG|LC_[A-Z_]+|TZ|TMPDIR|TEMP|TMP|XDG_CONFIG_HOME|XDG_CACHE_HOME|XDG_DATA_HOME|XDG_RUNTIME_DIR|DBUS_SESSION_BUS_ADDRESS|HTTP_PROXY|HTTPS_PROXY|ALL_PROXY|NO_PROXY|http_proxy|https_proxy|all_proxy|no_proxy|SSL_CERT_FILE|SSL_CERT_DIR|NODE_EXTRA_CA_CERTS)$/;
|
|
22
|
+
const provider = cli === 'claude'
|
|
23
|
+
? /^(CLAUDE_CONFIG_DIR|ANTHROPIC_API_KEY|ANTHROPIC_AUTH_TOKEN|ANTHROPIC_BASE_URL|ANTHROPIC_MODEL|CLAUDE_CODE_OAUTH_TOKEN|CLAUDE_CODE_USE_BEDROCK|CLAUDE_CODE_USE_VERTEX|CLAUDE_CODE_USE_FOUNDRY|AWS_[A-Z_]+|GOOGLE_APPLICATION_CREDENTIALS|ANTHROPIC_VERTEX_PROJECT_ID|CLOUD_ML_REGION|ANTHROPIC_FOUNDRY_[A-Z_]+)$/
|
|
24
|
+
: /^(CODEX_HOME|CODEX_ACCESS_TOKEN|OPENAI_API_KEY|OPENAI_BASE_URL|OPENAI_ORG_ID|OPENAI_PROJECT_ID)$/;
|
|
25
|
+
for (const [key, value] of Object.entries(source)) {
|
|
26
|
+
if (value !== undefined && (common.test(key) || provider.test(key)))
|
|
27
|
+
env[key] = value;
|
|
28
|
+
}
|
|
29
|
+
// Never propagate gateway leases, SDK nesting, shell injection or GitHub credentials.
|
|
30
|
+
return env;
|
|
31
|
+
}
|
|
32
|
+
function disabledCodexServers(command, cwd, env) {
|
|
33
|
+
// Empty TOML tables merge with user config; setting mcp_servers={} is NOT isolation.
|
|
34
|
+
// Listing parses configuration only and never starts an MCP server.
|
|
35
|
+
let servers;
|
|
36
|
+
try {
|
|
37
|
+
servers = JSON.parse((0, child_process_1.execFileSync)(command, ['mcp', 'list', '--json'], {
|
|
38
|
+
cwd, env, encoding: 'utf8', timeout: 10000, maxBuffer: 1024 * 1024,
|
|
39
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
40
|
+
}));
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
throw new Error('Cannot inspect Codex MCP configuration safely. Check `codex mcp list --json` before starting safemode.');
|
|
44
|
+
}
|
|
45
|
+
if (!Array.isArray(servers) || servers.some(server => typeof server?.name !== 'string')) {
|
|
46
|
+
throw new Error('Unsupported Codex MCP configuration output; safemode did not launch.');
|
|
47
|
+
}
|
|
48
|
+
return servers.flatMap(server => ['-c', `mcp_servers.${JSON.stringify(server.name)}.enabled=false`]);
|
|
49
|
+
}
|
|
50
|
+
/** Args are passed directly to spawn, never evaluated by a shell. */
|
|
51
|
+
function buildNativeInvocation(options) {
|
|
52
|
+
if (options.nativeArgs !== undefined && options.mode !== 'interactive')
|
|
53
|
+
throw new Error('Native params are interactive-only');
|
|
54
|
+
if (options.resume && !options.nativeSessionId)
|
|
55
|
+
throw new Error('Native session ID is required to resume.');
|
|
56
|
+
if (options.nativeSessionId && !UUID.test(options.nativeSessionId))
|
|
57
|
+
throw new Error('Invalid native session ID.');
|
|
58
|
+
let env = nativeEnvironment(options.cli, options.env);
|
|
59
|
+
let model = options.model && options.model !== 'inherit' ? options.model : undefined;
|
|
60
|
+
if (options.cli === 'claude' && options.mode === 'headless') {
|
|
61
|
+
// --restricted excludes settings customizations. Preserve only native auth
|
|
62
|
+
// environment and model preference, never hooks, commands or permission grants.
|
|
63
|
+
let nativeModel;
|
|
64
|
+
try {
|
|
65
|
+
const settings = JSON.parse(fs_1.default.readFileSync(path_1.default.join(env.CLAUDE_CONFIG_DIR || path_1.default.join(env.HOME || os_1.default.homedir(), '.claude'), 'settings.json'), 'utf8'));
|
|
66
|
+
const auth = {};
|
|
67
|
+
if (settings.env && typeof settings.env === 'object') {
|
|
68
|
+
for (const [key, value] of Object.entries(settings.env)) {
|
|
69
|
+
if (/^(ANTHROPIC_|CLAUDE_CODE_(OAUTH_TOKEN|USE_)|AWS_|GOOGLE_APPLICATION_CREDENTIALS$|CLOUD_ML_REGION$)/.test(key) && typeof value === 'string')
|
|
70
|
+
auth[key] = value;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
env = { ...nativeEnvironment('claude', auth), ...env };
|
|
74
|
+
if (typeof settings.model === 'string' && settings.model.trim())
|
|
75
|
+
nativeModel = settings.model;
|
|
76
|
+
}
|
|
77
|
+
catch { /* No explicit native settings: CLI chooses its own defaults/auth. */ }
|
|
78
|
+
if (!model)
|
|
79
|
+
model = env.ANTHROPIC_MODEL || nativeModel;
|
|
80
|
+
}
|
|
81
|
+
const prompt = [options.context, options.prompt].filter(Boolean).join('\n\n');
|
|
82
|
+
if (options.nativeArgs !== undefined) {
|
|
83
|
+
// Explicit operator options replace interactive defaults, never headless restrictions.
|
|
84
|
+
const args = [...options.nativeArgs];
|
|
85
|
+
let prefix = 0;
|
|
86
|
+
if (model && !args.some(a => a === '--model' || a === '-m' || a.startsWith('--model=') || a.startsWith('-m='))) {
|
|
87
|
+
args.unshift('--model', model);
|
|
88
|
+
prefix = 2;
|
|
89
|
+
}
|
|
90
|
+
const nativeSessionId = options.nativeSessionId || (options.cli === 'claude' ? (0, crypto_1.randomUUID)() : undefined);
|
|
91
|
+
if (options.cli === 'claude')
|
|
92
|
+
args.push(options.resume ? '--resume' : '--session-id', nativeSessionId);
|
|
93
|
+
else if (options.resume)
|
|
94
|
+
args.splice(prefix + (options.nativeResumeIndex ?? 0), 0, 'resume', nativeSessionId);
|
|
95
|
+
if (options.cli === 'codex')
|
|
96
|
+
args.push('--cd', options.cwd);
|
|
97
|
+
if (prompt)
|
|
98
|
+
args.push('--', prompt);
|
|
99
|
+
const command = options.cli === 'claude' ? options.env?.CLAUDE_BIN || process.env.CLAUDE_BIN || (0, claude_bin_1.resolveClaudeBin)(env).bin : options.env?.CODEX_BIN || process.env.CODEX_BIN || 'codex';
|
|
100
|
+
return { command, args, env, cwd: options.cwd, nativeSessionId };
|
|
101
|
+
}
|
|
102
|
+
if (options.cli === 'claude') {
|
|
103
|
+
const command = options.env?.CLAUDE_BIN || process.env.CLAUDE_BIN || (0, claude_bin_1.resolveClaudeBin)(env).bin;
|
|
104
|
+
const nativeSessionId = options.nativeSessionId || (0, crypto_1.randomUUID)();
|
|
105
|
+
const args = ['--safe-mode', '--strict-mcp-config', '--permission-mode', options.mode === 'headless' ? 'dontAsk' : 'manual'];
|
|
106
|
+
if (options.mode === 'headless')
|
|
107
|
+
args.push('--restricted', '--print', '--output-format', 'stream-json', '--verbose', '--tools', 'Read,Glob,Grep');
|
|
108
|
+
args.push(options.resume ? '--resume' : '--session-id', nativeSessionId);
|
|
109
|
+
if (model)
|
|
110
|
+
args.push('--model', model);
|
|
111
|
+
if (prompt)
|
|
112
|
+
args.push('--', prompt);
|
|
113
|
+
return { command, args, env, cwd: options.cwd, nativeSessionId };
|
|
114
|
+
}
|
|
115
|
+
const command = options.env?.CODEX_BIN || process.env.CODEX_BIN || 'codex';
|
|
116
|
+
const args = [
|
|
117
|
+
...(0, codex_policy_1.codexPolicyArgs)(),
|
|
118
|
+
'-c', 'shell_environment_policy.inherit="none"',
|
|
119
|
+
'-c', 'shell_environment_policy.set={}',
|
|
120
|
+
'-c', 'sandbox_mode="read-only"',
|
|
121
|
+
'-c', `approval_policy="${options.mode === 'headless' ? 'never' : 'on-request'}"`,
|
|
122
|
+
...disabledCodexServers(command, options.cwd, env),
|
|
123
|
+
];
|
|
124
|
+
if (model)
|
|
125
|
+
args.push('--model', model);
|
|
126
|
+
if (options.mode === 'headless') {
|
|
127
|
+
args.push('exec', '--cd', options.cwd, '--json', '--ignore-rules', '--skip-git-repo-check');
|
|
128
|
+
if (options.resume)
|
|
129
|
+
args.push('resume', options.nativeSessionId);
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
if (options.resume)
|
|
133
|
+
args.push('resume', options.nativeSessionId);
|
|
134
|
+
args.push('--cd', options.cwd);
|
|
135
|
+
}
|
|
136
|
+
if (prompt)
|
|
137
|
+
args.push('--', prompt);
|
|
138
|
+
return { command, args, env, cwd: options.cwd, nativeSessionId: options.nativeSessionId };
|
|
139
|
+
}
|
|
140
|
+
/** Only authoritative init events identify a conversation; arbitrary tool JSON cannot. */
|
|
141
|
+
function extractNativeSessionId(cli, line) {
|
|
142
|
+
try {
|
|
143
|
+
const event = JSON.parse(line);
|
|
144
|
+
const id = cli === 'codex'
|
|
145
|
+
? event.type === 'thread.started' ? event.thread_id : undefined
|
|
146
|
+
: event.type === 'system' && event.subtype === 'init' ? event.session_id : undefined;
|
|
147
|
+
return typeof id === 'string' && UUID.test(id) ? id : undefined;
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
return undefined;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Codex interactive has no --session-id. Match the persisted session_meta to the
|
|
155
|
+
* dedicated safemode cwd and launch time, never `resume --last` or global history.
|
|
156
|
+
* Read only today's/newer date directories and a bounded first line per rollout.
|
|
157
|
+
*/
|
|
158
|
+
function discoverCodexSession(options) {
|
|
159
|
+
const start = typeof options.startedAt === 'number' ? options.startedAt : Date.parse(options.startedAt);
|
|
160
|
+
if (!Number.isFinite(start))
|
|
161
|
+
throw new Error('Invalid session start time.');
|
|
162
|
+
const root = path_1.default.join(options.codexHome || process.env.CODEX_HOME || path_1.default.join(os_1.default.homedir(), '.codex'), 'sessions');
|
|
163
|
+
const day = new Date(start).toISOString().slice(0, 10).replace(/-/g, '/');
|
|
164
|
+
const ids = new Set();
|
|
165
|
+
const readDirs = (dir) => {
|
|
166
|
+
try {
|
|
167
|
+
return fs_1.default.readdirSync(dir, { withFileTypes: true });
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
return [];
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
let inspected = 0;
|
|
174
|
+
for (const year of readDirs(root).filter(e => e.isDirectory() && /^\d{4}$/.test(e.name))) {
|
|
175
|
+
for (const month of readDirs(path_1.default.join(root, year.name)).filter(e => e.isDirectory() && /^\d{2}$/.test(e.name))) {
|
|
176
|
+
for (const date of readDirs(path_1.default.join(root, year.name, month.name)).filter(e => e.isDirectory() && /^\d{2}$/.test(e.name))) {
|
|
177
|
+
const relative = `${year.name}/${month.name}/${date.name}`;
|
|
178
|
+
if (relative < day)
|
|
179
|
+
continue;
|
|
180
|
+
for (const file of readDirs(path_1.default.join(root, relative))) {
|
|
181
|
+
if (!file.isFile() || !file.name.endsWith('.jsonl'))
|
|
182
|
+
continue;
|
|
183
|
+
if (++inspected > 5000)
|
|
184
|
+
throw new Error('Too many Codex rollouts to identify safemode session safely.');
|
|
185
|
+
let fd;
|
|
186
|
+
try {
|
|
187
|
+
fd = fs_1.default.openSync(path_1.default.join(root, relative, file.name), 'r');
|
|
188
|
+
const buffer = Buffer.alloc(65536);
|
|
189
|
+
const bytes = fs_1.default.readSync(fd, buffer, 0, buffer.length, 0);
|
|
190
|
+
const text = buffer.toString('utf8', 0, bytes);
|
|
191
|
+
const newline = text.indexOf('\n');
|
|
192
|
+
if (newline === -1 && bytes === buffer.length)
|
|
193
|
+
continue;
|
|
194
|
+
const event = JSON.parse(newline === -1 ? text : text.slice(0, newline));
|
|
195
|
+
const meta = event.payload;
|
|
196
|
+
if (event.type !== 'session_meta' || !meta || meta.cwd !== options.cwd || !UUID.test(meta.id || ''))
|
|
197
|
+
continue;
|
|
198
|
+
if (Date.parse(meta.timestamp || event.timestamp) < start)
|
|
199
|
+
continue;
|
|
200
|
+
if (!Number.isFinite(Date.parse(meta.timestamp || event.timestamp)))
|
|
201
|
+
continue;
|
|
202
|
+
// Child investigations are separate native conversations.
|
|
203
|
+
if (typeof meta.source === 'object')
|
|
204
|
+
continue;
|
|
205
|
+
ids.add(meta.id);
|
|
206
|
+
}
|
|
207
|
+
catch { /* Concurrent append or unrelated/corrupt rollout; retry on next poll. */ }
|
|
208
|
+
finally {
|
|
209
|
+
if (fd !== undefined)
|
|
210
|
+
fs_1.default.closeSync(fd);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
if (ids.size > 1)
|
|
217
|
+
throw new Error('Multiple native Codex sessions match this safemode workspace; refusing ambiguous resume.');
|
|
218
|
+
return [...ids][0];
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native.js","sourceRoot":"","sources":["../../src/safemode/native.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { SafemodeCli } from './native';
|
|
2
|
+
/** Quoting only: no shell expansion, substitution, globbing or execution. */
|
|
3
|
+
export declare function splitNativeParams(text: string): string[];
|
|
4
|
+
/** Identity/lifecycle switches remain owned by safemode; other options pass through. */
|
|
5
|
+
export declare function inspectNativeParams(cli: SafemodeCli, args: string[]): {
|
|
6
|
+
args: string[];
|
|
7
|
+
resumeId?: string;
|
|
8
|
+
resumeIndex?: number;
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=params.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"params.d.ts","sourceRoot":"","sources":["../../src/safemode/params.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,6EAA6E;AAC7E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAsBxD;AAED,wFAAwF;AACxF,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG;IAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CA4BjI"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.splitNativeParams = splitNativeParams;
|
|
4
|
+
exports.inspectNativeParams = inspectNativeParams;
|
|
5
|
+
/** Quoting only: no shell expansion, substitution, globbing or execution. */
|
|
6
|
+
function splitNativeParams(text) {
|
|
7
|
+
if (!text.trim() || text.length > 100000 || text.includes('\0'))
|
|
8
|
+
throw new Error('Invalid --params value');
|
|
9
|
+
const args = [];
|
|
10
|
+
let word = '', quote = '', started = false;
|
|
11
|
+
for (let i = 0; i < text.length; i++) {
|
|
12
|
+
const ch = text[i];
|
|
13
|
+
if (ch === '\\' && quote !== "'") {
|
|
14
|
+
if (++i === text.length)
|
|
15
|
+
throw new Error('Unfinished escape in --params');
|
|
16
|
+
const next = text[i];
|
|
17
|
+
if (quote === '"' && !['"', '\\', '$', '`', '\n'].includes(next))
|
|
18
|
+
word += '\\';
|
|
19
|
+
if (next !== '\n')
|
|
20
|
+
word += next;
|
|
21
|
+
started = true;
|
|
22
|
+
}
|
|
23
|
+
else if (quote) {
|
|
24
|
+
if (ch === quote)
|
|
25
|
+
quote = '';
|
|
26
|
+
else
|
|
27
|
+
word += ch;
|
|
28
|
+
}
|
|
29
|
+
else if (ch === '"' || ch === "'") {
|
|
30
|
+
quote = ch;
|
|
31
|
+
started = true;
|
|
32
|
+
}
|
|
33
|
+
else if (/\s/.test(ch)) {
|
|
34
|
+
if (started) {
|
|
35
|
+
args.push(word);
|
|
36
|
+
word = '';
|
|
37
|
+
started = false;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
word += ch;
|
|
42
|
+
started = true;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
if (quote)
|
|
46
|
+
throw new Error('Unclosed quote in --params');
|
|
47
|
+
if (started)
|
|
48
|
+
args.push(word);
|
|
49
|
+
return args;
|
|
50
|
+
}
|
|
51
|
+
/** Identity/lifecycle switches remain owned by safemode; other options pass through. */
|
|
52
|
+
function inspectNativeParams(cli, args) {
|
|
53
|
+
const remaining = [];
|
|
54
|
+
let resumeId;
|
|
55
|
+
let resumeIndex;
|
|
56
|
+
const forbidden = cli === 'codex'
|
|
57
|
+
? ['exec', 'e', 'review', 'fork', 'app-server', 'exec-server', 'login', 'logout', 'mcp', 'plugin', 'agents', 'queue', 'archive', 'delete', 'unarchive', 'migrate-rollouts', 'remote-control', 'completion', 'update', 'doctor', 'sandbox', 'debug', 'apply', 'a', 'cloud', 'features', 'help', '--last', '--remote', '--cd', '-C']
|
|
58
|
+
: ['--print', '-p', '--continue', '-c', '--fork-session', '--session-id', '--resume-session-at', '--no-session-persistence', '--remote'];
|
|
59
|
+
const valueFlags = cli === 'codex'
|
|
60
|
+
? ['-c', '--config', '-m', '--model', '-p', '--profile', '-s', '--sandbox', '-a', '--ask-for-approval', '--enable', '--disable', '--image', '-i', '--add-dir']
|
|
61
|
+
: ['--model', '--permission-mode', '--tools', '--allowedTools', '--disallowedTools', '--mcp-config', '--settings', '--setting-sources', '--system-prompt', '--append-system-prompt', '--add-dir', '--agent', '--agents', '--effort'];
|
|
62
|
+
for (let i = 0; i < args.length; i++) {
|
|
63
|
+
const arg = args[i], flag = arg.split('=')[0];
|
|
64
|
+
if ((cli === 'claude' && /^-[rcp].+/.test(arg) && !arg.startsWith('-r=')) || (cli === 'codex' && /^-C.+/.test(arg)))
|
|
65
|
+
throw new Error('Use explicit lifecycle flags; combined short switches are unsupported in --params');
|
|
66
|
+
if (arg === '--' || forbidden.includes(flag))
|
|
67
|
+
throw new Error('Native lifecycle, workspace and remote switches are not supported in --params; use --prompt for prompt text');
|
|
68
|
+
if ((cli === 'codex' && arg === 'resume') || (cli === 'claude' && ['--resume', '-r'].includes(flag))) {
|
|
69
|
+
const id = arg.includes('=') ? arg.slice(arg.indexOf('=') + 1) : args[++i];
|
|
70
|
+
if (resumeId || !id || !/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(id))
|
|
71
|
+
throw new Error('Native resume requires exactly one explicit session UUID');
|
|
72
|
+
resumeId = id.toLowerCase();
|
|
73
|
+
resumeIndex = remaining.length;
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
remaining.push(arg);
|
|
77
|
+
if (valueFlags.includes(arg)) {
|
|
78
|
+
if (args[i + 1] === undefined || args[i + 1].startsWith('-'))
|
|
79
|
+
throw new Error('Missing native option value in --params');
|
|
80
|
+
remaining.push(args[++i]);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return { args: remaining, resumeId, ...(resumeIndex !== undefined ? { resumeIndex } : {}) };
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=params.js.map
|