@gajae-code/coding-agent 0.13.2 → 0.14.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/CHANGELOG.md +215 -8
- package/README.md +2 -0
- package/bin/gajaessi.js +4 -0
- package/dist/types/async/job-manager.d.ts +55 -2
- package/dist/types/async/support.d.ts +14 -0
- package/dist/types/capability/mcp.d.ts +6 -0
- package/dist/types/capability/types.d.ts +6 -0
- package/dist/types/cli/accounts-cli.d.ts +19 -0
- package/dist/types/cli/args.d.ts +3 -0
- package/dist/types/cli/config-cli.d.ts +6 -0
- package/dist/types/cli/crash-cli.d.ts +10 -0
- package/dist/types/cli/customize-doctor.d.ts +145 -0
- package/dist/types/cli/daemon-cli.d.ts +3 -1
- package/dist/types/cli/mcp-cli.d.ts +11 -0
- package/dist/types/cli/notify-cli.d.ts +1 -1
- package/dist/types/cli/root-flags.d.ts +12 -0
- package/dist/types/cli/setup-cli.d.ts +3 -1
- package/dist/types/cli/skills-cli.d.ts +2 -1
- package/dist/types/cli/update-cli.d.ts +19 -1
- package/dist/types/cli.d.ts +6 -0
- package/dist/types/commands/accounts.d.ts +40 -0
- package/dist/types/commands/crash.d.ts +24 -0
- package/dist/types/commands/customize.d.ts +22 -0
- package/dist/types/commands/daemon.d.ts +1 -1
- package/dist/types/commands/launch.d.ts +6 -0
- package/dist/types/commands/setup.d.ts +6 -0
- package/dist/types/commands/skills.d.ts +6 -1
- package/dist/types/commands/update.d.ts +7 -0
- package/dist/types/config/atomic-yaml-patch-worker.d.ts +25 -0
- package/dist/types/config/atomic-yaml-patch.d.ts +62 -2
- package/dist/types/config/config-schema-version.d.ts +10 -0
- package/dist/types/config/file-lock.d.ts +18 -0
- package/dist/types/config/model-profile-activation.d.ts +3 -1
- package/dist/types/config/model-registry.d.ts +10 -1
- package/dist/types/config/models-config-schema.d.ts +2 -0
- package/dist/types/config/settings-schema.d.ts +73 -9
- package/dist/types/config/settings.d.ts +63 -0
- package/dist/types/config/skill-settings-defaults.d.ts +26 -0
- package/dist/types/config/task-delegation.d.ts +39 -0
- package/dist/types/config/update-channel.d.ts +10 -0
- package/dist/types/coordinator-mcp/server.d.ts +5 -1
- package/dist/types/crash/index-store.d.ts +87 -0
- package/dist/types/crash/nudge.d.ts +50 -0
- package/dist/types/crash/record-loader.d.ts +17 -0
- package/dist/types/crash/report.d.ts +134 -0
- package/dist/types/crash/sanitize.d.ts +25 -0
- package/dist/types/cursor.d.ts +13 -2
- package/dist/types/customization/import.d.ts +37 -0
- package/dist/types/customization/index.d.ts +4 -0
- package/dist/types/customization/inventory.d.ts +25 -0
- package/dist/types/customization/mutations.d.ts +32 -0
- package/dist/types/customization/types.d.ts +115 -0
- package/dist/types/daemon/control-types.d.ts +8 -1
- package/dist/types/daemon/operator-contract.d.ts +4 -4
- package/dist/types/discovery/claude.d.ts +39 -1
- package/dist/types/discovery/codex.d.ts +39 -1
- package/dist/types/discovery/index.d.ts +2 -0
- package/dist/types/discovery/mcp-compat.d.ts +30 -0
- package/dist/types/edit/renderer.d.ts +23 -0
- package/dist/types/extensibility/extensions/runner.d.ts +3 -0
- package/dist/types/extensibility/extensions/types.d.ts +21 -4
- package/dist/types/extensibility/gjc-plugins/observability.d.ts +6 -1
- package/dist/types/extensibility/gjc-plugins/registry.d.ts +8 -1
- package/dist/types/extensibility/hooks/loader.d.ts +19 -5
- package/dist/types/extensibility/runtime-skill-discovery.d.ts +22 -1
- package/dist/types/extensibility/skill-management.d.ts +107 -0
- package/dist/types/gjc-runtime/deep-interview-runtime.d.ts +3 -1
- package/dist/types/gjc-runtime/launch-worktree.d.ts +8 -0
- package/dist/types/gjc-runtime/linux-proc.d.ts +3 -0
- package/dist/types/gjc-runtime/ralplan-runtime.d.ts +10 -6
- package/dist/types/gjc-runtime/session-state-lock.d.ts +104 -0
- package/dist/types/gjc-runtime/session-state-sidecar.d.ts +120 -2
- package/dist/types/gjc-runtime/state-writer.d.ts +10 -1
- package/dist/types/gjc-runtime/ultragoal-guard.d.ts +4 -2
- package/dist/types/gjc-runtime/ultragoal-runtime.d.ts +8 -6
- package/dist/types/gjc-runtime/workflow-settings.d.ts +109 -0
- package/dist/types/hooks/events.d.ts +60 -0
- package/dist/types/hooks/normalize.d.ts +83 -0
- package/dist/types/hooks/skill-state.d.ts +9 -2
- package/dist/types/main.d.ts +2 -1
- package/dist/types/modes/acp/abort-scope.d.ts +13 -0
- package/dist/types/modes/acp/acp-agent.d.ts +7 -4
- package/dist/types/modes/components/customization/customization-dashboard.d.ts +44 -0
- package/dist/types/modes/components/customization/import-wizard.d.ts +21 -0
- package/dist/types/modes/components/customization/index.d.ts +1 -0
- package/dist/types/modes/components/dynamic-theme-text.d.ts +9 -0
- package/dist/types/modes/components/gajae-pet-widget.d.ts +6 -28
- package/dist/types/modes/components/irc-sidebar.d.ts +1 -0
- package/dist/types/modes/components/iterm-pet-transport.d.ts +122 -0
- package/dist/types/modes/components/oauth-selector.d.ts +10 -4
- package/dist/types/modes/components/pet-capability.d.ts +7 -21
- package/dist/types/modes/components/settings-selector.d.ts +5 -0
- package/dist/types/modes/components/status-line/gh.d.ts +6 -2
- package/dist/types/modes/controllers/extension-ui-controller.d.ts +1 -1
- package/dist/types/modes/controllers/selector-controller.d.ts +7 -8
- package/dist/types/modes/controllers/stt-controller.d.ts +1 -1
- package/dist/types/modes/interactive-mode.d.ts +1 -0
- package/dist/types/modes/theme/defaults/index.d.ts +118 -0
- package/dist/types/modes/types.d.ts +1 -0
- package/dist/types/modes/utils/injected-user-submission.d.ts +10 -0
- package/dist/types/runtime-mcp/config.d.ts +9 -0
- package/dist/types/runtime-mcp/manager.d.ts +26 -1
- package/dist/types/runtime-mcp/oauth-discovery.d.ts +4 -0
- package/dist/types/runtime-mcp/oauth-flow.d.ts +24 -1
- package/dist/types/runtime-mcp/pool-key.d.ts +2 -0
- package/dist/types/runtime-mcp/protocol.d.ts +278 -0
- package/dist/types/runtime-mcp/scope-config.d.ts +29 -0
- package/dist/types/runtime-mcp/tool-bridge.d.ts +15 -13
- package/dist/types/runtime-mcp/transports/http.d.ts +9 -0
- package/dist/types/runtime-mcp/types.d.ts +102 -10
- package/dist/types/sdk/acp/adapter.d.ts +26 -5
- package/dist/types/sdk/broker/broker.d.ts +3 -55
- package/dist/types/sdk/broker/lifecycle.d.ts +18 -12
- package/dist/types/sdk/broker/session-index.d.ts +14 -5
- package/dist/types/sdk/broker/startup-failure.d.ts +16 -1
- package/dist/types/sdk/bus/chat-daemon-control.d.ts +51 -1
- package/dist/types/sdk/bus/chat-daemon-runtime.d.ts +4 -41
- package/dist/types/sdk/bus/config.d.ts +11 -0
- package/dist/types/sdk/bus/conversation-store.d.ts +0 -1
- package/dist/types/sdk/bus/daemon-paths.d.ts +6 -0
- package/dist/types/sdk/bus/discord-conversation.d.ts +2 -0
- package/dist/types/sdk/bus/discord-daemon.d.ts +17 -12
- package/dist/types/sdk/bus/existing-thread-readiness.d.ts +4 -34
- package/dist/types/sdk/bus/inbound-reaction-ordering.d.ts +61 -0
- package/dist/types/sdk/bus/index.d.ts +85 -99
- package/dist/types/sdk/bus/kind-aware-reconciliation.d.ts +29 -7
- package/dist/types/sdk/bus/managed-daemon.d.ts +2 -32
- package/dist/types/sdk/bus/notification-service.d.ts +52 -0
- package/dist/types/sdk/bus/operator-runtime.d.ts +1 -1
- package/dist/types/sdk/bus/prompt-reconciliation.d.ts +16 -5
- package/dist/types/sdk/bus/reconciliation-store.d.ts +113 -5
- package/dist/types/sdk/bus/session-control.d.ts +25 -1
- package/dist/types/sdk/bus/slack-conversation.d.ts +4 -0
- package/dist/types/sdk/bus/slack-daemon.d.ts +9 -17
- package/dist/types/sdk/bus/slack-live-provider.d.ts +3 -1
- package/dist/types/sdk/bus/slack-provider.d.ts +4 -0
- package/dist/types/sdk/bus/slack-thread-binding.d.ts +6 -40
- package/dist/types/sdk/bus/telegram-adoption-intent.d.ts +30 -104
- package/dist/types/sdk/bus/telegram-daemon-cli.d.ts +10 -0
- package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +262 -19
- package/dist/types/sdk/bus/telegram-daemon-orphan-reap.d.ts +125 -0
- package/dist/types/sdk/bus/telegram-daemon-owner-registry.d.ts +22 -0
- package/dist/types/sdk/bus/telegram-daemon.d.ts +119 -310
- package/dist/types/sdk/bus/telegram-reference.d.ts +1 -47
- package/dist/types/sdk/bus/threaded-render.d.ts +1 -0
- package/dist/types/sdk/bus/topic-registry.d.ts +33 -17
- package/dist/types/sdk/cli/rows.d.ts +2 -11
- package/dist/types/sdk/cli/session-cli.d.ts +15 -25
- package/dist/types/sdk/client/client.d.ts +97 -1
- package/dist/types/sdk/host/control/dispatch.d.ts +0 -7
- package/dist/types/sdk/host/control/index.d.ts +1 -1
- package/dist/types/sdk/host/control/operations.d.ts +18 -5
- package/dist/types/sdk/host/control/runtime-gate.d.ts +19 -0
- package/dist/types/sdk/host/host.d.ts +15 -1
- package/dist/types/sdk/host/query/handlers.d.ts +5 -0
- package/dist/types/sdk/host/reverse-leases.d.ts +1 -1
- package/dist/types/sdk/host/session-runtime.d.ts +127 -7
- package/dist/types/sdk/host/types.d.ts +1 -1
- package/dist/types/sdk/host/websocket-transport.d.ts +1 -1
- package/dist/types/sdk/index.d.ts +2 -1
- package/dist/types/sdk/lifecycle/broker-client.d.ts +8 -0
- package/dist/types/sdk/lifecycle/client.d.ts +59 -0
- package/dist/types/sdk/lifecycle/index.d.ts +3 -0
- package/dist/types/sdk/lifecycle/service.d.ts +232 -0
- package/dist/types/sdk/mcp/server.d.ts +9 -6
- package/dist/types/sdk/prompt-deadline-lease.d.ts +43 -0
- package/dist/types/sdk/prompt-deadline-manager.d.ts +28 -0
- package/dist/types/sdk/prompt-status.d.ts +10 -3
- package/dist/types/sdk/protocol/operation-registry.d.ts +5 -0
- package/dist/types/sdk/receipt-state.d.ts +17 -0
- package/dist/types/sdk/reconciliation-extensions.d.ts +2 -0
- package/dist/types/sdk/router/index.d.ts +1 -0
- package/dist/types/sdk/router/session-router.d.ts +152 -0
- package/dist/types/sdk/session-list.d.ts +22 -0
- package/dist/types/sdk/session-reconnect.d.ts +43 -1
- package/dist/types/sdk/session.d.ts +34 -1
- package/dist/types/sdk/transport/serve-cli.d.ts +1 -4
- package/dist/types/session/account-inventory.d.ts +86 -0
- package/dist/types/session/agent-session.d.ts +145 -6
- package/dist/types/session/agent-storage.d.ts +10 -0
- package/dist/types/session/coordinator-tool-label.d.ts +28 -0
- package/dist/types/session/internal/managed-session-storage.d.ts +23 -4
- package/dist/types/session/messages.d.ts +1 -1
- package/dist/types/session/secure-token-file.d.ts +3 -0
- package/dist/types/session/session-manager.d.ts +47 -1
- package/dist/types/session/startup-auth-config.d.ts +44 -0
- package/dist/types/session/terminal-abort.d.ts +378 -0
- package/dist/types/session/yield-queue.d.ts +7 -0
- package/dist/types/session-import/claude.d.ts +26 -0
- package/dist/types/session-import/codex.d.ts +88 -0
- package/dist/types/session-import/command.d.ts +35 -0
- package/dist/types/session-import/detect.d.ts +22 -0
- package/dist/types/session-import/index.d.ts +7 -0
- package/dist/types/session-import/provider-codex.d.ts +22 -0
- package/dist/types/session-import/provider-service.d.ts +38 -0
- package/dist/types/session-import/redact.d.ts +23 -0
- package/dist/types/session-import/service.d.ts +47 -0
- package/dist/types/session-import/types.d.ts +120 -0
- package/dist/types/setup/paseo/check.d.ts +16 -0
- package/dist/types/setup/paseo/install-saga.d.ts +115 -0
- package/dist/types/setup/paseo/json-publisher.d.ts +76 -0
- package/dist/types/setup/paseo/orchestration-preferences.d.ts +24 -0
- package/dist/types/setup/paseo/paseo-ownership.d.ts +87 -0
- package/dist/types/setup/paseo/paseo-setup.d.ts +29 -0
- package/dist/types/setup/paseo/provider-config.d.ts +35 -0
- package/dist/types/setup/paseo/remove.d.ts +14 -0
- package/dist/types/setup/paseo/result-types.d.ts +59 -0
- package/dist/types/setup/paseo/setup-deps.d.ts +73 -0
- package/dist/types/setup/paseo/skills-bridge.d.ts +44 -0
- package/dist/types/skill-state/active-state.d.ts +5 -1
- package/dist/types/slash-commands/acp-builtins.d.ts +5 -1
- package/dist/types/slash-commands/builtin-registry.d.ts +2 -0
- package/dist/types/slash-commands/helpers/credential-switch.d.ts +12 -0
- package/dist/types/slash-commands/helpers/usage-report.d.ts +5 -6
- package/dist/types/slash-commands/types.d.ts +7 -1
- package/dist/types/task/executor.d.ts +10 -0
- package/dist/types/task/index.d.ts +3 -1
- package/dist/types/tools/ask-answer-registry.d.ts +6 -3
- package/dist/types/tools/bash-sleep-advisory.d.ts +14 -0
- package/dist/types/tools/bash.d.ts +2 -6
- package/dist/types/tools/browser/attach.d.ts +11 -0
- package/dist/types/tools/browser/launch.d.ts +20 -0
- package/dist/types/tools/browser/profile-discovery.d.ts +6 -0
- package/dist/types/tools/browser/render.d.ts +1 -0
- package/dist/types/tools/browser.d.ts +3 -1
- package/dist/types/tools/image-gen.d.ts +10 -2
- package/dist/types/tools/index.d.ts +8 -0
- package/dist/types/tools/monitor.d.ts +1 -1
- package/dist/types/tools/skill-discovery.d.ts +8 -1
- package/dist/types/tools/subagent.d.ts +2 -0
- package/dist/types/tools/ultragoal-ask-guard.d.ts +2 -2
- package/dist/types/utils/herdr-pane.d.ts +76 -0
- package/package.json +19 -9
- package/scripts/build-binary.ts +2 -1
- package/scripts/build-sdk-package-smoke.ts +2 -13
- package/scripts/capture-sticky-viewport-showcase.ts +0 -1
- package/scripts/compile-args.ts +2 -0
- package/scripts/generate-sdk-adapter-parity-manifest.ts +31 -16
- package/scripts/generate-sdk-operation-inventory.ts +28 -0
- package/scripts/generate-telegram-baseline-manifest.ts +1 -0
- package/scripts/generate-tool-catalog.ts +6 -4
- package/scripts/verify-gjc-sdk-canonicalization.ts +5 -39
- package/src/async/job-manager.ts +352 -17
- package/src/async/support.ts +25 -0
- package/src/autoresearch/dashboard.ts +28 -13
- package/src/capability/index.ts +3 -1
- package/src/capability/mcp.ts +6 -0
- package/src/capability/types.ts +6 -0
- package/src/cli/accounts-cli.ts +395 -0
- package/src/cli/args.ts +23 -0
- package/src/cli/auth-broker-cli.ts +136 -66
- package/src/cli/auth-gateway-cli.ts +94 -70
- package/src/cli/config-cli.ts +27 -2
- package/src/cli/crash-cli.ts +78 -0
- package/src/cli/customize-doctor.ts +1605 -0
- package/src/cli/daemon-cli.ts +12 -3
- package/src/cli/fast-help.ts +1 -0
- package/src/cli/mcp-cli.ts +128 -60
- package/src/cli/notify-cli.ts +8 -14
- package/src/cli/root-flags.ts +8 -0
- package/src/cli/setup-cli.ts +145 -0
- package/src/cli/skills-cli.ts +38 -2
- package/src/cli/update-cli.ts +167 -12
- package/src/cli.ts +4 -0
- package/src/commands/accounts.ts +71 -0
- package/src/commands/crash.ts +35 -0
- package/src/commands/customize.ts +84 -0
- package/src/commands/daemon.ts +2 -2
- package/src/commands/deep-interview.ts +2 -0
- package/src/commands/launch.ts +1 -0
- package/src/commands/mcp.ts +12 -7
- package/src/commands/ralplan.ts +2 -0
- package/src/commands/sdk.ts +65 -32
- package/src/commands/setup.ts +5 -0
- package/src/commands/skills.ts +14 -4
- package/src/commands/ultragoal.ts +10 -1
- package/src/commands/update.ts +26 -15
- package/src/config/atomic-yaml-patch-worker.ts +57 -0
- package/src/config/atomic-yaml-patch.ts +769 -29
- package/src/config/config-schema-version.ts +10 -0
- package/src/config/file-lock.ts +70 -1
- package/src/config/mcp-schema.json +52 -14
- package/src/config/model-profile-activation.ts +23 -2
- package/src/config/model-profiles.ts +88 -21
- package/src/config/model-registry.ts +147 -21
- package/src/config/models-config-schema.ts +1 -1
- package/src/config/settings-schema.ts +77 -7
- package/src/config/settings.ts +4038 -199
- package/src/config/skill-settings-defaults.ts +41 -3
- package/src/config/task-delegation.ts +87 -0
- package/src/config/update-channel.ts +23 -0
- package/src/coordinator-mcp/server.ts +377 -308
- package/src/crash/index-store.ts +723 -0
- package/src/crash/nudge.ts +89 -0
- package/src/crash/record-loader.ts +149 -0
- package/src/crash/report.ts +551 -0
- package/src/crash/sanitize.ts +129 -0
- package/src/cursor.ts +36 -10
- package/src/customization/import.ts +946 -0
- package/src/customization/index.ts +4 -0
- package/src/customization/inventory.ts +335 -0
- package/src/customization/mutations.ts +141 -0
- package/src/customization/types.ts +223 -0
- package/src/daemon/control-types.ts +8 -1
- package/src/daemon/operator-contract.ts +6 -6
- package/src/defaults/gjc/extensions/grok-cli-vendor/src/models/catalog.ts +31 -6
- package/src/defaults/gjc/skills/deep-interview/SKILL.md +11 -22
- package/src/defaults/gjc/skills/ralplan/SKILL.md +36 -23
- package/src/defaults/gjc/skills/ultragoal/SKILL.md +16 -0
- package/src/discovery/claude-hooks.ts +38 -0
- package/src/discovery/claude.ts +142 -209
- package/src/discovery/codex-hooks.ts +38 -0
- package/src/discovery/codex.ts +132 -198
- package/src/discovery/helpers.ts +8 -1
- package/src/discovery/index.ts +2 -0
- package/src/discovery/mcp-compat.ts +234 -0
- package/src/discovery/mcp-json.ts +6 -0
- package/src/edit/renderer.ts +40 -0
- package/src/edit/streaming.ts +4 -2
- package/src/exec/bash-executor.ts +24 -20
- package/src/export/html/index.ts +51 -2
- package/src/extensibility/extensions/loader.ts +9 -1
- package/src/extensibility/extensions/runner.ts +17 -4
- package/src/extensibility/extensions/types.ts +31 -6
- package/src/extensibility/gjc-plugins/constrained-hooks.ts +33 -0
- package/src/extensibility/gjc-plugins/installer.ts +9 -5
- package/src/extensibility/gjc-plugins/observability.ts +8 -2
- package/src/extensibility/gjc-plugins/registry.ts +13 -2
- package/src/extensibility/gjc-plugins/runtime-adapters.ts +3 -1
- package/src/extensibility/gjc-plugins/schema.ts +222 -39
- package/src/extensibility/hooks/loader.ts +154 -10
- package/src/extensibility/runtime-skill-discovery.ts +257 -60
- package/src/extensibility/skill-management.ts +368 -0
- package/src/extensibility/skills.ts +52 -16
- package/src/gjc-runtime/deep-interview-runtime.ts +45 -61
- package/src/gjc-runtime/launch-worktree.ts +56 -2
- package/src/gjc-runtime/linux-proc.ts +7 -1
- package/src/gjc-runtime/ralplan-runtime.ts +100 -164
- package/src/gjc-runtime/session-state-lock.ts +992 -0
- package/src/gjc-runtime/session-state-sidecar.ts +644 -142
- package/src/gjc-runtime/state-writer.ts +39 -14
- package/src/gjc-runtime/tmux-owner-isolation.ts +5 -4
- package/src/gjc-runtime/ultragoal-guard.ts +11 -4
- package/src/gjc-runtime/ultragoal-runtime.ts +44 -41
- package/src/gjc-runtime/workflow-settings.ts +596 -0
- package/src/goals/tools/goal-tool.ts +6 -1
- package/src/hooks/events.ts +291 -0
- package/src/hooks/native-skill-hook.ts +4 -0
- package/src/hooks/normalize.ts +369 -0
- package/src/hooks/skill-state.ts +165 -46
- package/src/internal-urls/docs-index.generated.ts +41 -32
- package/src/main.ts +36 -5
- package/src/migrate/mcp-mapper.ts +25 -2
- package/src/modes/acp/abort-scope.ts +29 -0
- package/src/modes/acp/acp-agent.ts +423 -98
- package/src/modes/components/assistant-message.ts +6 -1
- package/src/modes/components/chrome.ts +4 -3
- package/src/modes/components/customization/customization-dashboard.ts +443 -0
- package/src/modes/components/customization/import-wizard.ts +372 -0
- package/src/modes/components/customization/index.ts +1 -0
- package/src/modes/components/dynamic-theme-text.ts +22 -0
- package/src/modes/components/gajae-pet-widget.ts +607 -193
- package/src/modes/components/irc-sidebar.ts +11 -0
- package/src/modes/components/iterm-pet-transport.ts +585 -0
- package/src/modes/components/model-selector.ts +1 -6
- package/src/modes/components/oauth-selector.ts +277 -86
- package/src/modes/components/pet-capability.ts +35 -31
- package/src/modes/components/settings-selector.ts +29 -5
- package/src/modes/components/status-line/gh.ts +45 -1
- package/src/modes/components/status-line/segments.ts +19 -4
- package/src/modes/components/tool-status-header.ts +13 -3
- package/src/modes/controllers/command-controller.ts +20 -8
- package/src/modes/controllers/extension-ui-controller.ts +56 -257
- package/src/modes/controllers/input-controller.ts +10 -0
- package/src/modes/controllers/runtime-mcp-command-controller.ts +16 -3
- package/src/modes/controllers/selector-controller.ts +238 -77
- package/src/modes/controllers/stt-controller.ts +3 -3
- package/src/modes/interactive-mode.ts +88 -16
- package/src/modes/print-mode.ts +35 -6
- package/src/modes/runtime-init.ts +21 -68
- package/src/modes/theme/defaults/index.ts +2 -0
- package/src/modes/theme/defaults/ouroboros.json +118 -0
- package/src/modes/types.ts +1 -0
- package/src/modes/utils/injected-user-submission.ts +25 -0
- package/src/modes/utils/terminal-bell.ts +15 -1
- package/src/prompts/agent-fragments/ralplan-persistence.md +1 -1
- package/src/prompts/agent-fragments/restricted-bash.md +1 -1
- package/src/prompts/agents/critic.md +1 -1
- package/src/prompts/system/rlm-research.md +1 -1
- package/src/prompts/system/system-prompt.md +0 -2
- package/src/prompts/tools/bash.md +7 -1
- package/src/prompts/tools/browser.md +1 -1
- package/src/prompts/tools/cron.md +6 -6
- package/src/prompts/tools/read.md +0 -2
- package/src/prompts/tools/skill-discovery.md +4 -2
- package/src/runtime-mcp/client.ts +427 -23
- package/src/runtime-mcp/config.ts +37 -5
- package/src/runtime-mcp/manager-pool.test.ts +56 -0
- package/src/runtime-mcp/manager.ts +52 -2
- package/src/runtime-mcp/oauth-discovery.ts +13 -0
- package/src/runtime-mcp/oauth-flow.ts +46 -1
- package/src/runtime-mcp/pool-key.ts +5 -1
- package/src/runtime-mcp/pool.test.ts +9 -0
- package/src/runtime-mcp/protocol.test.ts +353 -0
- package/src/runtime-mcp/protocol.ts +624 -0
- package/src/runtime-mcp/scope-config.ts +78 -0
- package/src/runtime-mcp/tool-bridge.ts +44 -10
- package/src/runtime-mcp/transports/http.ts +84 -13
- package/src/runtime-mcp/types.ts +123 -12
- package/src/sdk/acp/adapter.ts +328 -97
- package/src/sdk/broker/broker.ts +160 -741
- package/src/sdk/broker/ensure.ts +9 -1
- package/src/sdk/broker/lifecycle.ts +510 -116
- package/src/sdk/broker/operation-receipt-ledger.ts +11 -2
- package/src/sdk/broker/process-incarnation.ts +19 -0
- package/src/sdk/broker/session-index.ts +516 -117
- package/src/sdk/broker/startup-failure.ts +28 -5
- package/src/sdk/broker/transport.ts +1 -13
- package/src/sdk/bus/chat-daemon-cli.ts +4 -2
- package/src/sdk/bus/chat-daemon-control.ts +67 -6
- package/src/sdk/bus/chat-daemon-runtime.ts +183 -859
- package/src/sdk/bus/config.ts +13 -0
- package/src/sdk/bus/conversation-store.ts +59 -171
- package/src/sdk/bus/daemon-paths.ts +20 -0
- package/src/sdk/bus/discord-conversation.ts +2 -0
- package/src/sdk/bus/discord-daemon.ts +524 -126
- package/src/sdk/bus/discord-live-provider.ts +206 -79
- package/src/sdk/bus/existing-thread-readiness.ts +4 -97
- package/src/sdk/bus/inbound-reaction-ordering.ts +122 -0
- package/src/sdk/bus/index.ts +2480 -456
- package/src/sdk/bus/kind-aware-reconciliation.ts +204 -34
- package/src/sdk/bus/lifecycle-commands.ts +2 -2
- package/src/sdk/bus/managed-daemon.ts +2 -145
- package/src/sdk/bus/notification-service.ts +196 -0
- package/src/sdk/bus/operator-runtime.ts +1 -1
- package/src/sdk/bus/prompt-reconciliation.ts +24 -15
- package/src/sdk/bus/reconciliation-store.ts +553 -24
- package/src/sdk/bus/session-control.ts +49 -3
- package/src/sdk/bus/slack-conversation.ts +4 -0
- package/src/sdk/bus/slack-daemon.ts +733 -134
- package/src/sdk/bus/slack-live-provider.ts +65 -15
- package/src/sdk/bus/slack-provider.ts +4 -0
- package/src/sdk/bus/slack-thread-binding.ts +9 -104
- package/src/sdk/bus/telegram-adoption-intent.ts +299 -209
- package/src/sdk/bus/telegram-daemon-cli.ts +194 -7
- package/src/sdk/bus/telegram-daemon-contract.ts +265 -19
- package/src/sdk/bus/telegram-daemon-control.ts +3 -13
- package/src/sdk/bus/telegram-daemon-orphan-reap.ts +498 -0
- package/src/sdk/bus/telegram-daemon-owner-registry.ts +176 -0
- package/src/sdk/bus/telegram-daemon.ts +2552 -2280
- package/src/sdk/bus/telegram-reference.ts +1 -226
- package/src/sdk/bus/telegram-setup.ts +2 -2
- package/src/sdk/bus/threaded-render.ts +1 -0
- package/src/sdk/bus/topic-registry.ts +279 -146
- package/src/sdk/cli/rows.ts +2 -35
- package/src/sdk/cli/session-cli.ts +776 -700
- package/src/sdk/client/client.ts +892 -1
- package/src/sdk/host/control/dispatch.ts +93 -58
- package/src/sdk/host/control/index.ts +1 -1
- package/src/sdk/host/control/operations.ts +18 -10
- package/src/sdk/host/control/runtime-gate.ts +40 -0
- package/src/sdk/host/host.ts +63 -12
- package/src/sdk/host/query/handlers.ts +66 -7
- package/src/sdk/host/reverse-leases.ts +2 -2
- package/src/sdk/host/sdk-surface-parity.test.ts +1 -1
- package/src/sdk/host/session-runtime.test.ts +2787 -34
- package/src/sdk/host/session-runtime.ts +1489 -101
- package/src/sdk/host/surface-policy.ts +12 -8
- package/src/sdk/host/types.ts +1 -1
- package/src/sdk/host/websocket-transport.lifecycle.test.ts +31 -59
- package/src/sdk/host/websocket-transport.ts +85 -50
- package/src/sdk/index.ts +2 -1
- package/src/sdk/lifecycle/broker-client.ts +53 -0
- package/src/sdk/lifecycle/client.ts +234 -0
- package/src/sdk/lifecycle/index.ts +3 -0
- package/src/sdk/{bus/recent-activity.ts → lifecycle/recent-sessions.ts} +5 -2
- package/src/sdk/lifecycle/service.ts +720 -0
- package/src/sdk/mcp/server.ts +226 -188
- package/src/sdk/prompt-deadline-lease.ts +55 -0
- package/src/sdk/prompt-deadline-manager.ts +148 -0
- package/src/sdk/prompt-status.ts +11 -3
- package/src/sdk/protocol/operation-inventory.generated.json +272 -129
- package/src/sdk/protocol/operation-registry.ts +71 -8
- package/src/sdk/receipt-state.ts +43 -0
- package/src/sdk/reconciliation-extensions.ts +14 -0
- package/src/sdk/router/index.ts +1 -0
- package/src/sdk/router/session-router.ts +1658 -0
- package/src/sdk/session-list.ts +93 -0
- package/src/sdk/session-reconnect.ts +45 -1
- package/src/sdk/session.ts +716 -120
- package/src/sdk/transport/serve-cli.ts +18 -34
- package/src/session/account-inventory.ts +603 -0
- package/src/session/agent-session.ts +2873 -559
- package/src/session/agent-storage.ts +35 -0
- package/src/session/blob-store.ts +32 -1
- package/src/session/coordinator-tool-label.ts +40 -0
- package/src/session/internal/managed-session-scope.ts +4 -0
- package/src/session/internal/managed-session-storage.ts +199 -31
- package/src/session/messages.ts +1 -1
- package/src/session/secure-token-file.ts +80 -0
- package/src/session/session-manager.ts +757 -57
- package/src/session/session-storage.ts +25 -16
- package/src/session/startup-auth-config.ts +297 -0
- package/src/session/terminal-abort.ts +1253 -0
- package/src/session/yield-queue.ts +57 -15
- package/src/session-import/claude.ts +334 -0
- package/src/session-import/codex.ts +1033 -0
- package/src/session-import/command.ts +77 -0
- package/src/session-import/detect.ts +133 -0
- package/src/session-import/index.ts +7 -0
- package/src/session-import/provider-codex.ts +327 -0
- package/src/session-import/provider-service.ts +457 -0
- package/src/session-import/redact.ts +128 -0
- package/src/session-import/service.ts +1264 -0
- package/src/session-import/types.ts +148 -0
- package/src/setup/paseo/check.ts +213 -0
- package/src/setup/paseo/install-saga.ts +293 -0
- package/src/setup/paseo/json-publisher.ts +263 -0
- package/src/setup/paseo/orchestration-preferences.ts +86 -0
- package/src/setup/paseo/paseo-ownership.ts +224 -0
- package/src/setup/paseo/paseo-setup.ts +253 -0
- package/src/setup/paseo/provider-config.ts +139 -0
- package/src/setup/paseo/remove.ts +183 -0
- package/src/setup/paseo/result-types.ts +79 -0
- package/src/setup/paseo/setup-deps.ts +175 -0
- package/src/setup/paseo/skills-bridge.ts +260 -0
- package/src/skill-state/active-state.ts +21 -11
- package/src/slash-commands/acp-builtins.ts +9 -1
- package/src/slash-commands/builtin-registry.ts +117 -19
- package/src/slash-commands/helpers/credential-switch.ts +143 -0
- package/src/slash-commands/helpers/mcp.ts +9 -3
- package/src/slash-commands/helpers/usage-report.ts +61 -56
- package/src/slash-commands/types.ts +7 -2
- package/src/task/executor.ts +30 -11
- package/src/task/index.ts +66 -7
- package/src/task/render.ts +23 -9
- package/src/tools/ask-answer-registry.ts +23 -7
- package/src/tools/ask.ts +8 -4
- package/src/tools/bash-sleep-advisory.ts +115 -0
- package/src/tools/bash.ts +98 -18
- package/src/tools/browser/attach.ts +71 -3
- package/src/tools/browser/launch.ts +86 -13
- package/src/tools/browser/profile-discovery.ts +57 -7
- package/src/tools/browser/render.ts +8 -1
- package/src/tools/browser.ts +130 -21
- package/src/tools/computer.enforcement.test.ts +1 -1
- package/src/tools/computer.ts +3 -2
- package/src/tools/cron.ts +12 -1
- package/src/tools/image-gen.ts +349 -142
- package/src/tools/index.ts +8 -0
- package/src/tools/job.ts +33 -6
- package/src/tools/monitor.ts +41 -2
- package/src/tools/skill-discovery.ts +21 -29
- package/src/tools/subagent.ts +142 -24
- package/src/tools/todo-contract.ts +55 -3
- package/src/tools/todo-write.ts +4 -3
- package/src/tools/tool-catalog.generated.ts +6 -6
- package/src/tools/ultragoal-ask-guard.ts +10 -3
- package/src/utils/herdr-pane.ts +345 -0
- package/src/utils/title-generator.ts +2 -0
- package/src/web/scrapers/index.ts +6 -4
- package/dist/types/cli/malloc-env-guard.test.d.ts +0 -1
- package/dist/types/defaults/gjc-defaults.test.d.ts +0 -1
- package/dist/types/memory-backend/lazy-loading.test.d.ts +0 -1
- package/dist/types/runtime/boot-ordering.test.d.ts +0 -1
- package/dist/types/runtime/lazy-service.test.d.ts +0 -1
- package/dist/types/runtime/network-prewarm-service.test.d.ts +0 -1
- package/dist/types/runtime/workspace-tree-service.test.d.ts +0 -1
- package/dist/types/runtime-mcp/config.test.d.ts +0 -1
- package/dist/types/runtime-mcp/http.test.d.ts +0 -1
- package/dist/types/runtime-mcp/manager-pool.test.d.ts +0 -1
- package/dist/types/runtime-mcp/pool-key.test.d.ts +0 -1
- package/dist/types/runtime-mcp/pool.test.d.ts +0 -1
- package/dist/types/sdk/bus/lifecycle-control-runtime.d.ts +0 -117
- package/dist/types/sdk/bus/lifecycle-orchestrator.d.ts +0 -141
- package/dist/types/sdk/bus/telegram-cli.d.ts +0 -31
- package/dist/types/sdk/elevation/allowlist.d.ts +0 -20
- package/dist/types/sdk/elevation/audit.d.ts +0 -93
- package/dist/types/sdk/elevation/capability.d.ts +0 -3
- package/dist/types/sdk/elevation/digest.d.ts +0 -72
- package/dist/types/sdk/elevation/dispatch-receipt.d.ts +0 -85
- package/dist/types/sdk/elevation/grant-ledger.d.ts +0 -163
- package/dist/types/sdk/elevation/owner.d.ts +0 -48
- package/dist/types/sdk/host/import-graph.test.d.ts +0 -1
- package/dist/types/sdk/host/sdk-surface-parity.test.d.ts +0 -1
- package/dist/types/sdk/host/session-runtime.test.d.ts +0 -1
- package/dist/types/sdk/host/websocket-transport.lifecycle.test.d.ts +0 -1
- package/dist/types/session/auth-broker-config.d.ts +0 -13
- package/dist/types/session/heap-eviction-artifacts.test.d.ts +0 -1
- package/dist/types/skills/skills.test.d.ts +0 -1
- package/dist/types/slash-commands/notify-command.test.d.ts +0 -1
- package/dist/types/task/token-log.test.d.ts +0 -1
- package/dist/types/tools/computer.enforcement.test.d.ts +0 -1
- package/dist/types/tools/descriptors.test.d.ts +0 -1
- package/scripts/g005-daemon-smoke.ts +0 -180
- package/scripts/g011-daemon-path-smoke.ts +0 -153
- package/src/sdk/bus/lifecycle-control-runtime.ts +0 -1733
- package/src/sdk/bus/lifecycle-orchestrator.ts +0 -489
- package/src/sdk/bus/telegram-cli.ts +0 -212
- package/src/sdk/elevation/allowlist.ts +0 -54
- package/src/sdk/elevation/audit.ts +0 -208
- package/src/sdk/elevation/capability.ts +0 -41
- package/src/sdk/elevation/digest.ts +0 -129
- package/src/sdk/elevation/dispatch-receipt.ts +0 -184
- package/src/sdk/elevation/grant-ledger.ts +0 -1142
- package/src/sdk/elevation/owner.ts +0 -109
- package/src/session/auth-broker-config.ts +0 -109
- /package/dist/types/{ai-core-import-gate.test.d.ts → discovery/claude-hooks.d.ts} +0 -0
- /package/dist/types/{cli/fixture-report.test.d.ts → discovery/codex-hooks.d.ts} +0 -0
- /package/dist/types/sdk/{bus/recent-activity.d.ts → lifecycle/recent-sessions.d.ts} +0 -0
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
type AssistantMessageEventStream,
|
|
6
6
|
type AuthCredentialSelector,
|
|
7
7
|
applyFinalCodexGpt56ContextCap,
|
|
8
|
+
applyGeneratedModelPolicies,
|
|
8
9
|
type CacheRetention,
|
|
9
10
|
CODEX_GPT_5_6_CONTEXT_CAP,
|
|
10
11
|
type Context,
|
|
@@ -25,12 +26,14 @@ import {
|
|
|
25
26
|
PROVIDER_DESCRIPTORS,
|
|
26
27
|
readModelCache,
|
|
27
28
|
registerCustomApi,
|
|
29
|
+
resolveOAuthStorageProvider,
|
|
28
30
|
type SimpleStreamOptions,
|
|
29
31
|
type ThinkingConfig,
|
|
30
32
|
UNK_CONTEXT_WINDOW,
|
|
31
33
|
UNK_MAX_TOKENS,
|
|
32
34
|
unregisterCustomApis,
|
|
33
35
|
} from "@gajae-code/ai/core";
|
|
36
|
+
import { resolveLoopbackOpenAIBaseUrl } from "@gajae-code/ai/utils/discovery/openai-compatible";
|
|
34
37
|
|
|
35
38
|
// Sentinel for local-only OAuth token (LM Studio, vLLM) — declared inline to avoid loading
|
|
36
39
|
// any provider module at startup. Must match `DEFAULT_LOCAL_TOKEN` in oauth/lm-studio.ts.
|
|
@@ -93,6 +96,14 @@ export type { CanonicalModelIndex, CanonicalModelRecord, CanonicalModelVariant,
|
|
|
93
96
|
export { isAuthenticated, kNoAuth };
|
|
94
97
|
|
|
95
98
|
const MAX_SESSION_CANONICAL_VARIANTS = 64;
|
|
99
|
+
function firstPositiveDiscoveryNumber(...values: readonly unknown[]): number | undefined {
|
|
100
|
+
for (const value of values) {
|
|
101
|
+
const number =
|
|
102
|
+
typeof value === "number" ? value : typeof value === "string" && value.trim() ? Number(value) : NaN;
|
|
103
|
+
if (Number.isFinite(number) && number > 0) return number;
|
|
104
|
+
}
|
|
105
|
+
return undefined;
|
|
106
|
+
}
|
|
96
107
|
function redactDiscoveryUrl(value: string | URL): string {
|
|
97
108
|
try {
|
|
98
109
|
const url = typeof value === "string" ? new URL(value) : value;
|
|
@@ -171,6 +182,19 @@ export const GJC_MODEL_ASSIGNMENT_TARGETS: Record<GjcModelAssignmentTargetId, Gj
|
|
|
171
182
|
image: { id: "image", tag: "IMAGE", name: "Image", color: "accent", settingsPath: "modelRoles" },
|
|
172
183
|
};
|
|
173
184
|
|
|
185
|
+
export function requiresExplicitThinkingChoice(model: Model, role: GjcModelAssignmentTargetId | null): boolean {
|
|
186
|
+
if (model.reasoning !== true) return false;
|
|
187
|
+
if (
|
|
188
|
+
model.provider === "openai" ||
|
|
189
|
+
model.provider === "openai-codex" ||
|
|
190
|
+
(model.provider === "xai" && (model.id === "grok-4.5" || model.id === "grok-4.6"))
|
|
191
|
+
)
|
|
192
|
+
return true;
|
|
193
|
+
if (role === null) return false;
|
|
194
|
+
if (role === "default") return true;
|
|
195
|
+
return GJC_MODEL_ASSIGNMENT_TARGETS[role].settingsPath === "task.agentModelOverrides";
|
|
196
|
+
}
|
|
197
|
+
|
|
174
198
|
/** Alias for ModelRoleInfo - used for both built-in and custom roles */
|
|
175
199
|
export type RoleInfo = ModelRoleInfo;
|
|
176
200
|
|
|
@@ -582,7 +606,8 @@ function getProviderBaseUrlEnvKeys(provider: string): string[] {
|
|
|
582
606
|
* never the project `.env`.
|
|
583
607
|
*/
|
|
584
608
|
function resolveProviderBaseUrlFromEnv(provider: string): string | undefined {
|
|
585
|
-
|
|
609
|
+
const baseUrl = $pickCredentialEnv(...getProviderBaseUrlEnvKeys(provider));
|
|
610
|
+
return provider === "omlx" && baseUrl ? resolveLoopbackOpenAIBaseUrl(baseUrl, "http://127.0.0.1:8080/v1") : baseUrl;
|
|
586
611
|
}
|
|
587
612
|
|
|
588
613
|
function normalizeLocalOpenAICompatBaseUrl(baseUrl: string): string {
|
|
@@ -778,10 +803,8 @@ function extractGoogleOAuthToken(value: string | undefined): string | undefined
|
|
|
778
803
|
}
|
|
779
804
|
|
|
780
805
|
function getOAuthCredentialsForProvider(authStorage: AuthStorage, provider: string): OAuthCredential[] {
|
|
781
|
-
const providerEntry = authStorage.getAll()[provider];
|
|
782
|
-
if (!providerEntry)
|
|
783
|
-
return [];
|
|
784
|
-
}
|
|
806
|
+
const providerEntry = authStorage.getAll()[resolveOAuthStorageProvider(provider)];
|
|
807
|
+
if (!providerEntry) return [];
|
|
785
808
|
const entries = Array.isArray(providerEntry) ? providerEntry : [providerEntry];
|
|
786
809
|
return entries.filter((entry): entry is OAuthCredential => entry.type === "oauth");
|
|
787
810
|
}
|
|
@@ -1245,7 +1268,15 @@ export class ModelRegistry {
|
|
|
1245
1268
|
#configuredDiscoveryProviderIds: ReadonlySet<string> = new Set();
|
|
1246
1269
|
#descriptorDiscoveryEvidence = new Map<
|
|
1247
1270
|
string,
|
|
1248
|
-
{
|
|
1271
|
+
{
|
|
1272
|
+
fresh: boolean;
|
|
1273
|
+
modelIds: ReadonlySet<string>;
|
|
1274
|
+
profileModelIds?: ReadonlySet<string>;
|
|
1275
|
+
profileFresh?: boolean;
|
|
1276
|
+
profileEndpoint?: string;
|
|
1277
|
+
authGeneration: string;
|
|
1278
|
+
endpoint: string;
|
|
1279
|
+
}
|
|
1249
1280
|
>();
|
|
1250
1281
|
#descriptorDiscoveryGenerations = new Map<string, number>();
|
|
1251
1282
|
#configuredDiscoveryEvidence = new Map<
|
|
@@ -1634,7 +1665,9 @@ export class ModelRegistry {
|
|
|
1634
1665
|
const withTransport = providerOverride
|
|
1635
1666
|
? models.map(model => this.#applyProviderTransportOverride(model, providerOverride))
|
|
1636
1667
|
: models;
|
|
1637
|
-
|
|
1668
|
+
const normalized = this.#applyProviderModelOverrides(descriptor.providerId, withTransport);
|
|
1669
|
+
applyGeneratedModelPolicies(normalized);
|
|
1670
|
+
cachedModels.push(...normalized);
|
|
1638
1671
|
}
|
|
1639
1672
|
return cachedModels;
|
|
1640
1673
|
}
|
|
@@ -1650,6 +1683,7 @@ export class ModelRegistry {
|
|
|
1650
1683
|
this.#applyProviderCompat(providerConfig.compat, [...models]),
|
|
1651
1684
|
),
|
|
1652
1685
|
);
|
|
1686
|
+
applyGeneratedModelPolicies(normalized);
|
|
1653
1687
|
cachedModels.push(...normalized);
|
|
1654
1688
|
}
|
|
1655
1689
|
return cachedModels;
|
|
@@ -1662,7 +1696,9 @@ export class ModelRegistry {
|
|
|
1662
1696
|
|
|
1663
1697
|
#normalizeDiscoverableModels(providerConfig: DiscoveryProviderConfig, models: Model<Api>[]): Model<Api>[] {
|
|
1664
1698
|
const liveBaseUrl =
|
|
1665
|
-
providerConfig.discovery.type === "openai-models-list" ||
|
|
1699
|
+
providerConfig.discovery.type === "openai-models-list" ||
|
|
1700
|
+
providerConfig.discovery.type === "lm-studio" ||
|
|
1701
|
+
providerConfig.discovery.type === "omlx"
|
|
1666
1702
|
? this.#normalizeOpenAIModelsListBaseUrl(
|
|
1667
1703
|
this.#getProviderBaseUrlForDiscovery(providerConfig.provider) ?? providerConfig.baseUrl,
|
|
1668
1704
|
)
|
|
@@ -1686,7 +1722,9 @@ export class ModelRegistry {
|
|
|
1686
1722
|
});
|
|
1687
1723
|
}
|
|
1688
1724
|
#sanitizeDiscoverableModelsForCache(providerConfig: DiscoveryProviderConfig, models: Model<Api>[]): Model<Api>[] {
|
|
1689
|
-
return providerConfig.discovery.type === "openai-models-list" ||
|
|
1725
|
+
return providerConfig.discovery.type === "openai-models-list" ||
|
|
1726
|
+
providerConfig.discovery.type === "lm-studio" ||
|
|
1727
|
+
providerConfig.discovery.type === "omlx"
|
|
1690
1728
|
? this.#stripModelBaseUrlQueries(models)
|
|
1691
1729
|
: models;
|
|
1692
1730
|
}
|
|
@@ -1739,6 +1777,18 @@ export class ModelRegistry {
|
|
|
1739
1777
|
this.#optionalAuthProviders.add("lm-studio");
|
|
1740
1778
|
this.#keylessProviders.add("lm-studio");
|
|
1741
1779
|
}
|
|
1780
|
+
if (!configuredProviders.has("omlx") && !disabledProviders.has("omlx")) {
|
|
1781
|
+
this.#discoveryManager.addProvider({
|
|
1782
|
+
provider: "omlx",
|
|
1783
|
+
api: "openai-completions",
|
|
1784
|
+
baseUrl: resolveLoopbackOpenAIBaseUrl(Bun.env.OMLX_BASE_URL, "http://127.0.0.1:8080/v1"),
|
|
1785
|
+
discovery: { type: "omlx" },
|
|
1786
|
+
optional: true,
|
|
1787
|
+
});
|
|
1788
|
+
// Implicit oMLX auth is optional and may be added after startup.
|
|
1789
|
+
this.#optionalAuthProviders.add("omlx");
|
|
1790
|
+
this.#keylessProviders.add("omlx");
|
|
1791
|
+
}
|
|
1742
1792
|
}
|
|
1743
1793
|
|
|
1744
1794
|
#loadCustomModels(): CustomModelsResult {
|
|
@@ -2430,6 +2480,7 @@ export class ModelRegistry {
|
|
|
2430
2480
|
case "llama.cpp":
|
|
2431
2481
|
return this.#discoverLlamaCppModels(providerConfig, apiKey);
|
|
2432
2482
|
case "lm-studio":
|
|
2483
|
+
case "omlx":
|
|
2433
2484
|
case "openai-models-list":
|
|
2434
2485
|
return this.#discoverOpenAIModelsList(providerConfig, apiKey);
|
|
2435
2486
|
case "models-dev":
|
|
@@ -2591,12 +2642,13 @@ export class ModelRegistry {
|
|
|
2591
2642
|
const manager = createModelManager({
|
|
2592
2643
|
...options,
|
|
2593
2644
|
cacheDbPath: this.#cacheDbPath,
|
|
2645
|
+
cacheDynamicModelProvenance: Bun.hash(`${authGeneration}\u0000${endpoint}`).toString(36),
|
|
2594
2646
|
canPublishCache: isCurrentDiscovery,
|
|
2595
2647
|
...(options.fetchDynamicModels
|
|
2596
2648
|
? {
|
|
2597
2649
|
fetchDynamicModels: async () => {
|
|
2598
2650
|
const models = await options.fetchDynamicModels?.();
|
|
2599
|
-
if (models === null) return null;
|
|
2651
|
+
if (models === null || models === undefined) return null;
|
|
2600
2652
|
const sanitizedModels = this.#stripModelBaseUrlQueries(models ?? []);
|
|
2601
2653
|
if (canUseCredentialDerivedXiaomiEndpoint) {
|
|
2602
2654
|
credentialDerivedEndpoint = sanitizedModels[0]?.baseUrl;
|
|
@@ -2630,9 +2682,15 @@ export class ModelRegistry {
|
|
|
2630
2682
|
...(baseUrl !== model.baseUrl ? { baseUrl } : {}),
|
|
2631
2683
|
};
|
|
2632
2684
|
});
|
|
2685
|
+
const preservesExistingDescriptorEvidence =
|
|
2686
|
+
(result.dynamicModelIds === undefined && !result.fetched && !result.stale) ||
|
|
2687
|
+
(result.stale && result.cacheFresh && result.cacheAuthoritative && evidence?.fresh === true) ||
|
|
2688
|
+
(strategy === "offline" && result.dynamicModelIds === undefined);
|
|
2633
2689
|
if (
|
|
2634
2690
|
isCurrentDiscovery() &&
|
|
2691
|
+
!preservesExistingDescriptorEvidence &&
|
|
2635
2692
|
(result.fetched ||
|
|
2693
|
+
result.dynamicModelIds !== undefined ||
|
|
2636
2694
|
result.stale ||
|
|
2637
2695
|
this.#descriptorDiscoveryEvidence.get(options.providerId)?.authGeneration !== authGeneration ||
|
|
2638
2696
|
this.#descriptorDiscoveryEvidence.get(options.providerId)?.endpoint !== endpoint)
|
|
@@ -2640,6 +2698,13 @@ export class ModelRegistry {
|
|
|
2640
2698
|
this.#descriptorDiscoveryEvidence.set(options.providerId, {
|
|
2641
2699
|
fresh: result.fetched,
|
|
2642
2700
|
modelIds: new Set(models.map(model => model.id)),
|
|
2701
|
+
...(result.dynamicModelIds === undefined
|
|
2702
|
+
? {}
|
|
2703
|
+
: {
|
|
2704
|
+
profileModelIds: new Set(result.dynamicModelIds),
|
|
2705
|
+
profileFresh: !result.stale,
|
|
2706
|
+
profileEndpoint: endpoint,
|
|
2707
|
+
}),
|
|
2643
2708
|
authGeneration,
|
|
2644
2709
|
endpoint: this.#normalizeDiscoveryEvidenceEndpoint(models[0]?.baseUrl ?? endpoint),
|
|
2645
2710
|
});
|
|
@@ -2959,20 +3024,21 @@ export class ModelRegistry {
|
|
|
2959
3024
|
}
|
|
2960
3025
|
throw new Error(`HTTP ${response.status} from ${redactDiscoveryUrl(modelsUrl)}`);
|
|
2961
3026
|
}
|
|
2962
|
-
const payload =
|
|
2963
|
-
|
|
2964
|
-
|
|
2965
|
-
|
|
3027
|
+
const payload: unknown = await response.json();
|
|
3028
|
+
if (!isRecord(payload) || !Array.isArray(payload.data)) {
|
|
3029
|
+
throw new Error(`Malformed OpenAI models-list response from ${redactDiscoveryUrl(modelsUrl)}`);
|
|
3030
|
+
}
|
|
3031
|
+
const models = payload.data;
|
|
2966
3032
|
const discovered: Model<Api>[] = [];
|
|
2967
3033
|
for (const item of models) {
|
|
3034
|
+
if (!isRecord(item) || typeof item.id !== "string" || !item.id.trim()) continue;
|
|
2968
3035
|
const id = item.id;
|
|
2969
|
-
if (!id) continue;
|
|
2970
3036
|
const referenceModel = resolveCustomModelReference(id);
|
|
2971
3037
|
const api = this.#resolveDiscoveredModelApi(providerConfig, id);
|
|
2972
3038
|
discovered.push(
|
|
2973
3039
|
enrichModelThinking({
|
|
2974
3040
|
id,
|
|
2975
|
-
name: item.name
|
|
3041
|
+
name: typeof item.name === "string" ? item.name : (referenceModel?.name ?? id),
|
|
2976
3042
|
api,
|
|
2977
3043
|
provider: providerConfig.provider,
|
|
2978
3044
|
baseUrl: requestBaseUrl,
|
|
@@ -2981,8 +3047,23 @@ export class ModelRegistry {
|
|
|
2981
3047
|
input: referenceModel?.input ?? ["text"],
|
|
2982
3048
|
output: referenceModel?.output,
|
|
2983
3049
|
cost: referenceModel?.cost ?? { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
|
2984
|
-
contextWindow:
|
|
2985
|
-
|
|
3050
|
+
contextWindow:
|
|
3051
|
+
firstPositiveDiscoveryNumber(
|
|
3052
|
+
item.max_model_len,
|
|
3053
|
+
item.context_length,
|
|
3054
|
+
item.context_window,
|
|
3055
|
+
item.max_context_length,
|
|
3056
|
+
referenceModel?.contextWindow,
|
|
3057
|
+
UNK_CONTEXT_WINDOW,
|
|
3058
|
+
) ?? UNK_CONTEXT_WINDOW,
|
|
3059
|
+
maxTokens:
|
|
3060
|
+
firstPositiveDiscoveryNumber(
|
|
3061
|
+
item.max_completion_tokens,
|
|
3062
|
+
item.max_tokens,
|
|
3063
|
+
item.max_output_tokens,
|
|
3064
|
+
referenceModel?.maxTokens,
|
|
3065
|
+
UNK_MAX_TOKENS,
|
|
3066
|
+
) ?? UNK_MAX_TOKENS,
|
|
2986
3067
|
headers: providerConfig.headers,
|
|
2987
3068
|
compat: {
|
|
2988
3069
|
...referenceModel?.compat,
|
|
@@ -3692,6 +3773,39 @@ export class ModelRegistry {
|
|
|
3692
3773
|
this.#availableModelsEnvFingerprint = envFingerprint;
|
|
3693
3774
|
return this.#availableModelsCache;
|
|
3694
3775
|
}
|
|
3776
|
+
|
|
3777
|
+
/**
|
|
3778
|
+
* Get authenticated models, excluding bundled entries that a fresh provider
|
|
3779
|
+
* catalog has positively shown to be unavailable. Bundled entries remain
|
|
3780
|
+
* usable until live catalog evidence exists so offline startup is unchanged.
|
|
3781
|
+
*/
|
|
3782
|
+
getAvailableForProfileActivation(): Model<Api>[] {
|
|
3783
|
+
return this.getAvailable().filter(model => {
|
|
3784
|
+
const evidence = this.#descriptorDiscoveryEvidence.get(model.provider);
|
|
3785
|
+
if (!evidence?.profileFresh || evidence.profileModelIds === undefined) return true;
|
|
3786
|
+
if (this.#hasCustomModelOverlay(model.provider, model.id)) return true;
|
|
3787
|
+
const bundledModelIds = new Set(
|
|
3788
|
+
(getBundledModels(model.provider as Parameters<typeof getBundledModels>[0]) as Model<Api>[]).map(
|
|
3789
|
+
candidate => candidate.id,
|
|
3790
|
+
),
|
|
3791
|
+
);
|
|
3792
|
+
if (!bundledModelIds.has(model.id)) return true;
|
|
3793
|
+
if (
|
|
3794
|
+
evidence.authGeneration !== this.#getProviderEvidenceGeneration(model.provider) ||
|
|
3795
|
+
evidence.profileEndpoint !==
|
|
3796
|
+
this.#normalizeDiscoveryEvidenceEndpoint(this.#getProviderBaseUrlForDiscovery(model.provider) ?? "")
|
|
3797
|
+
)
|
|
3798
|
+
return true;
|
|
3799
|
+
return evidence.profileModelIds.has(model.id);
|
|
3800
|
+
});
|
|
3801
|
+
}
|
|
3802
|
+
|
|
3803
|
+
#hasCustomModelOverlay(provider: string, id: string): boolean {
|
|
3804
|
+
return [...this.#customModelOverlays, ...this.#runtimeModelOverlays].some(
|
|
3805
|
+
overlay => overlay.provider === provider && overlay.id === id,
|
|
3806
|
+
);
|
|
3807
|
+
}
|
|
3808
|
+
|
|
3695
3809
|
#hasFreshOrStaticModelEvidence(model: Model<Api>): boolean {
|
|
3696
3810
|
const evidence = this.#providerActivity.get(model.provider);
|
|
3697
3811
|
if (
|
|
@@ -3752,7 +3866,9 @@ export class ModelRegistry {
|
|
|
3752
3866
|
this.#normalizeDiscoveryEvidenceEndpoint(
|
|
3753
3867
|
discoveryType === "ollama"
|
|
3754
3868
|
? `${this.#normalizeOllamaBaseUrl(baseUrl)}/v1`
|
|
3755
|
-
: discoveryType === "openai-models-list" ||
|
|
3869
|
+
: discoveryType === "openai-models-list" ||
|
|
3870
|
+
discoveryType === "lm-studio" ||
|
|
3871
|
+
discoveryType === "omlx"
|
|
3756
3872
|
? this.#normalizeOpenAIModelsListBaseUrl(baseUrl)
|
|
3757
3873
|
: (baseUrl ?? ""),
|
|
3758
3874
|
);
|
|
@@ -3875,13 +3991,18 @@ export class ModelRegistry {
|
|
|
3875
3991
|
async getApiKey(
|
|
3876
3992
|
model: Model<Api>,
|
|
3877
3993
|
sessionId?: string,
|
|
3878
|
-
options: {
|
|
3994
|
+
options: {
|
|
3995
|
+
credentialSelector?: AuthCredentialSelector;
|
|
3996
|
+
preferredCredentialSelector?: AuthCredentialSelector;
|
|
3997
|
+
signal?: AbortSignal;
|
|
3998
|
+
} = {},
|
|
3879
3999
|
): Promise<string | undefined> {
|
|
3880
4000
|
return this.#getApiKeyOrNoAuth(model.provider, () =>
|
|
3881
4001
|
this.authStorage.getApiKey(model.provider, sessionId, {
|
|
3882
4002
|
baseUrl: model.baseUrl,
|
|
3883
4003
|
modelId: model.id,
|
|
3884
4004
|
credentialSelector: options.credentialSelector,
|
|
4005
|
+
preferredCredentialSelector: options.preferredCredentialSelector,
|
|
3885
4006
|
signal: options.signal,
|
|
3886
4007
|
}),
|
|
3887
4008
|
);
|
|
@@ -3894,12 +4015,17 @@ export class ModelRegistry {
|
|
|
3894
4015
|
provider: string,
|
|
3895
4016
|
sessionId?: string,
|
|
3896
4017
|
baseUrl?: string,
|
|
3897
|
-
options: {
|
|
4018
|
+
options: {
|
|
4019
|
+
credentialSelector?: AuthCredentialSelector;
|
|
4020
|
+
preferredCredentialSelector?: AuthCredentialSelector;
|
|
4021
|
+
signal?: AbortSignal;
|
|
4022
|
+
} = {},
|
|
3898
4023
|
): Promise<string | undefined> {
|
|
3899
4024
|
return this.#getApiKeyOrNoAuth(provider, () =>
|
|
3900
4025
|
this.authStorage.getApiKey(provider, sessionId, {
|
|
3901
4026
|
baseUrl,
|
|
3902
4027
|
credentialSelector: options.credentialSelector,
|
|
4028
|
+
preferredCredentialSelector: options.preferredCredentialSelector,
|
|
3903
4029
|
signal: options.signal,
|
|
3904
4030
|
}),
|
|
3905
4031
|
);
|
|
@@ -198,7 +198,7 @@ export const ModelOverrideSchema = z
|
|
|
198
198
|
export type ModelOverride = z.infer<typeof ModelOverrideSchema>;
|
|
199
199
|
|
|
200
200
|
export const ProviderDiscoverySchema = z.object({
|
|
201
|
-
type: z.enum(["ollama", "llama.cpp", "lm-studio", "openai-models-list", "models-dev"]),
|
|
201
|
+
type: z.enum(["ollama", "llama.cpp", "lm-studio", "omlx", "openai-models-list", "models-dev"]),
|
|
202
202
|
apiByModelPrefix: z.record(z.string().min(1), z.enum(["openai-completions", "anthropic-messages"])).optional(),
|
|
203
203
|
modelsDevProvider: z.string().min(1).optional(),
|
|
204
204
|
});
|
|
@@ -181,7 +181,10 @@ interface ArrayDef<T> {
|
|
|
181
181
|
ui?: UiBase;
|
|
182
182
|
}
|
|
183
183
|
|
|
184
|
-
type RecordValueDef =
|
|
184
|
+
type RecordValueDef =
|
|
185
|
+
| { type: "model-selector-value" }
|
|
186
|
+
| { type: "string-enum"; values: readonly string[] }
|
|
187
|
+
| { type: "credential-selector" };
|
|
185
188
|
|
|
186
189
|
interface RecordDef<T> {
|
|
187
190
|
type: "record";
|
|
@@ -270,6 +273,22 @@ export const SETTINGS_SCHEMA = {
|
|
|
270
273
|
// per-machine overrides remain trivial.
|
|
271
274
|
"auth.broker.url": { type: "string", default: undefined },
|
|
272
275
|
"auth.broker.token": { type: "string", default: undefined },
|
|
276
|
+
"auth.credentialRankingMode": {
|
|
277
|
+
type: "enum",
|
|
278
|
+
values: ["balanced", "earliest-reset"] as const,
|
|
279
|
+
default: "balanced",
|
|
280
|
+
ui: {
|
|
281
|
+
tab: "providers",
|
|
282
|
+
label: "Credential Ranking",
|
|
283
|
+
description: "Choose balanced distribution or earliest-reset-first OAuth account selection.",
|
|
284
|
+
},
|
|
285
|
+
},
|
|
286
|
+
"auth.credentialPins": {
|
|
287
|
+
type: "record",
|
|
288
|
+
default: {} as Record<string, string>,
|
|
289
|
+
valueSchema: { type: "credential-selector" } as const,
|
|
290
|
+
},
|
|
291
|
+
"auth.credentialPinStoreIdentity": { type: "string", default: undefined },
|
|
273
292
|
"session.directoryMigration": {
|
|
274
293
|
type: "enum",
|
|
275
294
|
values: ["copy-retain", "disabled"] as const,
|
|
@@ -293,6 +312,12 @@ export const SETTINGS_SCHEMA = {
|
|
|
293
312
|
description: "SDK-owned prompt deadline; ACP has no separate timeout.",
|
|
294
313
|
validate: (value: number) => Number.isSafeInteger(value) && value >= 60_000 && value <= 86_400_000,
|
|
295
314
|
},
|
|
315
|
+
"sdk.promptMaxRuntimeMs": {
|
|
316
|
+
type: "number",
|
|
317
|
+
default: 21_600_000,
|
|
318
|
+
description: "Hard maximum runtime for an SDK prompt from acceptance, bounding progress-aware renewals.",
|
|
319
|
+
validate: (value: number) => Number.isSafeInteger(value) && value >= 60_000 && value <= 86_400_000,
|
|
320
|
+
},
|
|
296
321
|
|
|
297
322
|
// Notifications (shared daemon with Telegram/Discord/Slack presentation adapters)
|
|
298
323
|
"notifications.enabled": { type: "boolean", default: false },
|
|
@@ -416,7 +441,7 @@ export const SETTINGS_SCHEMA = {
|
|
|
416
441
|
tab: "interaction",
|
|
417
442
|
label: "Terminal Bell",
|
|
418
443
|
description:
|
|
419
|
-
"Emit a BEL character for local terminal notifications. Windows Terminal may keep BEL silent depending on profile/system sound settings; use completion.notifyCommand for a PowerShell Console.Beep workaround.",
|
|
444
|
+
"Emit a BEL character for local terminal notifications. macOS enables this by default unless explicitly disabled. Windows Terminal may keep BEL silent depending on profile/system sound settings; use completion.notifyCommand for a PowerShell Console.Beep workaround.",
|
|
420
445
|
},
|
|
421
446
|
},
|
|
422
447
|
"notifications.bellOnComplete": {
|
|
@@ -606,6 +631,11 @@ export const SETTINGS_SCHEMA = {
|
|
|
606
631
|
default: 1,
|
|
607
632
|
validate: (value: number) => Number.isInteger(value) && value >= 1 && value <= 10,
|
|
608
633
|
},
|
|
634
|
+
"gjc.ultragoal.nudgeBudget": {
|
|
635
|
+
type: "number",
|
|
636
|
+
default: 10,
|
|
637
|
+
validate: (value: number) => Number.isInteger(value) && value >= 0,
|
|
638
|
+
},
|
|
609
639
|
|
|
610
640
|
// ────────────────────────────────────────────────────────────────────────
|
|
611
641
|
// Appearance
|
|
@@ -752,7 +782,7 @@ export const SETTINGS_SCHEMA = {
|
|
|
752
782
|
ui: {
|
|
753
783
|
tab: "appearance",
|
|
754
784
|
label: "Gajae Pet",
|
|
755
|
-
description: "
|
|
785
|
+
description: "Real-pixel pet living beside the composer (sixel/kitty terminals)",
|
|
756
786
|
options: [
|
|
757
787
|
{ value: "off", label: "Off", description: "No pet" },
|
|
758
788
|
...PET_SKIN_IDS.map(id => ({
|
|
@@ -1571,6 +1601,17 @@ export const SETTINGS_SCHEMA = {
|
|
|
1571
1601
|
},
|
|
1572
1602
|
},
|
|
1573
1603
|
|
|
1604
|
+
"crashReport.nudge": {
|
|
1605
|
+
type: "boolean",
|
|
1606
|
+
default: true,
|
|
1607
|
+
ui: {
|
|
1608
|
+
tab: "interaction",
|
|
1609
|
+
label: "Crash Report Nudge",
|
|
1610
|
+
description:
|
|
1611
|
+
"At interactive startup, show one rate-limited line when unreported crash signatures exist. Reads local state only; nothing is ever transmitted without the explicit consent flow in `gjc crash report`.",
|
|
1612
|
+
},
|
|
1613
|
+
},
|
|
1614
|
+
|
|
1574
1615
|
collapseChangelog: {
|
|
1575
1616
|
type: "boolean",
|
|
1576
1617
|
default: false,
|
|
@@ -3304,7 +3345,8 @@ export const SETTINGS_SCHEMA = {
|
|
|
3304
3345
|
ui: {
|
|
3305
3346
|
tab: "tasks",
|
|
3306
3347
|
label: "Prefer Task Delegation",
|
|
3307
|
-
description:
|
|
3348
|
+
description:
|
|
3349
|
+
"Encourage the agent to delegate work to subagents unless changes are trivial (on by default when executor/planner run on a different provider than the default role)",
|
|
3308
3350
|
},
|
|
3309
3351
|
},
|
|
3310
3352
|
|
|
@@ -3479,9 +3521,29 @@ export const SETTINGS_SCHEMA = {
|
|
|
3479
3521
|
|
|
3480
3522
|
"skills.enableClaudeProject": { type: "boolean", default: DEFAULT_SKILL_DISCOVERY_SETTINGS.enableClaudeProject },
|
|
3481
3523
|
|
|
3482
|
-
"skills.
|
|
3524
|
+
"skills.trustProjectSkills": {
|
|
3525
|
+
type: "boolean",
|
|
3526
|
+
ui: {
|
|
3527
|
+
tab: "customization",
|
|
3528
|
+
label: "Trust Project Skills",
|
|
3529
|
+
description:
|
|
3530
|
+
"Load skills from project .gjc/skills, .claude/skills, and .codex/skills. Set to false to ignore project-controlled skills while keeping user skills.",
|
|
3531
|
+
},
|
|
3532
|
+
},
|
|
3533
|
+
|
|
3534
|
+
"skills.trustUserSkills": {
|
|
3535
|
+
type: "boolean",
|
|
3536
|
+
ui: {
|
|
3537
|
+
tab: "customization",
|
|
3538
|
+
label: "Trust User Skills",
|
|
3539
|
+
description:
|
|
3540
|
+
"Load skills from ~/.gjc/agent/skills (and legacy ~/.gjc/skills / <config>/skills). Set to false to ignore user-installed skills while keeping project skills.",
|
|
3541
|
+
},
|
|
3542
|
+
},
|
|
3543
|
+
|
|
3544
|
+
"skills.enablePiUser": { type: "boolean", ui: { tab: "customization", label: "Trust User Skills (legacy)" } },
|
|
3483
3545
|
|
|
3484
|
-
"skills.enablePiProject": { type: "boolean",
|
|
3546
|
+
"skills.enablePiProject": { type: "boolean", ui: { tab: "customization", label: "Trust Project Skills (legacy)" } },
|
|
3485
3547
|
|
|
3486
3548
|
"skills.customDirectories": { type: "array", default: DEFAULT_SKILL_DISCOVERY_SETTINGS.customDirectories },
|
|
3487
3549
|
|
|
@@ -3810,7 +3872,7 @@ export function getEnumValues(path: SettingPath): readonly string[] | undefined
|
|
|
3810
3872
|
return "values" in def ? (def.values as readonly string[]) : undefined;
|
|
3811
3873
|
}
|
|
3812
3874
|
|
|
3813
|
-
export
|
|
3875
|
+
export { CONFIG_SCHEMA_VERSION } from "./config-schema-version";
|
|
3814
3876
|
|
|
3815
3877
|
export type SettingsSchemaIssue = {
|
|
3816
3878
|
path: string;
|
|
@@ -3866,6 +3928,14 @@ function validRecordValue(valueSchema: RecordValueDef, value: unknown): boolean
|
|
|
3866
3928
|
if (valueSchema.type === "model-selector-value") {
|
|
3867
3929
|
return typeof value === "string" || (Array.isArray(value) && value.every(item => typeof item === "string"));
|
|
3868
3930
|
}
|
|
3931
|
+
if (valueSchema.type === "credential-selector") {
|
|
3932
|
+
return (
|
|
3933
|
+
typeof value === "string" &&
|
|
3934
|
+
((value.startsWith("id:") && /^[1-9]\d*$/.test(value.slice(3))) ||
|
|
3935
|
+
/^email:[^@\s]+@[^@\s]+$/.test(value) ||
|
|
3936
|
+
/^account:\S+$/.test(value))
|
|
3937
|
+
);
|
|
3938
|
+
}
|
|
3869
3939
|
return typeof value === "string" && valueSchema.values.includes(value);
|
|
3870
3940
|
}
|
|
3871
3941
|
|