@genesislcap/ai-assistant 14.436.0 → 14.437.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/dist/ai-assistant.api.json +315 -66
- package/dist/ai-assistant.d.ts +130 -41
- package/dist/dts/components/chat-driver/chat-driver.d.ts +36 -5
- package/dist/dts/components/chat-driver/chat-driver.d.ts.map +1 -1
- package/dist/dts/components/orchestrating-driver/orchestrating-driver.d.ts.map +1 -1
- package/dist/dts/config/config.d.ts +30 -2
- package/dist/dts/config/config.d.ts.map +1 -1
- package/dist/dts/config/define-stateful-agent.d.ts +38 -14
- package/dist/dts/config/define-stateful-agent.d.ts.map +1 -1
- package/dist/dts/main/main.d.ts +8 -6
- package/dist/dts/main/main.d.ts.map +1 -1
- package/dist/dts/state/ai-assistant-slice.d.ts +12 -10
- package/dist/dts/state/ai-assistant-slice.d.ts.map +1 -1
- package/dist/dts/state/session-store.d.ts +2 -2
- package/dist/esm/components/chat-driver/chat-driver.js +66 -8
- package/dist/esm/components/orchestrating-driver/orchestrating-driver.js +6 -0
- package/dist/esm/config/define-stateful-agent.js +32 -45
- package/dist/esm/main/main.js +43 -12
- package/dist/esm/main/main.template.js +8 -5
- package/dist/esm/state/ai-assistant-slice.js +5 -5
- package/package.json +16 -16
- package/src/components/chat-driver/chat-driver.ts +124 -14
- package/src/components/orchestrating-driver/orchestrating-driver.ts +10 -0
- package/src/config/config.ts +33 -2
- package/src/config/define-stateful-agent.ts +72 -57
- package/src/main/main.template.ts +1 -1
- package/src/main/main.ts +44 -12
- package/src/state/ai-assistant-slice.ts +15 -15
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../src/main/main.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,KAAK,EACV,cAAc,EACd,UAAU,EACV,4BAA4B,EAC5B,WAAW,EACZ,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAGL,cAAc,EAIf,MAAM,uBAAuB,CAAC;AAW/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAgBpD,OAAO,KAAK,EACV,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EACjB,MAAM,cAAc,CAAC;AAqEtB;;;;;;;;;;;;;GAaG;AACH,qBAOa,qBAAsB,SAAQ,cAAc;IAC3C,UAAU,EAAG,UAAU,CAAC;IAExB,kBAAkB,EAAE,MAAM,CAAW;IACZ,WAAW,EAAE,MAAM,CAAuB;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC5C,WAAW,EAAE,MAAM,CAA0B;IACrD;;;;;OAKG;IACiC,UAAU,CAAC,EAAE,UAAU,CAAC;IAC5D;;;OAGG;IACS,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB,UAAU,EAAE,UAAU,CAAM;IAExC;;;OAGG;IACH,IAAI,WAAW,IAAI,eAAe,CAEjC;IACW,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC;IAC9C,0EAA0E;IACrB,UAAU,UAAS;IAIxE,OAAO,CAAC,WAAW,CAAC,CAAqB;IAEzC,IAAI,QAAQ,IAAI,WAAW,EAAE,CAE5B;IACD,IAAI,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,EAGhC;IAED,IAAI,KAAK,IAAI,gBAAgB,CAE5B;IACD,IAAI,KAAK,CAAC,KAAK,EAAE,gBAAgB,EAUhC;IAED;;;;;;;;OAQG;IACH,OAAO,CAAC,uBAAuB;IAQ/B,IAAI,WAAW,IAAI,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,SAAS,CAE/D;IACD,IAAI,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,SAAS,EAM7C;IAED,IAAI,gBAAgB,IAAI,gBAAgB,CAEvC;IACD,IAAI,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,EAE3C;IAED,iEAAiE;IACjE,IAAI,aAAa,IAAI,OAAO,CAE3B;IACD,IAAI,aAAa,CAAC,KAAK,EAAE,OAAO,EAE/B;IAED,qEAAqE;IACrE,IAAI,iBAAiB,IAAI,OAAO,CAE/B;IACD,IAAI,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAEnC;IAED,8EAA8E;IAC9E,IAAI,wBAAwB,IAAI,OAAO,CAEtC;IACD,IAAI,wBAAwB,CAAC,KAAK,EAAE,OAAO,EAE1C;IAED,oCAAoC;IACpC,IAAI,iBAAiB,IAAI,oBAAoB,EAAE,CAE9C;IACD,IAAI,iBAAiB,CAAC,KAAK,EAAE,oBAAoB,EAAE,EAElD;IAED;;;OAGG;IACH,IAAI,eAAe,IAAI,OAAO,CAE7B;IACD,IAAI,eAAe,CAAC,KAAK,EAAE,OAAO,EAEjC;IAED;;;;OAIG;IACH,IAAI,eAAe,IAAI,MAAM,GAAG,IAAI,CAEnC;IACD,IAAI,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAYvC;IAED,IAAI,iBAAiB,IAAI,WAAW,EAAE,CAErC;IACD,IAAI,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,EAEzC;IAED,IAAI,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAEpC;IACD,IAAI,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAExC;IAED;;;OAGG;IACH,IAAI,
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../src/main/main.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,13 +4,14 @@ import type { AgentConfig } from '../config/config';
|
|
|
4
4
|
import type { AiAssistantAnimation, AiAssistantState, SuggestionsState } from '../main/main.types';
|
|
5
5
|
/**
|
|
6
6
|
* A single in-flight per-call chat-input override pushed by a `requestSubAgent`
|
|
7
|
-
*
|
|
8
|
-
* pop-in/pop-out and so a listener that connects
|
|
9
|
-
* effective mode without having seen the start
|
|
7
|
+
* or `requestInteraction` call. Tracked as an array (not a counter) so the
|
|
8
|
+
* slice can survive pop-in/pop-out and so a listener that connects
|
|
9
|
+
* mid-execution can compute the effective mode without having seen the start
|
|
10
|
+
* event.
|
|
10
11
|
*
|
|
11
12
|
* @internal
|
|
12
13
|
*/
|
|
13
|
-
export interface
|
|
14
|
+
export interface InputOverride {
|
|
14
15
|
/** Unique per-invocation id, paired with the start/stop events. */
|
|
15
16
|
id: string;
|
|
16
17
|
/** The mode requested for this invocation. */
|
|
@@ -51,11 +52,12 @@ export interface AiAssistantSessionState {
|
|
|
51
52
|
/** Name of the currently-executing sub-agent, or null when idle. */
|
|
52
53
|
liveSubAgentName: string | null;
|
|
53
54
|
/**
|
|
54
|
-
* In-flight per-call chat-input overrides pushed by `requestSubAgent`
|
|
55
|
-
* The most restrictive entry (`'hidden'` >
|
|
56
|
-
* means the agent-level
|
|
55
|
+
* In-flight per-call chat-input overrides pushed by `requestSubAgent` or
|
|
56
|
+
* `requestInteraction` calls. The most restrictive entry (`'hidden'` >
|
|
57
|
+
* `'disabled'`) wins; an empty list means the agent-level
|
|
58
|
+
* `chatInputDuringExecution` applies.
|
|
57
59
|
*/
|
|
58
|
-
|
|
60
|
+
inputOverrides: InputOverride[];
|
|
59
61
|
}
|
|
60
62
|
export declare const defaultSessionState: AiAssistantSessionState;
|
|
61
63
|
export declare const aiAssistantSlice: import("@reduxjs/toolkit").Slice<AiAssistantSessionState, {
|
|
@@ -74,8 +76,8 @@ export declare const aiAssistantSlice: import("@reduxjs/toolkit").Slice<AiAssist
|
|
|
74
76
|
setInputValue(state: import("immer").WritableDraft<AiAssistantSessionState>, action: PayloadAction<string>): void;
|
|
75
77
|
setLiveSubAgentTrace(state: import("immer").WritableDraft<AiAssistantSessionState>, action: PayloadAction<ChatMessage[]>): void;
|
|
76
78
|
setLiveSubAgentName(state: import("immer").WritableDraft<AiAssistantSessionState>, action: PayloadAction<string | null>): void;
|
|
77
|
-
|
|
78
|
-
|
|
79
|
+
addInputOverride(state: import("immer").WritableDraft<AiAssistantSessionState>, action: PayloadAction<InputOverride>): void;
|
|
80
|
+
removeInputOverride(state: import("immer").WritableDraft<AiAssistantSessionState>, action: PayloadAction<{
|
|
79
81
|
id: string;
|
|
80
82
|
}>): void;
|
|
81
83
|
}, "aiAssistant", "aiAssistant", {}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-assistant-slice.d.ts","sourceRoot":"","sources":["../../../src/state/ai-assistant-slice.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE5F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEnG
|
|
1
|
+
{"version":3,"file":"ai-assistant-slice.d.ts","sourceRoot":"","sources":["../../../src/state/ai-assistant-slice.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE5F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEnG;;;;;;;;GAQG;AACH,MAAM,WAAW,aAAa;IAC5B,mEAAmE;IACnE,EAAE,EAAE,MAAM,CAAC;IACX,8CAA8C;IAC9C,IAAI,EAAE,4BAA4B,CAAC;CACpC;AAED;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,KAAK,EAAE,gBAAgB,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,wBAAwB,EAAE,OAAO,CAAC;IAClC,iBAAiB,EAAE,oBAAoB,EAAE,CAAC;IAC1C,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,SAAS,CAAC;IAC3D;;;;OAIG;IACH,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B;;;;OAIG;IACH,eAAe,EAAE,OAAO,CAAC;IACzB,4EAA4E;IAC5E,UAAU,EAAE,MAAM,CAAC;IACnB,kFAAkF;IAClF,iBAAiB,EAAE,WAAW,EAAE,CAAC;IACjC,oEAAoE;IACpE,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC;;;;;OAKG;IACH,cAAc,EAAE,aAAa,EAAE,CAAC;CACjC;AAED,eAAO,MAAM,mBAAmB,EAAE,uBAiBjC,CAAC;AAEF,eAAO,MAAM,gBAAgB;uFAIE,aAAa,CAAC,WAAW,EAAE,CAAC;oFAG/B,aAAa,CAAC,gBAAgB,CAAC;4FAGvB,aAAa,CAAC,OAAO,CAAC;gGAGlB,aAAa,CAAC,OAAO,CAAC;uGAGf,aAAa,CAAC,OAAO,CAAC;gGAG7B,aAAa,CAAC,oBAAoB,EAAE,CAAC;+FAGtC,aAAa,CAAC,gBAAgB,CAAC;4FAGlC,aAAa,CAAC,MAAM,GAAG,SAAS,CAAC;2FAGlC,aAAa,CAAC,MAAM,GAAG,SAAS,CAAC;0FAGlC,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,SAAS,CAAC;8FAGxD,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC;8FAG5B,aAAa,CAAC,OAAO,CAAC;yFAG3B,aAAa,CAAC,MAAM,CAAC;gGAGd,aAAa,CAAC,WAAW,EAAE,CAAC;+FAG7B,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC;4FAG/B,aAAa,CAAC,aAAa,CAAC;+FAGzB,aAAa,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;oCAKlE,CAAC"}
|
|
@@ -16,8 +16,8 @@ declare function makeStore(devTools: boolean | undefined): import("@genesislcap/
|
|
|
16
16
|
setInputValue(state: import("immer").WritableDraft<AiAssistantSessionState>, action: import("@reduxjs/toolkit").PayloadAction<string>): void;
|
|
17
17
|
setLiveSubAgentTrace(state: import("immer").WritableDraft<AiAssistantSessionState>, action: import("@reduxjs/toolkit").PayloadAction<import("@genesislcap/foundation-ai").ChatMessage[]>): void;
|
|
18
18
|
setLiveSubAgentName(state: import("immer").WritableDraft<AiAssistantSessionState>, action: import("@reduxjs/toolkit").PayloadAction<string | null>): void;
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
addInputOverride(state: import("immer").WritableDraft<AiAssistantSessionState>, action: import("@reduxjs/toolkit").PayloadAction<import("./ai-assistant-slice").InputOverride>): void;
|
|
20
|
+
removeInputOverride(state: import("immer").WritableDraft<AiAssistantSessionState>, action: import("@reduxjs/toolkit").PayloadAction<{
|
|
21
21
|
id: string;
|
|
22
22
|
}>): void;
|
|
23
23
|
}, "aiAssistant", "aiAssistant", {}>[]>;
|
|
@@ -58,7 +58,14 @@ export class ChatDriver extends EventTarget {
|
|
|
58
58
|
this.turnSnapshots = [];
|
|
59
59
|
/** Monotonic counter that survives agent swaps — useful for cross-referencing with history. */
|
|
60
60
|
this.globalTurnIndex = 0;
|
|
61
|
-
|
|
61
|
+
if (typeof toolHandlers === 'function') {
|
|
62
|
+
this.toolHandlersFactory = toolHandlers;
|
|
63
|
+
this.toolHandlers = {};
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
this.toolHandlersFactory = undefined;
|
|
67
|
+
this.toolHandlers = toolHandlers;
|
|
68
|
+
}
|
|
62
69
|
if (typeof toolDefinitions === 'function') {
|
|
63
70
|
this.toolDefinitionsFactory = toolDefinitions;
|
|
64
71
|
this.toolDefinitions = [];
|
|
@@ -89,9 +96,24 @@ export class ChatDriver extends EventTarget {
|
|
|
89
96
|
this.toolDefinitionsFactory = undefined;
|
|
90
97
|
this.toolDefinitions = (_a = config.toolDefinitions) !== null && _a !== void 0 ? _a : [];
|
|
91
98
|
}
|
|
92
|
-
|
|
99
|
+
if (typeof config.toolHandlers === 'function') {
|
|
100
|
+
this.toolHandlersFactory = config.toolHandlers;
|
|
101
|
+
// Cleared each turn by the factory in runToolLoop; empty is safe in the
|
|
102
|
+
// meantime (no LLM call happens before resolution).
|
|
103
|
+
this.toolHandlers = {};
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
this.toolHandlersFactory = undefined;
|
|
107
|
+
this.toolHandlers = (_b = config.toolHandlers) !== null && _b !== void 0 ? _b : {};
|
|
108
|
+
}
|
|
93
109
|
this.primerHistory = config.primerHistory;
|
|
94
110
|
this.activeAgentName = config.name;
|
|
111
|
+
this.displayName = config.displayName;
|
|
112
|
+
// Static string form resolves to a stable label up-front; the function
|
|
113
|
+
// form gets re-resolved each tool-loop iteration. Falls back to the
|
|
114
|
+
// canonical name when displayName is unset.
|
|
115
|
+
this.activeAgentLabel =
|
|
116
|
+
typeof config.displayName === 'string' ? config.displayName : config.name;
|
|
95
117
|
this.debugSnapshotter = config.getDebugSnapshot;
|
|
96
118
|
this.subAgentsMap = new Map(((_c = config.subAgents) !== null && _c !== void 0 ? _c : []).map((s) => [s.name, s]));
|
|
97
119
|
// Reset fold state when agent changes — each specialist starts fresh
|
|
@@ -146,6 +168,7 @@ export class ChatDriver extends EventTarget {
|
|
|
146
168
|
turnIndex,
|
|
147
169
|
timestamp: new Date().toISOString(),
|
|
148
170
|
agentName: this.activeAgentName,
|
|
171
|
+
agentLabel: this.activeAgentLabel,
|
|
149
172
|
systemPrompt: resolvedSystemPrompt,
|
|
150
173
|
toolNames: this.toolDefinitions.map((t) => t.name),
|
|
151
174
|
agentSnapshot,
|
|
@@ -272,11 +295,14 @@ export class ChatDriver extends EventTarget {
|
|
|
272
295
|
*
|
|
273
296
|
* @param componentName - The custom element name to render.
|
|
274
297
|
* @param data - Data to pass to the component.
|
|
298
|
+
* @param options - Optional per-call overrides, including
|
|
299
|
+
* `chatInputDuringExecution` to hide or disable the main chat input while
|
|
300
|
+
* the widget is awaiting user input. Reverts when the interaction resolves.
|
|
275
301
|
*/
|
|
276
|
-
requestInteraction(componentName, data) {
|
|
302
|
+
requestInteraction(componentName, data, options) {
|
|
277
303
|
return __awaiter(this, void 0, void 0, function* () {
|
|
278
304
|
if (this.hostInteractionRequester) {
|
|
279
|
-
return this.hostInteractionRequester(componentName, data);
|
|
305
|
+
return this.hostInteractionRequester(componentName, data, options);
|
|
280
306
|
}
|
|
281
307
|
if (this.pendingInteractions.size > 0) {
|
|
282
308
|
throw new Error('requestInteraction: another user interaction is already in flight. ' +
|
|
@@ -284,8 +310,18 @@ export class ChatDriver extends EventTarget {
|
|
|
284
310
|
'rather than spawning widgets from parallel sub-agents or parallel tool calls.');
|
|
285
311
|
}
|
|
286
312
|
const interactionId = crypto.randomUUID();
|
|
313
|
+
const chatInputDuringExecution = options === null || options === void 0 ? void 0 : options.chatInputDuringExecution;
|
|
287
314
|
return new Promise((resolve, reject) => {
|
|
288
|
-
this.pendingInteractions.set(interactionId, {
|
|
315
|
+
this.pendingInteractions.set(interactionId, {
|
|
316
|
+
resolve,
|
|
317
|
+
reject,
|
|
318
|
+
overrideId: chatInputDuringExecution ? interactionId : undefined,
|
|
319
|
+
});
|
|
320
|
+
if (chatInputDuringExecution) {
|
|
321
|
+
this.dispatchEvent(new CustomEvent('interaction-start', {
|
|
322
|
+
detail: { interactionId, chatInputDuringExecution },
|
|
323
|
+
}));
|
|
324
|
+
}
|
|
289
325
|
this.appendToHistory({
|
|
290
326
|
role: 'assistant',
|
|
291
327
|
content: '',
|
|
@@ -308,6 +344,9 @@ export class ChatDriver extends EventTarget {
|
|
|
308
344
|
detail: this.history,
|
|
309
345
|
}));
|
|
310
346
|
}
|
|
347
|
+
if (interaction.overrideId) {
|
|
348
|
+
this.dispatchEvent(new CustomEvent('interaction-stop', { detail: { interactionId } }));
|
|
349
|
+
}
|
|
311
350
|
interaction.resolve(result);
|
|
312
351
|
this.pendingInteractions.delete(interactionId);
|
|
313
352
|
}
|
|
@@ -360,7 +399,7 @@ export class ChatDriver extends EventTarget {
|
|
|
360
399
|
* so parallel tool calls each capture their own trace independently.
|
|
361
400
|
*/
|
|
362
401
|
buildHandlerContext(traceCapture) {
|
|
363
|
-
return Object.assign(Object.assign({ requestInteraction: (componentName, data) => this.requestInteraction(componentName, data) }, (this.subAgentsMap.size > 0 && {
|
|
402
|
+
return Object.assign(Object.assign({ requestInteraction: (componentName, data, options) => this.requestInteraction(componentName, data, options) }, (this.subAgentsMap.size > 0 && {
|
|
364
403
|
requestSubAgent: (name, options) => this.invokeSubAgent(name, options).then(({ result, trace }) => {
|
|
365
404
|
if (traceCapture)
|
|
366
405
|
traceCapture.trace = trace;
|
|
@@ -419,7 +458,7 @@ export class ChatDriver extends EventTarget {
|
|
|
419
458
|
// parent's (ultimately the root's) history and resolve via the same
|
|
420
459
|
// pending map the main UI is wired to. Recurses naturally for nested
|
|
421
460
|
// sub-agents.
|
|
422
|
-
child.setHostInteractionRequester((componentName, data) => this.requestInteraction(componentName, data));
|
|
461
|
+
child.setHostInteractionRequester((componentName, data, opts) => this.requestInteraction(componentName, data, opts));
|
|
423
462
|
const forwardTrace = (e) => {
|
|
424
463
|
this.dispatchEvent(new CustomEvent('sub-agent-history-updated', {
|
|
425
464
|
detail: { agentName: subConfig.name, history: e.detail },
|
|
@@ -608,6 +647,7 @@ export class ChatDriver extends EventTarget {
|
|
|
608
647
|
// ---------------------------------------------------------------------------
|
|
609
648
|
// Tool loop
|
|
610
649
|
// ---------------------------------------------------------------------------
|
|
650
|
+
// eslint-disable-next-line complexity
|
|
611
651
|
runToolLoop(userInput, attachments, transientPrimer) {
|
|
612
652
|
return __awaiter(this, void 0, void 0, function* () {
|
|
613
653
|
var _a, _b, _c, _d, _e, _f, _g;
|
|
@@ -642,10 +682,26 @@ export class ChatDriver extends EventTarget {
|
|
|
642
682
|
// eslint-disable-next-line no-await-in-loop
|
|
643
683
|
this.toolDefinitions = yield this.toolDefinitionsFactory(promptCtx);
|
|
644
684
|
}
|
|
685
|
+
// Same story for the handler-map factory: re-resolve so dispatch sees
|
|
686
|
+
// only the handlers valid for the current state, in lockstep with the
|
|
687
|
+
// tool definitions exposed above. Folds are forbidden when this is set,
|
|
688
|
+
// so the fold-mutation paths on `this.toolHandlers` are unreachable.
|
|
689
|
+
if (this.toolHandlersFactory) {
|
|
690
|
+
// eslint-disable-next-line no-await-in-loop
|
|
691
|
+
this.toolHandlers = yield this.toolHandlersFactory(promptCtx);
|
|
692
|
+
}
|
|
645
693
|
const resolvedSystemPrompt = typeof this.systemPrompt === 'function'
|
|
646
694
|
? // eslint-disable-next-line no-await-in-loop
|
|
647
695
|
yield this.systemPrompt(promptCtx)
|
|
648
696
|
: this.systemPrompt;
|
|
697
|
+
// Re-resolve the per-turn display label. Falls back to the canonical
|
|
698
|
+
// agent name when displayName is unset. Stamped onto outgoing messages
|
|
699
|
+
// and turn snapshots for UX only; routing/history-transform continues
|
|
700
|
+
// to read `activeAgentName`.
|
|
701
|
+
if (typeof this.displayName === 'function') {
|
|
702
|
+
// eslint-disable-next-line no-await-in-loop
|
|
703
|
+
this.activeAgentLabel = yield this.displayName(promptCtx);
|
|
704
|
+
}
|
|
649
705
|
const foldSuffix = this.buildFoldSystemPromptSuffix();
|
|
650
706
|
const baseSystemPrompt = resolvedSystemPrompt
|
|
651
707
|
? `${resolvedSystemPrompt}${foldSuffix}`
|
|
@@ -910,7 +966,9 @@ export class ChatDriver extends EventTarget {
|
|
|
910
966
|
}
|
|
911
967
|
appendToHistory(message) {
|
|
912
968
|
const tagged = this.activeAgentName
|
|
913
|
-
? Object.assign(Object.assign({}, message), { agentName: this.activeAgentName
|
|
969
|
+
? Object.assign(Object.assign({}, message), { agentName: this.activeAgentName,
|
|
970
|
+
// Display-only — falls back to agentName in renderers when unset.
|
|
971
|
+
agentLabel: this.activeAgentLabel }) : message;
|
|
914
972
|
this.history = [...this.history, tagged];
|
|
915
973
|
this.dispatchEvent(new CustomEvent('history-updated', {
|
|
916
974
|
detail: this.history,
|
|
@@ -90,6 +90,12 @@ export class OrchestratingDriver extends EventTarget {
|
|
|
90
90
|
this.chatDriver.addEventListener('sub-agent-stop', (e) => {
|
|
91
91
|
this.dispatchEvent(new CustomEvent('sub-agent-stop', { detail: e.detail }));
|
|
92
92
|
});
|
|
93
|
+
this.chatDriver.addEventListener('interaction-start', (e) => {
|
|
94
|
+
this.dispatchEvent(new CustomEvent('interaction-start', { detail: e.detail }));
|
|
95
|
+
});
|
|
96
|
+
this.chatDriver.addEventListener('interaction-stop', (e) => {
|
|
97
|
+
this.dispatchEvent(new CustomEvent('interaction-stop', { detail: e.detail }));
|
|
98
|
+
});
|
|
93
99
|
}
|
|
94
100
|
resolveInteraction(interactionId, result) {
|
|
95
101
|
this.chatDriver.resolveInteraction(interactionId, result);
|
|
@@ -59,7 +59,6 @@ function defaultStatefulDebugSnapshot(state) {
|
|
|
59
59
|
*/
|
|
60
60
|
export function defineStatefulAgent(opts) {
|
|
61
61
|
let state;
|
|
62
|
-
let cachedHandlers;
|
|
63
62
|
const assertNoFolds = (handlers) => {
|
|
64
63
|
for (const [name, handler] of Object.entries(handlers)) {
|
|
65
64
|
if (handler[TOOL_FOLD_SYMBOL]) {
|
|
@@ -85,59 +84,48 @@ export function defineStatefulAgent(opts) {
|
|
|
85
84
|
}
|
|
86
85
|
return td;
|
|
87
86
|
})();
|
|
88
|
-
//
|
|
89
|
-
//
|
|
90
|
-
//
|
|
91
|
-
//
|
|
92
|
-
//
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
// Dynamic-tools case: we discover names from a sample of `toolHandlers(state)`
|
|
111
|
-
// taken inside onActivate. Until then, the handler dict is empty — fine
|
|
112
|
-
// because no tool call can happen before activation completes.
|
|
113
|
-
const staticHandlerProxy = Array.isArray(opts.toolDefinitions) && opts.toolHandlers
|
|
114
|
-
? buildHandlerProxy(opts.toolDefinitions.map((d) => d.name))
|
|
87
|
+
// Wrap the handler factory into the ctx-shaped form the driver expects, and
|
|
88
|
+
// validate folds on each resolve. The driver re-resolves this per tool-loop
|
|
89
|
+
// iteration, so the handler set the driver dispatches against always
|
|
90
|
+
// matches the LLM-visible tools for the current state — handlers don't need
|
|
91
|
+
// defensive `if (!machine.matches(...))` guards.
|
|
92
|
+
const wrappedHandlers = opts.toolHandlers
|
|
93
|
+
? () => __awaiter(this, void 0, void 0, function* () {
|
|
94
|
+
if (!state) {
|
|
95
|
+
throw new Error(`Stateful agent "${opts.name}" handlers called before init`);
|
|
96
|
+
}
|
|
97
|
+
const handlers = yield opts.toolHandlers(state);
|
|
98
|
+
assertNoFolds(handlers);
|
|
99
|
+
return handlers;
|
|
100
|
+
})
|
|
101
|
+
: undefined;
|
|
102
|
+
const wrappedDisplayName = opts.displayName
|
|
103
|
+
? (ctx) => __awaiter(this, void 0, void 0, function* () {
|
|
104
|
+
if (!state) {
|
|
105
|
+
throw new Error(`Stateful agent "${opts.name}" displayName called before init`);
|
|
106
|
+
}
|
|
107
|
+
return opts.displayName(Object.assign(Object.assign({}, ctx), { state }));
|
|
108
|
+
})
|
|
115
109
|
: undefined;
|
|
116
|
-
// For the dynamic case we patch this object in place on activation. The
|
|
117
|
-
// driver reads `toolHandlers` by reference, so mutating in place is enough.
|
|
118
|
-
const resolvedHandlers = staticHandlerProxy !== null && staticHandlerProxy !== void 0 ? staticHandlerProxy : {};
|
|
119
110
|
const base = {
|
|
120
111
|
name: opts.name,
|
|
112
|
+
displayName: wrappedDisplayName,
|
|
121
113
|
primerHistory: opts.primerHistory,
|
|
122
114
|
subAgents: opts.subAgents,
|
|
123
115
|
manualSelection: opts.manualSelection,
|
|
124
116
|
chatInputDuringExecution: opts.chatInputDuringExecution,
|
|
125
117
|
toolDefinitions: wrappedTools,
|
|
126
|
-
toolHandlers:
|
|
118
|
+
toolHandlers: wrappedHandlers,
|
|
127
119
|
onActivate: (ctx) => __awaiter(this, void 0, void 0, function* () {
|
|
128
|
-
var _a, _b;
|
|
129
120
|
state = yield opts.init(ctx);
|
|
130
|
-
// Sample
|
|
131
|
-
//
|
|
132
|
-
//
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
for (const key of Object.keys(resolvedHandlers))
|
|
139
|
-
delete resolvedHandlers[key];
|
|
140
|
-
Object.assign(resolvedHandlers, dynamicProxy);
|
|
121
|
+
// Sample once with the init state to fail loud on fold misuse at the
|
|
122
|
+
// agent-switch boundary instead of waiting for the first tool call.
|
|
123
|
+
// The driver re-resolves the factory each iteration, so misuse on
|
|
124
|
+
// handlers gated behind a non-init state surfaces when that state is
|
|
125
|
+
// reached — same loud failure mode, narrower coverage.
|
|
126
|
+
if (opts.toolHandlers) {
|
|
127
|
+
const sampled = yield opts.toolHandlers(state);
|
|
128
|
+
assertNoFolds(sampled);
|
|
141
129
|
}
|
|
142
130
|
}),
|
|
143
131
|
onDeactivate: (ctx) => __awaiter(this, void 0, void 0, function* () {
|
|
@@ -148,7 +136,6 @@ export function defineStatefulAgent(opts) {
|
|
|
148
136
|
// cannot interleave the read-then-write of `state`.
|
|
149
137
|
// eslint-disable-next-line require-atomic-updates
|
|
150
138
|
state = undefined;
|
|
151
|
-
cachedHandlers = undefined;
|
|
152
139
|
}),
|
|
153
140
|
systemPrompt: opts.systemPrompt
|
|
154
141
|
? (ctx) => __awaiter(this, void 0, void 0, function* () {
|
package/dist/esm/main/main.js
CHANGED
|
@@ -300,22 +300,22 @@ let FoundationAiAssistant = FoundationAiAssistant_1 = class FoundationAiAssistan
|
|
|
300
300
|
(_a = this._sessionRef) === null || _a === void 0 ? void 0 : _a.actions.aiAssistant.setLiveSubAgentName(value);
|
|
301
301
|
}
|
|
302
302
|
/**
|
|
303
|
-
* In-flight per-call chat-input overrides pushed by `requestSubAgent`
|
|
304
|
-
*
|
|
303
|
+
* In-flight per-call chat-input overrides pushed by `requestSubAgent` or
|
|
304
|
+
* `requestInteraction` calls. Empty means no override is active.
|
|
305
305
|
*/
|
|
306
|
-
get
|
|
306
|
+
get inputOverrides() {
|
|
307
307
|
var _a, _b;
|
|
308
|
-
return (_b = (_a = this._sessionRef) === null || _a === void 0 ? void 0 : _a.store.aiAssistant.
|
|
308
|
+
return (_b = (_a = this._sessionRef) === null || _a === void 0 ? void 0 : _a.store.aiAssistant.inputOverrides) !== null && _b !== void 0 ? _b : [];
|
|
309
309
|
}
|
|
310
310
|
/**
|
|
311
311
|
* Resolves the effective chat-input behaviour while the assistant is
|
|
312
|
-
* executing.
|
|
312
|
+
* executing. Per-call overrides take precedence over the agent-level
|
|
313
313
|
* config; among overrides the most restrictive wins (`'hidden'` >
|
|
314
314
|
* `'disabled'`). Falls back to the active agent's config, then `'disabled'`.
|
|
315
315
|
*/
|
|
316
316
|
get effectiveChatInputDuringExecution() {
|
|
317
317
|
var _a, _b;
|
|
318
|
-
const overrides = this.
|
|
318
|
+
const overrides = this.inputOverrides;
|
|
319
319
|
if (overrides.some((o) => o.mode === 'hidden'))
|
|
320
320
|
return 'hidden';
|
|
321
321
|
if (overrides.some((o) => o.mode === 'disabled'))
|
|
@@ -472,9 +472,15 @@ let FoundationAiAssistant = FoundationAiAssistant_1 = class FoundationAiAssistan
|
|
|
472
472
|
return agents
|
|
473
473
|
.map((a) => {
|
|
474
474
|
var _a;
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
475
|
+
// Function-form handlers are resolved per turn — their full key set
|
|
476
|
+
// isn't knowable at fingerprint time. A constant marker still
|
|
477
|
+
// distinguishes static-vs-dynamic shape changes; finer-grained
|
|
478
|
+
// detection isn't load-bearing here.
|
|
479
|
+
const toolNames = typeof a.toolHandlers === 'function'
|
|
480
|
+
? '<fn>'
|
|
481
|
+
: Object.keys((_a = a.toolHandlers) !== null && _a !== void 0 ? _a : {})
|
|
482
|
+
.sort()
|
|
483
|
+
.join('+');
|
|
478
484
|
return `${a.name}[${toolNames}]`;
|
|
479
485
|
})
|
|
480
486
|
.join(',');
|
|
@@ -570,7 +576,7 @@ let FoundationAiAssistant = FoundationAiAssistant_1 = class FoundationAiAssistan
|
|
|
570
576
|
const { invocationId, chatInputDuringExecution } = e.detail;
|
|
571
577
|
if (!chatInputDuringExecution)
|
|
572
578
|
return;
|
|
573
|
-
(_a = this._sessionRef) === null || _a === void 0 ? void 0 : _a.actions.aiAssistant.
|
|
579
|
+
(_a = this._sessionRef) === null || _a === void 0 ? void 0 : _a.actions.aiAssistant.addInputOverride({
|
|
574
580
|
id: invocationId,
|
|
575
581
|
mode: chatInputDuringExecution,
|
|
576
582
|
});
|
|
@@ -581,17 +587,38 @@ let FoundationAiAssistant = FoundationAiAssistant_1 = class FoundationAiAssistan
|
|
|
581
587
|
this.liveSubAgentName = null;
|
|
582
588
|
const { invocationId } = e.detail;
|
|
583
589
|
if (invocationId) {
|
|
584
|
-
(_a = this._sessionRef) === null || _a === void 0 ? void 0 : _a.actions.aiAssistant.
|
|
590
|
+
(_a = this._sessionRef) === null || _a === void 0 ? void 0 : _a.actions.aiAssistant.removeInputOverride({ id: invocationId });
|
|
591
|
+
}
|
|
592
|
+
};
|
|
593
|
+
const onInteractionStart = (e) => {
|
|
594
|
+
var _a;
|
|
595
|
+
const { interactionId, chatInputDuringExecution } = e.detail;
|
|
596
|
+
if (!chatInputDuringExecution)
|
|
597
|
+
return;
|
|
598
|
+
(_a = this._sessionRef) === null || _a === void 0 ? void 0 : _a.actions.aiAssistant.addInputOverride({
|
|
599
|
+
id: interactionId,
|
|
600
|
+
mode: chatInputDuringExecution,
|
|
601
|
+
});
|
|
602
|
+
};
|
|
603
|
+
const onInteractionStop = (e) => {
|
|
604
|
+
var _a;
|
|
605
|
+
const { interactionId } = e.detail;
|
|
606
|
+
if (interactionId) {
|
|
607
|
+
(_a = this._sessionRef) === null || _a === void 0 ? void 0 : _a.actions.aiAssistant.removeInputOverride({ id: interactionId });
|
|
585
608
|
}
|
|
586
609
|
};
|
|
587
610
|
driver.addEventListener('sub-agent-history-updated', onSubAgentHistoryUpdated);
|
|
588
611
|
driver.addEventListener('sub-agent-start', onSubAgentStart);
|
|
589
612
|
driver.addEventListener('sub-agent-stop', onSubAgentStop);
|
|
613
|
+
driver.addEventListener('interaction-start', onInteractionStart);
|
|
614
|
+
driver.addEventListener('interaction-stop', onInteractionStop);
|
|
590
615
|
const cleanups = [
|
|
591
616
|
() => driver.removeEventListener('history-updated', onHistoryUpdated),
|
|
592
617
|
() => driver.removeEventListener('sub-agent-history-updated', onSubAgentHistoryUpdated),
|
|
593
618
|
() => driver.removeEventListener('sub-agent-start', onSubAgentStart),
|
|
594
619
|
() => driver.removeEventListener('sub-agent-stop', onSubAgentStop),
|
|
620
|
+
() => driver.removeEventListener('interaction-start', onInteractionStart),
|
|
621
|
+
() => driver.removeEventListener('interaction-stop', onInteractionStop),
|
|
595
622
|
];
|
|
596
623
|
if (driver instanceof OrchestratingDriver) {
|
|
597
624
|
// Restore any pinned agent from the session store onto the freshly built
|
|
@@ -1027,7 +1054,11 @@ let FoundationAiAssistant = FoundationAiAssistant_1 = class FoundationAiAssistan
|
|
|
1027
1054
|
agentSummary: (_f = this.agents) === null || _f === void 0 ? void 0 : _f.map((a) => {
|
|
1028
1055
|
var _a;
|
|
1029
1056
|
return (Object.assign(Object.assign({}, a), { toolDefinitions: Array.isArray(a.toolDefinitions)
|
|
1030
|
-
?
|
|
1057
|
+
? typeof a.toolHandlers === 'function'
|
|
1058
|
+
? // Static defs + dynamic handlers — can't walk fold tree
|
|
1059
|
+
// because the handler map isn't materialized at log time.
|
|
1060
|
+
a.toolDefinitions
|
|
1061
|
+
: expandToolTree(a.toolDefinitions, (_a = a.toolHandlers) !== null && _a !== void 0 ? _a : {})
|
|
1031
1062
|
: typeof a.toolDefinitions === 'function'
|
|
1032
1063
|
? '<dynamic — resolved per turn>'
|
|
1033
1064
|
: [], toolHandlers: undefined, onActivate: undefined, onDeactivate: undefined, getDebugSnapshot: undefined }));
|
|
@@ -163,11 +163,14 @@ ${(tc) => { var _a; return (((_a = tc.foldPath) === null || _a === void 0 ? void
|
|
|
163
163
|
`)}
|
|
164
164
|
<div class="message ${(m) => messageType(m)}">
|
|
165
165
|
<div class="sender">
|
|
166
|
-
${(m, c) =>
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
166
|
+
${(m, c) => {
|
|
167
|
+
var _a;
|
|
168
|
+
return messageType(m) === 'ai-function' &&
|
|
169
|
+
m.agentName &&
|
|
170
|
+
c.parent.showAgentSwitchIndicator
|
|
171
|
+
? `Tool Call · ${(_a = m.agentLabel) !== null && _a !== void 0 ? _a : m.agentName}`
|
|
172
|
+
: senderLabel[messageType(m)];
|
|
173
|
+
}}
|
|
171
174
|
</div>
|
|
172
175
|
<div class="content">
|
|
173
176
|
${when((m) => m.content, html `
|
|
@@ -15,7 +15,7 @@ export const defaultSessionState = {
|
|
|
15
15
|
inputValue: '',
|
|
16
16
|
liveSubAgentTrace: [],
|
|
17
17
|
liveSubAgentName: null,
|
|
18
|
-
|
|
18
|
+
inputOverrides: [],
|
|
19
19
|
};
|
|
20
20
|
export const aiAssistantSlice = createSlice({
|
|
21
21
|
name: 'aiAssistant',
|
|
@@ -66,11 +66,11 @@ export const aiAssistantSlice = createSlice({
|
|
|
66
66
|
setLiveSubAgentName(state, action) {
|
|
67
67
|
state.liveSubAgentName = action.payload;
|
|
68
68
|
},
|
|
69
|
-
|
|
70
|
-
state.
|
|
69
|
+
addInputOverride(state, action) {
|
|
70
|
+
state.inputOverrides.push(action.payload);
|
|
71
71
|
},
|
|
72
|
-
|
|
73
|
-
state.
|
|
72
|
+
removeInputOverride(state, action) {
|
|
73
|
+
state.inputOverrides = state.inputOverrides.filter((o) => o.id !== action.payload.id);
|
|
74
74
|
},
|
|
75
75
|
},
|
|
76
76
|
selectors: {},
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@genesislcap/ai-assistant",
|
|
3
3
|
"description": "Genesis AI Assistant micro-frontend",
|
|
4
|
-
"version": "14.
|
|
4
|
+
"version": "14.437.1",
|
|
5
5
|
"license": "SEE LICENSE IN license.txt",
|
|
6
6
|
"main": "dist/esm/index.js",
|
|
7
7
|
"types": "dist/ai-assistant.d.ts",
|
|
@@ -64,24 +64,24 @@
|
|
|
64
64
|
}
|
|
65
65
|
},
|
|
66
66
|
"devDependencies": {
|
|
67
|
-
"@genesislcap/foundation-testing": "14.
|
|
68
|
-
"@genesislcap/genx": "14.
|
|
69
|
-
"@genesislcap/rollup-builder": "14.
|
|
70
|
-
"@genesislcap/ts-builder": "14.
|
|
71
|
-
"@genesislcap/uvu-playwright-builder": "14.
|
|
72
|
-
"@genesislcap/vite-builder": "14.
|
|
73
|
-
"@genesislcap/webpack-builder": "14.
|
|
67
|
+
"@genesislcap/foundation-testing": "14.437.1",
|
|
68
|
+
"@genesislcap/genx": "14.437.1",
|
|
69
|
+
"@genesislcap/rollup-builder": "14.437.1",
|
|
70
|
+
"@genesislcap/ts-builder": "14.437.1",
|
|
71
|
+
"@genesislcap/uvu-playwright-builder": "14.437.1",
|
|
72
|
+
"@genesislcap/vite-builder": "14.437.1",
|
|
73
|
+
"@genesislcap/webpack-builder": "14.437.1",
|
|
74
74
|
"@types/dompurify": "^3.0.5",
|
|
75
75
|
"@types/marked": "^5.0.2"
|
|
76
76
|
},
|
|
77
77
|
"dependencies": {
|
|
78
|
-
"@genesislcap/foundation-ai": "14.
|
|
79
|
-
"@genesislcap/foundation-logger": "14.
|
|
80
|
-
"@genesislcap/foundation-redux": "14.
|
|
81
|
-
"@genesislcap/foundation-ui": "14.
|
|
82
|
-
"@genesislcap/foundation-utils": "14.
|
|
83
|
-
"@genesislcap/rapid-design-system": "14.
|
|
84
|
-
"@genesislcap/web-core": "14.
|
|
78
|
+
"@genesislcap/foundation-ai": "14.437.1",
|
|
79
|
+
"@genesislcap/foundation-logger": "14.437.1",
|
|
80
|
+
"@genesislcap/foundation-redux": "14.437.1",
|
|
81
|
+
"@genesislcap/foundation-ui": "14.437.1",
|
|
82
|
+
"@genesislcap/foundation-utils": "14.437.1",
|
|
83
|
+
"@genesislcap/rapid-design-system": "14.437.1",
|
|
84
|
+
"@genesislcap/web-core": "14.437.1",
|
|
85
85
|
"dompurify": "^3.3.1",
|
|
86
86
|
"marked": "^17.0.3"
|
|
87
87
|
},
|
|
@@ -93,5 +93,5 @@
|
|
|
93
93
|
"publishConfig": {
|
|
94
94
|
"access": "public"
|
|
95
95
|
},
|
|
96
|
-
"gitHead": "
|
|
96
|
+
"gitHead": "121e8dd85e298464b0781220db72ad5190c3fb5f"
|
|
97
97
|
}
|