@gajae-code/coding-agent 0.18.12 → 0.19.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 +467 -0
- package/dist/types/capability/rule.d.ts +7 -2
- package/dist/types/cli/append-system-prompt.d.ts +6 -0
- package/dist/types/cli/args.d.ts +7 -2
- package/dist/types/cli/customize-doctor-precedence.d.ts +16 -0
- package/dist/types/cli/customize-doctor.d.ts +4 -3
- package/dist/types/cli/public-command-errors.d.ts +1 -0
- package/dist/types/cli/root-flags.d.ts +0 -12
- package/dist/types/cli/update-cli.d.ts +7 -2
- package/dist/types/cli-main.d.ts +0 -6
- package/dist/types/commands/launch.d.ts +0 -6
- package/dist/types/commands/migrate.d.ts +1 -1
- package/dist/types/commands/sdk.d.ts +8 -0
- package/dist/types/commit/map-reduce/index.d.ts +4 -4
- package/dist/types/config/autorouting-tier-map.d.ts +23 -1
- package/dist/types/config/config-hot-reload.d.ts +5 -0
- package/dist/types/config/file-lock.d.ts +44 -2
- package/dist/types/config/model-profile-activation.d.ts +19 -5
- package/dist/types/config/model-registry.d.ts +16 -3
- package/dist/types/config/model-resolver.d.ts +5 -4
- package/dist/types/config/settings-schema.d.ts +11 -1
- package/dist/types/coordinator-mcp/server.d.ts +4 -0
- package/dist/types/customization/import.d.ts +2 -0
- package/dist/types/customization/types.d.ts +1 -1
- package/dist/types/dap/session.d.ts +11 -2
- package/dist/types/discovery/helpers.d.ts +7 -2
- package/dist/types/edit/index.d.ts +5 -0
- package/dist/types/edit/modes/patch.d.ts +9 -0
- package/dist/types/eval/py/runtime.d.ts +9 -0
- package/dist/types/export/ttsr.d.ts +19 -0
- package/dist/types/extensibility/extensions/types.d.ts +5 -1
- package/dist/types/extensibility/slash-commands.d.ts +1 -0
- package/dist/types/gjc-runtime/ralplan-current-final.d.ts +54 -0
- package/dist/types/gjc-runtime/ralplan-runtime.d.ts +5 -0
- package/dist/types/gjc-runtime/tmux-sessions.d.ts +24 -0
- package/dist/types/gjc-runtime/ultragoal-change-set.d.ts +6 -0
- package/dist/types/gjc-runtime/ultragoal-runtime.d.ts +1 -0
- package/dist/types/harness-control-plane/receipt-spool.d.ts +4 -0
- package/dist/types/hindsight/content.d.ts +5 -6
- package/dist/types/internal-urls/types.d.ts +2 -0
- package/dist/types/lsp/clients/swiftlint-client.d.ts +0 -4
- package/dist/types/main.d.ts +23 -18
- package/dist/types/migrate/action-planner.d.ts +10 -1
- package/dist/types/migrate/adapters/codex.d.ts +1 -1
- package/dist/types/migrate/adapters/index.d.ts +35 -3
- package/dist/types/migrate/hook-module.d.ts +23 -0
- package/dist/types/migrate/report.d.ts +2 -1
- package/dist/types/migrate/types.d.ts +69 -2
- package/dist/types/modes/components/agent-dashboard.d.ts +1 -1
- package/dist/types/modes/components/model-selector.d.ts +43 -0
- package/dist/types/modes/prompt-suggestion-controller.d.ts +1 -1
- package/dist/types/modes/utils/host-status.d.ts +15 -11
- package/dist/types/runtime-mcp/project-host-values.d.ts +11 -5
- package/dist/types/sdk/broker/broker-exit.d.ts +1 -1
- package/dist/types/sdk/broker/broker.d.ts +22 -1
- package/dist/types/sdk/broker/ensure.d.ts +5 -2
- package/dist/types/sdk/broker/hop.d.ts +9 -0
- package/dist/types/sdk/broker/lifecycle.d.ts +22 -0
- package/dist/types/sdk/broker/session-index.d.ts +2 -0
- package/dist/types/sdk/broker/transport.d.ts +2 -0
- package/dist/types/sdk/bus/index.d.ts +21 -0
- package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +7 -1
- package/dist/types/sdk/bus/telegram-daemon.d.ts +2 -0
- package/dist/types/sdk/bus/threaded-render.d.ts +2 -1
- package/dist/types/sdk/host/control/operations.d.ts +5 -1
- package/dist/types/sdk/host/events.d.ts +4 -0
- package/dist/types/sdk/host/host.d.ts +2 -1
- package/dist/types/sdk/host/prompt-image-upload.d.ts +43 -0
- package/dist/types/sdk/host/session-runtime.d.ts +8 -8
- package/dist/types/sdk/host/surface-policy.d.ts +2 -1
- package/dist/types/sdk/lifecycle/service.d.ts +12 -0
- package/dist/types/sdk/prompt-status.d.ts +11 -4
- package/dist/types/session/agent-session.d.ts +50 -8
- package/dist/types/session/session-manager.d.ts +16 -0
- package/dist/types/skill-state/workflow-mutation-guard.d.ts +13 -1
- package/dist/types/slash-commands/helpers/mcp.d.ts +5 -0
- package/dist/types/ssh/ssh-executor.d.ts +8 -1
- package/dist/types/system-prompt.d.ts +3 -2
- package/dist/types/task/role-body.d.ts +11 -0
- package/dist/types/tools/awaiting-input.d.ts +28 -0
- package/dist/types/tools/bash-allowed-prefixes.d.ts +6 -0
- package/dist/types/tools/bash-skill-urls.d.ts +4 -0
- package/dist/types/tools/bash.d.ts +7 -0
- package/dist/types/tools/descriptors.d.ts +13 -2
- package/dist/types/tools/fetch.d.ts +6 -0
- package/dist/types/tools/irc.d.ts +5 -3
- package/dist/types/tools/tmux-self-injection-guard.d.ts +2 -0
- package/dist/types/tools/ultragoal-ask-guard.d.ts +1 -1
- package/dist/types/tools/write.d.ts +2 -0
- package/dist/types/utils/file-mentions.d.ts +5 -0
- package/dist/types/utils/image-limits.d.ts +7 -0
- package/dist/types/utils/image-loading.d.ts +0 -1
- package/dist/types/utils/open.d.ts +0 -1
- package/dist/types/utils/pasted-image-loading.d.ts +1 -5
- package/dist/types/utils/prompt-suggestion.d.ts +2 -2
- package/dist/types/utils/shell-snapshot.d.ts +2 -0
- package/dist/types/utils/title-generator.d.ts +13 -3
- package/dist/types/web/search/providers/codex.d.ts +6 -7
- package/package.json +9 -8
- package/scripts/acp-conformance-agent.ts +12 -2
- package/scripts/generate-sdk-operation-inventory.ts +16 -0
- package/src/capability/fs.ts +31 -3
- package/src/capability/rule.ts +11 -2
- package/src/cli/append-system-prompt.ts +12 -0
- package/src/cli/args.ts +11 -7
- package/src/cli/customize-doctor-precedence.ts +31 -0
- package/src/cli/customize-doctor.ts +49 -39
- package/src/cli/fast-help.ts +0 -2
- package/src/cli/migrate-cli.ts +14 -3
- package/src/cli/public-command-errors.ts +2 -0
- package/src/cli/root-flags.ts +0 -2
- package/src/cli/update-cli.ts +247 -6
- package/src/commands/harness.ts +25 -15
- package/src/commands/migrate.ts +3 -3
- package/src/commands/sdk.ts +81 -11
- package/src/commit/agentic/agent.ts +6 -6
- package/src/commit/analysis/conventional.ts +14 -5
- package/src/commit/map-reduce/index.ts +7 -7
- package/src/commit/pipeline.ts +12 -12
- package/src/config/autorouting-tier-map.ts +20 -1
- package/src/config/config-file.ts +106 -3
- package/src/config/config-hot-reload.ts +8 -0
- package/src/config/file-lock.ts +1431 -304
- package/src/config/keybindings.ts +154 -7
- package/src/config/model-profile-activation.ts +177 -39
- package/src/config/model-registry.ts +380 -55
- package/src/config/model-resolver.ts +49 -21
- package/src/config/settings-schema.ts +13 -1
- package/src/config/settings.ts +2 -0
- package/src/coordinator-mcp/server.ts +37 -2
- package/src/crash/sanitize.ts +3 -1
- package/src/customization/import.ts +276 -7
- package/src/customization/inventory.ts +24 -8
- package/src/customization/types.ts +1 -0
- package/src/dap/client.ts +3 -2
- package/src/dap/session.ts +161 -36
- package/src/debug/crash-diagnostics.ts +87 -5
- package/src/debug/report-bundle.ts +71 -2
- package/src/discovery/builtin.ts +4 -3
- package/src/discovery/helpers.ts +24 -14
- package/src/edit/index.ts +191 -5
- package/src/edit/modes/patch.ts +27 -0
- package/src/eval/py/runtime.ts +44 -4
- package/src/exec/non-interactive-env.ts +0 -1
- package/src/export/html/index.ts +60 -20
- package/src/export/ttsr.ts +176 -1
- package/src/extensibility/extensions/loader.ts +2 -0
- package/src/extensibility/extensions/ouroboros-ooo-bridge.ts +63 -1
- package/src/extensibility/extensions/types.ts +5 -1
- package/src/extensibility/hooks/loader.ts +10 -2
- package/src/extensibility/plugins/marketplace/manager.ts +36 -10
- package/src/extensibility/slash-commands.ts +5 -0
- package/src/gjc-runtime/gc-runtime.ts +4 -1
- package/src/gjc-runtime/launch-tmux.ts +23 -13
- package/src/gjc-runtime/ralplan-current-final.ts +294 -0
- package/src/gjc-runtime/ralplan-runtime.ts +95 -1
- package/src/gjc-runtime/state-writer.ts +109 -5
- package/src/gjc-runtime/tmux-sessions.ts +93 -13
- package/src/gjc-runtime/ultragoal-change-set.ts +90 -11
- package/src/gjc-runtime/ultragoal-guard.ts +9 -1
- package/src/gjc-runtime/ultragoal-runtime.ts +15 -5
- package/src/harness-control-plane/finalize.ts +11 -0
- package/src/harness-control-plane/receipt-spool.ts +105 -28
- package/src/harness-control-plane/storage.ts +124 -6
- package/src/hindsight/content.ts +116 -16
- package/src/hindsight/mental-models.ts +22 -10
- package/src/hindsight/state.ts +7 -4
- package/src/hooks/native-skill-hook.ts +3 -1
- package/src/internal-urls/artifact-protocol.ts +3 -1
- package/src/internal-urls/docs-index.generated.ts +14 -14
- package/src/internal-urls/local-protocol.ts +28 -3
- package/src/internal-urls/types.ts +2 -0
- package/src/lsp/client.ts +2 -1
- package/src/lsp/clients/biome-client.ts +2 -0
- package/src/lsp/clients/swiftlint-client.ts +2 -0
- package/src/main.ts +330 -92
- package/src/memories/index.ts +25 -2
- package/src/migrate/action-planner.ts +517 -2
- package/src/migrate/adapters/claude-code.ts +141 -3
- package/src/migrate/adapters/codex.ts +57 -5
- package/src/migrate/adapters/index.ts +240 -5
- package/src/migrate/adapters/opencode.ts +4 -0
- package/src/migrate/executor.ts +141 -3
- package/src/migrate/hook-module.ts +193 -0
- package/src/migrate/report.ts +45 -1
- package/src/migrate/types.ts +73 -3
- package/src/modes/acp/acp-agent.ts +10 -1
- package/src/modes/components/agent-dashboard.ts +20 -4
- package/src/modes/components/customization/customization-dashboard.ts +7 -0
- package/src/modes/components/customization/import-wizard.ts +29 -3
- package/src/modes/components/model-selector.ts +157 -103
- package/src/modes/components/welcome.ts +3 -1
- package/src/modes/controllers/command-controller.ts +271 -16
- package/src/modes/controllers/event-controller.ts +1 -1
- package/src/modes/controllers/extension-ui-controller.ts +31 -1
- package/src/modes/controllers/goal-mode-controller.ts +79 -10
- package/src/modes/controllers/input-controller.ts +2 -0
- package/src/modes/controllers/plan-mode-controller.ts +49 -4
- package/src/modes/controllers/runtime-mcp-command-controller.ts +7 -6
- package/src/modes/controllers/selector-controller.ts +14 -1
- package/src/modes/interactive-mode.ts +55 -4
- package/src/modes/prompt-suggestion-controller.ts +1 -1
- package/src/modes/runtime-init.ts +5 -1
- package/src/modes/utils/host-status.ts +21 -10
- package/src/prompts/agent-fragments/browser-aside.md +2 -2
- package/src/prompts/system/irc-incoming.md +3 -1
- package/src/prompts/tools/irc.md +1 -1
- package/src/runtime-mcp/manager.ts +8 -3
- package/src/runtime-mcp/project-host-values.ts +12 -8
- package/src/runtime-mcp/tool-bridge.ts +68 -4
- package/src/runtime-mcp/transports/stdio.ts +2 -1
- package/src/sdk/broker/broker-exit.ts +2 -0
- package/src/sdk/broker/broker.ts +143 -4
- package/src/sdk/broker/ensure.ts +74 -6
- package/src/sdk/broker/hop.ts +13 -1
- package/src/sdk/broker/lifecycle-ledger.ts +3 -0
- package/src/sdk/broker/lifecycle.ts +102 -6
- package/src/sdk/broker/session-index.ts +29 -4
- package/src/sdk/broker/transport.ts +17 -1
- package/src/sdk/bus/chat-daemon-control.ts +2 -2
- package/src/sdk/bus/index.ts +408 -14
- package/src/sdk/bus/session-control.ts +2 -0
- package/src/sdk/bus/slack-daemon.ts +105 -9
- package/src/sdk/bus/telegram-daemon-contract.ts +7 -1
- package/src/sdk/bus/telegram-daemon.ts +10 -2
- package/src/sdk/bus/threaded-render.ts +20 -1
- package/src/sdk/cli/session-cli.ts +2 -0
- package/src/sdk/host/control/dispatch.ts +13 -1
- package/src/sdk/host/control/operations.ts +10 -1
- package/src/sdk/host/events.ts +67 -4
- package/src/sdk/host/host.ts +8 -2
- package/src/sdk/host/prompt-image-upload.ts +438 -0
- package/src/sdk/host/sdk-surface-parity.test.ts +15 -0
- package/src/sdk/host/session-runtime.test.ts +1537 -24
- package/src/sdk/host/session-runtime.ts +332 -36
- package/src/sdk/host/surface-policy.ts +4 -0
- package/src/sdk/host/websocket-transport.lifecycle.test.ts +90 -2
- package/src/sdk/host/websocket-transport.ts +19 -7
- package/src/sdk/lifecycle/service.ts +14 -1
- package/src/sdk/prompt-status.ts +6 -4
- package/src/sdk/protocol/adapter-validation.ts +28 -1
- package/src/sdk/protocol/operation-inventory.generated.json +160 -0
- package/src/sdk/protocol/operation-registry.ts +33 -3
- package/src/sdk/session.ts +123 -36
- package/src/session/agent-session.ts +1614 -329
- package/src/session/history-storage.ts +182 -12
- package/src/session/internal/managed-session-scope.ts +47 -18
- package/src/session/internal/managed-session-storage.ts +71 -1
- package/src/session/session-manager.ts +90 -5
- package/src/session-import/redact.ts +53 -2
- package/src/skill-state/workflow-mutation-guard.ts +1498 -18
- package/src/slash-commands/builtin-registry.ts +6 -3
- package/src/slash-commands/helpers/mcp.ts +11 -3
- package/src/ssh/ssh-executor.ts +9 -2
- package/src/stt/recorder.ts +26 -9
- package/src/system-prompt.ts +61 -16
- package/src/task/executor.ts +12 -8
- package/src/task/role-body.ts +84 -0
- package/src/task/token-log-mode.test.ts +162 -0
- package/src/task/token-log.ts +91 -2
- package/src/tools/archive-reader.ts +650 -37
- package/src/tools/ask.ts +1 -0
- package/src/tools/ast-grep.ts +7 -2
- package/src/tools/auto-generated-guard.ts +12 -3
- package/src/tools/awaiting-input.ts +114 -0
- package/src/tools/bash-allowed-prefixes.ts +61 -1
- package/src/tools/bash-skill-urls.ts +58 -5
- package/src/tools/bash.ts +99 -26
- package/src/tools/browser/tab-worker.ts +39 -13
- package/src/tools/browser.ts +17 -7
- package/src/tools/cron.ts +10 -1
- package/src/tools/debug.ts +9 -2
- package/src/tools/descriptors.test.ts +4 -4
- package/src/tools/descriptors.ts +16 -4
- package/src/tools/eval.ts +15 -0
- package/src/tools/fetch.ts +90 -2
- package/src/tools/gh.ts +27 -12
- package/src/tools/image-gen.ts +20 -6
- package/src/tools/irc.ts +5 -3
- package/src/tools/monitor.ts +9 -1
- package/src/tools/output-meta.ts +51 -3
- package/src/tools/read.ts +9 -2
- package/src/tools/recipe/runner.ts +23 -12
- package/src/tools/render-utils.ts +2 -2
- package/src/tools/search.ts +3 -2
- package/src/tools/ssh.ts +274 -8
- package/src/tools/subagent.ts +10 -4
- package/src/tools/tmux-self-injection-guard.ts +3301 -122
- package/src/tools/tool-catalog.generated.ts +1 -1
- package/src/tools/ultragoal-ask-guard.ts +13 -1
- package/src/tools/write.ts +7 -0
- package/src/tui/tree-list.ts +15 -1
- package/src/utils/commit-message-generator.ts +3 -2
- package/src/utils/external-editor.ts +21 -7
- package/src/utils/file-mentions.ts +46 -6
- package/src/utils/git.ts +38 -7
- package/src/utils/image-limits.ts +8 -0
- package/src/utils/image-loading.ts +1 -1
- package/src/utils/open.ts +73 -4
- package/src/utils/pasted-image-loading.ts +9 -8
- package/src/utils/prompt-suggestion.ts +5 -4
- package/src/utils/shell-snapshot.ts +9 -1
- package/src/utils/title-generator.ts +65 -20
- package/src/web/search/index.ts +2 -1
- package/src/web/search/providers/codex.ts +29 -32
|
@@ -5,10 +5,53 @@ import { type AutoroutingSetup } from "../../config/autorouting-contract";
|
|
|
5
5
|
import type { GjcModelAssignmentTargetId, ModelRegistry } from "../../config/model-registry";
|
|
6
6
|
import { type ScopedModelSelection } from "../../config/model-resolver";
|
|
7
7
|
import type { ModelProfileConfig } from "../../config/models-config-schema";
|
|
8
|
+
import { type ProviderAuthState } from "../../config/provider-ranking";
|
|
8
9
|
import type { Settings } from "../../config/settings";
|
|
9
10
|
import type { SmartRoutingIntent, SmartRoutingPreview } from "./smart-routing-panel";
|
|
10
11
|
import { SmartRoutingPanelComponent } from "./smart-routing-panel";
|
|
12
|
+
export declare function assignFuzzyScoresToModels(items: ModelItem[], query: string): void;
|
|
13
|
+
/**
|
|
14
|
+
* Compute and assign fuzzy scores to canonical model items based on a query.
|
|
15
|
+
*/
|
|
16
|
+
export declare function assignFuzzyScoresToCanonicalModels(items: CanonicalModelItem[], query: string): void;
|
|
17
|
+
export interface RankedModelOrderContext {
|
|
18
|
+
roles: RoleAssignments;
|
|
19
|
+
mruIndex: ReadonlyMap<string, number>;
|
|
20
|
+
providerAuthStateById: ReadonlyMap<string, ProviderAuthState>;
|
|
21
|
+
}
|
|
22
|
+
/** Ranking shared by the provider view: fuzzy quality, default, MRU, provider, recency. */
|
|
23
|
+
export declare function compareModelItemsForRanking(a: ModelItem, b: ModelItem, context: RankedModelOrderContext): number;
|
|
24
|
+
/** Ranking shared by the canonical view: fuzzy quality, default, MRU, provider, then id. */
|
|
25
|
+
export declare function compareCanonicalModelItemsForRanking(a: CanonicalModelItem, b: CanonicalModelItem, context: RankedModelOrderContext): number;
|
|
26
|
+
interface ModelItem {
|
|
27
|
+
kind: "provider";
|
|
28
|
+
provider: string;
|
|
29
|
+
id: string;
|
|
30
|
+
model: Model;
|
|
31
|
+
selector: string;
|
|
32
|
+
thinkingLevel?: ThinkingLevel;
|
|
33
|
+
explicitThinkingLevel?: boolean;
|
|
34
|
+
fuzzyScore?: number;
|
|
35
|
+
}
|
|
36
|
+
interface CanonicalModelItem {
|
|
37
|
+
kind: "canonical";
|
|
38
|
+
id: string;
|
|
39
|
+
model: Model;
|
|
40
|
+
selector: string;
|
|
41
|
+
variantCount: number;
|
|
42
|
+
searchText: string;
|
|
43
|
+
normalizedSearchText: string;
|
|
44
|
+
compactSearchText: string;
|
|
45
|
+
thinkingLevel?: ThinkingLevel;
|
|
46
|
+
explicitThinkingLevel?: boolean;
|
|
47
|
+
fuzzyScore?: number;
|
|
48
|
+
}
|
|
11
49
|
type ScopedModelItem = ScopedModelSelection;
|
|
50
|
+
interface RoleAssignment {
|
|
51
|
+
model: Model;
|
|
52
|
+
thinkingLevel: ThinkingLevel;
|
|
53
|
+
}
|
|
54
|
+
type RoleAssignments = Record<string, RoleAssignment | undefined>;
|
|
12
55
|
export type ModelSelectorSelection = {
|
|
13
56
|
kind: "assignment";
|
|
14
57
|
model: Model;
|
|
@@ -3,7 +3,7 @@ import type { InteractiveModeContext } from "./types";
|
|
|
3
3
|
* Owns the ghost-text next-prompt prediction lifecycle for interactive mode.
|
|
4
4
|
*
|
|
5
5
|
* After each agent turn ends (and only when `promptSuggestions` is enabled
|
|
6
|
-
* and the composer is empty), a
|
|
6
|
+
* and the composer is empty), a model prediction of the user's next
|
|
7
7
|
* prompt is generated in the background. The result renders as dim ghost
|
|
8
8
|
* text in the empty composer via the autocomplete provider's inline hint;
|
|
9
9
|
* Tab accepts it, typing dismisses it, and a new turn clears it.
|
|
@@ -1,23 +1,27 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Host-terminal agent status markers.
|
|
3
3
|
*
|
|
4
|
-
* Interactive turns announce their state as an OSC 777 sequence:
|
|
4
|
+
* Interactive turns can announce their state as an OSC 777 sequence:
|
|
5
5
|
*
|
|
6
6
|
* ESC ] 777 ; notify;Terax;gjc;<event> BEL
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* exists.
|
|
8
|
+
* OSC 777 is the rxvt `notify` extension, not a private sequence: a terminal
|
|
9
|
+
* that implements it does not discard the payload, it raises a desktop
|
|
10
|
+
* notification. Ghostty parses `777;notify` in `osc/parsers/rxvt_extension.zig`
|
|
11
|
+
* and maps it to `show_desktop_notification`, so emitting it unconditionally
|
|
12
|
+
* made every turn pop notifications titled `Terax` in Ghostty and cmux.
|
|
14
13
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
14
|
+
* Emission is therefore opt-in. A host that wants per-turn agent status exports
|
|
15
|
+
* `GJC_HOST_STATUS=terax` from its shell integration; every other host gets no
|
|
16
|
+
* escape sequence at all. `notify;Terax;` is the wire identifier of that
|
|
17
|
+
* protocol, and gjc is still named in the payload as the reporting agent.
|
|
18
18
|
*
|
|
19
19
|
* Interactive TUI only. Print and RPC mode stdout stays byte-for-byte parseable
|
|
20
20
|
* because they never reach these controllers.
|
|
21
21
|
*/
|
|
22
22
|
export type HostStatusEvent = "working" | "attention" | "finished";
|
|
23
|
-
|
|
23
|
+
/** The host marker value that opts a terminal into agent-status markers. */
|
|
24
|
+
export declare const HOST_STATUS_MARKER_ENV = "GJC_HOST_STATUS";
|
|
25
|
+
/** Whether the current host opted in to agent-status markers. */
|
|
26
|
+
export declare function hostStatusEnabled(env?: NodeJS.ProcessEnv): boolean;
|
|
27
|
+
export declare function emitHostStatus(event: HostStatusEvent, output?: Pick<NodeJS.WriteStream, "write">, env?: NodeJS.ProcessEnv): void;
|
|
@@ -2,14 +2,20 @@
|
|
|
2
2
|
* Host-value policy for MCP config that comes from an untrusted project file.
|
|
3
3
|
*
|
|
4
4
|
* User mcp.json and an explicit `--mcp-config` file may still substitute
|
|
5
|
-
* secret-named environment variables and run `!` shell commands.
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* into server env or headers, and
|
|
5
|
+
* secret-named environment variables and run `!` shell commands. Any
|
|
6
|
+
* project-level source, including providers other than native `.gjc/mcp.json`
|
|
7
|
+
* and repo-root `mcp.json`, uses the same sensitive-name rule as project
|
|
8
|
+
* `ssh.json`: do not copy those host values into server env or headers, and
|
|
9
|
+
* do not execute `!`.
|
|
9
10
|
*/
|
|
10
11
|
import type { SourceMeta } from "../capability/types";
|
|
11
12
|
export declare function nativeMcpSource(level: "user" | "project", filePath: string): SourceMeta;
|
|
12
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
* True when this server was loaded from untrusted project MCP config.
|
|
15
|
+
* Every project-level provider is untrusted, including providers other than
|
|
16
|
+
* native `.gjc/mcp.json` and repo-root `mcp.json`. User scope and a tools-only
|
|
17
|
+
* load stay on the previous path.
|
|
18
|
+
*/
|
|
13
19
|
export declare function isUntrustedProjectMcpSource(source: SourceMeta | undefined, toolsOnly: boolean): boolean;
|
|
14
20
|
export type ProjectHostValueDecision = {
|
|
15
21
|
action: "resolve";
|
|
@@ -4,7 +4,7 @@ export type { BrokerExitWriterTestBarrier } from "./broker-exit-writer-worker";
|
|
|
4
4
|
export declare function setBrokerExitWriterBarrierForTest(barrier?: BrokerExitWriterTestBarrier): void;
|
|
5
5
|
export type BrokerExitMode = "owned-root" | "lost-root";
|
|
6
6
|
export type BrokerFenceReason = "suspect-unpublished" | "observation-ambiguous" | "heartbeat-ambiguous";
|
|
7
|
-
export type BrokerExitReason = "ownership-fence-expired" | "publication-liveness-timeout" | "heartbeat-renewal-blocked" | "restart-committed" | "shutdown-request" | "startup-failure" | "signal";
|
|
7
|
+
export type BrokerExitReason = "ownership-fence-expired" | "publication-liveness-timeout" | "heartbeat-renewal-blocked" | "restart-committed" | "shutdown-request" | "startup-failure" | "abandoned" | "signal";
|
|
8
8
|
export type BrokerStopRequest = {
|
|
9
9
|
kind: "shutdown-request";
|
|
10
10
|
} | {
|
|
@@ -26,6 +26,21 @@ export interface BrokerSettings {
|
|
|
26
26
|
masterCapabilityVerifier?: MasterCapabilityVerifier;
|
|
27
27
|
/** Grace before an orphaned spawn child closes; schema-bounded in production. */
|
|
28
28
|
masterOrphanGraceMs?: number;
|
|
29
|
+
/**
|
|
30
|
+
* Grace before a broker nobody is left to use exits on its own. The clock only
|
|
31
|
+
* runs while the index proves no live session host and no open spawn authority,
|
|
32
|
+
* so a broker whose client died without closing exits instead of holding its
|
|
33
|
+
* port, its publication, and its lock for the life of the machine.
|
|
34
|
+
*/
|
|
35
|
+
abandonedGraceMs?: number;
|
|
36
|
+
/**
|
|
37
|
+
* Whether this broker may end itself once nobody is left to use it. Only the
|
|
38
|
+
* detached autostart entry point enables this: an operator-supervised
|
|
39
|
+
* `gjc sdk broker run` service owns its own lifetime, and its supervisor reads an
|
|
40
|
+
* owned-root completion as a clean exit, so self-reaping would quietly retire a
|
|
41
|
+
* service that was meant to keep serving.
|
|
42
|
+
*/
|
|
43
|
+
reapWhenAbandoned?: boolean;
|
|
29
44
|
/** Host model resolver override for lifecycle tests and embedders. */
|
|
30
45
|
resolveModelPin?: SdkHostModelResolver;
|
|
31
46
|
/**
|
|
@@ -62,10 +77,12 @@ type ResolvedBrokerSettings = {
|
|
|
62
77
|
spawnSubstrateProvider?: SpawnSubstrateProvider;
|
|
63
78
|
spawnPromptLayer?: SpawnPromptLayer;
|
|
64
79
|
masterOrphanGraceMs: number;
|
|
80
|
+
abandonedGraceMs: number;
|
|
81
|
+
reapWhenAbandoned: boolean;
|
|
65
82
|
restartRequestId?: string;
|
|
66
83
|
};
|
|
67
84
|
export declare function resolveBrokerPackageGeneration(): string;
|
|
68
|
-
export type BrokerErrorCode = "idempotency_conflict" | "terminal_uncertain" | "broker_restarting" | "unavailable" | "endpoint_stale" | "resource_gone" | "invalid_input" | "spawn_failed" | "ready_then_exited" | "endpoint_unreadable" | "startup_admission_timeout" | "startup_admission_refused" | "readiness_timeout" | "worktree_preparation_timeout" | "dependency_preparation_timeout" | "worktree_in_use" | "incarnation_unavailable" | "close_refused" | "not_found" | "live_session" | "cleanup_pending" | (string & {});
|
|
85
|
+
export type BrokerErrorCode = "idempotency_conflict" | "legacy_lifecycle_ambiguous" | "terminal_uncertain" | "broker_restarting" | "unavailable" | "endpoint_stale" | "resource_gone" | "invalid_input" | "spawn_failed" | "ready_then_exited" | "endpoint_unreadable" | "startup_admission_timeout" | "startup_admission_refused" | "readiness_timeout" | "worktree_preparation_timeout" | "dependency_preparation_timeout" | "worktree_in_use" | "incarnation_unavailable" | "close_refused" | "not_found" | "live_session" | "cleanup_pending" | (string & {});
|
|
69
86
|
export type BrokerCleanupIdentity = {
|
|
70
87
|
dev: string;
|
|
71
88
|
ino: string;
|
|
@@ -373,6 +390,8 @@ export declare class Broker {
|
|
|
373
390
|
runStartup<T>(queueWaitMs: number, timing: StartupAdmissionTiming, task: (admittedAt: number) => Promise<T>): Promise<StartupAdmissionResult<T>>;
|
|
374
391
|
start(): Promise<BrokerDiscovery>;
|
|
375
392
|
get ownsDiscovery(): boolean;
|
|
393
|
+
/** Whether this broker completed its initial retained discovery publication. */
|
|
394
|
+
get hasPublishedDiscovery(): boolean;
|
|
376
395
|
get completion(): Promise<void>;
|
|
377
396
|
/** Why this broker completed, or null while it is still running. */
|
|
378
397
|
get terminalExit(): {
|
|
@@ -418,6 +437,8 @@ export declare function setBrokerLockReclaimHooksForTest(broker: Broker, hooks:
|
|
|
418
437
|
beforeQuarantine?: () => Promise<void>;
|
|
419
438
|
onContended?: () => void;
|
|
420
439
|
} | undefined): void;
|
|
440
|
+
/** Test-only hook for shortening the bounded abandonment grace. */
|
|
441
|
+
export declare function setAbandonedGraceForTest(broker: Broker, graceMs: number | undefined): void;
|
|
421
442
|
/** Test-only hook for shortening the bounded liveness deadline. */
|
|
422
443
|
export declare function setLivenessGraceForTest(broker: Broker, graceMs: number | undefined): void;
|
|
423
444
|
/** Test-only hook for shortening the bounded wait before a deferred managed close is queued. */
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type ChildProcess } from "node:child_process";
|
|
2
2
|
import type { FileHandle } from "node:fs/promises";
|
|
3
|
+
import { type ProjectEnvSnapshot } from "@gajae-code/utils/env-file";
|
|
3
4
|
import { type FileLockOptions } from "../../config/file-lock";
|
|
4
5
|
import { type BrokerStartupExitRecord } from "./broker-exit";
|
|
5
6
|
import { type BrokerDiscovery } from "./discovery";
|
|
@@ -129,8 +130,8 @@ export interface BrokerStartupLockOptions {
|
|
|
129
130
|
}
|
|
130
131
|
/**
|
|
131
132
|
* Test-only phase observation for detached broker startup regressions. The
|
|
132
|
-
*
|
|
133
|
-
* ownership or error handling when the
|
|
133
|
+
* directory is opt-in through a trusted operator environment and never affects
|
|
134
|
+
* broker ownership or error handling when the seam is absent.
|
|
134
135
|
*/
|
|
135
136
|
export declare function emitBrokerStartupTestSignal(signal: string): Promise<void>;
|
|
136
137
|
/**
|
|
@@ -302,6 +303,8 @@ export declare function reapDetachedBrokerPidForTest(pid: number, brokerIncarnat
|
|
|
302
303
|
export declare function signalPinnedBrokerProcessForTest(reference: PinnedBrokerProcess | null, expectedIncarnation: string, signal: NodeJS.Signals): boolean;
|
|
303
304
|
/** Test hook: verifies platforms without identity-bound signaling fail closed. */
|
|
304
305
|
export declare function signalDetachedBrokerProcessForTest(pid: number, brokerIncarnation: string, signal: NodeJS.Signals, platform: NodeJS.Platform): boolean;
|
|
306
|
+
/** Test hook: the signal directory accepted from this environment and snapshot. */
|
|
307
|
+
export declare function trustedBrokerSignalDirectoryForTest(env: NodeJS.ProcessEnv, snapshot: ProjectEnvSnapshot | readonly ProjectEnvSnapshot[]): string | undefined;
|
|
305
308
|
/** Test hook: resolves the complete broker environment without spawning. */
|
|
306
309
|
export declare function brokerSpawnEnvironmentForTest(command: SdkInternalSpawnCommand, override?: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
|
|
307
310
|
/** Test hook: installs an exact controllable owner to exercise replacement fencing. */
|
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
import * as childProcess from "node:child_process";
|
|
2
2
|
import type * as stream from "node:stream";
|
|
3
3
|
import type { Process } from "@gajae-code/natives";
|
|
4
|
+
/** Handoff protocol frames written to the trampoline's stdin. */
|
|
4
5
|
export declare const BROKER_HANDOFF_ACKNOWLEDGEMENT = "GJC_BROKER_HANDOFF_ACK\n";
|
|
5
6
|
export declare const BROKER_HANDOFF_COMMIT = "GJC_BROKER_HANDOFF_COMMIT\n";
|
|
6
7
|
export declare const BROKER_HANDOFF_ABORT = "GJC_BROKER_HANDOFF_ABORT\n";
|
|
8
|
+
/**
|
|
9
|
+
* Backstop for a retained trampoline whose parent never sends a decision. It must
|
|
10
|
+
* outlive the parent's own broker discovery deadline (which is derived from the
|
|
11
|
+
* publication budget and can double across a guarded retry), otherwise the
|
|
12
|
+
* trampoline reaps the broker first and the parent misreports its own discovery
|
|
13
|
+
* timeout as an "exited before discovery" startup failure.
|
|
14
|
+
*/
|
|
15
|
+
export declare const BROKER_HANDOFF_DECISION_TIMEOUT_MS = 120000;
|
|
7
16
|
/**
|
|
8
17
|
* Windows broker hop: spawns the real broker with detached:true and reports its pid.
|
|
9
18
|
*
|
|
@@ -133,6 +133,28 @@ export type SessionLifecycleLaunchRequest = SessionLifecycleLaunchRequestBase &
|
|
|
133
133
|
coordinatorSidecarSigningKey?: undefined;
|
|
134
134
|
});
|
|
135
135
|
export declare function readSessionLifecycleLaunchRequest(value: string | undefined, now?: number): SessionLifecycleLaunchRequest;
|
|
136
|
+
/**
|
|
137
|
+
* Validates the optional per-session `env`/`unsetEnv` pair (#6735). Returns
|
|
138
|
+
* null when either is malformed so the caller fails the launch closed.
|
|
139
|
+
*/
|
|
140
|
+
export declare function lifecycleSessionEnv(input: {
|
|
141
|
+
env?: unknown;
|
|
142
|
+
unsetEnv?: unknown;
|
|
143
|
+
}): {
|
|
144
|
+
env?: Record<string, string>;
|
|
145
|
+
unsetEnv?: string[];
|
|
146
|
+
} | null;
|
|
147
|
+
/**
|
|
148
|
+
* Composes the inherited part of a lifecycle session host's environment:
|
|
149
|
+
* drops the process-local master capability, every `unsetEnv` name, and any
|
|
150
|
+
* inherited name an explicit per-session `env` entry replaces (case-folded on
|
|
151
|
+
* Windows so `Path` and `PATH` never both reach the child), then layers the
|
|
152
|
+
* per-session `env` on top. Broker-issued `GJC_*` keys are applied after this.
|
|
153
|
+
*/
|
|
154
|
+
export declare function lifecycleSessionHostBaseEnv(inherited: NodeJS.ProcessEnv | Readonly<Record<string, string | undefined>>, launch: {
|
|
155
|
+
env?: Readonly<Record<string, string>>;
|
|
156
|
+
unsetEnv?: readonly string[];
|
|
157
|
+
}): Record<string, string>;
|
|
136
158
|
type CleanupEvidence = BrokerCleanupEvidence;
|
|
137
159
|
export declare function validateBrokerModelPresetSync(agentDir: string, requestedProfile: string): string | BrokerResponse;
|
|
138
160
|
export declare function validateBrokerModelPresetForTest(agentDir: string, requestedProfile: string): string | BrokerResponse;
|
|
@@ -185,6 +185,8 @@ export declare const DEFAULT_SESSION_RETENTION_MAX_AGE_MS: number;
|
|
|
185
185
|
export declare const DEFAULT_SESSION_RETENTION_MAX_ROWS = 25000;
|
|
186
186
|
/** Bound ordinary bootstrap waits; authorized doctor successors may use the full prepared window. */
|
|
187
187
|
export declare function sessionIndexStartupLockOptions(deadline: number, signal?: AbortSignal, policy?: "ordinary" | "authorized-successor"): FileLockOptions;
|
|
188
|
+
/** One elapsed budget for queueing, probing and every reacquisition in a pass. */
|
|
189
|
+
export declare const SESSION_HEARTBEAT_CHECKPOINT_BUDGET_MS = 15000;
|
|
188
190
|
export declare class SessionIndex {
|
|
189
191
|
#private;
|
|
190
192
|
constructor(agentDir: string, policy?: RetentionPolicy, observationDeps?: SessionIndexObservationDeps);
|
|
@@ -6,6 +6,8 @@ export declare class BrokerTransport {
|
|
|
6
6
|
#private;
|
|
7
7
|
constructor(broker: Broker, token: string, port?: number);
|
|
8
8
|
get port(): number;
|
|
9
|
+
/** Sockets a client holds open right now; the broker outlives every one of them. */
|
|
10
|
+
get clientCount(): number;
|
|
9
11
|
start(): Promise<number>;
|
|
10
12
|
stop(): Promise<void>;
|
|
11
13
|
}
|
|
@@ -27,8 +27,10 @@ import { type WorkflowGateEmitter, type WorkflowGateTerminalProof } from "../../
|
|
|
27
27
|
import type { AgentSessionEvent } from "../../session/agent-session";
|
|
28
28
|
import { type SessionWorkLease, type SessionWorkLeaseHandle } from "../../session/session-work-lease";
|
|
29
29
|
import type { AskAnswerSource, AskAnswerSourceResult, AskRemoteControl } from "../../tools";
|
|
30
|
+
import type { AwaitingInputKind } from "../../tools/awaiting-input";
|
|
30
31
|
import { type SessionHostRuntimePublication } from "../broker/lifecycle";
|
|
31
32
|
import { type SessionSdkHost } from "../host";
|
|
33
|
+
import { PromptImageUploadStore } from "../host/prompt-image-upload";
|
|
32
34
|
import { CursorRegistry, RevisionStore } from "../host/query";
|
|
33
35
|
import type { SdkFrame } from "../host/types";
|
|
34
36
|
import { type SdkPromptTerminalOutcome } from "../prompt-status";
|
|
@@ -266,6 +268,13 @@ export declare class PresentationArbiter {
|
|
|
266
268
|
interface SessionRuntime {
|
|
267
269
|
server: NotificationServer;
|
|
268
270
|
host: SessionSdkHost;
|
|
271
|
+
imageUploads: PromptImageUploadStore | undefined;
|
|
272
|
+
releaseAcceptedImage: (correlation: {
|
|
273
|
+
commandId: string;
|
|
274
|
+
turnId: string;
|
|
275
|
+
}) => void;
|
|
276
|
+
releaseAcceptedImagesForRun: (owner: AgentTerminalOwnerContext) => void;
|
|
277
|
+
releaseAcceptedImages: () => void;
|
|
269
278
|
getJoinedPromptCorrelations: (owner: AgentTerminalOwnerContext) => Array<{
|
|
270
279
|
commandId: string;
|
|
271
280
|
turnId: string;
|
|
@@ -490,6 +499,16 @@ interface SessionRuntime {
|
|
|
490
499
|
args?: unknown;
|
|
491
500
|
pendingPhase?: "completed" | "failed" | "cancelled";
|
|
492
501
|
}>;
|
|
502
|
+
/**
|
|
503
|
+
* Running tool calls that reported an awaiting-input signal, keyed by tool call
|
|
504
|
+
* id. An entry stays undelivered while notifications are inactive or policy is
|
|
505
|
+
* provisional, and is dropped when the call ends; one notification per call.
|
|
506
|
+
*/
|
|
507
|
+
awaitingInput: Map<string, {
|
|
508
|
+
toolName: string;
|
|
509
|
+
kind: AwaitingInputKind;
|
|
510
|
+
delivered: boolean;
|
|
511
|
+
}>;
|
|
493
512
|
/** Cancels the postmortem cleanup that emits `session_closed` on process teardown. */
|
|
494
513
|
cancelPostmortemCleanup: () => void;
|
|
495
514
|
/** Disposes side-turn resources when their owning logical session becomes unavailable. */
|
|
@@ -672,6 +691,8 @@ export declare function createNotificationsExtension(api: ExtensionAPI, options?
|
|
|
672
691
|
* preflight outside the durable admission path (review thread P2).
|
|
673
692
|
*/
|
|
674
693
|
terminalAbortSeams?: {
|
|
694
|
+
/** Definitive event-driven observation; never mutates the owning run. */
|
|
695
|
+
waitForRunSettlement?: (handle: string) => Promise<RunSettlementProof>;
|
|
675
696
|
getTerminalRunOwnerForEvent?: (event: object) => AgentTerminalOwnerContext | undefined;
|
|
676
697
|
getRunOwnerDomain?: (handle: string) => RunCancellationDomain | undefined;
|
|
677
698
|
getTerminalTurnEpoch: () => number | undefined;
|
|
@@ -298,8 +298,14 @@ export declare const SDK_LIFECYCLE_ROUTER_PROTOCOL_VERSION = 1;
|
|
|
298
298
|
* before its terminal record is durable.
|
|
299
299
|
* Generation 203 replaces owners that still treat a project `.gjc` file as an
|
|
300
300
|
* explicit deadline-autosave opt-in for a primary checkout.
|
|
301
|
+
* Generation 205 replaces owners whose process descendant walk can adopt
|
|
302
|
+
* children of a recycled PID. Generation 206 verifies macOS descendant
|
|
303
|
+
* identities and parentage before retaining PTY termination authority, and
|
|
304
|
+
* reaps adopted Linux PTY descendants when GJC is a child reaper.
|
|
305
|
+
* Generation 209 installs connection-owned private SDK image staging with
|
|
306
|
+
* execution-owned reservations, replacing hosts without that lifecycle contract.
|
|
301
307
|
*/
|
|
302
|
-
export declare const DAEMON_GENERATION =
|
|
308
|
+
export declare const DAEMON_GENERATION = 209;
|
|
303
309
|
/**
|
|
304
310
|
* Serving-compatibility boundary for daemon lifecycle requests. Epoch 7
|
|
305
311
|
* requires durable publication receipts and acknowledged attachment dispatch,
|
|
@@ -135,6 +135,8 @@ export declare const ASK_SELECTED_ACK_CAPABILITY = "ask_selected_ack_v1";
|
|
|
135
135
|
export declare const ASK_CONTROLS_CAPABILITY = "ask_controls_v1";
|
|
136
136
|
/** Capability for the closed tool phase set: started, completed, failed, and cancelled. */
|
|
137
137
|
export declare const TOOL_ACTIVITY_CAPABILITY = "tool_activity_v2";
|
|
138
|
+
/** Receive content-free notifications when a running command needs host-side authentication. */
|
|
139
|
+
export declare const AWAITING_INPUT_CAPABILITY = "awaiting_input_v1";
|
|
138
140
|
/** Receive-only compatibility capability for pre-v2 hosts. */
|
|
139
141
|
export declare const LEGACY_TOOL_ACTIVITY_CAPABILITY = "tool_activity_v1";
|
|
140
142
|
/** Public `sdk/bus/telegram-daemon` path for the canonical `sdk/host` capability token. */
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Pure rendering of threaded-session frames into Telegram send specs.
|
|
3
3
|
*
|
|
4
4
|
* The daemon receives the additive `ServerMessage` frames (identity_header,
|
|
5
|
-
* context_update, turn_stream, image_attachment, config_update) over the session
|
|
5
|
+
* context_update, turn_stream, image_attachment, config_update, awaiting_input) over the session
|
|
6
6
|
* WS and must turn each into a Bot API call scoped to the session's forum topic
|
|
7
7
|
* (`message_thread_id`), throttled through the shared rate-limit pool. This
|
|
8
8
|
* module is the pure frame→send mapping (including the priority lane and live-
|
|
@@ -71,6 +71,7 @@ interface ThreadedFrame {
|
|
|
71
71
|
turnRef?: unknown;
|
|
72
72
|
toolCallId?: unknown;
|
|
73
73
|
toolName?: unknown;
|
|
74
|
+
kind?: unknown;
|
|
74
75
|
argsSummary?: unknown;
|
|
75
76
|
resultSummary?: unknown;
|
|
76
77
|
isError?: unknown;
|
|
@@ -19,7 +19,11 @@ export type ControlInput = Record<string, unknown>;
|
|
|
19
19
|
* AgentSession and its controllers without exposing those concrete types here.
|
|
20
20
|
*/
|
|
21
21
|
export interface ControlSurface {
|
|
22
|
-
prompt(text: string, images?: ControlValue, clientRef?: string): Promise<ControlValue> | ControlValue;
|
|
22
|
+
prompt(text: string, images?: ControlValue, clientRef?: string, stagedImages?: ControlValue): Promise<ControlValue> | ControlValue;
|
|
23
|
+
imageBegin?(input: ControlValue): Promise<ControlValue> | ControlValue;
|
|
24
|
+
imageAppend?(input: ControlValue): Promise<ControlValue> | ControlValue;
|
|
25
|
+
imageFinish?(input: ControlValue): Promise<ControlValue> | ControlValue;
|
|
26
|
+
imageDiscard?(input: ControlValue): Promise<ControlValue> | ControlValue;
|
|
23
27
|
steer(text: string, clientRef?: string, expectedSdkRunToken?: string): Promise<ControlValue> | ControlValue;
|
|
24
28
|
followUp(text: string): Promise<ControlValue> | ControlValue;
|
|
25
29
|
abort(): Promise<ControlValue> | ControlValue;
|
|
@@ -20,6 +20,8 @@ export interface EventReplay {
|
|
|
20
20
|
events: EventFrame[];
|
|
21
21
|
gap?: EventReplayGap;
|
|
22
22
|
}
|
|
23
|
+
/** Notification policy refresh records the live redaction bit for one session ring. */
|
|
24
|
+
export declare function setSessionOutboundRedact(sessionId: string, enabled: boolean): void;
|
|
23
25
|
export declare class SessionEventStream {
|
|
24
26
|
#private;
|
|
25
27
|
constructor(options?: {
|
|
@@ -30,6 +32,8 @@ export declare class SessionEventStream {
|
|
|
30
32
|
});
|
|
31
33
|
get generation(): number;
|
|
32
34
|
get sequence(): number;
|
|
35
|
+
/** Follow the session redaction bit. Replay then drops kinds emit sites already suppress. */
|
|
36
|
+
setOutboundRedact(enabled: boolean): void;
|
|
33
37
|
restart(): number;
|
|
34
38
|
emit(frame: SdkFrame): EventFrame;
|
|
35
39
|
/** Replays retained current-generation events and reports any required resynchronization. */
|
|
@@ -81,6 +81,7 @@ export interface SessionSdkHostOptions extends HostEndpointAdapters {
|
|
|
81
81
|
* must see the same capability-gated event kinds on both legs, or live and
|
|
82
82
|
* replay delivery diverge for the same subscriber. */
|
|
83
83
|
export declare const TOOL_ACTIVITY_CAPABILITY = "tool_activity_v2";
|
|
84
|
+
export declare const AWAITING_INPUT_CAPABILITY = "awaiting_input_v1";
|
|
84
85
|
/** Capability for non-replayable streamed turn content. */
|
|
85
86
|
export declare const TURN_STREAM_CAPABILITY = "turn_stream";
|
|
86
87
|
/** Capability used by notification adapters that observe a host without owning its work. */
|
|
@@ -91,7 +92,7 @@ export declare const SESSION_HOST_OBSERVER_CAPABILITY = "session_host_observer_v
|
|
|
91
92
|
* of every frame its positioned envelope already reached.
|
|
92
93
|
*/
|
|
93
94
|
export declare const POSITIONED_NOTIFICATION_EFFECTS_CAPABILITY = "positioned_notification_effects_v1";
|
|
94
|
-
export declare const CAP_GATED_FRAME_KINDS:
|
|
95
|
+
export declare const CAP_GATED_FRAME_KINDS: ReadonlyMap<string, string>;
|
|
95
96
|
/** Keep live delivery and replay on one capability gate. */
|
|
96
97
|
export declare function canDeliverSdkEvent(kind: string, capabilities: ReadonlySet<string> | undefined): boolean;
|
|
97
98
|
/** SDK hosting is independent of notification configuration. Only root sessions host an endpoint. */
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { RunSettlementProof } from "@gajae-code/agent-core";
|
|
2
|
+
import type { ImageContent } from "@gajae-code/ai/core";
|
|
3
|
+
/** One definitive event-driven wait; teardown and elapsed time are not settlement proof. */
|
|
4
|
+
export declare function retirePromptImageReservation(handle: string, waitForRunSettlement: (handle: string) => Promise<RunSettlementProof>, isCurrent: () => boolean, release: () => void): void;
|
|
5
|
+
export interface PromptImageProcessBudgetSnapshot {
|
|
6
|
+
/** Retained upload and accepted source bytes, including accepted base64 copies. */
|
|
7
|
+
readonly sourceBytes: number;
|
|
8
|
+
readonly transientBytes: number;
|
|
9
|
+
readonly concurrentFinishes: number;
|
|
10
|
+
}
|
|
11
|
+
/** Internal process diagnostics only; not an SDK operation or a release capability. */
|
|
12
|
+
export declare function getPromptImageProcessBudgetSnapshot(): PromptImageProcessBudgetSnapshot;
|
|
13
|
+
/** Session-scoped, connection-owned image leases; no client-supplied path or identity is trusted. */
|
|
14
|
+
export declare class PromptImageUploadStore {
|
|
15
|
+
#private;
|
|
16
|
+
/** The host supplies live socket membership; standalone callers must choose an explicit policy. */
|
|
17
|
+
constructor(isConnectionOpen: (connectionId: string) => boolean);
|
|
18
|
+
begin(connectionId: string | undefined, value: unknown): {
|
|
19
|
+
id: string;
|
|
20
|
+
nextSequence: 0;
|
|
21
|
+
};
|
|
22
|
+
append(connectionId: string | undefined, value: unknown): {
|
|
23
|
+
id: string;
|
|
24
|
+
nextSequence: number;
|
|
25
|
+
receivedBytes: number;
|
|
26
|
+
};
|
|
27
|
+
finish(connectionId: string | undefined, value: unknown): Promise<{
|
|
28
|
+
id: string;
|
|
29
|
+
byteLength: number;
|
|
30
|
+
sha256: string;
|
|
31
|
+
mimeType: string;
|
|
32
|
+
}>;
|
|
33
|
+
discard(connectionId: string | undefined, value: unknown): {
|
|
34
|
+
discarded: true;
|
|
35
|
+
};
|
|
36
|
+
/** Synchronous reserve–validate–copy–consume transaction, called before prompt admission. */
|
|
37
|
+
redeem(connectionId: string | undefined, value: unknown): {
|
|
38
|
+
images: ImageContent[];
|
|
39
|
+
release: () => void;
|
|
40
|
+
};
|
|
41
|
+
disconnect(connectionId: string): void;
|
|
42
|
+
close(): void;
|
|
43
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type RunSettlementProof } from "@gajae-code/agent-core";
|
|
1
2
|
import type { ProviderDiagnostic } from "@gajae-code/ai/core";
|
|
2
3
|
import { type Settings } from "../../config/settings";
|
|
3
4
|
import type { ExtensionAPI, ExtensionContext } from "../../extensibility/extensions";
|
|
@@ -74,9 +75,12 @@ export interface SessionSdkTransport {
|
|
|
74
75
|
stop(): Promise<void>;
|
|
75
76
|
broadcastFrame?(frame: SdkFrame): void;
|
|
76
77
|
onConnectionClose?(handler: (connectionId: string) => void): undefined | (() => void);
|
|
78
|
+
/** Authoritative live socket membership, not a cache of previously observed frames. */
|
|
79
|
+
isConnectionOpen?(connectionId: string): boolean;
|
|
77
80
|
onNegotiatedCapabilities?(handler: (connectionId: string, capabilities: readonly string[]) => void): undefined | (() => void);
|
|
78
81
|
}
|
|
79
82
|
export interface SessionSdkRuntimeOptions extends Omit<SessionSdkHostOptions, "sessionId" | "stateRoot" | "token" | "sendFrame" | "onFrame"> {
|
|
83
|
+
onDisconnected?: (connectionId: string) => void;
|
|
80
84
|
transport: SessionSdkTransport;
|
|
81
85
|
/** Session settings; enables `config.patch` application on this runtime. */
|
|
82
86
|
settings?: Settings;
|
|
@@ -154,6 +158,8 @@ export interface SdkOnlyReconciliationStore {
|
|
|
154
158
|
}): Promise<void>;
|
|
155
159
|
}
|
|
156
160
|
export interface SdkOnlyTerminalAbortSeams {
|
|
161
|
+
/** Definitive event-driven observation: never abort, seal or quarantine a run to reclaim images. */
|
|
162
|
+
waitForRunSettlement?: (handle: string) => Promise<RunSettlementProof>;
|
|
157
163
|
getReconciliationStore?: () => SdkOnlyReconciliationStore | undefined;
|
|
158
164
|
getTerminalTurnEpoch: () => number | undefined;
|
|
159
165
|
getActivePromptHandle: () => string | undefined;
|
|
@@ -215,14 +221,6 @@ export interface SdkOnlyDeadlineRecoveryCheckpoint {
|
|
|
215
221
|
pendingToolCount?: number;
|
|
216
222
|
errorCode?: string;
|
|
217
223
|
}
|
|
218
|
-
/**
|
|
219
|
-
* The transport-neutral SDK session runtime.
|
|
220
|
-
*
|
|
221
|
-
* Concrete transports (including the optional notification/native transport) are
|
|
222
|
-
* injected by the caller. This module owns host construction, control/query
|
|
223
|
-
* dispatch, replay/event publication, and reverse-provider lifecycle without
|
|
224
|
-
* importing any notification adapter or native notification class.
|
|
225
|
-
*/
|
|
226
224
|
export declare class SessionSdkSessionRuntime {
|
|
227
225
|
#private;
|
|
228
226
|
readonly host: SessionSdkHost;
|
|
@@ -397,6 +395,8 @@ export interface SdkSurfaceFactoryOptions {
|
|
|
397
395
|
api: ExtensionAPI;
|
|
398
396
|
/** Startup surface that owns host-level permission and lifecycle authority. */
|
|
399
397
|
primaryControlSurface?: "cli" | "sdk";
|
|
398
|
+
/** Private staging controls are advertised only with authoritative transport liveness. */
|
|
399
|
+
imageUploadsAvailable?: boolean;
|
|
400
400
|
policy?: SdkSurfacePolicy;
|
|
401
401
|
getInstalledDefinitions?: (capability: string) => unknown | undefined;
|
|
402
402
|
getLiveState?: () => {
|
|
@@ -7,6 +7,7 @@ export interface SdkSurfacePolicy {
|
|
|
7
7
|
export interface SdkSurfacePolicyOptions {
|
|
8
8
|
bindings: Iterable<string>;
|
|
9
9
|
workflowGateAvailable: boolean;
|
|
10
|
+
imageUploadsAvailable?: boolean;
|
|
10
11
|
isBindingInstalled?: (binding: string) => boolean;
|
|
11
12
|
}
|
|
12
13
|
/** Shared operation advertisement policy for every SDK transport. */
|
|
@@ -20,4 +21,4 @@ export interface SdkCapabilities {
|
|
|
20
21
|
}
|
|
21
22
|
export declare function createSdkCapabilities(policy: SdkSurfacePolicy, hostTools?: boolean, primaryControlSurface?: SdkCapabilities["primaryControlSurface"]): SdkCapabilities;
|
|
22
23
|
/** Derive the shared policy from an extension context without importing adapters. */
|
|
23
|
-
export declare function createSdkSurfacePolicyForContext(ctx: ExtensionContext, workflowGateAvailable?: boolean): SdkSurfacePolicy;
|
|
24
|
+
export declare function createSdkSurfacePolicyForContext(ctx: ExtensionContext, workflowGateAvailable?: boolean, imageUploadsAvailable?: boolean): SdkSurfacePolicy;
|
|
@@ -57,6 +57,10 @@ export type SessionCreateTarget = SessionLifecycleCoordinatorTarget & {
|
|
|
57
57
|
readonly body?: string;
|
|
58
58
|
readonly modelPreset?: string;
|
|
59
59
|
readonly mcpServers?: readonly Record<string, unknown>[];
|
|
60
|
+
/** Per-session environment for the hosted session; `GJC_*` names are reserved (#6735). */
|
|
61
|
+
readonly env?: Readonly<Record<string, string>>;
|
|
62
|
+
/** Inherited broker environment names removed from the hosted session (#6735). */
|
|
63
|
+
readonly unsetEnv?: readonly string[];
|
|
60
64
|
readonly worktree?: SessionLifecycleWorktreeTarget;
|
|
61
65
|
readonly readiness?: "immediate" | "deferred";
|
|
62
66
|
readonly readinessTimeoutMs?: number;
|
|
@@ -70,6 +74,10 @@ export type SessionForkTarget = SessionLifecycleCoordinatorTarget & {
|
|
|
70
74
|
readonly body?: string;
|
|
71
75
|
readonly modelPreset?: string;
|
|
72
76
|
readonly mcpServers?: readonly Record<string, unknown>[];
|
|
77
|
+
/** Per-session environment for the hosted session; `GJC_*` names are reserved (#6735). */
|
|
78
|
+
readonly env?: Readonly<Record<string, string>>;
|
|
79
|
+
/** Inherited broker environment names removed from the hosted session (#6735). */
|
|
80
|
+
readonly unsetEnv?: readonly string[];
|
|
73
81
|
readonly worktree?: SessionLifecycleWorktreeTarget;
|
|
74
82
|
readonly readinessTimeoutMs?: number;
|
|
75
83
|
};
|
|
@@ -82,6 +90,10 @@ export type SessionResumeTarget = SessionLifecycleCoordinatorTarget & {
|
|
|
82
90
|
readonly body?: string;
|
|
83
91
|
readonly modelPreset?: string;
|
|
84
92
|
readonly mcpServers?: readonly Record<string, unknown>[];
|
|
93
|
+
/** Per-session environment for the hosted session; `GJC_*` names are reserved (#6735). */
|
|
94
|
+
readonly env?: Readonly<Record<string, string>>;
|
|
95
|
+
/** Inherited broker environment names removed from the hosted session (#6735). */
|
|
96
|
+
readonly unsetEnv?: readonly string[];
|
|
85
97
|
readonly worktree?: SessionLifecycleWorktreeTarget;
|
|
86
98
|
readonly readinessTimeoutMs?: number;
|
|
87
99
|
};
|
|
@@ -37,12 +37,19 @@ export interface TurnPromptImageInput {
|
|
|
37
37
|
data: string;
|
|
38
38
|
mimeType?: string;
|
|
39
39
|
}
|
|
40
|
-
/** Public input contract for ordered `turn.prompt
|
|
41
|
-
export
|
|
40
|
+
/** Public input contract for ordered `turn.prompt`; direct and staged images cannot be mixed. */
|
|
41
|
+
export type TurnPromptInput = {
|
|
42
42
|
text: string;
|
|
43
|
-
images?: TurnPromptImageInput[];
|
|
44
43
|
clientRef?: string;
|
|
45
|
-
}
|
|
44
|
+
} & ({
|
|
45
|
+
images?: TurnPromptImageInput[];
|
|
46
|
+
stagedImages?: never;
|
|
47
|
+
} | {
|
|
48
|
+
images?: never;
|
|
49
|
+
stagedImages: Array<{
|
|
50
|
+
id: string;
|
|
51
|
+
}>;
|
|
52
|
+
});
|
|
46
53
|
/**
|
|
47
54
|
* Terminal outcome is preserved exactly; active records never age into terminal. An
|
|
48
55
|
* ordinary prompt active at process restart is finalized from its durable pending
|