@gajae-code/coding-agent 0.12.0 → 0.12.1
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 +82 -1
- package/dist/types/async/job-manager.d.ts +17 -3
- package/dist/types/config/settings-schema.d.ts +54 -0
- package/dist/types/exa/mcp-client.d.ts +10 -1
- package/dist/types/exec/bash-executor.d.ts +45 -12
- package/dist/types/extensibility/extensions/types.d.ts +16 -2
- package/dist/types/extensibility/gjc-plugins/index.d.ts +12 -2
- package/dist/types/extensibility/gjc-plugins/installer.d.ts +63 -7
- package/dist/types/extensibility/gjc-plugins/lifecycle-reconciliation.d.ts +55 -0
- package/dist/types/extensibility/gjc-plugins/lifecycle.d.ts +64 -0
- package/dist/types/extensibility/gjc-plugins/runtime-quarantine.d.ts +67 -0
- package/dist/types/extensibility/gjc-plugins/session-validation.d.ts +3 -1
- package/dist/types/extensibility/gjc-plugins/types.d.ts +124 -0
- package/dist/types/gjc-runtime/launch-tmux.d.ts +1 -0
- package/dist/types/gjc-runtime/ralplan-runtime.d.ts +18 -0
- package/dist/types/gjc-runtime/team-launch.d.ts +1 -1
- package/dist/types/gjc-runtime/team-runtime.d.ts +25 -0
- package/dist/types/gjc-runtime/team-worker-heartbeat.d.ts +43 -0
- package/dist/types/gjc-runtime/tmux-owner-isolation.d.ts +10 -0
- package/dist/types/gjc-runtime/ultragoal-runtime.d.ts +31 -80
- package/dist/types/modes/acp/acp-agent.d.ts +2 -19
- package/dist/types/modes/components/gjc-bundle-settings.d.ts +34 -0
- package/dist/types/modes/components/notifications-settings-editor.d.ts +1 -0
- package/dist/types/modes/components/session-observer-overlay.d.ts +18 -0
- package/dist/types/modes/components/settings-selector.d.ts +9 -0
- package/dist/types/modes/components/status-line/gh.d.ts +5 -0
- package/dist/types/modes/components/transcript-viewer-overlay.d.ts +18 -1
- package/dist/types/reminders/star-reminder.d.ts +3 -13
- package/dist/types/runtime-mcp/manager.d.ts +1 -0
- package/dist/types/sdk/acp/adapter.d.ts +3 -1
- package/dist/types/sdk/broker/transport.d.ts +2 -0
- package/dist/types/sdk/bus/attachment-registry.d.ts +1 -0
- package/dist/types/sdk/bus/chat-daemon-control.d.ts +4 -1
- package/dist/types/sdk/bus/config.d.ts +6 -2
- package/dist/types/sdk/bus/index.d.ts +29 -0
- package/dist/types/sdk/bus/kind-aware-reconciliation.d.ts +8 -1
- package/dist/types/sdk/bus/lifecycle-control-runtime.d.ts +4 -0
- package/dist/types/sdk/bus/reconciliation-store.d.ts +7 -3
- package/dist/types/sdk/bus/rich-draft.d.ts +1 -0
- package/dist/types/sdk/bus/rich-render.d.ts +2 -0
- package/dist/types/sdk/bus/telegram-adoption-intent.d.ts +165 -0
- package/dist/types/sdk/bus/telegram-cli.d.ts +12 -0
- package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +11 -4
- package/dist/types/sdk/bus/telegram-daemon.d.ts +25 -1
- package/dist/types/sdk/bus/telegram-reference.d.ts +11 -1
- package/dist/types/sdk/bus/threaded-render.d.ts +3 -2
- package/dist/types/sdk/bus/topic-registry.d.ts +11 -1
- package/dist/types/sdk/host/query/revision-store.d.ts +2 -0
- package/dist/types/sdk/host/reverse-leases.d.ts +1 -1
- package/dist/types/sdk/prompt-status.d.ts +23 -3
- package/dist/types/sdk/session.d.ts +6 -0
- package/dist/types/session/agent-session.d.ts +38 -2
- package/dist/types/session/artifacts.d.ts +8 -0
- package/dist/types/session/blob-store.d.ts +57 -4
- package/dist/types/session/internal/managed-session-storage.d.ts +8 -1
- package/dist/types/session/session-manager.d.ts +23 -6
- package/dist/types/session/session-storage.d.ts +4 -0
- package/dist/types/session/streaming-output.d.ts +36 -7
- package/dist/types/setup/credential-import.d.ts +12 -0
- package/dist/types/skill-state/active-state.d.ts +12 -0
- package/dist/types/skill-state/workflow-hud.d.ts +6 -0
- package/dist/types/task/executor.d.ts +3 -2
- package/dist/types/task/index.d.ts +3 -1
- package/dist/types/task/provider-retry-status.d.ts +8 -0
- package/dist/types/task/receipt.d.ts +7 -1
- package/dist/types/task/types.d.ts +23 -0
- package/dist/types/tools/ask-answer-registry.d.ts +2 -2
- package/dist/types/tools/bash-interactive.d.ts +4 -1
- package/dist/types/tools/bash.d.ts +3 -1
- package/dist/types/tools/image-gen.d.ts +4 -0
- package/dist/types/tools/index.d.ts +4 -0
- package/dist/types/tools/output-meta.d.ts +23 -2
- package/dist/types/tools/path-utils.d.ts +1 -0
- package/dist/types/tools/read.d.ts +0 -6
- package/dist/types/tools/review.d.ts +5 -7
- package/dist/types/tools/subagent.d.ts +2 -0
- package/dist/types/utils/gh.d.ts +13 -0
- package/dist/types/utils/image-resize.d.ts +1 -0
- package/dist/types/web/search/providers/kimi.d.ts +2 -0
- package/dist/types/web/search/providers/searxng.d.ts +7 -0
- package/dist/types/web/search/providers/xai.d.ts +2 -0
- package/package.json +10 -8
- package/scripts/acp-conformance-agent.ts +218 -0
- package/scripts/capture-gjc-bundle-settings.ts +306 -0
- package/scripts/generate-sdk-operation-inventory.ts +3 -0
- package/scripts/resident-memory-bench.ts +1341 -0
- package/scripts/run-acp-conformance.ts +285 -0
- package/src/async/job-manager.ts +78 -20
- package/src/cli/fast-help.ts +1 -1
- package/src/cli/plugin-cli.ts +176 -18
- package/src/commands/team.ts +19 -1
- package/src/config/file-lock.ts +11 -2
- package/src/config/settings-schema.ts +51 -0
- package/src/coordinator-mcp/question-gate-codec.ts +1 -1
- package/src/coordinator-mcp/server.ts +5 -12
- package/src/defaults/gjc/skills/deep-interview/SKILL.md +1 -0
- package/src/defaults/gjc/skills/ralplan/SKILL.md +19 -16
- package/src/defaults/gjc/skills/team/SKILL.md +2 -0
- package/src/defaults/gjc/skills/ultragoal/SKILL.md +37 -24
- package/src/defaults/gjc/skills/ultragoal/validation-batch-contracts.md +12 -0
- package/src/defaults/gjc-defaults.ts +4 -4
- package/src/exa/mcp-client.ts +12 -3
- package/src/exec/bash-executor.ts +144 -27
- package/src/extensibility/extensions/runner.ts +15 -0
- package/src/extensibility/extensions/types.ts +18 -1
- package/src/extensibility/gjc-plugins/constrained-hooks.ts +8 -2
- package/src/extensibility/gjc-plugins/index.ts +19 -2
- package/src/extensibility/gjc-plugins/installer.ts +189 -50
- package/src/extensibility/gjc-plugins/lifecycle-reconciliation.ts +199 -0
- package/src/extensibility/gjc-plugins/lifecycle.ts +626 -0
- package/src/extensibility/gjc-plugins/observability.ts +3 -3
- package/src/extensibility/gjc-plugins/prompt-appendix.ts +5 -1
- package/src/extensibility/gjc-plugins/runtime-adapters.ts +12 -2
- package/src/extensibility/gjc-plugins/runtime-quarantine.ts +121 -0
- package/src/extensibility/gjc-plugins/schema.ts +84 -12
- package/src/extensibility/gjc-plugins/session-validation.ts +9 -3
- package/src/extensibility/gjc-plugins/types.ts +141 -0
- package/src/extensibility/gjc-plugins/validation.ts +9 -0
- package/src/gjc-runtime/launch-tmux.ts +25 -6
- package/src/gjc-runtime/managed-owner-admission.ts +1 -1
- package/src/gjc-runtime/ralplan-runtime.ts +411 -17
- package/src/gjc-runtime/team-launch.ts +8 -0
- package/src/gjc-runtime/team-runtime.ts +140 -32
- package/src/gjc-runtime/team-worker-heartbeat.ts +149 -0
- package/src/gjc-runtime/tmux-owner-isolation.ts +10 -0
- package/src/gjc-runtime/tmux-sessions.ts +58 -13
- package/src/gjc-runtime/ultragoal-runtime.ts +401 -611
- package/src/gjc-runtime/workflow-manifest.generated.json +8 -99
- package/src/gjc-runtime/workflow-manifest.ts +4 -68
- package/src/internal-urls/docs-index.generated.ts +15 -15
- package/src/modes/DESIGN.md +51 -0
- package/src/modes/acp/acp-agent.ts +298 -186
- package/src/modes/components/gjc-bundle-settings.ts +508 -0
- package/src/modes/components/notifications-settings-editor.ts +12 -1
- package/src/modes/components/oauth-selector.ts +68 -30
- package/src/modes/components/session-observer-overlay.ts +305 -86
- package/src/modes/components/settings-selector.ts +56 -5
- package/src/modes/components/status-line/gh.ts +16 -0
- package/src/modes/components/tool-status-header.ts +3 -14
- package/src/modes/components/transcript-viewer-overlay.ts +99 -24
- package/src/modes/controllers/command-controller.ts +4 -0
- package/src/modes/controllers/extension-ui-controller.ts +7 -0
- package/src/modes/controllers/selector-controller.ts +45 -0
- package/src/modes/runtime-init.ts +3 -0
- package/src/prompts/agent-fragments/ralplan-persistence.md +4 -3
- package/src/prompts/system/eager-todo.md +8 -4
- package/src/prompts/system/system-prompt.md +11 -4
- package/src/prompts/tools/bash.md +5 -5
- package/src/prompts/tools/search-tool-bm25.md +5 -0
- package/src/prompts/tools/task.md +1 -1
- package/src/reminders/star-reminder.ts +4 -42
- package/src/runtime-mcp/manager.ts +19 -4
- package/src/sdk/acp/adapter.ts +22 -6
- package/src/sdk/broker/transport.ts +35 -3
- package/src/sdk/bus/attachment-registry.ts +5 -1
- package/src/sdk/bus/chat-daemon-cli.ts +4 -39
- package/src/sdk/bus/chat-daemon-control.ts +6 -3
- package/src/sdk/bus/config.ts +18 -2
- package/src/sdk/bus/index.ts +661 -126
- package/src/sdk/bus/kind-aware-reconciliation.ts +148 -73
- package/src/sdk/bus/lifecycle-commands.ts +4 -1
- package/src/sdk/bus/lifecycle-control-runtime.ts +403 -88
- package/src/sdk/bus/reconciliation-store.ts +95 -16
- package/src/sdk/bus/rich-draft.ts +1 -1
- package/src/sdk/bus/rich-render.ts +2 -2
- package/src/sdk/bus/telegram-adoption-intent.ts +574 -0
- package/src/sdk/bus/telegram-cli.ts +33 -8
- package/src/sdk/bus/telegram-daemon-cli.ts +1 -0
- package/src/sdk/bus/telegram-daemon-contract.ts +11 -4
- package/src/sdk/bus/telegram-daemon.ts +916 -23
- package/src/sdk/bus/telegram-reference.ts +40 -3
- package/src/sdk/bus/threaded-render.ts +48 -3
- package/src/sdk/bus/topic-registry.ts +20 -0
- package/src/sdk/host/query/revision-store.ts +36 -2
- package/src/sdk/host/reverse-leases.ts +44 -7
- package/src/sdk/prompt-status.ts +16 -3
- package/src/sdk/protocol/operation-inventory.generated.json +22 -0
- package/src/sdk/session.ts +88 -9
- package/src/session/agent-session.ts +822 -172
- package/src/session/artifacts.ts +22 -0
- package/src/session/auth-broker-config.ts +10 -3
- package/src/session/blob-store.ts +915 -24
- package/src/session/internal/managed-session-scope.ts +44 -6
- package/src/session/internal/managed-session-storage.ts +48 -6
- package/src/session/session-manager.ts +1614 -435
- package/src/session/session-storage.ts +9 -1
- package/src/session/streaming-output.ts +238 -68
- package/src/setup/credential-import.ts +75 -13
- package/src/skill-state/active-state.ts +32 -0
- package/src/skill-state/workflow-hud.ts +17 -0
- package/src/skill-state/workflow-mutation-guard.ts +496 -2
- package/src/task/executor.ts +122 -39
- package/src/task/index.ts +23 -14
- package/src/task/provider-retry-status.ts +16 -0
- package/src/task/receipt.ts +23 -7
- package/src/task/render.ts +6 -2
- package/src/task/types.ts +108 -0
- package/src/tools/ask-answer-registry.ts +12 -6
- package/src/tools/ask.ts +86 -55
- package/src/tools/ast-edit.ts +1 -0
- package/src/tools/ast-grep.ts +1 -0
- package/src/tools/bash-interactive.ts +8 -3
- package/src/tools/bash.ts +503 -60
- package/src/tools/find.ts +1 -0
- package/src/tools/image-gen.ts +29 -5
- package/src/tools/index.ts +4 -0
- package/src/tools/output-meta.ts +108 -14
- package/src/tools/path-utils.ts +3 -2
- package/src/tools/read.ts +18 -0
- package/src/tools/review.ts +5 -7
- package/src/tools/search.ts +1 -0
- package/src/tools/subagent-render.ts +6 -2
- package/src/tools/subagent.ts +6 -0
- package/src/tools/telegram-send.ts +6 -3
- package/src/utils/gh.ts +39 -0
- package/src/utils/image-resize.ts +3 -0
- package/src/web/search/providers/anthropic.ts +4 -4
- package/src/web/search/providers/kimi.ts +15 -5
- package/src/web/search/providers/searxng.ts +47 -4
- package/src/web/search/providers/xai.ts +7 -2
- package/dist/types/gjc-runtime/ultragoal-pipeline.d.ts +0 -23
- package/src/defaults/gjc/skills/ultragoal/pipeline-validation-contracts.md +0 -30
- package/src/gjc-runtime/ultragoal-pipeline.ts +0 -306
package/src/sdk/session.ts
CHANGED
|
@@ -82,11 +82,18 @@ import {
|
|
|
82
82
|
import { ExtensionRuntime } from "../extensibility/extensions/loader";
|
|
83
83
|
import { type ConstrainedPluginHook, loadConstrainedPluginHooks } from "../extensibility/gjc-plugins/constrained-hooks";
|
|
84
84
|
import { resolveCurrentPhaseForParent } from "../extensibility/gjc-plugins/injection";
|
|
85
|
+
import { currentActivationFingerprint } from "../extensibility/gjc-plugins/lifecycle";
|
|
85
86
|
import {
|
|
86
87
|
buildPluginMcpConfigs,
|
|
87
88
|
loadAlwaysOnPluginTools,
|
|
88
89
|
renderAlwaysOnSystemAppendices,
|
|
89
90
|
} from "../extensibility/gjc-plugins/runtime-adapters";
|
|
91
|
+
import {
|
|
92
|
+
GjcRuntimeFindingAccumulator,
|
|
93
|
+
type GjcRuntimeSnapshotProvider,
|
|
94
|
+
GjcRuntimeSnapshotStore,
|
|
95
|
+
gjcActivationGenerationFor,
|
|
96
|
+
} from "../extensibility/gjc-plugins/runtime-quarantine";
|
|
90
97
|
import { loadActiveSubskillTools } from "../extensibility/gjc-plugins/tools";
|
|
91
98
|
import { loadSkills, type Skill, type SkillWarning, setActiveSkills } from "../extensibility/skills";
|
|
92
99
|
import type { FileSlashCommand } from "../extensibility/slash-commands";
|
|
@@ -494,6 +501,11 @@ export interface CreateAgentSessionResult {
|
|
|
494
501
|
lspServers?: LspStartupServerInfo[];
|
|
495
502
|
/** Shared event bus for tool/extension communication */
|
|
496
503
|
eventBus: EventBus;
|
|
504
|
+
/**
|
|
505
|
+
* Read-only view of GJC bundle runtime evidence for the activation generation
|
|
506
|
+
* this session published. Undefined when no GJC bundles participated.
|
|
507
|
+
*/
|
|
508
|
+
gjcRuntimeSnapshot?: GjcRuntimeSnapshotProvider;
|
|
497
509
|
}
|
|
498
510
|
|
|
499
511
|
// Re-exports
|
|
@@ -1070,6 +1082,7 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
|
|
|
1070
1082
|
"options.authStorage and options.modelRegistry.authStorage must be the same instance when both are provided",
|
|
1071
1083
|
);
|
|
1072
1084
|
}
|
|
1085
|
+
|
|
1073
1086
|
let agent: Agent;
|
|
1074
1087
|
let session!: AgentSession;
|
|
1075
1088
|
let hasSession = false;
|
|
@@ -1281,13 +1294,16 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
|
|
|
1281
1294
|
);
|
|
1282
1295
|
let model = options.model;
|
|
1283
1296
|
let modelFallbackMessage: string | undefined;
|
|
1297
|
+
const resumeModelBehavior = settings.get("session.resumeModelBehavior");
|
|
1284
1298
|
const persistedDefaultChain = existingSession.configuredModelChains.default?.entries;
|
|
1285
1299
|
const defaultModelEntries =
|
|
1286
|
-
|
|
1287
|
-
?
|
|
1288
|
-
:
|
|
1289
|
-
?
|
|
1290
|
-
:
|
|
1300
|
+
resumeModelBehavior === "useCurrentDefault"
|
|
1301
|
+
? []
|
|
1302
|
+
: persistedDefaultChain && persistedDefaultChain.length > 0
|
|
1303
|
+
? persistedDefaultChain
|
|
1304
|
+
: existingSession.models.default
|
|
1305
|
+
? [existingSession.models.default]
|
|
1306
|
+
: [];
|
|
1291
1307
|
// If session has data, restore its configured default chain rather than the
|
|
1292
1308
|
// scalar runtime model, which may be a stale fallback from the prior run.
|
|
1293
1309
|
if (!hasExplicitModel && !model && hasExistingSession && defaultModelEntries.length > 0) {
|
|
@@ -1616,10 +1632,11 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
|
|
|
1616
1632
|
|
|
1617
1633
|
// Wire process-wide internal URL singletons owned by their real classes.
|
|
1618
1634
|
// Top-level sessions install the active snapshots; subagents inherit them.
|
|
1619
|
-
// Artifact and agent-output URLs resolve
|
|
1620
|
-
//
|
|
1621
|
-
//
|
|
1622
|
-
//
|
|
1635
|
+
// Artifact and agent-output URLs resolve against explicitly authorized
|
|
1636
|
+
// directories only (see `authorizedArtifactsDirsFromContext`): the
|
|
1637
|
+
// caller's own `sessionManager.getArtifactsDir()` plus, when this session
|
|
1638
|
+
// adopted a shared `ArtifactManager` (subagent tree membership),
|
|
1639
|
+
// `getAuthorizedArtifactsDirs` below. There is no registry-wide lookup.
|
|
1623
1640
|
const getArtifactsDir = () => sessionManager.getArtifactsDir();
|
|
1624
1641
|
const localProtocolOptions = options.localProtocolOptions ?? {
|
|
1625
1642
|
getArtifactsDir,
|
|
@@ -1637,6 +1654,10 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
|
|
|
1637
1654
|
disposeLocalProtocolOverride = LocalProtocolHandler.installOverride(options.localProtocolOptions);
|
|
1638
1655
|
}
|
|
1639
1656
|
toolSession.getArtifactsDir = getArtifactsDir;
|
|
1657
|
+
toolSession.getAuthorizedArtifactsDirs = () => {
|
|
1658
|
+
const manager = sessionManager.getArtifactManager();
|
|
1659
|
+
return manager ? [manager.dir] : [];
|
|
1660
|
+
};
|
|
1640
1661
|
toolSession.agentOutputManager = new AgentOutputManager(
|
|
1641
1662
|
getArtifactsDir,
|
|
1642
1663
|
options.parentTaskPrefix ? { parentPrefix: options.parentTaskPrefix } : undefined,
|
|
@@ -1709,6 +1730,23 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
|
|
|
1709
1730
|
}
|
|
1710
1731
|
}
|
|
1711
1732
|
|
|
1733
|
+
// GJC bundle runtime evidence for this activation. Producers below return
|
|
1734
|
+
// findings into this caller-owned accumulator and never publish; exactly one
|
|
1735
|
+
// complete snapshot is published once every producer has run.
|
|
1736
|
+
const gjcRuntimeStore = new GjcRuntimeSnapshotStore();
|
|
1737
|
+
let gjcProducersComplete = true;
|
|
1738
|
+
let gjcActivationGeneration = 0;
|
|
1739
|
+
try {
|
|
1740
|
+
gjcActivationGeneration = gjcActivationGenerationFor(await currentActivationFingerprint({ cwd }));
|
|
1741
|
+
} catch (error) {
|
|
1742
|
+
// Without a readable activation generation no snapshot can be proven
|
|
1743
|
+
// current, so publish nothing rather than a snapshot consumers cannot
|
|
1744
|
+
// validate against.
|
|
1745
|
+
gjcProducersComplete = false;
|
|
1746
|
+
logger.warn("Failed to derive GJC bundle activation generation", { error });
|
|
1747
|
+
}
|
|
1748
|
+
const gjcFindings = new GjcRuntimeFindingAccumulator(gjcActivationGeneration);
|
|
1749
|
+
|
|
1712
1750
|
// Always-on GJC plugin bundle tools (validated registry surfaces). This is
|
|
1713
1751
|
// additive and a no-op when no plugins are installed for the cwd. Surfaces
|
|
1714
1752
|
// are hash-verified and collision-checked; declared names are authoritative.
|
|
@@ -1719,9 +1757,11 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
|
|
|
1719
1757
|
});
|
|
1720
1758
|
if (pluginToolResult.tools.length > 0) customTools.push(...pluginToolResult.tools);
|
|
1721
1759
|
for (const q of pluginToolResult.quarantine) {
|
|
1760
|
+
gjcFindings.add({ identity: q.identity, surfaceId: q.surfaceId, code: q.code, message: q.message });
|
|
1722
1761
|
logger.warn("Quarantined GJC plugin surface", { plugin: q.plugin, surface: q.surfaceId, code: q.code });
|
|
1723
1762
|
}
|
|
1724
1763
|
} catch (error) {
|
|
1764
|
+
gjcProducersComplete = false;
|
|
1725
1765
|
logger.warn("Failed to load always-on GJC plugin tools", { error });
|
|
1726
1766
|
}
|
|
1727
1767
|
|
|
@@ -1753,6 +1793,7 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
|
|
|
1753
1793
|
try {
|
|
1754
1794
|
const { configs, quarantine } = await buildPluginMcpConfigs({ cwd });
|
|
1755
1795
|
for (const q of quarantine) {
|
|
1796
|
+
gjcFindings.add({ identity: q.identity, surfaceId: q.surfaceId, code: q.code, message: q.message });
|
|
1756
1797
|
logger.warn("Quarantined GJC plugin MCP", { plugin: q.plugin, surface: q.surfaceId, code: q.code });
|
|
1757
1798
|
}
|
|
1758
1799
|
if (Object.keys(configs).length > 0) {
|
|
@@ -1766,6 +1807,10 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
|
|
|
1766
1807
|
);
|
|
1767
1808
|
const result = await owned.connectServers(configs, sources as never);
|
|
1768
1809
|
for (const [server, err] of result.errors) {
|
|
1810
|
+
// A server that failed to connect leaves this generation
|
|
1811
|
+
// incomplete: its surfaces produced no evidence, so publishing
|
|
1812
|
+
// would present a partial pass as a clear one.
|
|
1813
|
+
gjcProducersComplete = false;
|
|
1769
1814
|
logger.warn("GJC plugin MCP connect failed", { path: `mcp:${server}`, error: err });
|
|
1770
1815
|
}
|
|
1771
1816
|
if (result.connectedServers.length > 0) {
|
|
@@ -1785,6 +1830,7 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
|
|
|
1785
1830
|
}
|
|
1786
1831
|
}
|
|
1787
1832
|
} catch (error) {
|
|
1833
|
+
gjcProducersComplete = false;
|
|
1788
1834
|
logger.warn("Failed to wire GJC plugin MCP servers", { error });
|
|
1789
1835
|
}
|
|
1790
1836
|
} else if (isCanonicalSubSession) {
|
|
@@ -1834,11 +1880,14 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
|
|
|
1834
1880
|
inlineExtensions.push(createPluginHooksExtension(pluginHookResult.hooks));
|
|
1835
1881
|
}
|
|
1836
1882
|
for (const q of pluginHookResult.quarantine) {
|
|
1883
|
+
gjcFindings.add({ identity: q.identity, surfaceId: q.surfaceId, code: q.code, message: q.message });
|
|
1837
1884
|
logger.warn("Quarantined GJC plugin hook", { plugin: q.plugin, surface: q.surfaceId, code: q.code });
|
|
1838
1885
|
}
|
|
1839
1886
|
} catch (error) {
|
|
1887
|
+
gjcProducersComplete = false;
|
|
1840
1888
|
logger.warn("Failed to load constrained GJC plugin hooks", { error });
|
|
1841
1889
|
}
|
|
1890
|
+
|
|
1842
1891
|
let notificationCfg: NotificationConfig | undefined;
|
|
1843
1892
|
try {
|
|
1844
1893
|
notificationCfg = getNotificationConfig(settings);
|
|
@@ -2184,6 +2233,15 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
|
|
|
2184
2233
|
tools: Map<string, AgentTool>,
|
|
2185
2234
|
candidateModel?: Model,
|
|
2186
2235
|
): Promise<BuildSystemPromptResult> => {
|
|
2236
|
+
// This callback is reused for later prompt/tool/model rebuilds. Retire
|
|
2237
|
+
// the previous generation's evidence up front: from here until a
|
|
2238
|
+
// complete pass republishes, consumers must read `unavailable` rather
|
|
2239
|
+
// than a snapshot describing a generation that no longer applies.
|
|
2240
|
+
// Invalidating at entry (not beside the publish) means an await or a
|
|
2241
|
+
// throw in between cannot leave stale evidence readable. The reserved
|
|
2242
|
+
// epoch additionally fences overlapping rebuilds, so a slower earlier
|
|
2243
|
+
// pass cannot publish over a newer one.
|
|
2244
|
+
const gjcPassEpoch = gjcRuntimeStore.beginPass();
|
|
2187
2245
|
toolContextStore.setToolNames(toolNames);
|
|
2188
2246
|
const promptTools = (() => {
|
|
2189
2247
|
const previousPromptMetadataModel = promptMetadataModel;
|
|
@@ -2216,8 +2274,17 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
|
|
|
2216
2274
|
try {
|
|
2217
2275
|
pluginSystemAppendices = await renderAlwaysOnSystemAppendices({ cwd });
|
|
2218
2276
|
} catch (error) {
|
|
2277
|
+
gjcProducersComplete = false;
|
|
2219
2278
|
logger.warn("Failed to render GJC plugin system appendices", { error });
|
|
2220
2279
|
}
|
|
2280
|
+
|
|
2281
|
+
// Publication point for GJC bundle runtime evidence. Appendix rendering
|
|
2282
|
+
// is the last producer, so only here is the generation complete.
|
|
2283
|
+
//
|
|
2284
|
+
// The previous generation was already retired at callback entry, so a
|
|
2285
|
+
// partial pass simply never republishes and consumers keep reading
|
|
2286
|
+
// `unavailable` rather than a stale generation.
|
|
2287
|
+
if (gjcProducersComplete) gjcRuntimeStore.publish(gjcFindings.snapshot(), gjcPassEpoch);
|
|
2221
2288
|
const defaultPrompt = await buildSystemPromptInternal({
|
|
2222
2289
|
cwd,
|
|
2223
2290
|
skills,
|
|
@@ -2364,6 +2431,9 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
|
|
|
2364
2431
|
(options.alwaysActiveToolNames ?? []).map(name => name.toLowerCase()),
|
|
2365
2432
|
);
|
|
2366
2433
|
const essentialBuiltinNames = new Set(computeEssentialBuiltinNames(settings));
|
|
2434
|
+
// `task.eager` promises delegation preference. In discovery mode the task tool
|
|
2435
|
+
// would otherwise be hidden, making the matching prompt instruction unreachable.
|
|
2436
|
+
if (eagerTasks) essentialBuiltinNames.add("task");
|
|
2367
2437
|
const allowedDiscoveredBuiltinNames = options.discoverableToolAllowedNames
|
|
2368
2438
|
? new Set(options.discoverableToolAllowedNames.map(name => name.toLowerCase()))
|
|
2369
2439
|
: undefined;
|
|
@@ -2568,6 +2638,9 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
|
|
|
2568
2638
|
maxRetryDelayMs: retrySettings.maxDelayMs,
|
|
2569
2639
|
requestMaxRetries: retrySettings.requestMaxRetries,
|
|
2570
2640
|
streamMaxRetries: retrySettings.streamMaxRetries,
|
|
2641
|
+
streamFirstEventTimeoutMs: settings.has("retry.streamFirstEventTimeoutMs")
|
|
2642
|
+
? retrySettings.streamFirstEventTimeoutMs
|
|
2643
|
+
: undefined,
|
|
2571
2644
|
kimiApiFormat: settings.get("providers.kimiApiFormat") ?? "anthropic",
|
|
2572
2645
|
shouldPause: options.shouldPause,
|
|
2573
2646
|
preferWebsockets: preferOpenAICodexWebsockets,
|
|
@@ -2853,6 +2926,11 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
|
|
|
2853
2926
|
// microtask (the ToolSession closure needs `session` assigned). Await it
|
|
2854
2927
|
// so a resumed canonical workflow session returns with `ask` resident.
|
|
2855
2928
|
await session.workflowGateToolRestoration;
|
|
2929
|
+
// Expose the published evidence on the session itself so UI surfaces that
|
|
2930
|
+
// only hold a session (Settings) can consume it without threading the
|
|
2931
|
+
// creation result through every controller.
|
|
2932
|
+
session.gjcRuntimeSnapshot = gjcRuntimeStore;
|
|
2933
|
+
session.gjcActivationGeneration = gjcActivationGeneration;
|
|
2856
2934
|
return {
|
|
2857
2935
|
session,
|
|
2858
2936
|
extensionsResult,
|
|
@@ -2861,6 +2939,7 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
|
|
|
2861
2939
|
modelFallbackMessage,
|
|
2862
2940
|
lspServers,
|
|
2863
2941
|
eventBus,
|
|
2942
|
+
gjcRuntimeSnapshot: gjcRuntimeStore,
|
|
2864
2943
|
};
|
|
2865
2944
|
} catch (error) {
|
|
2866
2945
|
// Release the subscription if the throw happened after install but before the
|