@a5c-ai/agent-platform 5.0.1-staging.04ca6ab00d21 → 5.0.1-staging.19033314d476

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 (202) hide show
  1. package/README.md +8 -13
  2. package/dist/breakpoints/approvalChains.d.ts +1 -1
  3. package/dist/breakpoints/approvalChains.js +1 -1
  4. package/dist/breakpoints/delegation.d.ts +1 -1
  5. package/dist/breakpoints/delegation.js +1 -1
  6. package/dist/breakpoints/delegationTypes.d.ts +1 -1
  7. package/dist/breakpoints/delegationTypes.js +1 -1
  8. package/dist/breakpoints/postures.d.ts +1 -1
  9. package/dist/breakpoints/postures.js +1 -1
  10. package/dist/compression/compaction.d.ts +1 -1
  11. package/dist/compression/compaction.js +1 -1
  12. package/dist/cost/effectCost.d.ts +1 -1
  13. package/dist/cost/journal.d.ts.map +1 -1
  14. package/dist/cost/journal.js +23 -2
  15. package/dist/daemon/config.d.ts.map +1 -1
  16. package/dist/daemon/config.js +36 -0
  17. package/dist/daemon/durableQueue.d.ts +41 -0
  18. package/dist/daemon/durableQueue.d.ts.map +1 -0
  19. package/dist/daemon/durableQueue.js +183 -0
  20. package/dist/daemon/fileWatcher.d.ts.map +1 -1
  21. package/dist/daemon/fileWatcher.js +3 -0
  22. package/dist/daemon/index.d.ts +3 -1
  23. package/dist/daemon/index.d.ts.map +1 -1
  24. package/dist/daemon/index.js +6 -1
  25. package/dist/daemon/loop.d.ts +6 -0
  26. package/dist/daemon/loop.d.ts.map +1 -1
  27. package/dist/daemon/loop.js +209 -18
  28. package/dist/daemon/timerScheduler.d.ts.map +1 -1
  29. package/dist/daemon/timerScheduler.js +111 -21
  30. package/dist/daemon/types.d.ts +30 -1
  31. package/dist/daemon/types.d.ts.map +1 -1
  32. package/dist/daemon/webhookListener.d.ts.map +1 -1
  33. package/dist/daemon/webhookListener.js +25 -3
  34. package/dist/harness/amux/amuxEventMapper.d.ts +6 -1
  35. package/dist/harness/amux/amuxEventMapper.d.ts.map +1 -1
  36. package/dist/harness/amux/amuxEventMapper.js +13 -5
  37. package/dist/harness/amux/amuxStdinReader.js +2 -2
  38. package/dist/harness/index.d.ts +8 -0
  39. package/dist/harness/index.d.ts.map +1 -1
  40. package/dist/harness/index.js +26 -1
  41. package/dist/harness/internal/createRun/agent-core-loop.d.ts +43 -0
  42. package/dist/harness/internal/createRun/agent-core-loop.d.ts.map +1 -0
  43. package/dist/harness/internal/createRun/agent-core-loop.js +247 -0
  44. package/dist/harness/internal/createRun/index.d.ts.map +1 -1
  45. package/dist/harness/internal/createRun/index.js +26 -0
  46. package/dist/harness/internal/createRun/orchestration/constants.d.ts.map +1 -1
  47. package/dist/harness/internal/createRun/orchestration/constants.js +4 -0
  48. package/dist/harness/internal/createRun/orchestration/dispatch.d.ts +23 -0
  49. package/dist/harness/internal/createRun/orchestration/dispatch.d.ts.map +1 -0
  50. package/dist/harness/internal/createRun/orchestration/dispatch.js +135 -0
  51. package/dist/harness/internal/createRun/orchestration/effects.d.ts +107 -16
  52. package/dist/harness/internal/createRun/orchestration/effects.d.ts.map +1 -1
  53. package/dist/harness/internal/createRun/orchestration/effects.js +431 -62
  54. package/dist/harness/internal/createRun/orchestration/effectsHelpers.js +1 -1
  55. package/dist/harness/internal/createRun/orchestration/effectsHelpers.test.d.ts +2 -0
  56. package/dist/harness/internal/createRun/orchestration/effectsHelpers.test.d.ts.map +1 -0
  57. package/dist/harness/internal/createRun/orchestration/effectsHelpers.test.js +81 -0
  58. package/dist/harness/internal/createRun/orchestration/externalPhase.d.ts.map +1 -1
  59. package/dist/harness/internal/createRun/orchestration/externalPhase.js +104 -24
  60. package/dist/harness/internal/createRun/orchestration/externalPhaseHelpers.js +1 -1
  61. package/dist/harness/internal/createRun/orchestration/hookDecisionEffects.d.ts +32 -0
  62. package/dist/harness/internal/createRun/orchestration/hookDecisionEffects.d.ts.map +1 -0
  63. package/dist/harness/internal/createRun/orchestration/hookDecisionEffects.js +76 -0
  64. package/dist/harness/internal/createRun/orchestration/index.d.ts +15 -0
  65. package/dist/harness/internal/createRun/orchestration/index.d.ts.map +1 -1
  66. package/dist/harness/internal/createRun/orchestration/index.js +334 -0
  67. package/dist/harness/internal/createRun/orchestration/internalPhase.d.ts.map +1 -1
  68. package/dist/harness/internal/createRun/orchestration/internalPhase.js +38 -9
  69. package/dist/harness/internal/createRun/output.d.ts +2 -0
  70. package/dist/harness/internal/createRun/output.d.ts.map +1 -1
  71. package/dist/harness/internal/createRun/output.js +58 -6
  72. package/dist/harness/internal/createRun/pi.d.ts +9 -33
  73. package/dist/harness/internal/createRun/pi.d.ts.map +1 -1
  74. package/dist/harness/internal/createRun/pi.js +33 -214
  75. package/dist/harness/internal/createRun/planProcess/delegation.js +1 -1
  76. package/dist/harness/internal/createRun/planProcess/phase.d.ts.map +1 -1
  77. package/dist/harness/internal/createRun/planProcess/phase.js +80 -17
  78. package/dist/harness/internal/createRun/planProcess/prompts.d.ts +2 -0
  79. package/dist/harness/internal/createRun/planProcess/prompts.d.ts.map +1 -1
  80. package/dist/harness/internal/createRun/planProcess/prompts.js +31 -0
  81. package/dist/harness/internal/createRun/planProcess/recovery.d.ts.map +1 -1
  82. package/dist/harness/internal/createRun/planProcess/recovery.js +20 -3
  83. package/dist/harness/internal/createRun/planProcess/validation.d.ts +2 -0
  84. package/dist/harness/internal/createRun/planProcess/validation.d.ts.map +1 -1
  85. package/dist/harness/internal/createRun/planProcess/validation.js +52 -4
  86. package/dist/harness/internal/createRun/planProcess/validationSource.d.ts +2 -0
  87. package/dist/harness/internal/createRun/planProcess/validationSource.d.ts.map +1 -1
  88. package/dist/harness/internal/createRun/planProcess/validationSource.js +17 -0
  89. package/dist/harness/internal/createRun/prompts.d.ts +10 -0
  90. package/dist/harness/internal/createRun/prompts.d.ts.map +1 -1
  91. package/dist/harness/internal/createRun/prompts.js +120 -0
  92. package/dist/harness/internal/createRun/utils.d.ts +4 -2
  93. package/dist/harness/internal/createRun/utils.d.ts.map +1 -1
  94. package/dist/harness/internal/createRun/utils.js +87 -2
  95. package/dist/harness/invoker.d.ts +5 -4
  96. package/dist/harness/invoker.d.ts.map +1 -1
  97. package/dist/harness/invoker.js +92 -26
  98. package/dist/harness/piWrapper/moduleSupport.d.ts +3 -2
  99. package/dist/harness/piWrapper/moduleSupport.d.ts.map +1 -1
  100. package/dist/harness/piWrapper/moduleSupport.js +23 -20
  101. package/dist/harness/piWrapper/moduleSupport.test.d.ts +2 -0
  102. package/dist/harness/piWrapper/moduleSupport.test.d.ts.map +1 -0
  103. package/dist/harness/piWrapper/moduleSupport.test.js +31 -0
  104. package/dist/harness/piWrapper.d.ts +4 -2
  105. package/dist/harness/piWrapper.d.ts.map +1 -1
  106. package/dist/harness/piWrapper.js +24 -7
  107. package/dist/harness/piWrapper.test.js +49 -2
  108. package/dist/harness/types.d.ts +11 -1
  109. package/dist/harness/types.d.ts.map +1 -1
  110. package/dist/index.d.ts +0 -1
  111. package/dist/index.d.ts.map +1 -1
  112. package/dist/index.js +0 -1
  113. package/dist/mcp/channels/index.d.ts +1 -2
  114. package/dist/mcp/channels/index.d.ts.map +1 -1
  115. package/dist/mcp/channels/index.js +1 -2
  116. package/dist/mcp/client/config.d.ts +1 -1
  117. package/dist/mcp/client/config.d.ts.map +1 -1
  118. package/dist/mcp/client/config.js +4 -2
  119. package/dist/mcp/client/executor.d.ts +1 -1
  120. package/dist/mcp/client/executor.d.ts.map +1 -1
  121. package/dist/mcp/client/executor.js +2 -1
  122. package/dist/mcp/client/index.d.ts +1 -1
  123. package/dist/mcp/client/index.js +1 -1
  124. package/dist/mcp/client/manager.d.ts +1 -1
  125. package/dist/mcp/client/manager.d.ts.map +1 -1
  126. package/dist/mcp/client/manager.js +2 -1
  127. package/dist/mcp/client/toolRegistry.d.ts +64 -1
  128. package/dist/mcp/client/toolRegistry.d.ts.map +1 -1
  129. package/dist/mcp/client/toolRegistry.js +73 -1
  130. package/dist/mcp/client/types.d.ts +1 -1
  131. package/dist/mcp/client/types.js +1 -1
  132. package/dist/mcp/transport/index.d.ts +1 -1
  133. package/dist/mcp/transport/index.js +1 -1
  134. package/dist/mcp/transport/session.d.ts +1 -1
  135. package/dist/mcp/transport/session.js +1 -1
  136. package/dist/mcp/transport/types.d.ts +1 -1
  137. package/dist/mcp/transport/types.js +1 -1
  138. package/dist/mcp/transport/websocket.d.ts +1 -1
  139. package/dist/mcp/transport/websocket.js +1 -1
  140. package/dist/seams/contract.d.ts +5 -5
  141. package/dist/seams/contract.d.ts.map +1 -1
  142. package/dist/seams/contract.js +3 -5
  143. package/dist/seams/contract.test.js +4 -7
  144. package/dist/session/cost.d.ts +9 -0
  145. package/dist/session/cost.d.ts.map +1 -1
  146. package/dist/session/cost.js +27 -0
  147. package/dist/session/history.d.ts.map +1 -1
  148. package/dist/session/history.js +1 -0
  149. package/dist/storage/journalWatcher.d.ts.map +1 -1
  150. package/dist/storage/journalWatcher.js +2 -1
  151. package/package.json +16 -18
  152. package/dist/cli/amuxEventsFormatter.d.ts +0 -26
  153. package/dist/cli/amuxEventsFormatter.d.ts.map +0 -1
  154. package/dist/cli/amuxEventsFormatter.js +0 -86
  155. package/dist/cli/args/argFlags.d.ts +0 -6
  156. package/dist/cli/args/argFlags.d.ts.map +0 -1
  157. package/dist/cli/args/argFlags.js +0 -72
  158. package/dist/cli/args/argPositionals.d.ts +0 -3
  159. package/dist/cli/args/argPositionals.d.ts.map +0 -1
  160. package/dist/cli/args/argPositionals.js +0 -18
  161. package/dist/cli/args/index.d.ts +0 -4
  162. package/dist/cli/args/index.d.ts.map +0 -1
  163. package/dist/cli/args/index.js +0 -75
  164. package/dist/cli/args/types.d.ts +0 -13
  165. package/dist/cli/args/types.d.ts.map +0 -1
  166. package/dist/cli/args/types.js +0 -2
  167. package/dist/cli/commands/daemon.d.ts +0 -31
  168. package/dist/cli/commands/daemon.d.ts.map +0 -1
  169. package/dist/cli/commands/daemon.js +0 -156
  170. package/dist/cli/commands/harness/createRun.d.ts +0 -3
  171. package/dist/cli/commands/harness/createRun.d.ts.map +0 -1
  172. package/dist/cli/commands/harness/createRun.js +0 -8
  173. package/dist/cli/commands/harness/resumeRun.d.ts +0 -20
  174. package/dist/cli/commands/harness/resumeRun.d.ts.map +0 -1
  175. package/dist/cli/commands/harness/resumeRun.js +0 -341
  176. package/dist/cli/commands/jsonlInteractive.d.ts +0 -35
  177. package/dist/cli/commands/jsonlInteractive.d.ts.map +0 -1
  178. package/dist/cli/commands/jsonlInteractive.js +0 -302
  179. package/dist/cli/commands/mcpServe.d.ts +0 -18
  180. package/dist/cli/commands/mcpServe.d.ts.map +0 -1
  181. package/dist/cli/commands/mcpServe.js +0 -59
  182. package/dist/cli/commands/session/history.d.ts +0 -14
  183. package/dist/cli/commands/session/history.d.ts.map +0 -1
  184. package/dist/cli/commands/session/history.js +0 -100
  185. package/dist/cli/commands/tui.d.ts +0 -23
  186. package/dist/cli/commands/tui.d.ts.map +0 -1
  187. package/dist/cli/commands/tui.js +0 -183
  188. package/dist/cli/dispatch.d.ts +0 -4
  189. package/dist/cli/dispatch.d.ts.map +0 -1
  190. package/dist/cli/dispatch.js +0 -332
  191. package/dist/cli/main.d.ts +0 -7
  192. package/dist/cli/main.d.ts.map +0 -1
  193. package/dist/cli/main.js +0 -41
  194. package/dist/cli/program.d.ts +0 -7
  195. package/dist/cli/program.d.ts.map +0 -1
  196. package/dist/cli/program.js +0 -8
  197. package/dist/cli/ui.d.ts +0 -9
  198. package/dist/cli/ui.d.ts.map +0 -1
  199. package/dist/cli/ui.js +0 -125
  200. package/dist/prompts/commandTemplates.d.ts +0 -3
  201. package/dist/prompts/commandTemplates.d.ts.map +0 -1
  202. package/dist/prompts/commandTemplates.js +0 -238
package/README.md CHANGED
@@ -1,34 +1,29 @@
1
1
  # @a5c-ai/agent-platform
2
2
 
3
- Agent Platform layer — harness integration, governance, CLI hosting, interaction, storage.
3
+ Agent Platform layer — harness integration, governance, interaction, storage.
4
4
 
5
5
  <!-- docs-status:start -->
6
6
  > Status: Public advanced/runtime package.
7
7
  > Canonical docs home: [Package and Plugin Docs Map](../../docs/package-and-plugin-map.md).
8
- > This README is the canonical runtime CLI contract for operator-facing `agent-platform` workflows.
8
+ > This README is the canonical runtime/platform API contract. The product CLI implementation lives in `@a5c-ai/omni`.
9
9
  <!-- docs-status:end -->
10
10
 
11
11
  ## Installation
12
12
 
13
13
  ```bash
14
- npm install -g @a5c-ai/agent-platform
14
+ npm install @a5c-ai/agent-platform
15
15
  ```
16
16
 
17
17
  ## Usage
18
18
 
19
- This package provides the `agent-platform` command. Use it for runtime orchestration.
19
+ Use this package as the reusable platform API layer. Install `@a5c-ai/omni` for the product CLI.
20
20
 
21
- ```bash
22
- agent-platform --help
23
- agent-platform call --harness claude-code --prompt "implement feature X" --workspace .
24
- babysitter session:init --session-id demo --state-dir .a5c --run-id run-123
25
- agent-platform start-server --transport stdio
26
- agent-platform discover --json
27
- agent-platform invoke claude-code --prompt "implement feature X" --workspace .
28
- agent-platform tui --workspace .
21
+ ```ts
22
+ import { discoverHarnesses, invokeHarness } from "@a5c-ai/agent-platform/harness";
23
+ import { apiRunStatus } from "@a5c-ai/agent-platform/api";
29
24
  ```
30
25
 
31
- Use the main `babysitter` CLI for harness installation and session-state commands:
26
+ Use `@a5c-ai/omni` for the product CLI and the main `babysitter` CLI for harness installation and session-state commands:
32
27
 
33
28
  ```bash
34
29
  babysitter harness:install claude-code
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Status: NOT INTEGRATED YET
2
+ * Status: Integrated with agent-platform breakpoint governance.
3
3
  * Moved from @a5c-ai/babysitter-sdk.
4
4
  * GAP-BRK-001: Breakpoint Approval Chains.
5
5
  *
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  /**
3
- * Status: NOT INTEGRATED YET
3
+ * Status: Integrated with agent-platform breakpoint governance.
4
4
  * Moved from @a5c-ai/babysitter-sdk.
5
5
  * GAP-BRK-001: Breakpoint Approval Chains.
6
6
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Status: NOT INTEGRATED YET
2
+ * Status: Integrated with agent-platform breakpoint governance.
3
3
  * Moved from @a5c-ai/babysitter-sdk.
4
4
  * GAP-BRK-002: Breakpoint Delegation to External Systems.
5
5
  *
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  /**
3
- * Status: NOT INTEGRATED YET
3
+ * Status: Integrated with agent-platform breakpoint governance.
4
4
  * Moved from @a5c-ai/babysitter-sdk.
5
5
  * GAP-BRK-002: Breakpoint Delegation to External Systems.
6
6
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Status: NOT INTEGRATED YET
2
+ * Status: Integrated with agent-platform breakpoint governance.
3
3
  * Moved from @a5c-ai/babysitter-sdk.
4
4
  * GAP-BRK-002: Breakpoint delegation types.
5
5
  */
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  /**
3
- * Status: NOT INTEGRATED YET
3
+ * Status: Integrated with agent-platform breakpoint governance.
4
4
  * Moved from @a5c-ai/babysitter-sdk.
5
5
  * GAP-BRK-002: Breakpoint delegation types.
6
6
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Status: NOT INTEGRATED YET
2
+ * Status: Integrated with agent-platform breakpoint governance.
3
3
  * Moved from @a5c-ai/babysitter-sdk.
4
4
  * GAP-SEC-005: Approval Posture Model
5
5
  *
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  /**
3
- * Status: NOT INTEGRATED YET
3
+ * Status: Integrated with agent-platform breakpoint governance.
4
4
  * Moved from @a5c-ai/babysitter-sdk.
5
5
  * GAP-SEC-005: Approval Posture Model
6
6
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Status: NOT INTEGRATED YET
2
+ * Status: Integrated with agent-platform orchestration.
3
3
  * Moved from @a5c-ai/babysitter-sdk.
4
4
  * GAP-PERF-002: Session Compaction.
5
5
  *
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  /**
3
- * Status: NOT INTEGRATED YET
3
+ * Status: Integrated with agent-platform orchestration.
4
4
  * Moved from @a5c-ai/babysitter-sdk.
5
5
  * GAP-PERF-002: Session Compaction.
6
6
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Status: NOT INTEGRATED YET
2
+ * Status: Integrated with agent-platform orchestration.
3
3
  * Moved from @a5c-ai/babysitter-sdk.
4
4
  * Per-effect cost aggregation (GAP-SUBOBS-003).
5
5
  */
@@ -1 +1 @@
1
- {"version":3,"file":"journal.d.ts","sourceRoot":"","sources":["../../src/cost/journal.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAe,KAAK,iBAAiB,EAAE,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAChG,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EAGb,MAAM,SAAS,CAAC;AAGjB,4DAA4D;AAC5D,eAAO,MAAM,uBAAuB,iBAAiB,CAAC;AAEtD;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,aAAa,GACtB,OAAO,CAAC,iBAAiB,CAAC,CA0B5B;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,CAExE;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,EAAE,GACrB,YAAY,CAwFd"}
1
+ {"version":3,"file":"journal.d.ts","sourceRoot":"","sources":["../../src/cost/journal.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAe,KAAK,iBAAiB,EAAE,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAChG,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EAGb,MAAM,SAAS,CAAC;AAGjB,4DAA4D;AAC5D,eAAO,MAAM,uBAAuB,iBAAiB,CAAC;AAEtD;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,aAAa,GACtB,OAAO,CAAC,iBAAiB,CAAC,CA+B5B;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,CAExE;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,EAAE,GACrB,YAAY,CAyGd"}
@@ -37,10 +37,14 @@ async function appendCostEvent(runDir, costData) {
37
37
  if (!enriched.timestamp) {
38
38
  enriched.timestamp = new Date().toISOString();
39
39
  }
40
+ // Convert CostEventData to JsonRecord (Record<string, unknown>) without a
41
+ // double-cast. Spread produces a plain object whose type satisfies the
42
+ // index signature that CostEventData's interface lacks.
43
+ const eventRecord = { ...enriched };
40
44
  return (0, babysitter_sdk_1.appendEvent)({
41
45
  runDir,
42
46
  eventType: exports.COST_TRACKED_EVENT_TYPE,
43
- event: enriched,
47
+ event: eventRecord,
44
48
  });
45
49
  }
46
50
  /**
@@ -77,7 +81,24 @@ function computeRunCostStats(runId, events) {
77
81
  byKind: {},
78
82
  };
79
83
  for (const event of costEvents) {
80
- const data = event.data;
84
+ // Validate the expected shape before treating data as CostEventData.
85
+ // journal event data is typed as JsonRecord (Record<string, unknown>),
86
+ // so we perform a runtime check on the critical numeric fields.
87
+ const raw = event.data;
88
+ if (typeof raw !== "object" || raw === null) {
89
+ continue; // skip malformed events
90
+ }
91
+ const data = {
92
+ model: typeof raw.model === "string" ? raw.model : "unknown",
93
+ inputTokens: typeof raw.inputTokens === "number" ? raw.inputTokens : 0,
94
+ outputTokens: typeof raw.outputTokens === "number" ? raw.outputTokens : 0,
95
+ cacheCreationTokens: typeof raw.cacheCreationTokens === "number" ? raw.cacheCreationTokens : 0,
96
+ cacheReadTokens: typeof raw.cacheReadTokens === "number" ? raw.cacheReadTokens : 0,
97
+ cacheCreation5mTokens: typeof raw.cacheCreation5mTokens === "number" ? raw.cacheCreation5mTokens : 0,
98
+ cacheCreation1hTokens: typeof raw.cacheCreation1hTokens === "number" ? raw.cacheCreation1hTokens : 0,
99
+ costUsd: typeof raw.costUsd === "number" ? raw.costUsd : undefined,
100
+ taskKind: typeof raw.taskKind === "string" ? raw.taskKind : undefined,
101
+ };
81
102
  const inputTokens = data.inputTokens ?? 0;
82
103
  const outputTokens = data.outputTokens ?? 0;
83
104
  const cacheCreationTokens = data.cacheCreationTokens ?? 0;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/daemon/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAkJ5C,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CA0BlC;AAED,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAgB1B"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/daemon/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AA+L5C,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CA0BlC;AAED,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAgB1B"}
@@ -133,6 +133,37 @@ function validateAutomationRule(raw, index) {
133
133
  }
134
134
  return null;
135
135
  }
136
+ function validateAdmission(raw) {
137
+ if (raw === undefined)
138
+ return null;
139
+ if (!isRecord(raw)) {
140
+ return "triggerAdmission must be an object";
141
+ }
142
+ if (raw.maxPendingRuns !== undefined
143
+ && (typeof raw.maxPendingRuns !== "number" || !Number.isInteger(raw.maxPendingRuns) || raw.maxPendingRuns < 0)) {
144
+ return "triggerAdmission.maxPendingRuns must be a non-negative integer";
145
+ }
146
+ if (raw.dedupeWindowMs !== undefined
147
+ && (typeof raw.dedupeWindowMs !== "number" || !Number.isInteger(raw.dedupeWindowMs) || raw.dedupeWindowMs < 0)) {
148
+ return "triggerAdmission.dedupeWindowMs must be a non-negative integer";
149
+ }
150
+ if (raw.rateLimit !== undefined) {
151
+ if (!isRecord(raw.rateLimit)) {
152
+ return "triggerAdmission.rateLimit must be an object";
153
+ }
154
+ if (typeof raw.rateLimit.maxTriggers !== "number"
155
+ || !Number.isInteger(raw.rateLimit.maxTriggers)
156
+ || raw.rateLimit.maxTriggers <= 0) {
157
+ return "triggerAdmission.rateLimit.maxTriggers must be a positive integer";
158
+ }
159
+ if (typeof raw.rateLimit.windowMs !== "number"
160
+ || !Number.isInteger(raw.rateLimit.windowMs)
161
+ || raw.rateLimit.windowMs <= 0) {
162
+ return "triggerAdmission.rateLimit.windowMs must be a positive integer";
163
+ }
164
+ }
165
+ return null;
166
+ }
136
167
  function validateConfig(raw) {
137
168
  if (typeof raw !== "object" || raw === null || Array.isArray(raw)) {
138
169
  return { valid: false, error: "Config must be a JSON object" };
@@ -156,12 +187,17 @@ function validateConfig(raw) {
156
187
  const maxConcurrent = typeof obj.maxConcurrentRuns === "number"
157
188
  ? obj.maxConcurrentRuns
158
189
  : DEFAULT_MAX_CONCURRENT_RUNS;
190
+ const admissionError = validateAdmission(obj.triggerAdmission);
191
+ if (admissionError) {
192
+ return { valid: false, error: admissionError };
193
+ }
159
194
  return {
160
195
  valid: true,
161
196
  config: {
162
197
  workspace: obj.workspace,
163
198
  triggers: obj.triggers,
164
199
  maxConcurrentRuns: maxConcurrent,
200
+ triggerAdmission: obj.triggerAdmission,
165
201
  },
166
202
  };
167
203
  }
@@ -0,0 +1,41 @@
1
+ import type { TriggerEvent } from "./types";
2
+ export type DurableTriggerState = "pending" | "running" | "succeeded" | "failed" | "dead-letter";
3
+ export interface DurableTriggerQueueOptions {
4
+ maxAttempts?: number;
5
+ baseBackoffMs?: number;
6
+ now?: () => number;
7
+ }
8
+ export interface DurableTriggerRecord {
9
+ id: string;
10
+ trigger: TriggerEvent;
11
+ state: DurableTriggerState;
12
+ attempts: number;
13
+ enqueuedAt: string;
14
+ updatedAt: string;
15
+ nextAttemptAt?: string;
16
+ ackedAt?: string;
17
+ lastError?: string;
18
+ }
19
+ export declare class DurableTriggerQueue {
20
+ private readonly filePath;
21
+ private readonly maxAttempts;
22
+ private readonly baseBackoffMs;
23
+ private readonly now;
24
+ private events;
25
+ private writeChain;
26
+ private constructor();
27
+ static open(daemonDir: string, options?: DurableTriggerQueueOptions): Promise<DurableTriggerQueue>;
28
+ enqueue(trigger: TriggerEvent): Promise<DurableTriggerRecord>;
29
+ claimDue(limit?: number): Promise<DurableTriggerRecord[]>;
30
+ ack(id: string): Promise<void>;
31
+ fail(id: string, error: unknown): Promise<void>;
32
+ snapshot(): Promise<DurableTriggerRecord[]>;
33
+ counts(): {
34
+ active: number;
35
+ pending: number;
36
+ deadLetter: number;
37
+ };
38
+ private load;
39
+ private persist;
40
+ }
41
+ //# sourceMappingURL=durableQueue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"durableQueue.d.ts","sourceRoot":"","sources":["../../src/daemon/durableQueue.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,aAAa,CAAC;AAEjG,MAAM,WAAW,0BAA0B;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,YAAY,CAAC;IACtB,KAAK,EAAE,mBAAmB,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AASD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,UAAU,CAAqB;IAEvC,OAAO;WAOM,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,0BAA0B,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAMlG,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAe7D,QAAQ,CAAC,KAAK,SAA2B,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAmB3E,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU9B,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB/C,QAAQ,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAIjD,MAAM,IAAI;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;YAQnD,IAAI;YAiBJ,OAAO;CAUtB"}
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.DurableTriggerQueue = void 0;
37
+ const node_crypto_1 = require("node:crypto");
38
+ const node_fs_1 = require("node:fs");
39
+ const path = __importStar(require("node:path"));
40
+ const QUEUE_FILE = "trigger-queue.json";
41
+ class DurableTriggerQueue {
42
+ filePath;
43
+ maxAttempts;
44
+ baseBackoffMs;
45
+ now;
46
+ events = [];
47
+ writeChain = Promise.resolve();
48
+ constructor(daemonDir, options) {
49
+ this.filePath = path.join(daemonDir, QUEUE_FILE);
50
+ this.maxAttempts = options?.maxAttempts ?? 3;
51
+ this.baseBackoffMs = options?.baseBackoffMs ?? 1_000;
52
+ this.now = options?.now ?? Date.now;
53
+ }
54
+ static async open(daemonDir, options) {
55
+ const queue = new DurableTriggerQueue(daemonDir, options);
56
+ await queue.load();
57
+ return queue;
58
+ }
59
+ async enqueue(trigger) {
60
+ const timestamp = new Date(this.now()).toISOString();
61
+ const record = {
62
+ id: (0, node_crypto_1.randomUUID)(),
63
+ trigger: redactTrigger(trigger),
64
+ state: "pending",
65
+ attempts: 0,
66
+ enqueuedAt: timestamp,
67
+ updatedAt: timestamp,
68
+ };
69
+ this.events.push(record);
70
+ await this.persist();
71
+ return { ...record };
72
+ }
73
+ async claimDue(limit = Number.POSITIVE_INFINITY) {
74
+ const now = this.now;
75
+ const timestamp = new Date(now()).toISOString();
76
+ const claimed = [];
77
+ for (const event of this.events) {
78
+ if (claimed.length >= limit)
79
+ break;
80
+ if (event.state !== "pending" && event.state !== "failed")
81
+ continue;
82
+ if (event.nextAttemptAt && Date.parse(event.nextAttemptAt) > now())
83
+ continue;
84
+ event.state = "running";
85
+ event.attempts += 1;
86
+ event.updatedAt = timestamp;
87
+ claimed.push({ ...event, trigger: cloneTrigger(event.trigger) });
88
+ }
89
+ if (claimed.length > 0) {
90
+ await this.persist();
91
+ }
92
+ return claimed;
93
+ }
94
+ async ack(id) {
95
+ const event = this.events.find((item) => item.id === id);
96
+ if (!event)
97
+ return;
98
+ const timestamp = new Date(this.now()).toISOString();
99
+ event.state = "succeeded";
100
+ event.ackedAt = timestamp;
101
+ event.updatedAt = timestamp;
102
+ await this.persist();
103
+ }
104
+ async fail(id, error) {
105
+ const event = this.events.find((item) => item.id === id);
106
+ if (!event || event.state === "succeeded")
107
+ return;
108
+ const timestamp = new Date(this.now()).toISOString();
109
+ event.lastError = error instanceof Error ? error.message : String(error);
110
+ event.updatedAt = timestamp;
111
+ if (event.attempts >= this.maxAttempts) {
112
+ event.state = "dead-letter";
113
+ delete event.nextAttemptAt;
114
+ }
115
+ else {
116
+ event.state = "failed";
117
+ const delay = this.baseBackoffMs * Math.max(1, 2 ** Math.max(0, event.attempts - 1));
118
+ event.nextAttemptAt = new Date(this.now() + delay).toISOString();
119
+ }
120
+ await this.persist();
121
+ }
122
+ async snapshot() {
123
+ return this.events.map((event) => ({ ...event, trigger: cloneTrigger(event.trigger) }));
124
+ }
125
+ counts() {
126
+ return {
127
+ active: this.events.filter((event) => event.state === "running").length,
128
+ pending: this.events.filter((event) => event.state === "pending" || event.state === "failed").length,
129
+ deadLetter: this.events.filter((event) => event.state === "dead-letter").length,
130
+ };
131
+ }
132
+ async load() {
133
+ try {
134
+ const raw = await node_fs_1.promises.readFile(this.filePath, "utf-8");
135
+ const parsed = JSON.parse(raw);
136
+ this.events = (parsed.events ?? []).map((event) => ({
137
+ ...event,
138
+ state: event.state === "running" ? "pending" : event.state,
139
+ trigger: cloneTrigger(event.trigger),
140
+ }));
141
+ if (this.events.some((event) => event.state === "pending" && event.updatedAt)) {
142
+ await this.persist();
143
+ }
144
+ }
145
+ catch {
146
+ this.events = [];
147
+ }
148
+ }
149
+ async persist() {
150
+ const content = JSON.stringify({ version: 1, events: this.events }, null, 2);
151
+ this.writeChain = this.writeChain.then(async () => {
152
+ await node_fs_1.promises.mkdir(path.dirname(this.filePath), { recursive: true });
153
+ const tmpPath = `${this.filePath}.tmp-${process.pid}-${Date.now()}`;
154
+ await node_fs_1.promises.writeFile(tmpPath, content, "utf-8");
155
+ await node_fs_1.promises.rename(tmpPath, this.filePath);
156
+ });
157
+ await this.writeChain;
158
+ }
159
+ }
160
+ exports.DurableTriggerQueue = DurableTriggerQueue;
161
+ function cloneTrigger(trigger) {
162
+ return JSON.parse(JSON.stringify(trigger));
163
+ }
164
+ const SECRET_KEY_PATTERN = /(secret|token|api[-_]?key|authorization|password|credential|private[-_]?key)/i;
165
+ function redactTrigger(trigger) {
166
+ return redactValue(cloneTrigger(trigger), "");
167
+ }
168
+ function redactValue(value, key) {
169
+ if (SECRET_KEY_PATTERN.test(key)) {
170
+ return "[REDACTED]";
171
+ }
172
+ if (Array.isArray(value)) {
173
+ return value.map((item) => redactValue(item, ""));
174
+ }
175
+ if (value && typeof value === "object") {
176
+ const result = {};
177
+ for (const [childKey, childValue] of Object.entries(value)) {
178
+ result[childKey] = redactValue(childValue, childKey);
179
+ }
180
+ return result;
181
+ }
182
+ return value;
183
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"fileWatcher.d.ts","sourceRoot":"","sources":["../../src/daemon/fileWatcher.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAmDrF,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,SAAS,EAAE,eAAe,GACzB,iBAAiB,CA6DnB"}
1
+ {"version":3,"file":"fileWatcher.d.ts","sourceRoot":"","sources":["../../src/daemon/fileWatcher.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAoDrF,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,SAAS,EAAE,eAAe,GACzB,iBAAiB,CAgEnB"}
@@ -90,6 +90,7 @@ function createFileWatcher(triggers, onTrigger) {
90
90
  trigger,
91
91
  watcher: null,
92
92
  debounceTimer: null,
93
+ lastPath: null,
93
94
  };
94
95
  try {
95
96
  entry.watcher = fsSync.watch(watchDir, { recursive: true }, (_eventType, filename) => {
@@ -97,6 +98,7 @@ function createFileWatcher(triggers, onTrigger) {
97
98
  return;
98
99
  if (!matchesExtension(filename, trigger.pattern))
99
100
  return;
101
+ entry.lastPath = path.resolve(watchDir, filename.toString());
100
102
  // Debounce: clear previous timer and set a new one
101
103
  if (entry.debounceTimer) {
102
104
  clearTimeout(entry.debounceTimer);
@@ -108,6 +110,7 @@ function createFileWatcher(triggers, onTrigger) {
108
110
  type: "file",
109
111
  processId: trigger.processId,
110
112
  entrypoint: trigger.entrypoint,
113
+ inputs: entry.lastPath ? { path: entry.lastPath } : undefined,
111
114
  });
112
115
  }, debounceMs);
113
116
  });
@@ -3,5 +3,7 @@
3
3
  * Internal agent-platform consumers continue to import via relative paths
4
4
  * through this barrel file.
5
5
  */
6
- export { startDaemon, stopDaemon, getDaemonStatus, loadDaemonConfig, writeDaemonConfig, createFileWatcher, createWebhookListener, createTimerScheduler, runDaemonLoop, readDaemonLoopStatus, appendDaemonLog, readDaemonLog, type DaemonConfig, type DaemonStartOptions, type DaemonStartOutput, type DaemonStopOptions, type DaemonStopOutput, type DaemonStatusOptions, type DaemonStatusOutput, type DaemonMetadata, type TriggerConfig, type TriggerEvent, type FileTriggerEvent, type AutomationTriggerEvent, type FileTriggerConfig, type FileWatcherHandle, type WebhookListenerOptions, type WebhookListenerHandle, type TriggerCallback, type TimerSchedulerHandle, type DaemonLoopOptions, type DaemonLoopStatus, type DaemonLogEntry, } from "@a5c-ai/agent-runtime/daemon";
6
+ export { startDaemon, stopDaemon, getDaemonStatus, loadDaemonConfig, writeDaemonConfig, createFileWatcher, createWebhookListener, createTimerScheduler, runDaemonLoop, readDaemonLoopStatus, appendDaemonLog, readDaemonLog, DurableTriggerQueue, type DaemonConfig, type DaemonStartOptions, type DaemonStartOutput, type DaemonStopOptions, type DaemonStopOutput, type DaemonStatusOptions, type DaemonStatusOutput, type DaemonMetadata, type TriggerConfig, type TriggerEvent, type FileTriggerEvent, type AutomationTriggerEvent, type FileTriggerConfig, type FileWatcherHandle, type WebhookListenerOptions, type WebhookListenerHandle, type TriggerCallback, type TriggerAdmissionConfig, type TriggerAdmissionResult, type TriggerAdmissionStatus, type TriggerRateLimitConfig, type TimerSchedulerHandle, type DaemonLoopOptions, type DaemonLoopStatus, type DaemonLogEntry, type DurableTriggerQueueOptions, type DurableTriggerRecord, type DurableTriggerState, } from "@a5c-ai/agent-runtime/daemon";
7
+ export { executeAutomationTrigger } from "./automationExecutor";
8
+ export { isAutomationTriggerEvent } from "./types";
7
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/daemon/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACL,WAAW,EACX,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,aAAa,EACb,oBAAoB,EACpB,eAAe,EACf,aAAa,EACb,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACpB,MAAM,8BAA8B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/daemon/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACL,WAAW,EACX,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,aAAa,EACb,oBAAoB,EACpB,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,0BAA0B,EAC/B,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,GACzB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.readDaemonLog = exports.appendDaemonLog = exports.readDaemonLoopStatus = exports.runDaemonLoop = exports.createTimerScheduler = exports.createWebhookListener = exports.createFileWatcher = exports.writeDaemonConfig = exports.loadDaemonConfig = exports.getDaemonStatus = exports.stopDaemon = exports.startDaemon = void 0;
3
+ exports.isAutomationTriggerEvent = exports.executeAutomationTrigger = exports.DurableTriggerQueue = exports.readDaemonLog = exports.appendDaemonLog = exports.readDaemonLoopStatus = exports.runDaemonLoop = exports.createTimerScheduler = exports.createWebhookListener = exports.createFileWatcher = exports.writeDaemonConfig = exports.loadDaemonConfig = exports.getDaemonStatus = exports.stopDaemon = exports.startDaemon = void 0;
4
4
  /**
5
5
  * Re-export shim — canonical implementation lives in @a5c-ai/agent-runtime.
6
6
  * Internal agent-platform consumers continue to import via relative paths
@@ -19,3 +19,8 @@ Object.defineProperty(exports, "runDaemonLoop", { enumerable: true, get: functio
19
19
  Object.defineProperty(exports, "readDaemonLoopStatus", { enumerable: true, get: function () { return daemon_1.readDaemonLoopStatus; } });
20
20
  Object.defineProperty(exports, "appendDaemonLog", { enumerable: true, get: function () { return daemon_1.appendDaemonLog; } });
21
21
  Object.defineProperty(exports, "readDaemonLog", { enumerable: true, get: function () { return daemon_1.readDaemonLog; } });
22
+ Object.defineProperty(exports, "DurableTriggerQueue", { enumerable: true, get: function () { return daemon_1.DurableTriggerQueue; } });
23
+ var automationExecutor_1 = require("./automationExecutor");
24
+ Object.defineProperty(exports, "executeAutomationTrigger", { enumerable: true, get: function () { return automationExecutor_1.executeAutomationTrigger; } });
25
+ var types_1 = require("./types");
26
+ Object.defineProperty(exports, "isAutomationTriggerEvent", { enumerable: true, get: function () { return types_1.isAutomationTriggerEvent; } });
@@ -2,14 +2,20 @@
2
2
  * GAP-REMOTE-001: Daemon Loop — main event loop with concurrent run pool.
3
3
  */
4
4
  import type { DaemonConfig, TriggerCallback } from "./types";
5
+ import type { DurableTriggerQueueOptions } from "./durableQueue";
5
6
  export interface DaemonLoopOptions {
6
7
  onTrigger?: TriggerCallback;
7
8
  signal?: AbortSignal;
8
9
  logDir?: string;
10
+ queue?: DurableTriggerQueueOptions;
9
11
  }
10
12
  export interface DaemonLoopStatus {
11
13
  activeRuns: number;
12
14
  pendingRuns: number;
15
+ deadLetterRuns?: number;
16
+ rejectedTriggers?: number;
17
+ duplicateTriggers?: number;
18
+ rateLimitedTriggers?: number;
13
19
  updatedAt: string;
14
20
  }
15
21
  export declare function runDaemonLoop(config: DaemonConfig, options?: DaemonLoopOptions): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/daemon/loop.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAgB,MAAM,SAAS,CAAC;AAY3E,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,IAAI,CAAC,CA+If;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAQ9F"}
1
+ {"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/daemon/loop.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EACV,YAAY,EAGZ,eAAe,EAEhB,MAAM,SAAS,CAAC;AAYjB,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAEjE,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,0BAA0B,CAAC;CACpC;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAwPf;AAsHD;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAQ9F"}