@gajae-code/coding-agent 0.13.3 → 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 +184 -2
- 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 +9 -1
- package/dist/types/config/models-config-schema.d.ts +2 -0
- package/dist/types/config/settings-schema.d.ts +70 -6
- 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 +1 -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/gajae-pet-widget.d.ts +8 -30
- 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 +11 -25
- 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/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 +40 -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 +9 -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 +20 -1
- package/src/config/model-profiles.ts +29 -19
- package/src/config/model-registry.ts +132 -21
- package/src/config/models-config-schema.ts +1 -1
- package/src/config/settings-schema.ts +76 -6
- 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/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 +40 -32
- package/src/main.ts +32 -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/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/gajae-pet-widget.ts +539 -213
- package/src/modes/components/irc-sidebar.ts +11 -0
- package/src/modes/components/iterm-pet-transport.ts +585 -0
- package/src/modes/components/oauth-selector.ts +277 -86
- package/src/modes/components/pet-capability.ts +39 -40
- package/src/modes/components/settings-selector.ts +9 -0
- package/src/modes/components/status-line/gh.ts +45 -1
- package/src/modes/components/status-line/segments.ts +16 -1
- 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 +177 -72
- 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/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 +2857 -582
- 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 +173 -12
- package/src/session/messages.ts +1 -1
- package/src/session/secure-token-file.ts +80 -0
- package/src/session/session-manager.ts +730 -58
- 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 +98 -16
- 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 +27 -16
- 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/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
|
@@ -26,12 +26,14 @@ import {
|
|
|
26
26
|
PROVIDER_DESCRIPTORS,
|
|
27
27
|
readModelCache,
|
|
28
28
|
registerCustomApi,
|
|
29
|
+
resolveOAuthStorageProvider,
|
|
29
30
|
type SimpleStreamOptions,
|
|
30
31
|
type ThinkingConfig,
|
|
31
32
|
UNK_CONTEXT_WINDOW,
|
|
32
33
|
UNK_MAX_TOKENS,
|
|
33
34
|
unregisterCustomApis,
|
|
34
35
|
} from "@gajae-code/ai/core";
|
|
36
|
+
import { resolveLoopbackOpenAIBaseUrl } from "@gajae-code/ai/utils/discovery/openai-compatible";
|
|
35
37
|
|
|
36
38
|
// Sentinel for local-only OAuth token (LM Studio, vLLM) — declared inline to avoid loading
|
|
37
39
|
// any provider module at startup. Must match `DEFAULT_LOCAL_TOKEN` in oauth/lm-studio.ts.
|
|
@@ -94,6 +96,14 @@ export type { CanonicalModelIndex, CanonicalModelRecord, CanonicalModelVariant,
|
|
|
94
96
|
export { isAuthenticated, kNoAuth };
|
|
95
97
|
|
|
96
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
|
+
}
|
|
97
107
|
function redactDiscoveryUrl(value: string | URL): string {
|
|
98
108
|
try {
|
|
99
109
|
const url = typeof value === "string" ? new URL(value) : value;
|
|
@@ -180,7 +190,9 @@ export function requiresExplicitThinkingChoice(model: Model, role: GjcModelAssig
|
|
|
180
190
|
(model.provider === "xai" && (model.id === "grok-4.5" || model.id === "grok-4.6"))
|
|
181
191
|
)
|
|
182
192
|
return true;
|
|
183
|
-
|
|
193
|
+
if (role === null) return false;
|
|
194
|
+
if (role === "default") return true;
|
|
195
|
+
return GJC_MODEL_ASSIGNMENT_TARGETS[role].settingsPath === "task.agentModelOverrides";
|
|
184
196
|
}
|
|
185
197
|
|
|
186
198
|
/** Alias for ModelRoleInfo - used for both built-in and custom roles */
|
|
@@ -594,7 +606,8 @@ function getProviderBaseUrlEnvKeys(provider: string): string[] {
|
|
|
594
606
|
* never the project `.env`.
|
|
595
607
|
*/
|
|
596
608
|
function resolveProviderBaseUrlFromEnv(provider: string): string | undefined {
|
|
597
|
-
|
|
609
|
+
const baseUrl = $pickCredentialEnv(...getProviderBaseUrlEnvKeys(provider));
|
|
610
|
+
return provider === "omlx" && baseUrl ? resolveLoopbackOpenAIBaseUrl(baseUrl, "http://127.0.0.1:8080/v1") : baseUrl;
|
|
598
611
|
}
|
|
599
612
|
|
|
600
613
|
function normalizeLocalOpenAICompatBaseUrl(baseUrl: string): string {
|
|
@@ -790,10 +803,8 @@ function extractGoogleOAuthToken(value: string | undefined): string | undefined
|
|
|
790
803
|
}
|
|
791
804
|
|
|
792
805
|
function getOAuthCredentialsForProvider(authStorage: AuthStorage, provider: string): OAuthCredential[] {
|
|
793
|
-
const providerEntry = authStorage.getAll()[provider];
|
|
794
|
-
if (!providerEntry)
|
|
795
|
-
return [];
|
|
796
|
-
}
|
|
806
|
+
const providerEntry = authStorage.getAll()[resolveOAuthStorageProvider(provider)];
|
|
807
|
+
if (!providerEntry) return [];
|
|
797
808
|
const entries = Array.isArray(providerEntry) ? providerEntry : [providerEntry];
|
|
798
809
|
return entries.filter((entry): entry is OAuthCredential => entry.type === "oauth");
|
|
799
810
|
}
|
|
@@ -1257,7 +1268,15 @@ export class ModelRegistry {
|
|
|
1257
1268
|
#configuredDiscoveryProviderIds: ReadonlySet<string> = new Set();
|
|
1258
1269
|
#descriptorDiscoveryEvidence = new Map<
|
|
1259
1270
|
string,
|
|
1260
|
-
{
|
|
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
|
+
}
|
|
1261
1280
|
>();
|
|
1262
1281
|
#descriptorDiscoveryGenerations = new Map<string, number>();
|
|
1263
1282
|
#configuredDiscoveryEvidence = new Map<
|
|
@@ -1677,7 +1696,9 @@ export class ModelRegistry {
|
|
|
1677
1696
|
|
|
1678
1697
|
#normalizeDiscoverableModels(providerConfig: DiscoveryProviderConfig, models: Model<Api>[]): Model<Api>[] {
|
|
1679
1698
|
const liveBaseUrl =
|
|
1680
|
-
providerConfig.discovery.type === "openai-models-list" ||
|
|
1699
|
+
providerConfig.discovery.type === "openai-models-list" ||
|
|
1700
|
+
providerConfig.discovery.type === "lm-studio" ||
|
|
1701
|
+
providerConfig.discovery.type === "omlx"
|
|
1681
1702
|
? this.#normalizeOpenAIModelsListBaseUrl(
|
|
1682
1703
|
this.#getProviderBaseUrlForDiscovery(providerConfig.provider) ?? providerConfig.baseUrl,
|
|
1683
1704
|
)
|
|
@@ -1701,7 +1722,9 @@ export class ModelRegistry {
|
|
|
1701
1722
|
});
|
|
1702
1723
|
}
|
|
1703
1724
|
#sanitizeDiscoverableModelsForCache(providerConfig: DiscoveryProviderConfig, models: Model<Api>[]): Model<Api>[] {
|
|
1704
|
-
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"
|
|
1705
1728
|
? this.#stripModelBaseUrlQueries(models)
|
|
1706
1729
|
: models;
|
|
1707
1730
|
}
|
|
@@ -1754,6 +1777,18 @@ export class ModelRegistry {
|
|
|
1754
1777
|
this.#optionalAuthProviders.add("lm-studio");
|
|
1755
1778
|
this.#keylessProviders.add("lm-studio");
|
|
1756
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
|
+
}
|
|
1757
1792
|
}
|
|
1758
1793
|
|
|
1759
1794
|
#loadCustomModels(): CustomModelsResult {
|
|
@@ -2445,6 +2480,7 @@ export class ModelRegistry {
|
|
|
2445
2480
|
case "llama.cpp":
|
|
2446
2481
|
return this.#discoverLlamaCppModels(providerConfig, apiKey);
|
|
2447
2482
|
case "lm-studio":
|
|
2483
|
+
case "omlx":
|
|
2448
2484
|
case "openai-models-list":
|
|
2449
2485
|
return this.#discoverOpenAIModelsList(providerConfig, apiKey);
|
|
2450
2486
|
case "models-dev":
|
|
@@ -2606,12 +2642,13 @@ export class ModelRegistry {
|
|
|
2606
2642
|
const manager = createModelManager({
|
|
2607
2643
|
...options,
|
|
2608
2644
|
cacheDbPath: this.#cacheDbPath,
|
|
2645
|
+
cacheDynamicModelProvenance: Bun.hash(`${authGeneration}\u0000${endpoint}`).toString(36),
|
|
2609
2646
|
canPublishCache: isCurrentDiscovery,
|
|
2610
2647
|
...(options.fetchDynamicModels
|
|
2611
2648
|
? {
|
|
2612
2649
|
fetchDynamicModels: async () => {
|
|
2613
2650
|
const models = await options.fetchDynamicModels?.();
|
|
2614
|
-
if (models === null) return null;
|
|
2651
|
+
if (models === null || models === undefined) return null;
|
|
2615
2652
|
const sanitizedModels = this.#stripModelBaseUrlQueries(models ?? []);
|
|
2616
2653
|
if (canUseCredentialDerivedXiaomiEndpoint) {
|
|
2617
2654
|
credentialDerivedEndpoint = sanitizedModels[0]?.baseUrl;
|
|
@@ -2645,9 +2682,15 @@ export class ModelRegistry {
|
|
|
2645
2682
|
...(baseUrl !== model.baseUrl ? { baseUrl } : {}),
|
|
2646
2683
|
};
|
|
2647
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);
|
|
2648
2689
|
if (
|
|
2649
2690
|
isCurrentDiscovery() &&
|
|
2691
|
+
!preservesExistingDescriptorEvidence &&
|
|
2650
2692
|
(result.fetched ||
|
|
2693
|
+
result.dynamicModelIds !== undefined ||
|
|
2651
2694
|
result.stale ||
|
|
2652
2695
|
this.#descriptorDiscoveryEvidence.get(options.providerId)?.authGeneration !== authGeneration ||
|
|
2653
2696
|
this.#descriptorDiscoveryEvidence.get(options.providerId)?.endpoint !== endpoint)
|
|
@@ -2655,6 +2698,13 @@ export class ModelRegistry {
|
|
|
2655
2698
|
this.#descriptorDiscoveryEvidence.set(options.providerId, {
|
|
2656
2699
|
fresh: result.fetched,
|
|
2657
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
|
+
}),
|
|
2658
2708
|
authGeneration,
|
|
2659
2709
|
endpoint: this.#normalizeDiscoveryEvidenceEndpoint(models[0]?.baseUrl ?? endpoint),
|
|
2660
2710
|
});
|
|
@@ -2974,20 +3024,21 @@ export class ModelRegistry {
|
|
|
2974
3024
|
}
|
|
2975
3025
|
throw new Error(`HTTP ${response.status} from ${redactDiscoveryUrl(modelsUrl)}`);
|
|
2976
3026
|
}
|
|
2977
|
-
const payload =
|
|
2978
|
-
|
|
2979
|
-
|
|
2980
|
-
|
|
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;
|
|
2981
3032
|
const discovered: Model<Api>[] = [];
|
|
2982
3033
|
for (const item of models) {
|
|
3034
|
+
if (!isRecord(item) || typeof item.id !== "string" || !item.id.trim()) continue;
|
|
2983
3035
|
const id = item.id;
|
|
2984
|
-
if (!id) continue;
|
|
2985
3036
|
const referenceModel = resolveCustomModelReference(id);
|
|
2986
3037
|
const api = this.#resolveDiscoveredModelApi(providerConfig, id);
|
|
2987
3038
|
discovered.push(
|
|
2988
3039
|
enrichModelThinking({
|
|
2989
3040
|
id,
|
|
2990
|
-
name: item.name
|
|
3041
|
+
name: typeof item.name === "string" ? item.name : (referenceModel?.name ?? id),
|
|
2991
3042
|
api,
|
|
2992
3043
|
provider: providerConfig.provider,
|
|
2993
3044
|
baseUrl: requestBaseUrl,
|
|
@@ -2996,8 +3047,23 @@ export class ModelRegistry {
|
|
|
2996
3047
|
input: referenceModel?.input ?? ["text"],
|
|
2997
3048
|
output: referenceModel?.output,
|
|
2998
3049
|
cost: referenceModel?.cost ?? { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
|
2999
|
-
contextWindow:
|
|
3000
|
-
|
|
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,
|
|
3001
3067
|
headers: providerConfig.headers,
|
|
3002
3068
|
compat: {
|
|
3003
3069
|
...referenceModel?.compat,
|
|
@@ -3707,6 +3773,39 @@ export class ModelRegistry {
|
|
|
3707
3773
|
this.#availableModelsEnvFingerprint = envFingerprint;
|
|
3708
3774
|
return this.#availableModelsCache;
|
|
3709
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
|
+
|
|
3710
3809
|
#hasFreshOrStaticModelEvidence(model: Model<Api>): boolean {
|
|
3711
3810
|
const evidence = this.#providerActivity.get(model.provider);
|
|
3712
3811
|
if (
|
|
@@ -3767,7 +3866,9 @@ export class ModelRegistry {
|
|
|
3767
3866
|
this.#normalizeDiscoveryEvidenceEndpoint(
|
|
3768
3867
|
discoveryType === "ollama"
|
|
3769
3868
|
? `${this.#normalizeOllamaBaseUrl(baseUrl)}/v1`
|
|
3770
|
-
: discoveryType === "openai-models-list" ||
|
|
3869
|
+
: discoveryType === "openai-models-list" ||
|
|
3870
|
+
discoveryType === "lm-studio" ||
|
|
3871
|
+
discoveryType === "omlx"
|
|
3771
3872
|
? this.#normalizeOpenAIModelsListBaseUrl(baseUrl)
|
|
3772
3873
|
: (baseUrl ?? ""),
|
|
3773
3874
|
);
|
|
@@ -3890,13 +3991,18 @@ export class ModelRegistry {
|
|
|
3890
3991
|
async getApiKey(
|
|
3891
3992
|
model: Model<Api>,
|
|
3892
3993
|
sessionId?: string,
|
|
3893
|
-
options: {
|
|
3994
|
+
options: {
|
|
3995
|
+
credentialSelector?: AuthCredentialSelector;
|
|
3996
|
+
preferredCredentialSelector?: AuthCredentialSelector;
|
|
3997
|
+
signal?: AbortSignal;
|
|
3998
|
+
} = {},
|
|
3894
3999
|
): Promise<string | undefined> {
|
|
3895
4000
|
return this.#getApiKeyOrNoAuth(model.provider, () =>
|
|
3896
4001
|
this.authStorage.getApiKey(model.provider, sessionId, {
|
|
3897
4002
|
baseUrl: model.baseUrl,
|
|
3898
4003
|
modelId: model.id,
|
|
3899
4004
|
credentialSelector: options.credentialSelector,
|
|
4005
|
+
preferredCredentialSelector: options.preferredCredentialSelector,
|
|
3900
4006
|
signal: options.signal,
|
|
3901
4007
|
}),
|
|
3902
4008
|
);
|
|
@@ -3909,12 +4015,17 @@ export class ModelRegistry {
|
|
|
3909
4015
|
provider: string,
|
|
3910
4016
|
sessionId?: string,
|
|
3911
4017
|
baseUrl?: string,
|
|
3912
|
-
options: {
|
|
4018
|
+
options: {
|
|
4019
|
+
credentialSelector?: AuthCredentialSelector;
|
|
4020
|
+
preferredCredentialSelector?: AuthCredentialSelector;
|
|
4021
|
+
signal?: AbortSignal;
|
|
4022
|
+
} = {},
|
|
3913
4023
|
): Promise<string | undefined> {
|
|
3914
4024
|
return this.#getApiKeyOrNoAuth(provider, () =>
|
|
3915
4025
|
this.authStorage.getApiKey(provider, sessionId, {
|
|
3916
4026
|
baseUrl,
|
|
3917
4027
|
credentialSelector: options.credentialSelector,
|
|
4028
|
+
preferredCredentialSelector: options.preferredCredentialSelector,
|
|
3918
4029
|
signal: options.signal,
|
|
3919
4030
|
}),
|
|
3920
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
|
|
@@ -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
|
|