@memberjunction/ai-agents 6.1.4 → 6.1.6
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/AgentRunner.d.ts +9 -0
- package/dist/AgentRunner.d.ts.map +1 -1
- package/dist/AgentRunner.js +47 -13
- package/dist/AgentRunner.js.map +1 -1
- package/dist/ConversationCompactionManager.d.ts +7 -1
- package/dist/ConversationCompactionManager.d.ts.map +1 -1
- package/dist/ConversationCompactionManager.js +4 -1
- package/dist/ConversationCompactionManager.js.map +1 -1
- package/dist/KnowledgeAgent.d.ts.map +1 -1
- package/dist/KnowledgeAgent.js +12 -7
- package/dist/KnowledgeAgent.js.map +1 -1
- package/dist/agent-types/loop-agent-type.d.ts +22 -0
- package/dist/agent-types/loop-agent-type.d.ts.map +1 -1
- package/dist/agent-types/loop-agent-type.js +80 -2
- package/dist/agent-types/loop-agent-type.js.map +1 -1
- package/dist/base-agent.d.ts +29 -6
- package/dist/base-agent.d.ts.map +1 -1
- package/dist/base-agent.js +101 -32
- package/dist/base-agent.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/native-tools/action-tool-builder.d.ts +14 -0
- package/dist/native-tools/action-tool-builder.d.ts.map +1 -1
- package/dist/native-tools/action-tool-builder.js +62 -7
- package/dist/native-tools/action-tool-builder.js.map +1 -1
- package/dist/native-tools/control-tools.d.ts +17 -1
- package/dist/native-tools/control-tools.d.ts.map +1 -1
- package/dist/native-tools/control-tools.js +42 -3
- package/dist/native-tools/control-tools.js.map +1 -1
- package/dist/native-tools/json-argument.d.ts +41 -0
- package/dist/native-tools/json-argument.d.ts.map +1 -0
- package/dist/native-tools/json-argument.js +79 -0
- package/dist/native-tools/json-argument.js.map +1 -0
- package/dist/realtime/realtime-client-session-service.d.ts +58 -7
- package/dist/realtime/realtime-client-session-service.d.ts.map +1 -1
- package/dist/realtime/realtime-client-session-service.js +71 -11
- package/dist/realtime/realtime-client-session-service.js.map +1 -1
- package/package.json +18 -18
package/dist/index.d.ts
CHANGED
|
@@ -57,7 +57,7 @@ export * from './realtime/realtime-session-runner.js';
|
|
|
57
57
|
export * from './realtime/bridge-realtime-session-factory.js';
|
|
58
58
|
export * from './realtime/bridge-room-transcript-sink.js';
|
|
59
59
|
export * from './realtime/realtime-turn-moderator.js';
|
|
60
|
-
export { RealtimeToolBroker, RealtimeToolBrokerDeps, ExecutedToolCall, DelegatedRunArtifact } from './realtime/realtime-tool-broker.js';
|
|
60
|
+
export { RealtimeToolBroker, INVOKE_TARGET_AGENT_TOOL_NAME, RealtimeToolBrokerDeps, ExecutedToolCall, DelegatedRunArtifact } from './realtime/realtime-tool-broker.js';
|
|
61
61
|
export * from './realtime/realtime-client-session-service.js';
|
|
62
62
|
export * from './realtime/realtime-coagent-config.js';
|
|
63
63
|
export * from './realtime/realtime-vendor-resolution.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,cAAc,+BAA+B,CAAC;AAC9C,cAAc,wCAAwC,CAAC;AACvD,cAAc,wCAAwC,CAAC;AACvD,cAAc,cAAc,CAAC;AAC7B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iCAAiC,CAAC;AAChD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wCAAwC,CAAC;AACvD,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,0CAA0C,CAAC;AACzD,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,kCAAkC,CAAC;AACjD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,iCAAiC,CAAC;AAChD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kBAAkB,CAAC;AACjC,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oCAAoC,CAAC;AACnD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,wCAAwC,CAAC;AACvD,cAAc,oCAAoC,CAAC;AAKnD,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,cAAc,+BAA+B,CAAC;AAC9C,cAAc,wCAAwC,CAAC;AACvD,cAAc,wCAAwC,CAAC;AACvD,cAAc,cAAc,CAAC;AAC7B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iCAAiC,CAAC;AAChD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wCAAwC,CAAC;AACvD,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,0CAA0C,CAAC;AACzD,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,kCAAkC,CAAC;AACjD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,iCAAiC,CAAC;AAChD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kBAAkB,CAAC;AACjC,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oCAAoC,CAAC;AACnD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,wCAAwC,CAAC;AACvD,cAAc,oCAAoC,CAAC;AAKnD,OAAO,EAAE,kBAAkB,EAAE,6BAA6B,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACpK,cAAc,4CAA4C,CAAC;AAC3D,cAAc,oCAAoC,CAAC;AACnD,cAAc,uCAAuC,CAAC;AACtD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yCAAyC,CAAC;AACxD,cAAc,sCAAsC,CAAC;AACrD,cAAc,0CAA0C,CAAC;AACzD,cAAc,mCAAmC,CAAC;AAClD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,iCAAiC,CAAC;AAChD,cAAc,iDAAiD,CAAC;AAChE,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uCAAuC,CAAC;AACtD,cAAc,qCAAqC,CAAC;AAGpD,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,0BAA0B,EAC1B,mBAAmB,EACnB,0BAA0B,EAC1B,WAAW,GACZ,MAAM,6BAA6B,CAAC;AACrC,cAAc,oCAAoC,CAAC;AACnD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kCAAkC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -61,7 +61,7 @@ export * from './realtime/realtime-turn-moderator.js';
|
|
|
61
61
|
// DelegateToTargetRequest, DelegatedResult, ToolExecutionResult, loggers) is surfaced via the
|
|
62
62
|
// runner's `export *` above, so only the broker-specific symbols are named here to avoid a
|
|
63
63
|
// duplicate-export collision.
|
|
64
|
-
export { RealtimeToolBroker } from './realtime/realtime-tool-broker.js';
|
|
64
|
+
export { RealtimeToolBroker, INVOKE_TARGET_AGENT_TOOL_NAME } from './realtime/realtime-tool-broker.js';
|
|
65
65
|
export * from './realtime/realtime-client-session-service.js';
|
|
66
66
|
export * from './realtime/realtime-coagent-config.js';
|
|
67
67
|
export * from './realtime/realtime-vendor-resolution.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,cAAc,+BAA+B,CAAC;AAC9C,cAAc,wCAAwC,CAAC;AACvD,cAAc,wCAAwC,CAAC;AACvD,cAAc,cAAc,CAAC;AAC7B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iCAAiC,CAAC;AAChD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wCAAwC,CAAC;AACvD,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,0CAA0C,CAAC;AACzD,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,kCAAkC,CAAC;AACjD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,iCAAiC,CAAC;AAChD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kBAAkB,CAAC;AACjC,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oCAAoC,CAAC;AACnD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,wCAAwC,CAAC;AACvD,cAAc,oCAAoC,CAAC;AACnD,4FAA4F;AAC5F,8FAA8F;AAC9F,2FAA2F;AAC3F,8BAA8B;AAC9B,OAAO,EAAE,kBAAkB,EAAkE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,cAAc,+BAA+B,CAAC;AAC9C,cAAc,wCAAwC,CAAC;AACvD,cAAc,wCAAwC,CAAC;AACvD,cAAc,cAAc,CAAC;AAC7B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iCAAiC,CAAC;AAChD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wCAAwC,CAAC;AACvD,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,0CAA0C,CAAC;AACzD,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,kCAAkC,CAAC;AACjD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,iCAAiC,CAAC;AAChD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kBAAkB,CAAC;AACjC,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oCAAoC,CAAC;AACnD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,wCAAwC,CAAC;AACvD,cAAc,oCAAoC,CAAC;AACnD,4FAA4F;AAC5F,8FAA8F;AAC9F,2FAA2F;AAC3F,8BAA8B;AAC9B,OAAO,EAAE,kBAAkB,EAAE,6BAA6B,EAAkE,MAAM,iCAAiC,CAAC;AACpK,cAAc,4CAA4C,CAAC;AAC3D,cAAc,oCAAoC,CAAC;AACnD,cAAc,uCAAuC,CAAC;AACtD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yCAAyC,CAAC;AACxD,cAAc,sCAAsC,CAAC;AACrD,cAAc,0CAA0C,CAAC;AACzD,cAAc,mCAAmC,CAAC;AAClD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,iCAAiC,CAAC;AAChD,cAAc,iDAAiD,CAAC;AAChE,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uCAAuC,CAAC;AACtD,cAAc,qCAAqC,CAAC;AAEpD,wDAAwD;AACxD,OAAO,EACL,eAAe,EAEf,0BAA0B,EAG1B,WAAW,GACZ,MAAM,6BAA6B,CAAC;AACrC,cAAc,oCAAoC,CAAC;AACnD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kCAAkC,CAAC"}
|
|
@@ -14,6 +14,8 @@ export interface ActionToolBinding {
|
|
|
14
14
|
/** The Action the framework dispatches when that name comes back. */
|
|
15
15
|
action: MJActionEntityExtended;
|
|
16
16
|
tool: ChatTool;
|
|
17
|
+
/** The Action's params the tool was built from — what {@link coerceActionArguments} reads back. */
|
|
18
|
+
params: readonly MJActionParamEntity[];
|
|
17
19
|
}
|
|
18
20
|
/**
|
|
19
21
|
* A built tool set plus the reverse map from tool name back to Action.
|
|
@@ -55,6 +57,18 @@ export declare const MAX_TOOL_DESCRIPTION_LENGTH = 1024;
|
|
|
55
57
|
* here, so this stays a pure function of the name.
|
|
56
58
|
*/
|
|
57
59
|
export declare function sanitizeToolName(actionName: string): string;
|
|
60
|
+
/**
|
|
61
|
+
* Restores object-typed arguments a model sent as JSON strings, before the Action runs.
|
|
62
|
+
*
|
|
63
|
+
* Only `Simple Object` params are touched: an `Other` param is declared as `string` and may
|
|
64
|
+
* legitimately hold JSON-looking text. For an array param both the array itself and each element
|
|
65
|
+
* may arrive encoded.
|
|
66
|
+
*
|
|
67
|
+
* @param params The Action's params, as the tool was built from them
|
|
68
|
+
* @param args The call's arguments, as the provider returned them
|
|
69
|
+
* @returns A new argument object; `args` is not mutated
|
|
70
|
+
*/
|
|
71
|
+
export declare function coerceActionArguments(params: readonly MJActionParamEntity[], args: Record<string, unknown> | undefined): Record<string, unknown>;
|
|
58
72
|
/**
|
|
59
73
|
* Builds the `ChatTool` declaration for one Action.
|
|
60
74
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-tool-builder.d.ts","sourceRoot":"","sources":["../../src/native-tools/action-tool-builder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAE3E,0EAA0E;AAC1E,MAAM,WAAW,iBAAiB;IAC9B,gFAAgF;IAChF,IAAI,EAAE,QAAQ,CAAC;IACf,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,MAAM,EAAE,sBAAsB,CAAC;IAC/B,IAAI,EAAE,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"action-tool-builder.d.ts","sourceRoot":"","sources":["../../src/native-tools/action-tool-builder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAE3E,0EAA0E;AAC1E,MAAM,WAAW,iBAAiB;IAC9B,gFAAgF;IAChF,IAAI,EAAE,QAAQ,CAAC;IACf,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,MAAM,EAAE,sBAAsB,CAAC;IAC/B,IAAI,EAAE,QAAQ,CAAC;IACf,mGAAmG;IACnG,MAAM,EAAE,SAAS,mBAAmB,EAAE,CAAC;CAC1C;AAED;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC1B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,wCAAwC;IACxC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;CAC9C;AAKD;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,2BAA2B,OAAO,CAAC;AAKhD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAO3D;AAyDD;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACjC,MAAM,EAAE,SAAS,mBAAmB,EAAE,EACtC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC1C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAYzB;AA+FD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,sBAAsB,EAAE,MAAM,EAAE,SAAS,mBAAmB,EAAE,GAAG,QAAQ,CA4BpH;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAC9B,OAAO,EAAE,SAAS,sBAAsB,EAAE,EAC1C,gBAAgB,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,mBAAmB,EAAE,CAAC,GACtE,aAAa,CAsBf;AAED,sFAAsF;AACtF,MAAM,WAAW,yBAAyB;IACtC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,mBAAmB,EAAE,OAAO,CAAC;CAChC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CACnC,OAAO,EAAE,SAAS,sBAAsB,EAAE,EAC1C,eAAe,EAAE,aAAa,CAAC,yBAAyB,CAAC,GAC1D,sBAAsB,EAAE,CAO1B"}
|
|
@@ -52,18 +52,72 @@ export function sanitizeToolName(actionName) {
|
|
|
52
52
|
* - **`Scalar` emits a union type.** It appears to violate the cross-provider common subset —
|
|
53
53
|
* OpenAPI 3.0, which Gemini's classic function declarations follow, has no union `type` — but it
|
|
54
54
|
* measured clean on every provider tested, so the plan's literal mapping stands.
|
|
55
|
-
* - **
|
|
56
|
-
*
|
|
55
|
+
* - **The opaque kinds emit `string`, not `object`.** §8.2 originally specified `object` for them,
|
|
56
|
+
* reasoning it was "exact parity with the prose catalog". It is not:
|
|
57
57
|
* `Run Ad-hoc Query.Query` is `ValueType: 'Other'` but holds SQL text, and typing it as an
|
|
58
58
|
* object made models emit `Query: {}` on 40% of calls — well-formed, dispatchable and useless,
|
|
59
59
|
* which no well-formedness check catches. Switching to `string` took usable arguments from
|
|
60
60
|
* 60% to 100% on the same prompts. The structural type beats the prose description whenever the
|
|
61
61
|
* two disagree, so it must not disagree.
|
|
62
|
+
* - **`Simple Object` emits `object`.** Unlike the opaque kinds it says what the value is, and
|
|
63
|
+
* typing a real object as `string` fails the other way: the model JSON-encodes it, and an Action
|
|
64
|
+
* expecting an object receives text. Skip's `Test SQL Statement.Parameters` failed exactly so.
|
|
65
|
+
* Models still stringify objects now and then, which {@link coerceActionArguments} absorbs.
|
|
66
|
+
*
|
|
67
|
+
* Both are stopgaps for a real per-param schema — see MJ issue #5050 (`ActionParam.ValueSchema`).
|
|
62
68
|
*/
|
|
63
69
|
function schemaForValueType(valueType) {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
70
|
+
switch (valueType) {
|
|
71
|
+
case 'Scalar':
|
|
72
|
+
return { type: ['string', 'number', 'boolean'] };
|
|
73
|
+
case 'Simple Object':
|
|
74
|
+
return { type: 'object' };
|
|
75
|
+
default:
|
|
76
|
+
return { type: 'string' };
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Turns a JSON-encoded string back into the object or array a `Simple Object` param declares.
|
|
81
|
+
*
|
|
82
|
+
* Anything else is returned unchanged — a string that is not JSON, or JSON of the wrong shape, is
|
|
83
|
+
* the Action's to reject with its own message rather than ours to guess at.
|
|
84
|
+
*/
|
|
85
|
+
function decodeObjectValue(value, isArray) {
|
|
86
|
+
if (typeof value !== 'string') {
|
|
87
|
+
return value;
|
|
88
|
+
}
|
|
89
|
+
try {
|
|
90
|
+
const decoded = JSON.parse(value);
|
|
91
|
+
const shapeMatches = isArray ? Array.isArray(decoded) : decoded !== null && typeof decoded === 'object' && !Array.isArray(decoded);
|
|
92
|
+
return shapeMatches ? decoded : value;
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return value;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Restores object-typed arguments a model sent as JSON strings, before the Action runs.
|
|
100
|
+
*
|
|
101
|
+
* Only `Simple Object` params are touched: an `Other` param is declared as `string` and may
|
|
102
|
+
* legitimately hold JSON-looking text. For an array param both the array itself and each element
|
|
103
|
+
* may arrive encoded.
|
|
104
|
+
*
|
|
105
|
+
* @param params The Action's params, as the tool was built from them
|
|
106
|
+
* @param args The call's arguments, as the provider returned them
|
|
107
|
+
* @returns A new argument object; `args` is not mutated
|
|
108
|
+
*/
|
|
109
|
+
export function coerceActionArguments(params, args) {
|
|
110
|
+
const coerced = { ...(args ?? {}) };
|
|
111
|
+
for (const param of params) {
|
|
112
|
+
if (param.ValueType !== 'Simple Object' || !(param.Name in coerced)) {
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
const value = decodeObjectValue(coerced[param.Name], param.IsArray);
|
|
116
|
+
coerced[param.Name] = param.IsArray && Array.isArray(value)
|
|
117
|
+
? value.map((item) => decodeObjectValue(item, false))
|
|
118
|
+
: value;
|
|
119
|
+
}
|
|
120
|
+
return coerced;
|
|
67
121
|
}
|
|
68
122
|
/**
|
|
69
123
|
* Folds the metadata that has nowhere structural to go into the property description.
|
|
@@ -192,7 +246,8 @@ export function buildActionToolSet(actions, paramsByActionId) {
|
|
|
192
246
|
const byToolName = new Map();
|
|
193
247
|
const tools = [];
|
|
194
248
|
for (const action of actions) {
|
|
195
|
-
const
|
|
249
|
+
const params = paramsByActionId.get(action.ID) ?? [];
|
|
250
|
+
const tool = buildToolFromAction(action, params);
|
|
196
251
|
const existing = byToolName.get(tool.name);
|
|
197
252
|
if (existing) {
|
|
198
253
|
throw new Error(`Action tool name collision: '${existing.action.Name}' and '${action.Name}' both sanitize to `
|
|
@@ -201,7 +256,7 @@ export function buildActionToolSet(actions, paramsByActionId) {
|
|
|
201
256
|
if (tool.name.length === 0) {
|
|
202
257
|
throw new Error(`Action '${action.Name}' sanitizes to an empty tool name — it must contain at least one alphanumeric character.`);
|
|
203
258
|
}
|
|
204
|
-
byToolName.set(tool.name, { kind: 'action', toolName: tool.name, action, tool });
|
|
259
|
+
byToolName.set(tool.name, { kind: 'action', toolName: tool.name, action, tool, params });
|
|
205
260
|
tools.push(tool);
|
|
206
261
|
}
|
|
207
262
|
return { tools, byToolName };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-tool-builder.js","sourceRoot":"","sources":["../../src/native-tools/action-tool-builder.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"action-tool-builder.js","sourceRoot":"","sources":["../../src/native-tools/action-tool-builder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAgCH,iDAAiD;AACjD,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAEhC;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAI,CAAC;AAEhD,4FAA4F;AAC5F,MAAM,yBAAyB,GAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAE3E;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAAkB;IAC/C,OAAO,UAAU;SACZ,IAAI,EAAE;SACN,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;SAC9B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,WAAW,EAAE;SACb,KAAK,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC;AACxC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,SAAS,kBAAkB,CAAC,SAA2C;IACnE,QAAQ,SAAS,EAAE,CAAC;QAChB,KAAK,QAAQ;YACT,OAAO,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC;QACrD,KAAK,eAAe;YAChB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC9B;YACI,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAClC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,SAAS,iBAAiB,CAAC,KAAc,EAAE,OAAgB;IACvD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,CAAC;QACD,MAAM,OAAO,GAAY,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACnI,OAAO,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,qBAAqB,CACjC,MAAsC,EACtC,IAAyC;IAEzC,MAAM,OAAO,GAA4B,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;IAC7D,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,IAAI,KAAK,CAAC,SAAS,KAAK,eAAe,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,OAAO,CAAC,EAAE,CAAC;YAClE,SAAS;QACb,CAAC;QACD,MAAM,KAAK,GAAG,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACpE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YACvD,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACrD,CAAC,CAAC,KAAK,CAAC;IAChB,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,SAAS,aAAa,CAAC,KAA0B;IAC7C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC;AAED,+EAA+E;AAC/E,SAAS,IAAI,CAAC,IAA+B,EAAE,GAAW;IACtD,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACnD,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,CAAC;IACd,CAAC;IACD,OAAO,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC;AACrE,CAAC;AAED;;;GAGG;AACH,SAAS,kBAAkB,CACvB,MAA8B,EAC9B,OAAuC,EACvC,KAAwF,EACxF,MAAc;IAEd,uFAAuF;IACvF,sFAAsF;IACtF,MAAM,KAAK,GAAG,CAAC,+BAA+B,CAAC,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAE5F,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YACtC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3C,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrB,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;YACpC,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YACvC,+FAA+F;YAC/F,MAAM,QAAQ,GAAG,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;YACjE,OAAO,GAAG,EAAE,CAAC,UAAU,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC1F,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,SAAS,YAAY,CAAC,MAA8B,EAAE,MAAsC;IACxF,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IAC/E,uFAAuF;IACvF,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC;IAE9C,KAAK,MAAM,MAAM,IAAI,yBAAyB,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAChE,IAAI,IAAI,CAAC,MAAM,IAAI,2BAA2B,EAAE,CAAC;YAC7C,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IACD,OAAO,GAAG,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,2BAA2B,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC;AACnH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAA8B,EAAE,MAAsC;IACtG,MAAM,UAAU,GAA4B,EAAE,CAAC;IAC/C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAClD,SAAS;QACb,CAAC;QACD,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACpD,oEAAoE;QACpE,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QAC3E,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QACzC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;QAC3E,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACnB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;IACL,CAAC;IAED,MAAM,WAAW,GAA4B,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;IAC5E,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,WAAW,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACpC,CAAC;IAED,OAAO;QACH,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC;QACnC,WAAW,EAAE,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC;QACzC,WAAW;KACd,CAAC;AACN,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAC9B,OAA0C,EAC1C,gBAAqE;IAErE,MAAM,UAAU,GAAG,IAAI,GAAG,EAA6B,CAAC;IACxD,MAAM,KAAK,GAAe,EAAE,CAAC;IAE7B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QACrD,MAAM,IAAI,GAAG,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,QAAQ,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CACX,gCAAgC,QAAQ,CAAC,MAAM,CAAC,IAAI,UAAU,MAAM,CAAC,IAAI,qBAAqB;kBAC5F,IAAI,IAAI,CAAC,IAAI,4FAA4F,CAC9G,CAAC;QACN,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,WAAW,MAAM,CAAC,IAAI,0FAA0F,CAAC,CAAC;QACtI,CAAC;QACD,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACzF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AACjC,CAAC;AAQD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,uBAAuB,CACnC,OAA0C,EAC1C,eAAyD;IAEzD,MAAM,QAAQ,GAAG,IAAI,GAAG,CACpB,eAAe;SACV,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,mBAAmB,KAAK,KAAK,IAAI,GAAG,CAAC,QAAQ,CAAC;SAClE,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAE,GAAG,CAAC,QAAmB,CAAC,WAAW,EAAE,CAAC,CAC5D,CAAC;IACF,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;AAC9E,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @fileoverview Control-flow tools for the implicit protocol (spec §2.2, §4): one tool per
|
|
3
|
-
* sub-agent, `payload_change_request`, `ask_user`. Built beside the Action tools so the reverse map
|
|
3
|
+
* sub-agent, `payload_change_request`, `ask_user`, `complete_task`. Built beside the Action tools so the reverse map
|
|
4
4
|
* resolves every call the model can make.
|
|
5
5
|
*
|
|
6
6
|
* The agent declares these without knowing which model will answer. The prompt runner keeps them
|
|
@@ -13,6 +13,7 @@ import type { MJAIAgentEntityExtended } from '@memberjunction/ai-core-plus';
|
|
|
13
13
|
import { type ActionToolBinding, type ActionToolSet } from './action-tool-builder.js';
|
|
14
14
|
export declare const PAYLOAD_CHANGE_TOOL = "payload_change_request";
|
|
15
15
|
export declare const ASK_USER_TOOL = "ask_user";
|
|
16
|
+
export declare const COMPLETE_TASK_TOOL = "complete_task";
|
|
16
17
|
export declare const SUB_AGENT_TOOL_PREFIX = "delegate_to_";
|
|
17
18
|
/** The fixed control tools. Sub-agent tools are recognised by {@link SUB_AGENT_TOOL_PREFIX}. */
|
|
18
19
|
export declare const NATIVE_CONTROL_TOOL_NAMES: readonly string[];
|
|
@@ -30,6 +31,10 @@ export type NativeToolBinding = ActionToolBinding | {
|
|
|
30
31
|
kind: 'askUser';
|
|
31
32
|
toolName: string;
|
|
32
33
|
tool: ChatTool;
|
|
34
|
+
} | {
|
|
35
|
+
kind: 'complete';
|
|
36
|
+
toolName: string;
|
|
37
|
+
tool: ChatTool;
|
|
33
38
|
};
|
|
34
39
|
export interface NativeToolSet {
|
|
35
40
|
tools: ChatTool[];
|
|
@@ -42,6 +47,17 @@ export interface NativeToolSet {
|
|
|
42
47
|
export declare function buildPayloadChangeTool(): ChatTool;
|
|
43
48
|
/** `ask_user` — the one explicit control tool: the run pauses as `Chat` / `AwaitingFeedback` (spec §1). */
|
|
44
49
|
export declare function buildAskUserTool(): ChatTool;
|
|
50
|
+
/**
|
|
51
|
+
* `complete_task` — the terminal tool: apply the final payload write and finish, in ONE turn.
|
|
52
|
+
*
|
|
53
|
+
* Without it, implicit control flow finishes in two turns — `payload_change_request`, then a
|
|
54
|
+
* plain-text reply — where the envelope finishes in one (`taskComplete` + `payloadChangeRequest`).
|
|
55
|
+
* That costs an iteration on every run, and on the last permitted iteration there is no second
|
|
56
|
+
* turn at all. Agent frameworks that need a structured result end on a designated tool for the
|
|
57
|
+
* same reason (OpenAI Agents SDK `StopAtTools`, SWE-agent's `submit`). Plain text still ends the
|
|
58
|
+
* turn, for agents whose answer is prose.
|
|
59
|
+
*/
|
|
60
|
+
export declare function buildCompleteTaskTool(): ChatTool;
|
|
45
61
|
/** One tool per sub-agent: `delegate_to_<sanitized name>`, described by the agent's own description. */
|
|
46
62
|
export declare function buildSubAgentTool(agent: MJAIAgentEntityExtended): ChatTool;
|
|
47
63
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control-tools.d.ts","sourceRoot":"","sources":["../../src/native-tools/control-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAiD,KAAK,iBAAiB,EAAE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAElI,eAAO,MAAM,mBAAmB,2BAA2B,CAAC;AAC5D,eAAO,MAAM,aAAa,aAAa,CAAC;AACxC,eAAO,MAAM,qBAAqB,iBAAiB,CAAC;AACpD,gGAAgG;AAChG,eAAO,MAAM,yBAAyB,EAAE,SAAS,MAAM,
|
|
1
|
+
{"version":3,"file":"control-tools.d.ts","sourceRoot":"","sources":["../../src/native-tools/control-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAiD,KAAK,iBAAiB,EAAE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAElI,eAAO,MAAM,mBAAmB,2BAA2B,CAAC;AAC5D,eAAO,MAAM,aAAa,aAAa,CAAC;AACxC,eAAO,MAAM,kBAAkB,kBAAkB,CAAC;AAClD,eAAO,MAAM,qBAAqB,iBAAiB,CAAC;AACpD,gGAAgG;AAChG,eAAO,MAAM,yBAAyB,EAAE,SAAS,MAAM,EAA6D,CAAC;AAIrH,8FAA8F;AAC9F,MAAM,MAAM,iBAAiB,GACvB,iBAAiB,GACjB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,uBAAuB,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GACtF;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC3D;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC;AAE7D,MAAM,WAAW,aAAa;IAC1B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,uCAAuC;IACvC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC3C,4FAA4F;IAC5F,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC9B;AAID,kFAAkF;AAClF,wBAAgB,sBAAsB,IAAI,QAAQ,CAsBjD;AAED,2GAA2G;AAC3G,wBAAgB,gBAAgB,IAAI,QAAQ,CA8B3C;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,IAAI,QAAQ,CA0BhD;AAED,wGAAwG;AACxG,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,uBAAuB,GAAG,QAAQ,CAc1E;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,uBAAuB,EAAE,GAAG,aAAa,CA+BzH"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { sanitizeToolName, MAX_TOOL_DESCRIPTION_LENGTH } from './action-tool-builder.js';
|
|
2
2
|
export const PAYLOAD_CHANGE_TOOL = 'payload_change_request';
|
|
3
3
|
export const ASK_USER_TOOL = 'ask_user';
|
|
4
|
+
export const COMPLETE_TASK_TOOL = 'complete_task';
|
|
4
5
|
export const SUB_AGENT_TOOL_PREFIX = 'delegate_to_';
|
|
5
6
|
/** The fixed control tools. Sub-agent tools are recognised by {@link SUB_AGENT_TOOL_PREFIX}. */
|
|
6
|
-
export const NATIVE_CONTROL_TOOL_NAMES = [PAYLOAD_CHANGE_TOOL, ASK_USER_TOOL];
|
|
7
|
+
export const NATIVE_CONTROL_TOOL_NAMES = [PAYLOAD_CHANGE_TOOL, ASK_USER_TOOL, COMPLETE_TASK_TOOL];
|
|
7
8
|
/** Providers cap tool names at 64 characters. */
|
|
8
9
|
const MAX_TOOL_NAME_LENGTH = 64;
|
|
9
10
|
const clip = (text, max) => (text.length <= max ? text : `${text.slice(0, max - 1)}…`);
|
|
@@ -60,6 +61,42 @@ export function buildAskUserTool() {
|
|
|
60
61
|
}
|
|
61
62
|
};
|
|
62
63
|
}
|
|
64
|
+
/**
|
|
65
|
+
* `complete_task` — the terminal tool: apply the final payload write and finish, in ONE turn.
|
|
66
|
+
*
|
|
67
|
+
* Without it, implicit control flow finishes in two turns — `payload_change_request`, then a
|
|
68
|
+
* plain-text reply — where the envelope finishes in one (`taskComplete` + `payloadChangeRequest`).
|
|
69
|
+
* That costs an iteration on every run, and on the last permitted iteration there is no second
|
|
70
|
+
* turn at all. Agent frameworks that need a structured result end on a designated tool for the
|
|
71
|
+
* same reason (OpenAI Agents SDK `StopAtTools`, SWE-agent's `submit`). Plain text still ends the
|
|
72
|
+
* turn, for agents whose answer is prose.
|
|
73
|
+
*/
|
|
74
|
+
export function buildCompleteTaskTool() {
|
|
75
|
+
return {
|
|
76
|
+
name: COMPLETE_TASK_TOOL,
|
|
77
|
+
description: clip('Finish the task. Call this when your work is done and verified: put any final writes to the shared payload ' +
|
|
78
|
+
'in payloadChangeRequest and your answer for the user or calling agent in message. The change is applied ' +
|
|
79
|
+
'and the run ends — unless the result fails validation, in which case you receive the reason and continue. ' +
|
|
80
|
+
'Must be the only call on its turn.', MAX_TOOL_DESCRIPTION_LENGTH),
|
|
81
|
+
inputSchema: {
|
|
82
|
+
type: 'object',
|
|
83
|
+
properties: {
|
|
84
|
+
message: { type: 'string', description: 'Your final answer or a brief summary of what you did.' },
|
|
85
|
+
// A JSON STRING, not an object. complete_task is the call the framework forces on the
|
|
86
|
+
// final turn, and a forced call is schema-constrained: an object whose sections declare
|
|
87
|
+
// no properties can only decode as `{}`. Replaying 5 real final turns 10 times each on
|
|
88
|
+
// Gemini 3 Flash: object schema 0/50 kept the payload (every call `{"updateElements":{}}`),
|
|
89
|
+
// open objects 2/50, JSON string 50/50. The loop decodes the string.
|
|
90
|
+
payloadChangeRequest: {
|
|
91
|
+
type: 'string',
|
|
92
|
+
description: 'Optional. Final payload changes as a JSON object string, applied before the task completes: '
|
|
93
|
+
+ '{"newElements"?: {...}, "updateElements"?: {...}, "replaceElements"?: {...}, "removeElements"?: {...}} — same shape as payload_change_request.'
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
required: ['message']
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
}
|
|
63
100
|
/** One tool per sub-agent: `delegate_to_<sanitized name>`, described by the agent's own description. */
|
|
64
101
|
export function buildSubAgentTool(agent) {
|
|
65
102
|
const name = `${SUB_AGENT_TOOL_PREFIX}${sanitizeToolName(agent.Name)}`.slice(0, MAX_TOOL_NAME_LENGTH);
|
|
@@ -104,10 +141,12 @@ export function buildNativeToolSet(actionSet, subAgents) {
|
|
|
104
141
|
}
|
|
105
142
|
const payload = buildPayloadChangeTool();
|
|
106
143
|
const ask = buildAskUserTool();
|
|
144
|
+
const complete = buildCompleteTaskTool();
|
|
107
145
|
byToolName.set(payload.name, { kind: 'payloadChange', toolName: payload.name, tool: payload });
|
|
108
146
|
byToolName.set(ask.name, { kind: 'askUser', toolName: ask.name, tool: ask });
|
|
109
|
-
|
|
110
|
-
|
|
147
|
+
byToolName.set(complete.name, { kind: 'complete', toolName: complete.name, tool: complete });
|
|
148
|
+
tools.push(payload, ask, complete);
|
|
149
|
+
controlToolNames.push(payload.name, ask.name, complete.name);
|
|
111
150
|
return { tools, byToolName, controlToolNames };
|
|
112
151
|
}
|
|
113
152
|
//# sourceMappingURL=control-tools.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control-tools.js","sourceRoot":"","sources":["../../src/native-tools/control-tools.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,gBAAgB,EAAE,2BAA2B,EAA8C,MAAM,uBAAuB,CAAC;AAElI,MAAM,CAAC,MAAM,mBAAmB,GAAG,wBAAwB,CAAC;AAC5D,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CAAC;AACxC,MAAM,CAAC,MAAM,qBAAqB,GAAG,cAAc,CAAC;AACpD,gGAAgG;AAChG,MAAM,CAAC,MAAM,yBAAyB,GAAsB,CAAC,mBAAmB,EAAE,aAAa,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"control-tools.js","sourceRoot":"","sources":["../../src/native-tools/control-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Decoding a JSON document that a model sent as a string-typed tool argument.
|
|
3
|
+
*
|
|
4
|
+
* Some tool arguments are declared as JSON strings on purpose (see `complete_task.payloadChangeRequest`
|
|
5
|
+
* in control-tools.ts), which leaves the model writing JSON inside a string. Long documents come back
|
|
6
|
+
* with a recurring defect: part-way through, usually right after a long string value such as a SQL
|
|
7
|
+
* query, the model keeps writing the document's own layout as escape sequences — `"…ASC"\n }\n }\n}`
|
|
8
|
+
* — as if it were still inside that string. Gemini 3.8 Flash did exactly this on a forced final
|
|
9
|
+
* `complete_task` turn, and the run failed with a finished, correct answer in hand.
|
|
10
|
+
*
|
|
11
|
+
* A backslash is never valid JSON outside a string, so turning `\n`, `\r` and `\t` there back into
|
|
12
|
+
* the whitespace they stand for cannot change the meaning of a document that was already valid.
|
|
13
|
+
* Nothing else is repaired: a document that still does not parse is reported with the parser's own
|
|
14
|
+
* message, so the model learns where it went wrong.
|
|
15
|
+
*/
|
|
16
|
+
/** The result of decoding a JSON argument: the parsed value, or why it could not be parsed. */
|
|
17
|
+
export type JSONArgumentDecodeResult = {
|
|
18
|
+
Success: true;
|
|
19
|
+
Value: unknown;
|
|
20
|
+
Repaired: boolean;
|
|
21
|
+
} | {
|
|
22
|
+
Success: false;
|
|
23
|
+
Error: string;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Parses `text` as JSON, repairing layout escapes written outside string literals if the plain parse
|
|
27
|
+
* fails.
|
|
28
|
+
*
|
|
29
|
+
* @param text the argument as the model sent it
|
|
30
|
+
* @returns the parsed value, with `Repaired` true when the repair was needed; or the original parse error
|
|
31
|
+
*/
|
|
32
|
+
export declare function DecodeJSONArgument(text: string): JSONArgumentDecodeResult;
|
|
33
|
+
/**
|
|
34
|
+
* Replaces `\n`, `\r` and `\t` escape sequences that sit outside JSON string literals with the
|
|
35
|
+
* whitespace they stand for. Escapes inside strings, and every other character, are left alone.
|
|
36
|
+
*
|
|
37
|
+
* @param text JSON text, possibly with layout written as escape sequences
|
|
38
|
+
* @returns the text with those escapes outside strings turned into whitespace
|
|
39
|
+
*/
|
|
40
|
+
export declare function RepairLayoutEscapesOutsideStrings(text: string): string;
|
|
41
|
+
//# sourceMappingURL=json-argument.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-argument.d.ts","sourceRoot":"","sources":["../../src/native-tools/json-argument.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,+FAA+F;AAC/F,MAAM,MAAM,wBAAwB,GAC9B;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,GACpD;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAKxC;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,wBAAwB,CAiBzE;AAED;;;;;;GAMG;AACH,wBAAgB,iCAAiC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA0BtE"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Decoding a JSON document that a model sent as a string-typed tool argument.
|
|
3
|
+
*
|
|
4
|
+
* Some tool arguments are declared as JSON strings on purpose (see `complete_task.payloadChangeRequest`
|
|
5
|
+
* in control-tools.ts), which leaves the model writing JSON inside a string. Long documents come back
|
|
6
|
+
* with a recurring defect: part-way through, usually right after a long string value such as a SQL
|
|
7
|
+
* query, the model keeps writing the document's own layout as escape sequences — `"…ASC"\n }\n }\n}`
|
|
8
|
+
* — as if it were still inside that string. Gemini 3.8 Flash did exactly this on a forced final
|
|
9
|
+
* `complete_task` turn, and the run failed with a finished, correct answer in hand.
|
|
10
|
+
*
|
|
11
|
+
* A backslash is never valid JSON outside a string, so turning `\n`, `\r` and `\t` there back into
|
|
12
|
+
* the whitespace they stand for cannot change the meaning of a document that was already valid.
|
|
13
|
+
* Nothing else is repaired: a document that still does not parse is reported with the parser's own
|
|
14
|
+
* message, so the model learns where it went wrong.
|
|
15
|
+
*/
|
|
16
|
+
/** Escapes a model writes for layout, mapped to the whitespace they stand for. */
|
|
17
|
+
const LAYOUT_ESCAPES = { n: '\n', r: '\r', t: '\t' };
|
|
18
|
+
/**
|
|
19
|
+
* Parses `text` as JSON, repairing layout escapes written outside string literals if the plain parse
|
|
20
|
+
* fails.
|
|
21
|
+
*
|
|
22
|
+
* @param text the argument as the model sent it
|
|
23
|
+
* @returns the parsed value, with `Repaired` true when the repair was needed; or the original parse error
|
|
24
|
+
*/
|
|
25
|
+
export function DecodeJSONArgument(text) {
|
|
26
|
+
let originalError;
|
|
27
|
+
try {
|
|
28
|
+
return { Success: true, Value: JSON.parse(text), Repaired: false };
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
originalError = error instanceof Error ? error.message : String(error);
|
|
32
|
+
}
|
|
33
|
+
const repaired = RepairLayoutEscapesOutsideStrings(text);
|
|
34
|
+
if (repaired !== text) {
|
|
35
|
+
try {
|
|
36
|
+
return { Success: true, Value: JSON.parse(repaired), Repaired: true };
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
// Fall through: report the error the model's own text produced, not the repair's.
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return { Success: false, Error: originalError };
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Replaces `\n`, `\r` and `\t` escape sequences that sit outside JSON string literals with the
|
|
46
|
+
* whitespace they stand for. Escapes inside strings, and every other character, are left alone.
|
|
47
|
+
*
|
|
48
|
+
* @param text JSON text, possibly with layout written as escape sequences
|
|
49
|
+
* @returns the text with those escapes outside strings turned into whitespace
|
|
50
|
+
*/
|
|
51
|
+
export function RepairLayoutEscapesOutsideStrings(text) {
|
|
52
|
+
let output = '';
|
|
53
|
+
let inString = false;
|
|
54
|
+
for (let i = 0; i < text.length; i++) {
|
|
55
|
+
const char = text[i];
|
|
56
|
+
if (inString) {
|
|
57
|
+
output += char;
|
|
58
|
+
if (char === '\\' && i + 1 < text.length) {
|
|
59
|
+
output += text[++i];
|
|
60
|
+
}
|
|
61
|
+
else if (char === '"') {
|
|
62
|
+
inString = false;
|
|
63
|
+
}
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
const layout = char === '\\' ? LAYOUT_ESCAPES[text[i + 1]] : undefined;
|
|
67
|
+
if (layout !== undefined) {
|
|
68
|
+
output += layout;
|
|
69
|
+
i++;
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
if (char === '"') {
|
|
73
|
+
inString = true;
|
|
74
|
+
}
|
|
75
|
+
output += char;
|
|
76
|
+
}
|
|
77
|
+
return output;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=json-argument.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-argument.js","sourceRoot":"","sources":["../../src/native-tools/json-argument.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAOH,kFAAkF;AAClF,MAAM,cAAc,GAAqC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;AAEvF;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC3C,IAAI,aAAqB,CAAC;IAC1B,IAAI,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACvE,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACtB,aAAa,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,QAAQ,GAAG,iCAAiC,CAAC,IAAI,CAAC,CAAC;IACzD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACpB,IAAI,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC1E,CAAC;QAAC,MAAM,CAAC;YACL,kFAAkF;QACtF,CAAC;IACL,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;AACpD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iCAAiC,CAAC,IAAY;IAC1D,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,QAAQ,EAAE,CAAC;YACX,MAAM,IAAI,IAAI,CAAC;YACf,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;gBACvC,MAAM,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACxB,CAAC;iBAAM,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACtB,QAAQ,GAAG,KAAK,CAAC;YACrB,CAAC;YACD,SAAS;QACb,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACvE,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,IAAI,MAAM,CAAC;YACjB,CAAC,EAAE,CAAC;YACJ,SAAS;QACb,CAAC;QACD,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACf,QAAQ,GAAG,IAAI,CAAC;QACpB,CAAC;QACD,MAAM,IAAI,IAAI,CAAC;IACnB,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC"}
|