@nordsym/apiclaw 1.3.13 → 1.4.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 (44) hide show
  1. package/PRD-API-CHAINING.md +483 -0
  2. package/PRD-HARDEN-SHELL.md +18 -12
  3. package/convex/_generated/api.d.ts +2 -0
  4. package/convex/chains.ts +1095 -0
  5. package/convex/schema.ts +101 -0
  6. package/dist/chain-types.d.ts +187 -0
  7. package/dist/chain-types.d.ts.map +1 -0
  8. package/dist/chain-types.js +33 -0
  9. package/dist/chain-types.js.map +1 -0
  10. package/dist/chainExecutor.d.ts +122 -0
  11. package/dist/chainExecutor.d.ts.map +1 -0
  12. package/dist/chainExecutor.js +454 -0
  13. package/dist/chainExecutor.js.map +1 -0
  14. package/dist/chainResolver.d.ts +100 -0
  15. package/dist/chainResolver.d.ts.map +1 -0
  16. package/dist/chainResolver.js +519 -0
  17. package/dist/chainResolver.js.map +1 -0
  18. package/dist/chainResolver.test.d.ts +5 -0
  19. package/dist/chainResolver.test.d.ts.map +1 -0
  20. package/dist/chainResolver.test.js +201 -0
  21. package/dist/chainResolver.test.js.map +1 -0
  22. package/dist/execute.d.ts +4 -1
  23. package/dist/execute.d.ts.map +1 -1
  24. package/dist/execute.js +3 -0
  25. package/dist/execute.js.map +1 -1
  26. package/dist/index.js +382 -2
  27. package/dist/index.js.map +1 -1
  28. package/landing/public/logos/chattgpt.svg +1 -0
  29. package/landing/public/logos/claude.svg +1 -0
  30. package/landing/public/logos/gemini.svg +1 -0
  31. package/landing/public/logos/grok.svg +1 -0
  32. package/landing/src/app/page.tsx +12 -21
  33. package/landing/src/app/workspace/chains/page.tsx +520 -0
  34. package/landing/src/components/AITestimonials.tsx +15 -9
  35. package/landing/src/components/ChainStepDetail.tsx +310 -0
  36. package/landing/src/components/ChainTrace.tsx +261 -0
  37. package/landing/src/lib/stats.json +1 -1
  38. package/package.json +1 -1
  39. package/src/chain-types.ts +270 -0
  40. package/src/chainExecutor.ts +730 -0
  41. package/src/chainResolver.test.ts +246 -0
  42. package/src/chainResolver.ts +658 -0
  43. package/src/execute.ts +23 -0
  44. package/src/index.ts +423 -2
package/convex/schema.ts CHANGED
@@ -597,6 +597,107 @@ export default defineSchema({
597
597
  // FEEDBACK SYSTEM
598
598
  // ============================================
599
599
 
600
+ // ============================================
601
+ // CHAIN ORCHESTRATION TABLES
602
+ // ============================================
603
+
604
+ // Chain executions (main orchestration record)
605
+ chains: defineTable({
606
+ workspaceId: v.id("workspaces"),
607
+ // Chain definition
608
+ steps: v.array(v.any()), // Array of step definitions (raw, unresolved)
609
+ // Execution state
610
+ status: v.union(
611
+ v.literal("pending"),
612
+ v.literal("running"),
613
+ v.literal("completed"),
614
+ v.literal("failed"),
615
+ v.literal("paused")
616
+ ),
617
+ currentStep: v.number(), // Index of current step (0-based)
618
+ // Results storage
619
+ results: v.any(), // Record<stepId, result>
620
+ // Error tracking
621
+ error: v.optional(v.object({
622
+ stepId: v.string(),
623
+ code: v.string(),
624
+ message: v.string(),
625
+ retryAfter: v.optional(v.number()),
626
+ })),
627
+ // Execution options
628
+ continueOnError: v.optional(v.boolean()),
629
+ timeout: v.optional(v.number()), // ms
630
+ // Resume capability
631
+ resumeToken: v.optional(v.string()),
632
+ canResume: v.optional(v.boolean()),
633
+ // Cost tracking
634
+ totalCostCents: v.optional(v.number()),
635
+ totalLatencyMs: v.optional(v.number()),
636
+ // Timestamps
637
+ createdAt: v.number(),
638
+ startedAt: v.optional(v.number()),
639
+ completedAt: v.optional(v.number()),
640
+ })
641
+ .index("by_workspaceId", ["workspaceId"])
642
+ .index("by_status", ["status"])
643
+ .index("by_workspaceId_status", ["workspaceId", "status"])
644
+ .index("by_resumeToken", ["resumeToken"]),
645
+
646
+ // Chain templates (reusable chain definitions)
647
+ chainTemplates: defineTable({
648
+ workspaceId: v.id("workspaces"),
649
+ name: v.string(),
650
+ description: v.optional(v.string()),
651
+ // Input schema for the template
652
+ inputs: v.optional(v.any()), // JSON Schema for inputs
653
+ // Chain definition
654
+ chain: v.array(v.any()), // Array of step definitions
655
+ // Usage tracking
656
+ useCount: v.optional(v.number()),
657
+ lastUsedAt: v.optional(v.number()),
658
+ // Timestamps
659
+ createdAt: v.number(),
660
+ updatedAt: v.number(),
661
+ })
662
+ .index("by_workspaceId", ["workspaceId"])
663
+ .index("by_name", ["workspaceId", "name"]),
664
+
665
+ // Chain step executions (detailed trace per step)
666
+ chainExecutions: defineTable({
667
+ chainId: v.id("chains"),
668
+ stepId: v.string(), // The id from step definition
669
+ stepIndex: v.number(), // Position in chain
670
+ // Execution state
671
+ status: v.union(
672
+ v.literal("pending"),
673
+ v.literal("running"),
674
+ v.literal("completed"),
675
+ v.literal("failed"),
676
+ v.literal("skipped")
677
+ ),
678
+ // I/O
679
+ input: v.optional(v.any()), // Resolved params sent to provider
680
+ output: v.optional(v.any()), // Result from provider
681
+ // Metrics
682
+ latencyMs: v.optional(v.number()),
683
+ costCents: v.optional(v.number()),
684
+ // Error info
685
+ error: v.optional(v.object({
686
+ code: v.string(),
687
+ message: v.string(),
688
+ retryCount: v.optional(v.number()),
689
+ })),
690
+ // Parallel execution tracking
691
+ parallelGroup: v.optional(v.string()), // Group ID if part of parallel batch
692
+ // Timestamps
693
+ createdAt: v.number(),
694
+ startedAt: v.optional(v.number()),
695
+ completedAt: v.optional(v.number()),
696
+ })
697
+ .index("by_chainId", ["chainId"])
698
+ .index("by_chainId_stepId", ["chainId", "stepId"])
699
+ .index("by_chainId_stepIndex", ["chainId", "stepIndex"]),
700
+
600
701
  // User feedback with voting
601
702
  feedback: defineTable({
602
703
  workspaceId: v.id("workspaces"),
@@ -0,0 +1,187 @@
1
+ /**
2
+ * Chain Execution Types for APIClaw
3
+ *
4
+ * Enables multi-step API orchestration with:
5
+ * - Sequential execution
6
+ * - Parallel execution
7
+ * - Conditional branching
8
+ * - Loops (forEach, map-reduce)
9
+ * - Error handling & retry
10
+ * - Cross-step references ($stepId.property)
11
+ */
12
+ /**
13
+ * Base step configuration
14
+ */
15
+ export interface ChainStepBase {
16
+ id: string;
17
+ provider: string;
18
+ action: string;
19
+ params?: Record<string, any>;
20
+ onError?: ErrorHandler;
21
+ }
22
+ /**
23
+ * Parallel execution step - runs multiple steps concurrently
24
+ */
25
+ export interface ParallelStep {
26
+ parallel: ChainStepBase[];
27
+ }
28
+ /**
29
+ * Conditional step - executes based on condition
30
+ */
31
+ export interface ConditionalStep {
32
+ if: string;
33
+ then: ChainStepBase | ChainStep;
34
+ else?: ChainStepBase | ChainStep;
35
+ }
36
+ /**
37
+ * Loop step - iterates over array
38
+ */
39
+ export interface ForEachStep {
40
+ forEach: string;
41
+ as: string;
42
+ do: ChainStepBase;
43
+ }
44
+ /**
45
+ * Map step - transforms array
46
+ */
47
+ export interface MapStep {
48
+ map: {
49
+ input: string;
50
+ fn: ChainStepBase;
51
+ };
52
+ }
53
+ /**
54
+ * Reduce step - aggregates results
55
+ */
56
+ export interface ReduceStep {
57
+ reduce: {
58
+ input: string;
59
+ fn: ChainStepBase;
60
+ };
61
+ }
62
+ /**
63
+ * Union type for all step variants
64
+ */
65
+ export type ChainStep = ChainStepBase | ParallelStep | ConditionalStep | ForEachStep | MapStep | ReduceStep;
66
+ export interface RetryConfig {
67
+ attempts?: number;
68
+ maxAttempts?: number;
69
+ backoff?: number[] | 'exponential' | 'linear';
70
+ backoffMs?: number;
71
+ }
72
+ export interface ErrorHandler {
73
+ retry?: RetryConfig;
74
+ fallback?: ChainStepBase;
75
+ abort?: boolean;
76
+ }
77
+ export type ErrorPolicy = 'fail-fast' | 'best-effort' | 'transactional';
78
+ export interface RollbackAction {
79
+ if: string;
80
+ do: ChainStepBase;
81
+ }
82
+ export interface ChainErrorPolicy {
83
+ mode: ErrorPolicy;
84
+ rollback?: RollbackAction[];
85
+ }
86
+ export interface ChainLimits {
87
+ maxSteps?: number;
88
+ maxParallel?: number;
89
+ maxCost?: {
90
+ cents: number;
91
+ };
92
+ }
93
+ export interface ChainOptions {
94
+ continueOnError?: boolean;
95
+ timeout?: number;
96
+ async?: boolean;
97
+ webhook?: string;
98
+ errorPolicy?: ChainErrorPolicy;
99
+ limits?: ChainLimits;
100
+ }
101
+ export interface ChainRequest extends ChainOptions {
102
+ chain: ChainStep[];
103
+ }
104
+ export type StepStatus = 'pending' | 'running' | 'completed' | 'failed' | 'skipped';
105
+ export interface StepResult {
106
+ id: string;
107
+ status: StepStatus;
108
+ result?: any;
109
+ error?: string;
110
+ errorCode?: string;
111
+ latencyMs: number;
112
+ cost?: {
113
+ cents: number;
114
+ };
115
+ retryAttempts?: number;
116
+ }
117
+ export interface ChainSuccessResponse {
118
+ success: true;
119
+ chainId: string;
120
+ steps: StepResult[];
121
+ finalResult: any;
122
+ totalLatencyMs: number;
123
+ totalCost: {
124
+ cents: number;
125
+ };
126
+ tokensSaved: number;
127
+ }
128
+ export interface ChainErrorResponse {
129
+ success: false;
130
+ chainId: string;
131
+ completedSteps: string[];
132
+ failedStep: {
133
+ id: string;
134
+ error: string;
135
+ code?: string;
136
+ retryAfter?: number;
137
+ };
138
+ partialResults: Record<string, any>;
139
+ canResume: boolean;
140
+ resumeToken?: string;
141
+ }
142
+ export type ChainResponse = ChainSuccessResponse | ChainErrorResponse;
143
+ export interface AsyncChainResponse {
144
+ chainId: string;
145
+ status: 'running' | 'completed' | 'failed';
146
+ estimatedCompletion?: string;
147
+ statusUrl: string;
148
+ }
149
+ export interface ChainStatusResponse {
150
+ chainId: string;
151
+ status: 'pending' | 'running' | 'completed' | 'failed';
152
+ progress: {
153
+ completedSteps: number;
154
+ totalSteps: number;
155
+ currentStep?: string;
156
+ };
157
+ startedAt: string;
158
+ completedAt?: string;
159
+ result?: ChainResponse;
160
+ }
161
+ export interface ResumeChainRequest {
162
+ resumeToken: string;
163
+ overrides?: Record<string, Record<string, any>>;
164
+ }
165
+ export interface ChainInput {
166
+ type: 'string' | 'number' | 'boolean' | 'object' | 'array';
167
+ required?: boolean;
168
+ default?: any;
169
+ description?: string;
170
+ }
171
+ export interface ChainTemplate {
172
+ name: string;
173
+ description?: string;
174
+ inputs: Record<string, ChainInput>;
175
+ chain: ChainStep[];
176
+ }
177
+ export interface UseChainRequest {
178
+ useChain: string;
179
+ inputs: Record<string, any>;
180
+ }
181
+ export declare function isParallelStep(step: ChainStep): step is ParallelStep;
182
+ export declare function isConditionalStep(step: ChainStep): step is ConditionalStep;
183
+ export declare function isForEachStep(step: ChainStep): step is ForEachStep;
184
+ export declare function isMapStep(step: ChainStep): step is MapStep;
185
+ export declare function isReduceStep(step: ChainStep): step is ReduceStep;
186
+ export declare function isBaseStep(step: ChainStep): step is ChainStepBase;
187
+ //# sourceMappingURL=chain-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chain-types.d.ts","sourceRoot":"","sources":["../src/chain-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,aAAa,GAAG,SAAS,CAAC;IAChC,IAAI,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,aAAa,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE;QACH,KAAK,EAAE,MAAM,CAAC;QACd,EAAE,EAAE,aAAa,CAAC;KACnB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,EAAE,EAAE,aAAa,CAAC;KACnB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,GACjB,aAAa,GACb,YAAY,GACZ,eAAe,GACf,WAAW,GACX,OAAO,GACP,UAAU,CAAC;AAMf,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,aAAa,GAAG,QAAQ,CAAC;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,aAAa,GAAG,eAAe,CAAC;AAExE,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,aAAa,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;CAC7B;AAMD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAMD,MAAM,WAAW,YAAa,SAAQ,YAAY;IAChD,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB;AAMD,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEpF,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAMD,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,IAAI,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,WAAW,EAAE,GAAG,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,KAAK,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,EAAE;QACV,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpC,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,aAAa,GAAG,oBAAoB,GAAG,kBAAkB,CAAC;AAMtE,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC3C,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IACvD,QAAQ,EAAE;QACR,cAAc,EAAE,MAAM,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAMD,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;CACjD;AAMD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC3D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACnC,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC7B;AAMD,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,IAAI,YAAY,CAEpE;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,IAAI,eAAe,CAE1E;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,IAAI,WAAW,CAElE;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,IAAI,OAAO,CAE1D;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,IAAI,UAAU,CAEhE;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,IAAI,aAAa,CAEjE"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Chain Execution Types for APIClaw
3
+ *
4
+ * Enables multi-step API orchestration with:
5
+ * - Sequential execution
6
+ * - Parallel execution
7
+ * - Conditional branching
8
+ * - Loops (forEach, map-reduce)
9
+ * - Error handling & retry
10
+ * - Cross-step references ($stepId.property)
11
+ */
12
+ // ============================================
13
+ // TYPE GUARDS
14
+ // ============================================
15
+ export function isParallelStep(step) {
16
+ return 'parallel' in step;
17
+ }
18
+ export function isConditionalStep(step) {
19
+ return 'if' in step && 'then' in step;
20
+ }
21
+ export function isForEachStep(step) {
22
+ return 'forEach' in step && 'do' in step;
23
+ }
24
+ export function isMapStep(step) {
25
+ return 'map' in step;
26
+ }
27
+ export function isReduceStep(step) {
28
+ return 'reduce' in step;
29
+ }
30
+ export function isBaseStep(step) {
31
+ return 'provider' in step && 'action' in step;
32
+ }
33
+ //# sourceMappingURL=chain-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chain-types.js","sourceRoot":"","sources":["../src/chain-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAyOH,+CAA+C;AAC/C,cAAc;AACd,+CAA+C;AAE/C,MAAM,UAAU,cAAc,CAAC,IAAe;IAC5C,OAAO,UAAU,IAAI,IAAI,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAe;IAC/C,OAAO,IAAI,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAe;IAC3C,OAAO,SAAS,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAe;IACvC,OAAO,KAAK,IAAI,IAAI,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAe;IAC1C,OAAO,QAAQ,IAAI,IAAI,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAe;IACxC,OAAO,UAAU,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,CAAC;AAChD,CAAC"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * APIClaw Chain Executor
3
+ *
4
+ * Orchestrates multi-step API chains with:
5
+ * - Sequential execution
6
+ * - Parallel batches
7
+ * - Conditional branching
8
+ * - ForEach loops
9
+ * - Error handling and retry
10
+ * - Full execution trace
11
+ */
12
+ import { ChainStep, ChainStepUnion } from './chainResolver.js';
13
+ export interface ChainDefinition {
14
+ id?: string;
15
+ name?: string;
16
+ description?: string;
17
+ steps: ChainStepUnion[];
18
+ inputs?: Record<string, InputDefinition>;
19
+ errorPolicy?: ErrorPolicy;
20
+ limits?: ChainLimits;
21
+ timeout?: number;
22
+ }
23
+ export interface InputDefinition {
24
+ type: 'string' | 'number' | 'boolean' | 'array' | 'object';
25
+ required?: boolean;
26
+ default?: any;
27
+ description?: string;
28
+ }
29
+ export interface ErrorPolicy {
30
+ mode: 'fail-fast' | 'best-effort' | 'transactional';
31
+ rollback?: RollbackStep[];
32
+ }
33
+ export interface RollbackStep {
34
+ if: string;
35
+ do: ChainStep;
36
+ }
37
+ export interface ChainLimits {
38
+ maxSteps?: number;
39
+ maxParallel?: number;
40
+ maxCost?: {
41
+ cents: number;
42
+ };
43
+ }
44
+ export interface Credentials {
45
+ userId?: string;
46
+ customerKeys?: Record<string, string>;
47
+ }
48
+ export interface ChainOptions {
49
+ dryRun?: boolean;
50
+ verbose?: boolean;
51
+ onStepComplete?: (step: StepTrace) => void;
52
+ onStepStart?: (stepId: string, stepIndex: number) => void;
53
+ }
54
+ export interface ChainResult {
55
+ success: boolean;
56
+ chainId: string;
57
+ startedAt: string;
58
+ completedAt: string;
59
+ totalLatencyMs: number;
60
+ totalCost: {
61
+ cents: number;
62
+ };
63
+ finalResult?: any;
64
+ results: Record<string, any>;
65
+ error?: ChainError;
66
+ completedSteps: string[];
67
+ failedStep?: StepTrace;
68
+ trace: StepTrace[];
69
+ canResume: boolean;
70
+ resumeToken?: string;
71
+ }
72
+ export interface ChainError {
73
+ stepId: string;
74
+ code: string;
75
+ message: string;
76
+ retryAfter?: number;
77
+ }
78
+ export interface StepTrace {
79
+ stepId: string;
80
+ stepIndex: number;
81
+ provider: string;
82
+ action: string;
83
+ startedAt: string;
84
+ completedAt: string;
85
+ latencyMs: number;
86
+ success: boolean;
87
+ input: Record<string, any>;
88
+ output?: any;
89
+ error?: string;
90
+ errorCode?: string;
91
+ cost?: {
92
+ cents: number;
93
+ };
94
+ retries?: number;
95
+ }
96
+ /**
97
+ * Execute a chain of API calls
98
+ */
99
+ export declare function executeChain(chain: ChainDefinition, credentials: Credentials, inputs?: Record<string, any>, options?: ChainOptions): Promise<ChainResult>;
100
+ export declare class StepError extends Error {
101
+ code: string;
102
+ retryAfter?: number;
103
+ constructor(message: string, code: string, retryAfter?: number);
104
+ }
105
+ export declare class TimeoutError extends Error {
106
+ code: string;
107
+ constructor(message: string);
108
+ }
109
+ /**
110
+ * Get status of a running or completed chain
111
+ */
112
+ export declare function getChainStatus(chainId: string): Promise<{
113
+ chainId: string;
114
+ status: 'running' | 'completed' | 'failed' | 'not_found';
115
+ result?: ChainResult;
116
+ }>;
117
+ /**
118
+ * Resume a failed chain from a resume token
119
+ */
120
+ export declare function resumeChain(resumeToken: string, chain: ChainDefinition, credentials: Credentials, inputs?: Record<string, any>, overrides?: Record<string, Record<string, any>>, options?: ChainOptions): Promise<ChainResult>;
121
+ export { ChainContext, ChainStep, ChainStepUnion, resolveReferences, validateReferences, evaluateCondition, } from './chainResolver.js';
122
+ //# sourceMappingURL=chainExecutor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chainExecutor.d.ts","sourceRoot":"","sources":["../src/chainExecutor.ts"],"names":[],"mappings":"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"}