@slashfi/agents-sdk 0.22.0 → 0.23.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.
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Agent Callback — Deferred call_agent execution with triggers.
3
+ *
4
+ * An agent_callback is a call_agent command with an optional trigger.
5
+ * When the trigger fires (e.g., user submits a form), template references
6
+ * like {{trigger.variable_name}} are resolved with the trigger's values
7
+ * and the call_agent command is executed.
8
+ *
9
+ * This module provides the unopinionated contract:
10
+ * - Trigger schema (extensible discriminated union)
11
+ * - Template resolution
12
+ * - Store interface
13
+ * - Validation utilities
14
+ *
15
+ * No platform-specific code (no Slack, no CockroachDB, no Atlas).
16
+ */
17
+ /**
18
+ * Base trigger type. Implementations extend this with specific trigger sources
19
+ * (e.g., slack_block_kit, webhook, timer).
20
+ *
21
+ * The `type` field discriminates between trigger sources.
22
+ * Additional fields are trigger-specific.
23
+ */
24
+ export interface AgentCallbackTrigger {
25
+ type: string;
26
+ [key: string]: unknown;
27
+ }
28
+ export type AgentCallbackStatus = 'pending' | 'completed' | 'expired' | 'cancelled';
29
+ /**
30
+ * A stored agent_callback — a call_agent command waiting for its trigger to fire.
31
+ */
32
+ export interface AgentCallbackEntry<TMetadata = Record<string, unknown>> {
33
+ id: string;
34
+ status: AgentCallbackStatus;
35
+ /** The call_agent command. Params may contain {{trigger.x}} templates. */
36
+ callback: Record<string, unknown>;
37
+ /** Trigger definition — how values are collected. */
38
+ trigger?: AgentCallbackTrigger;
39
+ /** Implementation-specific context (e.g., creator branch, user ID). */
40
+ metadata?: TMetadata;
41
+ /** Resolved values from the trigger, keyed by variable name. */
42
+ resolvedValues?: Record<string, string>;
43
+ /** Callback expires after this time. */
44
+ expiresAt?: Date;
45
+ createdAt: Date;
46
+ completedAt?: Date;
47
+ }
48
+ export interface CreateAgentCallbackOptions<TMetadata = Record<string, unknown>> {
49
+ /** The call_agent command. May contain {{trigger.x}} template references in params. */
50
+ callback: Record<string, unknown>;
51
+ /** Trigger definition. */
52
+ trigger?: AgentCallbackTrigger;
53
+ /** Implementation-specific context. */
54
+ metadata?: TMetadata;
55
+ /** TTL in milliseconds (default: implementation-defined). */
56
+ ttlMs?: number;
57
+ }
58
+ export interface ResolveAgentCallbackOptions {
59
+ /** The callback ID to resolve. */
60
+ id: string;
61
+ /** Values from the trigger source, keyed by variable name. */
62
+ values: Record<string, string>;
63
+ }
64
+ /**
65
+ * Agent Callback Store — persistence layer for deferred call_agent commands.
66
+ * Implementations can use any backing store (CockroachDB, SQLite, in-memory, etc.).
67
+ */
68
+ export interface AgentCallbackStore<TMetadata = Record<string, unknown>> {
69
+ create(options: CreateAgentCallbackOptions<TMetadata>): Promise<string>;
70
+ get(id: string): Promise<AgentCallbackEntry<TMetadata> | null>;
71
+ resolve(options: ResolveAgentCallbackOptions): Promise<AgentCallbackEntry<TMetadata>>;
72
+ cancel(id: string): Promise<boolean>;
73
+ listPending(limit?: number): Promise<AgentCallbackEntry<TMetadata>[]>;
74
+ expireStale(): Promise<number>;
75
+ }
76
+ /**
77
+ * Resolve {{trigger.variable}} references in an object tree.
78
+ * Scans all string values and replaces {{trigger.x}} with the
79
+ * corresponding value from triggerValues.
80
+ *
81
+ * Unresolved references are left as-is.
82
+ */
83
+ export declare function resolveCallbackTemplates<T>(obj: T, triggerValues: Record<string, string>): T;
84
+ /**
85
+ * Validate that all {{trigger.x}} references in a callback have
86
+ * corresponding variables in the provided set.
87
+ * Returns array of unresolved variable names, or empty if valid.
88
+ */
89
+ export declare function validateCallbackTemplates(callback: Record<string, unknown>, knownVariables: string[]): string[];
90
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/callback/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAMD,MAAM,MAAM,mBAAmB,GAC3B,SAAS,GACT,WAAW,GACX,SAAS,GACT,WAAW,CAAC;AAMhB;;GAEG;AACH,MAAM,WAAW,kBAAkB,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACrE,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,mBAAmB,CAAC;IAC5B,0EAA0E;IAC1E,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,qDAAqD;IACrD,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B,uEAAuE;IACvE,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,gEAAgE;IAChE,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,wCAAwC;IACxC,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,SAAS,EAAE,IAAI,CAAC;IAChB,WAAW,CAAC,EAAE,IAAI,CAAC;CACpB;AAMD,MAAM,WAAW,0BAA0B,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC7E,uFAAuF;IACvF,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,0BAA0B;IAC1B,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B,uCAAuC;IACvC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD,MAAM,WAAW,2BAA2B;IAC1C,kCAAkC;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,8DAA8D;IAC9D,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAMD;;;GAGG;AACH,MAAM,WAAW,kBAAkB,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACrE,MAAM,CAAC,OAAO,EAAE,0BAA0B,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxE,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;IAC/D,OAAO,CAAC,OAAO,EAAE,2BAA2B,GAAG,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC;IACtF,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACrC,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACtE,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CAChC;AAMD;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,EACxC,GAAG,EAAE,CAAC,EACN,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACpC,CAAC,CAiBH;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,cAAc,EAAE,MAAM,EAAE,GACvB,MAAM,EAAE,CAoBV"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Agent Callback — Deferred call_agent execution with triggers.
3
+ *
4
+ * An agent_callback is a call_agent command with an optional trigger.
5
+ * When the trigger fires (e.g., user submits a form), template references
6
+ * like {{trigger.variable_name}} are resolved with the trigger's values
7
+ * and the call_agent command is executed.
8
+ *
9
+ * This module provides the unopinionated contract:
10
+ * - Trigger schema (extensible discriminated union)
11
+ * - Template resolution
12
+ * - Store interface
13
+ * - Validation utilities
14
+ *
15
+ * No platform-specific code (no Slack, no CockroachDB, no Atlas).
16
+ */
17
+ // ---------------------------------------------------------------------------
18
+ // Template Resolution
19
+ // ---------------------------------------------------------------------------
20
+ /**
21
+ * Resolve {{trigger.variable}} references in an object tree.
22
+ * Scans all string values and replaces {{trigger.x}} with the
23
+ * corresponding value from triggerValues.
24
+ *
25
+ * Unresolved references are left as-is.
26
+ */
27
+ export function resolveCallbackTemplates(obj, triggerValues) {
28
+ if (typeof obj === 'string') {
29
+ return obj.replace(/\{\{trigger\.(\w+)\}\}/g, (_match, varName) => {
30
+ return triggerValues[varName] ?? `{{trigger.${varName}}}`;
31
+ });
32
+ }
33
+ if (Array.isArray(obj)) {
34
+ return obj.map((item) => resolveCallbackTemplates(item, triggerValues));
35
+ }
36
+ if (obj !== null && typeof obj === 'object') {
37
+ const result = {};
38
+ for (const [key, val] of Object.entries(obj)) {
39
+ result[key] = resolveCallbackTemplates(val, triggerValues);
40
+ }
41
+ return result;
42
+ }
43
+ return obj;
44
+ }
45
+ /**
46
+ * Validate that all {{trigger.x}} references in a callback have
47
+ * corresponding variables in the provided set.
48
+ * Returns array of unresolved variable names, or empty if valid.
49
+ */
50
+ export function validateCallbackTemplates(callback, knownVariables) {
51
+ const definedVars = new Set(knownVariables);
52
+ const referencedVars = [];
53
+ const scanForRefs = (obj) => {
54
+ if (typeof obj === 'string') {
55
+ const matches = obj.matchAll(/\{\{trigger\.(\w+)\}\}/g);
56
+ for (const match of matches) {
57
+ referencedVars.push(match[1]);
58
+ }
59
+ }
60
+ else if (Array.isArray(obj)) {
61
+ obj.forEach(scanForRefs);
62
+ }
63
+ else if (obj !== null && typeof obj === 'object') {
64
+ Object.values(obj).forEach(scanForRefs);
65
+ }
66
+ };
67
+ scanForRefs(callback);
68
+ return referencedVars.filter((v) => !definedVars.has(v));
69
+ }
70
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/callback/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AA+FH,8EAA8E;AAC9E,sBAAsB;AACtB,8EAA8E;AAE9E;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CACtC,GAAM,EACN,aAAqC;IAErC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAC,OAAO,CAAC,yBAAyB,EAAE,CAAC,MAAM,EAAE,OAAe,EAAE,EAAE;YACxE,OAAO,aAAa,CAAC,OAAO,CAAC,IAAI,aAAa,OAAO,IAAI,CAAC;QAC5D,CAAC,CAAM,CAAC;IACV,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,wBAAwB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAM,CAAC;IAC/E,CAAC;IACD,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5C,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAA8B,CAAC,EAAE,CAAC;YACxE,MAAM,CAAC,GAAG,CAAC,GAAG,wBAAwB,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,MAAW,CAAC;IACrB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CACvC,QAAiC,EACjC,cAAwB;IAExB,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC;IAC5C,MAAM,cAAc,GAAa,EAAE,CAAC;IAEpC,MAAM,WAAW,GAAG,CAAC,GAAY,EAAQ,EAAE;QACzC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;YACxD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC3B,CAAC;aAAM,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,GAA8B,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACrE,CAAC;IACH,CAAC,CAAC;IAEF,WAAW,CAAC,QAAQ,CAAC,CAAC;IAEtB,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3D,CAAC"}
package/dist/index.d.ts CHANGED
@@ -94,4 +94,6 @@ export { pack, publish } from "./pack.js";
94
94
  export type { PackOptions, PackResult, PublishOptions, VersionMeta, VersionChanges, } from "./pack.js";
95
95
  export { introspectMcp } from "./introspect.js";
96
96
  export type { IntrospectOptions } from "./introspect.js";
97
+ export { resolveCallbackTemplates, validateCallbackTemplates, } from "./callback/index.js";
98
+ export type { AgentCallbackTrigger, AgentCallbackStatus, AgentCallbackEntry, AgentCallbackStore, CreateAgentCallbackOptions, ResolveAgentCallbackOptions, } from "./callback/index.js";
97
99
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -103,4 +103,8 @@ export { pack, publish } from "./pack.js";
103
103
  // Introspect
104
104
  // ============================================
105
105
  export { introspectMcp } from "./introspect.js";
106
+ // ============================================
107
+ // Agent Callbacks (deferred call_agent commands)
108
+ // ============================================
109
+ export { resolveCallbackTemplates, validateCallbackTemplates, } from "./callback/index.js";
106
110
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAiDH,mBAAmB;AACnB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGtD,WAAW;AACX,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAOpD,SAAS;AACT,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAc7C,SAAS;AACT,OAAO,EACL,iBAAiB,EACjB,UAAU,EACV,WAAW,EACX,WAAW,GACZ,MAAM,aAAa,CAAC;AASrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGpD,oBAAoB;AACpB,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,wBAAwB,CAAC;AAMhC,OAAO;AACP,OAAO,EACL,eAAe,EACf,qBAAqB,GACtB,MAAM,6BAA6B,CAAC;AASrC,QAAQ;AACR,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGzC,UAAU;AACV,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,WAAW,EACX,mBAAmB,GACpB,MAAM,gCAAgC,CAAC;AAOxC,SAAS;AACT,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE3D,MAAM;AACN,OAAO,EACL,OAAO,EACP,SAAS,EACT,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,GACV,MAAM,UAAU,CAAC;AAQlB,wBAAwB;AAExB,eAAe;AACf,OAAO,EACL,uBAAuB,EACvB,8BAA8B,EAC9B,oBAAoB,EACpB,kBAAkB,EAClB,yBAAyB,EACzB,2BAA2B,GAC5B,MAAM,qCAAqC,CAAC;AAiB7C,kBAAkB;AAClB,OAAO,EAAE,yBAAyB,EAAE,MAAM,wCAAwC,CAAC;AAEnF,QAAQ;AACR,OAAO,EACL,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,8BAA8B,CAAC;AAOtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAE3C,OAAO,EACL,gBAAgB,GAMjB,MAAM,kBAAkB,CAAC;AAE1B,oBAAoB;AACpB,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAY5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAShE,UAAU;AACV,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAWjE,+CAA+C;AAC/C,+BAA+B;AAC/B,+CAA+C;AAE/C,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAMhE,+CAA+C;AAC/C,eAAe;AACf,+CAA+C;AAE/C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAM3C,+CAA+C;AAC/C,eAAe;AACf,+CAA+C;AAE/C,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEvD,+CAA+C;AAC/C,iBAAiB;AACjB,+CAA+C;AAE/C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAS1C,+CAA+C;AAC/C,aAAa;AACb,+CAA+C;AAE/C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAiDH,mBAAmB;AACnB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGtD,WAAW;AACX,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAOpD,SAAS;AACT,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAc7C,SAAS;AACT,OAAO,EACL,iBAAiB,EACjB,UAAU,EACV,WAAW,EACX,WAAW,GACZ,MAAM,aAAa,CAAC;AASrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGpD,oBAAoB;AACpB,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,wBAAwB,CAAC;AAMhC,OAAO;AACP,OAAO,EACL,eAAe,EACf,qBAAqB,GACtB,MAAM,6BAA6B,CAAC;AASrC,QAAQ;AACR,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGzC,UAAU;AACV,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,WAAW,EACX,mBAAmB,GACpB,MAAM,gCAAgC,CAAC;AAOxC,SAAS;AACT,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE3D,MAAM;AACN,OAAO,EACL,OAAO,EACP,SAAS,EACT,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,GACV,MAAM,UAAU,CAAC;AAQlB,wBAAwB;AAExB,eAAe;AACf,OAAO,EACL,uBAAuB,EACvB,8BAA8B,EAC9B,oBAAoB,EACpB,kBAAkB,EAClB,yBAAyB,EACzB,2BAA2B,GAC5B,MAAM,qCAAqC,CAAC;AAiB7C,kBAAkB;AAClB,OAAO,EAAE,yBAAyB,EAAE,MAAM,wCAAwC,CAAC;AAEnF,QAAQ;AACR,OAAO,EACL,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,8BAA8B,CAAC;AAOtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAE3C,OAAO,EACL,gBAAgB,GAMjB,MAAM,kBAAkB,CAAC;AAE1B,oBAAoB;AACpB,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAY5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAShE,UAAU;AACV,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAWjE,+CAA+C;AAC/C,+BAA+B;AAC/B,+CAA+C;AAE/C,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAMhE,+CAA+C;AAC/C,eAAe;AACf,+CAA+C;AAE/C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAM3C,+CAA+C;AAC/C,eAAe;AACf,+CAA+C;AAE/C,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEvD,+CAA+C;AAC/C,iBAAiB;AACjB,+CAA+C;AAE/C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAS1C,+CAA+C;AAC/C,aAAa;AACb,+CAA+C;AAE/C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,+CAA+C;AAC/C,iDAAiD;AACjD,+CAA+C;AAE/C,OAAO,EACL,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@slashfi/agents-sdk",
3
- "version": "0.22.0",
3
+ "version": "0.23.0",
4
4
  "author": "Slash Financial",
5
5
  "repository": {
6
6
  "type": "git",
package/src/adk.ts CHANGED
File without changes
@@ -0,0 +1,172 @@
1
+ /**
2
+ * Agent Callback — Deferred call_agent execution with triggers.
3
+ *
4
+ * An agent_callback is a call_agent command with an optional trigger.
5
+ * When the trigger fires (e.g., user submits a form), template references
6
+ * like {{trigger.variable_name}} are resolved with the trigger's values
7
+ * and the call_agent command is executed.
8
+ *
9
+ * This module provides the unopinionated contract:
10
+ * - Trigger schema (extensible discriminated union)
11
+ * - Template resolution
12
+ * - Store interface
13
+ * - Validation utilities
14
+ *
15
+ * No platform-specific code (no Slack, no CockroachDB, no Atlas).
16
+ */
17
+
18
+ // ---------------------------------------------------------------------------
19
+ // Trigger Schema
20
+ // ---------------------------------------------------------------------------
21
+
22
+ /**
23
+ * Base trigger type. Implementations extend this with specific trigger sources
24
+ * (e.g., slack_block_kit, webhook, timer).
25
+ *
26
+ * The `type` field discriminates between trigger sources.
27
+ * Additional fields are trigger-specific.
28
+ */
29
+ export interface AgentCallbackTrigger {
30
+ type: string;
31
+ [key: string]: unknown;
32
+ }
33
+
34
+ // ---------------------------------------------------------------------------
35
+ // Callback Status
36
+ // ---------------------------------------------------------------------------
37
+
38
+ export type AgentCallbackStatus =
39
+ | 'pending'
40
+ | 'completed'
41
+ | 'expired'
42
+ | 'cancelled';
43
+
44
+ // ---------------------------------------------------------------------------
45
+ // Callback Entry
46
+ // ---------------------------------------------------------------------------
47
+
48
+ /**
49
+ * A stored agent_callback — a call_agent command waiting for its trigger to fire.
50
+ */
51
+ export interface AgentCallbackEntry<TMetadata = Record<string, unknown>> {
52
+ id: string;
53
+ status: AgentCallbackStatus;
54
+ /** The call_agent command. Params may contain {{trigger.x}} templates. */
55
+ callback: Record<string, unknown>;
56
+ /** Trigger definition — how values are collected. */
57
+ trigger?: AgentCallbackTrigger;
58
+ /** Implementation-specific context (e.g., creator branch, user ID). */
59
+ metadata?: TMetadata;
60
+ /** Resolved values from the trigger, keyed by variable name. */
61
+ resolvedValues?: Record<string, string>;
62
+ /** Callback expires after this time. */
63
+ expiresAt?: Date;
64
+ createdAt: Date;
65
+ completedAt?: Date;
66
+ }
67
+
68
+ // ---------------------------------------------------------------------------
69
+ // Create Options
70
+ // ---------------------------------------------------------------------------
71
+
72
+ export interface CreateAgentCallbackOptions<TMetadata = Record<string, unknown>> {
73
+ /** The call_agent command. May contain {{trigger.x}} template references in params. */
74
+ callback: Record<string, unknown>;
75
+ /** Trigger definition. */
76
+ trigger?: AgentCallbackTrigger;
77
+ /** Implementation-specific context. */
78
+ metadata?: TMetadata;
79
+ /** TTL in milliseconds (default: implementation-defined). */
80
+ ttlMs?: number;
81
+ }
82
+
83
+ // ---------------------------------------------------------------------------
84
+ // Resolve Options
85
+ // ---------------------------------------------------------------------------
86
+
87
+ export interface ResolveAgentCallbackOptions {
88
+ /** The callback ID to resolve. */
89
+ id: string;
90
+ /** Values from the trigger source, keyed by variable name. */
91
+ values: Record<string, string>;
92
+ }
93
+
94
+ // ---------------------------------------------------------------------------
95
+ // Store Interface
96
+ // ---------------------------------------------------------------------------
97
+
98
+ /**
99
+ * Agent Callback Store — persistence layer for deferred call_agent commands.
100
+ * Implementations can use any backing store (CockroachDB, SQLite, in-memory, etc.).
101
+ */
102
+ export interface AgentCallbackStore<TMetadata = Record<string, unknown>> {
103
+ create(options: CreateAgentCallbackOptions<TMetadata>): Promise<string>;
104
+ get(id: string): Promise<AgentCallbackEntry<TMetadata> | null>;
105
+ resolve(options: ResolveAgentCallbackOptions): Promise<AgentCallbackEntry<TMetadata>>;
106
+ cancel(id: string): Promise<boolean>;
107
+ listPending(limit?: number): Promise<AgentCallbackEntry<TMetadata>[]>;
108
+ expireStale(): Promise<number>;
109
+ }
110
+
111
+ // ---------------------------------------------------------------------------
112
+ // Template Resolution
113
+ // ---------------------------------------------------------------------------
114
+
115
+ /**
116
+ * Resolve {{trigger.variable}} references in an object tree.
117
+ * Scans all string values and replaces {{trigger.x}} with the
118
+ * corresponding value from triggerValues.
119
+ *
120
+ * Unresolved references are left as-is.
121
+ */
122
+ export function resolveCallbackTemplates<T>(
123
+ obj: T,
124
+ triggerValues: Record<string, string>,
125
+ ): T {
126
+ if (typeof obj === 'string') {
127
+ return obj.replace(/\{\{trigger\.(\w+)\}\}/g, (_match, varName: string) => {
128
+ return triggerValues[varName] ?? `{{trigger.${varName}}}`;
129
+ }) as T;
130
+ }
131
+ if (Array.isArray(obj)) {
132
+ return obj.map((item) => resolveCallbackTemplates(item, triggerValues)) as T;
133
+ }
134
+ if (obj !== null && typeof obj === 'object') {
135
+ const result: Record<string, unknown> = {};
136
+ for (const [key, val] of Object.entries(obj as Record<string, unknown>)) {
137
+ result[key] = resolveCallbackTemplates(val, triggerValues);
138
+ }
139
+ return result as T;
140
+ }
141
+ return obj;
142
+ }
143
+
144
+ /**
145
+ * Validate that all {{trigger.x}} references in a callback have
146
+ * corresponding variables in the provided set.
147
+ * Returns array of unresolved variable names, or empty if valid.
148
+ */
149
+ export function validateCallbackTemplates(
150
+ callback: Record<string, unknown>,
151
+ knownVariables: string[],
152
+ ): string[] {
153
+ const definedVars = new Set(knownVariables);
154
+ const referencedVars: string[] = [];
155
+
156
+ const scanForRefs = (obj: unknown): void => {
157
+ if (typeof obj === 'string') {
158
+ const matches = obj.matchAll(/\{\{trigger\.(\w+)\}\}/g);
159
+ for (const match of matches) {
160
+ referencedVars.push(match[1]);
161
+ }
162
+ } else if (Array.isArray(obj)) {
163
+ obj.forEach(scanForRefs);
164
+ } else if (obj !== null && typeof obj === 'object') {
165
+ Object.values(obj as Record<string, unknown>).forEach(scanForRefs);
166
+ }
167
+ };
168
+
169
+ scanForRefs(callback);
170
+
171
+ return referencedVars.filter((v) => !definedVars.has(v));
172
+ }
package/src/index.ts CHANGED
@@ -340,3 +340,20 @@ export type {
340
340
 
341
341
  export { introspectMcp } from "./introspect.js";
342
342
  export type { IntrospectOptions } from "./introspect.js";
343
+
344
+ // ============================================
345
+ // Agent Callbacks (deferred call_agent commands)
346
+ // ============================================
347
+
348
+ export {
349
+ resolveCallbackTemplates,
350
+ validateCallbackTemplates,
351
+ } from "./callback/index.js";
352
+ export type {
353
+ AgentCallbackTrigger,
354
+ AgentCallbackStatus,
355
+ AgentCallbackEntry,
356
+ AgentCallbackStore,
357
+ CreateAgentCallbackOptions,
358
+ ResolveAgentCallbackOptions,
359
+ } from "./callback/index.js";