@arke-institute/rhiza 0.1.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 (230) hide show
  1. package/README.md +106 -0
  2. package/dist/__tests__/fixtures/index.d.ts +9 -0
  3. package/dist/__tests__/fixtures/index.d.ts.map +1 -0
  4. package/dist/__tests__/fixtures/index.js +12 -0
  5. package/dist/__tests__/fixtures/index.js.map +1 -0
  6. package/dist/__tests__/fixtures/kladoi/index.d.ts +165 -0
  7. package/dist/__tests__/fixtures/kladoi/index.d.ts.map +1 -0
  8. package/dist/__tests__/fixtures/kladoi/index.js +270 -0
  9. package/dist/__tests__/fixtures/kladoi/index.js.map +1 -0
  10. package/dist/__tests__/fixtures/logs/index.d.ts +19 -0
  11. package/dist/__tests__/fixtures/logs/index.d.ts.map +1 -0
  12. package/dist/__tests__/fixtures/logs/index.js +545 -0
  13. package/dist/__tests__/fixtures/logs/index.js.map +1 -0
  14. package/dist/__tests__/fixtures/mock-client.d.ts +127 -0
  15. package/dist/__tests__/fixtures/mock-client.d.ts.map +1 -0
  16. package/dist/__tests__/fixtures/mock-client.js +415 -0
  17. package/dist/__tests__/fixtures/mock-client.js.map +1 -0
  18. package/dist/__tests__/fixtures/rhizai/index.d.ts +54 -0
  19. package/dist/__tests__/fixtures/rhizai/index.d.ts.map +1 -0
  20. package/dist/__tests__/fixtures/rhizai/index.js +283 -0
  21. package/dist/__tests__/fixtures/rhizai/index.js.map +1 -0
  22. package/dist/__tests__/unit/fixtures.test.d.ts +10 -0
  23. package/dist/__tests__/unit/fixtures.test.d.ts.map +1 -0
  24. package/dist/__tests__/unit/fixtures.test.js +275 -0
  25. package/dist/__tests__/unit/fixtures.test.js.map +1 -0
  26. package/dist/__tests__/unit/handoff/gather.test.d.ts +8 -0
  27. package/dist/__tests__/unit/handoff/gather.test.d.ts.map +1 -0
  28. package/dist/__tests__/unit/handoff/gather.test.js +176 -0
  29. package/dist/__tests__/unit/handoff/gather.test.js.map +1 -0
  30. package/dist/__tests__/unit/handoff/interpret.test.d.ts +9 -0
  31. package/dist/__tests__/unit/handoff/interpret.test.d.ts.map +1 -0
  32. package/dist/__tests__/unit/handoff/interpret.test.js +370 -0
  33. package/dist/__tests__/unit/handoff/interpret.test.js.map +1 -0
  34. package/dist/__tests__/unit/handoff/route.test.d.ts +8 -0
  35. package/dist/__tests__/unit/handoff/route.test.d.ts.map +1 -0
  36. package/dist/__tests__/unit/handoff/route.test.js +271 -0
  37. package/dist/__tests__/unit/handoff/route.test.js.map +1 -0
  38. package/dist/__tests__/unit/handoff/scatter.test.d.ts +7 -0
  39. package/dist/__tests__/unit/handoff/scatter.test.d.ts.map +1 -0
  40. package/dist/__tests__/unit/handoff/scatter.test.js +54 -0
  41. package/dist/__tests__/unit/handoff/scatter.test.js.map +1 -0
  42. package/dist/__tests__/unit/resume.test.d.ts +8 -0
  43. package/dist/__tests__/unit/resume.test.d.ts.map +1 -0
  44. package/dist/__tests__/unit/resume.test.js +134 -0
  45. package/dist/__tests__/unit/resume.test.js.map +1 -0
  46. package/dist/__tests__/unit/status.test.d.ts +8 -0
  47. package/dist/__tests__/unit/status.test.d.ts.map +1 -0
  48. package/dist/__tests__/unit/status.test.js +164 -0
  49. package/dist/__tests__/unit/status.test.js.map +1 -0
  50. package/dist/__tests__/unit/target.test.d.ts +8 -0
  51. package/dist/__tests__/unit/target.test.d.ts.map +1 -0
  52. package/dist/__tests__/unit/target.test.js +116 -0
  53. package/dist/__tests__/unit/target.test.js.map +1 -0
  54. package/dist/__tests__/unit/traverse.test.d.ts +8 -0
  55. package/dist/__tests__/unit/traverse.test.d.ts.map +1 -0
  56. package/dist/__tests__/unit/traverse.test.js +143 -0
  57. package/dist/__tests__/unit/traverse.test.js.map +1 -0
  58. package/dist/__tests__/unit/validation/klados.test.d.ts +16 -0
  59. package/dist/__tests__/unit/validation/klados.test.d.ts.map +1 -0
  60. package/dist/__tests__/unit/validation/klados.test.js +275 -0
  61. package/dist/__tests__/unit/validation/klados.test.js.map +1 -0
  62. package/dist/__tests__/unit/validation/rhiza.test.d.ts +16 -0
  63. package/dist/__tests__/unit/validation/rhiza.test.d.ts.map +1 -0
  64. package/dist/__tests__/unit/validation/rhiza.test.js +612 -0
  65. package/dist/__tests__/unit/validation/rhiza.test.js.map +1 -0
  66. package/dist/__tests__/unit/validation/runtime.test.d.ts +11 -0
  67. package/dist/__tests__/unit/validation/runtime.test.d.ts.map +1 -0
  68. package/dist/__tests__/unit/validation/runtime.test.js +553 -0
  69. package/dist/__tests__/unit/validation/runtime.test.js.map +1 -0
  70. package/dist/__tests__/unit/worker/errors.test.d.ts +2 -0
  71. package/dist/__tests__/unit/worker/errors.test.d.ts.map +1 -0
  72. package/dist/__tests__/unit/worker/errors.test.js +226 -0
  73. package/dist/__tests__/unit/worker/errors.test.js.map +1 -0
  74. package/dist/__tests__/unit/worker/job.test.d.ts +2 -0
  75. package/dist/__tests__/unit/worker/job.test.d.ts.map +1 -0
  76. package/dist/__tests__/unit/worker/job.test.js +233 -0
  77. package/dist/__tests__/unit/worker/job.test.js.map +1 -0
  78. package/dist/client/index.d.ts +10 -0
  79. package/dist/client/index.d.ts.map +1 -0
  80. package/dist/client/index.js +8 -0
  81. package/dist/client/index.js.map +1 -0
  82. package/dist/client/interface.d.ts +142 -0
  83. package/dist/client/interface.d.ts.map +1 -0
  84. package/dist/client/interface.js +8 -0
  85. package/dist/client/interface.js.map +1 -0
  86. package/dist/client/mock.d.ts +95 -0
  87. package/dist/client/mock.d.ts.map +1 -0
  88. package/dist/client/mock.js +795 -0
  89. package/dist/client/mock.js.map +1 -0
  90. package/dist/client/types.d.ts +344 -0
  91. package/dist/client/types.d.ts.map +1 -0
  92. package/dist/client/types.js +8 -0
  93. package/dist/client/types.js.map +1 -0
  94. package/dist/handoff/gather-api.d.ts +60 -0
  95. package/dist/handoff/gather-api.d.ts.map +1 -0
  96. package/dist/handoff/gather-api.js +130 -0
  97. package/dist/handoff/gather-api.js.map +1 -0
  98. package/dist/handoff/gather.d.ts +59 -0
  99. package/dist/handoff/gather.d.ts.map +1 -0
  100. package/dist/handoff/gather.js +134 -0
  101. package/dist/handoff/gather.js.map +1 -0
  102. package/dist/handoff/index.d.ts +19 -0
  103. package/dist/handoff/index.d.ts.map +1 -0
  104. package/dist/handoff/index.js +25 -0
  105. package/dist/handoff/index.js.map +1 -0
  106. package/dist/handoff/interpret.d.ts +79 -0
  107. package/dist/handoff/interpret.d.ts.map +1 -0
  108. package/dist/handoff/interpret.js +197 -0
  109. package/dist/handoff/interpret.js.map +1 -0
  110. package/dist/handoff/invoke.d.ts +82 -0
  111. package/dist/handoff/invoke.d.ts.map +1 -0
  112. package/dist/handoff/invoke.js +196 -0
  113. package/dist/handoff/invoke.js.map +1 -0
  114. package/dist/handoff/route.d.ts +25 -0
  115. package/dist/handoff/route.d.ts.map +1 -0
  116. package/dist/handoff/route.js +65 -0
  117. package/dist/handoff/route.js.map +1 -0
  118. package/dist/handoff/scatter-api.d.ts +62 -0
  119. package/dist/handoff/scatter-api.d.ts.map +1 -0
  120. package/dist/handoff/scatter-api.js +81 -0
  121. package/dist/handoff/scatter-api.js.map +1 -0
  122. package/dist/handoff/scatter.d.ts +19 -0
  123. package/dist/handoff/scatter.d.ts.map +1 -0
  124. package/dist/handoff/scatter.js +27 -0
  125. package/dist/handoff/scatter.js.map +1 -0
  126. package/dist/handoff/target.d.ts +16 -0
  127. package/dist/handoff/target.d.ts.map +1 -0
  128. package/dist/handoff/target.js +51 -0
  129. package/dist/handoff/target.js.map +1 -0
  130. package/dist/index.d.ts +42 -0
  131. package/dist/index.d.ts.map +1 -0
  132. package/dist/index.js +52 -0
  133. package/dist/index.js.map +1 -0
  134. package/dist/logging/index.d.ts +4 -0
  135. package/dist/logging/index.d.ts.map +1 -0
  136. package/dist/logging/index.js +3 -0
  137. package/dist/logging/index.js.map +1 -0
  138. package/dist/logging/logger.d.ts +52 -0
  139. package/dist/logging/logger.d.ts.map +1 -0
  140. package/dist/logging/logger.js +70 -0
  141. package/dist/logging/logger.js.map +1 -0
  142. package/dist/logging/writer.d.ts +63 -0
  143. package/dist/logging/writer.d.ts.map +1 -0
  144. package/dist/logging/writer.js +160 -0
  145. package/dist/logging/writer.js.map +1 -0
  146. package/dist/resume/index.d.ts +77 -0
  147. package/dist/resume/index.d.ts.map +1 -0
  148. package/dist/resume/index.js +110 -0
  149. package/dist/resume/index.js.map +1 -0
  150. package/dist/status/index.d.ts +54 -0
  151. package/dist/status/index.d.ts.map +1 -0
  152. package/dist/status/index.js +107 -0
  153. package/dist/status/index.js.map +1 -0
  154. package/dist/traverse/index.d.ts +53 -0
  155. package/dist/traverse/index.d.ts.map +1 -0
  156. package/dist/traverse/index.js +142 -0
  157. package/dist/traverse/index.js.map +1 -0
  158. package/dist/types/batch.d.ts +53 -0
  159. package/dist/types/batch.d.ts.map +1 -0
  160. package/dist/types/batch.js +2 -0
  161. package/dist/types/batch.js.map +1 -0
  162. package/dist/types/index.d.ts +10 -0
  163. package/dist/types/index.d.ts.map +1 -0
  164. package/dist/types/index.js +2 -0
  165. package/dist/types/index.js.map +1 -0
  166. package/dist/types/klados.d.ts +63 -0
  167. package/dist/types/klados.d.ts.map +1 -0
  168. package/dist/types/klados.js +2 -0
  169. package/dist/types/klados.js.map +1 -0
  170. package/dist/types/log.d.ts +107 -0
  171. package/dist/types/log.d.ts.map +1 -0
  172. package/dist/types/log.js +2 -0
  173. package/dist/types/log.js.map +1 -0
  174. package/dist/types/refs.d.ts +58 -0
  175. package/dist/types/refs.d.ts.map +1 -0
  176. package/dist/types/refs.js +43 -0
  177. package/dist/types/refs.js.map +1 -0
  178. package/dist/types/request.d.ts +69 -0
  179. package/dist/types/request.d.ts.map +1 -0
  180. package/dist/types/request.js +2 -0
  181. package/dist/types/request.js.map +1 -0
  182. package/dist/types/response.d.ts +31 -0
  183. package/dist/types/response.d.ts.map +1 -0
  184. package/dist/types/response.js +2 -0
  185. package/dist/types/response.js.map +1 -0
  186. package/dist/types/rhiza.d.ts +100 -0
  187. package/dist/types/rhiza.d.ts.map +1 -0
  188. package/dist/types/rhiza.js +2 -0
  189. package/dist/types/rhiza.js.map +1 -0
  190. package/dist/types/status.d.ts +84 -0
  191. package/dist/types/status.d.ts.map +1 -0
  192. package/dist/types/status.js +2 -0
  193. package/dist/types/status.js.map +1 -0
  194. package/dist/utils/id.d.ts +15 -0
  195. package/dist/utils/id.d.ts.map +1 -0
  196. package/dist/utils/id.js +25 -0
  197. package/dist/utils/id.js.map +1 -0
  198. package/dist/utils/index.d.ts +2 -0
  199. package/dist/utils/index.d.ts.map +1 -0
  200. package/dist/utils/index.js +2 -0
  201. package/dist/utils/index.js.map +1 -0
  202. package/dist/validation/index.d.ts +9 -0
  203. package/dist/validation/index.d.ts.map +1 -0
  204. package/dist/validation/index.js +9 -0
  205. package/dist/validation/index.js.map +1 -0
  206. package/dist/validation/validate-klados.d.ts +38 -0
  207. package/dist/validation/validate-klados.d.ts.map +1 -0
  208. package/dist/validation/validate-klados.js +139 -0
  209. package/dist/validation/validate-klados.js.map +1 -0
  210. package/dist/validation/validate-rhiza.d.ts +29 -0
  211. package/dist/validation/validate-rhiza.d.ts.map +1 -0
  212. package/dist/validation/validate-rhiza.js +382 -0
  213. package/dist/validation/validate-rhiza.js.map +1 -0
  214. package/dist/validation/validate-runtime.d.ts +28 -0
  215. package/dist/validation/validate-runtime.d.ts.map +1 -0
  216. package/dist/validation/validate-runtime.js +212 -0
  217. package/dist/validation/validate-runtime.js.map +1 -0
  218. package/dist/worker/errors.d.ts +77 -0
  219. package/dist/worker/errors.d.ts.map +1 -0
  220. package/dist/worker/errors.js +143 -0
  221. package/dist/worker/errors.js.map +1 -0
  222. package/dist/worker/index.d.ts +8 -0
  223. package/dist/worker/index.d.ts.map +1 -0
  224. package/dist/worker/index.js +8 -0
  225. package/dist/worker/index.js.map +1 -0
  226. package/dist/worker/job.d.ts +150 -0
  227. package/dist/worker/job.d.ts.map +1 -0
  228. package/dist/worker/job.js +280 -0
  229. package/dist/worker/job.js.map +1 -0
  230. package/package.json +48 -0
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Status Module
3
+ *
4
+ * Functions for building workflow status from log chains.
5
+ * Status provides an overview of workflow execution progress.
6
+ */
7
+ import type { KladosLogEntry } from '../types';
8
+ /**
9
+ * Overall workflow status
10
+ */
11
+ export type WorkflowStatusType = 'pending' | 'running' | 'done' | 'error' | 'unknown';
12
+ /**
13
+ * Progress counters
14
+ */
15
+ export interface ProgressCounters {
16
+ total: number;
17
+ pending: number;
18
+ running: number;
19
+ done: number;
20
+ error: number;
21
+ }
22
+ /**
23
+ * Error summary in status
24
+ */
25
+ export interface StatusError {
26
+ kladosId: string;
27
+ jobId: string;
28
+ code: string;
29
+ message: string;
30
+ retryable: boolean;
31
+ }
32
+ /**
33
+ * Complete workflow status
34
+ */
35
+ export interface WorkflowStatus {
36
+ rhizaId: string;
37
+ status: WorkflowStatusType;
38
+ progress: ProgressCounters;
39
+ currentKladoi: string[];
40
+ errors: StatusError[];
41
+ startedAt?: string;
42
+ completedAt?: string;
43
+ }
44
+ /**
45
+ * Build workflow status from log chain
46
+ *
47
+ * Analyzes all logs to determine overall status, progress,
48
+ * current execution points, and any errors.
49
+ *
50
+ * @param logs - The log chain for the workflow
51
+ * @returns Complete workflow status
52
+ */
53
+ export declare function buildStatusFromLogs(logs: KladosLogEntry[]): WorkflowStatus;
54
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/status/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG/C;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AAEtF;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,cAAc,CAyD1E"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Status Module
3
+ *
4
+ * Functions for building workflow status from log chains.
5
+ * Status provides an overview of workflow execution progress.
6
+ */
7
+ import { findLeaves } from '../traverse';
8
+ /**
9
+ * Build workflow status from log chain
10
+ *
11
+ * Analyzes all logs to determine overall status, progress,
12
+ * current execution points, and any errors.
13
+ *
14
+ * @param logs - The log chain for the workflow
15
+ * @returns Complete workflow status
16
+ */
17
+ export function buildStatusFromLogs(logs) {
18
+ if (logs.length === 0) {
19
+ return {
20
+ rhizaId: '',
21
+ status: 'unknown',
22
+ progress: { total: 0, pending: 0, running: 0, done: 0, error: 0 },
23
+ currentKladoi: [],
24
+ errors: [],
25
+ };
26
+ }
27
+ // Get rhiza ID from first log (empty string if not a workflow execution)
28
+ const rhizaId = logs[0].rhiza_id ?? '';
29
+ // Count by status
30
+ // Note: Log entries don't have a 'pending' state - they're created when running starts
31
+ const progress = {
32
+ total: logs.length,
33
+ pending: 0, // Logs are created when running starts, so never pending
34
+ running: logs.filter((l) => l.status === 'running').length,
35
+ done: logs.filter((l) => l.status === 'done').length,
36
+ error: logs.filter((l) => l.status === 'error').length,
37
+ };
38
+ // Find currently running kladoi
39
+ const currentKladoi = logs
40
+ .filter((l) => l.status === 'running')
41
+ .map((l) => l.klados_id);
42
+ // Collect errors
43
+ const errors = logs
44
+ .filter((l) => l.status === 'error')
45
+ .map((l) => ({
46
+ kladosId: l.klados_id,
47
+ jobId: l.job_id,
48
+ code: l.error?.code ?? 'UNKNOWN',
49
+ message: l.error?.message ?? 'Unknown error',
50
+ retryable: l.error?.retryable ?? false,
51
+ }));
52
+ // Determine overall status from leaves
53
+ const leaves = findLeaves(logs);
54
+ const status = determineOverallStatus(leaves);
55
+ // Timing
56
+ const startedAt = findEarliestStart(logs);
57
+ const completedAt = status === 'running' ? undefined : findLatestCompletion(logs);
58
+ return {
59
+ rhizaId,
60
+ status,
61
+ progress,
62
+ currentKladoi,
63
+ errors,
64
+ startedAt,
65
+ completedAt,
66
+ };
67
+ }
68
+ /**
69
+ * Determine overall status from leaf nodes
70
+ */
71
+ function determineOverallStatus(leaves) {
72
+ if (leaves.length === 0) {
73
+ return 'unknown';
74
+ }
75
+ // If any leaf is running, workflow is running
76
+ if (leaves.some((l) => l.status === 'running')) {
77
+ return 'running';
78
+ }
79
+ // If any leaf is error, workflow has errors
80
+ if (leaves.some((l) => l.status === 'error')) {
81
+ return 'error';
82
+ }
83
+ // All leaves are done
84
+ return 'done';
85
+ }
86
+ /**
87
+ * Find earliest start time
88
+ */
89
+ function findEarliestStart(logs) {
90
+ const starts = logs
91
+ .map((l) => l.started_at)
92
+ .filter((s) => s !== undefined)
93
+ .sort();
94
+ return starts[0];
95
+ }
96
+ /**
97
+ * Find latest completion time
98
+ */
99
+ function findLatestCompletion(logs) {
100
+ const completions = logs
101
+ .map((l) => l.completed_at)
102
+ .filter((c) => c !== undefined)
103
+ .sort()
104
+ .reverse();
105
+ return completions[0];
106
+ }
107
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/status/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Log Chain Traversal
3
+ *
4
+ * Functions for traversing log chains to find leaves, errors, and build trees.
5
+ * Log chains represent the execution history of a workflow.
6
+ */
7
+ import type { KladosLogEntry } from '../types';
8
+ /**
9
+ * Node in a log tree
10
+ */
11
+ export interface LogNode {
12
+ log: KladosLogEntry;
13
+ children: LogNode[];
14
+ }
15
+ /**
16
+ * Error leaf with context for resume
17
+ */
18
+ export interface ErrorLeaf {
19
+ log: KladosLogEntry;
20
+ path: string[];
21
+ retryable: boolean;
22
+ }
23
+ /**
24
+ * Find all leaf logs (logs with no children)
25
+ *
26
+ * A leaf is a log that has no other logs pointing to it via from_logs.
27
+ * Leaves represent the current frontier of execution.
28
+ *
29
+ * @param logs - Array of log entries
30
+ * @returns Array of leaf log entries
31
+ */
32
+ export declare function findLeaves(logs: KladosLogEntry[]): KladosLogEntry[];
33
+ /**
34
+ * Find all error leaves with context for resume
35
+ *
36
+ * Returns logs with status: error that are also leaves (no successful children).
37
+ * Includes the path from root for debugging and the retryable flag.
38
+ *
39
+ * @param logs - Array of log entries
40
+ * @returns Array of error leaves with context
41
+ */
42
+ export declare function findErrorLeaves(logs: KladosLogEntry[]): ErrorLeaf[];
43
+ /**
44
+ * Build a tree structure from log entries
45
+ *
46
+ * The tree starts from the root log (no parents) and follows the
47
+ * from_logs references to build parent-child relationships.
48
+ *
49
+ * @param logs - Array of log entries
50
+ * @returns Root node of the tree, or null if empty
51
+ */
52
+ export declare function buildLogTree(logs: KladosLogEntry[]): LogNode | null;
53
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/traverse/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,cAAc,CAAC;IACpB,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,cAAc,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE,CAwBnE;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,SAAS,EAAE,CAiBnE;AAkED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,OAAO,GAAG,IAAI,CAmBnE"}
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Log Chain Traversal
3
+ *
4
+ * Functions for traversing log chains to find leaves, errors, and build trees.
5
+ * Log chains represent the execution history of a workflow.
6
+ */
7
+ /**
8
+ * Find all leaf logs (logs with no children)
9
+ *
10
+ * A leaf is a log that has no other logs pointing to it via from_logs.
11
+ * Leaves represent the current frontier of execution.
12
+ *
13
+ * @param logs - Array of log entries
14
+ * @returns Array of leaf log entries
15
+ */
16
+ export function findLeaves(logs) {
17
+ if (logs.length === 0) {
18
+ return [];
19
+ }
20
+ // Build a set of all log IDs that are referenced as parents
21
+ const parentIds = new Set();
22
+ for (const log of logs) {
23
+ if (log.received?.from_logs) {
24
+ for (const parentId of log.received.from_logs) {
25
+ parentIds.add(parentId);
26
+ }
27
+ }
28
+ }
29
+ // Leaves are logs that are not parents of any other log
30
+ const leaves = logs.filter((log) => {
31
+ // A leaf is not referenced as a parent by any other log
32
+ return !logs.some((other) => other.received?.from_logs?.includes(log.id));
33
+ });
34
+ return leaves;
35
+ }
36
+ /**
37
+ * Find all error leaves with context for resume
38
+ *
39
+ * Returns logs with status: error that are also leaves (no successful children).
40
+ * Includes the path from root for debugging and the retryable flag.
41
+ *
42
+ * @param logs - Array of log entries
43
+ * @returns Array of error leaves with context
44
+ */
45
+ export function findErrorLeaves(logs) {
46
+ if (logs.length === 0) {
47
+ return [];
48
+ }
49
+ // Build parent map for path construction
50
+ const parentMap = buildParentMap(logs);
51
+ // Find leaves that are errors
52
+ const leaves = findLeaves(logs);
53
+ const errorLeaves = leaves.filter((l) => l.status === 'error');
54
+ return errorLeaves.map((log) => ({
55
+ log,
56
+ path: buildPath(log, parentMap, logs),
57
+ retryable: log.error?.retryable ?? false,
58
+ }));
59
+ }
60
+ /**
61
+ * Build a map from log ID to its parent log IDs
62
+ */
63
+ function buildParentMap(logs) {
64
+ const parentMap = new Map();
65
+ for (const log of logs) {
66
+ if (log.received?.from_logs) {
67
+ parentMap.set(log.id, log.received.from_logs);
68
+ }
69
+ }
70
+ return parentMap;
71
+ }
72
+ /**
73
+ * Build the path from root to a log
74
+ */
75
+ function buildPath(log, parentMap, logs) {
76
+ const logById = new Map(logs.map((l) => [l.id, l]));
77
+ const path = [];
78
+ const visited = new Set();
79
+ function traverse(currentId) {
80
+ if (visited.has(currentId)) {
81
+ return false;
82
+ }
83
+ visited.add(currentId);
84
+ const current = logById.get(currentId);
85
+ if (!current) {
86
+ return false;
87
+ }
88
+ const parents = parentMap.get(currentId);
89
+ if (!parents || parents.length === 0) {
90
+ // This is the root
91
+ path.unshift(current.klados_id);
92
+ return true;
93
+ }
94
+ // Traverse to first parent
95
+ if (traverse(parents[0])) {
96
+ path.push(current.klados_id);
97
+ return true;
98
+ }
99
+ return false;
100
+ }
101
+ traverse(log.id);
102
+ // If path is empty or doesn't include this log, add it
103
+ if (path.length === 0 || path[path.length - 1] !== log.klados_id) {
104
+ path.push(log.klados_id);
105
+ }
106
+ return path;
107
+ }
108
+ /**
109
+ * Build a tree structure from log entries
110
+ *
111
+ * The tree starts from the root log (no parents) and follows the
112
+ * from_logs references to build parent-child relationships.
113
+ *
114
+ * @param logs - Array of log entries
115
+ * @returns Root node of the tree, or null if empty
116
+ */
117
+ export function buildLogTree(logs) {
118
+ if (logs.length === 0) {
119
+ return null;
120
+ }
121
+ const logById = new Map(logs.map((l) => [l.id, l]));
122
+ // Find root(s) - logs with no parents
123
+ const roots = logs.filter((log) => !log.received?.from_logs || log.received.from_logs.length === 0);
124
+ if (roots.length === 0) {
125
+ // No clear root, use the first log
126
+ return buildNode(logs[0], logById, logs);
127
+ }
128
+ // Use first root (typically there's only one)
129
+ return buildNode(roots[0], logById, logs);
130
+ }
131
+ /**
132
+ * Build a node and its children recursively
133
+ */
134
+ function buildNode(log, logById, allLogs) {
135
+ // Find children - logs that have this log as a parent
136
+ const children = allLogs.filter((other) => other.received?.from_logs?.includes(log.id));
137
+ return {
138
+ log,
139
+ children: children.map((child) => buildNode(child, logById, allLogs)),
140
+ };
141
+ }
142
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/traverse/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAqBH;;;;;;;;GAQG;AACH,MAAM,UAAU,UAAU,CAAC,IAAsB;IAC/C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,4DAA4D;IAC5D,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC;YAC5B,KAAK,MAAM,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;gBAC9C,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;IAED,wDAAwD;IACxD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;QACjC,wDAAwD;QACxD,OAAO,CAAC,IAAI,CAAC,IAAI,CACf,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CACvD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,IAAsB;IACpD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,yCAAyC;IACzC,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAEvC,8BAA8B;IAC9B,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC;IAE/D,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC/B,GAAG;QACH,IAAI,EAAE,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC;QACrC,SAAS,EAAE,GAAG,CAAC,KAAK,EAAE,SAAS,IAAI,KAAK;KACzC,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,IAAsB;IAC5C,MAAM,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;IAE9C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC;YAC5B,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAS,SAAS,CAChB,GAAmB,EACnB,SAAgC,EAChC,IAAsB;IAEtB,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAElC,SAAS,QAAQ,CAAC,SAAiB;QACjC,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAEvB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrC,mBAAmB;YACnB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,2BAA2B;QAC3B,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAC7B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEjB,uDAAuD;IACvD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,SAAS,EAAE,CAAC;QACjE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,IAAsB;IACjD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAEpD,sCAAsC;IACtC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CACvB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CACzE,CAAC;IAEF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,mCAAmC;QACnC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,8CAA8C;IAC9C,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,SAAS,SAAS,CAChB,GAAmB,EACnB,OAAoC,EACpC,OAAyB;IAEzB,sDAAsD;IACtD,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAC7B,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CACvD,CAAC;IAEF,OAAO;QACL,GAAG;QACH,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;KACtE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * BatchEntity - Entity for coordinating scatter/gather
3
+ */
4
+ export interface BatchEntity {
5
+ /** Entity ID */
6
+ id: string;
7
+ /** Entity type */
8
+ type: 'batch';
9
+ properties: BatchProperties;
10
+ }
11
+ export interface BatchProperties {
12
+ /** Rhiza entity ID */
13
+ rhiza_id: string;
14
+ /** Job ID */
15
+ job_id: string;
16
+ /** Klados ID that created this batch */
17
+ source_klados: string;
18
+ /** Klados ID that receives gathered results */
19
+ gather_klados: string;
20
+ /** Total number of slots */
21
+ total: number;
22
+ /** Number of completed slots */
23
+ completed: number;
24
+ /** Overall batch status */
25
+ status: 'pending' | 'complete' | 'error';
26
+ /** Individual slot states */
27
+ slots: BatchSlot[];
28
+ /** When batch was created (ISO 8601) */
29
+ created_at: string;
30
+ /** When batch completed (ISO 8601) */
31
+ completed_at?: string;
32
+ }
33
+ /**
34
+ * BatchSlot - State of a single slot in the batch
35
+ */
36
+ export interface BatchSlot {
37
+ /** Slot index (0-based) */
38
+ index: number;
39
+ /** Slot status */
40
+ status: 'pending' | 'complete' | 'error';
41
+ /** Output entity IDs (if complete) */
42
+ output_ids?: string[];
43
+ /** Job ID that processed this slot */
44
+ job_id?: string;
45
+ /** When slot completed (ISO 8601) */
46
+ completed_at?: string;
47
+ /** Error info (if error) */
48
+ error?: {
49
+ code: string;
50
+ message: string;
51
+ };
52
+ }
53
+ //# sourceMappingURL=batch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch.d.ts","sourceRoot":"","sources":["../../src/types/batch.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,gBAAgB;IAChB,EAAE,EAAE,MAAM,CAAC;IAEX,kBAAkB;IAClB,IAAI,EAAE,OAAO,CAAC;IAEd,UAAU,EAAE,eAAe,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,sBAAsB;IACtB,QAAQ,EAAE,MAAM,CAAC;IAEjB,aAAa;IACb,MAAM,EAAE,MAAM,CAAC;IAEf,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAC;IAEtB,+CAA+C;IAC/C,aAAa,EAAE,MAAM,CAAC;IAEtB,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IAEd,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAElB,2BAA2B;IAC3B,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;IAEzC,6BAA6B;IAC7B,KAAK,EAAE,SAAS,EAAE,CAAC;IAEnB,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IAEnB,sCAAsC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IAEd,kBAAkB;IAClB,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;IAEzC,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAEtB,sCAAsC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,qCAAqC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,4BAA4B;IAC5B,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=batch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch.js","sourceRoot":"","sources":["../../src/types/batch.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ export type { EntityRef } from './refs';
2
+ export { isEntityRef, ref } from './refs';
3
+ export type { KladosEntity, KladosProperties, ContractSpec, } from './klados';
4
+ export type { RhizaEntity, RhizaProperties, FlowStep, ThenSpec, RouteRule, WhereCondition, WhereEquals, WhereAnd, WhereOr, } from './rhiza';
5
+ export type { KladosRequest, RhizaContext, BatchContext, } from './request';
6
+ export type { KladosResponse, KladosResult, } from './response';
7
+ export type { KladosLogEntry, HandoffRecord, InvocationRecord, LogMessage, JobLog, } from './log';
8
+ export type { BatchEntity, BatchProperties, BatchSlot, } from './batch';
9
+ export type { WorkflowStatus, ProgressCounters, LogChainEntry, ErrorSummary, ResumeResult, ResumedJob, } from './status';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAG1C,YAAY,EACV,YAAY,EACZ,gBAAgB,EAChB,YAAY,GACb,MAAM,UAAU,CAAC;AAGlB,YAAY,EACV,WAAW,EACX,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,cAAc,EACd,WAAW,EACX,QAAQ,EACR,OAAO,GACR,MAAM,SAAS,CAAC;AAGjB,YAAY,EACV,aAAa,EACb,YAAY,EACZ,YAAY,GACb,MAAM,WAAW,CAAC;AAGnB,YAAY,EACV,cAAc,EACd,YAAY,GACb,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,MAAM,GACP,MAAM,OAAO,CAAC;AAGf,YAAY,EACV,WAAW,EACX,eAAe,EACf,SAAS,GACV,MAAM,SAAS,CAAC;AAGjB,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,UAAU,GACX,MAAM,UAAU,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { isEntityRef, ref } from './refs';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * KladosEntity - A standalone action entity
3
+ *
4
+ * Kladoi are first-class entities that can be:
5
+ * - Invoked directly via POST /kladoi/:id/invoke
6
+ * - Composed into workflows (rhizai)
7
+ * - Reused across multiple rhizai
8
+ */
9
+ export interface KladosEntity {
10
+ /** Unique identifier (Arke entity ID) */
11
+ id: string;
12
+ /** Entity type */
13
+ type: 'klados';
14
+ properties: KladosProperties;
15
+ relationships?: Array<{
16
+ predicate: string;
17
+ peer: string;
18
+ peer_type?: string;
19
+ peer_label?: string;
20
+ properties?: Record<string, unknown>;
21
+ }>;
22
+ }
23
+ export interface KladosProperties {
24
+ /** Human-readable name */
25
+ label: string;
26
+ /** Description of what this klados does */
27
+ description?: string;
28
+ /** Endpoint URL where this klados is deployed */
29
+ endpoint: string;
30
+ /** Permissions required on target collection */
31
+ actions_required: string[];
32
+ /** Input contract - what this klados accepts */
33
+ accepts: ContractSpec;
34
+ /** Output contract - what this klados produces */
35
+ produces: ContractSpec;
36
+ /** Optional JSON Schema for additional input parameters */
37
+ input_schema?: Record<string, unknown>;
38
+ /** Status */
39
+ status: 'development' | 'active' | 'disabled';
40
+ /** When endpoint was verified */
41
+ endpoint_verified_at?: string;
42
+ /** Timestamps */
43
+ created_at?: string;
44
+ updated_at?: string;
45
+ }
46
+ /**
47
+ * ContractSpec - Input/output contract
48
+ */
49
+ export interface ContractSpec {
50
+ /**
51
+ * Accepted/produced content types
52
+ * Use ["*"] to accept/produce anything
53
+ * Examples: ["file/pdf"], ["file/jpeg", "file/png"], ["*"]
54
+ */
55
+ types: string[];
56
+ /**
57
+ * Cardinality
58
+ * - 'one': Single entity
59
+ * - 'many': Multiple entities (array)
60
+ */
61
+ cardinality: 'one' | 'many';
62
+ }
63
+ //# sourceMappingURL=klados.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"klados.d.ts","sourceRoot":"","sources":["../../src/types/klados.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IAC3B,yCAAyC;IACzC,EAAE,EAAE,MAAM,CAAC;IAEX,kBAAkB;IAClB,IAAI,EAAE,QAAQ,CAAC;IAEf,UAAU,EAAE,gBAAgB,CAAC;IAE7B,aAAa,CAAC,EAAE,KAAK,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACtC,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,gBAAgB;IAC/B,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;IAEd,2CAA2C;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,iDAAiD;IACjD,QAAQ,EAAE,MAAM,CAAC;IAEjB,gDAAgD;IAChD,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAE3B,gDAAgD;IAChD,OAAO,EAAE,YAAY,CAAC;IAEtB,kDAAkD;IAClD,QAAQ,EAAE,YAAY,CAAC;IAEvB,2DAA2D;IAC3D,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEvC,aAAa;IACb,MAAM,EAAE,aAAa,GAAG,QAAQ,GAAG,UAAU,CAAC;IAE9C,iCAAiC;IACjC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B,iBAAiB;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,KAAK,EAAE,MAAM,EAAE,CAAC;IAEhB;;;;OAIG;IACH,WAAW,EAAE,KAAK,GAAG,MAAM,CAAC;CAC7B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=klados.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"klados.js","sourceRoot":"","sources":["../../src/types/klados.ts"],"names":[],"mappings":""}
@@ -0,0 +1,107 @@
1
+ import type { KladosRequest } from './request';
2
+ /**
3
+ * KladosLogEntry - Log entry written by each klados
4
+ *
5
+ * This is the critical data structure for resumability.
6
+ */
7
+ export interface KladosLogEntry {
8
+ /** Log entry entity ID */
9
+ id: string;
10
+ /** Entity type marker */
11
+ type: 'klados_log';
12
+ /** Klados entity ID */
13
+ klados_id: string;
14
+ /** Rhiza entity ID (if part of workflow) */
15
+ rhiza_id?: string;
16
+ /** Job ID */
17
+ job_id: string;
18
+ /** When processing started (ISO 8601) */
19
+ started_at: string;
20
+ /** When processing completed (ISO 8601) */
21
+ completed_at?: string;
22
+ /** Current status */
23
+ status: 'running' | 'done' | 'error';
24
+ /** Input (what we received) */
25
+ received: {
26
+ /** Entity ID(s) we processed */
27
+ target: string | string[];
28
+ /**
29
+ * Previous log entry ID(s) for chain traversal
30
+ * - Single ID for pass/scatter
31
+ * - Multiple IDs for gather (all parent siblings)
32
+ * Also stored as relationships on the log entity.
33
+ */
34
+ from_logs?: string[];
35
+ /** Batch context if part of scatter */
36
+ batch?: {
37
+ id: string;
38
+ index: number;
39
+ total: number;
40
+ };
41
+ /** The invocation record that created this job (for resume) */
42
+ invocation?: InvocationRecord;
43
+ };
44
+ /** Produced entity IDs (if done) */
45
+ produced?: {
46
+ entity_ids: string[];
47
+ /** Optional metadata about what was produced */
48
+ metadata?: Record<string, unknown>;
49
+ };
50
+ /** Error (if failed) */
51
+ error?: {
52
+ code: string;
53
+ message: string;
54
+ retryable: boolean;
55
+ };
56
+ /** Handoffs (THE KEY TO RESUMABILITY) */
57
+ handoffs?: HandoffRecord[];
58
+ }
59
+ /**
60
+ * HandoffRecord - Record of a handoff operation
61
+ *
62
+ * Three core types: pass, scatter, gather
63
+ * Target can be klados or rhiza (discovered at invocation time)
64
+ */
65
+ export interface HandoffRecord {
66
+ /** Handoff type (core operations only) */
67
+ type: 'pass' | 'scatter' | 'gather';
68
+ /** Target ID (klados or rhiza) */
69
+ target: string;
70
+ /** Whether target is a klados or rhiza (discovered at invocation) */
71
+ target_type: 'klados' | 'rhiza';
72
+ /** Batch entity ID (if scatter) */
73
+ batch_id?: string;
74
+ /** All invocations we made (fire-and-forget) */
75
+ invocations: InvocationRecord[];
76
+ }
77
+ /**
78
+ * InvocationRecord - Record of a single invocation
79
+ *
80
+ * Fire-and-forget: we record what we sent, not the result.
81
+ * The invoked klados creates its own log entry pointing back to us.
82
+ */
83
+ export interface InvocationRecord {
84
+ /** The exact request we made (for replay on resume) */
85
+ request: KladosRequest;
86
+ /** Batch index (if part of scatter) */
87
+ batch_index?: number;
88
+ }
89
+ /**
90
+ * LogMessage - Human-readable log message
91
+ */
92
+ export interface LogMessage {
93
+ level: 'info' | 'warning' | 'error' | 'success';
94
+ message: string;
95
+ timestamp: string;
96
+ metadata?: Record<string, unknown>;
97
+ }
98
+ /**
99
+ * JobLog - Full log structure written to file
100
+ */
101
+ export interface JobLog {
102
+ entry: KladosLogEntry;
103
+ agent_id: string;
104
+ agent_version: string;
105
+ messages: LogMessage[];
106
+ }
107
+ //# sourceMappingURL=log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../src/types/log.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE/C;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,0BAA0B;IAC1B,EAAE,EAAE,MAAM,CAAC;IAEX,yBAAyB;IACzB,IAAI,EAAE,YAAY,CAAC;IAEnB,uBAAuB;IACvB,SAAS,EAAE,MAAM,CAAC;IAElB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,aAAa;IACb,MAAM,EAAE,MAAM,CAAC;IAEf,yCAAyC;IACzC,UAAU,EAAE,MAAM,CAAC;IAEnB,2CAA2C;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,qBAAqB;IACrB,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;IAErC,+BAA+B;IAC/B,QAAQ,EAAE;QACR,gCAAgC;QAChC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAE1B;;;;;WAKG;QACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QAErB,uCAAuC;QACvC,KAAK,CAAC,EAAE;YACN,EAAE,EAAE,MAAM,CAAC;YACX,KAAK,EAAE,MAAM,CAAC;YACd,KAAK,EAAE,MAAM,CAAC;SACf,CAAC;QAEF,+DAA+D;QAC/D,UAAU,CAAC,EAAE,gBAAgB,CAAC;KAC/B,CAAC;IAEF,oCAAoC;IACpC,QAAQ,CAAC,EAAE;QACT,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,gDAAgD;QAChD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACpC,CAAC;IAEF,wBAAwB;IACxB,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;KACpB,CAAC;IAEF,yCAAyC;IACzC,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;CAC5B;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,0CAA0C;IAC1C,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;IAEpC,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC;IAEf,qEAAqE;IACrE,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC;IAEhC,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,gDAAgD;IAChD,WAAW,EAAE,gBAAgB,EAAE,CAAC;CACjC;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,uDAAuD;IACvD,OAAO,EAAE,aAAa,CAAC;IAEvB,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,cAAc,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,UAAU,EAAE,CAAC;CACxB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/types/log.ts"],"names":[],"mappings":""}