@memberjunction/ai-agents 5.38.0 → 5.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AgentRunner.d.ts +23 -0
- package/dist/AgentRunner.d.ts.map +1 -1
- package/dist/AgentRunner.js +81 -26
- package/dist/AgentRunner.js.map +1 -1
- package/dist/ArtifactToolManager.d.ts +13 -0
- package/dist/ArtifactToolManager.d.ts.map +1 -1
- package/dist/ArtifactToolManager.js +60 -1
- package/dist/ArtifactToolManager.js.map +1 -1
- package/dist/agent-run-watchdog.d.ts +109 -0
- package/dist/agent-run-watchdog.d.ts.map +1 -0
- package/dist/agent-run-watchdog.js +278 -0
- package/dist/agent-run-watchdog.js.map +1 -0
- package/dist/agent-types/loop-agent-prompt-params.d.ts +13 -0
- package/dist/agent-types/loop-agent-prompt-params.d.ts.map +1 -1
- package/dist/agent-types/loop-agent-prompt-params.js +3 -1
- package/dist/agent-types/loop-agent-prompt-params.js.map +1 -1
- package/dist/agent-types/loop-agent-response-type.d.ts +12 -3
- package/dist/agent-types/loop-agent-response-type.d.ts.map +1 -1
- package/dist/agent-types/loop-agent-response-type.js.map +1 -1
- package/dist/agent-types/loop-agent-type.d.ts.map +1 -1
- package/dist/agent-types/loop-agent-type.js +41 -2
- package/dist/agent-types/loop-agent-type.js.map +1 -1
- package/dist/artifact-tools/DataSnapshotToolLibrary.js +2 -2
- package/dist/artifact-tools/JSONToolLibrary.d.ts.map +1 -1
- package/dist/artifact-tools/JSONToolLibrary.js +7 -1
- package/dist/artifact-tools/JSONToolLibrary.js.map +1 -1
- package/dist/base-agent.d.ts +69 -1
- package/dist/base-agent.d.ts.map +1 -1
- package/dist/base-agent.js +294 -24
- package/dist/base-agent.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/pipeline/coerce.d.ts +43 -0
- package/dist/pipeline/coerce.d.ts.map +1 -0
- package/dist/pipeline/coerce.js +92 -0
- package/dist/pipeline/coerce.js.map +1 -0
- package/dist/pipeline/index.d.ts +20 -0
- package/dist/pipeline/index.d.ts.map +1 -0
- package/dist/pipeline/index.js +20 -0
- package/dist/pipeline/index.js.map +1 -0
- package/dist/pipeline/jsonpath-eval.d.ts +29 -0
- package/dist/pipeline/jsonpath-eval.d.ts.map +1 -0
- package/dist/pipeline/jsonpath-eval.js +144 -0
- package/dist/pipeline/jsonpath-eval.js.map +1 -0
- package/dist/pipeline/operators.d.ts +15 -0
- package/dist/pipeline/operators.d.ts.map +1 -0
- package/dist/pipeline/operators.js +332 -0
- package/dist/pipeline/operators.js.map +1 -0
- package/dist/pipeline/path.d.ts +16 -0
- package/dist/pipeline/path.d.ts.map +1 -0
- package/dist/pipeline/path.js +34 -0
- package/dist/pipeline/path.js.map +1 -0
- package/dist/pipeline/pipeline-docs.d.ts +6 -0
- package/dist/pipeline/pipeline-docs.d.ts.map +1 -0
- package/dist/pipeline/pipeline-docs.js +137 -0
- package/dist/pipeline/pipeline-docs.js.map +1 -0
- package/dist/pipeline/pipeline-executor.d.ts +72 -0
- package/dist/pipeline/pipeline-executor.d.ts.map +1 -0
- package/dist/pipeline/pipeline-executor.js +326 -0
- package/dist/pipeline/pipeline-executor.js.map +1 -0
- package/dist/pipeline/pipeline-registry.d.ts +24 -0
- package/dist/pipeline/pipeline-registry.d.ts.map +1 -0
- package/dist/pipeline/pipeline-registry.js +28 -0
- package/dist/pipeline/pipeline-registry.js.map +1 -0
- package/dist/pipeline/pipeline.types.d.ts +89 -0
- package/dist/pipeline/pipeline.types.d.ts.map +1 -0
- package/dist/pipeline/pipeline.types.js +13 -0
- package/dist/pipeline/pipeline.types.js.map +1 -0
- package/dist/pipeline/predicate.d.ts +23 -0
- package/dist/pipeline/predicate.d.ts.map +1 -0
- package/dist/pipeline/predicate.js +306 -0
- package/dist/pipeline/predicate.js.map +1 -0
- package/dist/pipeline/providers/action-provider.d.ts +21 -0
- package/dist/pipeline/providers/action-provider.d.ts.map +1 -0
- package/dist/pipeline/providers/action-provider.js +24 -0
- package/dist/pipeline/providers/action-provider.js.map +1 -0
- package/dist/pipeline/providers/artifact-tool-provider.d.ts +20 -0
- package/dist/pipeline/providers/artifact-tool-provider.d.ts.map +1 -0
- package/dist/pipeline/providers/artifact-tool-provider.js +27 -0
- package/dist/pipeline/providers/artifact-tool-provider.js.map +1 -0
- package/dist/pipeline/providers/serialize.d.ts +23 -0
- package/dist/pipeline/providers/serialize.d.ts.map +1 -0
- package/dist/pipeline/providers/serialize.js +99 -0
- package/dist/pipeline/providers/serialize.js.map +1 -0
- package/dist/pipeline/template.d.ts +18 -0
- package/dist/pipeline/template.d.ts.map +1 -0
- package/dist/pipeline/template.js +47 -0
- package/dist/pipeline/template.js.map +1 -0
- package/package.json +19 -17
package/dist/index.d.ts
CHANGED
|
@@ -12,11 +12,13 @@ export * from './agent-types/base-agent-type.js';
|
|
|
12
12
|
export * from './agent-types/loop-agent-response-type.js';
|
|
13
13
|
export * from './agent-types/loop-agent-prompt-params.js';
|
|
14
14
|
export * from './base-agent.js';
|
|
15
|
+
export * from './agent-run-watchdog.js';
|
|
15
16
|
export * from './agent-types/index.js';
|
|
16
17
|
export * from './AgentRunner.js';
|
|
17
18
|
export * from './PayloadManager.js';
|
|
18
19
|
export * from './ScratchpadManager.js';
|
|
19
20
|
export * from './ArtifactToolManager.js';
|
|
21
|
+
export * from './pipeline/index.js';
|
|
20
22
|
export * from './file-input-resolver.js';
|
|
21
23
|
export * from './artifact-tools/DataSnapshotToolLibrary.js';
|
|
22
24
|
export * from './artifact-tools/JSONToolLibrary.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,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,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,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAG3C,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,0BAA0B,EAC1B,mBAAmB,EACnB,0BAA0B,EAC1B,WAAW,GACZ,MAAM,6BAA6B,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,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,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,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAG3C,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,0BAA0B,EAC1B,mBAAmB,EACnB,0BAA0B,EAC1B,WAAW,GACZ,MAAM,6BAA6B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -12,11 +12,13 @@ export * from './agent-types/base-agent-type.js';
|
|
|
12
12
|
export * from './agent-types/loop-agent-response-type.js';
|
|
13
13
|
export * from './agent-types/loop-agent-prompt-params.js';
|
|
14
14
|
export * from './base-agent.js';
|
|
15
|
+
export * from './agent-run-watchdog.js';
|
|
15
16
|
export * from './agent-types/index.js';
|
|
16
17
|
export * from './AgentRunner.js';
|
|
17
18
|
export * from './PayloadManager.js';
|
|
18
19
|
export * from './ScratchpadManager.js';
|
|
19
20
|
export * from './ArtifactToolManager.js';
|
|
21
|
+
export * from './pipeline/index.js';
|
|
20
22
|
export * from './file-input-resolver.js';
|
|
21
23
|
export * from './artifact-tools/DataSnapshotToolLibrary.js';
|
|
22
24
|
export * from './artifact-tools/JSONToolLibrary.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,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,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,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAE3C,wDAAwD;AACxD,OAAO,EACL,eAAe,EAEf,0BAA0B,EAG1B,WAAW,GACZ,MAAM,6BAA6B,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,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,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,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAE3C,wDAAwD;AACxD,OAAO,EACL,eAAe,EAEf,0BAA0B,EAG1B,WAAW,GACZ,MAAM,6BAA6B,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Value↔text coercion at the pipeline edges. Within a pipeline values stay
|
|
3
|
+
* structured; we only stringify (a) for the final result returned to the LLM, (b) for a text
|
|
4
|
+
* interpolation, or (c) when an action param needs a string.
|
|
5
|
+
*
|
|
6
|
+
* @module @memberjunction/ai-agents
|
|
7
|
+
*/
|
|
8
|
+
import { PipeValue, PipelineStepRecord } from './pipeline.types.js';
|
|
9
|
+
/** Default max characters of the final value returned to the LLM before truncation. */
|
|
10
|
+
export declare const FINAL_OUTPUT_LIMIT = 8000;
|
|
11
|
+
/** Max characters of a per-step debug preview. */
|
|
12
|
+
export declare const PREVIEW_LIMIT = 500;
|
|
13
|
+
/** Max stages shown in a pipeline identity label before the middle is elided. */
|
|
14
|
+
export declare const MAX_LABEL_STAGES = 6;
|
|
15
|
+
/**
|
|
16
|
+
* Compact identity for a pipeline run — the stage chain, e.g. `get_rows → where → select`. Used to
|
|
17
|
+
* label the injected result message so multiple pipeline results across turns stay distinguishable
|
|
18
|
+
* after compaction (mirrors how artifact-tool results name their tool). Elides the middle when there
|
|
19
|
+
* are many stages so the label never bloats the context it's meant to economize.
|
|
20
|
+
*/
|
|
21
|
+
export declare function summarizePipelineStages(steps: PipelineStepRecord[]): string;
|
|
22
|
+
/** Compact text form: strings pass through raw; null/undefined → ''; everything else → compact JSON. */
|
|
23
|
+
export declare function valueToText(v: PipeValue): string;
|
|
24
|
+
/** Byte size of a value's serialized form (for logging / context-saved accounting). */
|
|
25
|
+
export declare function sizeOf(v: PipeValue): number;
|
|
26
|
+
/** Truncated debug preview of a value. */
|
|
27
|
+
export declare function previewOf(v: PipeValue): string;
|
|
28
|
+
/**
|
|
29
|
+
* Render the final value for the LLM: strings raw, everything else pretty JSON, truncated with an
|
|
30
|
+
* explicit note (never silently). A short type/shape tag prefixes structured values so the agent
|
|
31
|
+
* knows what it got without the full payload.
|
|
32
|
+
*/
|
|
33
|
+
export declare function formatFinalOutput(v: PipeValue, limit?: number): string;
|
|
34
|
+
/**
|
|
35
|
+
* When a stage filters a non-empty array down to empty, describe the input so the agent can
|
|
36
|
+
* self-correct a wrong field name / value casing instead of blindly retrying: lists each field
|
|
37
|
+
* with its distinct values present (capped). E.g. "matched 0 of 150 items. Values present:
|
|
38
|
+
* status=[Open, Pending, Closed]; priority=[Low, Medium, High, Critical]".
|
|
39
|
+
*/
|
|
40
|
+
export declare function describeEmptyMatch(input: PipeValue): string;
|
|
41
|
+
/** A one-line shape hint, e.g. `[array: 50 items]` or `[object: ID, Name, Status]`. */
|
|
42
|
+
export declare function shapeTag(v: PipeValue): string;
|
|
43
|
+
//# sourceMappingURL=coerce.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coerce.d.ts","sourceRoot":"","sources":["../../src/pipeline/coerce.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEjE,uFAAuF;AACvF,eAAO,MAAM,kBAAkB,OAAO,CAAC;AACvC,kDAAkD;AAClD,eAAO,MAAM,aAAa,MAAM,CAAC;AACjC,iFAAiF;AACjF,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,kBAAkB,EAAE,GAAG,MAAM,CAU3E;AAED,wGAAwG;AACxG,wBAAgB,WAAW,CAAC,CAAC,EAAE,SAAS,GAAG,MAAM,CAKhD;AAED,uFAAuF;AACvF,wBAAgB,MAAM,CAAC,CAAC,EAAE,SAAS,GAAG,MAAM,CAE3C;AAED,0CAA0C;AAC1C,wBAAgB,SAAS,CAAC,CAAC,EAAE,SAAS,GAAG,MAAM,CAG9C;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,GAAE,MAA2B,GAAG,MAAM,CAQ1F;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAuB3D;AAED,uFAAuF;AACvF,wBAAgB,QAAQ,CAAC,CAAC,EAAE,SAAS,GAAG,MAAM,CAU7C"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/** Default max characters of the final value returned to the LLM before truncation. */
|
|
2
|
+
export const FINAL_OUTPUT_LIMIT = 8000;
|
|
3
|
+
/** Max characters of a per-step debug preview. */
|
|
4
|
+
export const PREVIEW_LIMIT = 500;
|
|
5
|
+
/** Max stages shown in a pipeline identity label before the middle is elided. */
|
|
6
|
+
export const MAX_LABEL_STAGES = 6;
|
|
7
|
+
/**
|
|
8
|
+
* Compact identity for a pipeline run — the stage chain, e.g. `get_rows → where → select`. Used to
|
|
9
|
+
* label the injected result message so multiple pipeline results across turns stay distinguishable
|
|
10
|
+
* after compaction (mirrors how artifact-tool results name their tool). Elides the middle when there
|
|
11
|
+
* are many stages so the label never bloats the context it's meant to economize.
|
|
12
|
+
*/
|
|
13
|
+
export function summarizePipelineStages(steps) {
|
|
14
|
+
const names = steps.map((s) => s.toolName);
|
|
15
|
+
if (names.length === 0) {
|
|
16
|
+
return 'empty pipeline';
|
|
17
|
+
}
|
|
18
|
+
if (names.length <= MAX_LABEL_STAGES) {
|
|
19
|
+
return names.join(' → ');
|
|
20
|
+
}
|
|
21
|
+
const head = names.slice(0, MAX_LABEL_STAGES - 1).join(' → ');
|
|
22
|
+
return `${head} → …(${names.length - (MAX_LABEL_STAGES - 1)} more)`;
|
|
23
|
+
}
|
|
24
|
+
/** Compact text form: strings pass through raw; null/undefined → ''; everything else → compact JSON. */
|
|
25
|
+
export function valueToText(v) {
|
|
26
|
+
if (v == null) {
|
|
27
|
+
return '';
|
|
28
|
+
}
|
|
29
|
+
return typeof v === 'string' ? v : JSON.stringify(v);
|
|
30
|
+
}
|
|
31
|
+
/** Byte size of a value's serialized form (for logging / context-saved accounting). */
|
|
32
|
+
export function sizeOf(v) {
|
|
33
|
+
return Buffer.byteLength(valueToText(v), 'utf8');
|
|
34
|
+
}
|
|
35
|
+
/** Truncated debug preview of a value. */
|
|
36
|
+
export function previewOf(v) {
|
|
37
|
+
const text = valueToText(v);
|
|
38
|
+
return text.length <= PREVIEW_LIMIT ? text : `${text.slice(0, PREVIEW_LIMIT)}…`;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Render the final value for the LLM: strings raw, everything else pretty JSON, truncated with an
|
|
42
|
+
* explicit note (never silently). A short type/shape tag prefixes structured values so the agent
|
|
43
|
+
* knows what it got without the full payload.
|
|
44
|
+
*/
|
|
45
|
+
export function formatFinalOutput(v, limit = FINAL_OUTPUT_LIMIT) {
|
|
46
|
+
const body = typeof v === 'string' ? v : JSON.stringify(v, null, 2);
|
|
47
|
+
const tag = shapeTag(v);
|
|
48
|
+
const head = tag ? `${tag}\n` : '';
|
|
49
|
+
if (body.length <= limit) {
|
|
50
|
+
return head + body;
|
|
51
|
+
}
|
|
52
|
+
return `${head}${body.slice(0, limit)}\n…[truncated ${body.length - limit} chars — narrow the pipeline (select/first/count) to return less]`;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* When a stage filters a non-empty array down to empty, describe the input so the agent can
|
|
56
|
+
* self-correct a wrong field name / value casing instead of blindly retrying: lists each field
|
|
57
|
+
* with its distinct values present (capped). E.g. "matched 0 of 150 items. Values present:
|
|
58
|
+
* status=[Open, Pending, Closed]; priority=[Low, Medium, High, Critical]".
|
|
59
|
+
*/
|
|
60
|
+
export function describeEmptyMatch(input) {
|
|
61
|
+
if (!Array.isArray(input) || input.length === 0) {
|
|
62
|
+
return '';
|
|
63
|
+
}
|
|
64
|
+
const sample = input.find((x) => x !== null && typeof x === 'object' && !Array.isArray(x));
|
|
65
|
+
if (!sample) {
|
|
66
|
+
return `matched 0 of ${input.length} items.`;
|
|
67
|
+
}
|
|
68
|
+
const fields = Object.keys(sample).slice(0, 8);
|
|
69
|
+
const parts = fields.map((f) => {
|
|
70
|
+
const values = [
|
|
71
|
+
...new Set(input
|
|
72
|
+
.map((r) => r?.[f])
|
|
73
|
+
.filter((v) => v != null)
|
|
74
|
+
.map((v) => (typeof v === 'object' ? JSON.stringify(v) : String(v)))),
|
|
75
|
+
].slice(0, 6);
|
|
76
|
+
return `${f}=[${values.join(', ')}]`;
|
|
77
|
+
});
|
|
78
|
+
return `matched 0 of ${input.length} items. Field values present — ${parts.join('; ')}. Check your field names/values (case-sensitive) against these.`;
|
|
79
|
+
}
|
|
80
|
+
/** A one-line shape hint, e.g. `[array: 50 items]` or `[object: ID, Name, Status]`. */
|
|
81
|
+
export function shapeTag(v) {
|
|
82
|
+
if (Array.isArray(v)) {
|
|
83
|
+
const sample = v.find((x) => x !== null && typeof x === 'object' && !Array.isArray(x));
|
|
84
|
+
const keys = sample ? Object.keys(sample).slice(0, 8).join(', ') : '';
|
|
85
|
+
return `[array: ${v.length} item(s)${keys ? `, fields: ${keys}` : ''}]`;
|
|
86
|
+
}
|
|
87
|
+
if (v !== null && typeof v === 'object') {
|
|
88
|
+
return `[object: ${Object.keys(v).slice(0, 12).join(', ')}]`;
|
|
89
|
+
}
|
|
90
|
+
return '';
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=coerce.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coerce.js","sourceRoot":"","sources":["../../src/pipeline/coerce.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Public surface of Agent Pipelines — a server-side dataflow primitive over JSON
|
|
3
|
+
* values, so an agent can compose capabilities + operators without intermediate values entering
|
|
4
|
+
* the LLM context window.
|
|
5
|
+
*
|
|
6
|
+
* @module @memberjunction/ai-agents
|
|
7
|
+
*/
|
|
8
|
+
export * from './pipeline.types.js';
|
|
9
|
+
export * from './path.js';
|
|
10
|
+
export * from './predicate.js';
|
|
11
|
+
export * from './template.js';
|
|
12
|
+
export * from './coerce.js';
|
|
13
|
+
export * from './operators.js';
|
|
14
|
+
export * from './pipeline-registry.js';
|
|
15
|
+
export * from './pipeline-executor.js';
|
|
16
|
+
export * from './pipeline-docs.js';
|
|
17
|
+
export * from './providers/serialize.js';
|
|
18
|
+
export * from './providers/action-provider.js';
|
|
19
|
+
export * from './providers/artifact-tool-provider.js';
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pipeline/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,cAAc,kBAAkB,CAAC;AACjC,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oCAAoC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Public surface of Agent Pipelines — a server-side dataflow primitive over JSON
|
|
3
|
+
* values, so an agent can compose capabilities + operators without intermediate values entering
|
|
4
|
+
* the LLM context window.
|
|
5
|
+
*
|
|
6
|
+
* @module @memberjunction/ai-agents
|
|
7
|
+
*/
|
|
8
|
+
export * from './pipeline.types.js';
|
|
9
|
+
export * from './path.js';
|
|
10
|
+
export * from './predicate.js';
|
|
11
|
+
export * from './template.js';
|
|
12
|
+
export * from './coerce.js';
|
|
13
|
+
export * from './operators.js';
|
|
14
|
+
export * from './pipeline-registry.js';
|
|
15
|
+
export * from './pipeline-executor.js';
|
|
16
|
+
export * from './pipeline-docs.js';
|
|
17
|
+
export * from './providers/serialize.js';
|
|
18
|
+
export * from './providers/action-provider.js';
|
|
19
|
+
export * from './providers/artifact-tool-provider.js';
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pipeline/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,cAAc,kBAAkB,CAAC;AACjC,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oCAAoC,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Eval-free JSONPath subset evaluator.
|
|
3
|
+
*
|
|
4
|
+
* Deliberately constrained: supports root (`$`), member access (`.name` / `["name"]`),
|
|
5
|
+
* array index (`[0]`, negative indexes count from the end), wildcard (`[*]` / `.*`), and
|
|
6
|
+
* recursive descent (`..name`, `..*`). It does NOT support filter or script expressions
|
|
7
|
+
* (`[?(...)]`, `[(...)]`) — those require evaluating arbitrary expressions, and the path
|
|
8
|
+
* here originates from an LLM. Refusing eval is a security decision, not a shortcut.
|
|
9
|
+
*
|
|
10
|
+
* @module @memberjunction/ai-agents
|
|
11
|
+
*/
|
|
12
|
+
type Selector = {
|
|
13
|
+
kind: 'member';
|
|
14
|
+
name: string;
|
|
15
|
+
} | {
|
|
16
|
+
kind: 'index';
|
|
17
|
+
index: number;
|
|
18
|
+
} | {
|
|
19
|
+
kind: 'wildcard';
|
|
20
|
+
} | {
|
|
21
|
+
kind: 'recursive';
|
|
22
|
+
name: string | null;
|
|
23
|
+
};
|
|
24
|
+
/** Parse a JSONPath string into a flat list of selectors. Throws on unsupported syntax. */
|
|
25
|
+
export declare function parseJsonPath(path: string): Selector[];
|
|
26
|
+
/** Evaluate parsed selectors against a root value, returning all matched values. */
|
|
27
|
+
export declare function evaluateJsonPath(selectors: Selector[], root: unknown): unknown[];
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=jsonpath-eval.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonpath-eval.d.ts","sourceRoot":"","sources":["../../src/pipeline/jsonpath-eval.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,KAAK,QAAQ,GACP;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAEjD,2FAA2F;AAC3F,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,EAAE,CActD;AA+DD,oFAAoF;AACpF,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,EAAE,CAEhF"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Eval-free JSONPath subset evaluator.
|
|
3
|
+
*
|
|
4
|
+
* Deliberately constrained: supports root (`$`), member access (`.name` / `["name"]`),
|
|
5
|
+
* array index (`[0]`, negative indexes count from the end), wildcard (`[*]` / `.*`), and
|
|
6
|
+
* recursive descent (`..name`, `..*`). It does NOT support filter or script expressions
|
|
7
|
+
* (`[?(...)]`, `[(...)]`) — those require evaluating arbitrary expressions, and the path
|
|
8
|
+
* here originates from an LLM. Refusing eval is a security decision, not a shortcut.
|
|
9
|
+
*
|
|
10
|
+
* @module @memberjunction/ai-agents
|
|
11
|
+
*/
|
|
12
|
+
/** Parse a JSONPath string into a flat list of selectors. Throws on unsupported syntax. */
|
|
13
|
+
export function parseJsonPath(path) {
|
|
14
|
+
const trimmed = path.trim();
|
|
15
|
+
if (trimmed !== '$' && !trimmed.startsWith('$.') && !trimmed.startsWith('$[')) {
|
|
16
|
+
throw new Error(`JSONPath must start with "$" (got "${path}")`);
|
|
17
|
+
}
|
|
18
|
+
if (/\[\s*[?(]/.test(trimmed)) {
|
|
19
|
+
throw new Error('JSONPath filter/script expressions are not supported');
|
|
20
|
+
}
|
|
21
|
+
const selectors = [];
|
|
22
|
+
let i = 1; // skip leading `$`
|
|
23
|
+
while (i < trimmed.length) {
|
|
24
|
+
i = parseNextSelector(trimmed, i, selectors);
|
|
25
|
+
}
|
|
26
|
+
return selectors;
|
|
27
|
+
}
|
|
28
|
+
/** Parse one selector starting at `i`; push it onto `out`; return the next index. */
|
|
29
|
+
function parseNextSelector(s, i, out) {
|
|
30
|
+
if (s[i] === '.' && s[i + 1] === '.') {
|
|
31
|
+
return parseRecursive(s, i + 2, out);
|
|
32
|
+
}
|
|
33
|
+
if (s[i] === '.') {
|
|
34
|
+
return parseDotMember(s, i + 1, out);
|
|
35
|
+
}
|
|
36
|
+
if (s[i] === '[') {
|
|
37
|
+
return parseBracket(s, i + 1, out);
|
|
38
|
+
}
|
|
39
|
+
throw new Error(`Unexpected character "${s[i]}" at position ${i} in JSONPath`);
|
|
40
|
+
}
|
|
41
|
+
/** `.name` or `.*` */
|
|
42
|
+
function parseDotMember(s, i, out) {
|
|
43
|
+
if (s[i] === '*') {
|
|
44
|
+
out.push({ kind: 'wildcard' });
|
|
45
|
+
return i + 1;
|
|
46
|
+
}
|
|
47
|
+
const m = /^[^.[]+/.exec(s.slice(i));
|
|
48
|
+
if (!m) {
|
|
49
|
+
throw new Error(`Empty member name at position ${i} in JSONPath`);
|
|
50
|
+
}
|
|
51
|
+
out.push({ kind: 'member', name: m[0] });
|
|
52
|
+
return i + m[0].length;
|
|
53
|
+
}
|
|
54
|
+
/** `..name` or `..*` */
|
|
55
|
+
function parseRecursive(s, i, out) {
|
|
56
|
+
if (s[i] === '*') {
|
|
57
|
+
out.push({ kind: 'recursive', name: null });
|
|
58
|
+
return i + 1;
|
|
59
|
+
}
|
|
60
|
+
const m = /^[^.[]+/.exec(s.slice(i));
|
|
61
|
+
if (!m) {
|
|
62
|
+
throw new Error(`Empty member name after ".." at position ${i} in JSONPath`);
|
|
63
|
+
}
|
|
64
|
+
out.push({ kind: 'recursive', name: m[0] });
|
|
65
|
+
return i + m[0].length;
|
|
66
|
+
}
|
|
67
|
+
/** `[0]`, `[-1]`, `[*]`, `['name']`, `["name"]` */
|
|
68
|
+
function parseBracket(s, i, out) {
|
|
69
|
+
const close = s.indexOf(']', i);
|
|
70
|
+
if (close < 0) {
|
|
71
|
+
throw new Error('Unterminated "[" in JSONPath');
|
|
72
|
+
}
|
|
73
|
+
const inner = s.slice(i, close).trim();
|
|
74
|
+
if (inner === '*') {
|
|
75
|
+
out.push({ kind: 'wildcard' });
|
|
76
|
+
}
|
|
77
|
+
else if (/^-?\d+$/.test(inner)) {
|
|
78
|
+
out.push({ kind: 'index', index: parseInt(inner, 10) });
|
|
79
|
+
}
|
|
80
|
+
else if (/^'.*'$/.test(inner) || /^".*"$/.test(inner)) {
|
|
81
|
+
out.push({ kind: 'member', name: inner.slice(1, -1) });
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
throw new Error(`Unsupported bracket selector "[${inner}]" in JSONPath`);
|
|
85
|
+
}
|
|
86
|
+
return close + 1;
|
|
87
|
+
}
|
|
88
|
+
/** Evaluate parsed selectors against a root value, returning all matched values. */
|
|
89
|
+
export function evaluateJsonPath(selectors, root) {
|
|
90
|
+
return selectors.reduce((current, selector) => applySelector(selector, current), [root]);
|
|
91
|
+
}
|
|
92
|
+
/** Apply one selector across the current set of matched values. */
|
|
93
|
+
function applySelector(selector, values) {
|
|
94
|
+
switch (selector.kind) {
|
|
95
|
+
case 'member':
|
|
96
|
+
return values.flatMap((v) => memberValues(v, selector.name));
|
|
97
|
+
case 'index':
|
|
98
|
+
return values.flatMap((v) => indexValues(v, selector.index));
|
|
99
|
+
case 'wildcard':
|
|
100
|
+
return values.flatMap(childValues);
|
|
101
|
+
case 'recursive':
|
|
102
|
+
return values.flatMap((v) => recursiveValues(v, selector.name));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
function memberValues(v, name) {
|
|
106
|
+
return isRecord(v) && name in v ? [v[name]] : [];
|
|
107
|
+
}
|
|
108
|
+
function indexValues(v, index) {
|
|
109
|
+
if (!Array.isArray(v)) {
|
|
110
|
+
return [];
|
|
111
|
+
}
|
|
112
|
+
const idx = index < 0 ? v.length + index : index;
|
|
113
|
+
return idx >= 0 && idx < v.length ? [v[idx]] : [];
|
|
114
|
+
}
|
|
115
|
+
/** Immediate children of an array (elements) or object (values). */
|
|
116
|
+
function childValues(v) {
|
|
117
|
+
if (Array.isArray(v)) {
|
|
118
|
+
return v;
|
|
119
|
+
}
|
|
120
|
+
return isRecord(v) ? Object.values(v) : [];
|
|
121
|
+
}
|
|
122
|
+
/** Recursive descent: every descendant matching `name` (or every descendant when null). */
|
|
123
|
+
function recursiveValues(v, name) {
|
|
124
|
+
const out = [];
|
|
125
|
+
const visit = (node) => {
|
|
126
|
+
if (name === null) {
|
|
127
|
+
childValues(node).forEach((c) => {
|
|
128
|
+
out.push(c);
|
|
129
|
+
visit(c);
|
|
130
|
+
});
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
if (isRecord(node) && name in node) {
|
|
134
|
+
out.push(node[name]);
|
|
135
|
+
}
|
|
136
|
+
childValues(node).forEach(visit);
|
|
137
|
+
};
|
|
138
|
+
visit(v);
|
|
139
|
+
return out;
|
|
140
|
+
}
|
|
141
|
+
function isRecord(v) {
|
|
142
|
+
return typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=jsonpath-eval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonpath-eval.js","sourceRoot":"","sources":["../../src/pipeline/jsonpath-eval.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview The operator catalog — pure, object-aware value→value functions (PowerShell-style
|
|
3
|
+
* cmdlets). Registered by verb; the executor applies them directly (no async/effects). Object ops
|
|
4
|
+
* operate on arrays/objects; text ops coerce to text for genuinely-textual values.
|
|
5
|
+
*
|
|
6
|
+
* @module @memberjunction/ai-agents
|
|
7
|
+
*/
|
|
8
|
+
import { PipelineOperator } from './pipeline.types.js';
|
|
9
|
+
/** All operators, in catalog order (for docs). */
|
|
10
|
+
export declare function GetAllOperators(): readonly PipelineOperator[];
|
|
11
|
+
/** Resolve an operator by verb name (exact, lowercase verbs). */
|
|
12
|
+
export declare function GetOperator(name: string): PipelineOperator | undefined;
|
|
13
|
+
/** Reserved verbs that are NOT operators (control constructs + capability stages). */
|
|
14
|
+
export declare const CONTROL_VERBS: ReadonlySet<string>;
|
|
15
|
+
//# sourceMappingURL=operators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operators.d.ts","sourceRoot":"","sources":["../../src/pipeline/operators.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAa,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AA4V/D,kDAAkD;AAClD,wBAAgB,eAAe,IAAI,SAAS,gBAAgB,EAAE,CAE7D;AAED,iEAAiE;AACjE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAEtE;AAED,sFAAsF;AACtF,eAAO,MAAM,aAAa,EAAE,WAAW,CAAC,MAAM,CAAmC,CAAC"}
|