@caupulican/pi-adaptative 0.95.0 → 0.96.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 +19 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.d.ts.map +1 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.js +28 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.js.map +1 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.ts +25 -0
- package/dist/bundled-resources/extensions/tps/index.d.ts +3 -0
- package/dist/bundled-resources/extensions/tps/index.d.ts.map +1 -0
- package/dist/bundled-resources/extensions/tps/index.js +44 -0
- package/dist/bundled-resources/extensions/tps/index.js.map +1 -0
- package/dist/bundled-resources/extensions/tps/index.ts +48 -0
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +12 -3
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/compaction-controller.d.ts +3 -0
- package/dist/core/compaction-controller.d.ts.map +1 -1
- package/dist/core/compaction-controller.js +12 -1
- package/dist/core/compaction-controller.js.map +1 -1
- package/dist/core/extension-import-authority.d.ts +3 -1
- package/dist/core/extension-import-authority.d.ts.map +1 -1
- package/dist/core/extension-import-authority.js +15 -0
- package/dist/core/extension-import-authority.js.map +1 -1
- package/dist/core/keybindings.d.ts +2 -2
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +2 -2
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/profile-filter-controller.d.ts.map +1 -1
- package/dist/core/profile-filter-controller.js +5 -2
- package/dist/core/profile-filter-controller.js.map +1 -1
- package/dist/core/provider-prompt-contracts.d.ts +5 -1
- package/dist/core/provider-prompt-contracts.d.ts.map +1 -1
- package/dist/core/provider-prompt-contracts.js +5 -1
- package/dist/core/provider-prompt-contracts.js.map +1 -1
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +6 -2
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/risk-classifier.d.ts.map +1 -1
- package/dist/core/risk-classifier.js +22 -2
- package/dist/core/risk-classifier.js.map +1 -1
- package/dist/core/settings-manager.d.ts +7 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +22 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/system-prompt-builder.d.ts +1 -0
- package/dist/core/system-prompt-builder.d.ts.map +1 -1
- package/dist/core/system-prompt-builder.js +21 -1
- package/dist/core/system-prompt-builder.js.map +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +5 -1
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tools/goal.d.ts.map +1 -1
- package/dist/core/tools/goal.js +6 -16
- package/dist/core/tools/goal.js.map +1 -1
- package/dist/core/tools/orchestration-panel.d.ts +7 -0
- package/dist/core/tools/orchestration-panel.d.ts.map +1 -1
- package/dist/core/tools/orchestration-panel.js +58 -9
- package/dist/core/tools/orchestration-panel.js.map +1 -1
- package/dist/core/tools/task-steps.d.ts.map +1 -1
- package/dist/core/tools/task-steps.js +1 -0
- package/dist/core/tools/task-steps.js.map +1 -1
- package/dist/modes/interactive/components/agents-overlay.d.ts +16 -4
- package/dist/modes/interactive/components/agents-overlay.d.ts.map +1 -1
- package/dist/modes/interactive/components/agents-overlay.js +108 -29
- package/dist/modes/interactive/components/agents-overlay.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +5 -4
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/docs/extensions.md +2 -0
- package/docs/index.md +1 -0
- package/docs/keybindings.md +2 -0
- package/docs/task-steps.md +2 -0
- package/docs/tmux-agent-manager.md +1 -1
- package/docs/work-lifecycle.md +137 -0
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/npm-shrinkwrap.json +12 -12
- package/package.json +4 -4
|
@@ -1940,6 +1940,7 @@ export default function tmuxAgentManagerExtension(pi: ExtensionAPI) {
|
|
|
1940
1940
|
let handoffContext: ExtensionContext | undefined;
|
|
1941
1941
|
let handoffTail = Promise.resolve();
|
|
1942
1942
|
const jobWatchers = new Map<string, fs.FSWatcher>();
|
|
1943
|
+
const reconciledTerminalTurns = new Set<string>();
|
|
1943
1944
|
const bridge: HostBridge = pi;
|
|
1944
1945
|
|
|
1945
1946
|
const closeJobWatchers = () => {
|
|
@@ -1954,12 +1955,36 @@ export default function tmuxAgentManagerExtension(pi: ExtensionAPI) {
|
|
|
1954
1955
|
);
|
|
1955
1956
|
for (const job of jobs) {
|
|
1956
1957
|
if (!isFireTaskTerminal(job)) continue;
|
|
1958
|
+
// A fresh host may rehydrate a legacy running lane after this external job already persisted
|
|
1959
|
+
// its terminal result. Reconcile that terminal truth once per process/turn even when the
|
|
1960
|
+
// completion handoff was delivered earlier; ManagedLaneController makes the replay inert
|
|
1961
|
+
// when its own lifecycle is already terminal.
|
|
1962
|
+
for (const agent of job.agents) {
|
|
1963
|
+
const turn = agent.currentTurn ?? 1;
|
|
1964
|
+
if ((agent.notifiedTurn ?? 0) < turn) continue;
|
|
1965
|
+
const reconciliationKey = `${job.id}:${agent.id}:${turn}:${agent.result?.status ?? "failed"}`;
|
|
1966
|
+
if (reconciledTerminalTurns.has(reconciliationKey)) continue;
|
|
1967
|
+
bridge.reportManagedLane?.({
|
|
1968
|
+
laneId: agentLaneId(job.id, agent.id),
|
|
1969
|
+
phase: "terminal",
|
|
1970
|
+
status: agent.result?.status,
|
|
1971
|
+
reasonCode: "tmux_terminal_reconciled",
|
|
1972
|
+
});
|
|
1973
|
+
reconciledTerminalTurns.add(reconciliationKey);
|
|
1974
|
+
while (reconciledTerminalTurns.size > 1_024) {
|
|
1975
|
+
const oldest = reconciledTerminalTurns.values().next().value;
|
|
1976
|
+
if (oldest === undefined) break;
|
|
1977
|
+
reconciledTerminalTurns.delete(oldest);
|
|
1978
|
+
}
|
|
1979
|
+
}
|
|
1957
1980
|
// Per-turn notify: a job is not permanently "closed" after its first terminal turn — a
|
|
1958
1981
|
// follow-up reopens it, so the gate is per-agent (notifiedTurn < currentTurn), not a
|
|
1959
1982
|
// single whole-job notifiedAt flag.
|
|
1960
1983
|
const pendingAgents = job.agents.filter((agent) => (agent.notifiedTurn ?? 0) < (agent.currentTurn ?? 1));
|
|
1961
1984
|
if (pendingAgents.length === 0) continue;
|
|
1962
1985
|
for (const agent of pendingAgents) {
|
|
1986
|
+
const reconciliationKey = `${job.id}:${agent.id}:${agent.currentTurn ?? 1}:${agent.result?.status ?? "failed"}`;
|
|
1987
|
+
reconciledTerminalTurns.add(reconciliationKey);
|
|
1963
1988
|
// Advisory-only, and only ever reported when the worker itself chose to write the
|
|
1964
1989
|
// claim file — never fabricated, never a hard cross-process cap.
|
|
1965
1990
|
const usage = readWorkerUsageClaim(job, agent);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/bundled-resources/extensions/tps/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAS9D,MAAM,CAAC,OAAO,WAAW,EAAE,EAAE,YAAY,QAsCxC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
function isAssistantMessage(message) {
|
|
2
|
+
if (!message || typeof message !== "object")
|
|
3
|
+
return false;
|
|
4
|
+
const role = message.role;
|
|
5
|
+
return role === "assistant";
|
|
6
|
+
}
|
|
7
|
+
export default function (pi) {
|
|
8
|
+
let agentStartMs = null;
|
|
9
|
+
pi.on("agent_start", () => {
|
|
10
|
+
agentStartMs = Date.now();
|
|
11
|
+
});
|
|
12
|
+
pi.on("agent_end", (event, ctx) => {
|
|
13
|
+
if (!ctx.hasUI)
|
|
14
|
+
return;
|
|
15
|
+
if (agentStartMs === null)
|
|
16
|
+
return;
|
|
17
|
+
const elapsedMs = Date.now() - agentStartMs;
|
|
18
|
+
agentStartMs = null;
|
|
19
|
+
if (elapsedMs <= 0)
|
|
20
|
+
return;
|
|
21
|
+
let input = 0;
|
|
22
|
+
let output = 0;
|
|
23
|
+
let cacheRead = 0;
|
|
24
|
+
let cacheWrite = 0;
|
|
25
|
+
let totalTokens = 0;
|
|
26
|
+
for (const message of event.messages) {
|
|
27
|
+
if (!isAssistantMessage(message))
|
|
28
|
+
continue;
|
|
29
|
+
input += message.usage.input || 0;
|
|
30
|
+
output += message.usage.output || 0;
|
|
31
|
+
cacheRead += message.usage.cacheRead || 0;
|
|
32
|
+
cacheWrite += message.usage.cacheWrite || 0;
|
|
33
|
+
totalTokens += message.usage.totalTokens || 0;
|
|
34
|
+
}
|
|
35
|
+
if (output <= 0)
|
|
36
|
+
return;
|
|
37
|
+
const elapsedSeconds = elapsedMs / 1000;
|
|
38
|
+
const tokensPerSecond = output / elapsedSeconds;
|
|
39
|
+
const message = `TPS ${tokensPerSecond.toFixed(1)} tok/s. out ${output.toLocaleString()}, in ${input.toLocaleString()}, cache r/w ${cacheRead.toLocaleString()}/${cacheWrite.toLocaleString()}, total ${totalTokens.toLocaleString()}, ${elapsedSeconds.toFixed(1)}s`;
|
|
40
|
+
// Footer status stays until the next turn overwrites it. notify() is a 2s activity-lane flash.
|
|
41
|
+
ctx.ui.setStatus("tps", message);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/bundled-resources/extensions/tps/index.ts"],"names":[],"mappings":"AAGA,SAAS,kBAAkB,CAAC,OAAgB;IAC3C,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC1D,MAAM,IAAI,GAAI,OAA8B,CAAC,IAAI,CAAC;IAClD,OAAO,IAAI,KAAK,WAAW,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,OAAO,WAAW,EAAgB;IACxC,IAAI,YAAY,GAAkB,IAAI,CAAC;IAEvC,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;QACzB,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACjC,IAAI,CAAC,GAAG,CAAC,KAAK;YAAE,OAAO;QACvB,IAAI,YAAY,KAAK,IAAI;YAAE,OAAO;QAElC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC;QAC5C,YAAY,GAAG,IAAI,CAAC;QACpB,IAAI,SAAS,IAAI,CAAC;YAAE,OAAO;QAE3B,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,WAAW,GAAG,CAAC,CAAC;QAEpB,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACtC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;gBAAE,SAAS;YAC3C,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;YAClC,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;YACpC,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC;YAC1C,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC;YAC5C,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,MAAM,IAAI,CAAC;YAAE,OAAO;QAExB,MAAM,cAAc,GAAG,SAAS,GAAG,IAAI,CAAC;QACxC,MAAM,eAAe,GAAG,MAAM,GAAG,cAAc,CAAC;QAChD,MAAM,OAAO,GAAG,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,MAAM,CAAC,cAAc,EAAE,QAAQ,KAAK,CAAC,cAAc,EAAE,eAAe,SAAS,CAAC,cAAc,EAAE,IAAI,UAAU,CAAC,cAAc,EAAE,WAAW,WAAW,CAAC,cAAc,EAAE,KAAK,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;QACtQ,+FAA+F;QAC/F,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import type { ExtensionAPI } from \"@caupulican/pi-adaptative\";\nimport type { AssistantMessage } from \"@caupulican/pi-ai\";\n\nfunction isAssistantMessage(message: unknown): message is AssistantMessage {\n\tif (!message || typeof message !== \"object\") return false;\n\tconst role = (message as { role?: unknown }).role;\n\treturn role === \"assistant\";\n}\n\nexport default function (pi: ExtensionAPI) {\n\tlet agentStartMs: number | null = null;\n\n\tpi.on(\"agent_start\", () => {\n\t\tagentStartMs = Date.now();\n\t});\n\n\tpi.on(\"agent_end\", (event, ctx) => {\n\t\tif (!ctx.hasUI) return;\n\t\tif (agentStartMs === null) return;\n\n\t\tconst elapsedMs = Date.now() - agentStartMs;\n\t\tagentStartMs = null;\n\t\tif (elapsedMs <= 0) return;\n\n\t\tlet input = 0;\n\t\tlet output = 0;\n\t\tlet cacheRead = 0;\n\t\tlet cacheWrite = 0;\n\t\tlet totalTokens = 0;\n\n\t\tfor (const message of event.messages) {\n\t\t\tif (!isAssistantMessage(message)) continue;\n\t\t\tinput += message.usage.input || 0;\n\t\t\toutput += message.usage.output || 0;\n\t\t\tcacheRead += message.usage.cacheRead || 0;\n\t\t\tcacheWrite += message.usage.cacheWrite || 0;\n\t\t\ttotalTokens += message.usage.totalTokens || 0;\n\t\t}\n\n\t\tif (output <= 0) return;\n\n\t\tconst elapsedSeconds = elapsedMs / 1000;\n\t\tconst tokensPerSecond = output / elapsedSeconds;\n\t\tconst message = `TPS ${tokensPerSecond.toFixed(1)} tok/s. out ${output.toLocaleString()}, in ${input.toLocaleString()}, cache r/w ${cacheRead.toLocaleString()}/${cacheWrite.toLocaleString()}, total ${totalTokens.toLocaleString()}, ${elapsedSeconds.toFixed(1)}s`;\n\t\t// Footer status stays until the next turn overwrites it. notify() is a 2s activity-lane flash.\n\t\tctx.ui.setStatus(\"tps\", message);\n\t});\n}\n"]}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { ExtensionAPI } from "@caupulican/pi-adaptative";
|
|
2
|
+
import type { AssistantMessage } from "@caupulican/pi-ai";
|
|
3
|
+
|
|
4
|
+
function isAssistantMessage(message: unknown): message is AssistantMessage {
|
|
5
|
+
if (!message || typeof message !== "object") return false;
|
|
6
|
+
const role = (message as { role?: unknown }).role;
|
|
7
|
+
return role === "assistant";
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export default function (pi: ExtensionAPI) {
|
|
11
|
+
let agentStartMs: number | null = null;
|
|
12
|
+
|
|
13
|
+
pi.on("agent_start", () => {
|
|
14
|
+
agentStartMs = Date.now();
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
pi.on("agent_end", (event, ctx) => {
|
|
18
|
+
if (!ctx.hasUI) return;
|
|
19
|
+
if (agentStartMs === null) return;
|
|
20
|
+
|
|
21
|
+
const elapsedMs = Date.now() - agentStartMs;
|
|
22
|
+
agentStartMs = null;
|
|
23
|
+
if (elapsedMs <= 0) return;
|
|
24
|
+
|
|
25
|
+
let input = 0;
|
|
26
|
+
let output = 0;
|
|
27
|
+
let cacheRead = 0;
|
|
28
|
+
let cacheWrite = 0;
|
|
29
|
+
let totalTokens = 0;
|
|
30
|
+
|
|
31
|
+
for (const message of event.messages) {
|
|
32
|
+
if (!isAssistantMessage(message)) continue;
|
|
33
|
+
input += message.usage.input || 0;
|
|
34
|
+
output += message.usage.output || 0;
|
|
35
|
+
cacheRead += message.usage.cacheRead || 0;
|
|
36
|
+
cacheWrite += message.usage.cacheWrite || 0;
|
|
37
|
+
totalTokens += message.usage.totalTokens || 0;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
if (output <= 0) return;
|
|
41
|
+
|
|
42
|
+
const elapsedSeconds = elapsedMs / 1000;
|
|
43
|
+
const tokensPerSecond = output / elapsedSeconds;
|
|
44
|
+
const message = `TPS ${tokensPerSecond.toFixed(1)} tok/s. out ${output.toLocaleString()}, in ${input.toLocaleString()}, cache r/w ${cacheRead.toLocaleString()}/${cacheWrite.toLocaleString()}, total ${totalTokens.toLocaleString()}, ${elapsedSeconds.toFixed(1)}s`;
|
|
45
|
+
// Footer status stays until the next turn overwrites it. notify() is a 2s activity-lane flash.
|
|
46
|
+
ctx.ui.setStatus("tps", message);
|
|
47
|
+
});
|
|
48
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-session-services.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-services.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAI/C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-session-services.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-services.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import { resolvePath } from "../utils/paths.js";
|
|
|
3
3
|
import { configFile } from "./agent-paths.js";
|
|
4
4
|
import { AuthStorage } from "./auth-storage.js";
|
|
5
5
|
import { bindSavedBedrockScope } from "./bedrock-scope.js";
|
|
6
|
+
import { isDefaultOnBundledExtension, isExtensionPathAllowedForImport } from "./extension-import-authority.js";
|
|
6
7
|
import { ModelRegistry } from "./model-registry.js";
|
|
7
8
|
import { DefaultResourceLoader } from "./resource-loader.js";
|
|
8
9
|
import { parseResourceProfileInput } from "./resource-profile-blocks.js";
|
|
@@ -70,9 +71,17 @@ export async function createAgentSessionServices(options) {
|
|
|
70
71
|
const diagnostics = [];
|
|
71
72
|
const extensionsResult = resourceLoader.getExtensions();
|
|
72
73
|
const activeProfileNames = settingsManager.getActiveResourceProfileNames();
|
|
73
|
-
const runtimeExtensionPaths = new Set(
|
|
74
|
-
|
|
75
|
-
|
|
74
|
+
const runtimeExtensionPaths = new Set(extensionsResult.extensions
|
|
75
|
+
.filter((extension) => {
|
|
76
|
+
if (extension.sourceInfo.source === "inline")
|
|
77
|
+
return true;
|
|
78
|
+
if (isDefaultOnBundledExtension(extension.path, extension.sourceInfo.source)) {
|
|
79
|
+
return isExtensionPathAllowedForImport(settingsManager, extension.path, "default-on", extension.sourceInfo.baseDir);
|
|
80
|
+
}
|
|
81
|
+
return (activeProfileNames.length > 0 &&
|
|
82
|
+
settingsManager.isResourceAllowedByProfile("extensions", extension.path, extension.sourceInfo.baseDir));
|
|
83
|
+
})
|
|
84
|
+
.map((extension) => extension.path));
|
|
76
85
|
for (const { name, config, extensionPath } of extensionsResult.runtime.pendingProviderRegistrations) {
|
|
77
86
|
// Initial model resolution needs providers before AgentSession binds its runner, but it must
|
|
78
87
|
// observe the same UAC-filtered extension generation as RuntimeBuilder. Registrations from
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-session-services.js","sourceRoot":"","sources":["../../src/core/agent-session-services.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ThinkingLevel } from \"@caupulican/pi-agent-core\";\nimport type { SessionManager } from \"@caupulican/pi-agent-core/node\";\nimport type { Model } from \"@caupulican/pi-ai\";\nimport { getAgentDir } from \"../config.ts\";\nimport { resolvePath } from \"../utils/paths.ts\";\nimport { configFile } from \"./agent-paths.ts\";\nimport { AuthStorage } from \"./auth-storage.ts\";\nimport { bindSavedBedrockScope } from \"./bedrock-scope.ts\";\nimport type { SessionStartEvent, ToolDefinition } from \"./extensions/index.ts\";\nimport { ModelRegistry } from \"./model-registry.ts\";\nimport { DefaultResourceLoader, type DefaultResourceLoaderOptions, type ResourceLoader } from \"./resource-loader.ts\";\nimport { parseResourceProfileInput } from \"./resource-profile-blocks.ts\";\nimport { type CreateAgentSessionOptions, type CreateAgentSessionResult, createAgentSession } from \"./sdk.ts\";\nimport { SettingsManager } from \"./settings-manager.ts\";\n\n/**\n * Non-fatal issues collected while creating services or sessions.\n *\n * Runtime creation returns diagnostics to the caller instead of printing or\n * exiting. The app layer decides whether warnings should be shown and whether\n * errors should abort startup.\n */\nexport interface AgentSessionRuntimeDiagnostic {\n\ttype: \"info\" | \"warning\" | \"error\";\n\tmessage: string;\n}\n\n/**\n * Inputs for creating cwd-bound runtime services.\n *\n * These services are recreated whenever the effective session cwd changes.\n * CLI-provided resource paths should be resolved to absolute paths before they\n * reach this function, so later cwd switches do not reinterpret them.\n */\nexport interface CreateAgentSessionServicesOptions {\n\tcwd: string;\n\tagentDir?: string;\n\tauthStorage?: AuthStorage;\n\tsettingsManager?: SettingsManager;\n\tmodelRegistry?: ModelRegistry;\n\textensionFlagValues?: Map<string, boolean | string>;\n\tresourceLoaderOptions?: Omit<DefaultResourceLoaderOptions, \"cwd\" | \"agentDir\" | \"settingsManager\">;\n}\n\n/**\n * Inputs for creating an AgentSession from already-created services.\n *\n * Use this after services exist and any cwd-bound model/tool/session options\n * have been resolved against those services.\n */\nexport interface CreateAgentSessionFromServicesOptions {\n\tservices: AgentSessionServices;\n\tsessionManager: SessionManager;\n\tsessionStartEvent?: SessionStartEvent;\n\tmodel?: Model<any>;\n\tthinkingLevel?: ThinkingLevel;\n\tserviceTier?: CreateAgentSessionOptions[\"serviceTier\"];\n\t/** Preserve whether the foreground model came from an explicit launch flag. */\n\tisExplicitModel?: boolean;\n\t/** Preserve whether the thinking level came from an explicit launch flag. */\n\tisExplicitThinking?: boolean;\n\tscopedModels?: Array<{ model: Model<any>; thinkingLevel?: ThinkingLevel }>;\n\ttools?: string[];\n\texcludeTools?: CreateAgentSessionOptions[\"excludeTools\"];\n\tnoTools?: CreateAgentSessionOptions[\"noTools\"];\n\ttoolProfileFilter?: CreateAgentSessionOptions[\"toolProfileFilter\"];\n\tresourceProfileDefinitions?: CreateAgentSessionOptions[\"resourceProfileDefinitions\"];\n\tresourceProfileJson?: CreateAgentSessionOptions[\"resourceProfileJson\"];\n\tresourceProfiles?: CreateAgentSessionOptions[\"resourceProfiles\"];\n\torchestrationProfile?: CreateAgentSessionOptions[\"orchestrationProfile\"];\n\tcustomTools?: ToolDefinition[];\n}\n\n/**\n * Coherent cwd-bound runtime services for one effective session cwd.\n *\n * This is infrastructure only. The AgentSession itself is created separately so\n * session options can be resolved against these services first.\n */\nexport interface AgentSessionServices {\n\tcwd: string;\n\tagentDir: string;\n\tauthStorage: AuthStorage;\n\tsettingsManager: SettingsManager;\n\tmodelRegistry: ModelRegistry;\n\tresourceLoader: ResourceLoader;\n\tdiagnostics: AgentSessionRuntimeDiagnostic[];\n}\n\nfunction applyExtensionFlagValues(\n\tresourceLoader: ResourceLoader,\n\textensionFlagValues: Map<string, boolean | string> | undefined,\n): AgentSessionRuntimeDiagnostic[] {\n\tif (!extensionFlagValues) {\n\t\treturn [];\n\t}\n\n\tconst diagnostics: AgentSessionRuntimeDiagnostic[] = [];\n\tconst extensionsResult = resourceLoader.getExtensions();\n\tconst registeredFlags = new Map<string, { type: \"boolean\" | \"string\" }>();\n\tfor (const extension of extensionsResult.extensions) {\n\t\tfor (const [name, flag] of extension.flags) {\n\t\t\tregisteredFlags.set(name, { type: flag.type });\n\t\t}\n\t}\n\n\tconst unknownFlags: string[] = [];\n\tfor (const [name, value] of extensionFlagValues) {\n\t\tconst flag = registeredFlags.get(name);\n\t\tif (!flag) {\n\t\t\tunknownFlags.push(name);\n\t\t\tcontinue;\n\t\t}\n\t\tif (flag.type === \"boolean\") {\n\t\t\textensionsResult.runtime.flagValues.set(name, true);\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeof value === \"string\") {\n\t\t\textensionsResult.runtime.flagValues.set(name, value);\n\t\t\tcontinue;\n\t\t}\n\t\tdiagnostics.push({\n\t\t\ttype: \"error\",\n\t\t\tmessage: `Extension flag \"--${name}\" requires a value`,\n\t\t});\n\t}\n\n\tif (unknownFlags.length > 0) {\n\t\tdiagnostics.push({\n\t\t\ttype: \"error\",\n\t\t\tmessage: `Unknown option${unknownFlags.length === 1 ? \"\" : \"s\"}: ${unknownFlags.map((name) => `--${name}`).join(\", \")}`,\n\t\t});\n\t}\n\n\treturn diagnostics;\n}\n\n/**\n * Create cwd-bound runtime services.\n *\n * Returns services plus diagnostics. It does not create an AgentSession.\n */\nexport async function createAgentSessionServices(\n\toptions: CreateAgentSessionServicesOptions,\n): Promise<AgentSessionServices> {\n\tconst cwd = resolvePath(options.cwd);\n\tconst agentDir = options.agentDir ? resolvePath(options.agentDir) : getAgentDir();\n\tconst authStorage = options.authStorage ?? AuthStorage.create(configFile(agentDir, \"auth.json\"));\n\tconst settingsManager = options.settingsManager ?? SettingsManager.create(cwd, agentDir);\n\tconst modelRegistry =\n\t\toptions.modelRegistry ?? ModelRegistry.create(authStorage, configFile(agentDir, \"models.json\"));\n\tbindSavedBedrockScope(settingsManager, modelRegistry);\n\tconst resourceLoader = new DefaultResourceLoader({\n\t\t...(options.resourceLoaderOptions ?? {}),\n\t\tcwd,\n\t\tagentDir,\n\t\tsettingsManager,\n\t});\n\tawait resourceLoader.reload();\n\n\tconst diagnostics: AgentSessionRuntimeDiagnostic[] = [];\n\tconst extensionsResult = resourceLoader.getExtensions();\n\tconst activeProfileNames = settingsManager.getActiveResourceProfileNames();\n\tconst runtimeExtensionPaths = new Set(\n\t\t(activeProfileNames.length === 0\n\t\t\t? extensionsResult.extensions.filter((extension) => extension.sourceInfo.source === \"inline\")\n\t\t\t: extensionsResult.extensions.filter((extension) =>\n\t\t\t\t\tsettingsManager.isResourceAllowedByProfile(\"extensions\", extension.path, extension.sourceInfo.baseDir),\n\t\t\t\t)\n\t\t).map((extension) => extension.path),\n\t);\n\tfor (const { name, config, extensionPath } of extensionsResult.runtime.pendingProviderRegistrations) {\n\t\t// Initial model resolution needs providers before AgentSession binds its runner, but it must\n\t\t// observe the same UAC-filtered extension generation as RuntimeBuilder. Registrations from\n\t\t// withheld extensions remain inert and are discarded with the pending queue below.\n\t\tif (!runtimeExtensionPaths.has(extensionPath)) continue;\n\t\ttry {\n\t\t\tmodelRegistry.registerProvider(name, config);\n\t\t\tlet ownedProviders = extensionsResult.runtime.providersByExtension.get(extensionPath);\n\t\t\tif (!ownedProviders) {\n\t\t\t\townedProviders = new Set();\n\t\t\t\textensionsResult.runtime.providersByExtension.set(extensionPath, ownedProviders);\n\t\t\t}\n\t\t\townedProviders.add(name);\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tdiagnostics.push({\n\t\t\t\ttype: \"error\",\n\t\t\t\tmessage: `Extension \"${extensionPath}\" error: ${message}`,\n\t\t\t});\n\t\t}\n\t}\n\textensionsResult.runtime.pendingProviderRegistrations = [];\n\tdiagnostics.push(...applyExtensionFlagValues(resourceLoader, options.extensionFlagValues));\n\n\treturn {\n\t\tcwd,\n\t\tagentDir,\n\t\tauthStorage,\n\t\tsettingsManager,\n\t\tmodelRegistry,\n\t\tresourceLoader,\n\t\tdiagnostics,\n\t};\n}\n\n/**\n * Create an AgentSession from previously created services.\n *\n * This keeps session creation separate from service creation so callers can\n * resolve model, thinking, tools, and other session inputs against the target\n * cwd before constructing the session.\n */\nexport async function createAgentSessionFromServices(\n\toptions: CreateAgentSessionFromServicesOptions,\n): Promise<CreateAgentSessionResult> {\n\tconst needsProfileReload =\n\t\toptions.resourceProfileDefinitions !== undefined ||\n\t\toptions.resourceProfileJson !== undefined ||\n\t\toptions.resourceProfiles !== undefined;\n\tif (options.resourceProfileDefinitions) {\n\t\toptions.services.settingsManager.addInlineResourceProfileDefinitions(options.resourceProfileDefinitions);\n\t}\n\tif (options.resourceProfileJson) {\n\t\tconst inputs = Array.isArray(options.resourceProfileJson)\n\t\t\t? options.resourceProfileJson\n\t\t\t: [options.resourceProfileJson];\n\t\tfor (const input of inputs) {\n\t\t\toptions.services.settingsManager.addInlineResourceProfileDefinitions(\n\t\t\t\tparseResourceProfileInput(input).profiles,\n\t\t\t);\n\t\t}\n\t}\n\tif (options.resourceProfiles !== undefined) {\n\t\toptions.services.settingsManager.setRuntimeResourceProfiles(options.resourceProfiles);\n\t}\n\tif (needsProfileReload) {\n\t\tawait options.services.resourceLoader.reload();\n\t}\n\n\treturn createAgentSession({\n\t\tcwd: options.services.cwd,\n\t\tagentDir: options.services.agentDir,\n\t\tauthStorage: options.services.authStorage,\n\t\tsettingsManager: options.services.settingsManager,\n\t\tmodelRegistry: options.services.modelRegistry,\n\t\tresourceLoader: options.services.resourceLoader,\n\t\tsessionManager: options.sessionManager,\n\t\tmodel: options.model,\n\t\tthinkingLevel: options.thinkingLevel,\n\t\tserviceTier: options.serviceTier,\n\t\tisExplicitModel: options.isExplicitModel,\n\t\tisExplicitThinking: options.isExplicitThinking,\n\t\tscopedModels: options.scopedModels,\n\t\ttools: options.tools,\n\t\texcludeTools: options.excludeTools,\n\t\tnoTools: options.noTools,\n\t\ttoolProfileFilter:\n\t\t\toptions.toolProfileFilter ?? options.services.settingsManager.getResourceProfileFilter(\"tools\"),\n\t\tcustomTools: options.customTools,\n\t\torchestrationProfile: options.orchestrationProfile,\n\t\tsessionStartEvent: options.sessionStartEvent,\n\t});\n}\n"]}
|
|
1
|
+
{"version":3,"file":"agent-session-services.js","sourceRoot":"","sources":["../../src/core/agent-session-services.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ThinkingLevel } from \"@caupulican/pi-agent-core\";\nimport type { SessionManager } from \"@caupulican/pi-agent-core/node\";\nimport type { Model } from \"@caupulican/pi-ai\";\nimport { getAgentDir } from \"../config.ts\";\nimport { resolvePath } from \"../utils/paths.ts\";\nimport { configFile } from \"./agent-paths.ts\";\nimport { AuthStorage } from \"./auth-storage.ts\";\nimport { bindSavedBedrockScope } from \"./bedrock-scope.ts\";\nimport { isDefaultOnBundledExtension, isExtensionPathAllowedForImport } from \"./extension-import-authority.ts\";\nimport type { SessionStartEvent, ToolDefinition } from \"./extensions/index.ts\";\nimport { ModelRegistry } from \"./model-registry.ts\";\nimport { DefaultResourceLoader, type DefaultResourceLoaderOptions, type ResourceLoader } from \"./resource-loader.ts\";\nimport { parseResourceProfileInput } from \"./resource-profile-blocks.ts\";\nimport { type CreateAgentSessionOptions, type CreateAgentSessionResult, createAgentSession } from \"./sdk.ts\";\nimport { SettingsManager } from \"./settings-manager.ts\";\n\n/**\n * Non-fatal issues collected while creating services or sessions.\n *\n * Runtime creation returns diagnostics to the caller instead of printing or\n * exiting. The app layer decides whether warnings should be shown and whether\n * errors should abort startup.\n */\nexport interface AgentSessionRuntimeDiagnostic {\n\ttype: \"info\" | \"warning\" | \"error\";\n\tmessage: string;\n}\n\n/**\n * Inputs for creating cwd-bound runtime services.\n *\n * These services are recreated whenever the effective session cwd changes.\n * CLI-provided resource paths should be resolved to absolute paths before they\n * reach this function, so later cwd switches do not reinterpret them.\n */\nexport interface CreateAgentSessionServicesOptions {\n\tcwd: string;\n\tagentDir?: string;\n\tauthStorage?: AuthStorage;\n\tsettingsManager?: SettingsManager;\n\tmodelRegistry?: ModelRegistry;\n\textensionFlagValues?: Map<string, boolean | string>;\n\tresourceLoaderOptions?: Omit<DefaultResourceLoaderOptions, \"cwd\" | \"agentDir\" | \"settingsManager\">;\n}\n\n/**\n * Inputs for creating an AgentSession from already-created services.\n *\n * Use this after services exist and any cwd-bound model/tool/session options\n * have been resolved against those services.\n */\nexport interface CreateAgentSessionFromServicesOptions {\n\tservices: AgentSessionServices;\n\tsessionManager: SessionManager;\n\tsessionStartEvent?: SessionStartEvent;\n\tmodel?: Model<any>;\n\tthinkingLevel?: ThinkingLevel;\n\tserviceTier?: CreateAgentSessionOptions[\"serviceTier\"];\n\t/** Preserve whether the foreground model came from an explicit launch flag. */\n\tisExplicitModel?: boolean;\n\t/** Preserve whether the thinking level came from an explicit launch flag. */\n\tisExplicitThinking?: boolean;\n\tscopedModels?: Array<{ model: Model<any>; thinkingLevel?: ThinkingLevel }>;\n\ttools?: string[];\n\texcludeTools?: CreateAgentSessionOptions[\"excludeTools\"];\n\tnoTools?: CreateAgentSessionOptions[\"noTools\"];\n\ttoolProfileFilter?: CreateAgentSessionOptions[\"toolProfileFilter\"];\n\tresourceProfileDefinitions?: CreateAgentSessionOptions[\"resourceProfileDefinitions\"];\n\tresourceProfileJson?: CreateAgentSessionOptions[\"resourceProfileJson\"];\n\tresourceProfiles?: CreateAgentSessionOptions[\"resourceProfiles\"];\n\torchestrationProfile?: CreateAgentSessionOptions[\"orchestrationProfile\"];\n\tcustomTools?: ToolDefinition[];\n}\n\n/**\n * Coherent cwd-bound runtime services for one effective session cwd.\n *\n * This is infrastructure only. The AgentSession itself is created separately so\n * session options can be resolved against these services first.\n */\nexport interface AgentSessionServices {\n\tcwd: string;\n\tagentDir: string;\n\tauthStorage: AuthStorage;\n\tsettingsManager: SettingsManager;\n\tmodelRegistry: ModelRegistry;\n\tresourceLoader: ResourceLoader;\n\tdiagnostics: AgentSessionRuntimeDiagnostic[];\n}\n\nfunction applyExtensionFlagValues(\n\tresourceLoader: ResourceLoader,\n\textensionFlagValues: Map<string, boolean | string> | undefined,\n): AgentSessionRuntimeDiagnostic[] {\n\tif (!extensionFlagValues) {\n\t\treturn [];\n\t}\n\n\tconst diagnostics: AgentSessionRuntimeDiagnostic[] = [];\n\tconst extensionsResult = resourceLoader.getExtensions();\n\tconst registeredFlags = new Map<string, { type: \"boolean\" | \"string\" }>();\n\tfor (const extension of extensionsResult.extensions) {\n\t\tfor (const [name, flag] of extension.flags) {\n\t\t\tregisteredFlags.set(name, { type: flag.type });\n\t\t}\n\t}\n\n\tconst unknownFlags: string[] = [];\n\tfor (const [name, value] of extensionFlagValues) {\n\t\tconst flag = registeredFlags.get(name);\n\t\tif (!flag) {\n\t\t\tunknownFlags.push(name);\n\t\t\tcontinue;\n\t\t}\n\t\tif (flag.type === \"boolean\") {\n\t\t\textensionsResult.runtime.flagValues.set(name, true);\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeof value === \"string\") {\n\t\t\textensionsResult.runtime.flagValues.set(name, value);\n\t\t\tcontinue;\n\t\t}\n\t\tdiagnostics.push({\n\t\t\ttype: \"error\",\n\t\t\tmessage: `Extension flag \"--${name}\" requires a value`,\n\t\t});\n\t}\n\n\tif (unknownFlags.length > 0) {\n\t\tdiagnostics.push({\n\t\t\ttype: \"error\",\n\t\t\tmessage: `Unknown option${unknownFlags.length === 1 ? \"\" : \"s\"}: ${unknownFlags.map((name) => `--${name}`).join(\", \")}`,\n\t\t});\n\t}\n\n\treturn diagnostics;\n}\n\n/**\n * Create cwd-bound runtime services.\n *\n * Returns services plus diagnostics. It does not create an AgentSession.\n */\nexport async function createAgentSessionServices(\n\toptions: CreateAgentSessionServicesOptions,\n): Promise<AgentSessionServices> {\n\tconst cwd = resolvePath(options.cwd);\n\tconst agentDir = options.agentDir ? resolvePath(options.agentDir) : getAgentDir();\n\tconst authStorage = options.authStorage ?? AuthStorage.create(configFile(agentDir, \"auth.json\"));\n\tconst settingsManager = options.settingsManager ?? SettingsManager.create(cwd, agentDir);\n\tconst modelRegistry =\n\t\toptions.modelRegistry ?? ModelRegistry.create(authStorage, configFile(agentDir, \"models.json\"));\n\tbindSavedBedrockScope(settingsManager, modelRegistry);\n\tconst resourceLoader = new DefaultResourceLoader({\n\t\t...(options.resourceLoaderOptions ?? {}),\n\t\tcwd,\n\t\tagentDir,\n\t\tsettingsManager,\n\t});\n\tawait resourceLoader.reload();\n\n\tconst diagnostics: AgentSessionRuntimeDiagnostic[] = [];\n\tconst extensionsResult = resourceLoader.getExtensions();\n\tconst activeProfileNames = settingsManager.getActiveResourceProfileNames();\n\tconst runtimeExtensionPaths = new Set(\n\t\textensionsResult.extensions\n\t\t\t.filter((extension) => {\n\t\t\t\tif (extension.sourceInfo.source === \"inline\") return true;\n\t\t\t\tif (isDefaultOnBundledExtension(extension.path, extension.sourceInfo.source)) {\n\t\t\t\t\treturn isExtensionPathAllowedForImport(\n\t\t\t\t\t\tsettingsManager,\n\t\t\t\t\t\textension.path,\n\t\t\t\t\t\t\"default-on\",\n\t\t\t\t\t\textension.sourceInfo.baseDir,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn (\n\t\t\t\t\tactiveProfileNames.length > 0 &&\n\t\t\t\t\tsettingsManager.isResourceAllowedByProfile(\"extensions\", extension.path, extension.sourceInfo.baseDir)\n\t\t\t\t);\n\t\t\t})\n\t\t\t.map((extension) => extension.path),\n\t);\n\tfor (const { name, config, extensionPath } of extensionsResult.runtime.pendingProviderRegistrations) {\n\t\t// Initial model resolution needs providers before AgentSession binds its runner, but it must\n\t\t// observe the same UAC-filtered extension generation as RuntimeBuilder. Registrations from\n\t\t// withheld extensions remain inert and are discarded with the pending queue below.\n\t\tif (!runtimeExtensionPaths.has(extensionPath)) continue;\n\t\ttry {\n\t\t\tmodelRegistry.registerProvider(name, config);\n\t\t\tlet ownedProviders = extensionsResult.runtime.providersByExtension.get(extensionPath);\n\t\t\tif (!ownedProviders) {\n\t\t\t\townedProviders = new Set();\n\t\t\t\textensionsResult.runtime.providersByExtension.set(extensionPath, ownedProviders);\n\t\t\t}\n\t\t\townedProviders.add(name);\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tdiagnostics.push({\n\t\t\t\ttype: \"error\",\n\t\t\t\tmessage: `Extension \"${extensionPath}\" error: ${message}`,\n\t\t\t});\n\t\t}\n\t}\n\textensionsResult.runtime.pendingProviderRegistrations = [];\n\tdiagnostics.push(...applyExtensionFlagValues(resourceLoader, options.extensionFlagValues));\n\n\treturn {\n\t\tcwd,\n\t\tagentDir,\n\t\tauthStorage,\n\t\tsettingsManager,\n\t\tmodelRegistry,\n\t\tresourceLoader,\n\t\tdiagnostics,\n\t};\n}\n\n/**\n * Create an AgentSession from previously created services.\n *\n * This keeps session creation separate from service creation so callers can\n * resolve model, thinking, tools, and other session inputs against the target\n * cwd before constructing the session.\n */\nexport async function createAgentSessionFromServices(\n\toptions: CreateAgentSessionFromServicesOptions,\n): Promise<CreateAgentSessionResult> {\n\tconst needsProfileReload =\n\t\toptions.resourceProfileDefinitions !== undefined ||\n\t\toptions.resourceProfileJson !== undefined ||\n\t\toptions.resourceProfiles !== undefined;\n\tif (options.resourceProfileDefinitions) {\n\t\toptions.services.settingsManager.addInlineResourceProfileDefinitions(options.resourceProfileDefinitions);\n\t}\n\tif (options.resourceProfileJson) {\n\t\tconst inputs = Array.isArray(options.resourceProfileJson)\n\t\t\t? options.resourceProfileJson\n\t\t\t: [options.resourceProfileJson];\n\t\tfor (const input of inputs) {\n\t\t\toptions.services.settingsManager.addInlineResourceProfileDefinitions(\n\t\t\t\tparseResourceProfileInput(input).profiles,\n\t\t\t);\n\t\t}\n\t}\n\tif (options.resourceProfiles !== undefined) {\n\t\toptions.services.settingsManager.setRuntimeResourceProfiles(options.resourceProfiles);\n\t}\n\tif (needsProfileReload) {\n\t\tawait options.services.resourceLoader.reload();\n\t}\n\n\treturn createAgentSession({\n\t\tcwd: options.services.cwd,\n\t\tagentDir: options.services.agentDir,\n\t\tauthStorage: options.services.authStorage,\n\t\tsettingsManager: options.services.settingsManager,\n\t\tmodelRegistry: options.services.modelRegistry,\n\t\tresourceLoader: options.services.resourceLoader,\n\t\tsessionManager: options.sessionManager,\n\t\tmodel: options.model,\n\t\tthinkingLevel: options.thinkingLevel,\n\t\tserviceTier: options.serviceTier,\n\t\tisExplicitModel: options.isExplicitModel,\n\t\tisExplicitThinking: options.isExplicitThinking,\n\t\tscopedModels: options.scopedModels,\n\t\ttools: options.tools,\n\t\texcludeTools: options.excludeTools,\n\t\tnoTools: options.noTools,\n\t\ttoolProfileFilter:\n\t\t\toptions.toolProfileFilter ?? options.services.settingsManager.getResourceProfileFilter(\"tools\"),\n\t\tcustomTools: options.customTools,\n\t\torchestrationProfile: options.orchestrationProfile,\n\t\tsessionStartEvent: options.sessionStartEvent,\n\t});\n}\n"]}
|
|
@@ -113,6 +113,9 @@ export declare class CompactionController {
|
|
|
113
113
|
/**
|
|
114
114
|
* Lifecycle records are durable bookkeeping and must not become compaction input or alter the
|
|
115
115
|
* loop's trailing-compaction guard. They remain in the real branch so recovery can inspect them.
|
|
116
|
+
*
|
|
117
|
+
* A plain filter breaks ancestry because retained children still point at removed lifecycle
|
|
118
|
+
* parents. Reconnect the already-linear active branch while preserving every real entry id.
|
|
116
119
|
*/
|
|
117
120
|
private getCompactionBranch;
|
|
118
121
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compaction-controller.d.ts","sourceRoot":"","sources":["../../src/core/compaction-controller.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"compaction-controller.d.ts","sourceRoot":"","sources":["../../src/core/compaction-controller.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAIN,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EAOvB,MAAM,iDAAiD,CAAC;AAYzD,OAAO,EAIN,KAAK,cAAc,EACnB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACnF,OAAO,KAAK,EAAE,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAItE,OAAO,KAAK,EAAE,eAAe,EAA8B,MAAM,uBAAuB,CAAC;AACzF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,MAAM,oBAAoB,GAAG,UAAU,GAAG,mBAAmB,GAAG,WAAW,CAAC;AAElF,MAAM,WAAW,8BAA8B;IAC9C,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,iCAAiC,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,QAAQ,CAAA;CAAE,CAAC;AAE1F,UAAU,wBAAwB;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iCAAiC,CAAC,EAAE,OAAO,CAAC;IAC5C,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,uBAAuB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,qBAAa,oCAAqC,SAAQ,KAAK;IAC9D,YAAY,OAAO,EAAE,MAAM,EAG1B;CACD;AA6CD,KAAK,yBAAyB,GAC3B;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,MAAM,EAAE,QAAQ,GAAG,oBAAoB,CAAA;CAAE,GACrE;IACA,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,QAAQ,GAAG,oBAAoB,CAAC;IACxC,MAAM,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACnB,GACD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAExC,MAAM,WAAW,wBAAwB;IACxC,KAAK,EAAE,KAAK,CAAC;IACb,cAAc,EAAE,cAAc,CAAC;IAC/B,eAAe,EAAE,eAAe,CAAC;IACjC,QAAQ,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IACnC,kBAAkB,IAAI,kBAAkB,CAAC;IACzC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC,CAAC;IAClG,mBAAmB,CAClB,eAAe,EAAE,KAAK,CAAC,GAAG,CAAC,EAC3B,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,GACtB,OAAO,CAAC;QAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvG,YAAY,CAAC,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACnD,kBAAkB,IAAI,MAAM,GAAG,SAAS,CAAC;IACzC,oBAAoB,CAAC,eAAe,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,aAAa,GAAG,SAAS,CAAC;IACvG,kBAAkB,IAAI,MAAM,CAAC;IAC7B,kBAAkB,IAAI,eAAe,CAAC;IACtC,WAAW,IAAI,OAAO,CAAC;IACvB,eAAe,IAAI,IAAI,CAAC;IACxB,cAAc,IAAI,IAAI,CAAC;IACvB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,CAAC,KAAK,EAAE,yBAAyB,GAAG,IAAI,CAAC;IAC7C,4BAA4B,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;IAC/D,cAAc,IAAI,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;IACxF,2BAA2B,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/C,sBAAsB,IAAI,IAAI,CAAC;IAC/B,gBAAgB,IAAI,qBAAqB,CAAC;IAC1C,wBAAwB,IAAI,MAAM,CAAC;IACnC,iBAAiB,CAAC,MAAM,EAAE,oBAAoB,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtF,gBAAgB,CACf,GAAG,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,EACpC,MAAM,EAAE,WAAW,EACnB,QAAQ,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC7B,mBAAmB,CAAC,IAAI,IAAI,CAAC;CAC7B;AAED,wBAAsB,sBAAsB,CAAC,CAAC,EAAE,OAAO,EAAE;IACxD,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;IAClB,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,IAAI;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAClF,aAAa,CAAC,MAAM,EAAE,UAAU,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;CAC5E,GAAG,OAAO,CAAC,CAAC,CAAC,CAwBb;AAED,gGAAgG;AAChG,qBAAa,oBAAoB;IAChC,OAAO,CAAC,qBAAqB,CAA8B;IAC3D,OAAO,CAAC,mBAAmB,CAA8B;IACzD,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,yBAAyB,CAAwC;IACzE,OAAO,CAAC,yBAAyB,CAAS;IAC1C,OAAO,CAAC,yBAAyB,CAAS;IAC1C,OAAO,CAAC,4BAA4B,CAA2C;IAC/E,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA2B;IAEhD,YAAY,IAAI,EAAE,wBAAwB,EAEzC;YAEa,2BAA2B;IAUzC,SAAS,IAAI,OAAO,CAMnB;IAED,OAAO,CAAC,qBAAqB;IAgC7B;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;IAWhC,OAAO,CAAC,uBAAuB;IAI/B;;;;;;OAMG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;;;OAIG;IACH,OAAO,CAAC,yBAAyB;IA8BjC,qBAAqB,IAAI,IAAI,CAG5B;IAEK,oBAAoB,CAAC,KAAK,EAAE,8BAA8B,GAAG,OAAO,CAAC,iCAAiC,CAAC,CA0D5G;IAED,KAAK,IAAI,IAAI,CAGZ;IAED,8BAA8B,IAAI,IAAI,CA6BrC;IAEK,OAAO,CAAC,kBAAkB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAuDpE;YAEa,mBAAmB;IA8H3B,KAAK,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,UAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAqEzF;IAED,wBAAwB,IAAI,MAAM,CAWjC;IAED,oGAAoG;IACpG,OAAO,CAAC,+BAA+B;IAkBvC,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED,OAAO,CAAC,MAAM,EAAE,oBAAoB,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,GAAE,wBAA6B,GAAG,OAAO,CAAC,OAAO,CAAC,CAgBlH;YAEa,WAAW;IAoMzB,OAAO,CAAC,yBAAyB;IAmBjC,OAAO,CAAC,uBAAuB;IA2B/B,OAAO,CAAC,4BAA4B;IAY9B,gBAAgB,CACrB,GAAG,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,EACpC,MAAM,EAAE,WAAW,EACnB,QAAQ,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,gBAAgB,CAAC,CAQ3B;IAED,OAAO,CAAC,wBAAwB;IAQhC,OAAO,CAAC,2BAA2B;IAWnC,OAAO,CAAC,kCAAkC;YAY5B,sBAAsB;YA6BtB,WAAW;CAgCzB"}
|
|
@@ -123,9 +123,20 @@ export class CompactionController {
|
|
|
123
123
|
/**
|
|
124
124
|
* Lifecycle records are durable bookkeeping and must not become compaction input or alter the
|
|
125
125
|
* loop's trailing-compaction guard. They remain in the real branch so recovery can inspect them.
|
|
126
|
+
*
|
|
127
|
+
* A plain filter breaks ancestry because retained children still point at removed lifecycle
|
|
128
|
+
* parents. Reconnect the already-linear active branch while preserving every real entry id.
|
|
126
129
|
*/
|
|
127
130
|
getCompactionBranch() {
|
|
128
|
-
|
|
131
|
+
const compactableBranch = [];
|
|
132
|
+
let retainedParentId = null;
|
|
133
|
+
for (const entry of this.deps.sessionManager.getBranch()) {
|
|
134
|
+
if (isSessionLifecycleEntry(entry))
|
|
135
|
+
continue;
|
|
136
|
+
compactableBranch.push(entry.parentId === retainedParentId ? entry : { ...entry, parentId: retainedParentId });
|
|
137
|
+
retainedParentId = entry.id;
|
|
138
|
+
}
|
|
139
|
+
return compactableBranch;
|
|
129
140
|
}
|
|
130
141
|
/**
|
|
131
142
|
* Close the one transaction for this compaction retry ladder. The marker is attempted at most once;
|