@tagma/sdk 0.4.2 → 0.4.4

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 (107) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +5 -5
  3. package/dist/adapters/stdin-approval.d.ts +6 -0
  4. package/dist/adapters/stdin-approval.d.ts.map +1 -0
  5. package/dist/adapters/stdin-approval.js +90 -0
  6. package/dist/adapters/stdin-approval.js.map +1 -0
  7. package/dist/adapters/websocket-approval.d.ts +28 -0
  8. package/dist/adapters/websocket-approval.d.ts.map +1 -0
  9. package/dist/adapters/websocket-approval.js +145 -0
  10. package/dist/adapters/websocket-approval.js.map +1 -0
  11. package/dist/approval.d.ts +13 -0
  12. package/dist/approval.d.ts.map +1 -0
  13. package/dist/approval.js +91 -0
  14. package/dist/approval.js.map +1 -0
  15. package/dist/bootstrap.d.ts +2 -0
  16. package/dist/bootstrap.d.ts.map +1 -0
  17. package/dist/bootstrap.js +30 -0
  18. package/dist/bootstrap.js.map +1 -0
  19. package/dist/completions/exit-code.d.ts +3 -0
  20. package/dist/completions/exit-code.d.ts.map +1 -0
  21. package/dist/completions/exit-code.js +25 -0
  22. package/dist/completions/exit-code.js.map +1 -0
  23. package/dist/completions/file-exists.d.ts +3 -0
  24. package/dist/completions/file-exists.d.ts.map +1 -0
  25. package/dist/completions/file-exists.js +58 -0
  26. package/dist/completions/file-exists.js.map +1 -0
  27. package/dist/completions/output-check.d.ts +3 -0
  28. package/dist/completions/output-check.d.ts.map +1 -0
  29. package/dist/completions/output-check.js +81 -0
  30. package/dist/completions/output-check.js.map +1 -0
  31. package/dist/config-ops.d.ts +55 -0
  32. package/dist/config-ops.d.ts.map +1 -0
  33. package/dist/config-ops.js +258 -0
  34. package/dist/config-ops.js.map +1 -0
  35. package/dist/dag.d.ts +46 -0
  36. package/dist/dag.d.ts.map +1 -0
  37. package/dist/dag.js +193 -0
  38. package/dist/dag.js.map +1 -0
  39. package/dist/drivers/claude-code.d.ts +3 -0
  40. package/dist/drivers/claude-code.d.ts.map +1 -0
  41. package/dist/drivers/claude-code.js +210 -0
  42. package/dist/drivers/claude-code.js.map +1 -0
  43. package/dist/engine.d.ts +89 -0
  44. package/dist/engine.d.ts.map +1 -0
  45. package/dist/engine.js +815 -0
  46. package/dist/engine.js.map +1 -0
  47. package/dist/hooks.d.ts +73 -0
  48. package/dist/hooks.d.ts.map +1 -0
  49. package/dist/hooks.js +103 -0
  50. package/dist/hooks.js.map +1 -0
  51. package/dist/logger.d.ts +61 -0
  52. package/dist/logger.d.ts.map +1 -0
  53. package/dist/logger.js +151 -0
  54. package/dist/logger.js.map +1 -0
  55. package/dist/middlewares/static-context.d.ts +3 -0
  56. package/dist/middlewares/static-context.d.ts.map +1 -0
  57. package/dist/middlewares/static-context.js +36 -0
  58. package/dist/middlewares/static-context.js.map +1 -0
  59. package/dist/pipeline-runner.d.ts +50 -0
  60. package/dist/pipeline-runner.d.ts.map +1 -0
  61. package/dist/pipeline-runner.js +139 -0
  62. package/dist/pipeline-runner.js.map +1 -0
  63. package/dist/registry.d.ts +43 -0
  64. package/dist/registry.d.ts.map +1 -0
  65. package/dist/registry.js +182 -0
  66. package/dist/registry.js.map +1 -0
  67. package/dist/runner.d.ts +19 -0
  68. package/dist/runner.d.ts.map +1 -0
  69. package/dist/runner.js +364 -0
  70. package/dist/runner.js.map +1 -0
  71. package/dist/schema.d.ts +27 -0
  72. package/dist/schema.d.ts.map +1 -0
  73. package/dist/schema.js +373 -0
  74. package/dist/schema.js.map +1 -0
  75. package/dist/sdk.d.ts +27 -0
  76. package/dist/sdk.d.ts.map +1 -0
  77. package/dist/sdk.js +33 -0
  78. package/dist/sdk.js.map +1 -0
  79. package/dist/templates.d.ts +20 -0
  80. package/dist/templates.d.ts.map +1 -0
  81. package/dist/templates.js +93 -0
  82. package/dist/templates.js.map +1 -0
  83. package/dist/triggers/file.d.ts +3 -0
  84. package/dist/triggers/file.d.ts.map +1 -0
  85. package/dist/triggers/file.js +123 -0
  86. package/dist/triggers/file.js.map +1 -0
  87. package/dist/triggers/manual.d.ts +3 -0
  88. package/dist/triggers/manual.d.ts.map +1 -0
  89. package/dist/triggers/manual.js +73 -0
  90. package/dist/triggers/manual.js.map +1 -0
  91. package/dist/types.d.ts +4 -0
  92. package/dist/types.d.ts.map +1 -0
  93. package/dist/types.js +14 -0
  94. package/dist/types.js.map +1 -0
  95. package/dist/utils.d.ts +14 -0
  96. package/dist/utils.d.ts.map +1 -0
  97. package/dist/utils.js +138 -0
  98. package/dist/utils.js.map +1 -0
  99. package/dist/validate-raw.d.ts +44 -0
  100. package/dist/validate-raw.d.ts.map +1 -0
  101. package/dist/validate-raw.js +327 -0
  102. package/dist/validate-raw.js.map +1 -0
  103. package/package.json +26 -17
  104. package/src/approval.ts +5 -3
  105. package/src/registry.ts +214 -214
  106. package/src/validate-raw.ts +92 -3
  107. package/scripts/preinstall.js +0 -38
@@ -0,0 +1,327 @@
1
+ // ═══ Raw Pipeline Config Validation ═══
2
+ //
3
+ // Validates a RawPipelineConfig without resolving inheritance or executing
4
+ // anything — intended for real-time feedback in a visual editor (e.g. drag
5
+ // to add a task, live error highlighting).
6
+ //
7
+ // Returns a flat list of ValidationError objects. An empty array means valid.
8
+ const DURATION_RE = /^(\d*\.?\d+)\s*(s|m|h|d)$/;
9
+ function isValidDuration(input) {
10
+ return DURATION_RE.test(input.trim());
11
+ }
12
+ const VALID_ON_FAILURE = new Set(['skip_downstream', 'stop_all', 'ignore']);
13
+ const VALID_MODEL_TIERS = new Set(['low', 'medium', 'high']);
14
+ // Built-in plugin types always known to the SDK core, regardless of which
15
+ // external plugin packages are installed. These MUST stay in sync with the
16
+ // types that `bootstrapBuiltins()` registers, otherwise the editor will
17
+ // emit false-positive "unknown type" warnings for stock pipelines.
18
+ const BUILTIN_TRIGGER_TYPES = new Set(['manual', 'file']);
19
+ const BUILTIN_COMPLETION_TYPES = new Set([
20
+ 'exit_code', 'file_exists', 'output_check',
21
+ ]);
22
+ const BUILTIN_MIDDLEWARE_TYPES = new Set(['static_context']);
23
+ /**
24
+ * Validate a raw pipeline config.
25
+ * Checks structure, required fields, prompt/command exclusivity,
26
+ * depends_on reference integrity, and circular dependencies.
27
+ *
28
+ * Plugin type checks: when `knownTypes` is provided, task/track references to
29
+ * trigger/completion/middleware types that are neither built-in nor in the
30
+ * supplied set produce a soft warning (severity: 'warning') — these don't
31
+ * block save/run but light up the Task panel so users discover the broken
32
+ * reference in the editor instead of at run time. Omit `knownTypes` to skip
33
+ * plugin checks entirely (offline/pre-load validation).
34
+ */
35
+ export function validateRaw(config, knownTypes) {
36
+ const errors = [];
37
+ const knownTriggers = knownTypes
38
+ ? new Set([...BUILTIN_TRIGGER_TYPES, ...(knownTypes.triggers ?? [])])
39
+ : null;
40
+ const knownCompletions = knownTypes
41
+ ? new Set([...BUILTIN_COMPLETION_TYPES, ...(knownTypes.completions ?? [])])
42
+ : null;
43
+ const knownMiddlewares = knownTypes
44
+ ? new Set([...BUILTIN_MIDDLEWARE_TYPES, ...(knownTypes.middlewares ?? [])])
45
+ : null;
46
+ // ── Top level ──
47
+ if (!config.name?.trim()) {
48
+ errors.push({ path: 'name', message: 'Pipeline name is required' });
49
+ }
50
+ if (!config.tracks || config.tracks.length === 0) {
51
+ errors.push({ path: 'tracks', message: 'At least one track is required' });
52
+ return errors; // No point going further without tracks
53
+ }
54
+ // ── Build qualified ID sets for cross-reference checks ──
55
+ // Qualified ID format: "trackId.taskId" (mirrors the engine's convention)
56
+ const allQualified = new Set();
57
+ // bare taskId → qualified ID, or "__ambiguous__" when multiple tracks share that bare name.
58
+ // "__ambiguous__" signals that a bare ref is unresolvable without a track prefix.
59
+ const bareToQualified = new Map();
60
+ const bareIdCount = new Map();
61
+ for (const track of config.tracks) {
62
+ if (!track.id)
63
+ continue;
64
+ for (const task of track.tasks ?? []) {
65
+ if (!task.id)
66
+ continue;
67
+ const qid = `${track.id}.${task.id}`;
68
+ allQualified.add(qid);
69
+ const count = (bareIdCount.get(task.id) ?? 0) + 1;
70
+ bareIdCount.set(task.id, count);
71
+ // Mark as ambiguous when a second track introduces the same bare name.
72
+ bareToQualified.set(task.id, count === 1 ? qid : '__ambiguous__');
73
+ }
74
+ }
75
+ // ── Per-track validation ──
76
+ const seenTrackIds = new Set();
77
+ for (let ti = 0; ti < config.tracks.length; ti++) {
78
+ const track = config.tracks[ti];
79
+ const trackPath = `tracks[${ti}]`;
80
+ if (!track.id?.trim()) {
81
+ errors.push({ path: `${trackPath}.id`, message: 'Track id is required' });
82
+ }
83
+ else if (seenTrackIds.has(track.id)) {
84
+ errors.push({ path: `${trackPath}.id`, message: `Duplicate track id "${track.id}"` });
85
+ }
86
+ else {
87
+ seenTrackIds.add(track.id);
88
+ }
89
+ if (!track.name?.trim()) {
90
+ errors.push({ path: `${trackPath}.name`, message: 'Track name is required' });
91
+ }
92
+ if (track.on_failure && !VALID_ON_FAILURE.has(track.on_failure)) {
93
+ errors.push({ path: `${trackPath}.on_failure`, message: `Invalid on_failure value "${track.on_failure}". Expected "skip_downstream", "stop_all", or "ignore".` });
94
+ }
95
+ if (track.model_tier && !VALID_MODEL_TIERS.has(track.model_tier)) {
96
+ errors.push({ path: `${trackPath}.model_tier`, message: `Invalid model_tier "${track.model_tier}". Expected "low", "medium", or "high".` });
97
+ }
98
+ // Track-level middlewares can reference a plugin that was uninstalled
99
+ // after the YAML was written — surface a warning so the user notices
100
+ // before hitting Run.
101
+ if (knownMiddlewares && track.middlewares) {
102
+ for (let mi = 0; mi < track.middlewares.length; mi++) {
103
+ const mw = track.middlewares[mi];
104
+ if (mw?.type && !knownMiddlewares.has(mw.type)) {
105
+ errors.push({
106
+ path: `${trackPath}.middlewares[${mi}].type`,
107
+ message: `Middleware type "${mw.type}" is not registered. Install the plugin (e.g. @tagma/middleware-${mw.type}) or remove the reference — the pipeline will fail at run time.`,
108
+ severity: 'warning',
109
+ });
110
+ }
111
+ }
112
+ }
113
+ if (!track.tasks || track.tasks.length === 0) {
114
+ errors.push({ path: `${trackPath}.tasks`, message: `Track "${track.id || ti}": must have at least one task` });
115
+ continue;
116
+ }
117
+ // ── Per-task validation ──
118
+ const seenTaskIds = new Set();
119
+ for (let ki = 0; ki < track.tasks.length; ki++) {
120
+ const task = track.tasks[ki];
121
+ const taskPath = `${trackPath}.tasks[${ki}]`;
122
+ if (!task.id?.trim()) {
123
+ errors.push({ path: `${taskPath}.id`, message: 'Task id is required' });
124
+ continue; // Can't check further without an id
125
+ }
126
+ if (seenTaskIds.has(task.id)) {
127
+ errors.push({ path: taskPath, message: `Duplicate task id "${task.id}" in track "${track.id}"` });
128
+ }
129
+ seenTaskIds.add(task.id);
130
+ // Template-based tasks: skip prompt/command checks (params validated at runtime)
131
+ if (task.use)
132
+ continue;
133
+ const hasPromptKey = typeof task.prompt === 'string';
134
+ const hasCommandKey = typeof task.command === 'string';
135
+ const promptEmpty = hasPromptKey && task.prompt.trim().length === 0;
136
+ const commandEmpty = hasCommandKey && task.command.trim().length === 0;
137
+ if (hasPromptKey && hasCommandKey) {
138
+ errors.push({
139
+ path: taskPath,
140
+ message: `Task "${task.id}": cannot have both "prompt" and "command"`,
141
+ });
142
+ }
143
+ else if (!hasPromptKey && !hasCommandKey) {
144
+ errors.push({
145
+ path: taskPath,
146
+ message: `Task "${task.id}": must have "prompt" or "command"`,
147
+ });
148
+ }
149
+ else if (promptEmpty) {
150
+ errors.push({
151
+ path: taskPath,
152
+ message: `Task "${task.id}": prompt content cannot be empty`,
153
+ });
154
+ }
155
+ else if (commandEmpty) {
156
+ errors.push({
157
+ path: taskPath,
158
+ message: `Task "${task.id}": command content cannot be empty`,
159
+ });
160
+ }
161
+ // ── Field-level validations ──
162
+ if (task.timeout && !isValidDuration(task.timeout)) {
163
+ errors.push({ path: `${taskPath}.timeout`, message: `Invalid duration format "${task.timeout}". Expected e.g. "30s", "5m", "1h".` });
164
+ }
165
+ if (task.model_tier && !VALID_MODEL_TIERS.has(task.model_tier)) {
166
+ errors.push({ path: `${taskPath}.model_tier`, message: `Invalid model_tier "${task.model_tier}". Expected "low", "medium", or "high".` });
167
+ }
168
+ // ── Plugin type warnings (trigger / completion / middlewares) ──
169
+ // Only fire when the host supplied a `knownTypes` snapshot, so offline
170
+ // validation stays quiet. The messages deliberately name the npm
171
+ // scope so users can copy-paste the install command.
172
+ if (knownTriggers && task.trigger?.type && !knownTriggers.has(task.trigger.type)) {
173
+ errors.push({
174
+ path: `${taskPath}.trigger.type`,
175
+ message: `Trigger type "${task.trigger.type}" is not registered. Install the plugin (e.g. @tagma/trigger-${task.trigger.type}) or the task will fail at run time.`,
176
+ severity: 'warning',
177
+ });
178
+ }
179
+ if (knownCompletions && task.completion?.type && !knownCompletions.has(task.completion.type)) {
180
+ errors.push({
181
+ path: `${taskPath}.completion.type`,
182
+ message: `Completion type "${task.completion.type}" is not registered. Install the plugin (e.g. @tagma/completion-${task.completion.type}) or the task will fail at run time.`,
183
+ severity: 'warning',
184
+ });
185
+ }
186
+ if (knownMiddlewares && task.middlewares) {
187
+ for (let mi = 0; mi < task.middlewares.length; mi++) {
188
+ const mw = task.middlewares[mi];
189
+ if (mw?.type && !knownMiddlewares.has(mw.type)) {
190
+ errors.push({
191
+ path: `${taskPath}.middlewares[${mi}].type`,
192
+ message: `Middleware type "${mw.type}" is not registered. Install the plugin (e.g. @tagma/middleware-${mw.type}) or remove the reference — the pipeline will fail at run time.`,
193
+ severity: 'warning',
194
+ });
195
+ }
196
+ }
197
+ }
198
+ // ── depends_on reference checks ──
199
+ if (task.depends_on && task.depends_on.length > 0) {
200
+ for (const dep of task.depends_on) {
201
+ const resolved = resolveDepRef(dep, track.id, allQualified, bareToQualified);
202
+ if (!resolved) {
203
+ errors.push({
204
+ path: `${taskPath}.depends_on`,
205
+ message: `Task "${task.id}": depends_on "${dep}" — no such task found`,
206
+ });
207
+ }
208
+ else if (resolved === '__ambiguous__') {
209
+ errors.push({
210
+ path: `${taskPath}.depends_on`,
211
+ message: `Task "${task.id}": depends_on "${dep}" is ambiguous — multiple tracks have a task with this id. Use the fully-qualified form "trackId.${dep}".`,
212
+ });
213
+ }
214
+ }
215
+ }
216
+ // ── continue_from reference check ──
217
+ if (task.continue_from) {
218
+ const resolved = resolveDepRef(task.continue_from, track.id, allQualified, bareToQualified);
219
+ if (!resolved) {
220
+ errors.push({
221
+ path: `${taskPath}.continue_from`,
222
+ message: `Task "${task.id}": continue_from "${task.continue_from}" — no such task found`,
223
+ });
224
+ }
225
+ else if (resolved === '__ambiguous__') {
226
+ errors.push({
227
+ path: `${taskPath}.continue_from`,
228
+ message: `Task "${task.id}": continue_from "${task.continue_from}" is ambiguous — multiple tracks have a task with this id. Use the fully-qualified form "trackId.${task.continue_from}".`,
229
+ });
230
+ }
231
+ else if (!task.depends_on || !task.depends_on.some(dep => resolveDepRef(dep, track.id, allQualified, bareToQualified) === resolved)) {
232
+ // H8: demote to a warning. dag.ts/buildDag inserts continue_from
233
+ // as an implicit dependency at runtime, so the pipeline runs fine
234
+ // without the explicit listing. Treat as a style hint rather than
235
+ // blocking save / run, otherwise we frighten users with a red
236
+ // "Configuration error" for code that would have run successfully.
237
+ errors.push({
238
+ path: `${taskPath}.continue_from`,
239
+ message: `Task "${task.id}": continue_from "${task.continue_from}" should also be listed in depends_on for clarity (the runtime will add it implicitly).`,
240
+ severity: 'warning',
241
+ });
242
+ }
243
+ }
244
+ }
245
+ }
246
+ // ── Cycle detection ──
247
+ errors.push(...detectCycles(config, allQualified, bareToQualified));
248
+ return errors;
249
+ }
250
+ // ── Helpers ──
251
+ // Returns the resolved qualified ID, null (not found), or '__ambiguous__' (multiple tracks match).
252
+ function resolveDepRef(ref, fromTrackId, allQualified, bareToQualified) {
253
+ // Fully qualified reference (trackId.taskId) — always unambiguous
254
+ if (allQualified.has(ref))
255
+ return ref;
256
+ // Same-track shorthand — always unambiguous (shadows any global bare match)
257
+ const sameTrack = `${fromTrackId}.${ref}`;
258
+ if (allQualified.has(sameTrack))
259
+ return sameTrack;
260
+ // Global bare lookup — may be '__ambiguous__' when multiple tracks share the name
261
+ return bareToQualified.get(ref) ?? null;
262
+ }
263
+ function detectCycles(config, allQualified, bareToQualified) {
264
+ // Build adjacency: qualifiedId → [resolved dep qualifiedIds]
265
+ const adj = new Map();
266
+ for (const track of config.tracks) {
267
+ if (!track.id)
268
+ continue;
269
+ for (const task of track.tasks ?? []) {
270
+ if (!task.id || task.use)
271
+ continue;
272
+ const qid = `${track.id}.${task.id}`;
273
+ const deps = [];
274
+ for (const dep of task.depends_on ?? []) {
275
+ const resolved = resolveDepRef(dep, track.id, allQualified, bareToQualified);
276
+ if (resolved)
277
+ deps.push(resolved);
278
+ }
279
+ if (task.continue_from) {
280
+ const resolved = resolveDepRef(task.continue_from, track.id, allQualified, bareToQualified);
281
+ if (resolved && !deps.includes(resolved))
282
+ deps.push(resolved);
283
+ }
284
+ adj.set(qid, deps);
285
+ }
286
+ }
287
+ const errors = [];
288
+ const visited = new Set();
289
+ const inStack = new Set();
290
+ // Deduplicate cycles: the same cycle can be discovered from multiple entry points.
291
+ // Canonical key = sorted node list joined — order-independent fingerprint.
292
+ const seenCycles = new Set();
293
+ // Use a mutable path array instead of copying at each level (O(n) vs O(n^2)).
294
+ const pathStack = [];
295
+ function dfs(id) {
296
+ if (inStack.has(id)) {
297
+ const cycleStart = pathStack.indexOf(id);
298
+ // Unique nodes in the cycle (without repeating the start node) for dedup.
299
+ // Previously the duplicate start node caused different sorted keys when
300
+ // the same cycle was discovered from different entry points.
301
+ const uniqueNodes = pathStack.slice(cycleStart);
302
+ const key = [...uniqueNodes].sort().join(',');
303
+ if (!seenCycles.has(key)) {
304
+ seenCycles.add(key);
305
+ const display = [...uniqueNodes, id]; // include start for readable display
306
+ errors.push({ path: 'tracks', message: `Circular dependency detected: ${display.join(' → ')}` });
307
+ }
308
+ return;
309
+ }
310
+ if (visited.has(id))
311
+ return;
312
+ visited.add(id);
313
+ inStack.add(id);
314
+ pathStack.push(id);
315
+ for (const dep of adj.get(id) ?? []) {
316
+ dfs(dep);
317
+ }
318
+ pathStack.pop();
319
+ inStack.delete(id);
320
+ }
321
+ for (const id of adj.keys()) {
322
+ if (!visited.has(id))
323
+ dfs(id);
324
+ }
325
+ return errors;
326
+ }
327
+ //# sourceMappingURL=validate-raw.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-raw.js","sourceRoot":"","sources":["../src/validate-raw.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,43 +1,52 @@
1
1
  {
2
2
  "name": "@tagma/sdk",
3
- "version": "0.4.2",
3
+ "version": "0.4.4",
4
+ "description": "Local AI task orchestration engine — core SDK for tagma pipelines",
4
5
  "license": "MIT",
5
6
  "repository": {
6
7
  "type": "git",
7
- "url": "https://github.com/GoTagma/tagma-sdk.git"
8
+ "url": "https://github.com/GoTagma/tagma-mono.git",
9
+ "directory": "packages/sdk"
8
10
  },
11
+ "bugs": "https://github.com/GoTagma/tagma-mono/issues",
12
+ "homepage": "https://github.com/GoTagma/tagma-mono/tree/main/packages/sdk#readme",
9
13
  "type": "module",
10
- "workspaces": [
11
- "plugins/*"
12
- ],
13
- "main": "./src/sdk.ts",
14
+ "sideEffects": false,
15
+ "main": "./dist/sdk.js",
16
+ "module": "./dist/sdk.js",
17
+ "types": "./dist/sdk.d.ts",
14
18
  "exports": {
15
- ".": "./src/sdk.ts"
19
+ ".": {
20
+ "types": "./dist/sdk.d.ts",
21
+ "import": "./dist/sdk.js",
22
+ "default": "./dist/sdk.js"
23
+ }
16
24
  },
17
25
  "files": [
18
- "src",
19
- "scripts/preinstall.js"
26
+ "dist",
27
+ "src"
20
28
  ],
29
+ "publishConfig": {
30
+ "access": "public"
31
+ },
21
32
  "engines": {
22
33
  "bun": ">=1.3"
23
34
  },
24
- "packageManager": "bun@1.3.7",
25
35
  "scripts": {
26
- "preinstall": "node scripts/preinstall.js",
36
+ "build": "tsc -p tsconfig.json",
37
+ "prepublishOnly": "bun run build",
27
38
  "test": "bun test",
28
39
  "release": "bun scripts/release.ts",
29
40
  "release:publish": "bun scripts/release.ts --publish"
30
41
  },
31
42
  "dependencies": {
43
+ "@tagma/types": "0.2.1",
32
44
  "js-yaml": "^4.1.0",
33
- "chokidar": "^4.0.0",
34
- "@tagma/types": "0.2.0"
45
+ "chokidar": "^4.0.0"
35
46
  },
36
47
  "devDependencies": {
37
48
  "@types/js-yaml": "^4.0.9",
38
- "bun-types": "latest",
39
- "typescript": "^6.0.2",
40
- "@tagma/driver-codex": "0.1.9",
41
- "@tagma/driver-opencode": "0.1.8"
49
+ "bun-types": "^1.3.11",
50
+ "typescript": "^5.8.3"
42
51
  }
43
52
  }
package/src/approval.ts CHANGED
@@ -5,16 +5,18 @@ import { nowISO } from './utils';
5
5
  // ApprovalEvent, ApprovalListener, ApprovalGateway) live in the shared
6
6
  // @tagma/types package so trigger plugins can import them without
7
7
  // depending on the engine's runtime implementation. This module keeps
8
- // only the in-memory implementation.
8
+ // only the in-memory implementation. Internal SDK imports go through
9
+ // ./types (the engine-side re-export) for consistency with the rest of
10
+ // the SDK source.
9
11
  import type {
10
12
  ApprovalRequest, ApprovalDecision, ApprovalEvent, ApprovalListener, ApprovalGateway,
11
- } from '@tagma/types';
13
+ } from './types';
12
14
 
13
15
  // Re-export for existing engine-side consumers that import from this file.
14
16
  export type {
15
17
  ApprovalRequest, ApprovalDecision, ApprovalOutcome, ApprovalEvent,
16
18
  ApprovalListener, ApprovalGateway,
17
- } from '@tagma/types';
19
+ } from './types';
18
20
 
19
21
  // ═══ Default In-Memory Implementation ═══
20
22