@bowenqt/qiniu-ai-sdk 0.13.0 → 0.15.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.
Files changed (67) hide show
  1. package/dist/ai/agent-graph.d.ts +5 -0
  2. package/dist/ai/agent-graph.d.ts.map +1 -1
  3. package/dist/ai/agent-graph.js +3 -1
  4. package/dist/ai/agent-graph.js.map +1 -1
  5. package/dist/ai/agent-graph.mjs +3 -1
  6. package/dist/ai/create-agent.d.ts +98 -0
  7. package/dist/ai/create-agent.d.ts.map +1 -0
  8. package/dist/ai/create-agent.js +87 -0
  9. package/dist/ai/create-agent.js.map +1 -0
  10. package/dist/ai/create-agent.mjs +84 -0
  11. package/dist/ai/generate-object.d.ts +99 -0
  12. package/dist/ai/generate-object.d.ts.map +1 -0
  13. package/dist/ai/generate-object.js +231 -0
  14. package/dist/ai/generate-object.js.map +1 -0
  15. package/dist/ai/generate-object.mjs +195 -0
  16. package/dist/ai/generate-text.d.ts +16 -0
  17. package/dist/ai/generate-text.d.ts.map +1 -1
  18. package/dist/ai/generate-text.js +53 -6
  19. package/dist/ai/generate-text.js.map +1 -1
  20. package/dist/ai/generate-text.mjs +53 -6
  21. package/dist/ai/graph/checkpointer.d.ts +72 -2
  22. package/dist/ai/graph/checkpointer.d.ts.map +1 -1
  23. package/dist/ai/graph/checkpointer.js +99 -1
  24. package/dist/ai/graph/checkpointer.js.map +1 -1
  25. package/dist/ai/graph/checkpointer.mjs +96 -1
  26. package/dist/ai/graph/index.d.ts +2 -2
  27. package/dist/ai/graph/index.d.ts.map +1 -1
  28. package/dist/ai/graph/index.js +5 -1
  29. package/dist/ai/graph/index.js.map +1 -1
  30. package/dist/ai/graph/index.mjs +3 -1
  31. package/dist/ai/graph/postgres-checkpointer.d.ts +1 -1
  32. package/dist/ai/graph/postgres-checkpointer.d.ts.map +1 -1
  33. package/dist/ai/graph/postgres-checkpointer.js +13 -3
  34. package/dist/ai/graph/postgres-checkpointer.js.map +1 -1
  35. package/dist/ai/graph/postgres-checkpointer.mjs +13 -3
  36. package/dist/ai/graph/redis-checkpointer.d.ts +1 -1
  37. package/dist/ai/graph/redis-checkpointer.d.ts.map +1 -1
  38. package/dist/ai/graph/redis-checkpointer.js +6 -2
  39. package/dist/ai/graph/redis-checkpointer.js.map +1 -1
  40. package/dist/ai/graph/redis-checkpointer.mjs +6 -2
  41. package/dist/ai/internal-types.d.ts +3 -0
  42. package/dist/ai/internal-types.d.ts.map +1 -1
  43. package/dist/ai/internal-types.js.map +1 -1
  44. package/dist/ai/nodes/execute-node.d.ts +2 -1
  45. package/dist/ai/nodes/execute-node.d.ts.map +1 -1
  46. package/dist/ai/nodes/execute-node.js +11 -33
  47. package/dist/ai/nodes/execute-node.js.map +1 -1
  48. package/dist/ai/nodes/execute-node.mjs +11 -33
  49. package/dist/ai/tool-approval.d.ts +90 -0
  50. package/dist/ai/tool-approval.d.ts.map +1 -0
  51. package/dist/ai/tool-approval.js +151 -0
  52. package/dist/ai/tool-approval.js.map +1 -0
  53. package/dist/ai/tool-approval.mjs +147 -0
  54. package/dist/index.d.ts +9 -3
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +14 -3
  57. package/dist/index.js.map +1 -1
  58. package/dist/index.mjs +9 -3
  59. package/dist/lib/errors.d.ts +15 -0
  60. package/dist/lib/errors.d.ts.map +1 -1
  61. package/dist/lib/errors.js +13 -1
  62. package/dist/lib/errors.js.map +1 -1
  63. package/dist/lib/errors.mjs +11 -0
  64. package/dist/lib/tool-registry.d.ts +21 -0
  65. package/dist/lib/tool-registry.d.ts.map +1 -1
  66. package/dist/lib/tool-registry.js.map +1 -1
  67. package/package.json +1 -1
@@ -52,19 +52,29 @@ export class PostgresCheckpointer {
52
52
  ON ${this.table} (created_at DESC)
53
53
  `);
54
54
  }
55
- async save(threadId, state, custom) {
55
+ async save(threadId, state, options) {
56
56
  const id = `ckpt_${threadId}_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
57
57
  const createdAt = Date.now();
58
+ // Extract options (compatible with both old and new API)
59
+ const opts = options;
58
60
  const metadata = {
59
61
  id,
60
62
  threadId,
61
63
  createdAt,
62
64
  stepCount: state.stepCount,
63
- custom,
65
+ status: opts?.status ?? 'active',
66
+ pendingApproval: opts?.pendingApproval,
67
+ custom: opts?.custom ?? (opts && !('status' in opts) ? opts : undefined),
64
68
  };
65
69
  const serializedState = this.serializeState(state);
70
+ // Store status and pendingApproval in custom field for Postgres (schema migration needed for full support)
71
+ const fullCustom = {
72
+ ...metadata.custom,
73
+ ...(metadata.status !== 'active' ? { __status: metadata.status } : {}),
74
+ ...(metadata.pendingApproval ? { __pendingApproval: metadata.pendingApproval } : {}),
75
+ };
66
76
  await this.client.query(`INSERT INTO ${this.table} (id, thread_id, created_at, step_count, custom, state)
67
- VALUES ($1, $2, $3, $4, $5, $6)`, [id, threadId, createdAt, state.stepCount, JSON.stringify(custom ?? {}), JSON.stringify(serializedState)]);
77
+ VALUES ($1, $2, $3, $4, $5, $6)`, [id, threadId, createdAt, state.stepCount, JSON.stringify(fullCustom), JSON.stringify(serializedState)]);
68
78
  return metadata;
69
79
  }
70
80
  async load(threadId) {
@@ -41,7 +41,7 @@ export declare class RedisCheckpointer implements Checkpointer {
41
41
  constructor(client: RedisClient, config?: RedisCheckpointerConfig);
42
42
  private checkpointKey;
43
43
  private threadKey;
44
- save(threadId: string, state: AgentState, custom?: Record<string, unknown>): Promise<CheckpointMetadata>;
44
+ save(threadId: string, state: AgentState, options?: Record<string, unknown>): Promise<CheckpointMetadata>;
45
45
  load(threadId: string): Promise<Checkpoint | null>;
46
46
  list(threadId: string): Promise<CheckpointMetadata[]>;
47
47
  delete(checkpointId: string): Promise<boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"redis-checkpointer.d.ts","sourceRoot":"","sources":["../../../src/ai/graph/redis-checkpointer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,YAAY,EAAwB,MAAM,gBAAgB,CAAC;AAEzG,uDAAuD;AACvD,MAAM,WAAW,WAAW;IACxB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IACtF,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACzC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACzD,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5D;AAED,uCAAuC;AACvC,MAAM,WAAW,uBAAuB;IACpC,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,qBAAa,iBAAkB,YAAW,YAAY;IAClD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAS;gBAEzB,MAAM,EAAE,WAAW,EAAE,MAAM,GAAE,uBAA4B;IAMrE,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,SAAS;IAIX,IAAI,CACN,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,UAAU,EACjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,kBAAkB,CAAC;IA+BxB,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAmBlD,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAerD,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAW9C,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAW9C,OAAO,CAAC,cAAc;CAkBzB"}
1
+ {"version":3,"file":"redis-checkpointer.d.ts","sourceRoot":"","sources":["../../../src/ai/graph/redis-checkpointer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,YAAY,EAAwB,MAAM,gBAAgB,CAAC;AAEzG,uDAAuD;AACvD,MAAM,WAAW,WAAW;IACxB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IACtF,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACzC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACzD,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5D;AAED,uCAAuC;AACvC,MAAM,WAAW,uBAAuB;IACpC,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,qBAAa,iBAAkB,YAAW,YAAY;IAClD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAS;gBAEzB,MAAM,EAAE,WAAW,EAAE,MAAM,GAAE,uBAA4B;IAMrE,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,SAAS;IAIX,IAAI,CACN,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,UAAU,EACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,OAAO,CAAC,kBAAkB,CAAC;IAoCxB,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAmBlD,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAerD,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAW9C,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAW9C,OAAO,CAAC,cAAc;CAkBzB"}
@@ -30,14 +30,18 @@ class RedisCheckpointer {
30
30
  threadKey(threadId) {
31
31
  return `${this.prefix}thread:${threadId}`;
32
32
  }
33
- async save(threadId, state, custom) {
33
+ async save(threadId, state, options) {
34
34
  const id = `ckpt_${threadId}_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
35
+ // Extract options (compatible with both old and new API)
36
+ const opts = options;
35
37
  const metadata = {
36
38
  id,
37
39
  threadId,
38
40
  createdAt: Date.now(),
39
41
  stepCount: state.stepCount,
40
- custom,
42
+ status: opts?.status ?? 'active',
43
+ pendingApproval: opts?.pendingApproval,
44
+ custom: opts?.custom ?? (opts && !('status' in opts) ? opts : undefined),
41
45
  };
42
46
  const checkpoint = {
43
47
  metadata,
@@ -1 +1 @@
1
- {"version":3,"file":"redis-checkpointer.js","sourceRoot":"","sources":["../../../src/ai/graph/redis-checkpointer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"redis-checkpointer.js","sourceRoot":"","sources":["../../../src/ai/graph/redis-checkpointer.ts"],"names":[],"mappings":"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"}
@@ -27,14 +27,18 @@ export class RedisCheckpointer {
27
27
  threadKey(threadId) {
28
28
  return `${this.prefix}thread:${threadId}`;
29
29
  }
30
- async save(threadId, state, custom) {
30
+ async save(threadId, state, options) {
31
31
  const id = `ckpt_${threadId}_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
32
+ // Extract options (compatible with both old and new API)
33
+ const opts = options;
32
34
  const metadata = {
33
35
  id,
34
36
  threadId,
35
37
  createdAt: Date.now(),
36
38
  stepCount: state.stepCount,
37
- custom,
39
+ status: opts?.status ?? 'active',
40
+ pendingApproval: opts?.pendingApproval,
41
+ custom: opts?.custom ?? (opts && !('status' in opts) ? opts : undefined),
38
42
  };
39
43
  const checkpoint = {
40
44
  metadata,
@@ -4,6 +4,7 @@
4
4
  */
5
5
  import type { ChatMessage, ToolCall } from '../lib/types';
6
6
  import type { RegisteredTool } from '../lib/tool-registry';
7
+ import type { ApprovalConfig } from './tool-approval';
7
8
  /**
8
9
  * Internal metadata for messages.
9
10
  * Stripped before sending to API.
@@ -55,6 +56,8 @@ export interface AgentState {
55
56
  };
56
57
  /** Abort signal for cancellation */
57
58
  abortSignal?: AbortSignal;
59
+ /** Approval configuration for tool execution */
60
+ approvalConfig?: ApprovalConfig;
58
61
  }
59
62
  /**
60
63
  * Injected skill with position info for compaction.
@@ -1 +1 @@
1
- {"version":3,"file":"internal-types.d.ts","sourceRoot":"","sources":["../../src/ai/internal-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG3D;;;GAGG;AACH,MAAM,WAAW,WAAW;IACxB,2CAA2C;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAChD,KAAK,CAAC,EAAE,WAAW,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,uCAAuC;IACvC,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,oCAAoC;IACpC,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,sBAAsB;IACtB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACnC,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,oCAAoC;IACpC,IAAI,EAAE,OAAO,CAAC;IACd,wBAAwB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,kBAAkB;IAClB,KAAK,CAAC,EAAE;QACJ,aAAa,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,YAAY,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,oCAAoC;IACpC,WAAW,CAAC,EAAE,WAAW,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,4BAA4B;IAC5B,UAAU,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,aAAa,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC1D;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC7B,mCAAmC;IACnC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;IAC1C,kCAAkC;IAClC,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,iCAAiC;IACjC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,WAAW,EAAE,CAEpE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAE7D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAEvE"}
1
+ {"version":3,"file":"internal-types.d.ts","sourceRoot":"","sources":["../../src/ai/internal-types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"internal-types.js","sourceRoot":"","sources":["../../src/ai/internal-types.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAsGH,8BAEC;AAKD,kCAEC;AAKD,gCAEC;AAnBD;;GAEG;AACH,SAAgB,SAAS,CAAC,QAA2B;IACjD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,CAAC,GAAkB,CAAC,CAAC;AACnE,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW,CAAC,OAAwB;IAChD,OAAO,OAAO,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU,CAAC,OAAwB;IAC/C,OAAO,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"internal-types.js","sourceRoot":"","sources":["../../src/ai/internal-types.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAyGH,8BAEC;AAKD,kCAEC;AAKD,gCAEC;AAnBD;;GAEG;AACH,SAAgB,SAAS,CAAC,QAA2B;IACjD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,CAAC,GAAkB,CAAC,CAAC;AACnE,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW,CAAC,OAAwB;IAChD,OAAO,OAAO,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU,CAAC,OAAwB;IAC/C,OAAO,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;AAClC,CAAC"}
@@ -4,6 +4,7 @@
4
4
  */
5
5
  import type { ChatMessage, ToolCall } from '../../lib/types';
6
6
  import type { RegisteredTool } from '../../lib/tool-registry';
7
+ import { type ApprovalConfig } from '../tool-approval';
7
8
  /** Tool execution context */
8
9
  export interface ExecutionContext {
9
10
  toolCallId: string;
@@ -19,7 +20,7 @@ export interface ToolExecutionResult {
19
20
  /**
20
21
  * Execute tools based on tool calls from LLM.
21
22
  */
22
- export declare function executeTools(toolCalls: ToolCall[], tools: Map<string, RegisteredTool>, context: Omit<ExecutionContext, 'toolCallId'>): Promise<ToolExecutionResult[]>;
23
+ export declare function executeTools(toolCalls: ToolCall[], tools: Map<string, RegisteredTool>, context: Omit<ExecutionContext, 'toolCallId'>, approvalConfig?: ApprovalConfig): Promise<ToolExecutionResult[]>;
23
24
  /**
24
25
  * Convert tool execution results to chat messages.
25
26
  */
@@ -1 +1 @@
1
- {"version":3,"file":"execute-node.d.ts","sourceRoot":"","sources":["../../../src/ai/nodes/execute-node.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAG9D,6BAA6B;AAC7B,MAAM,WAAW,gBAAgB;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC7B;AAED,kBAAkB;AAClB,MAAM,WAAW,mBAAmB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAC9B,SAAS,EAAE,QAAQ,EAAE,EACrB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,EAClC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,YAAY,CAAC,GAC9C,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAgEhC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,mBAAmB,EAAE,GAAG,WAAW,EAAE,CAMnF"}
1
+ {"version":3,"file":"execute-node.d.ts","sourceRoot":"","sources":["../../../src/ai/nodes/execute-node.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,OAAO,EAA2B,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEhF,6BAA6B;AAC7B,MAAM,WAAW,gBAAgB;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC7B;AAED,kBAAkB;AAClB,MAAM,WAAW,mBAAmB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAC9B,SAAS,EAAE,QAAQ,EAAE,EACrB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,EAClC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,YAAY,CAAC,EAC7C,cAAc,CAAC,EAAE,cAAc,GAChC,OAAO,CAAC,mBAAmB,EAAE,CAAC,CA8ChC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,mBAAmB,EAAE,GAAG,WAAW,EAAE,CAMnF"}
@@ -6,10 +6,11 @@
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.executeTools = executeTools;
8
8
  exports.toolResultsToMessages = toolResultsToMessages;
9
+ const tool_approval_1 = require("../tool-approval");
9
10
  /**
10
11
  * Execute tools based on tool calls from LLM.
11
12
  */
12
- async function executeTools(toolCalls, tools, context) {
13
+ async function executeTools(toolCalls, tools, context, approvalConfig) {
13
14
  const results = [];
14
15
  for (const call of toolCalls) {
15
16
  // Check abort signal
@@ -30,38 +31,15 @@ async function executeTools(toolCalls, tools, context) {
30
31
  });
31
32
  continue;
32
33
  }
33
- if (!tool.execute) {
34
- results.push({
35
- toolCallId: call.id,
36
- result: `Tool ${call.function.name} has no execute function`,
37
- isError: true,
38
- });
39
- continue;
40
- }
41
- try {
42
- // Parse arguments
43
- const args = parseToolArguments(call.function.arguments);
44
- // Execute tool
45
- const execContext = {
46
- toolCallId: call.id,
47
- messages: context.messages,
48
- abortSignal: context.abortSignal,
49
- };
50
- const result = await tool.execute(args, execContext);
51
- results.push({
52
- toolCallId: call.id,
53
- result: serializeResult(result),
54
- isError: false,
55
- });
56
- }
57
- catch (error) {
58
- const errorMessage = error instanceof Error ? error.message : String(error);
59
- results.push({
60
- toolCallId: call.id,
61
- result: `Error: ${errorMessage}`,
62
- isError: true,
63
- });
64
- }
34
+ // Parse arguments
35
+ const args = parseToolArguments(call.function.arguments);
36
+ // Execute with approval check using unified function
37
+ const execResult = await (0, tool_approval_1.executeToolWithApproval)(tool, call, args, context.messages, approvalConfig, context.abortSignal);
38
+ results.push({
39
+ toolCallId: call.id,
40
+ result: execResult.result,
41
+ isError: execResult.isError,
42
+ });
65
43
  }
66
44
  return results;
67
45
  }
@@ -1 +1 @@
1
- {"version":3,"file":"execute-node.js","sourceRoot":"","sources":["../../../src/ai/nodes/execute-node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"execute-node.js","sourceRoot":"","sources":["../../../src/ai/nodes/execute-node.ts"],"names":[],"mappings":"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"}
@@ -2,10 +2,11 @@
2
2
  * ExecuteNode - Tool execution abstraction.
3
3
  * Extracted from generateText for modular use in Graph Runtime.
4
4
  */
5
+ import { executeToolWithApproval } from '../tool-approval.mjs';
5
6
  /**
6
7
  * Execute tools based on tool calls from LLM.
7
8
  */
8
- export async function executeTools(toolCalls, tools, context) {
9
+ export async function executeTools(toolCalls, tools, context, approvalConfig) {
9
10
  const results = [];
10
11
  for (const call of toolCalls) {
11
12
  // Check abort signal
@@ -26,38 +27,15 @@ export async function executeTools(toolCalls, tools, context) {
26
27
  });
27
28
  continue;
28
29
  }
29
- if (!tool.execute) {
30
- results.push({
31
- toolCallId: call.id,
32
- result: `Tool ${call.function.name} has no execute function`,
33
- isError: true,
34
- });
35
- continue;
36
- }
37
- try {
38
- // Parse arguments
39
- const args = parseToolArguments(call.function.arguments);
40
- // Execute tool
41
- const execContext = {
42
- toolCallId: call.id,
43
- messages: context.messages,
44
- abortSignal: context.abortSignal,
45
- };
46
- const result = await tool.execute(args, execContext);
47
- results.push({
48
- toolCallId: call.id,
49
- result: serializeResult(result),
50
- isError: false,
51
- });
52
- }
53
- catch (error) {
54
- const errorMessage = error instanceof Error ? error.message : String(error);
55
- results.push({
56
- toolCallId: call.id,
57
- result: `Error: ${errorMessage}`,
58
- isError: true,
59
- });
60
- }
30
+ // Parse arguments
31
+ const args = parseToolArguments(call.function.arguments);
32
+ // Execute with approval check using unified function
33
+ const execResult = await executeToolWithApproval(tool, call, args, context.messages, approvalConfig, context.abortSignal);
34
+ results.push({
35
+ toolCallId: call.id,
36
+ result: execResult.result,
37
+ isError: execResult.isError,
38
+ });
61
39
  }
62
40
  return results;
63
41
  }
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Tool Approval - Unified approval mechanism for tool execution.
3
+ * Implements Human-in-the-Loop pattern with configurable policies.
4
+ */
5
+ import type { ToolCall } from '../lib/types';
6
+ import type { RegisteredTool, ToolSource } from '../lib/tool-registry';
7
+ /** Context passed to approval handler */
8
+ export interface ApprovalContext {
9
+ /** Tool call details */
10
+ toolCall: {
11
+ id: string;
12
+ function: {
13
+ name: string;
14
+ arguments: string;
15
+ };
16
+ };
17
+ /** Tool name */
18
+ toolName: string;
19
+ /** Tool description */
20
+ toolDescription: string;
21
+ /** Parsed arguments */
22
+ args: Record<string, unknown>;
23
+ /** Current message history */
24
+ messages: Array<{
25
+ role: string;
26
+ content: unknown;
27
+ }>;
28
+ }
29
+ /** Approval handler function */
30
+ export type ApprovalHandler = (context: ApprovalContext) => Promise<boolean>;
31
+ /** Approval configuration */
32
+ export interface ApprovalConfig {
33
+ /** Global approval handler */
34
+ onApprovalRequired?: ApprovalHandler;
35
+ /**
36
+ * Sources to auto-approve (skip approval).
37
+ * Supports 'type' (e.g., 'builtin') or 'type:namespace' (e.g., 'mcp:github')
38
+ */
39
+ autoApproveSources?: string[];
40
+ }
41
+ /** Tool with optional approval settings */
42
+ export interface ToolWithApproval {
43
+ /** Whether this tool requires approval before execution */
44
+ requiresApproval?: boolean;
45
+ /** Per-tool approval handler (overrides global) */
46
+ approvalHandler?: ApprovalHandler;
47
+ }
48
+ /** Approval result */
49
+ export interface ApprovalResult {
50
+ approved: boolean;
51
+ /** Rejection message if not approved */
52
+ rejectionMessage?: string;
53
+ }
54
+ /** Tool-like object for approval checking */
55
+ interface ToolForApproval {
56
+ name: string;
57
+ description?: string;
58
+ source?: ToolSource;
59
+ requiresApproval?: boolean;
60
+ approvalHandler?: ApprovalHandler;
61
+ }
62
+ /** Tool call-like object for approval checking */
63
+ interface ToolCallForApproval {
64
+ id: string;
65
+ function: {
66
+ name: string;
67
+ arguments: string;
68
+ };
69
+ }
70
+ /**
71
+ * Determine if approval is needed and execute handler if so.
72
+ */
73
+ export declare function checkApproval(tool: ToolForApproval, toolCall: ToolCallForApproval, args: Record<string, unknown>, messages: Array<{
74
+ role: string;
75
+ content: unknown;
76
+ }>, config?: ApprovalConfig): Promise<ApprovalResult>;
77
+ /**
78
+ * Execute a single tool with approval check.
79
+ * Returns result or rejection message.
80
+ */
81
+ export declare function executeToolWithApproval(tool: RegisteredTool & ToolWithApproval, toolCall: ToolCall, args: Record<string, unknown>, messages: Array<{
82
+ role: string;
83
+ content: unknown;
84
+ }>, config?: ApprovalConfig, abortSignal?: AbortSignal): Promise<{
85
+ result: string;
86
+ isError: boolean;
87
+ isRejected: boolean;
88
+ }>;
89
+ export {};
90
+ //# sourceMappingURL=tool-approval.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-approval.d.ts","sourceRoot":"","sources":["../../src/ai/tool-approval.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAMvE,yCAAyC;AACzC,MAAM,WAAW,eAAe;IAC5B,wBAAwB;IACxB,QAAQ,EAAE;QACN,EAAE,EAAE,MAAM,CAAC;QACX,QAAQ,EAAE;YACN,IAAI,EAAE,MAAM,CAAC;YACb,SAAS,EAAE,MAAM,CAAC;SACrB,CAAC;KACL,CAAC;IACF,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,uBAAuB;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,8BAA8B;IAC9B,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACvD;AAED,gCAAgC;AAChC,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAE7E,6BAA6B;AAC7B,MAAM,WAAW,cAAc;IAC3B,8BAA8B;IAC9B,kBAAkB,CAAC,EAAE,eAAe,CAAC;IACrC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CACjC;AAED,2CAA2C;AAC3C,MAAM,WAAW,gBAAgB;IAC7B,2DAA2D;IAC3D,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,mDAAmD;IACnD,eAAe,CAAC,EAAE,eAAe,CAAC;CACrC;AAED,sBAAsB;AACtB,MAAM,WAAW,cAAc;IAC3B,QAAQ,EAAE,OAAO,CAAC;IAClB,wCAAwC;IACxC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B;AA6BD,6CAA6C;AAC7C,UAAU,eAAe;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,eAAe,CAAC,EAAE,eAAe,CAAC;CACrC;AAED,kDAAkD;AAClD,UAAU,mBAAmB;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACrB,CAAC;CACL;AAED;;GAEG;AACH,wBAAsB,aAAa,CAC/B,IAAI,EAAE,eAAe,EACrB,QAAQ,EAAE,mBAAmB,EAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,QAAQ,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,EACnD,MAAM,CAAC,EAAE,cAAc,GACxB,OAAO,CAAC,cAAc,CAAC,CA+CzB;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CACzC,IAAI,EAAE,cAAc,GAAG,gBAAgB,EACvC,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,QAAQ,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,EACnD,MAAM,CAAC,EAAE,cAAc,EACvB,WAAW,CAAC,EAAE,WAAW,GAC1B,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAAC,CAoDpE"}
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+ /**
3
+ * Tool Approval - Unified approval mechanism for tool execution.
4
+ * Implements Human-in-the-Loop pattern with configurable policies.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.checkApproval = checkApproval;
8
+ exports.executeToolWithApproval = executeToolWithApproval;
9
+ // ============================================================================
10
+ // Rejection Message
11
+ // ============================================================================
12
+ const REJECTION_MESSAGE = '[Approval Rejected] Tool execution was denied by user.';
13
+ // ============================================================================
14
+ // Approval Logic
15
+ // ============================================================================
16
+ /**
17
+ * Check if a tool source matches an auto-approve pattern.
18
+ */
19
+ function isSourceAutoApproved(source, patterns) {
20
+ for (const pattern of patterns) {
21
+ // Match full source (e.g., 'mcp:github')
22
+ if (pattern === `${source.type}:${source.namespace}`) {
23
+ return true;
24
+ }
25
+ // Match type only (e.g., 'builtin')
26
+ if (pattern === source.type) {
27
+ return true;
28
+ }
29
+ }
30
+ return false;
31
+ }
32
+ /**
33
+ * Determine if approval is needed and execute handler if so.
34
+ */
35
+ async function checkApproval(tool, toolCall, args, messages, config) {
36
+ // Tool doesn't require approval
37
+ if (!tool.requiresApproval) {
38
+ return { approved: true };
39
+ }
40
+ // Check auto-approve sources
41
+ if (config?.autoApproveSources && tool.source) {
42
+ if (isSourceAutoApproved(tool.source, config.autoApproveSources)) {
43
+ return { approved: true };
44
+ }
45
+ }
46
+ // Get handler (per-tool overrides global)
47
+ const handler = tool.approvalHandler ?? config?.onApprovalRequired;
48
+ // No handler configured but approval required - FAIL CLOSED
49
+ if (!handler) {
50
+ return {
51
+ approved: false,
52
+ rejectionMessage: '[Approval Required] No handler configured. Tool execution denied.',
53
+ };
54
+ }
55
+ // Execute handler
56
+ const context = {
57
+ toolCall,
58
+ toolName: tool.name,
59
+ toolDescription: tool.description ?? '',
60
+ args,
61
+ messages,
62
+ };
63
+ try {
64
+ const approved = await handler(context);
65
+ return {
66
+ approved,
67
+ rejectionMessage: approved ? undefined : REJECTION_MESSAGE,
68
+ };
69
+ }
70
+ catch (error) {
71
+ // Handler error = rejection
72
+ const errorMessage = error instanceof Error ? error.message : String(error);
73
+ return {
74
+ approved: false,
75
+ rejectionMessage: `[Approval Error] ${errorMessage}`,
76
+ };
77
+ }
78
+ }
79
+ /**
80
+ * Execute a single tool with approval check.
81
+ * Returns result or rejection message.
82
+ */
83
+ async function executeToolWithApproval(tool, toolCall, args, messages, config, abortSignal) {
84
+ // Check approval
85
+ const approvalResult = await checkApproval(tool, toolCall, args, messages, config);
86
+ if (!approvalResult.approved) {
87
+ return {
88
+ result: approvalResult.rejectionMessage ?? REJECTION_MESSAGE,
89
+ isError: false, // Not an error, just rejected
90
+ isRejected: true,
91
+ };
92
+ }
93
+ // Check abort
94
+ if (abortSignal?.aborted) {
95
+ return {
96
+ result: 'Execution cancelled',
97
+ isError: true,
98
+ isRejected: false,
99
+ };
100
+ }
101
+ // Execute tool
102
+ if (!tool.execute) {
103
+ return {
104
+ result: `Tool ${tool.name} has no execute function`,
105
+ isError: true,
106
+ isRejected: false,
107
+ };
108
+ }
109
+ try {
110
+ const execContext = {
111
+ toolCallId: toolCall.id,
112
+ messages: messages,
113
+ abortSignal,
114
+ };
115
+ const result = await tool.execute(args, execContext);
116
+ return {
117
+ result: serializeResult(result),
118
+ isError: false,
119
+ isRejected: false,
120
+ };
121
+ }
122
+ catch (error) {
123
+ const errorMessage = error instanceof Error ? error.message : String(error);
124
+ return {
125
+ result: `Error: ${errorMessage}`,
126
+ isError: true,
127
+ isRejected: false,
128
+ };
129
+ }
130
+ }
131
+ // ============================================================================
132
+ // Helpers
133
+ // ============================================================================
134
+ /**
135
+ * Serialize tool result to string.
136
+ */
137
+ function serializeResult(result) {
138
+ if (result === undefined || result === null) {
139
+ return '';
140
+ }
141
+ if (typeof result === 'string') {
142
+ return result;
143
+ }
144
+ try {
145
+ return JSON.stringify(result, null, 2);
146
+ }
147
+ catch {
148
+ return String(result);
149
+ }
150
+ }
151
+ //# sourceMappingURL=tool-approval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-approval.js","sourceRoot":"","sources":["../../src/ai/tool-approval.ts"],"names":[],"mappings":"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"}