@ouro.bot/cli 0.1.0-alpha.33 → 0.1.0-alpha.330
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 +188 -187
- package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/agent.json +3 -2
- package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/SOUL.md +1 -1
- package/changelog.json +1976 -0
- package/dist/arc/attention-types.js +8 -0
- package/dist/arc/cares.js +140 -0
- package/dist/arc/episodes.js +117 -0
- package/dist/arc/intentions.js +133 -0
- package/dist/arc/json-store.js +117 -0
- package/dist/arc/obligations.js +237 -0
- package/dist/arc/packets.js +193 -0
- package/dist/arc/presence.js +185 -0
- package/dist/arc/task-lifecycle.js +65 -0
- package/dist/heart/active-work.js +832 -0
- package/dist/heart/agent-entry.js +37 -2
- package/dist/heart/attachments/image-normalize.js +194 -0
- package/dist/heart/attachments/materialize.js +97 -0
- package/dist/heart/attachments/originals.js +88 -0
- package/dist/heart/attachments/render.js +29 -0
- package/dist/heart/attachments/sources/adapter.js +2 -0
- package/dist/heart/attachments/sources/bluebubbles.js +156 -0
- package/dist/heart/attachments/sources/cli-local-file.js +78 -0
- package/dist/heart/attachments/sources/index.js +16 -0
- package/dist/heart/attachments/store.js +103 -0
- package/dist/heart/attachments/types.js +93 -0
- package/dist/heart/auth/auth-flow.js +463 -0
- package/dist/heart/bridges/manager.js +358 -0
- package/dist/heart/bridges/state-machine.js +135 -0
- package/dist/heart/bridges/store.js +123 -0
- package/dist/heart/bundle-state.js +168 -0
- package/dist/heart/commitments.js +111 -0
- package/dist/heart/config-registry.js +304 -0
- package/dist/heart/config.js +53 -21
- package/dist/heart/core.js +695 -195
- package/dist/heart/cross-chat-delivery.js +131 -0
- package/dist/heart/daemon/agent-config-check.js +149 -0
- package/dist/heart/daemon/agent-discovery.js +79 -3
- package/dist/heart/daemon/agent-service.js +360 -0
- package/dist/heart/daemon/agentic-repair.js +170 -0
- package/dist/heart/daemon/bluebubbles-health-diagnostics.js +122 -0
- package/dist/heart/daemon/cadence.js +70 -0
- package/dist/heart/daemon/cli-defaults.js +591 -0
- package/dist/heart/daemon/cli-exec.js +2277 -0
- package/dist/heart/daemon/cli-help.js +306 -0
- package/dist/heart/daemon/cli-parse.js +824 -0
- package/dist/heart/daemon/cli-render-doctor.js +57 -0
- package/dist/heart/daemon/cli-render.js +512 -0
- package/dist/heart/daemon/cli-types.js +8 -0
- package/dist/heart/daemon/daemon-cli.js +29 -1171
- package/dist/heart/daemon/daemon-entry.js +358 -3
- package/dist/heart/daemon/daemon-health.js +141 -0
- package/dist/heart/daemon/daemon-runtime-sync.js +157 -12
- package/dist/heart/daemon/daemon-tombstone.js +236 -0
- package/dist/heart/daemon/daemon.js +751 -58
- package/dist/heart/daemon/doctor-types.js +8 -0
- package/dist/heart/daemon/doctor.js +401 -0
- package/dist/heart/daemon/health-monitor.js +79 -1
- package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
- package/dist/heart/daemon/hooks/bundle-meta.js +115 -1
- package/dist/heart/daemon/http-health-probe.js +80 -0
- package/dist/heart/daemon/inner-status.js +89 -0
- package/dist/heart/daemon/interactive-repair.js +69 -0
- package/dist/heart/daemon/launchd.js +46 -9
- package/dist/heart/daemon/log-tailer.js +82 -12
- package/dist/heart/daemon/logs-prune.js +105 -0
- package/dist/heart/daemon/message-router.js +17 -8
- package/dist/heart/daemon/os-cron-deps.js +134 -0
- package/dist/heart/daemon/ouro-bot-entry.js +1 -1
- package/dist/heart/daemon/process-manager.js +201 -0
- package/dist/heart/daemon/provider-discovery.js +105 -0
- package/dist/heart/daemon/pulse.js +463 -0
- package/dist/heart/daemon/run-hooks.js +2 -0
- package/dist/heart/daemon/runtime-logging.js +67 -16
- package/dist/heart/daemon/runtime-metadata.js +101 -0
- package/dist/heart/daemon/runtime-mode.js +67 -0
- package/dist/heart/daemon/safe-mode.js +161 -0
- package/dist/heart/daemon/sense-manager.js +72 -3
- package/dist/heart/daemon/session-id-resolver.js +131 -0
- package/dist/heart/daemon/skill-management-installer.js +94 -0
- package/dist/heart/daemon/socket-client.js +307 -0
- package/dist/heart/daemon/stale-bundle-prune.js +96 -0
- package/dist/heart/daemon/startup-tui.js +237 -0
- package/dist/heart/daemon/task-scheduler.js +3 -25
- package/dist/heart/daemon/thoughts.js +510 -0
- package/dist/heart/daemon/up-progress.js +135 -0
- package/dist/heart/delegation.js +62 -0
- package/dist/heart/habits/habit-migration.js +181 -0
- package/dist/heart/habits/habit-parser.js +140 -0
- package/dist/heart/habits/habit-scheduler.js +371 -0
- package/dist/heart/{daemon → hatch}/hatch-flow.js +32 -120
- package/dist/heart/{daemon → hatch}/hatch-specialist.js +3 -3
- package/dist/heart/{daemon → hatch}/specialist-prompt.js +10 -7
- package/dist/heart/{daemon → hatch}/specialist-tools.js +49 -3
- package/dist/heart/identity.js +154 -59
- package/dist/heart/kicks.js +2 -20
- package/dist/heart/mcp/mcp-server.js +653 -0
- package/dist/heart/migrate-config.js +127 -0
- package/dist/heart/model-capabilities.js +59 -0
- package/dist/heart/outlook/outlook-http-hooks.js +64 -0
- package/dist/heart/outlook/outlook-http-response.js +7 -0
- package/dist/heart/outlook/outlook-http-routes.js +232 -0
- package/dist/heart/outlook/outlook-http-static.js +99 -0
- package/dist/heart/outlook/outlook-http-transport.js +116 -0
- package/dist/heart/outlook/outlook-http.js +99 -0
- package/dist/heart/outlook/outlook-read.js +28 -0
- package/dist/heart/outlook/outlook-render.js +1032 -0
- package/dist/heart/outlook/outlook-types.js +27 -0
- package/dist/heart/outlook/outlook-view.js +194 -0
- package/dist/heart/outlook/readers/agent-machine.js +355 -0
- package/dist/heart/outlook/readers/continuity-readers.js +332 -0
- package/dist/heart/outlook/readers/runtime-readers.js +660 -0
- package/dist/heart/outlook/readers/sessions.js +231 -0
- package/dist/heart/outlook/readers/shared.js +111 -0
- package/dist/heart/progress-story.js +42 -0
- package/dist/heart/provider-failover.js +135 -0
- package/dist/heart/provider-models.js +81 -0
- package/dist/heart/provider-ping.js +162 -0
- package/dist/heart/providers/anthropic-token.js +163 -0
- package/dist/heart/providers/anthropic.js +169 -46
- package/dist/heart/providers/azure.js +98 -11
- package/dist/heart/providers/error-classification.js +63 -0
- package/dist/heart/providers/github-copilot.js +136 -0
- package/dist/heart/providers/minimax-vlm.js +189 -0
- package/dist/heart/providers/minimax.js +23 -5
- package/dist/heart/providers/openai-codex.js +33 -22
- package/dist/heart/session-activity.js +190 -0
- package/dist/heart/session-events.js +726 -0
- package/dist/heart/session-recall.js +162 -0
- package/dist/heart/start-of-turn-packet.js +341 -0
- package/dist/heart/streaming.js +36 -27
- package/dist/heart/sync.js +332 -0
- package/dist/heart/target-resolution.js +127 -0
- package/dist/heart/tempo.js +93 -0
- package/dist/heart/temporal-view.js +41 -0
- package/dist/heart/tool-activity-callbacks.js +36 -0
- package/dist/heart/tool-description.js +135 -0
- package/dist/heart/tool-friction.js +55 -0
- package/dist/heart/tool-loop.js +200 -0
- package/dist/heart/turn-context.js +358 -0
- package/dist/heart/turn-coordinator.js +28 -0
- package/dist/heart/{daemon → versioning}/ouro-bot-global-installer.js +1 -1
- package/dist/heart/{daemon → versioning}/ouro-bot-wrapper.js +1 -1
- package/dist/heart/{daemon → versioning}/ouro-path-installer.js +78 -35
- package/dist/heart/versioning/ouro-version-manager.js +295 -0
- package/dist/heart/{daemon → versioning}/staged-restart.js +40 -8
- package/dist/heart/{daemon → versioning}/update-checker.js +12 -2
- package/dist/heart/{daemon → versioning}/update-hooks.js +63 -59
- package/dist/mind/associative-recall.js +137 -66
- package/dist/mind/bundle-manifest.js +7 -1
- package/dist/mind/context.js +89 -93
- package/dist/mind/diary-integrity.js +60 -0
- package/dist/mind/{memory.js → diary.js} +84 -96
- package/dist/mind/embedding-provider.js +60 -0
- package/dist/mind/file-state.js +179 -0
- package/dist/mind/first-impressions.js +14 -1
- package/dist/mind/friends/channel.js +56 -0
- package/dist/mind/friends/group-context.js +144 -0
- package/dist/mind/friends/resolver.js +37 -0
- package/dist/mind/friends/store-file.js +58 -3
- package/dist/mind/friends/trust-explanation.js +74 -0
- package/dist/mind/friends/types.js +8 -0
- package/dist/mind/journal-index.js +161 -0
- package/dist/mind/obligation-steering.js +221 -0
- package/dist/mind/pending.js +74 -7
- package/dist/mind/prompt.js +949 -111
- package/dist/mind/provenance-trust.js +26 -0
- package/dist/mind/scrutiny.js +173 -0
- package/dist/mind/token-estimate.js +8 -12
- package/dist/nerves/cli-logging.js +7 -1
- package/dist/nerves/coverage/audit.js +1 -1
- package/dist/nerves/coverage/file-completeness.js +83 -5
- package/dist/nerves/coverage/run-artifacts.js +1 -1
- package/dist/nerves/event-buffer.js +111 -0
- package/dist/nerves/index.js +224 -4
- package/dist/nerves/observation.js +20 -0
- package/dist/nerves/redact.js +79 -0
- package/dist/nerves/runtime.js +5 -1
- package/dist/outlook-ui/assets/index-IuR4F6y6.js +61 -0
- package/dist/outlook-ui/assets/index-LwChZTgL.css +1 -0
- package/dist/outlook-ui/index.html +15 -0
- package/dist/repertoire/ado-client.js +15 -56
- package/dist/repertoire/ado-semantic.js +11 -10
- package/dist/repertoire/api-client.js +97 -0
- package/dist/repertoire/bitwarden-store.js +319 -0
- package/dist/repertoire/bundle-templates.js +72 -0
- package/dist/repertoire/bw-installer.js +79 -0
- package/dist/repertoire/coding/codex-jsonl.js +64 -0
- package/dist/repertoire/coding/context-pack.js +330 -0
- package/dist/repertoire/coding/feedback.js +197 -30
- package/dist/repertoire/coding/manager.js +158 -9
- package/dist/repertoire/coding/spawner.js +55 -9
- package/dist/repertoire/coding/tools.js +170 -7
- package/dist/repertoire/commerce-errors.js +109 -0
- package/dist/repertoire/commerce-self-test.js +156 -0
- package/dist/repertoire/credential-access.js +527 -0
- package/dist/repertoire/duffel-client.js +185 -0
- package/dist/repertoire/github-client.js +14 -55
- package/dist/repertoire/graph-client.js +11 -52
- package/dist/repertoire/guardrails.js +375 -0
- package/dist/repertoire/mcp-client.js +255 -0
- package/dist/repertoire/mcp-manager.js +305 -0
- package/dist/repertoire/mcp-tools.js +63 -0
- package/dist/repertoire/shell-sessions.js +133 -0
- package/dist/repertoire/skills.js +14 -23
- package/dist/repertoire/stripe-client.js +131 -0
- package/dist/repertoire/tasks/board.js +43 -5
- package/dist/repertoire/tasks/fix.js +182 -0
- package/dist/repertoire/tasks/index.js +28 -10
- package/dist/repertoire/tasks/lifecycle.js +2 -2
- package/dist/repertoire/tasks/parser.js +3 -2
- package/dist/repertoire/tasks/scanner.js +194 -37
- package/dist/repertoire/tasks/transitions.js +16 -79
- package/dist/repertoire/tool-results.js +29 -0
- package/dist/repertoire/tools-attachments.js +316 -0
- package/dist/repertoire/tools-base.js +45 -771
- package/dist/repertoire/tools-bluebubbles.js +1 -0
- package/dist/repertoire/tools-bridge.js +141 -0
- package/dist/repertoire/tools-bundle.js +984 -0
- package/dist/repertoire/tools-config.js +185 -0
- package/dist/repertoire/tools-continuity.js +248 -0
- package/dist/repertoire/tools-credential.js +182 -0
- package/dist/repertoire/tools-files.js +342 -0
- package/dist/repertoire/tools-flight.js +224 -0
- package/dist/repertoire/tools-flow.js +105 -0
- package/dist/repertoire/tools-github.js +1 -7
- package/dist/repertoire/tools-memory.js +376 -0
- package/dist/repertoire/tools-session.js +739 -0
- package/dist/repertoire/tools-shell.js +120 -0
- package/dist/repertoire/tools-stripe.js +180 -0
- package/dist/repertoire/tools-surface.js +243 -0
- package/dist/repertoire/tools-teams.js +12 -62
- package/dist/repertoire/tools-travel.js +125 -0
- package/dist/repertoire/tools-user-profile.js +144 -0
- package/dist/repertoire/tools-vault.js +110 -0
- package/dist/repertoire/tools.js +144 -138
- package/dist/repertoire/travel-api-client.js +360 -0
- package/dist/repertoire/user-profile.js +118 -0
- package/dist/repertoire/vault-setup.js +241 -0
- package/dist/scripts/claude-code-hook.js +41 -0
- package/dist/scripts/claude-code-stop-hook.js +47 -0
- package/dist/senses/attention-queue.js +116 -0
- package/dist/senses/bluebubbles/attachment-cache.js +53 -0
- package/dist/senses/bluebubbles/attachment-download.js +137 -0
- package/dist/senses/{bluebubbles-client.js → bluebubbles/client.js} +225 -9
- package/dist/senses/bluebubbles/entry.js +13 -0
- package/dist/senses/bluebubbles/inbound-log.js +113 -0
- package/dist/senses/bluebubbles/index.js +1590 -0
- package/dist/senses/{bluebubbles-media.js → bluebubbles/media.js} +121 -70
- package/dist/senses/{bluebubbles-model.js → bluebubbles/model.js} +43 -12
- package/dist/senses/{bluebubbles-mutation-log.js → bluebubbles/mutation-log.js} +46 -6
- package/dist/senses/bluebubbles/replay.js +129 -0
- package/dist/senses/bluebubbles/runtime-state.js +109 -0
- package/dist/senses/{bluebubbles-session-cleanup.js → bluebubbles/session-cleanup.js} +1 -1
- package/dist/senses/cli/bracketed-paste.js +82 -0
- package/dist/senses/cli/image-paste.js +287 -0
- package/dist/senses/cli/image-ref-navigation.js +75 -0
- package/dist/senses/cli/ink-app.js +156 -0
- package/dist/senses/cli/inline-diff.js +64 -0
- package/dist/senses/cli/input-keys.js +174 -0
- package/dist/senses/cli/kill-ring.js +86 -0
- package/dist/senses/cli/message-list.js +51 -0
- package/dist/senses/cli/ouro-tui.js +605 -0
- package/dist/senses/cli/spinner-imperative.js +135 -0
- package/dist/senses/cli/spinner.js +101 -0
- package/dist/senses/cli/status-line.js +60 -0
- package/dist/senses/cli/streaming-markdown.js +526 -0
- package/dist/senses/cli/tool-display.js +83 -0
- package/dist/senses/cli/tool-render.js +85 -0
- package/dist/senses/cli/tui-store.js +240 -0
- package/dist/senses/cli/virtual-list.js +35 -0
- package/dist/senses/cli-entry.js +1 -1
- package/dist/senses/cli-layout.js +187 -0
- package/dist/senses/cli.js +595 -246
- package/dist/senses/commands.js +65 -1
- package/dist/senses/continuity.js +94 -0
- package/dist/senses/habit-turn-message.js +108 -0
- package/dist/senses/inner-dialog-worker.js +112 -19
- package/dist/senses/inner-dialog.js +633 -86
- package/dist/senses/pipeline.js +567 -0
- package/dist/senses/shared-turn.js +199 -0
- package/dist/senses/surface-tool.js +68 -0
- package/dist/senses/teams.js +665 -160
- package/dist/senses/trust-gate.js +112 -2
- package/package.json +28 -7
- package/skills/agent-commerce.md +106 -0
- package/skills/browser-navigation.md +110 -0
- package/skills/commerce-setup-guide.md +116 -0
- package/skills/commerce-setup.md +84 -0
- package/skills/configure-dev-tools.md +81 -0
- package/skills/travel-planning.md +138 -0
- package/dist/heart/daemon/subagent-installer.js +0 -134
- package/dist/senses/bluebubbles-entry.js +0 -11
- package/dist/senses/bluebubbles.js +0 -544
- package/dist/senses/debug-activity.js +0 -108
- package/subagents/README.md +0 -73
- package/subagents/work-doer.md +0 -235
- package/subagents/work-merger.md +0 -618
- package/subagents/work-planner.md +0 -382
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/basilisk.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jafar.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jormungandr.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/kaa.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/medusa.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/monty.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/nagini.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/ouroboros.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/python.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/quetzalcoatl.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/sir-hiss.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-serpent.md +0 -0
- /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-snake.md +0 -0
- /package/dist/heart/{daemon → hatch}/hatch-animation.js +0 -0
- /package/dist/heart/{daemon → hatch}/specialist-orchestrator.js +0 -0
- /package/dist/heart/{daemon → versioning}/ouro-uti.js +0 -0
- /package/dist/heart/{daemon → versioning}/wrapper-publish-guard.js +0 -0
|
@@ -3,12 +3,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.classifyOpenAICodexError = classifyOpenAICodexError;
|
|
6
7
|
exports.createOpenAICodexProviderRuntime = createOpenAICodexProviderRuntime;
|
|
7
8
|
const openai_1 = __importDefault(require("openai"));
|
|
8
9
|
const config_1 = require("../config");
|
|
9
10
|
const identity_1 = require("../identity");
|
|
10
11
|
const runtime_1 = require("../../nerves/runtime");
|
|
11
12
|
const streaming_1 = require("../streaming");
|
|
13
|
+
const model_capabilities_1 = require("../model-capabilities");
|
|
14
|
+
const error_classification_1 = require("./error-classification");
|
|
12
15
|
const OPENAI_CODEX_AUTH_FAILURE_MARKERS = [
|
|
13
16
|
"authentication failed",
|
|
14
17
|
"unauthorized",
|
|
@@ -27,11 +30,11 @@ function getOpenAICodexOAuthInstructions() {
|
|
|
27
30
|
const agentName = getOpenAICodexAgentNameForGuidance();
|
|
28
31
|
return [
|
|
29
32
|
"Fix:",
|
|
30
|
-
` 1. Run \`
|
|
31
|
-
" (or run `codex login` and set the OAuth token manually)",
|
|
33
|
+
` 1. Run \`ouro auth --agent ${agentName}\``,
|
|
32
34
|
` 2. Open ${getOpenAICodexSecretsPathForGuidance()}`,
|
|
33
35
|
" 3. Confirm providers.openai-codex.oauthAccessToken is set",
|
|
34
36
|
" 4. This provider uses chatgpt.com/backend-api/codex/responses (not api.openai.com/responses).",
|
|
37
|
+
" 5. After reauth, retry the failed ouro command or reconnect this session.",
|
|
35
38
|
].join("\n");
|
|
36
39
|
}
|
|
37
40
|
function getOpenAICodexReauthGuidance(reason) {
|
|
@@ -41,22 +44,19 @@ function getOpenAICodexReauthGuidance(reason) {
|
|
|
41
44
|
getOpenAICodexOAuthInstructions(),
|
|
42
45
|
].join("\n");
|
|
43
46
|
}
|
|
47
|
+
function classifyOpenAICodexError(error) {
|
|
48
|
+
return (0, error_classification_1.classifyHttpError)(error, {
|
|
49
|
+
isAuthFailure: isOpenAICodexAuthFailure,
|
|
50
|
+
isUsageLimit: (e) => {
|
|
51
|
+
const lower = e.message.toLowerCase();
|
|
52
|
+
return lower.includes("usage") || lower.includes("quota") || lower.includes("exceeded your");
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
}
|
|
44
56
|
function isOpenAICodexAuthFailure(error) {
|
|
45
|
-
if (!(error instanceof Error))
|
|
46
|
-
return false;
|
|
47
|
-
const status = error.status;
|
|
48
|
-
if (status === 401 || status === 403)
|
|
49
|
-
return true;
|
|
50
57
|
const lower = error.message.toLowerCase();
|
|
51
58
|
return OPENAI_CODEX_AUTH_FAILURE_MARKERS.some((marker) => lower.includes(marker));
|
|
52
59
|
}
|
|
53
|
-
function withOpenAICodexAuthGuidance(error) {
|
|
54
|
-
const base = error instanceof Error ? error.message : String(error);
|
|
55
|
-
if (isOpenAICodexAuthFailure(error)) {
|
|
56
|
-
return new Error(getOpenAICodexReauthGuidance(`OpenAI Codex authentication failed (${base}).`));
|
|
57
|
-
}
|
|
58
|
-
return error instanceof Error ? error : new Error(String(error));
|
|
59
|
-
}
|
|
60
60
|
function decodeJwtPayload(token) {
|
|
61
61
|
const parts = token.split(".");
|
|
62
62
|
if (parts.length < 2)
|
|
@@ -87,7 +87,7 @@ function getChatGPTAccountIdFromToken(token) {
|
|
|
87
87
|
return "";
|
|
88
88
|
return accountId.trim();
|
|
89
89
|
}
|
|
90
|
-
function createOpenAICodexProviderRuntime() {
|
|
90
|
+
function createOpenAICodexProviderRuntime(model) {
|
|
91
91
|
(0, runtime_1.emitNervesEvent)({
|
|
92
92
|
component: "engine",
|
|
93
93
|
event: "engine.provider_init",
|
|
@@ -95,8 +95,8 @@ function createOpenAICodexProviderRuntime() {
|
|
|
95
95
|
meta: { provider: "openai-codex" },
|
|
96
96
|
});
|
|
97
97
|
const codexConfig = (0, config_1.getOpenAICodexConfig)();
|
|
98
|
-
if (!
|
|
99
|
-
throw new Error(getOpenAICodexReauthGuidance("provider 'openai-codex' is selected in agent.json but providers.openai-codex.
|
|
98
|
+
if (!codexConfig.oauthAccessToken) {
|
|
99
|
+
throw new Error(getOpenAICodexReauthGuidance("provider 'openai-codex' is selected in agent.json but providers.openai-codex.oauthAccessToken is missing in secrets.json."));
|
|
100
100
|
}
|
|
101
101
|
const token = codexConfig.oauthAccessToken.trim();
|
|
102
102
|
if (!token) {
|
|
@@ -106,6 +106,12 @@ function createOpenAICodexProviderRuntime() {
|
|
|
106
106
|
if (!chatgptAccountId) {
|
|
107
107
|
throw new Error(getOpenAICodexReauthGuidance("OpenAI Codex OAuth access token is missing a chatgpt_account_id claim required for chatgpt.com/backend-api/codex."));
|
|
108
108
|
}
|
|
109
|
+
const modelCaps = (0, model_capabilities_1.getModelCapabilities)(model);
|
|
110
|
+
const capabilities = new Set();
|
|
111
|
+
if (modelCaps.reasoningEffort)
|
|
112
|
+
capabilities.add("reasoning-effort");
|
|
113
|
+
if (modelCaps.phase)
|
|
114
|
+
capabilities.add("phase-annotation");
|
|
109
115
|
const client = new openai_1.default({
|
|
110
116
|
apiKey: token,
|
|
111
117
|
baseURL: OPENAI_CODEX_BACKEND_BASE_URL,
|
|
@@ -114,15 +120,16 @@ function createOpenAICodexProviderRuntime() {
|
|
|
114
120
|
"OpenAI-Beta": "responses=experimental",
|
|
115
121
|
originator: "ouroboros",
|
|
116
122
|
},
|
|
117
|
-
timeout: 30000,
|
|
118
123
|
maxRetries: 0,
|
|
119
124
|
});
|
|
120
125
|
let nativeInput = null;
|
|
121
126
|
let nativeInstructions = "";
|
|
122
127
|
return {
|
|
123
128
|
id: "openai-codex",
|
|
124
|
-
model
|
|
129
|
+
model,
|
|
125
130
|
client,
|
|
131
|
+
capabilities,
|
|
132
|
+
supportedReasoningEfforts: modelCaps.reasoningEffort,
|
|
126
133
|
resetTurnState(messages) {
|
|
127
134
|
const { instructions, input } = (0, streaming_1.toResponsesInput)(messages);
|
|
128
135
|
nativeInput = input;
|
|
@@ -141,7 +148,7 @@ function createOpenAICodexProviderRuntime() {
|
|
|
141
148
|
input: nativeInput,
|
|
142
149
|
instructions: nativeInstructions,
|
|
143
150
|
tools: (0, streaming_1.toResponsesTools)(request.activeTools),
|
|
144
|
-
reasoning: { effort: "medium", summary: "detailed" },
|
|
151
|
+
reasoning: { effort: request.reasoningEffort ?? "medium", summary: "detailed" },
|
|
145
152
|
stream: true,
|
|
146
153
|
store: false,
|
|
147
154
|
include: ["reasoning.encrypted_content"],
|
|
@@ -149,14 +156,18 @@ function createOpenAICodexProviderRuntime() {
|
|
|
149
156
|
if (request.toolChoiceRequired)
|
|
150
157
|
params.tool_choice = "required";
|
|
151
158
|
try {
|
|
152
|
-
const result = await (0, streaming_1.streamResponsesApi)(this.client, params, request.callbacks, request.signal);
|
|
159
|
+
const result = await (0, streaming_1.streamResponsesApi)(this.client, params, request.callbacks, request.signal, request.eagerSettleStreaming);
|
|
153
160
|
for (const item of result.outputItems)
|
|
154
161
|
nativeInput.push(item);
|
|
155
162
|
return result;
|
|
156
163
|
}
|
|
157
164
|
catch (error) {
|
|
158
|
-
throw
|
|
165
|
+
throw error instanceof Error ? error : new Error(String(error));
|
|
159
166
|
}
|
|
160
167
|
},
|
|
168
|
+
/* v8 ignore next 3 -- delegation: classification logic tested via classifyOpenAICodexError @preserve */
|
|
169
|
+
classifyError(error) {
|
|
170
|
+
return classifyOpenAICodexError(error);
|
|
171
|
+
},
|
|
161
172
|
};
|
|
162
173
|
}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.listSessionActivity = listSessionActivity;
|
|
37
|
+
exports.findFreshestFriendSession = findFreshestFriendSession;
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
const runtime_1 = require("../nerves/runtime");
|
|
41
|
+
const config_1 = require("./config");
|
|
42
|
+
const session_events_1 = require("./session-events");
|
|
43
|
+
const DEFAULT_ACTIVE_THRESHOLD_MS = 24 * 60 * 60 * 1000;
|
|
44
|
+
function activityPriority(source) {
|
|
45
|
+
return source === "friend-facing" ? 0 : 1;
|
|
46
|
+
}
|
|
47
|
+
function resolveFriendName(friendId, friendsDir, agentName) {
|
|
48
|
+
if (friendId === "self")
|
|
49
|
+
return agentName;
|
|
50
|
+
try {
|
|
51
|
+
const raw = fs.readFileSync(path.join(friendsDir, `${friendId}.json`), "utf-8");
|
|
52
|
+
const parsed = JSON.parse(raw);
|
|
53
|
+
return parsed.name ?? friendId;
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return friendId;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function parseFriendActivity(sessionPath) {
|
|
60
|
+
let mtimeMs;
|
|
61
|
+
try {
|
|
62
|
+
mtimeMs = fs.statSync(sessionPath).mtimeMs;
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
const envelope = (0, session_events_1.loadSessionEnvelopeFile)(sessionPath);
|
|
68
|
+
const chronology = envelope ? (0, session_events_1.deriveSessionChronology)(envelope.events) : null;
|
|
69
|
+
const explicit = envelope?.state.lastFriendActivityAt;
|
|
70
|
+
if (typeof explicit === "string") {
|
|
71
|
+
const parsedMs = Date.parse(explicit);
|
|
72
|
+
if (Number.isFinite(parsedMs)) {
|
|
73
|
+
return {
|
|
74
|
+
lastActivityMs: parsedMs,
|
|
75
|
+
lastActivityAt: new Date(parsedMs).toISOString(),
|
|
76
|
+
activitySource: "friend-facing",
|
|
77
|
+
lastInboundAt: chronology?.lastInboundAt ?? null,
|
|
78
|
+
lastOutboundAt: chronology?.lastOutboundAt ?? null,
|
|
79
|
+
unansweredInboundCount: chronology?.unansweredInboundCount ?? 0,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (chronology?.lastInboundAt) {
|
|
84
|
+
const parsedMs = Date.parse(chronology.lastInboundAt);
|
|
85
|
+
if (Number.isFinite(parsedMs)) {
|
|
86
|
+
return {
|
|
87
|
+
lastActivityMs: parsedMs,
|
|
88
|
+
lastActivityAt: new Date(parsedMs).toISOString(),
|
|
89
|
+
activitySource: "friend-facing",
|
|
90
|
+
lastInboundAt: chronology.lastInboundAt,
|
|
91
|
+
lastOutboundAt: chronology.lastOutboundAt,
|
|
92
|
+
unansweredInboundCount: chronology.unansweredInboundCount,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return {
|
|
97
|
+
lastActivityMs: mtimeMs,
|
|
98
|
+
lastActivityAt: new Date(mtimeMs).toISOString(),
|
|
99
|
+
activitySource: "mtime-fallback",
|
|
100
|
+
lastInboundAt: chronology?.lastInboundAt ?? null,
|
|
101
|
+
lastOutboundAt: chronology?.lastOutboundAt ?? null,
|
|
102
|
+
unansweredInboundCount: chronology?.unansweredInboundCount ?? 0,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
function listSessionActivity(query) {
|
|
106
|
+
const { sessionsDir, friendsDir, agentName, activeThresholdMs = DEFAULT_ACTIVE_THRESHOLD_MS, nowMs = Date.now(), currentSession = null, } = query;
|
|
107
|
+
(0, runtime_1.emitNervesEvent)({
|
|
108
|
+
component: "daemon",
|
|
109
|
+
event: "daemon.session_activity_scan",
|
|
110
|
+
message: "scanning session activity",
|
|
111
|
+
meta: {
|
|
112
|
+
sessionsDir,
|
|
113
|
+
currentSession: currentSession ? `${currentSession.friendId}/${currentSession.channel}/${currentSession.key}` : null,
|
|
114
|
+
},
|
|
115
|
+
});
|
|
116
|
+
if (!fs.existsSync(sessionsDir))
|
|
117
|
+
return [];
|
|
118
|
+
const results = [];
|
|
119
|
+
let friendDirs;
|
|
120
|
+
try {
|
|
121
|
+
friendDirs = fs.readdirSync(sessionsDir);
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
return [];
|
|
125
|
+
}
|
|
126
|
+
for (const friendId of friendDirs) {
|
|
127
|
+
const friendPath = path.join(sessionsDir, friendId);
|
|
128
|
+
let channels;
|
|
129
|
+
try {
|
|
130
|
+
channels = fs.readdirSync(friendPath);
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
for (const channel of channels) {
|
|
136
|
+
const channelPath = path.join(friendPath, channel);
|
|
137
|
+
let keys;
|
|
138
|
+
try {
|
|
139
|
+
keys = fs.readdirSync(channelPath);
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
for (const keyFile of keys) {
|
|
145
|
+
if (!keyFile.endsWith(".json"))
|
|
146
|
+
continue;
|
|
147
|
+
const key = keyFile.replace(/\.json$/, "");
|
|
148
|
+
// Compare with sanitizeKey on both sides — session keys from the filesystem
|
|
149
|
+
// are already sanitized (colons → underscores), but the canonical key from
|
|
150
|
+
// the pipeline may still have colons (e.g. "chat:any" vs "chat_any").
|
|
151
|
+
if (currentSession && friendId === currentSession.friendId && channel === currentSession.channel && (0, config_1.sanitizeKey)(key) === (0, config_1.sanitizeKey)(currentSession.key)) {
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
const sessionPath = path.join(channelPath, keyFile);
|
|
155
|
+
const activity = parseFriendActivity(sessionPath);
|
|
156
|
+
if (!activity)
|
|
157
|
+
continue;
|
|
158
|
+
if (nowMs - activity.lastActivityMs > activeThresholdMs)
|
|
159
|
+
continue;
|
|
160
|
+
results.push({
|
|
161
|
+
friendId,
|
|
162
|
+
friendName: resolveFriendName(friendId, friendsDir, agentName),
|
|
163
|
+
channel,
|
|
164
|
+
key,
|
|
165
|
+
sessionPath,
|
|
166
|
+
lastActivityAt: activity.lastActivityAt,
|
|
167
|
+
lastActivityMs: activity.lastActivityMs,
|
|
168
|
+
activitySource: activity.activitySource,
|
|
169
|
+
lastInboundAt: activity.lastInboundAt,
|
|
170
|
+
lastOutboundAt: activity.lastOutboundAt,
|
|
171
|
+
unansweredInboundCount: activity.unansweredInboundCount,
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
return results.sort((a, b) => {
|
|
177
|
+
const sourceDiff = activityPriority(a.activitySource) - activityPriority(b.activitySource);
|
|
178
|
+
if (sourceDiff !== 0)
|
|
179
|
+
return sourceDiff;
|
|
180
|
+
return b.lastActivityMs - a.lastActivityMs;
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
function findFreshestFriendSession(query) {
|
|
184
|
+
const { activeOnly = false, activeThresholdMs = DEFAULT_ACTIVE_THRESHOLD_MS, nowMs, ...rest } = query;
|
|
185
|
+
const currentSession = rest.currentSession ?? null;
|
|
186
|
+
const all = activeOnly
|
|
187
|
+
? listSessionActivity({ ...rest, activeThresholdMs, nowMs, currentSession })
|
|
188
|
+
: listSessionActivity({ ...rest, activeThresholdMs: Number.MAX_SAFE_INTEGER, nowMs, currentSession });
|
|
189
|
+
return all.find((entry) => entry.friendId === query.friendId) ?? null;
|
|
190
|
+
}
|