@actiondock/core 2.9.1 → 2.11.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 (256) hide show
  1. package/README.md +1 -2
  2. package/dist/catalog/action-catalog.js +3 -33
  3. package/dist/catalog/discovery.d.ts +0 -3
  4. package/dist/catalog/discovery.js +4 -4
  5. package/dist/catalog/graph.d.ts +0 -4
  6. package/dist/catalog/graph.js +12 -15
  7. package/dist/{profile/client-actions.d.ts → client/actions.d.ts} +1 -1
  8. package/dist/{profile/client-actions.js → client/actions.js} +2 -8
  9. package/dist/{profile/client-config.d.ts → client/config.d.ts} +1 -1
  10. package/dist/{profile/client-config.js → client/config.js} +1 -1
  11. package/dist/client/dispatcher.d.ts +4 -0
  12. package/dist/client/dispatcher.js +21 -0
  13. package/dist/client/health.d.ts +38 -0
  14. package/dist/{profile/client-health.js → client/health.js} +9 -6
  15. package/dist/client/index.d.ts +16 -0
  16. package/dist/client/index.js +20 -0
  17. package/dist/{profile/client-playbooks.d.ts → client/playbooks.d.ts} +1 -1
  18. package/dist/{profile/client-playbooks.js → client/playbooks.js} +1 -1
  19. package/dist/{profile/client-runs.d.ts → client/runs.d.ts} +4 -2
  20. package/dist/{profile/client-runs.js → client/runs.js} +7 -1
  21. package/dist/{profile/client-state.d.ts → client/state.d.ts} +1 -1
  22. package/dist/{profile/client-state.js → client/state.js} +1 -1
  23. package/dist/{profile/client-transport.d.ts → client/transport.d.ts} +29 -10
  24. package/dist/{profile/client-transport.js → client/transport.js} +125 -35
  25. package/dist/doctor/checks/index.d.ts +1 -1
  26. package/dist/doctor/checks/index.js +1 -1
  27. package/dist/doctor/checks/project.js +24 -92
  28. package/dist/doctor/checks/registry.js +1 -1
  29. package/dist/doctor/checks/runtime.d.ts +0 -4
  30. package/dist/doctor/checks/runtime.js +0 -28
  31. package/dist/doctor/doctor.js +1 -2
  32. package/dist/errors.d.ts +85 -4
  33. package/dist/errors.js +114 -4
  34. package/dist/execution/service.d.ts +55 -37
  35. package/dist/execution/service.js +601 -212
  36. package/dist/execution/types.d.ts +24 -5
  37. package/dist/host/host.d.ts +42 -22
  38. package/dist/host/host.js +565 -150
  39. package/dist/host/routing.js +6 -6
  40. package/dist/host/types.d.ts +25 -13
  41. package/dist/index.d.ts +9 -4
  42. package/dist/index.js +5 -2
  43. package/dist/input/advice.d.ts +0 -44
  44. package/dist/input/advice.js +7 -141
  45. package/dist/input/describe.d.ts +6 -0
  46. package/dist/input/describe.js +26 -1
  47. package/dist/input/flat-materializer.js +1 -1
  48. package/dist/input/flat-parser.js +1 -1
  49. package/dist/input/index.d.ts +0 -1
  50. package/dist/input/index.js +0 -1
  51. package/dist/input/input-resolver.js +2 -2
  52. package/dist/input/validation-mapper.d.ts +1 -1
  53. package/dist/invocation/policy.js +2 -0
  54. package/dist/ipc/diagnostic.d.ts +8 -21
  55. package/dist/ipc/diagnostic.js +24 -57
  56. package/dist/ipc/host.js +21 -7
  57. package/dist/ipc/service.d.ts +14 -0
  58. package/dist/ipc/service.js +132 -26
  59. package/dist/ipc/types.d.ts +0 -4
  60. package/dist/package/index.d.ts +4 -5
  61. package/dist/package/index.js +1 -2
  62. package/dist/package/runtime.d.ts +94 -23
  63. package/dist/package/runtime.js +628 -274
  64. package/dist/package/static-index.d.ts +3 -6
  65. package/dist/package/static-index.js +11 -40
  66. package/dist/package/types.d.ts +19 -4
  67. package/dist/platform/index.d.ts +2 -1
  68. package/dist/platform/index.js +2 -1
  69. package/dist/platform/loader-hook.d.ts +32 -0
  70. package/dist/platform/loader-hook.js +90 -0
  71. package/dist/{node → platform}/module-loader.d.ts +13 -0
  72. package/dist/{node → platform}/module-loader.js +51 -4
  73. package/dist/platform/node.d.ts +19 -8
  74. package/dist/platform/node.js +50 -20
  75. package/dist/platform/types.d.ts +7 -47
  76. package/dist/process/context-process.d.ts +3 -18
  77. package/dist/process/context-process.js +3 -44
  78. package/dist/process/control.d.ts +21 -0
  79. package/dist/process/control.js +34 -0
  80. package/dist/process/converters.d.ts +23 -0
  81. package/dist/process/converters.js +92 -0
  82. package/dist/process/cursor.js +2 -22
  83. package/dist/process/{diagnostics-sink.d.ts → diagnostics.d.ts} +0 -7
  84. package/dist/process/{diagnostics-sink.js → diagnostics.js} +6 -8
  85. package/dist/process/index.d.ts +1 -3
  86. package/dist/process/index.js +1 -3
  87. package/dist/process/input-dispatcher.d.ts +4 -13
  88. package/dist/process/input-dispatcher.js +48 -69
  89. package/dist/process/managed-record.d.ts +3 -31
  90. package/dist/process/metadata-store.d.ts +0 -41
  91. package/dist/process/metadata-store.js +2 -341
  92. package/dist/process/process-driver.js +2 -2
  93. package/dist/process/process-manager.d.ts +8 -50
  94. package/dist/process/process-manager.js +28 -417
  95. package/dist/process/quotas.d.ts +14 -0
  96. package/dist/process/quotas.js +29 -0
  97. package/dist/process/run-executor.js +0 -1
  98. package/dist/process/terminal-output-cache.d.ts +20 -34
  99. package/dist/process/terminal-output-cache.js +43 -64
  100. package/dist/profile/index.d.ts +1 -2
  101. package/dist/profile/index.js +1 -2
  102. package/dist/profile/manager.d.ts +2 -4
  103. package/dist/profile/manager.js +10 -40
  104. package/dist/profile/types.d.ts +1 -17
  105. package/dist/project/digest.d.ts +5 -1
  106. package/dist/project/digest.js +81 -219
  107. package/dist/project/index.d.ts +4 -5
  108. package/dist/project/index.js +4 -5
  109. package/dist/project/init.js +2 -2
  110. package/dist/project/loader.d.ts +3 -3
  111. package/dist/project/loader.js +72 -50
  112. package/dist/project/lockfile.js +6 -5
  113. package/dist/project/manifest.js +5 -4
  114. package/dist/project/transactions.d.ts +4 -42
  115. package/dist/project/transactions.js +83 -138
  116. package/dist/project/types-generator.js +2 -1
  117. package/dist/project/types.d.ts +2 -0
  118. package/dist/registry/index.d.ts +0 -1
  119. package/dist/registry/index.js +0 -1
  120. package/dist/registry/lock.d.ts +2 -11
  121. package/dist/registry/lock.js +14 -183
  122. package/dist/registry/registry.d.ts +1 -6
  123. package/dist/registry/registry.js +5 -17
  124. package/dist/runtime/action-registry.d.ts +1 -5
  125. package/dist/runtime/action-registry.js +0 -12
  126. package/dist/runtime/context.js +2 -2
  127. package/dist/runtime/events.d.ts +11 -50
  128. package/dist/runtime/events.js +88 -368
  129. package/dist/runtime/index.d.ts +0 -4
  130. package/dist/runtime/index.js +0 -4
  131. package/dist/runtime/run-persistence.d.ts +2 -0
  132. package/dist/runtime/run-persistence.js +2 -1
  133. package/dist/runtime/standalone-commands.d.ts +18 -0
  134. package/dist/runtime/standalone-commands.js +466 -0
  135. package/dist/runtime/standalone-help.d.ts +20 -0
  136. package/dist/runtime/standalone-help.js +72 -0
  137. package/dist/runtime/standalone.d.ts +1 -44
  138. package/dist/runtime/standalone.js +31 -526
  139. package/dist/schema/validator.d.ts +2 -2
  140. package/dist/schema/validator.js +2 -9
  141. package/dist/server/index.d.ts +0 -2
  142. package/dist/server/index.js +0 -2
  143. package/dist/server/routes/actions.js +1 -1
  144. package/dist/server/routes/info.js +1 -1
  145. package/dist/server/routes/playbooks.js +1 -1
  146. package/dist/server/routes/runs.js +123 -16
  147. package/dist/server/routes/state.js +43 -18
  148. package/dist/server/security.d.ts +1 -1
  149. package/dist/server/security.js +2 -2
  150. package/dist/server/server.js +3 -7
  151. package/dist/service/factory.js +4 -3
  152. package/dist/service/index.d.ts +1 -1
  153. package/dist/service/index.js +1 -1
  154. package/dist/service/remote-errors.d.ts +1 -1
  155. package/dist/service/remote-errors.js +6 -6
  156. package/dist/service/remote-polling.d.ts +3 -0
  157. package/dist/service/remote-polling.js +10 -5
  158. package/dist/service/remote.d.ts +5 -1
  159. package/dist/service/remote.js +108 -17
  160. package/dist/service/sse-stream.js +2 -2
  161. package/dist/service/types.d.ts +22 -19
  162. package/dist/service/types.js +1 -24
  163. package/dist/storage/clock.d.ts +1 -1
  164. package/dist/storage/clock.js +1 -1
  165. package/dist/storage/data-dir-lock.d.ts +10 -22
  166. package/dist/storage/data-dir-lock.js +28 -56
  167. package/dist/storage/file-lock.d.ts +64 -0
  168. package/dist/storage/file-lock.js +447 -0
  169. package/dist/storage/index.d.ts +2 -2
  170. package/dist/storage/index.js +5 -4
  171. package/dist/storage/run-liveness.d.ts +48 -0
  172. package/dist/storage/run-liveness.js +44 -0
  173. package/dist/storage/sqlite-config.d.ts +16 -0
  174. package/dist/storage/sqlite-config.js +59 -0
  175. package/dist/storage/sqlite-driver.d.ts +3 -1
  176. package/dist/storage/sqlite-driver.js +14 -4
  177. package/dist/storage/sqlite-events.d.ts +13 -0
  178. package/dist/storage/sqlite-events.js +48 -0
  179. package/dist/storage/sqlite-runs.d.ts +107 -0
  180. package/dist/storage/sqlite-runs.js +622 -0
  181. package/dist/storage/sqlite-schema.d.ts +5 -0
  182. package/dist/storage/sqlite-schema.js +143 -0
  183. package/dist/storage/sqlite-state.d.ts +33 -0
  184. package/dist/storage/sqlite-state.js +270 -0
  185. package/dist/storage/sqlite.d.ts +30 -57
  186. package/dist/storage/sqlite.js +84 -741
  187. package/dist/storage/types.d.ts +35 -2
  188. package/dist/utils/index.d.ts +18 -14
  189. package/dist/utils/index.js +37 -29
  190. package/dist/utils/semver.d.ts +18 -0
  191. package/dist/utils/semver.js +19 -0
  192. package/dist/utils/warning.d.ts +1 -0
  193. package/dist/utils/warning.js +52 -0
  194. package/dist/{json/value-validator.d.ts → value-validator.d.ts} +9 -0
  195. package/dist/value-validator.js +330 -0
  196. package/dist/version.d.ts +1 -1
  197. package/dist/version.js +1 -1
  198. package/package.json +10 -12
  199. package/dist/execution/index.d.ts +0 -2
  200. package/dist/execution/index.js +0 -2
  201. package/dist/filter/index.d.ts +0 -1
  202. package/dist/filter/index.js +0 -1
  203. package/dist/graph/index.d.ts +0 -4
  204. package/dist/graph/index.js +0 -4
  205. package/dist/input/metadata.d.ts +0 -99
  206. package/dist/input/metadata.js +0 -99
  207. package/dist/invocation/index.d.ts +0 -2
  208. package/dist/invocation/index.js +0 -2
  209. package/dist/ipc/index.d.ts +0 -4
  210. package/dist/ipc/index.js +0 -4
  211. package/dist/json/index.d.ts +0 -1
  212. package/dist/json/index.js +0 -1
  213. package/dist/json/value-validator.js +0 -330
  214. package/dist/node/index.d.ts +0 -1
  215. package/dist/node/index.js +0 -1
  216. package/dist/platform/node-fs.d.ts +0 -37
  217. package/dist/platform/node-fs.js +0 -81
  218. package/dist/process/control-arbiter.d.ts +0 -108
  219. package/dist/process/control-arbiter.js +0 -250
  220. package/dist/process/process-executor.d.ts +0 -47
  221. package/dist/process/process-executor.js +0 -296
  222. package/dist/profile/client-health.d.ts +0 -14
  223. package/dist/profile/client-query.d.ts +0 -30
  224. package/dist/profile/client-query.js +0 -69
  225. package/dist/profile/client.d.ts +0 -26
  226. package/dist/profile/client.js +0 -31
  227. package/dist/project/closure.d.ts +0 -25
  228. package/dist/project/closure.js +0 -74
  229. package/dist/registry/store.d.ts +0 -42
  230. package/dist/registry/store.js +0 -43
  231. package/dist/runtime/clock.d.ts +0 -7
  232. package/dist/runtime/clock.js +0 -7
  233. package/dist/runtime/module-loader.d.ts +0 -2
  234. package/dist/runtime/module-loader.js +0 -1
  235. package/dist/runtime/process.d.ts +0 -8
  236. package/dist/runtime/process.js +0 -1
  237. package/dist/runtime/runner.d.ts +0 -234
  238. package/dist/runtime/runner.js +0 -609
  239. package/dist/schema/index.d.ts +0 -1
  240. package/dist/schema/index.js +0 -1
  241. package/dist/server/dispatcher.d.ts +0 -25
  242. package/dist/server/dispatcher.js +0 -54
  243. package/dist/service/local.d.ts +0 -27
  244. package/dist/service/local.js +0 -141
  245. package/dist/storage/driver.d.ts +0 -10
  246. package/dist/storage/driver.js +0 -10
  247. package/dist/storage/lazy.d.ts +0 -8
  248. package/dist/storage/lazy.js +0 -45
  249. package/dist/storage/lock-core.d.ts +0 -158
  250. package/dist/storage/lock-core.js +0 -872
  251. package/dist/utils/net.d.ts +0 -10
  252. package/dist/utils/net.js +0 -16
  253. package/dist/utils/process.d.ts +0 -10
  254. package/dist/utils/process.js +0 -21
  255. /package/dist/{filter → utils}/intent.d.ts +0 -0
  256. /package/dist/{filter → utils}/intent.js +0 -0
package/dist/errors.js CHANGED
@@ -75,8 +75,6 @@ export const STORAGE_BUSY = "STORAGE_BUSY";
75
75
  export const PROJECT_BUSY = "PROJECT_BUSY";
76
76
  /** 工程存在未恢复的崩溃事务,需要执行恢复流程 */
77
77
  export const PROJECT_RECOVERY_REQUIRED = "PROJECT_RECOVERY_REQUIRED";
78
- /** SQLite 工作线程已退出 */
79
- export const STORAGE_WORKER_EXITED = "STORAGE_WORKER_EXITED";
80
78
  /** 事件订阅队列积压超过背压上限 */
81
79
  export const EVENT_BACKPRESSURE_LIMIT = "EVENT_BACKPRESSURE_LIMIT";
82
80
  export const EVENT_CURSOR_EXPIRED = "EVENT_CURSOR_EXPIRED";
@@ -178,7 +176,7 @@ export function describeActionLoadFailure(err, context) {
178
176
  const rootCause = err instanceof Error ? err.message : String(err ?? "");
179
177
  const isMissingModule = isMissingModuleError(rootCause);
180
178
  const hint = isMissingModule
181
- ? `依赖未安装,在 '${context.projectRoot}' 执行 npm install 或先执行 'ad run ${context.packageId}/${context.actionId}'`
179
+ ? `Project dependencies are missing. Run 'npm install --omit=dev' in '${context.projectRoot}' and try again.`
182
180
  : undefined;
183
181
  return {
184
182
  code: ACTION_LOAD_FAILED,
@@ -255,6 +253,58 @@ export const AMBIGUOUS_STATE_KEY = "AMBIGUOUS_STATE_KEY";
255
253
  export const RUN_NOT_FOUND = "RUN_NOT_FOUND";
256
254
  /** 目标运行已进入终态不可操作 */
257
255
  export const RUN_ALREADY_FINISHED = "RUN_ALREADY_FINISHED";
256
+ /** 目标环境配置 Profile 未找到 */
257
+ export const PROFILE_NOT_FOUND = "PROFILE_NOT_FOUND";
258
+ /** 锁文件读取失败 */
259
+ export const LOCKFILE_READ_FAILED = "LOCKFILE_READ_FAILED";
260
+ /** 锁文件内容损坏或存在重复键 */
261
+ export const LOCKFILE_CORRUPTED = "LOCKFILE_CORRUPTED";
262
+ /** 锁文件结构或格式非法 */
263
+ export const LOCKFILE_INVALID = "LOCKFILE_INVALID";
264
+ /** 不受支持的锁文件版本 */
265
+ export const UNSUPPORTED_LOCKFILE_VERSION = "UNSUPPORTED_LOCKFILE_VERSION";
266
+ /** 项目清单读取失败 */
267
+ export const MANIFEST_READ_FAILED = "MANIFEST_READ_FAILED";
268
+ /** 项目清单 JSON 解析失败或内容损坏 */
269
+ export const MANIFEST_CORRUPTED = "MANIFEST_CORRUPTED";
270
+ /** 项目清单结构或格式非法 */
271
+ export const MANIFEST_INVALID = "MANIFEST_INVALID";
272
+ /** 不受支持的项目清单 Schema 版本 */
273
+ export const UNSUPPORTED_MANIFEST_SCHEMA = "UNSUPPORTED_MANIFEST_SCHEMA";
274
+ /** 项目清单文件 actiondock.json 未找到 */
275
+ export const MANIFEST_NOT_FOUND = "MANIFEST_NOT_FOUND";
276
+ /** 清单确定性摘要与锁文件记录不一致 */
277
+ export const MANIFEST_DIGEST_MISMATCH = "MANIFEST_DIGEST_MISMATCH";
278
+ /** 全局注册表文件损坏或格式非法 */
279
+ export const REGISTRY_CORRUPTED = "REGISTRY_CORRUPTED";
280
+ /** 底层 SQLite 存储不支持异步事务 */
281
+ export const ASYNC_TRANSACTION_UNSUPPORTED = "ASYNC_TRANSACTION_UNSUPPORTED";
282
+ /** 底层存储或数据库连接已关闭 */
283
+ export const STORAGE_CLOSED = "STORAGE_CLOSED";
284
+ /** 多个不同物理路径声明了相同的包标识冲突 */
285
+ export const PACKAGE_ID_CONFLICT = "PACKAGE_ID_CONFLICT";
286
+ /** 路径参数非法(含空字节或非字符串) */
287
+ export const INVALID_PATH = "INVALID_PATH";
288
+ /** 存储数据目录初始化失败 */
289
+ export const STORAGE_INIT_FAILED = "STORAGE_INIT_FAILED";
290
+ /** 对象处于非法状态或缺少必要内部资源 */
291
+ export const INVALID_STATE = "INVALID_STATE";
292
+ /** 目标进程未找到或不存在 */
293
+ export const PROCESS_NOT_FOUND = "PROCESS_NOT_FOUND";
294
+ /** 模块标识符解析失败 */
295
+ export const MODULE_RESOLVE_FAILED = "MODULE_RESOLVE_FAILED";
296
+ /** 执行并发达到上限 */
297
+ export const EXECUTION_CONCURRENCY_LIMIT = "EXECUTION_CONCURRENCY_LIMIT";
298
+ /** 项目配置文件 actiondock.json 未找到 */
299
+ export const PROJECT_CONFIG_NOT_FOUND = "PROJECT_CONFIG_NOT_FOUND";
300
+ /** 项目清单加载失败 */
301
+ export const MANIFEST_LOAD_FAILED = "MANIFEST_LOAD_FAILED";
302
+ /** 动作标识符不符合命名规范 */
303
+ export const INVALID_ACTION_ID = "INVALID_ACTION_ID";
304
+ /** 规程标识符不符合命名规范 */
305
+ export const INVALID_PLAYBOOK_ID = "INVALID_PLAYBOOK_ID";
306
+ /** 项目根目录未找到或不是合法的 ActionDock 包 */
307
+ export const PROJECT_ROOT_NOT_FOUND = "PROJECT_ROOT_NOT_FOUND";
258
308
  /**
259
309
  * ActionDock 统一基础结构化异常类。
260
310
  * 全仓各领域异常与跨层透传异常的统一事实源基类。
@@ -263,15 +313,75 @@ export class ActionDockError extends Error {
263
313
  code;
264
314
  details;
265
315
  status;
266
- constructor(code, message, details, status) {
316
+ hint;
317
+ constructor(code, message, details, status, hint) {
267
318
  super(message);
268
319
  this.name = "ActionDockError";
269
320
  this.code = code;
270
321
  this.details = details;
271
322
  this.status = status;
323
+ this.hint =
324
+ hint ??
325
+ (details && typeof details === "object" && typeof details.hint === "string"
326
+ ? details.hint
327
+ : undefined);
272
328
  Object.setPrototypeOf(this, ActionDockError.prototype);
273
329
  }
274
330
  }
331
+ /**
332
+ * 统一构造机器错误信封。
333
+ */
334
+ export function createErrorEnvelope(code, message, details, meta, hint) {
335
+ const effectiveHint = hint ??
336
+ (details && typeof details === "object" && typeof details.hint === "string"
337
+ ? details.hint
338
+ : undefined);
339
+ const result = {
340
+ ok: false,
341
+ error: {
342
+ code,
343
+ message,
344
+ ...(details !== undefined ? { details } : {}),
345
+ },
346
+ };
347
+ if (effectiveHint !== undefined) {
348
+ result.hint = effectiveHint;
349
+ }
350
+ if (meta && Object.keys(meta).length > 0) {
351
+ result.meta = meta;
352
+ }
353
+ return result;
354
+ }
355
+ /**
356
+ * 根据 Action 执行失败错误解析自愈指引提示文案。
357
+ *
358
+ * 作为 CLI 与独立分发器(StandaloneDispatcher)执行失败时提示解析的单一事实源。
359
+ *
360
+ * @param targetRef 目标 Action 引用标识(如 "greet" 或 "pkg/greet")
361
+ * @param error 执行失败错误对象
362
+ */
363
+ export function resolveExecutionHint(targetRef, error) {
364
+ if (!error)
365
+ return undefined;
366
+ if (error.code === INPUT_VALIDATION_FAILED) {
367
+ return `Tip: Run 'ad describe ${targetRef}' to inspect schema and syntax examples.`;
368
+ }
369
+ if (error.code === ACTION_NOT_FOUND) {
370
+ return "Tip: Run 'ad list' to discover available actions, or 'ad info' to inspect packages.";
371
+ }
372
+ if (error.code === ACTION_TIMEOUT) {
373
+ return "Tip: Increase timeout via '--timeout <duration>', or run in background via '--async' and track with 'ad runs show <runId>'.";
374
+ }
375
+ if (error.hint && typeof error.hint === "string") {
376
+ return error.hint;
377
+ }
378
+ if (error.details &&
379
+ typeof error.details === "object" &&
380
+ typeof error.details.hint === "string") {
381
+ return error.details.hint;
382
+ }
383
+ return undefined;
384
+ }
275
385
  /**
276
386
  * 进程领域结构化异常类。
277
387
  */
@@ -1,36 +1,56 @@
1
- import type { ActionDefinition, ActionRef, ExecutionEvent, ExecutionResult, JsonValue, RunRecord } from "@actiondock/sdk";
1
+ import type { ActionDefinition, ActionRef, ExecutionEvent, ExecutionResult, RunRecord } from "@actiondock/sdk";
2
2
  import { type EventSink } from "../runtime/events.js";
3
- import { type ExecutionHandle } from "../runtime/runner.js";
3
+ import { type RuntimeStorage } from "../storage/types.js";
4
4
  import { type PackageIdentity } from "../runtime/identity.js";
5
- import type { ActionInvoker, CancelResult, ExecutionService, ExecutionServiceOptions, ExecutionTicket, InvocationContext } from "./types.js";
5
+ import type { ActionInvoker, CancelResult, ExecutionHandle, ExecutionService, ExecutionServiceOptions, ExecutionTicket } from "./types.js";
6
+ import { type InvocationContext, type RunOptions } from "../invocation/types.js";
6
7
  export type { ExecutionServiceOptions };
7
8
  /**
8
- * 统一执行协调服务实现。
9
+ * 在途运行心跳刷新间隔(毫秒)。
10
+ *
11
+ * 必须显著小于存活判定的宽限期(见 run-liveness 的 RUN_LIVENESS_GRACE_MS),
12
+ * 保证心跳正常的宿主绝不被误判过期;间隔内崩溃由进程探测兜底,
13
+ * 心跳只服务无进程标识的遗留记录收敛判定。
14
+ */
15
+ export declare const RUN_HEARTBEAT_INTERVAL_MS = 30000;
16
+ /**
17
+ * 统一执行引擎(融合原协调服务与运行器)。
18
+ * 消除双层 AbortController 与重复参数透传,收敛唯一生命周期与存储落库。
9
19
  */
10
20
  export declare class DefaultExecutionService implements ExecutionService {
11
21
  readonly identity: PackageIdentity;
12
22
  readonly packageId: string;
23
+ readonly packageInstanceId: string;
24
+ readonly generationId: string;
25
+ hostSessionId?: string;
26
+ /** 宿主进程标识:落库到运行记录供跨进程存活判定(并发打开同一数据目录时不误收割) */
27
+ readonly hostPid: number;
28
+ readonly eventSink: EventSink;
13
29
  private storage;
30
+ private globalStorage?;
14
31
  private projectConfig?;
15
32
  private projectRoot?;
33
+ private configOverrides;
16
34
  private moduleLoader?;
17
- readonly eventSink: EventSink;
18
- readonly packageInstanceId: string;
19
- readonly generationId: string;
20
35
  private maxActiveRuns;
21
36
  private ownerId;
22
- hostSessionId?: string;
23
- private _runner;
37
+ private actionResolver?;
24
38
  private logger?;
25
- private clock?;
39
+ private clock;
26
40
  private process?;
27
- private actionResolver?;
28
- private activeRuns;
29
- private globalStorage?;
30
41
  private actionInvoker?;
42
+ private registry;
43
+ private activeRuns;
44
+ /** 在途运行心跳定时器:周期性刷新心跳时间戳,支撑无进程标识判定路径的兜底收敛 */
45
+ private heartbeatTimer?;
31
46
  private isClosing;
32
47
  private reservedSlots;
33
48
  constructor(options: ExecutionServiceOptions);
49
+ /** 获取运行底层存储实例 */
50
+ getStorage(): RuntimeStorage;
51
+ /** 兼容性引用,执行引擎即执行器自身 */
52
+ get _runner(): this;
53
+ get activeRunsCount(): number;
34
54
  setActionInvoker(invoker?: ActionInvoker): void;
35
55
  registerAction(id: string, action: ActionDefinition): void;
36
56
  registerAction(action: ({
@@ -40,35 +60,21 @@ export declare class DefaultExecutionService implements ExecutionService {
40
60
  getAction(id: string): ActionDefinition | undefined;
41
61
  listActions(): ActionDefinition[];
42
62
  getActiveHandle(runId: string): ExecutionHandle | undefined;
43
- execute(ref: ActionRef | string, input: JsonValue, context: InvocationContext): Promise<ExecutionResult>;
44
- run(ref: ActionRef | string, input: JsonValue, context: InvocationContext): Promise<ExecutionResult>;
45
- get activeRunsCount(): number;
46
- start(ref: ActionRef | string, input: JsonValue, context: InvocationContext): Promise<ExecutionTicket>;
47
- /**
48
- * 幂等门检查:digest 计算与冲突/重复分流(重复命中时直接返回已有票据)。
49
- */
63
+ execute(ref: ActionDefinition | ActionRef | string, input?: unknown, contextOrOptions?: InvocationContext | RunOptions | Record<string, unknown>): Promise<ExecutionResult>;
64
+ run(ref: ActionDefinition | ActionRef | string, input?: unknown, contextOrOptions?: InvocationContext | RunOptions | Record<string, unknown>): Promise<ExecutionResult>;
65
+ start(ref: ActionDefinition | ActionRef | string, input?: unknown, contextOrOptions?: InvocationContext | RunOptions | Record<string, unknown>): Promise<ExecutionTicket & ExecutionHandle>;
66
+ private normalizeContext;
67
+ private raceExecution;
68
+ private classifyExecutionError;
69
+ private invokeChildAction;
50
70
  private checkIdempotencyGate;
51
- /**
52
- * 解析执行目标:确定目标 Action 定义。
53
- * 铁律 4:Runner 不找 Package,ExecutionService 仅执行本 Package 的 Action。
54
- */
55
71
  private resolveExecutionTarget;
56
- /**
57
- * 解析指定 Action 定义(供 PackageRuntime 或内部使用)。
58
- */
59
72
  resolveAction(ref: ActionRef | string): Promise<ActionDefinition | undefined>;
60
- /**
61
- * 目标 Action 缺失时的失败票据:落库 failed 记录并补发 status 与 finish 事件。
62
- */
63
73
  private failTicketForMissingAction;
64
- /**
65
- * 创建执行事件桥:事件序列号分配、进度报告器与双写日志适配器。
66
- */
74
+ private buildPersistenceInput;
75
+ private checkActionInputSchema;
76
+ private checkActionOutputSchema;
67
77
  private createEventBridge;
68
- /**
69
- * 监听执行句柄终态:映射终态状态、补发 status 与 finish 事件并注销活跃运行。
70
- */
71
- private watchHandleCompletion;
72
78
  get(runId: string): Promise<RunRecord | undefined>;
73
79
  cancel(runId: string, reason?: string): Promise<CancelResult>;
74
80
  events(runId: string, options?: {
@@ -76,8 +82,20 @@ export declare class DefaultExecutionService implements ExecutionService {
76
82
  signal?: AbortSignal;
77
83
  maxQueueSize?: number;
78
84
  }): AsyncIterable<ExecutionEvent>;
85
+ /**
86
+ * 确保在途运行心跳定时器存在。
87
+ *
88
+ * 存活判定的第一依据是进程探测(运行记录已落库宿主进程标识),
89
+ * 心跳是对遗留记录(无进程标识)与其他协作场景的兜底信号:
90
+ * 持有进程周期性刷新在途记录的心跳时间戳,收割方仅对心跳过期的
91
+ * 遗留记录做宽限期判定,正常运行中的记录绝不会被误判过期。
92
+ * 定时器不阻塞进程退出(unref),无在途运行时不产生任何调度。
93
+ */
94
+ private ensureHeartbeatTimer;
79
95
  close(options?: {
80
96
  graceMs?: number;
81
97
  }): Promise<void>;
98
+ dispose(): Promise<void>;
82
99
  }
83
100
  export { DefaultExecutionService as ExecutionService };
101
+ export { DefaultExecutionService as ActionRunner };