@antelopejs/dms-ai 0.6.0 → 0.7.0
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 +2 -2
- package/dist/builder/presence.js.map +1 -1
- package/dist/channels/bridge.js +4 -2
- package/dist/channels/bridge.js.map +1 -1
- package/dist/channels/sse-stream.d.ts +1 -1
- package/dist/config.d.ts +6 -1
- package/dist/config.js +9 -21
- package/dist/config.js.map +1 -1
- package/dist/constants/channels.d.ts +5 -1
- package/dist/constants/channels.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lifecycle/build-id.js +1 -1
- package/dist/lifecycle/build-id.js.map +1 -1
- package/dist/lifecycle/module-roots.js +12 -14
- package/dist/lifecycle/module-roots.js.map +1 -1
- package/dist/lifecycle/sidecar-owner.js.map +1 -1
- package/dist/lifecycle/skill-sources.js +35 -22
- package/dist/lifecycle/skill-sources.js.map +1 -1
- package/dist/lifecycle/spawn-sidecar.js +11 -6
- package/dist/lifecycle/spawn-sidecar.js.map +1 -1
- package/dist/logging/log-buffer.js +6 -2
- package/dist/logging/log-buffer.js.map +1 -1
- package/dist/pages/activity/columns.d.ts +66 -2
- package/dist/pages/activity/columns.js.map +1 -1
- package/dist/pages/activity/page.js.map +1 -1
- package/dist/pages/index.js.map +1 -1
- package/dist/pages/overview/page.js.map +1 -1
- package/dist/pages/overview/recent-changes.js.map +1 -1
- package/dist/pages/settings/availability.d.ts +1 -1
- package/dist/pages/settings/availability.js +19 -5
- package/dist/pages/settings/availability.js.map +1 -1
- package/dist/pages/settings/page.js +1 -1
- package/dist/pages/settings/page.js.map +1 -1
- package/dist/pages/skills/page.js.map +1 -1
- package/dist/pages-registry.js +9 -10
- package/dist/pages-registry.js.map +1 -1
- package/dist/routes/activity.d.ts +5 -4
- package/dist/routes/activity.js.map +1 -1
- package/dist/routes/changes.d.ts +6 -4
- package/dist/routes/changes.js.map +1 -1
- package/dist/routes/codex-account.d.ts +5 -1
- package/dist/routes/codex-account.js +2 -2
- package/dist/routes/codex-account.js.map +1 -1
- package/dist/routes/database.d.ts +21 -4
- package/dist/routes/database.js.map +1 -1
- package/dist/routes/metric-shapes.js +8 -5
- package/dist/routes/metric-shapes.js.map +1 -1
- package/dist/routes/metrics.d.ts +4 -2
- package/dist/routes/metrics.js +2 -2
- package/dist/routes/metrics.js.map +1 -1
- package/dist/routes/pages-registry.js.map +1 -1
- package/dist/routes/settings.d.ts +4 -3
- package/dist/routes/settings.js +4 -15
- package/dist/routes/settings.js.map +1 -1
- package/dist/routes/sidecar-info.js.map +1 -1
- package/dist/routes/sidecar-results.d.ts +2 -2
- package/dist/routes/sidecar-results.js +10 -10
- package/dist/routes/sidecar-results.js.map +1 -1
- package/dist/routes/skills.d.ts +2 -1
- package/dist/routes/skills.js +6 -4
- package/dist/routes/skills.js.map +1 -1
- package/dist/routes/status-shapes.js +12 -12
- package/dist/routes/status-shapes.js.map +1 -1
- package/dist/routes/undo-confirm.js.map +1 -1
- package/dist/sidecar/http-client.js.map +1 -1
- package/dist/sidecar/index.d.ts +1 -0
- package/dist/sidecar/index.js +1 -0
- package/dist/sidecar/index.js.map +1 -1
- package/dist/sidecar/settings-values.d.ts +3 -0
- package/dist/sidecar/settings-values.js +21 -0
- package/dist/sidecar/settings-values.js.map +1 -0
- package/dist/vocabulary/tools.js.map +1 -1
- package/frontend-vue/app/chat/components/ChatView.vue +33 -133
- package/frontend-vue/app/chat/components/ProviderNotice.vue +77 -0
- package/frontend-vue/app/chat/components/UndoConflictModal.vue +98 -0
- package/frontend-vue/app/chat/composables/useChangeSetActions.ts +1 -1
- package/frontend-vue/app/plugins/ai.client.ts +10 -2
- package/frontend-vue/app/runtime/assistant-actions.ts +41 -0
- package/frontend-vue/app/runtime/assistant-session.ts +8 -2
- package/frontend-vue/app/runtime/panel-intents.ts +3 -1
- package/frontend-vue/build/backend-boundary.ts +89 -0
- package/frontend-vue/dms.frontend.build.ts +6 -0
- package/frontend-vue/package.json +2 -1
- package/frontend-vue/pnpm-lock.yaml +3 -0
- package/frontend-vue/tests/assistant-actions.test.ts +72 -0
- package/frontend-vue/tests/backend-boundary.test.ts +130 -0
- package/frontend-vue/tests/panel-approvals.test.ts +190 -0
- package/frontend-vue/tests/panel-questions.test.ts +169 -0
- package/frontend-vue/tests/panel-states.test.ts +1 -556
- package/frontend-vue/tests/panel-tools.test.ts +165 -0
- package/frontend-vue/tests/sidecar-guest.test.ts +39 -71
- package/frontend-vue/tests/support/panel-fixtures.ts +110 -0
- package/frontend-vue/tests/support/panel-harness.ts +2 -2
- package/frontend-vue/vitest.config.ts +2 -1
- package/package.json +21 -10
- package/sidecar/dist/agent/attachment-files.js.map +1 -1
- package/sidecar/dist/agent/call-ledger.d.ts +3 -2
- package/sidecar/dist/agent/call-ledger.js +1 -1
- package/sidecar/dist/agent/call-ledger.js.map +1 -1
- package/sidecar/dist/agent/command-analysis.js +13 -14
- package/sidecar/dist/agent/command-analysis.js.map +1 -1
- package/sidecar/dist/agent/conversation-modes.js.map +1 -1
- package/sidecar/dist/agent/edit-targets.d.ts +5 -1
- package/sidecar/dist/agent/edit-targets.js +8 -6
- package/sidecar/dist/agent/edit-targets.js.map +1 -1
- package/sidecar/dist/agent/edit-tracker.d.ts +2 -1
- package/sidecar/dist/agent/edit-tracker.js +3 -4
- package/sidecar/dist/agent/edit-tracker.js.map +1 -1
- package/sidecar/dist/agent/effective-mode.js.map +1 -1
- package/sidecar/dist/agent/line-diff.js +10 -8
- package/sidecar/dist/agent/line-diff.js.map +1 -1
- package/sidecar/dist/agent/permission-bus.js +2 -1
- package/sidecar/dist/agent/permission-bus.js.map +1 -1
- package/sidecar/dist/agent/permission-preview.d.ts +1 -1
- package/sidecar/dist/agent/permission-preview.js +54 -37
- package/sidecar/dist/agent/permission-preview.js.map +1 -1
- package/sidecar/dist/agent/permission-rules.js +4 -6
- package/sidecar/dist/agent/permission-rules.js.map +1 -1
- package/sidecar/dist/agent/provider.d.ts +2 -1
- package/sidecar/dist/agent/question-bus.js.map +1 -1
- package/sidecar/dist/agent/read-access.d.ts +2 -1
- package/sidecar/dist/agent/read-access.js +4 -7
- package/sidecar/dist/agent/read-access.js.map +1 -1
- package/sidecar/dist/agent/runner.js.map +1 -1
- package/sidecar/dist/agent/session.js +2 -6
- package/sidecar/dist/agent/session.js.map +1 -1
- package/sidecar/dist/agent/switching-runner.js.map +1 -1
- package/sidecar/dist/agent/system-prompt.js.map +1 -1
- package/sidecar/dist/agent/tool-summary.d.ts +2 -1
- package/sidecar/dist/agent/tool-summary.js +26 -13
- package/sidecar/dist/agent/tool-summary.js.map +1 -1
- package/sidecar/dist/agent/typecheck.d.ts +1 -4
- package/sidecar/dist/agent/typecheck.js +3 -2
- package/sidecar/dist/agent/typecheck.js.map +1 -1
- package/sidecar/dist/audit/activity-query.js +4 -8
- package/sidecar/dist/audit/activity-query.js.map +1 -1
- package/sidecar/dist/audit/activity-target.d.ts +4 -2
- package/sidecar/dist/audit/activity-target.js +10 -9
- package/sidecar/dist/audit/activity-target.js.map +1 -1
- package/sidecar/dist/audit/activity.js +4 -3
- package/sidecar/dist/audit/activity.js.map +1 -1
- package/sidecar/dist/audit/call-audit.js.map +1 -1
- package/sidecar/dist/builder/builder-client.d.ts +2 -1
- package/sidecar/dist/builder/builder-client.js +6 -8
- package/sidecar/dist/builder/builder-client.js.map +1 -1
- package/sidecar/dist/builder/capability.js.map +1 -1
- package/sidecar/dist/checkpoints/checkpoints.js.map +1 -1
- package/sidecar/dist/checkpoints/shadow-git.js +6 -2
- package/sidecar/dist/checkpoints/shadow-git.js.map +1 -1
- package/sidecar/dist/constants/agent.js.map +1 -1
- package/sidecar/dist/constants/attachments.js.map +1 -1
- package/sidecar/dist/constants/builder.js.map +1 -1
- package/sidecar/dist/constants/chatgpt.js.map +1 -1
- package/sidecar/dist/constants/checkpoints.d.ts +1 -1
- package/sidecar/dist/constants/checkpoints.js +6 -6
- package/sidecar/dist/constants/checkpoints.js.map +1 -1
- package/sidecar/dist/constants/claude.d.ts +3 -4
- package/sidecar/dist/constants/claude.js +16 -16
- package/sidecar/dist/constants/claude.js.map +1 -1
- package/sidecar/dist/constants/cli.js.map +1 -1
- package/sidecar/dist/constants/codex.d.ts +4 -5
- package/sidecar/dist/constants/codex.js +25 -25
- package/sidecar/dist/constants/codex.js.map +1 -1
- package/sidecar/dist/constants/database.js.map +1 -1
- package/sidecar/dist/constants/mcp.js.map +1 -1
- package/sidecar/dist/constants/paths.js.map +1 -1
- package/sidecar/dist/constants/project.d.ts +1 -1
- package/sidecar/dist/constants/project.js.map +1 -1
- package/sidecar/dist/constants/providers.js.map +1 -1
- package/sidecar/dist/constants/questions.js.map +1 -1
- package/sidecar/dist/constants/read-access.d.ts +1 -1
- package/sidecar/dist/constants/read-access.js +7 -7
- package/sidecar/dist/constants/read-access.js.map +1 -1
- package/sidecar/dist/constants/timing.js.map +1 -1
- package/sidecar/dist/database/database-client.d.ts +3 -2
- package/sidecar/dist/database/database-client.js +13 -9
- package/sidecar/dist/database/database-client.js.map +1 -1
- package/sidecar/dist/host/project-info.js +13 -7
- package/sidecar/dist/host/project-info.js.map +1 -1
- package/sidecar/dist/index.d.ts +1 -1
- package/sidecar/dist/index.js +60 -34
- package/sidecar/dist/index.js.map +1 -1
- package/sidecar/dist/logs/logs-client.js +12 -2
- package/sidecar/dist/logs/logs-client.js.map +1 -1
- package/sidecar/dist/mcp/define-tool.d.ts +9 -8
- package/sidecar/dist/mcp/define-tool.js.map +1 -1
- package/sidecar/dist/mcp/http-binding.js.map +1 -1
- package/sidecar/dist/mcp/tools/ask-user.js.map +1 -1
- package/sidecar/dist/mcp/tools/builder-catalog.d.ts +6 -1
- package/sidecar/dist/mcp/tools/builder-catalog.js +32 -24
- package/sidecar/dist/mcp/tools/builder-catalog.js.map +1 -1
- package/sidecar/dist/mcp/tools/builder-gate.js.map +1 -1
- package/sidecar/dist/mcp/tools/builder-project.d.ts +2 -1
- package/sidecar/dist/mcp/tools/builder-project.js +60 -43
- package/sidecar/dist/mcp/tools/builder-project.js.map +1 -1
- package/sidecar/dist/mcp/tools/builder.js +8 -9
- package/sidecar/dist/mcp/tools/builder.js.map +1 -1
- package/sidecar/dist/mcp/tools/database.js +5 -9
- package/sidecar/dist/mcp/tools/database.js.map +1 -1
- package/sidecar/dist/mcp/tools/find-pages-using.js.map +1 -1
- package/sidecar/dist/mcp/tools/get-current-page.js.map +1 -1
- package/sidecar/dist/mcp/tools/list-pages.js.map +1 -1
- package/sidecar/dist/mcp/tools/navigate-to-page.js +6 -6
- package/sidecar/dist/mcp/tools/navigate-to-page.js.map +1 -1
- package/sidecar/dist/mcp/tools/preview-blocks.js +15 -11
- package/sidecar/dist/mcp/tools/preview-blocks.js.map +1 -1
- package/sidecar/dist/mcp/tools/query-logs.js.map +1 -1
- package/sidecar/dist/mcp/tools/typecheck.js.map +1 -1
- package/sidecar/dist/metrics/aggregate.js.map +1 -1
- package/sidecar/dist/metrics/types.js.map +1 -1
- package/sidecar/dist/pages/registry-client.js +14 -5
- package/sidecar/dist/pages/registry-client.js.map +1 -1
- package/sidecar/dist/pages/route-match.js.map +1 -1
- package/sidecar/dist/protocol/events.d.ts +7 -7
- package/sidecar/dist/protocol/events.js.map +1 -1
- package/sidecar/dist/protocol/json.d.ts +5 -0
- package/sidecar/dist/protocol/json.js +3 -0
- package/sidecar/dist/protocol/json.js.map +1 -0
- package/sidecar/dist/protocol/messages.d.ts +4 -4
- package/sidecar/dist/protocol/messages.js +3 -3
- package/sidecar/dist/protocol/messages.js.map +1 -1
- package/sidecar/dist/providers/claude/activity.d.ts +4 -2
- package/sidecar/dist/providers/claude/activity.js +29 -38
- package/sidecar/dist/providers/claude/activity.js.map +1 -1
- package/sidecar/dist/providers/claude/adapter.js +62 -91
- package/sidecar/dist/providers/claude/adapter.js.map +1 -1
- package/sidecar/dist/providers/claude/attachments.js +4 -4
- package/sidecar/dist/providers/claude/attachments.js.map +1 -1
- package/sidecar/dist/providers/claude/config.js.map +1 -1
- package/sidecar/dist/providers/claude/module.js.map +1 -1
- package/sidecar/dist/providers/claude/provider.d.ts +4 -2
- package/sidecar/dist/providers/claude/provider.js.map +1 -1
- package/sidecar/dist/providers/claude/resolve-binary.js +6 -4
- package/sidecar/dist/providers/claude/resolve-binary.js.map +1 -1
- package/sidecar/dist/providers/claude/safe-mode.js +14 -3
- package/sidecar/dist/providers/claude/safe-mode.js.map +1 -1
- package/sidecar/dist/providers/codex/adapter.js +124 -46
- package/sidecar/dist/providers/codex/adapter.js.map +1 -1
- package/sidecar/dist/providers/codex/attachments.js +1 -1
- package/sidecar/dist/providers/codex/attachments.js.map +1 -1
- package/sidecar/dist/providers/codex/chatgpt/credentials.js.map +1 -1
- package/sidecar/dist/providers/codex/chatgpt/http.js +8 -5
- package/sidecar/dist/providers/codex/chatgpt/http.js.map +1 -1
- package/sidecar/dist/providers/codex/chatgpt/lock.js +3 -3
- package/sidecar/dist/providers/codex/chatgpt/lock.js.map +1 -1
- package/sidecar/dist/providers/codex/chatgpt/login.js.map +1 -1
- package/sidecar/dist/providers/codex/chatgpt/oauth.js +51 -8
- package/sidecar/dist/providers/codex/chatgpt/oauth.js.map +1 -1
- package/sidecar/dist/providers/codex/chatgpt/store.js +23 -23
- package/sidecar/dist/providers/codex/chatgpt/store.js.map +1 -1
- package/sidecar/dist/providers/codex/client.d.ts +4 -3
- package/sidecar/dist/providers/codex/client.js +10 -3
- package/sidecar/dist/providers/codex/client.js.map +1 -1
- package/sidecar/dist/providers/codex/config.js.map +1 -1
- package/sidecar/dist/providers/codex/module.js.map +1 -1
- package/sidecar/dist/providers/codex/permissions.d.ts +2 -2
- package/sidecar/dist/providers/codex/permissions.js +20 -6
- package/sidecar/dist/providers/codex/permissions.js.map +1 -1
- package/sidecar/dist/providers/codex/process.d.ts +3 -1
- package/sidecar/dist/providers/codex/process.js +35 -36
- package/sidecar/dist/providers/codex/process.js.map +1 -1
- package/sidecar/dist/providers/codex/provider.d.ts +2 -0
- package/sidecar/dist/providers/codex/provider.js +23 -7
- package/sidecar/dist/providers/codex/provider.js.map +1 -1
- package/sidecar/dist/providers/codex/resolve-binary.js +2 -2
- package/sidecar/dist/providers/codex/resolve-binary.js.map +1 -1
- package/sidecar/dist/providers/codex/stop.d.ts +6 -1
- package/sidecar/dist/providers/codex/stop.js +29 -22
- package/sidecar/dist/providers/codex/stop.js.map +1 -1
- package/sidecar/dist/providers/registry.js +4 -5
- package/sidecar/dist/providers/registry.js.map +1 -1
- package/sidecar/dist/server/chat-socket-registry.d.ts +6 -6
- package/sidecar/dist/server/chat-socket-registry.js.map +1 -1
- package/sidecar/dist/server/conversation-runs.d.ts +1 -1
- package/sidecar/dist/server/conversation-runs.js +4 -5
- package/sidecar/dist/server/conversation-runs.js.map +1 -1
- package/sidecar/dist/server/host-socket-registry.d.ts +4 -3
- package/sidecar/dist/server/host-socket-registry.js.map +1 -1
- package/sidecar/dist/server/http-io.d.ts +1 -1
- package/sidecar/dist/server/http-io.js +2 -3
- package/sidecar/dist/server/http-io.js.map +1 -1
- package/sidecar/dist/server/http-params.js.map +1 -1
- package/sidecar/dist/server/http-routes.d.ts +9 -2
- package/sidecar/dist/server/http-routes.js +15 -8
- package/sidecar/dist/server/http-routes.js.map +1 -1
- package/sidecar/dist/server/http.js +21 -10
- package/sidecar/dist/server/http.js.map +1 -1
- package/sidecar/dist/server/pending-queue.js +4 -1
- package/sidecar/dist/server/pending-queue.js.map +1 -1
- package/sidecar/dist/server/raw-data.js +2 -1
- package/sidecar/dist/server/raw-data.js.map +1 -1
- package/sidecar/dist/server/routing.js +1 -1
- package/sidecar/dist/server/routing.js.map +1 -1
- package/sidecar/dist/server/safety-net.js +20 -9
- package/sidecar/dist/server/safety-net.js.map +1 -1
- package/sidecar/dist/server/tool-calls.js +7 -5
- package/sidecar/dist/server/tool-calls.js.map +1 -1
- package/sidecar/dist/server/turns.js +2 -1
- package/sidecar/dist/server/turns.js.map +1 -1
- package/sidecar/dist/server/ws.js +2 -6
- package/sidecar/dist/server/ws.js.map +1 -1
- package/sidecar/dist/skills/build-catalog.js.map +1 -1
- package/sidecar/dist/skills/frontmatter.js.map +1 -1
- package/sidecar/dist/skills/plugin-wrapper.js.map +1 -1
- package/sidecar/dist/skills/resolve-sources.js.map +1 -1
- package/sidecar/dist/skills/skill-usage.js +18 -12
- package/sidecar/dist/skills/skill-usage.js.map +1 -1
- package/sidecar/dist/state/conversations.js.map +1 -1
- package/sidecar/dist/state/lock.js +6 -2
- package/sidecar/dist/state/lock.js.map +1 -1
- package/sidecar/dist/state/settings-store.d.ts +31 -1
- package/sidecar/dist/state/settings-store.js +23 -24
- package/sidecar/dist/state/settings-store.js.map +1 -1
- package/sidecar/dist/state/settings-types.js.map +1 -1
- package/sidecar/dist/state/sidecar-version.js +3 -1
- package/sidecar/dist/state/sidecar-version.js.map +1 -1
- package/sidecar/dist/state/store.js +1 -1
- package/sidecar/dist/state/store.js.map +1 -1
- package/sidecar/dist/state/types.js.map +1 -1
- package/sidecar/package.json +1 -7
- package/skills/dms-ai/cases.json +47 -0
- package/skills/dms-ai-code-mode/cases.json +38 -0
- package/skills/dms-builder-safe/cases.json +67 -0
- package/skills/dms-external-database/REFERENCE.md +34 -9
- package/skills/dms-external-database/SKILL.md +24 -11
- package/skills/dms-external-database/cases.json +47 -0
- package/frontend-vue/tests/i18n-panel.test.ts +0 -118
- package/frontend-vue/tests/i18n-views.test.ts +0 -63
- package/frontend-vue/tests/panel-header-height.test.ts +0 -40
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { createHash, createPublicKey, randomBytes, verify
|
|
1
|
+
import { createHash, createPublicKey, randomBytes, verify } from "node:crypto";
|
|
2
|
+
import { z } from "zod";
|
|
2
3
|
import { CHATGPT_AGENT_NAME_HINT, CHATGPT_AUTHORIZE_URL, CHATGPT_DYNAMIC_CLIENT_ID, CHATGPT_HTTP_TIMEOUT_MS, CHATGPT_ID_TOKEN_LEEWAY_S, CHATGPT_ISSUER, CHATGPT_JWKS_URL, CHATGPT_RANDOM_BYTES, CHATGPT_RESOURCE, CHATGPT_REVOKE_URL, CHATGPT_SCOPES, CHATGPT_TERMINAL_REFRESH_ERRORS, CHATGPT_TOKEN_URL, } from "../../../constants/chatgpt.js";
|
|
3
4
|
const FORM_CONTENT_TYPE = "application/x-www-form-urlencoded";
|
|
4
5
|
const MS_PER_SECOND = 1000;
|
|
@@ -45,6 +46,16 @@ export function buildAuthorizeUrl(params) {
|
|
|
45
46
|
query.set("login_hint", params.loginHint);
|
|
46
47
|
return url.toString();
|
|
47
48
|
}
|
|
49
|
+
const optionalString = z.string().optional().catch(undefined);
|
|
50
|
+
const tokenResponseBodySchema = z.object({
|
|
51
|
+
access_token: optionalString,
|
|
52
|
+
refresh_token: optionalString,
|
|
53
|
+
id_token: optionalString,
|
|
54
|
+
expires_in: z.number().optional().catch(undefined),
|
|
55
|
+
scope: optionalString,
|
|
56
|
+
error: optionalString,
|
|
57
|
+
error_description: optionalString,
|
|
58
|
+
});
|
|
48
59
|
async function postForm(url, fields) {
|
|
49
60
|
return fetch(url, {
|
|
50
61
|
method: "POST",
|
|
@@ -55,7 +66,7 @@ async function postForm(url, fields) {
|
|
|
55
66
|
}
|
|
56
67
|
async function readJson(response) {
|
|
57
68
|
try {
|
|
58
|
-
return (await response.json());
|
|
69
|
+
return tokenResponseBodySchema.parse(await response.json());
|
|
59
70
|
}
|
|
60
71
|
catch {
|
|
61
72
|
return {};
|
|
@@ -118,10 +129,42 @@ export async function revokeRefreshToken(clientId, refreshToken) {
|
|
|
118
129
|
return false;
|
|
119
130
|
}
|
|
120
131
|
}
|
|
121
|
-
|
|
132
|
+
const jwtHeaderSchema = z.object({
|
|
133
|
+
alg: optionalString,
|
|
134
|
+
kid: optionalString,
|
|
135
|
+
});
|
|
136
|
+
const rawIdTokenClaimsSchema = z.object({
|
|
137
|
+
iss: optionalString,
|
|
138
|
+
aud: z
|
|
139
|
+
.union([z.string(), z.array(z.string())])
|
|
140
|
+
.optional()
|
|
141
|
+
.catch(undefined),
|
|
142
|
+
exp: z.number().optional().catch(undefined),
|
|
143
|
+
nonce: optionalString,
|
|
144
|
+
sub: optionalString,
|
|
145
|
+
email: optionalString,
|
|
146
|
+
});
|
|
147
|
+
const jwkSchema = z.looseObject({
|
|
148
|
+
kid: optionalString,
|
|
149
|
+
kty: optionalString,
|
|
150
|
+
crv: optionalString,
|
|
151
|
+
d: optionalString,
|
|
152
|
+
dp: optionalString,
|
|
153
|
+
dq: optionalString,
|
|
154
|
+
e: optionalString,
|
|
155
|
+
k: optionalString,
|
|
156
|
+
n: optionalString,
|
|
157
|
+
p: optionalString,
|
|
158
|
+
q: optionalString,
|
|
159
|
+
qi: optionalString,
|
|
160
|
+
x: optionalString,
|
|
161
|
+
y: optionalString,
|
|
162
|
+
});
|
|
163
|
+
const jwksSchema = z.object({ keys: z.array(jwkSchema).optional() });
|
|
164
|
+
function decodeSegment(segment, schema) {
|
|
122
165
|
if (segment === undefined)
|
|
123
166
|
throw new Error("malformed ID token");
|
|
124
|
-
return JSON.parse(Buffer.from(segment, "base64url").toString("utf8"));
|
|
167
|
+
return schema.parse(JSON.parse(Buffer.from(segment, "base64url").toString("utf8")));
|
|
125
168
|
}
|
|
126
169
|
async function fetchSigningKey(kid) {
|
|
127
170
|
const response = await fetch(CHATGPT_JWKS_URL, {
|
|
@@ -129,8 +172,8 @@ async function fetchSigningKey(kid) {
|
|
|
129
172
|
});
|
|
130
173
|
if (!response.ok)
|
|
131
174
|
throw new Error(`JWKS answered ${response.status}`);
|
|
132
|
-
const jwks = (await response.json());
|
|
133
|
-
const key = jwks.keys?.find((candidate) => candidate.kid === kid);
|
|
175
|
+
const jwks = jwksSchema.safeParse(await response.json());
|
|
176
|
+
const key = jwks.data?.keys?.find((candidate) => candidate.kid === kid);
|
|
134
177
|
if (key === undefined)
|
|
135
178
|
throw new Error("ID token signed by an unknown key");
|
|
136
179
|
return key;
|
|
@@ -140,7 +183,7 @@ function hasAudience(aud, clientId) {
|
|
|
140
183
|
}
|
|
141
184
|
export async function validateIdToken(idToken, expected) {
|
|
142
185
|
const [encodedHeader, encodedClaims, encodedSignature] = idToken.split(".");
|
|
143
|
-
const header = decodeSegment(encodedHeader);
|
|
186
|
+
const header = decodeSegment(encodedHeader, jwtHeaderSchema);
|
|
144
187
|
if (header.alg !== ID_TOKEN_ALGORITHM) {
|
|
145
188
|
throw new Error(`ID token uses ${String(header.alg)}`);
|
|
146
189
|
}
|
|
@@ -148,7 +191,7 @@ export async function validateIdToken(idToken, expected) {
|
|
|
148
191
|
const isSigned = verify(RSA_SHA256, Buffer.from(`${encodedHeader}.${encodedClaims}`), createPublicKey({ key, format: "jwk" }), Buffer.from(encodedSignature ?? "", "base64url"));
|
|
149
192
|
if (!isSigned)
|
|
150
193
|
throw new Error("ID token signature does not verify");
|
|
151
|
-
const claims = decodeSegment(encodedClaims);
|
|
194
|
+
const claims = decodeSegment(encodedClaims, rawIdTokenClaimsSchema);
|
|
152
195
|
const now = Date.now() / MS_PER_SECOND;
|
|
153
196
|
if (claims.iss !== CHATGPT_ISSUER)
|
|
154
197
|
throw new Error("ID token issuer");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../../../src/providers/codex/chatgpt/oauth.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../../../src/providers/codex/chatgpt/oauth.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import { readFileSync } from "node:fs";
|
|
|
3
3
|
import { chmod, mkdir, rename, writeFile } from "node:fs/promises";
|
|
4
4
|
import os from "node:os";
|
|
5
5
|
import path from "node:path";
|
|
6
|
+
import { z } from "zod";
|
|
6
7
|
import { APPDATA_ENV, CHATGPT_AUTH_FILE_MODE, CHATGPT_AUTH_FILE_NAME, CHATGPT_CONFIG_DIR_MODE, CHATGPT_CONFIG_DIR_NAME, POSIX_CONFIG_DIR, XDG_CONFIG_HOME_ENV, } from "../../../constants/chatgpt.js";
|
|
7
8
|
import { WINDOWS_PLATFORM } from "../../../constants/codex.js";
|
|
8
9
|
export function chatGptConfigDir() {
|
|
@@ -19,31 +20,30 @@ export function chatGptConfigDir() {
|
|
|
19
20
|
export function chatGptAuthFile() {
|
|
20
21
|
return path.join(chatGptConfigDir(), CHATGPT_AUTH_FILE_NAME);
|
|
21
22
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
return undefined;
|
|
38
|
-
return {
|
|
39
|
-
...record,
|
|
40
|
-
hostId: record.hostId,
|
|
41
|
-
tokens: isTokens(record.tokens) ? record.tokens : undefined,
|
|
42
|
-
};
|
|
43
|
-
}
|
|
23
|
+
const tokensSchema = z.looseObject({
|
|
24
|
+
accessToken: z.string(),
|
|
25
|
+
refreshToken: z.string(),
|
|
26
|
+
idToken: z.string(),
|
|
27
|
+
expiresAt: z.number(),
|
|
28
|
+
scopes: z.array(z.string()),
|
|
29
|
+
});
|
|
30
|
+
const authRecordSchema = z.looseObject({
|
|
31
|
+
hostId: z.string().min(1),
|
|
32
|
+
clientId: z.string().optional().catch(undefined),
|
|
33
|
+
subject: z.string().optional().catch(undefined),
|
|
34
|
+
email: z.string().optional().catch(undefined),
|
|
35
|
+
savedAt: z.string().optional().catch(undefined),
|
|
36
|
+
tokens: z.unknown().optional(),
|
|
37
|
+
});
|
|
44
38
|
export function readAuthRecord() {
|
|
45
39
|
try {
|
|
46
|
-
|
|
40
|
+
const record = authRecordSchema.safeParse(JSON.parse(readFileSync(chatGptAuthFile(), "utf8")));
|
|
41
|
+
if (!record.success)
|
|
42
|
+
return undefined;
|
|
43
|
+
return {
|
|
44
|
+
...record.data,
|
|
45
|
+
tokens: tokensSchema.safeParse(record.data.tokens).data,
|
|
46
|
+
};
|
|
47
47
|
}
|
|
48
48
|
catch {
|
|
49
49
|
return undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../../src/providers/codex/chatgpt/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,WAAW,EACX,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AA2B/D,MAAM,UAAU,gBAAgB;IAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACzC,IAAI,OAAO,CAAC,QAAQ,KAAK,gBAAgB,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACnE,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,uBAAuB,CAAC,CAAC;IACrD,CAAC;IACD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAC7C,MAAM,IAAI,GACR,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE;QAC7B,CAAC,CAAC,GAAG;QACL,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAChD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,sBAAsB,CAAC,CAAC;AAC/D,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../../src/providers/codex/chatgpt/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Readable, Writable } from "node:stream";
|
|
2
|
+
import type { JsonValue } from "./protocol/serde_json.js";
|
|
2
3
|
export interface CodexNotification {
|
|
3
4
|
method: string;
|
|
4
5
|
params: unknown;
|
|
@@ -10,15 +11,15 @@ export interface CodexServerRequest {
|
|
|
10
11
|
}
|
|
11
12
|
export interface CodexClientHandlers {
|
|
12
13
|
onNotification: (notification: CodexNotification) => void;
|
|
13
|
-
onServerRequest: (request: CodexServerRequest) => Promise<
|
|
14
|
+
onServerRequest: (request: CodexServerRequest) => Promise<JsonValue>;
|
|
14
15
|
onAbort?: (reason: Error) => void;
|
|
15
16
|
}
|
|
16
17
|
export interface CodexRequestOptions {
|
|
17
18
|
timeoutMs?: number;
|
|
18
19
|
}
|
|
19
20
|
export interface CodexClient {
|
|
20
|
-
request<T>(method: string, params?:
|
|
21
|
-
notify(method: string, params?:
|
|
21
|
+
request<T>(method: string, params?: JsonValue, options?: CodexRequestOptions): Promise<T>;
|
|
22
|
+
notify(method: string, params?: JsonValue): void;
|
|
22
23
|
abort(reason: Error): void;
|
|
23
24
|
}
|
|
24
25
|
export declare function createCodexClient(stdin: Writable, stdout: Readable, handlers: CodexClientHandlers): CodexClient;
|
|
@@ -1,4 +1,12 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
1
2
|
import { CODEX_REQUEST_TIMEOUT_MESSAGE, CODEX_TRANSPORT_CLOSED_MESSAGE, JSONRPC_LINE_SEPARATOR, JSONRPC_VERSION, } from "../../constants/codex.js";
|
|
3
|
+
const jsonRpcFrameSchema = z.object({
|
|
4
|
+
id: z.union([z.number(), z.string()]).optional(),
|
|
5
|
+
method: z.string().optional(),
|
|
6
|
+
params: z.unknown().optional(),
|
|
7
|
+
result: z.unknown().optional(),
|
|
8
|
+
error: z.object({ code: z.number(), message: z.string() }).optional(),
|
|
9
|
+
});
|
|
2
10
|
function isServerRequest(frame) {
|
|
3
11
|
return frame.id !== undefined && frame.method !== undefined;
|
|
4
12
|
}
|
|
@@ -7,8 +15,7 @@ function isResponse(frame) {
|
|
|
7
15
|
}
|
|
8
16
|
function parseFrame(line) {
|
|
9
17
|
try {
|
|
10
|
-
|
|
11
|
-
return typeof parsed === "object" && parsed !== null ? parsed : null;
|
|
18
|
+
return jsonRpcFrameSchema.parse(JSON.parse(line));
|
|
12
19
|
}
|
|
13
20
|
catch {
|
|
14
21
|
return null;
|
|
@@ -43,7 +50,7 @@ export function createCodexClient(stdin, stdout, handlers) {
|
|
|
43
50
|
waiter.settle(frame);
|
|
44
51
|
}
|
|
45
52
|
function serveRequest(frame) {
|
|
46
|
-
const id = frame
|
|
53
|
+
const { id } = frame;
|
|
47
54
|
handlers
|
|
48
55
|
.onServerRequest({
|
|
49
56
|
id,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/providers/codex/client.ts"],"names":[],"mappings":"AACA,OAAO,EACL,6BAA6B,EAC7B,8BAA8B,EAC9B,sBAAsB,EACtB,eAAe,GAChB,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/providers/codex/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/providers/codex/config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,6BAA6B,EAC7B,8BAA8B,GAC/B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,iCAAiC,EACjC,8BAA8B,EAC9B,+BAA+B,EAC/B,mBAAmB,EACnB,uBAAuB,EACvB,6BAA6B,EAC7B,uBAAuB,EACvB,yBAAyB,EACzB,6BAA6B,GAC9B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/providers/codex/config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,6BAA6B,EAC7B,8BAA8B,GAC/B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,iCAAiC,EACjC,8BAA8B,EAC9B,+BAA+B,EAC/B,mBAAmB,EACnB,uBAAuB,EACvB,6BAA6B,EAC7B,uBAAuB,EACvB,yBAAyB,EACzB,6BAA6B,GAC9B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AA2BvE,MAAM,mBAAmB,GAAsC;IAC7D,MAAM,EAAE;QACN,cAAc,EAAE,YAAY;QAC5B,OAAO,EAAE,WAAW;QACpB,aAAa,EAAE,KAAK;QACpB,QAAQ,EAAE,KAAK;QACf,sBAAsB,EAAE,KAAK;KAC9B;IAMD,WAAW,EAAE;QACX,cAAc,EAAE,YAAY;QAC5B,OAAO,EAAE,iBAAiB;QAC1B,aAAa,EAAE,KAAK;QACpB,QAAQ,EAAE,IAAI;QACd,sBAAsB,EAAE,KAAK;KAC9B;IACD,IAAI,EAAE;QACJ,cAAc,EAAE,YAAY;QAC5B,OAAO,EAAE,WAAW;QACpB,aAAa,EAAE,KAAK;QACpB,QAAQ,EAAE,KAAK;QACf,sBAAsB,EAAE,IAAI;KAC7B;CACF,CAAC;AAOF,MAAM,wBAAwB,GAAkC;IAC9D,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;CACb,CAAC;AAaF,SAAS,aAAa,CAAC,SAAyB;IAC9C,MAAM,KAAK,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,kBAAkB,CACzB,MAAuB,EACvB,SAAyB;IAEzB,IAAI,MAAM,CAAC,OAAO,KAAK,oBAAoB;QACzC,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;IACtC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC;IACnE,CAAC;IACD,OAAO;QACL,IAAI,EAAE,gBAAgB;QACtB,aAAa,EAAE,aAAa,CAAC,SAAS,CAAC;QACvC,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,mBAAmB,EAAE,KAAK;QAC1B,eAAe,EAAE,KAAK;KACvB,CAAC;AACJ,CAAC;AAWD,MAAM,UAAU,iBAAiB,CAAC,QAAqB;IACrD,MAAM,IAAI,GAAG,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,uBAAuB,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAC7E,OAAO;QACL,GAAG,IAAI;QACP,OAAO,EAAE,WAAW;QACpB,QAAQ,EAAE,KAAK;QACf,aAAa,EAAE,KAAK;QACpB,sBAAsB,EAAE,IAAI;KAC7B,CAAC;AACJ,CAAC;AAMD,MAAM,UAAU,kBAAkB,CAChC,QAAqB,EACrB,SAAyB;IAEzB,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC3C,OAAO;QACL,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,aAAa,EAAE,kBAAkB,CAAC,MAAM,EAAE,SAAS,CAAC;QACpD,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC,QAAQ,CAAC;KACpD,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAeD,MAAM,mBAAmB,GAAG;IAC1B,4CAA4C,qBAAqB,KAAK;IACtE,uDAAuD,wBAAwB,KAAK;IACpF,KAAK;IACL,qCAAqC;IACrC,oEAAoE;IACpE,6BAA6B;CAC9B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,SAAS,SAAS,CAAC,MAAyB;IAC1C,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AAClD,CAAC;AAqBD,MAAM,UAAU,eAAe,CAAC,KAAuB;IACrD,OAAO;QACL,2BAA2B;QAC3B,oBAAoB,UAAU,CAAC,uBAAuB,CAAC,EAAE;QACzD,EAAE;QACF,oBAAoB,uBAAuB,GAAG;QAC9C,UAAU,UAAU,CAAC,yBAAyB,CAAC,EAAE;QACjD,cAAc,UAAU,CAAC,6BAA6B,CAAC,EAAE;QACzD,cAAc,UAAU,CAAC,6BAA6B,CAAC,EAAE;QACzD,8BAA8B;QAC9B,6BAA6B;QAC7B,EAAE;QACF,oBAAoB,uBAAuB,QAAQ;QACnD,aAAa,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;QACzC,UAAU,SAAS,CAAC,CAAC,qBAAqB,EAAE,IAAI,EAAE,mBAAmB,CAAC,CAAC,EAAE;QACzE,gBAAgB,6BAA6B,EAAE;QAC/C,yBAAyB,8BAA8B,EAAE;QACzD,EAAE;QACF,gBAAgB,mBAAmB,GAAG;QACtC,SAAS,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;QACnC,0BAA0B,UAAU,CAAC,uBAAuB,CAAC,EAAE;QAC/D,sBAAsB,oBAAoB,EAAE;QAC5C,EAAE;QACF,aAAa,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,GAAG;QAC/D,2BAA2B;QAC3B,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAGD,MAAM,UAAU,UAAU,CAAC,QAAqB;IAC9C,OAAO,uBAAuB,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,MAAM,CAAC;AACrE,CAAC;AASD,MAAM,UAAU,0BAA0B,CACxC,QAAqB;IAErB,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,SAAS,CAAC;AACrE,CAAC;AAUD,MAAM,UAAU,mBAAmB,CACjC,QAAqB,EACrB,kBAA0B;IAE1B,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5C,IAAI,kBAAkB,GAAG,+BAA+B;QAAE,OAAO,SAAS,CAAC;IAC3E,OAAO,8BAA8B,CAAC,OAAO,CAC3C,iCAAiC,EACjC,MAAM,CAAC,kBAAkB,CAAC,CAC3B,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../../src/providers/codex/module.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,8BAA8B,GAC/B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EACL,SAAS,EAGT,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../../src/providers/codex/module.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,8BAA8B,GAC/B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EACL,SAAS,EAGT,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAQ7B,IAAI,cAAc,GAAgC,IAAI,CAAC;AAOvD,SAAS,qBAAqB;IAC5B,MAAM,YAAY,GAAG,wBAAwB,EAAE,CAAC;IAChD,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,WAAW,CAAC,4BAA4B,CAAC,iBAAiB,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,CAAC,yBAAyB,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7C,OAAO,WAAW,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,mBAAmB,EAAE,EAAE,CAAC;QAC1B,OAAO,CAAC,IAAI,CACV,GAAG,gBAAgB,IAAI,uBAAuB,CAAC,YAAY,CAAC,EAAE,CAC/D,CAAC;IACJ,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,WAAW;IAClB,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,KAAK,uBAAuB,CAAC;AACtE,CAAC;AAED,SAAS,kBAAkB;IACzB,IAAI,WAAW,EAAE;QAAE,OAAO,qBAAqB,EAAE,CAAC;IAClD,cAAc,KAAK,qBAAqB,EAAE,CAAC;IAC3C,OAAO,cAAc,CAAC;AACxB,CAAC;AAOD,SAAS,iBAAiB;IACxB,MAAM,SAAS,GAAG,kBAAkB,EAAE,CAAC;IACvC,IAAI,CAAC,SAAS,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC;IAC3C,IAAI,CAAC,iBAAiB,EAAE,CAAC,UAAU,EAAE,CAAC;QACpC,OAAO,WAAW,CAAC,4BAA4B,CAAC,mBAAmB,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAMD,SAAS,eAAe;IACtB,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,KAAK,SAAS;QAAE,OAAO;IAC9D,OAAO,CAAC,IAAI,CAAC,GAAG,gBAAgB,IAAI,8BAA8B,EAAE,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAmB;IACzC,IAAI,EAAE,OAAO;IACb,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAC3B,mBAAmB,CAAC;QAClB,GAAG,OAAO;QACV,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,aAAa,EAAE,OAAO,CAAC,aAAa;KACrC,CAAC;IACJ,iBAAiB;IAKjB,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;QAC9B,eAAe,EAAE,CAAC;QAClB,MAAM,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;CACF,CAAC"}
|
|
@@ -3,9 +3,9 @@ import type { ToolDecision } from "../../agent/provider.js";
|
|
|
3
3
|
import type { AppSettings } from "../../state/settings-types.js";
|
|
4
4
|
import type { CodexFileChange } from "./adapter.js";
|
|
5
5
|
import type { CodexServerRequest } from "./client.js";
|
|
6
|
-
|
|
6
|
+
type CodexApprovalDecisionResponse = {
|
|
7
7
|
decision: string;
|
|
8
|
-
}
|
|
8
|
+
};
|
|
9
9
|
export interface CodexPermissionDeps {
|
|
10
10
|
conversationId: string;
|
|
11
11
|
permissionBus?: PermissionBus;
|
|
@@ -1,8 +1,16 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
1
2
|
import { CODEX_CHANGE_DIFF_ARG, CODEX_CHANGE_KIND_ARG, } from "../../agent/permission-preview.js";
|
|
2
3
|
import { CODEX_APPROVAL_DECISIONS, CODEX_COMMAND_APPROVAL_METHOD, CODEX_FILE_CHANGE_APPROVAL_METHOD, CODEX_LOG_PREFIX, CODEX_UNKNOWN_APPROVAL_METHOD, } from "../../constants/codex.js";
|
|
3
4
|
import { BASH_COMMAND_ARG, EDIT_FILE_PATH_ARG, TOOL_LEXICON, } from "../../constants/tool-lexicon.js";
|
|
4
5
|
import { EDIT_PATHS_KEY } from "../../agent/edit-targets.js";
|
|
5
6
|
import { resolveModePolicy } from "./config.js";
|
|
7
|
+
const commandApprovalParamsSchema = z.object({
|
|
8
|
+
command: z.string().nullish(),
|
|
9
|
+
itemId: z.string().optional(),
|
|
10
|
+
});
|
|
11
|
+
const fileChangeApprovalParamsSchema = z.object({
|
|
12
|
+
itemId: z.string().optional(),
|
|
13
|
+
});
|
|
6
14
|
function accept() {
|
|
7
15
|
return { decision: CODEX_APPROVAL_DECISIONS.ACCEPT };
|
|
8
16
|
}
|
|
@@ -35,10 +43,16 @@ export function createCodexPermissionHandler(deps) {
|
|
|
35
43
|
callId: itemId,
|
|
36
44
|
};
|
|
37
45
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
46
|
+
function subjectDescriber(request) {
|
|
47
|
+
switch (request.method) {
|
|
48
|
+
case CODEX_COMMAND_APPROVAL_METHOD:
|
|
49
|
+
return () => describeCommand(commandApprovalParamsSchema.safeParse(request.params).data ?? {});
|
|
50
|
+
case CODEX_FILE_CHANGE_APPROVAL_METHOD:
|
|
51
|
+
return () => describeFileChange(fileChangeApprovalParamsSchema.safeParse(request.params).data ?? {});
|
|
52
|
+
default:
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
42
56
|
function countDenial(isAllowed) {
|
|
43
57
|
denials = isAllowed ? 0 : denials + 1;
|
|
44
58
|
}
|
|
@@ -68,14 +82,14 @@ export function createCodexPermissionHandler(deps) {
|
|
|
68
82
|
}
|
|
69
83
|
return {
|
|
70
84
|
async handle(request) {
|
|
71
|
-
const describe =
|
|
85
|
+
const describe = subjectDescriber(request);
|
|
72
86
|
if (describe === undefined) {
|
|
73
87
|
console.warn(`${CODEX_LOG_PREFIX} ${CODEX_UNKNOWN_APPROVAL_METHOD} ${request.method}`);
|
|
74
88
|
return decline();
|
|
75
89
|
}
|
|
76
90
|
if (cancelled)
|
|
77
91
|
return decline();
|
|
78
|
-
const subject = describe(
|
|
92
|
+
const subject = describe();
|
|
79
93
|
if (resolveModePolicy(deps.getSettings()).autoDeclineEscalations) {
|
|
80
94
|
return block(subject);
|
|
81
95
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../../src/providers/codex/permissions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../../src/providers/codex/permissions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EACL,wBAAwB,EACxB,6BAA6B,EAC7B,iCAAiC,EACjC,gBAAgB,EAChB,6BAA6B,GAC9B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,GACb,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAI7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAgChD,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;IAC7B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC,CAAC;AAEH,MAAM,8BAA8B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC,CAAC;AAMH,SAAS,MAAM;IACb,OAAO,EAAE,QAAQ,EAAE,wBAAwB,CAAC,MAAM,EAAE,CAAC;AACvD,CAAC;AAED,SAAS,OAAO;IACd,OAAO,EAAE,QAAQ,EAAE,wBAAwB,CAAC,OAAO,EAAE,CAAC;AACxD,CAAC;AAUD,MAAM,UAAU,4BAA4B,CAC1C,IAAyB;IAEzB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,SAAS,eAAe,CAAC,MAA6B;QACpD,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;QACnC,OAAO;YACL,QAAQ,EAAE,YAAY,CAAC,IAAI;YAC3B,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAAE,OAAO,IAAI,EAAE,EAAE;YAC3C,MAAM,EAAE,MAAM;SACf,CAAC;IACJ,CAAC;IAOD,SAAS,kBAAkB,CACzB,MAAgC;QAEhC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;QAC1B,MAAM,OAAO,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACpE,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;QACxB,OAAO;YACL,QAAQ,EAAE,YAAY,CAAC,IAAI;YAC3B,IAAI,EAAE;gBACJ,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,IAAI,IAAI,EAAE;gBACvC,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;gBACtD,CAAC,qBAAqB,CAAC,EAAE,KAAK,EAAE,IAAI,IAAI,EAAE;gBAC1C,CAAC,qBAAqB,CAAC,EAAE,KAAK,EAAE,IAAI,IAAI,EAAE;aAC3C;YACD,MAAM,EAAE,MAAM;SACf,CAAC;IACJ,CAAC;IAED,SAAS,gBAAgB,CACvB,OAA2B;QAE3B,QAAQ,OAAO,CAAC,MAAM,EAAE,CAAC;YACvB,KAAK,6BAA6B;gBAChC,OAAO,GAAG,EAAE,CACV,eAAe,CACb,2BAA2B,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,EAAE,CACjE,CAAC;YACN,KAAK,iCAAiC;gBACpC,OAAO,GAAG,EAAE,CACV,kBAAkB,CAChB,8BAA8B,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,EAAE,CACpE,CAAC;YACN;gBACE,OAAO,SAAS,CAAC;QACrB,CAAC;IACH,CAAC;IAED,SAAS,WAAW,CAAC,SAAkB;QACrC,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,UAAU,GAAG,CAChB,OAAwB;QAExB,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS;YAAE,OAAO,OAAO,EAAE,CAAC;QACvD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC;YACzD,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QACH,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,SAAS;YAAE,OAAO,OAAO,EAAE,CAAC;QACzC,MAAM,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;QAC9B,OAAO,MAAM,EAAE,CAAC;IAClB,CAAC;IAGD,SAAS,KAAK,CAAC,OAAwB;QACrC,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,SAAS,EAAE,SAAS;SACrB,CAAC,CAAC;QACH,WAAW,CAAC,KAAK,CAAC,CAAC;QACnB,OAAO,OAAO,EAAE,CAAC;IACnB,CAAC;IAED,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,OAAO;YAClB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAC3C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,OAAO,CAAC,IAAI,CACV,GAAG,gBAAgB,IAAI,6BAA6B,IAAI,OAAO,CAAC,MAAM,EAAE,CACzE,CAAC;gBACF,OAAO,OAAO,EAAE,CAAC;YACnB,CAAC;YACD,IAAI,SAAS;gBAAE,OAAO,OAAO,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,QAAQ,EAAE,CAAC;YAC3B,IAAI,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,sBAAsB,EAAE,CAAC;gBACjE,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC;YACxB,CAAC;YACD,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC;QACD,aAAa,EAAE,GAAG,EAAE;YAClB,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;QACD,MAAM,EAAE,GAAG,EAAE;YACX,SAAS,GAAG,KAAK,CAAC;QACpB,CAAC;QACD,kBAAkB,EAAE,GAAG,EAAE,CAAC,OAAO;KAClC,CAAC;AACJ,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { CodexClient, CodexClientHandlers } from "./client.js";
|
|
2
2
|
import type { CodexInstallation } from "./resolve-binary.js";
|
|
3
|
+
import { type StopGraces } from "./stop.js";
|
|
3
4
|
export interface CodexProcessOptions {
|
|
4
5
|
conversationId: string;
|
|
5
6
|
stateDir: string;
|
|
@@ -9,6 +10,7 @@ export interface CodexProcessOptions {
|
|
|
9
10
|
hostProjectRoot: string;
|
|
10
11
|
accessTokenUrl: string;
|
|
11
12
|
handlers: CodexClientHandlers;
|
|
13
|
+
stopGraces?: StopGraces;
|
|
12
14
|
}
|
|
13
15
|
export interface CodexProcess {
|
|
14
16
|
client: CodexClient;
|
|
@@ -19,5 +21,5 @@ export interface CodexProcess {
|
|
|
19
21
|
export declare function codexHomeFor(stateDir: string, conversationId: string): string;
|
|
20
22
|
export declare function readProcessCommand(pid: number): string | undefined;
|
|
21
23
|
export declare function isCodexProcess(pid: number): boolean;
|
|
22
|
-
export declare function reapOrphanCodexProcesses(stateDir: string): Promise<number[]>;
|
|
24
|
+
export declare function reapOrphanCodexProcesses(stateDir: string, graces?: StopGraces): Promise<number[]>;
|
|
23
25
|
export declare function spawnCodexProcess(options: CodexProcessOptions): Promise<CodexProcess>;
|
|
@@ -2,7 +2,9 @@ import { execFileSync, spawn } from "node:child_process";
|
|
|
2
2
|
import { mkdirSync, readFileSync } from "node:fs";
|
|
3
3
|
import { readdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
4
4
|
import path from "node:path";
|
|
5
|
+
import { z } from "zod";
|
|
5
6
|
import { CODEX_APP_SERVER_COMMAND, CODEX_BINARY_NAME, CODEX_CLIENT_ABORTED_MESSAGE, CODEX_CONFIG_FILE_NAME, CODEX_EXITED_MESSAGE, CODEX_HOME_DIR_NAME, CODEX_HOME_ENV_VAR, CODEX_HOME_REMOVAL_FAILED_MESSAGE, CODEX_LOG_PREFIX, CODEX_MCP_TOKEN_ENV_VAR, CODEX_ORPHAN_POLL_MS, CODEX_PID_REGISTRY_FILE, CODEX_PID_RELEASE_FAILED_MESSAGE, CODEX_PID_TOKEN, CODEX_PROC_CMDLINE, CODEX_SPAWN_FAILED_MESSAGE, CODEX_STDERR_TAIL_BYTES, CODEX_STRICT_CONFIG_FLAG, CODEX_SURVIVED_STOP_MESSAGE, PROCESS_QUERY_BY_PLATFORM, } from "../../constants/codex.js";
|
|
7
|
+
import { PLATFORM_LINUX } from "../../constants/native-binary.js";
|
|
6
8
|
import { safeDirSegment } from "../../state/safe-segment.js";
|
|
7
9
|
import { createCodexClient } from "./client.js";
|
|
8
10
|
import { CHATGPT_TOKEN_SECRET_ENV, CHATGPT_TOKEN_URL_ENV, } from "../../constants/chatgpt.js";
|
|
@@ -15,24 +17,18 @@ export function codexHomeFor(stateDir, conversationId) {
|
|
|
15
17
|
function pidRegistryPath(stateDir) {
|
|
16
18
|
return path.join(stateDir, CODEX_PID_REGISTRY_FILE);
|
|
17
19
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
return undefined;
|
|
21
|
-
const { pid, home } = entry;
|
|
22
|
-
if (pid === undefined || !Number.isInteger(pid))
|
|
23
|
-
return undefined;
|
|
24
|
-
return typeof home === "string" ? { pid, home } : undefined;
|
|
25
|
-
}
|
|
26
|
-
function isPidRecord(record) {
|
|
27
|
-
return record !== undefined;
|
|
28
|
-
}
|
|
20
|
+
const pidRecordSchema = z.object({ pid: z.number().int(), home: z.string() });
|
|
21
|
+
const pidRegistrySchema = z.array(z.unknown());
|
|
29
22
|
async function readPidRegistry(stateDir) {
|
|
30
23
|
try {
|
|
31
24
|
const raw = await readFile(pidRegistryPath(stateDir), "utf8");
|
|
32
|
-
const
|
|
33
|
-
if (!
|
|
25
|
+
const entries = pidRegistrySchema.safeParse(JSON.parse(raw));
|
|
26
|
+
if (!entries.success)
|
|
34
27
|
return [];
|
|
35
|
-
return
|
|
28
|
+
return entries.data.flatMap((entry) => {
|
|
29
|
+
const record = pidRecordSchema.safeParse(entry);
|
|
30
|
+
return record.success ? [record.data] : [];
|
|
31
|
+
});
|
|
36
32
|
}
|
|
37
33
|
catch {
|
|
38
34
|
return [];
|
|
@@ -51,11 +47,8 @@ function queryProcessTable(pid) {
|
|
|
51
47
|
return undefined;
|
|
52
48
|
return execFileSync(command, args.map((arg) => arg.replace(CODEX_PID_TOKEN, String(pid))), { encoding: "utf8", windowsHide: true });
|
|
53
49
|
}
|
|
54
|
-
const COMMAND_READERS = {
|
|
55
|
-
linux: readProcCmdline,
|
|
56
|
-
};
|
|
57
50
|
export function readProcessCommand(pid) {
|
|
58
|
-
const read =
|
|
51
|
+
const read = process.platform === PLATFORM_LINUX ? readProcCmdline : queryProcessTable;
|
|
59
52
|
try {
|
|
60
53
|
const command = read(pid)?.trim();
|
|
61
54
|
return command === undefined || command.length === 0 ? undefined : command;
|
|
@@ -99,13 +92,13 @@ function exitsWithin(child, waitMs) {
|
|
|
99
92
|
child.once("exit", onExit);
|
|
100
93
|
});
|
|
101
94
|
}
|
|
102
|
-
async function stopChild(child, pid) {
|
|
95
|
+
async function stopChild(child, pid, graces) {
|
|
103
96
|
if (hasExited(child))
|
|
104
97
|
return true;
|
|
105
|
-
return runStopSteps(pid, (waitMs) => exitsWithin(child, waitMs));
|
|
98
|
+
return runStopSteps(pid, (waitMs) => exitsWithin(child, waitMs), graces);
|
|
106
99
|
}
|
|
107
|
-
async function stopOrphan(record) {
|
|
108
|
-
const isStopped = await runStopSteps(record.pid, orphanGoneWithin(record.pid));
|
|
100
|
+
async function stopOrphan(record, graces) {
|
|
101
|
+
const isStopped = await runStopSteps(record.pid, orphanGoneWithin(record.pid), graces);
|
|
109
102
|
return { record, isStopped };
|
|
110
103
|
}
|
|
111
104
|
async function removeOrphanHomes(stateDir, survivors) {
|
|
@@ -126,10 +119,10 @@ async function forgetReaped(stateDir, recorded, survivors) {
|
|
|
126
119
|
.filter((pid) => !survivorPids.has(pid)));
|
|
127
120
|
await updateRegistry(stateDir, (current) => current.filter((record) => !settled.has(record.pid)));
|
|
128
121
|
}
|
|
129
|
-
export async function reapOrphanCodexProcesses(stateDir) {
|
|
122
|
+
export async function reapOrphanCodexProcesses(stateDir, graces) {
|
|
130
123
|
const recorded = await readPidRegistry(stateDir);
|
|
131
124
|
const orphans = recorded.filter((record) => isCodexProcess(record.pid));
|
|
132
|
-
const outcomes = await Promise.all(orphans.map(stopOrphan));
|
|
125
|
+
const outcomes = await Promise.all(orphans.map((record) => stopOrphan(record, graces)));
|
|
133
126
|
const survivors = outcomes
|
|
134
127
|
.filter((outcome) => !outcome.isStopped)
|
|
135
128
|
.map((outcome) => outcome.record);
|
|
@@ -238,31 +231,36 @@ function watchChild(child, stderr) {
|
|
|
238
231
|
},
|
|
239
232
|
};
|
|
240
233
|
}
|
|
241
|
-
function
|
|
242
|
-
return error instanceof Error ? error.message : String(error);
|
|
243
|
-
}
|
|
244
|
-
async function retireChild(stateDir, child) {
|
|
234
|
+
async function retireChild(stateDir, child, graces) {
|
|
245
235
|
const { pid } = child;
|
|
246
236
|
if (pid === undefined)
|
|
247
237
|
return true;
|
|
248
|
-
if (!(await stopChild(child, pid))) {
|
|
238
|
+
if (!(await stopChild(child, pid, graces))) {
|
|
249
239
|
console.warn(`${CODEX_LOG_PREFIX} ${CODEX_SURVIVED_STOP_MESSAGE} ${pid}`);
|
|
250
240
|
return false;
|
|
251
241
|
}
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
}
|
|
242
|
+
try {
|
|
243
|
+
await forgetPid(stateDir, pid);
|
|
244
|
+
}
|
|
245
|
+
catch (error) {
|
|
246
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
247
|
+
console.warn(`${CODEX_LOG_PREFIX} ${CODEX_PID_RELEASE_FAILED_MESSAGE} ${pid}: ${reason}`);
|
|
248
|
+
}
|
|
255
249
|
return true;
|
|
256
250
|
}
|
|
257
251
|
async function removeHome(codexHome) {
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
}
|
|
252
|
+
try {
|
|
253
|
+
await rm(codexHome, { recursive: true, force: true });
|
|
254
|
+
}
|
|
255
|
+
catch (error) {
|
|
256
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
257
|
+
console.error(`${CODEX_LOG_PREFIX} ${CODEX_HOME_REMOVAL_FAILED_MESSAGE} ${codexHome}: ${reason}`);
|
|
258
|
+
}
|
|
261
259
|
}
|
|
262
260
|
async function disposeProcess(teardown) {
|
|
263
261
|
teardown.watchdog.markDisposed();
|
|
264
262
|
teardown.client.abort(new Error(`${CODEX_LOG_PREFIX} ${CODEX_CLIENT_ABORTED_MESSAGE}`));
|
|
265
|
-
if (await retireChild(teardown.stateDir, teardown.child)) {
|
|
263
|
+
if (await retireChild(teardown.stateDir, teardown.child, teardown.graces)) {
|
|
266
264
|
await removeHome(teardown.codexHome);
|
|
267
265
|
}
|
|
268
266
|
}
|
|
@@ -314,6 +312,7 @@ export async function spawnCodexProcess(options) {
|
|
|
314
312
|
client,
|
|
315
313
|
watchdog,
|
|
316
314
|
child,
|
|
315
|
+
graces: options.stopGraces,
|
|
317
316
|
});
|
|
318
317
|
await registerPid(options.stateDir, spawned);
|
|
319
318
|
return spawned;
|