@action-llama/action-llama 0.18.10 → 0.19.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 (227) hide show
  1. package/dist/agents/bash-prefix.d.ts +6 -5
  2. package/dist/agents/bash-prefix.d.ts.map +1 -1
  3. package/dist/agents/bash-prefix.js +26 -10
  4. package/dist/agents/bash-prefix.js.map +1 -1
  5. package/dist/agents/container-entry.d.ts.map +1 -1
  6. package/dist/agents/container-entry.js +16 -158
  7. package/dist/agents/container-entry.js.map +1 -1
  8. package/dist/agents/container-runner.d.ts +19 -1
  9. package/dist/agents/container-runner.d.ts.map +1 -1
  10. package/dist/agents/container-runner.js +176 -85
  11. package/dist/agents/container-runner.js.map +1 -1
  12. package/dist/agents/session-loop.d.ts +22 -0
  13. package/dist/agents/session-loop.d.ts.map +1 -0
  14. package/dist/agents/session-loop.js +159 -0
  15. package/dist/agents/session-loop.js.map +1 -0
  16. package/dist/agents/signals.d.ts.map +1 -1
  17. package/dist/agents/signals.js +7 -1
  18. package/dist/agents/signals.js.map +1 -1
  19. package/dist/agents/types.d.ts +17 -0
  20. package/dist/agents/types.d.ts.map +1 -0
  21. package/dist/agents/types.js +2 -0
  22. package/dist/agents/types.js.map +1 -0
  23. package/dist/build-info.json +1 -1
  24. package/dist/cli/commands/chat.d.ts.map +1 -1
  25. package/dist/cli/commands/chat.js +3 -1
  26. package/dist/cli/commands/chat.js.map +1 -1
  27. package/dist/cli/commands/logs.d.ts +3 -0
  28. package/dist/cli/commands/logs.d.ts.map +1 -1
  29. package/dist/cli/commands/logs.js +100 -19
  30. package/dist/cli/commands/logs.js.map +1 -1
  31. package/dist/cli/commands/run-agent.d.ts.map +1 -1
  32. package/dist/cli/commands/run-agent.js +18 -118
  33. package/dist/cli/commands/run-agent.js.map +1 -1
  34. package/dist/cli/main.js +3 -0
  35. package/dist/cli/main.js.map +1 -1
  36. package/dist/control/routes/dashboard-api.d.ts.map +1 -1
  37. package/dist/control/routes/dashboard-api.js +43 -0
  38. package/dist/control/routes/dashboard-api.js.map +1 -1
  39. package/dist/control/routes/logs.d.ts.map +1 -1
  40. package/dist/control/routes/logs.js +46 -13
  41. package/dist/control/routes/logs.js.map +1 -1
  42. package/dist/control/routes/stats.d.ts.map +1 -1
  43. package/dist/control/routes/stats.js +54 -0
  44. package/dist/control/routes/stats.js.map +1 -1
  45. package/dist/db/connection.d.ts +20 -0
  46. package/dist/db/connection.d.ts.map +1 -0
  47. package/dist/db/connection.js +34 -0
  48. package/dist/db/connection.js.map +1 -0
  49. package/dist/db/index.d.ts +8 -0
  50. package/dist/db/index.d.ts.map +1 -0
  51. package/dist/db/index.js +7 -0
  52. package/dist/db/index.js.map +1 -0
  53. package/dist/db/migrate.d.ts +27 -0
  54. package/dist/db/migrate.d.ts.map +1 -0
  55. package/dist/db/migrate.js +180 -0
  56. package/dist/db/migrate.js.map +1 -0
  57. package/dist/db/schema.d.ts +1383 -0
  58. package/dist/db/schema.d.ts.map +1 -0
  59. package/dist/db/schema.js +158 -0
  60. package/dist/db/schema.js.map +1 -0
  61. package/dist/docker/host-user-runtime.d.ts +1 -0
  62. package/dist/docker/host-user-runtime.d.ts.map +1 -1
  63. package/dist/docker/host-user-runtime.js +3 -0
  64. package/dist/docker/host-user-runtime.js.map +1 -1
  65. package/dist/docker/local-runtime.d.ts +3 -0
  66. package/dist/docker/local-runtime.d.ts.map +1 -1
  67. package/dist/docker/local-runtime.js +18 -1
  68. package/dist/docker/local-runtime.js.map +1 -1
  69. package/dist/docker/runtime.d.ts +8 -0
  70. package/dist/docker/runtime.d.ts.map +1 -1
  71. package/dist/docker/runtime.js.map +1 -1
  72. package/dist/docker/ssh-docker-runtime.d.ts +1 -0
  73. package/dist/docker/ssh-docker-runtime.d.ts.map +1 -1
  74. package/dist/docker/ssh-docker-runtime.js +4 -1
  75. package/dist/docker/ssh-docker-runtime.js.map +1 -1
  76. package/dist/events/event-queue-sqlite.d.ts +8 -3
  77. package/dist/events/event-queue-sqlite.d.ts.map +1 -1
  78. package/dist/events/event-queue-sqlite.js +42 -41
  79. package/dist/events/event-queue-sqlite.js.map +1 -1
  80. package/dist/execution/container-registry.d.ts +8 -0
  81. package/dist/execution/container-registry.d.ts.map +1 -1
  82. package/dist/execution/container-registry.js +11 -0
  83. package/dist/execution/container-registry.js.map +1 -1
  84. package/dist/execution/execution.d.ts +4 -0
  85. package/dist/execution/execution.d.ts.map +1 -1
  86. package/dist/execution/execution.js +13 -3
  87. package/dist/execution/execution.js.map +1 -1
  88. package/dist/execution/image-builder.js +2 -2
  89. package/dist/execution/image-builder.js.map +1 -1
  90. package/dist/frontend/assets/index-BO_q8PRQ.css +2 -0
  91. package/dist/frontend/assets/index-DKQX_6iM.js +13 -0
  92. package/dist/frontend/index.html +2 -2
  93. package/dist/gateway/frontend.d.ts +20 -0
  94. package/dist/gateway/frontend.d.ts.map +1 -0
  95. package/dist/gateway/frontend.js +80 -0
  96. package/dist/gateway/frontend.js.map +1 -0
  97. package/dist/gateway/index.d.ts +3 -70
  98. package/dist/gateway/index.d.ts.map +1 -1
  99. package/dist/gateway/index.js +109 -213
  100. package/dist/gateway/index.js.map +1 -1
  101. package/dist/gateway/middleware/auth.d.ts +12 -0
  102. package/dist/gateway/middleware/auth.d.ts.map +1 -0
  103. package/dist/gateway/middleware/auth.js +25 -0
  104. package/dist/gateway/middleware/auth.js.map +1 -0
  105. package/dist/gateway/middleware/request-logging.d.ts +9 -0
  106. package/dist/gateway/middleware/request-logging.d.ts.map +1 -0
  107. package/dist/gateway/middleware/request-logging.js +26 -0
  108. package/dist/gateway/middleware/request-logging.js.map +1 -0
  109. package/dist/gateway/middleware/telemetry.d.ts +7 -0
  110. package/dist/gateway/middleware/telemetry.d.ts.map +1 -0
  111. package/dist/gateway/middleware/telemetry.js +28 -0
  112. package/dist/gateway/middleware/telemetry.js.map +1 -0
  113. package/dist/gateway/routes/chat.d.ts +32 -0
  114. package/dist/gateway/routes/chat.d.ts.map +1 -0
  115. package/dist/gateway/routes/chat.js +24 -0
  116. package/dist/gateway/routes/chat.js.map +1 -0
  117. package/dist/gateway/routes/dashboard.d.ts +19 -0
  118. package/dist/gateway/routes/dashboard.d.ts.map +1 -0
  119. package/dist/gateway/routes/dashboard.js +26 -0
  120. package/dist/gateway/routes/dashboard.js.map +1 -0
  121. package/dist/gateway/routes/execution.d.ts +24 -0
  122. package/dist/gateway/routes/execution.d.ts.map +1 -0
  123. package/dist/gateway/routes/execution.js +13 -0
  124. package/dist/gateway/routes/execution.js.map +1 -0
  125. package/dist/gateway/routes/system.d.ts +14 -0
  126. package/dist/gateway/routes/system.d.ts.map +1 -0
  127. package/dist/gateway/routes/system.js +18 -0
  128. package/dist/gateway/routes/system.js.map +1 -0
  129. package/dist/gateway/routes/webhooks.d.ts +20 -0
  130. package/dist/gateway/routes/webhooks.d.ts.map +1 -0
  131. package/dist/gateway/routes/webhooks.js +11 -0
  132. package/dist/gateway/routes/webhooks.js.map +1 -0
  133. package/dist/gateway/stores.d.ts +21 -0
  134. package/dist/gateway/stores.d.ts.map +1 -0
  135. package/dist/gateway/stores.js +24 -0
  136. package/dist/gateway/stores.js.map +1 -0
  137. package/dist/gateway/types.d.ts +65 -0
  138. package/dist/gateway/types.d.ts.map +1 -0
  139. package/dist/gateway/types.js +2 -0
  140. package/dist/gateway/types.js.map +1 -0
  141. package/dist/scheduler/dependencies.d.ts +11 -0
  142. package/dist/scheduler/dependencies.d.ts.map +1 -0
  143. package/dist/scheduler/dependencies.js +34 -0
  144. package/dist/scheduler/dependencies.js.map +1 -0
  145. package/dist/scheduler/gateway-setup.d.ts.map +1 -1
  146. package/dist/scheduler/gateway-setup.js +22 -10
  147. package/dist/scheduler/gateway-setup.js.map +1 -1
  148. package/dist/scheduler/index.d.ts +1 -1
  149. package/dist/scheduler/index.d.ts.map +1 -1
  150. package/dist/scheduler/index.js +66 -132
  151. package/dist/scheduler/index.js.map +1 -1
  152. package/dist/scheduler/orphan-recovery.d.ts +25 -0
  153. package/dist/scheduler/orphan-recovery.d.ts.map +1 -0
  154. package/dist/scheduler/orphan-recovery.js +130 -0
  155. package/dist/scheduler/orphan-recovery.js.map +1 -0
  156. package/dist/scheduler/persistence.d.ts +18 -0
  157. package/dist/scheduler/persistence.d.ts.map +1 -0
  158. package/dist/scheduler/persistence.js +42 -0
  159. package/dist/scheduler/persistence.js.map +1 -0
  160. package/dist/scheduler/shutdown.d.ts +2 -0
  161. package/dist/scheduler/shutdown.d.ts.map +1 -1
  162. package/dist/scheduler/shutdown.js +8 -2
  163. package/dist/scheduler/shutdown.js.map +1 -1
  164. package/dist/scheduler/state.d.ts +3 -1
  165. package/dist/scheduler/state.d.ts.map +1 -1
  166. package/dist/shared/config/index.d.ts +5 -0
  167. package/dist/shared/config/index.d.ts.map +1 -0
  168. package/dist/shared/config/index.js +5 -0
  169. package/dist/shared/config/index.js.map +1 -0
  170. package/dist/shared/config/load-agent.d.ts +27 -0
  171. package/dist/shared/config/load-agent.d.ts.map +1 -0
  172. package/dist/shared/config/load-agent.js +169 -0
  173. package/dist/shared/config/load-agent.js.map +1 -0
  174. package/dist/shared/config/load-project.d.ts +22 -0
  175. package/dist/shared/config/load-project.d.ts.map +1 -0
  176. package/dist/shared/config/load-project.js +84 -0
  177. package/dist/shared/config/load-project.js.map +1 -0
  178. package/dist/shared/config/types.d.ts +115 -0
  179. package/dist/shared/config/types.d.ts.map +1 -0
  180. package/dist/shared/config/types.js +2 -0
  181. package/dist/shared/config/types.js.map +1 -0
  182. package/dist/shared/config/validate.d.ts +4 -0
  183. package/dist/shared/config/validate.d.ts.map +1 -0
  184. package/dist/shared/config/validate.js +23 -0
  185. package/dist/shared/config/validate.js.map +1 -0
  186. package/dist/shared/config.d.ts +4 -161
  187. package/dist/shared/config.d.ts.map +1 -1
  188. package/dist/shared/config.js +5 -269
  189. package/dist/shared/config.js.map +1 -1
  190. package/dist/shared/constants.d.ts +4 -0
  191. package/dist/shared/constants.d.ts.map +1 -1
  192. package/dist/shared/constants.js +4 -0
  193. package/dist/shared/constants.js.map +1 -1
  194. package/dist/shared/errors.js +1 -1
  195. package/dist/shared/errors.js.map +1 -1
  196. package/dist/shared/paths.d.ts +6 -0
  197. package/dist/shared/paths.d.ts.map +1 -1
  198. package/dist/shared/paths.js +12 -0
  199. package/dist/shared/paths.js.map +1 -1
  200. package/dist/shared/persistence/backends/sqlite.d.ts +9 -5
  201. package/dist/shared/persistence/backends/sqlite.d.ts.map +1 -1
  202. package/dist/shared/persistence/backends/sqlite.js +107 -135
  203. package/dist/shared/persistence/backends/sqlite.js.map +1 -1
  204. package/dist/shared/queue-sqlite.d.ts +9 -4
  205. package/dist/shared/queue-sqlite.d.ts.map +1 -1
  206. package/dist/shared/queue-sqlite.js +41 -36
  207. package/dist/shared/queue-sqlite.js.map +1 -1
  208. package/dist/shared/state-store-sqlite.d.ts +8 -3
  209. package/dist/shared/state-store-sqlite.d.ts.map +1 -1
  210. package/dist/shared/state-store-sqlite.js +55 -37
  211. package/dist/shared/state-store-sqlite.js.map +1 -1
  212. package/dist/stats/store.d.ts +11 -2
  213. package/dist/stats/store.d.ts.map +1 -1
  214. package/dist/stats/store.js +200 -291
  215. package/dist/stats/store.js.map +1 -1
  216. package/docker/bin/al-bash-init.sh +44 -0
  217. package/package.json +4 -1
  218. package/dist/agents/execution-engine.d.ts +0 -19
  219. package/dist/agents/execution-engine.d.ts.map +0 -1
  220. package/dist/agents/execution-engine.js +0 -179
  221. package/dist/agents/execution-engine.js.map +0 -1
  222. package/dist/agents/runner.d.ts +0 -38
  223. package/dist/agents/runner.d.ts.map +0 -1
  224. package/dist/agents/runner.js +0 -375
  225. package/dist/agents/runner.js.map +0 -1
  226. package/dist/frontend/assets/index-CSIS2n0j.css +0 -2
  227. package/dist/frontend/assets/index-W_Sfmu8j.js +0 -13
@@ -0,0 +1,42 @@
1
+ // packages/action-llama/src/scheduler/persistence.ts
2
+ /**
3
+ * Run database migrations, create state/stats stores, and create the work queue.
4
+ * All persistence concerns are co-located here for independent testability.
5
+ */
6
+ export async function createPersistence(projectPath, globalConfig, logger) {
7
+ // Run database migrations and open the consolidated DB connection
8
+ const { runMigrations } = await import("../db/migrate.js");
9
+ const { resolve: resolvePath } = await import("path");
10
+ const { dbPath } = await import("../shared/paths.js");
11
+ const consolidatedDbPath = dbPath(projectPath);
12
+ const { fileURLToPath } = await import("url");
13
+ const migrationsFolder = resolvePath(fileURLToPath(new URL("../../drizzle", import.meta.url)));
14
+ const sharedDb = runMigrations(consolidatedDbPath, migrationsFolder);
15
+ logger.info("Database: SQLite (.al/action-llama.db)");
16
+ // Create persistent state store (using shared DB)
17
+ let stateStore;
18
+ {
19
+ const { SqliteStateStore } = await import("../shared/state-store-sqlite.js");
20
+ stateStore = new SqliteStateStore(sharedDb);
21
+ logger.info("State store: SQLite (.al/action-llama.db)");
22
+ }
23
+ // Create stats store (using shared DB)
24
+ let statsStore;
25
+ {
26
+ const { StatsStore: StatsStoreClass } = await import("../stats/index.js");
27
+ statsStore = new StatsStoreClass(sharedDb);
28
+ // Auto-prune old data on startup
29
+ const retentionDays = globalConfig.historyRetentionDays ?? 14;
30
+ const pruned = statsStore.prune(retentionDays);
31
+ if (pruned.runs > 0 || pruned.callEdges > 0 || pruned.receipts > 0) {
32
+ logger.info({ prunedRuns: pruned.runs, prunedCallEdges: pruned.callEdges, prunedReceipts: pruned.receipts, retentionDays }, "Pruned old stats data");
33
+ }
34
+ logger.info("Stats store: SQLite (.al/action-llama.db)");
35
+ }
36
+ // Create work queue (before Docker builds so incoming webhooks can be queued)
37
+ const queueSize = globalConfig.workQueueSize ?? globalConfig.webhookQueueSize ?? 20;
38
+ const { SqliteWorkQueue } = await import("../events/event-queue-sqlite.js");
39
+ const workQueue = new SqliteWorkQueue(queueSize, sharedDb);
40
+ return { sharedDb, stateStore, statsStore, workQueue };
41
+ }
42
+ //# sourceMappingURL=persistence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../src/scheduler/persistence.ts"],"names":[],"mappings":"AAAA,qDAAqD;AAgBrD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,WAAmB,EACnB,YAA0B,EAC1B,MAAc;IAEd,kEAAkE;IAClE,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAC3D,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;IACtD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACtD,MAAM,kBAAkB,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IAC/C,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,gBAAgB,GAAG,WAAW,CAClC,aAAa,CAAC,IAAI,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CACzD,CAAC;IACF,MAAM,QAAQ,GAAG,aAAa,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;IACrE,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;IAEtD,kDAAkD;IAClD,IAAI,UAAkC,CAAC;IACvC,CAAC;QACC,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,iCAAiC,CAAC,CAAC;QAC7E,UAAU,GAAG,IAAI,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;IAC3D,CAAC;IAED,uCAAuC;IACvC,IAAI,UAAkC,CAAC;IACvC,CAAC;QACC,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAC1E,UAAU,GAAG,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC3C,iCAAiC;QACjC,MAAM,aAAa,GAAG,YAAY,CAAC,oBAAoB,IAAI,EAAE,CAAC;QAC9D,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC/C,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI,MAAM,CAAC,SAAS,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;YACnE,MAAM,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,eAAe,EAAE,MAAM,CAAC,SAAS,EAAE,cAAc,EAAE,MAAM,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,uBAAuB,CAAC,CAAC;QACvJ,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;IAC3D,CAAC;IAED,8EAA8E;IAC9E,MAAM,SAAS,GAAG,YAAY,CAAC,aAAa,IAAI,YAAY,CAAC,gBAAgB,IAAI,EAAE,CAAC;IACpF,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,iCAAiC,CAAC,CAAC;IAC5E,MAAM,SAAS,GAAG,IAAI,eAAe,CAAW,SAAS,EAAE,QAAQ,CAAC,CAAC;IAErE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AACzD,CAAC"}
@@ -7,6 +7,7 @@ import type { StateStore } from "../shared/state-store.js";
7
7
  import type { Logger } from "../shared/logger.js";
8
8
  import type { SchedulerContext } from "../execution/execution.js";
9
9
  import type { StatsStore } from "../stats/index.js";
10
+ import type { AppDb } from "../db/connection.js";
10
11
  export declare function registerShutdownHandlers(deps: {
11
12
  logger: Logger;
12
13
  schedulerCtx: SchedulerContext;
@@ -14,6 +15,7 @@ export declare function registerShutdownHandlers(deps: {
14
15
  gateway?: GatewayServer;
15
16
  stateStore?: StateStore;
16
17
  statsStore?: StatsStore;
18
+ sharedDb?: AppDb;
17
19
  telemetry?: any;
18
20
  watcherHandle: {
19
21
  stop: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"shutdown.d.ts","sourceRoot":"","sources":["../../src/scheduler/shutdown.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,gBAAgB,CAAC;IAC/B,QAAQ,EAAE,IAAI,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,aAAa,EAAE;QAAE,IAAI,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;CACrC,GAAG,IAAI,CAuCP"}
1
+ {"version":3,"file":"shutdown.d.ts","sourceRoot":"","sources":["../../src/scheduler/shutdown.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEjD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,gBAAgB,CAAC;IAC/B,QAAQ,EAAE,IAAI,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,QAAQ,CAAC,EAAE,KAAK,CAAC;IACjB,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,aAAa,EAAE;QAAE,IAAI,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;CACrC,GAAG,IAAI,CA4CP"}
@@ -2,12 +2,11 @@
2
2
  * Graceful shutdown handler for the scheduler.
3
3
  */
4
4
  export function registerShutdownHandlers(deps) {
5
- const { logger, schedulerCtx, cronJobs, gateway, stateStore, statsStore, telemetry, watcherHandle } = deps;
5
+ const { logger, schedulerCtx, cronJobs, gateway, stateStore, statsStore, sharedDb, telemetry, watcherHandle } = deps;
6
6
  const shutdown = async () => {
7
7
  logger.info("Shutting down scheduler...");
8
8
  watcherHandle.stop();
9
9
  schedulerCtx.shuttingDown = true;
10
- schedulerCtx.workQueue.clearAll();
11
10
  schedulerCtx.workQueue.close();
12
11
  for (const job of cronJobs) {
13
12
  job.stop();
@@ -22,6 +21,13 @@ export function registerShutdownHandlers(deps) {
22
21
  if (statsStore) {
23
22
  statsStore.close();
24
23
  }
24
+ // Close the shared DB connection (after stores are done with it)
25
+ if (sharedDb) {
26
+ try {
27
+ sharedDb.$client.close();
28
+ }
29
+ catch { }
30
+ }
25
31
  // Shutdown telemetry
26
32
  if (telemetry) {
27
33
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"shutdown.js","sourceRoot":"","sources":["../../src/scheduler/shutdown.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,MAAM,UAAU,wBAAwB,CAAC,IASxC;IACC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;IAE3G,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC1B,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC1C,aAAa,CAAC,IAAI,EAAE,CAAC;QACrB,YAAY,CAAC,YAAY,GAAG,IAAI,CAAC;QACjC,YAAY,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;QAClC,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QAC/B,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,GAAG,CAAC,IAAI,EAAE,CAAC;QACb,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACxC,CAAC;QACD,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;QAC3B,CAAC;QACD,IAAI,UAAU,EAAE,CAAC;YACf,UAAU,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;QAED,qBAAqB;QACrB,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC;gBACH,MAAM,SAAS,CAAC,QAAQ,EAAE,CAAC;gBAC3B,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;YAC9C,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,iCAAiC,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"shutdown.js","sourceRoot":"","sources":["../../src/scheduler/shutdown.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,MAAM,UAAU,wBAAwB,CAAC,IAUxC;IACC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;IAErH,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC1B,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC1C,aAAa,CAAC,IAAI,EAAE,CAAC;QACrB,YAAY,CAAC,YAAY,GAAG,IAAI,CAAC;QACjC,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QAC/B,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,GAAG,CAAC,IAAI,EAAE,CAAC;QACb,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACxC,CAAC;QACD,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;QAC3B,CAAC;QACD,IAAI,UAAU,EAAE,CAAC;YACf,UAAU,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;QACD,iEAAiE;QACjE,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC;gBACF,QAAgB,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACpC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;QAED,qBAAqB;QACrB,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC;gBACH,MAAM,SAAS,CAAC,QAAQ,EAAE,CAAC;gBAC3B,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;YAC9C,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,iCAAiC,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAClC,CAAC"}
@@ -8,10 +8,12 @@
8
8
  */
9
9
  import type { Cron } from "croner";
10
10
  import type { RunnerPool } from "../execution/runner-pool.js";
11
- import type { SchedulerContext } from "../execution/execution.js";
11
+ import type { SchedulerContext, WorkItem } from "../execution/execution.js";
12
+ import type { WorkQueue } from "../shared/work-queue.js";
12
13
  export interface SchedulerState {
13
14
  runnerPools: Record<string, RunnerPool>;
14
15
  cronJobs: Cron[];
15
16
  schedulerCtx: SchedulerContext | null;
17
+ workQueue: WorkQueue<WorkItem> | null;
16
18
  }
17
19
  //# sourceMappingURL=state.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/scheduler/state.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAElE,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACxC,QAAQ,EAAE,IAAI,EAAE,CAAC;IACjB,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAC;CACvC"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/scheduler/state.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEzD,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACxC,QAAQ,EAAE,IAAI,EAAE,CAAC;IACjB,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACtC,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;CACvC"}
@@ -0,0 +1,5 @@
1
+ export * from "./types.js";
2
+ export * from "./load-project.js";
3
+ export * from "./load-agent.js";
4
+ export * from "./validate.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/config/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from "./types.js";
2
+ export * from "./load-project.js";
3
+ export * from "./load-agent.js";
4
+ export * from "./validate.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/shared/config/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { AgentConfig, AgentRuntimeConfig } from "./types.js";
2
+ /**
3
+ * Load the raw per-agent runtime config from `agents/<name>/config.toml`.
4
+ */
5
+ export declare function loadAgentRuntimeConfig(projectPath: string, agentName: string): AgentRuntimeConfig;
6
+ export declare function loadAgentConfig(projectPath: string, agentName: string): AgentConfig;
7
+ /**
8
+ * Load the SKILL.md body (markdown content after frontmatter).
9
+ * Used by image builder and container entry to get agent instructions.
10
+ */
11
+ export declare function loadAgentBody(projectPath: string, agentName: string): string;
12
+ /**
13
+ * Load all files from `<projectPath>/shared/` recursively.
14
+ * Returns a map of relative paths (prefixed with `shared/`) to file contents.
15
+ * Returns an empty object if the directory doesn't exist.
16
+ */
17
+ export declare function loadSharedFiles(projectPath: string): Record<string, string>;
18
+ export declare function discoverAgents(projectPath: string): string[];
19
+ /**
20
+ * Get current agent scale from config
21
+ */
22
+ export declare function getAgentScale(projectPath: string, agentName: string): number;
23
+ /**
24
+ * Update a field in the per-agent config.toml.
25
+ */
26
+ export declare function updateAgentRuntimeField(projectPath: string, agentName: string, field: string, value: unknown): void;
27
+ //# sourceMappingURL=load-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-agent.d.ts","sourceRoot":"","sources":["../../../src/shared/config/load-agent.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAe,MAAM,YAAY,CAAC;AAG/E;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,kBAAkB,CAgBjG;AAED,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,WAAW,CA2EnF;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAa5E;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAwB3E;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAoB5D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAI5E;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,OAAO,GACb,IAAI,CAQN"}
@@ -0,0 +1,169 @@
1
+ import { readFileSync, writeFileSync, existsSync, readdirSync, statSync } from "fs";
2
+ import { resolve, relative, join } from "path";
3
+ import { parse as parseTOML, stringify as stringifyTOML } from "smol-toml";
4
+ import { ConfigError } from "../errors.js";
5
+ import { parseFrontmatter } from "../frontmatter.js";
6
+ import { loadGlobalConfig } from "./load-project.js";
7
+ /**
8
+ * Load the raw per-agent runtime config from `agents/<name>/config.toml`.
9
+ */
10
+ export function loadAgentRuntimeConfig(projectPath, agentName) {
11
+ const configPath = resolve(projectPath, "agents", agentName, "config.toml");
12
+ if (!existsSync(configPath)) {
13
+ return {};
14
+ }
15
+ const raw = readFileSync(configPath, "utf-8");
16
+ try {
17
+ return parseTOML(raw);
18
+ }
19
+ catch (err) {
20
+ throw new ConfigError(`Error parsing ${configPath}: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
21
+ }
22
+ }
23
+ export function loadAgentConfig(projectPath, agentName) {
24
+ const agentDir = resolve(projectPath, "agents", agentName);
25
+ const skillPath = resolve(agentDir, "SKILL.md");
26
+ if (!existsSync(skillPath)) {
27
+ throw new ConfigError(`Agent config not found at ${skillPath}.`);
28
+ }
29
+ // Read portable fields from SKILL.md frontmatter
30
+ const raw = readFileSync(skillPath, "utf-8");
31
+ let data;
32
+ try {
33
+ ({ data } = parseFrontmatter(raw));
34
+ }
35
+ catch (err) {
36
+ throw new ConfigError(`Error parsing ${skillPath}: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
37
+ }
38
+ // Read runtime config from per-agent config.toml
39
+ const runtime = loadAgentRuntimeConfig(projectPath, agentName);
40
+ const parsed = {
41
+ name: agentName,
42
+ // Portable fields from SKILL.md frontmatter
43
+ description: data.description,
44
+ license: data.license,
45
+ compatibility: data.compatibility,
46
+ // Runtime fields from config.toml
47
+ credentials: runtime.credentials,
48
+ schedule: runtime.schedule,
49
+ webhooks: runtime.webhooks,
50
+ hooks: runtime.hooks,
51
+ params: runtime.params,
52
+ scale: runtime.scale,
53
+ timeout: runtime.timeout,
54
+ runtime: runtime.runtime,
55
+ };
56
+ // Resolve named model references from global config
57
+ const rawModels = runtime.models;
58
+ if (!rawModels || !Array.isArray(rawModels) || rawModels.length === 0) {
59
+ throw new ConfigError(`Agent "${agentName}" must have a "models" field listing at least one named model.`);
60
+ }
61
+ const global = loadGlobalConfig(projectPath);
62
+ if (!global.models || Object.keys(global.models).length === 0) {
63
+ throw new ConfigError(`No models defined in config.toml [models]. Define at least one named model.`);
64
+ }
65
+ const resolvedModels = [];
66
+ for (const name of rawModels) {
67
+ const modelDef = global.models[name];
68
+ if (!modelDef) {
69
+ const available = Object.keys(global.models).join(", ");
70
+ throw new ConfigError(`Agent "${agentName}" references model "${name}" which is not defined in config.toml. Available: ${available}`);
71
+ }
72
+ resolvedModels.push(modelDef);
73
+ }
74
+ parsed.models = resolvedModels;
75
+ // Apply defaultAgentScale as fallback when no explicit per-agent scale is set
76
+ if (parsed.scale === undefined && global.defaultAgentScale !== undefined) {
77
+ parsed.scale = global.defaultAgentScale;
78
+ }
79
+ return parsed;
80
+ }
81
+ /**
82
+ * Load the SKILL.md body (markdown content after frontmatter).
83
+ * Used by image builder and container entry to get agent instructions.
84
+ */
85
+ export function loadAgentBody(projectPath, agentName) {
86
+ const skillPath = resolve(projectPath, "agents", agentName, "SKILL.md");
87
+ if (!existsSync(skillPath))
88
+ return "";
89
+ const raw = readFileSync(skillPath, "utf-8");
90
+ try {
91
+ const { body } = parseFrontmatter(raw);
92
+ return body;
93
+ }
94
+ catch (err) {
95
+ throw new ConfigError(`Error parsing ${skillPath}: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
96
+ }
97
+ }
98
+ /**
99
+ * Load all files from `<projectPath>/shared/` recursively.
100
+ * Returns a map of relative paths (prefixed with `shared/`) to file contents.
101
+ * Returns an empty object if the directory doesn't exist.
102
+ */
103
+ export function loadSharedFiles(projectPath) {
104
+ const sharedDir = resolve(projectPath, "shared");
105
+ if (!existsSync(sharedDir) || !statSync(sharedDir).isDirectory()) {
106
+ return {};
107
+ }
108
+ const result = {};
109
+ function walk(dir) {
110
+ for (const entry of readdirSync(dir)) {
111
+ if (entry.startsWith("."))
112
+ continue;
113
+ const fullPath = resolve(dir, entry);
114
+ const stat = statSync(fullPath);
115
+ if (stat.isDirectory()) {
116
+ walk(fullPath);
117
+ }
118
+ else if (stat.isFile()) {
119
+ const relPath = join("shared", relative(sharedDir, fullPath));
120
+ result[relPath] = readFileSync(fullPath, "utf-8");
121
+ }
122
+ }
123
+ }
124
+ walk(sharedDir);
125
+ return result;
126
+ }
127
+ export function discoverAgents(projectPath) {
128
+ const excluded = new Set(["node_modules"]);
129
+ const agents = [];
130
+ if (!existsSync(projectPath))
131
+ return agents;
132
+ const agentsPath = resolve(projectPath, "agents");
133
+ if (!existsSync(agentsPath))
134
+ return agents;
135
+ for (const entry of readdirSync(agentsPath)) {
136
+ if (excluded.has(entry))
137
+ continue;
138
+ if (entry.startsWith("."))
139
+ continue;
140
+ const entryPath = resolve(agentsPath, entry);
141
+ if (!statSync(entryPath).isDirectory())
142
+ continue;
143
+ if (existsSync(resolve(entryPath, "SKILL.md"))) {
144
+ agents.push(entry);
145
+ }
146
+ }
147
+ return agents.sort();
148
+ }
149
+ /**
150
+ * Get current agent scale from config
151
+ */
152
+ export function getAgentScale(projectPath, agentName) {
153
+ const config = loadAgentConfig(projectPath, agentName);
154
+ // defaultAgentScale is already applied in loadAgentConfig, so just fall back to 1
155
+ return config.scale ?? 1;
156
+ }
157
+ /**
158
+ * Update a field in the per-agent config.toml.
159
+ */
160
+ export function updateAgentRuntimeField(projectPath, agentName, field, value) {
161
+ const configPath = resolve(projectPath, "agents", agentName, "config.toml");
162
+ let existing = {};
163
+ if (existsSync(configPath)) {
164
+ existing = parseTOML(readFileSync(configPath, "utf-8"));
165
+ }
166
+ existing[field] = value;
167
+ writeFileSync(configPath, stringifyTOML(existing));
168
+ }
169
+ //# sourceMappingURL=load-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-agent.js","sourceRoot":"","sources":["../../../src/shared/config/load-agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { GlobalConfig } from "./types.js";
2
+ /**
3
+ * Load the raw project config.toml without environment merging.
4
+ * Used internally and by tests that need the raw project config.
5
+ */
6
+ export declare function loadProjectConfig(projectPath: string): GlobalConfig;
7
+ /**
8
+ * Load the merged global config: config.toml → .env.toml → environment file.
9
+ *
10
+ * @param projectPath - path to the project directory
11
+ * @param envName - explicit environment name (from --env flag); takes precedence over .env.toml and AL_ENV
12
+ */
13
+ export declare function loadGlobalConfig(projectPath: string, envName?: string): GlobalConfig;
14
+ /**
15
+ * Update the project-level scale in config.toml
16
+ */
17
+ export declare function updateProjectScale(projectPath: string, scale: number): void;
18
+ /**
19
+ * Get current project scale from config
20
+ */
21
+ export declare function getProjectScale(projectPath: string): number;
22
+ //# sourceMappingURL=load-project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-project.d.ts","sourceRoot":"","sources":["../../../src/shared/config/load-project.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,CAiBnE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,YAAY,CA0CpF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAO3E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAG3D"}
@@ -0,0 +1,84 @@
1
+ import { readFileSync, writeFileSync, existsSync } from "fs";
2
+ import { resolve } from "path";
3
+ import { parse as parseTOML, stringify as stringifyTOML } from "smol-toml";
4
+ import { ConfigError } from "../errors.js";
5
+ import { resolveEnvironmentName, loadEnvToml, loadEnvironmentConfig, deepMerge, } from "../environment.js";
6
+ /**
7
+ * Load the raw project config.toml without environment merging.
8
+ * Used internally and by tests that need the raw project config.
9
+ */
10
+ export function loadProjectConfig(projectPath) {
11
+ const configPath = resolve(projectPath, "config.toml");
12
+ let config = {};
13
+ if (existsSync(configPath)) {
14
+ const raw = readFileSync(configPath, "utf-8");
15
+ try {
16
+ config = parseTOML(raw);
17
+ }
18
+ catch (err) {
19
+ throw new ConfigError(`Error parsing ${configPath}: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
20
+ }
21
+ }
22
+ return config;
23
+ }
24
+ /**
25
+ * Load the merged global config: config.toml → .env.toml → environment file.
26
+ *
27
+ * @param projectPath - path to the project directory
28
+ * @param envName - explicit environment name (from --env flag); takes precedence over .env.toml and AL_ENV
29
+ */
30
+ export function loadGlobalConfig(projectPath, envName) {
31
+ let config = loadProjectConfig(projectPath);
32
+ // Layer 2: .env.toml overrides
33
+ const envToml = loadEnvToml(projectPath);
34
+ let projectName;
35
+ if (envToml) {
36
+ const { environment: _, projectName: pn, ...overrides } = envToml;
37
+ projectName = typeof pn === "string" ? pn : undefined;
38
+ if (Object.keys(overrides).length > 0) {
39
+ config = deepMerge(config, overrides);
40
+ }
41
+ }
42
+ // Layer 3: environment file
43
+ const resolvedEnv = resolveEnvironmentName(envName, projectPath);
44
+ if (resolvedEnv) {
45
+ const envConfig = loadEnvironmentConfig(resolvedEnv);
46
+ config = deepMerge(config, envConfig);
47
+ }
48
+ // Set default telemetry config if not provided
49
+ if (!config.telemetry) {
50
+ config.telemetry = {
51
+ enabled: false,
52
+ provider: "none",
53
+ };
54
+ }
55
+ // projectName is .env.toml-only — not deep-merged from config.toml or environment files
56
+ if (projectName) {
57
+ config.projectName = projectName;
58
+ }
59
+ // Validate defaultAgentScale
60
+ if (config.defaultAgentScale !== undefined) {
61
+ if (!Number.isInteger(config.defaultAgentScale) || config.defaultAgentScale < 0) {
62
+ throw new ConfigError("defaultAgentScale must be a non-negative integer.");
63
+ }
64
+ }
65
+ return config;
66
+ }
67
+ /**
68
+ * Update the project-level scale in config.toml
69
+ */
70
+ export function updateProjectScale(projectPath, scale) {
71
+ const config = loadProjectConfig(projectPath);
72
+ config.scale = scale;
73
+ const configPath = resolve(projectPath, "config.toml");
74
+ const tomlStr = stringifyTOML(config);
75
+ writeFileSync(configPath, tomlStr);
76
+ }
77
+ /**
78
+ * Get current project scale from config
79
+ */
80
+ export function getProjectScale(projectPath) {
81
+ const config = loadGlobalConfig(projectPath);
82
+ return config.scale ?? 5; // Default project scale
83
+ }
84
+ //# sourceMappingURL=load-project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-project.js","sourceRoot":"","sources":["../../../src/shared/config/load-project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ import type { WebhookTrigger } from "../../webhooks/types.js";
2
+ export interface ModelConfig {
3
+ provider: string;
4
+ model: string;
5
+ thinkingLevel?: "off" | "minimal" | "low" | "medium" | "high" | "xhigh";
6
+ authType: "api_key" | "oauth_token" | "pi_auth";
7
+ }
8
+ export interface LocalConfig {
9
+ enabled: boolean;
10
+ image?: string;
11
+ memory?: string;
12
+ cpus?: number;
13
+ timeout?: number;
14
+ }
15
+ export interface VpsConfig {
16
+ provider: "vps";
17
+ host: string;
18
+ sshUser?: string;
19
+ sshPort?: number;
20
+ sshKeyPath?: string;
21
+ vultrInstanceId?: string;
22
+ vultrRegion?: string;
23
+ hetznerServerId?: number;
24
+ hetznerLocation?: string;
25
+ cloudflareZoneId?: string;
26
+ cloudflareDnsRecordId?: string;
27
+ cloudflareHostname?: string;
28
+ }
29
+ export type CloudConfig = VpsConfig;
30
+ export interface GatewayConfig {
31
+ port?: number;
32
+ url?: string;
33
+ maxChatSessions?: number;
34
+ }
35
+ export interface WebhookSourceConfig {
36
+ type: string;
37
+ credential?: string;
38
+ allowUnsigned?: boolean;
39
+ [credentialType: string]: string | boolean | undefined;
40
+ }
41
+ export interface TelemetryConfig {
42
+ enabled: boolean;
43
+ provider: "otel" | "none";
44
+ endpoint?: string;
45
+ serviceName?: string;
46
+ headers?: Record<string, string>;
47
+ samplingRate?: number;
48
+ }
49
+ export interface GlobalConfig {
50
+ models?: Record<string, ModelConfig>;
51
+ local?: LocalConfig;
52
+ gateway?: GatewayConfig;
53
+ webhooks?: Record<string, WebhookSourceConfig>;
54
+ telemetry?: TelemetryConfig;
55
+ projectName?: string;
56
+ maxReruns?: number;
57
+ maxCallDepth?: number;
58
+ /** @deprecated Use maxCallDepth instead */
59
+ maxTriggerDepth?: number;
60
+ /** @deprecated Use workQueueSize instead */
61
+ webhookQueueSize?: number;
62
+ workQueueSize?: number;
63
+ resourceLockTimeout?: number;
64
+ scale?: number;
65
+ defaultAgentScale?: number;
66
+ historyRetentionDays?: number;
67
+ }
68
+ export interface AgentHooks {
69
+ pre?: string[];
70
+ post?: string[];
71
+ }
72
+ /**
73
+ * Per-agent `[runtime]` table from `agents/<name>/config.toml`.
74
+ * Controls how the agent process is launched.
75
+ */
76
+ export interface AgentRuntimeType {
77
+ type?: "container" | "host-user";
78
+ run_as?: string;
79
+ }
80
+ /**
81
+ * Raw per-agent runtime config from `agents/<name>/config.toml`.
82
+ * Fields here are project-specific bindings — not portable.
83
+ */
84
+ export interface AgentRuntimeConfig {
85
+ source?: string;
86
+ credentials?: string[];
87
+ models?: string[];
88
+ schedule?: string;
89
+ webhooks?: WebhookTrigger[];
90
+ hooks?: AgentHooks;
91
+ params?: Record<string, unknown>;
92
+ scale?: number;
93
+ timeout?: number;
94
+ runtime?: AgentRuntimeType;
95
+ }
96
+ /**
97
+ * Resolved agent config — the runtime representation after merging
98
+ * portable SKILL.md fields with per-agent config.toml and global defaults.
99
+ */
100
+ export interface AgentConfig {
101
+ name: string;
102
+ description?: string;
103
+ credentials: string[];
104
+ models: ModelConfig[];
105
+ schedule?: string;
106
+ webhooks?: WebhookTrigger[];
107
+ hooks?: AgentHooks;
108
+ params?: Record<string, unknown>;
109
+ scale?: number;
110
+ timeout?: number;
111
+ license?: string;
112
+ compatibility?: string;
113
+ runtime?: AgentRuntimeType;
114
+ }
115
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/shared/config/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/shared/config/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import type { AgentConfig } from "./types.js";
2
+ export declare function validateAgentName(name: string): void;
3
+ export declare function validateAgentConfig(config: AgentConfig): void;
4
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/shared/config/validate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAgBpD;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAW7D"}