@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.
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../src/main/main.ts"],"names":[],"mappings":"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"}
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
- * invocation. Tracked as an array (not a counter) so the slice can survive
8
- * pop-in/pop-out and so a listener that connects mid-execution can compute the
9
- * effective mode without having seen the start event.
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 SubAgentInputOverride {
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` calls.
55
- * The most restrictive entry (`'hidden'` > `'disabled'`) wins; an empty list
56
- * means the agent-level `chatInputDuringExecution` applies.
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
- subAgentInputOverrides: SubAgentInputOverride[];
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
- addSubAgentInputOverride(state: import("immer").WritableDraft<AiAssistantSessionState>, action: PayloadAction<SubAgentInputOverride>): void;
78
- removeSubAgentInputOverride(state: import("immer").WritableDraft<AiAssistantSessionState>, action: PayloadAction<{
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;;;;;;;GAOG;AACH,MAAM,WAAW,qBAAqB;IACpC,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;;;;OAIG;IACH,sBAAsB,EAAE,qBAAqB,EAAE,CAAC;CACjD;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;oGAGvB,aAAa,CAAC,qBAAqB,CAAC;uGAGjC,aAAa,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;oCAO1E,CAAC"}
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
- addSubAgentInputOverride(state: import("immer").WritableDraft<AiAssistantSessionState>, action: import("@reduxjs/toolkit").PayloadAction<import("./ai-assistant-slice").SubAgentInputOverride>): void;
20
- removeSubAgentInputOverride(state: import("immer").WritableDraft<AiAssistantSessionState>, action: import("@reduxjs/toolkit").PayloadAction<{
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
- this.toolHandlers = toolHandlers;
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
- this.toolHandlers = (_b = config.toolHandlers) !== null && _b !== void 0 ? _b : {};
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, { resolve, reject });
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 }) : message;
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
- // Each proxy entry calls into `cachedHandlers`, which is populated eagerly
89
- // inside `onActivate` (see below). Eager population means the no-folds
90
- // assertion fires at activation time not on first tool call — so a
91
- // misconfigured agent fails loud and immediately instead of silently
92
- // appearing to work until the LLM happens to invoke a tool.
93
- const buildHandlerProxy = (names) => {
94
- const out = {};
95
- for (const name of names) {
96
- out[name] = (args, ctx) => __awaiter(this, void 0, void 0, function* () {
97
- if (!state || !cachedHandlers) {
98
- throw new Error(`Stateful agent "${opts.name}" handler called before init`);
99
- }
100
- const handler = cachedHandlers[name];
101
- if (!handler) {
102
- throw new Error(`Tool "${name}" has no handler on stateful agent "${opts.name}"`);
103
- }
104
- return handler(args, ctx);
105
- });
106
- }
107
- return out;
108
- };
109
- // Static-tools case: handler names are knowable from the definitions array.
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: opts.toolHandlers ? resolvedHandlers : undefined,
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 handlers eagerly and validate up-front. Throws here are visible
131
- // at the agent-switch boundary instead of buried inside a future tool
132
- // dispatch.
133
- cachedHandlers = (_b = (_a = opts.toolHandlers) === null || _a === void 0 ? void 0 : _a.call(opts, state)) !== null && _b !== void 0 ? _b : {};
134
- assertNoFolds(cachedHandlers);
135
- // Dynamic-tools path: handler names are discovered from the sample.
136
- if (!staticHandlerProxy && opts.toolHandlers) {
137
- const dynamicProxy = buildHandlerProxy(Object.keys(cachedHandlers));
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* () {
@@ -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
- * invocations. Empty means no override is active.
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 subAgentInputOverrides() {
306
+ get inputOverrides() {
307
307
  var _a, _b;
308
- return (_b = (_a = this._sessionRef) === null || _a === void 0 ? void 0 : _a.store.aiAssistant.subAgentInputOverrides) !== null && _b !== void 0 ? _b : [];
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. Sub-agent overrides take precedence over the agent-level
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.subAgentInputOverrides;
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
- const toolNames = Object.keys((_a = a.toolHandlers) !== null && _a !== void 0 ? _a : {})
476
- .sort()
477
- .join('+');
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.addSubAgentInputOverride({
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.removeSubAgentInputOverride({ id: invocationId });
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
- ? expandToolTree(a.toolDefinitions, (_a = a.toolHandlers) !== null && _a !== void 0 ? _a : {})
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) => messageType(m) === 'ai-function' &&
167
- m.agentName &&
168
- c.parent.showAgentSwitchIndicator
169
- ? `Tool Call · ${m.agentName}`
170
- : senderLabel[messageType(m)]}
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
- subAgentInputOverrides: [],
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
- addSubAgentInputOverride(state, action) {
70
- state.subAgentInputOverrides.push(action.payload);
69
+ addInputOverride(state, action) {
70
+ state.inputOverrides.push(action.payload);
71
71
  },
72
- removeSubAgentInputOverride(state, action) {
73
- state.subAgentInputOverrides = state.subAgentInputOverrides.filter((o) => o.id !== action.payload.id);
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.436.0",
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.436.0",
68
- "@genesislcap/genx": "14.436.0",
69
- "@genesislcap/rollup-builder": "14.436.0",
70
- "@genesislcap/ts-builder": "14.436.0",
71
- "@genesislcap/uvu-playwright-builder": "14.436.0",
72
- "@genesislcap/vite-builder": "14.436.0",
73
- "@genesislcap/webpack-builder": "14.436.0",
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.436.0",
79
- "@genesislcap/foundation-logger": "14.436.0",
80
- "@genesislcap/foundation-redux": "14.436.0",
81
- "@genesislcap/foundation-ui": "14.436.0",
82
- "@genesislcap/foundation-utils": "14.436.0",
83
- "@genesislcap/rapid-design-system": "14.436.0",
84
- "@genesislcap/web-core": "14.436.0",
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": "87ef9b53cc5f3030651cbc3126bd26f07ffd6819"
96
+ "gitHead": "121e8dd85e298464b0781220db72ad5190c3fb5f"
97
97
  }