@actiondock/core 2.0.11 → 2.0.12

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 (119) hide show
  1. package/dist/build/templates.d.ts +19 -0
  2. package/dist/catalog/action-index.d.ts +9 -0
  3. package/dist/catalog/action-resolver.d.ts +20 -0
  4. package/dist/catalog/location-registry.d.ts +15 -0
  5. package/dist/catalog/package-catalog.d.ts +7 -0
  6. package/dist/catalog/types.d.ts +68 -0
  7. package/dist/doctor/doctor.d.ts +6 -0
  8. package/dist/doctor/types.d.ts +23 -0
  9. package/dist/execution/index.d.ts +2 -0
  10. package/dist/execution/service.d.ts +74 -0
  11. package/dist/execution/types.d.ts +74 -0
  12. package/dist/export/templates.d.ts +33 -0
  13. package/dist/filter/intent.d.ts +33 -0
  14. package/{src/index.ts → dist/index.d.ts} +1 -1
  15. package/dist/index.js +8458 -0
  16. package/dist/profile/client.d.ts +116 -0
  17. package/dist/profile/manager.d.ts +47 -0
  18. package/dist/profile/types.d.ts +61 -0
  19. package/dist/project/closure.d.ts +25 -0
  20. package/{src/project/index.ts → dist/project/index.d.ts} +1 -0
  21. package/dist/project/init.d.ts +27 -0
  22. package/dist/project/loader.d.ts +105 -0
  23. package/dist/project/manifest.d.ts +44 -0
  24. package/dist/project/types.d.ts +131 -0
  25. package/dist/registry/registry.d.ts +24 -0
  26. package/dist/registry/types.d.ts +117 -0
  27. package/dist/runtime/clock.d.ts +21 -0
  28. package/dist/runtime/context.d.ts +75 -0
  29. package/dist/runtime/env.d.ts +54 -0
  30. package/dist/runtime/events.d.ts +61 -0
  31. package/dist/runtime/execution-manager.d.ts +48 -0
  32. package/{src/runtime/index.ts → dist/runtime/index.d.ts} +0 -1
  33. package/dist/runtime/module-loader.d.ts +42 -0
  34. package/dist/runtime/process.d.ts +11 -0
  35. package/dist/runtime/runner.d.ts +186 -0
  36. package/dist/runtime/standalone.d.ts +40 -0
  37. package/dist/schema/validator.d.ts +28 -0
  38. package/dist/server/body.d.ts +40 -0
  39. package/{src/server/index.ts → dist/server/index.d.ts} +0 -1
  40. package/dist/server/routes/actions.d.ts +5 -0
  41. package/dist/server/routes/common.d.ts +36 -0
  42. package/dist/server/routes/config.d.ts +5 -0
  43. package/dist/server/routes/doctor.d.ts +5 -0
  44. package/dist/server/routes/health.d.ts +5 -0
  45. package/dist/server/routes/info.d.ts +5 -0
  46. package/dist/server/routes/playbooks.d.ts +5 -0
  47. package/dist/server/routes/runs.d.ts +5 -0
  48. package/dist/server/routes/state.d.ts +5 -0
  49. package/dist/server/runtime-registry.d.ts +78 -0
  50. package/dist/server/security.d.ts +37 -0
  51. package/dist/server/server.d.ts +15 -0
  52. package/dist/server/types.d.ts +59 -0
  53. package/dist/storage/driver.d.ts +15 -0
  54. package/dist/storage/index.d.ts +44 -0
  55. package/{src/storage/mask.ts → dist/storage/mask.d.ts} +5 -20
  56. package/dist/storage/sqlite.d.ts +66 -0
  57. package/dist/storage/types.d.ts +121 -0
  58. package/dist/utils/index.d.ts +29 -0
  59. package/dist/version.d.ts +4 -0
  60. package/package.json +11 -10
  61. package/src/build/templates.ts +0 -59
  62. package/src/catalog/action-index.ts +0 -92
  63. package/src/catalog/action-resolver.ts +0 -120
  64. package/src/catalog/location-registry.ts +0 -134
  65. package/src/catalog/package-catalog.ts +0 -87
  66. package/src/catalog/types.ts +0 -75
  67. package/src/doctor/doctor.ts +0 -419
  68. package/src/doctor/types.ts +0 -25
  69. package/src/execution/index.ts +0 -2
  70. package/src/execution/service.ts +0 -322
  71. package/src/execution/types.ts +0 -73
  72. package/src/export/templates.ts +0 -590
  73. package/src/filter/intent.ts +0 -154
  74. package/src/profile/client.ts +0 -552
  75. package/src/profile/manager.ts +0 -341
  76. package/src/profile/types.ts +0 -71
  77. package/src/project/init.ts +0 -242
  78. package/src/project/loader.ts +0 -479
  79. package/src/project/manifest.ts +0 -299
  80. package/src/project/types.ts +0 -141
  81. package/src/registry/registry.ts +0 -940
  82. package/src/registry/types.ts +0 -127
  83. package/src/runtime/clock.ts +0 -41
  84. package/src/runtime/context.ts +0 -259
  85. package/src/runtime/env.ts +0 -172
  86. package/src/runtime/events.ts +0 -142
  87. package/src/runtime/execution-manager.ts +0 -74
  88. package/src/runtime/module-loader.ts +0 -67
  89. package/src/runtime/process.ts +0 -245
  90. package/src/runtime/runner.ts +0 -527
  91. package/src/runtime/standalone.ts +0 -429
  92. package/src/schema/validator.ts +0 -61
  93. package/src/server/body.ts +0 -112
  94. package/src/server/routes/actions.ts +0 -262
  95. package/src/server/routes/common.ts +0 -126
  96. package/src/server/routes/config.ts +0 -147
  97. package/src/server/routes/doctor.ts +0 -29
  98. package/src/server/routes/health.ts +0 -40
  99. package/src/server/routes/info.ts +0 -221
  100. package/src/server/routes/playbooks.ts +0 -109
  101. package/src/server/routes/runs.ts +0 -301
  102. package/src/server/routes/state.ts +0 -133
  103. package/src/server/runtime-registry.ts +0 -115
  104. package/src/server/security.ts +0 -115
  105. package/src/server/server.ts +0 -251
  106. package/src/server/types.ts +0 -57
  107. package/src/storage/driver.ts +0 -126
  108. package/src/storage/index.ts +0 -81
  109. package/src/storage/sqlite.ts +0 -714
  110. package/src/storage/types.ts +0 -139
  111. package/src/utils/index.ts +0 -62
  112. /package/{src/build/index.ts → dist/build/index.d.ts} +0 -0
  113. /package/{src/catalog/index.ts → dist/catalog/index.d.ts} +0 -0
  114. /package/{src/doctor/index.ts → dist/doctor/index.d.ts} +0 -0
  115. /package/{src/export/index.ts → dist/export/index.d.ts} +0 -0
  116. /package/{src/filter/index.ts → dist/filter/index.d.ts} +0 -0
  117. /package/{src/profile/index.ts → dist/profile/index.d.ts} +0 -0
  118. /package/{src/registry/index.ts → dist/registry/index.d.ts} +0 -0
  119. /package/{src/server/routes/index.ts → dist/server/routes/index.d.ts} +0 -0
@@ -1,419 +0,0 @@
1
- import { existsSync, statSync } from "node:fs";
2
- import { delimiter, join, relative } from "node:path";
3
- import { discoverActionFiles, findProjectRoot, loadActions, loadPlaybooks, loadProjectConfig } from "../project/loader";
4
- import { loadManifest, MANIFEST_FILE_NAME } from "../project/manifest";
5
- import { getRegistryStatus } from "../registry/registry";
6
- import { createGlobalStorage, createStorage } from "../storage";
7
- import { findExecutable, getActionDockHome } from "../utils";
8
- import type { DoctorCheckItem, DoctorReport } from "./types";
9
-
10
- function compareSemver(v1: string, v2: string): number {
11
- const p1 = v1.replace(/^v/, "").split(".").map(Number);
12
- const p2 = v2.replace(/^v/, "").split(".").map(Number);
13
- for (let i = 0; i < Math.max(p1.length, p2.length); i++) {
14
- const num1 = p1[i] || 0;
15
- const num2 = p2[i] || 0;
16
- if (num1 > num2) return 1;
17
- if (num1 < num2) return -1;
18
- }
19
- return 0;
20
- }
21
-
22
- export async function runDoctorChecks(options?: {
23
- cwd?: string;
24
- packageIdOrPath?: string;
25
- customHome?: string;
26
- }): Promise<DoctorReport> {
27
- const cwd = options?.cwd || process.cwd();
28
- const checks: DoctorCheckItem[] = [];
29
-
30
- // 1. Check Node.js Runtime
31
- const nodeVersion = process.versions.node;
32
- if (nodeVersion) {
33
- const isGte22 = compareSemver(nodeVersion, "22.12.0") >= 0;
34
- checks.push({
35
- id: "runtime.node",
36
- category: "runtime",
37
- name: "Node.js Runtime",
38
- status: isGte22 ? "ok" : "warn",
39
- message: `v${nodeVersion} (${isGte22 ? ">= 22.12.0 supported" : ">= 22.12.0 recommended"})`,
40
- fix: isGte22 ? undefined : "Upgrade Node.js to v22.12.0 or higher",
41
- });
42
- }
43
-
44
- // 2. Check Bun Runtime (Optional compiler for standalone binaries)
45
- const bunVersion = (typeof (globalThis as any).Bun !== "undefined" && (globalThis as any).Bun.version) || (process.versions as any).bun;
46
- if (bunVersion) {
47
- checks.push({
48
- id: "runtime.bun",
49
- category: "runtime",
50
- name: "Bun Runtime",
51
- status: "ok",
52
- message: `v${bunVersion} (available for standalone binary compilation)`,
53
- });
54
- } else {
55
- checks.push({
56
- id: "runtime.bun",
57
- category: "runtime",
58
- name: "Bun Runtime",
59
- status: "ok",
60
- message: "Bun compiler not detected (optional, required only for 'ad build' standalone binaries)",
61
- });
62
- }
63
-
64
- // 3. Check CLI in PATH
65
- const adPath = findExecutable("ad");
66
-
67
- if (adPath) {
68
- checks.push({
69
- id: "runtime.cli",
70
- category: "runtime",
71
- name: "CLI Executable",
72
- status: "ok",
73
- message: `Found 'ad' in PATH at ${adPath}`,
74
- });
75
- } else {
76
- checks.push({
77
- id: "runtime.cli",
78
- category: "runtime",
79
- name: "CLI Executable",
80
- status: "warn",
81
- message: "'ad' command not found in PATH",
82
- fix: "Run 'npm install -g @actiondock/cli' or in SDK workspace run 'cd packages/cli && npm link'",
83
- });
84
- }
85
-
86
- // 3. Check Global Storage
87
- const globalHome = getActionDockHome(options?.customHome);
88
- try {
89
- const globalStorage = createGlobalStorage(options?.customHome);
90
- await globalStorage.setConfig("_doctor_probe_", "ok");
91
- await globalStorage.deleteConfig("_doctor_probe_");
92
- globalStorage.close();
93
-
94
- checks.push({
95
- id: "storage.global",
96
- category: "storage",
97
- name: "Global Storage",
98
- status: "ok",
99
- message: `Global SQLite database verified at ${globalHome}`,
100
- });
101
- } catch (err: any) {
102
- checks.push({
103
- id: "storage.global",
104
- category: "storage",
105
- name: "Global Storage",
106
- status: "error",
107
- message: `Failed to access global storage: ${err.message}`,
108
- fix: `Ensure directory '${globalHome}' is writable`,
109
- });
110
- }
111
-
112
- // 4. Check Global Registry Health
113
- try {
114
- const regStatus = getRegistryStatus(options?.customHome);
115
- if (regStatus.staleCount > 0) {
116
- checks.push({
117
- id: "registry.global",
118
- category: "registry",
119
- name: "Global Registry",
120
- status: "warn",
121
- message: `${regStatus.totalPackagesCount} package(s), ${regStatus.workspaces.length} workspace(s), but ${regStatus.staleCount} stale path(s) detected`,
122
- fix: "Run 'ad unlink --prune' to clean up stale entries from registry",
123
- });
124
- } else {
125
- checks.push({
126
- id: "registry.global",
127
- category: "registry",
128
- name: "Global Registry",
129
- status: "ok",
130
- message: `${regStatus.totalPackagesCount} linked package(s), ${regStatus.workspaces.length} workspace(s) (0 stale)`,
131
- });
132
- }
133
- } catch (err: any) {
134
- checks.push({
135
- id: "registry.global",
136
- category: "registry",
137
- name: "Global Registry",
138
- status: "error",
139
- message: `Failed to read registry: ${err.message}`,
140
- });
141
- }
142
-
143
- // 5. Check Project Context
144
- let projectRoot: string | null = null;
145
- if (options?.packageIdOrPath) {
146
- projectRoot = findProjectRoot(options.packageIdOrPath);
147
- } else {
148
- projectRoot = findProjectRoot(cwd);
149
- }
150
-
151
- let packageId: string | undefined;
152
-
153
- if (projectRoot) {
154
- try {
155
- const config = loadProjectConfig(projectRoot);
156
- packageId = config.id;
157
-
158
- // Project Config Check
159
- checks.push({
160
- id: "project.config",
161
- category: "project",
162
- name: "Project Configuration",
163
- status: "ok",
164
- message: `Valid (${config.id} v${config.version})`,
165
- });
166
-
167
- // SDK Resolution Check
168
- const hasSdkInNodeModules =
169
- existsSync(join(projectRoot, "node_modules", "@actiondock", "sdk")) ||
170
- existsSync(join(projectRoot, "node_modules", "@actiondock", "sdk", "package.json"));
171
-
172
- if (hasSdkInNodeModules) {
173
- checks.push({
174
- id: "project.sdk",
175
- category: "project",
176
- name: "SDK Dependency",
177
- status: "ok",
178
- message: "Resolved @actiondock/sdk in node_modules",
179
- });
180
- } else {
181
- checks.push({
182
- id: "project.sdk",
183
- category: "project",
184
- name: "SDK Dependency",
185
- status: "warn",
186
- message: "@actiondock/sdk not found in project node_modules",
187
- fix: "Run 'bun link @actiondock/sdk' or 'bun install' in project directory",
188
- });
189
- }
190
-
191
- // Project Runtime Database Check
192
- try {
193
- const projectStorage = createStorage(config.id, { projectRoot });
194
- await projectStorage.setConfig("_doctor_probe_", "ok");
195
- await projectStorage.deleteConfig("_doctor_probe_");
196
- projectStorage.close();
197
-
198
- checks.push({
199
- id: "project.storage",
200
- category: "project",
201
- name: "Project Database",
202
- status: "ok",
203
- message: `Database writable at ${join(projectRoot, ".actiondock", "runtime.db")}`,
204
- });
205
- } catch (err: any) {
206
- checks.push({
207
- id: "project.storage",
208
- category: "project",
209
- name: "Project Database",
210
- status: "error",
211
- message: `Failed to write project runtime database: ${err.message}`,
212
- fix: `Check write permissions for '${join(projectRoot, ".actiondock")}'`,
213
- });
214
- }
215
-
216
- // Actions Check
217
- try {
218
- const manifest = loadManifest(projectRoot);
219
- let actionsCount = 0;
220
- if (manifest?.actions) {
221
- actionsCount = Object.keys(manifest.actions).length;
222
- } else {
223
- const actions = await loadActions(projectRoot, config.actionsDir, { autoInstall: false });
224
- actionsCount = actions.size;
225
- }
226
-
227
- if (actionsCount === 0) {
228
- checks.push({
229
- id: "project.actions",
230
- category: "project",
231
- name: "Actions",
232
- status: "warn",
233
- message: `No actions found in '${config.actionsDir || "actions"}'`,
234
- fix: "Run 'ad action new <id>' to create your first action",
235
- });
236
- } else {
237
- checks.push({
238
- id: "project.actions",
239
- category: "project",
240
- name: "Actions",
241
- status: "ok",
242
- message: `${actionsCount} action(s) valid and loaded`,
243
- });
244
- }
245
- } catch (err: any) {
246
- checks.push({
247
- id: "project.actions",
248
- category: "project",
249
- name: "Actions",
250
- status: "error",
251
- message: `Failed to load actions: ${err.message}`,
252
- });
253
- }
254
-
255
- // Project Manifest Check (Lightweight Static Detection)
256
- try {
257
- const manifestPath = join(projectRoot, MANIFEST_FILE_NAME);
258
- const manifest = loadManifest(projectRoot);
259
- const actionFiles = discoverActionFiles(projectRoot, config.actionsDir || "actions");
260
-
261
- if (!existsSync(manifestPath)) {
262
- if (actionFiles.length > 0) {
263
- checks.push({
264
- id: "project.manifest",
265
- category: "project",
266
- name: "Action Manifest",
267
- status: "warn",
268
- message: `${MANIFEST_FILE_NAME} not found (${actionFiles.length} action source file(s) exist)`,
269
- fix: "Run 'ad action sync' to generate manifest",
270
- });
271
- }
272
- } else if (manifest && manifest.actions) {
273
- const missingFiles = Object.entries(manifest.actions)
274
- .filter(([_, item]) => !existsSync(join(projectRoot, item.entry)))
275
- .map(([id, item]) => `${id} (${item.entry})`);
276
-
277
- const manifestEntries = new Set(
278
- Object.values(manifest.actions).map((a) => a.entry.replace(/\\/g, "/"))
279
- );
280
- const untracked = actionFiles
281
- .map((f) => relative(projectRoot, f).replace(/\\/g, "/"))
282
- .filter((rel) => !manifestEntries.has(rel));
283
-
284
- if (missingFiles.length > 0) {
285
- checks.push({
286
- id: "project.manifest",
287
- category: "project",
288
- name: "Action Manifest",
289
- status: "warn",
290
- message: `${missingFiles.length} action(s) in manifest point to missing files: ${missingFiles.join(", ")}`,
291
- fix: "Run 'ad action sync' to synchronize manifest",
292
- });
293
- } else if (untracked.length > 0) {
294
- checks.push({
295
- id: "project.manifest",
296
- category: "project",
297
- name: "Action Manifest",
298
- status: "warn",
299
- message: `${untracked.length} action file(s) not declared in manifest: ${untracked.join(", ")}`,
300
- fix: "Run 'ad action sync' to synchronize manifest",
301
- });
302
- } else {
303
- const manifestStat = statSync(manifestPath);
304
- const newerFiles = actionFiles.filter(
305
- (f) => statSync(f).mtimeMs > manifestStat.mtimeMs + 2000
306
- );
307
- if (newerFiles.length > 0) {
308
- checks.push({
309
- id: "project.manifest",
310
- category: "project",
311
- name: "Action Manifest",
312
- status: "ok",
313
- message: `Manifest valid (Note: ${newerFiles.length} action file(s) modified after manifest; run 'ad action sync' if definitions changed)`,
314
- });
315
- } else {
316
- checks.push({
317
- id: "project.manifest",
318
- category: "project",
319
- name: "Action Manifest",
320
- status: "ok",
321
- message: "Manifest synchronized with action files",
322
- });
323
- }
324
- }
325
- }
326
- } catch (err: any) {
327
- checks.push({
328
- id: "project.manifest",
329
- category: "project",
330
- name: "Action Manifest",
331
- status: "error",
332
- message: `Failed to inspect manifest: ${err.message}`,
333
- });
334
- }
335
-
336
-
337
- // Playbooks Check
338
- try {
339
- const playbooks = loadPlaybooks(projectRoot, config.playbooksDir);
340
- checks.push({
341
- id: "project.playbooks",
342
- category: "project",
343
- name: "Playbooks",
344
- status: "ok",
345
- message: `${playbooks.size} playbook(s) valid`,
346
- });
347
- } catch (err: any) {
348
- checks.push({
349
- id: "project.playbooks",
350
- category: "project",
351
- name: "Playbooks",
352
- status: "warn",
353
- message: `Playbooks issue: ${err.message}`,
354
- });
355
- }
356
-
357
- // Config readiness check
358
- if (config.config && Object.keys(config.config).length > 0) {
359
- const missingKeys: string[] = [];
360
- const projectStorage = createStorage(config.id, { projectRoot });
361
- for (const [key, def] of Object.entries(config.config)) {
362
- const inStorage = await projectStorage.getConfig(key);
363
- const envNames = Array.isArray(def.env) ? def.env : def.env ? [def.env] : [key];
364
- const inEnv = envNames.some((e) => process.env[e] !== undefined);
365
- const isRequired = (def as any).required || (def.default === undefined && def.secret);
366
- if ((isRequired || def.default === undefined) && inStorage === undefined && !inEnv) {
367
- missingKeys.push(key);
368
- }
369
- }
370
- projectStorage.close();
371
-
372
- if (missingKeys.length > 0) {
373
- checks.push({
374
- id: "project.config_readiness",
375
- category: "project",
376
- name: "Config Readiness",
377
- status: "warn",
378
- message: `Required config item(s) missing: ${missingKeys.join(", ")}`,
379
- fix: `Run 'ad config set <KEY> <VALUE>' to configure missing keys`,
380
- });
381
- } else {
382
- checks.push({
383
- id: "project.config_readiness",
384
- category: "project",
385
- name: "Config Readiness",
386
- status: "ok",
387
- message: "All declared configuration dependencies satisfied",
388
- });
389
- }
390
- }
391
- } catch (err: any) {
392
- checks.push({
393
- id: "project.config",
394
- category: "project",
395
- name: "Project Configuration",
396
- status: "error",
397
- message: `Invalid actiondock.json: ${err.message}`,
398
- });
399
- }
400
- }
401
-
402
- const okCount = checks.filter((c) => c.status === "ok").length;
403
- const warnCount = checks.filter((c) => c.status === "warn").length;
404
- const errorCount = checks.filter((c) => c.status === "error").length;
405
-
406
- return {
407
- ok: errorCount === 0,
408
- hasProject: !!projectRoot,
409
- projectRoot: projectRoot || undefined,
410
- packageId,
411
- summary: {
412
- total: checks.length,
413
- ok: okCount,
414
- warn: warnCount,
415
- error: errorCount,
416
- },
417
- checks,
418
- };
419
- }
@@ -1,25 +0,0 @@
1
- export type CheckStatus = "ok" | "warn" | "error";
2
-
3
- export interface DoctorCheckItem {
4
- id: string;
5
- category: "runtime" | "storage" | "registry" | "project";
6
- name: string;
7
- status: CheckStatus;
8
- message: string;
9
- detail?: string;
10
- fix?: string;
11
- }
12
-
13
- export interface DoctorReport {
14
- ok: boolean;
15
- hasProject: boolean;
16
- projectRoot?: string;
17
- packageId?: string;
18
- summary: {
19
- total: number;
20
- ok: number;
21
- warn: number;
22
- error: number;
23
- };
24
- checks: DoctorCheckItem[];
25
- }
@@ -1,2 +0,0 @@
1
- export * from "./service";
2
- export * from "./types";