@action-llama/action-llama 0.14.1 → 0.16.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 (193) hide show
  1. package/dist/agents/feedback-monitor.d.ts +56 -0
  2. package/dist/agents/feedback-monitor.d.ts.map +1 -0
  3. package/dist/agents/feedback-monitor.js +176 -0
  4. package/dist/agents/feedback-monitor.js.map +1 -0
  5. package/dist/agents/feedback-runner.d.ts +28 -0
  6. package/dist/agents/feedback-runner.d.ts.map +1 -0
  7. package/dist/agents/feedback-runner.js +138 -0
  8. package/dist/agents/feedback-runner.js.map +1 -0
  9. package/dist/agents/runner.d.ts +4 -0
  10. package/dist/agents/runner.d.ts.map +1 -1
  11. package/dist/agents/runner.js +11 -0
  12. package/dist/agents/runner.js.map +1 -1
  13. package/dist/build-info.json +1 -1
  14. package/dist/cli/commands/agent.d.ts.map +1 -1
  15. package/dist/cli/commands/agent.js +46 -0
  16. package/dist/cli/commands/agent.js.map +1 -1
  17. package/dist/cli/commands/doctor.d.ts +1 -0
  18. package/dist/cli/commands/doctor.d.ts.map +1 -1
  19. package/dist/cli/commands/doctor.js +101 -4
  20. package/dist/cli/commands/doctor.js.map +1 -1
  21. package/dist/cli/commands/start.js +1 -1
  22. package/dist/cli/commands/start.js.map +1 -1
  23. package/dist/cli/commands/webhook.d.ts +11 -0
  24. package/dist/cli/commands/webhook.d.ts.map +1 -0
  25. package/dist/cli/commands/webhook.js +271 -0
  26. package/dist/cli/commands/webhook.js.map +1 -0
  27. package/dist/cli/main.js +17 -0
  28. package/dist/cli/main.js.map +1 -1
  29. package/dist/docker/local-runtime.d.ts.map +1 -1
  30. package/dist/docker/local-runtime.js +36 -7
  31. package/dist/docker/local-runtime.js.map +1 -1
  32. package/dist/docker/runtime.d.ts +4 -0
  33. package/dist/docker/runtime.d.ts.map +1 -1
  34. package/dist/gateway/index.d.ts +2 -0
  35. package/dist/gateway/index.d.ts.map +1 -1
  36. package/dist/gateway/index.js +1 -1
  37. package/dist/gateway/index.js.map +1 -1
  38. package/dist/gateway/routes/control.d.ts +2 -0
  39. package/dist/gateway/routes/control.d.ts.map +1 -1
  40. package/dist/gateway/routes/control.js +56 -0
  41. package/dist/gateway/routes/control.js.map +1 -1
  42. package/dist/gateway/routes/dashboard.d.ts.map +1 -1
  43. package/dist/gateway/routes/dashboard.js +89 -3
  44. package/dist/gateway/routes/dashboard.js.map +1 -1
  45. package/dist/gateway/routes/webhooks.d.ts +2 -1
  46. package/dist/gateway/routes/webhooks.d.ts.map +1 -1
  47. package/dist/gateway/routes/webhooks.js +3 -2
  48. package/dist/gateway/routes/webhooks.js.map +1 -1
  49. package/dist/gateway/views/agent-detail-page.d.ts +2 -0
  50. package/dist/gateway/views/agent-detail-page.d.ts.map +1 -1
  51. package/dist/gateway/views/agent-detail-page.js +115 -2
  52. package/dist/gateway/views/agent-detail-page.js.map +1 -1
  53. package/dist/gateway/views/dashboard-page.d.ts.map +1 -1
  54. package/dist/gateway/views/dashboard-page.js +36 -2
  55. package/dist/gateway/views/dashboard-page.js.map +1 -1
  56. package/dist/gateway/views/instance-detail-page.d.ts +6 -0
  57. package/dist/gateway/views/instance-detail-page.d.ts.map +1 -1
  58. package/dist/gateway/views/instance-detail-page.js +95 -12
  59. package/dist/gateway/views/instance-detail-page.js.map +1 -1
  60. package/dist/gateway/views/project-config-page.d.ts +12 -0
  61. package/dist/gateway/views/project-config-page.d.ts.map +1 -0
  62. package/dist/gateway/views/project-config-page.js +199 -0
  63. package/dist/gateway/views/project-config-page.js.map +1 -0
  64. package/dist/remote/push.d.ts.map +1 -1
  65. package/dist/remote/push.js +11 -2
  66. package/dist/remote/push.js.map +1 -1
  67. package/dist/scheduler/event-queue-unified.d.ts +50 -0
  68. package/dist/scheduler/event-queue-unified.d.ts.map +1 -0
  69. package/dist/scheduler/event-queue-unified.js +280 -0
  70. package/dist/scheduler/event-queue-unified.js.map +1 -0
  71. package/dist/scheduler/execution.d.ts +2 -1
  72. package/dist/scheduler/execution.d.ts.map +1 -1
  73. package/dist/scheduler/execution.js +48 -8
  74. package/dist/scheduler/execution.js.map +1 -1
  75. package/dist/scheduler/gateway-setup.d.ts +2 -1
  76. package/dist/scheduler/gateway-setup.d.ts.map +1 -1
  77. package/dist/scheduler/gateway-setup.js +20 -1
  78. package/dist/scheduler/gateway-setup.js.map +1 -1
  79. package/dist/scheduler/index.d.ts.map +1 -1
  80. package/dist/scheduler/index.js +75 -1
  81. package/dist/scheduler/index.js.map +1 -1
  82. package/dist/scheduler/lifecycle/agent-lifecycle.d.ts +114 -0
  83. package/dist/scheduler/lifecycle/agent-lifecycle.d.ts.map +1 -0
  84. package/dist/scheduler/lifecycle/agent-lifecycle.js +236 -0
  85. package/dist/scheduler/lifecycle/agent-lifecycle.js.map +1 -0
  86. package/dist/scheduler/lifecycle/index.d.ts +60 -0
  87. package/dist/scheduler/lifecycle/index.d.ts.map +1 -0
  88. package/dist/scheduler/lifecycle/index.js +103 -0
  89. package/dist/scheduler/lifecycle/index.js.map +1 -0
  90. package/dist/scheduler/lifecycle/instance-lifecycle.d.ts +88 -0
  91. package/dist/scheduler/lifecycle/instance-lifecycle.d.ts.map +1 -0
  92. package/dist/scheduler/lifecycle/instance-lifecycle.js +142 -0
  93. package/dist/scheduler/lifecycle/instance-lifecycle.js.map +1 -0
  94. package/dist/scheduler/types.d.ts +2 -0
  95. package/dist/scheduler/types.d.ts.map +1 -1
  96. package/dist/scheduler/webhook-setup.d.ts +1 -0
  97. package/dist/scheduler/webhook-setup.d.ts.map +1 -1
  98. package/dist/scheduler/webhook-setup.js +14 -2
  99. package/dist/scheduler/webhook-setup.js.map +1 -1
  100. package/dist/shared/config.d.ts +27 -0
  101. package/dist/shared/config.d.ts.map +1 -1
  102. package/dist/shared/config.js +51 -2
  103. package/dist/shared/config.js.map +1 -1
  104. package/dist/shared/constants.d.ts +16 -0
  105. package/dist/shared/constants.d.ts.map +1 -1
  106. package/dist/shared/constants.js +54 -0
  107. package/dist/shared/constants.js.map +1 -1
  108. package/dist/shared/default-feedback-agent.d.ts +10 -0
  109. package/dist/shared/default-feedback-agent.d.ts.map +1 -0
  110. package/dist/shared/default-feedback-agent.js +114 -0
  111. package/dist/shared/default-feedback-agent.js.map +1 -0
  112. package/dist/shared/persistence/adapters/state-store.d.ts +24 -0
  113. package/dist/shared/persistence/adapters/state-store.d.ts.map +1 -0
  114. package/dist/shared/persistence/adapters/state-store.js +32 -0
  115. package/dist/shared/persistence/adapters/state-store.js.map +1 -0
  116. package/dist/shared/persistence/adapters/stats-store.d.ts +49 -0
  117. package/dist/shared/persistence/adapters/stats-store.d.ts.map +1 -0
  118. package/dist/shared/persistence/adapters/stats-store.js +213 -0
  119. package/dist/shared/persistence/adapters/stats-store.js.map +1 -0
  120. package/dist/shared/persistence/backends/memory.d.ts +39 -0
  121. package/dist/shared/persistence/backends/memory.d.ts.map +1 -0
  122. package/dist/shared/persistence/backends/memory.js +214 -0
  123. package/dist/shared/persistence/backends/memory.js.map +1 -0
  124. package/dist/shared/persistence/backends/sqlite.d.ts +38 -0
  125. package/dist/shared/persistence/backends/sqlite.d.ts.map +1 -0
  126. package/dist/shared/persistence/backends/sqlite.js +250 -0
  127. package/dist/shared/persistence/backends/sqlite.js.map +1 -0
  128. package/dist/shared/persistence/event-store.d.ts +77 -0
  129. package/dist/shared/persistence/event-store.d.ts.map +1 -0
  130. package/dist/shared/persistence/event-store.js +139 -0
  131. package/dist/shared/persistence/event-store.js.map +1 -0
  132. package/dist/shared/persistence/index.d.ts +119 -0
  133. package/dist/shared/persistence/index.d.ts.map +1 -0
  134. package/dist/shared/persistence/index.js +93 -0
  135. package/dist/shared/persistence/index.js.map +1 -0
  136. package/dist/shared/persistence/migration.d.ts +47 -0
  137. package/dist/shared/persistence/migration.d.ts.map +1 -0
  138. package/dist/shared/persistence/migration.js +297 -0
  139. package/dist/shared/persistence/migration.js.map +1 -0
  140. package/dist/shared/usage.d.ts.map +1 -1
  141. package/dist/shared/usage.js +52 -7
  142. package/dist/shared/usage.js.map +1 -1
  143. package/dist/shared/validation.d.ts +61 -0
  144. package/dist/shared/validation.d.ts.map +1 -0
  145. package/dist/shared/validation.js +280 -0
  146. package/dist/shared/validation.js.map +1 -0
  147. package/dist/stats/event-store.d.ts +37 -0
  148. package/dist/stats/event-store.d.ts.map +1 -0
  149. package/dist/stats/event-store.js +366 -0
  150. package/dist/stats/event-store.js.map +1 -0
  151. package/dist/tui/App.d.ts +2 -1
  152. package/dist/tui/App.d.ts.map +1 -1
  153. package/dist/tui/App.js +132 -5
  154. package/dist/tui/App.js.map +1 -1
  155. package/dist/tui/render.d.ts +1 -1
  156. package/dist/tui/render.d.ts.map +1 -1
  157. package/dist/tui/render.js +2 -2
  158. package/dist/tui/render.js.map +1 -1
  159. package/dist/tui/status-tracker.d.ts +31 -0
  160. package/dist/tui/status-tracker.d.ts.map +1 -1
  161. package/dist/tui/status-tracker.js +117 -1
  162. package/dist/tui/status-tracker.js.map +1 -1
  163. package/dist/webhooks/providers/github.d.ts +1 -1
  164. package/dist/webhooks/providers/github.d.ts.map +1 -1
  165. package/dist/webhooks/providers/github.js +2 -2
  166. package/dist/webhooks/providers/github.js.map +1 -1
  167. package/dist/webhooks/providers/linear.d.ts +1 -1
  168. package/dist/webhooks/providers/linear.d.ts.map +1 -1
  169. package/dist/webhooks/providers/linear.js +2 -2
  170. package/dist/webhooks/providers/linear.js.map +1 -1
  171. package/dist/webhooks/providers/mintlify.d.ts +1 -1
  172. package/dist/webhooks/providers/mintlify.d.ts.map +1 -1
  173. package/dist/webhooks/providers/mintlify.js +2 -2
  174. package/dist/webhooks/providers/mintlify.js.map +1 -1
  175. package/dist/webhooks/providers/sentry.d.ts +1 -1
  176. package/dist/webhooks/providers/sentry.d.ts.map +1 -1
  177. package/dist/webhooks/providers/sentry.js +2 -2
  178. package/dist/webhooks/providers/sentry.js.map +1 -1
  179. package/dist/webhooks/providers/test.d.ts +1 -1
  180. package/dist/webhooks/providers/test.d.ts.map +1 -1
  181. package/dist/webhooks/providers/test.js +1 -1
  182. package/dist/webhooks/providers/test.js.map +1 -1
  183. package/dist/webhooks/registry.d.ts +8 -2
  184. package/dist/webhooks/registry.d.ts.map +1 -1
  185. package/dist/webhooks/registry.js +155 -3
  186. package/dist/webhooks/registry.js.map +1 -1
  187. package/dist/webhooks/types.d.ts +28 -1
  188. package/dist/webhooks/types.d.ts.map +1 -1
  189. package/dist/webhooks/validation.d.ts +7 -6
  190. package/dist/webhooks/validation.d.ts.map +1 -1
  191. package/dist/webhooks/validation.js +11 -9
  192. package/dist/webhooks/validation.js.map +1 -1
  193. package/package.json +1 -1
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Unified persistence layer combining key-value storage, event sourcing, and query capabilities.
3
+ *
4
+ * Replaces the fragmented StateStore/StatsStore/WorkQueue pattern with a single abstraction
5
+ * that supports namespaces, TTL, and append-only event storage for features like replay,
6
+ * audit, and high availability.
7
+ */
8
+ /**
9
+ * Create a persistence store from configuration.
10
+ */
11
+ export async function createPersistenceStore(config) {
12
+ let backend;
13
+ switch (config.type) {
14
+ case "sqlite":
15
+ const { SqliteBackend } = await import("./backends/sqlite.js");
16
+ backend = new SqliteBackend(config.path || ":memory:");
17
+ break;
18
+ case "memory":
19
+ const { MemoryBackend } = await import("./backends/memory.js");
20
+ backend = new MemoryBackend(config.maxSize);
21
+ break;
22
+ default:
23
+ throw new Error(`Unsupported persistence backend: ${config.type}`);
24
+ }
25
+ await backend.init();
26
+ return new PersistenceStoreImpl(backend);
27
+ }
28
+ /**
29
+ * Implementation of PersistenceStore that delegates to a backend.
30
+ */
31
+ class PersistenceStoreImpl {
32
+ backend;
33
+ streams = new Map();
34
+ constructor(backend) {
35
+ this.backend = backend;
36
+ }
37
+ get kv() {
38
+ return {
39
+ get: (namespace, key) => this.backend.kvGet(namespace, key),
40
+ set: (namespace, key, value, opts) => this.backend.kvSet(namespace, key, value, opts?.ttl ? opts.ttl * 1000 : undefined),
41
+ delete: (namespace, key) => this.backend.kvDelete(namespace, key),
42
+ deleteAll: (namespace) => this.backend.kvDeleteAll(namespace),
43
+ list: (namespace) => this.backend.kvList(namespace),
44
+ };
45
+ }
46
+ get events() {
47
+ return {
48
+ stream: (name) => {
49
+ if (!this.streams.has(name)) {
50
+ this.streams.set(name, new EventStreamImpl(name, this.backend));
51
+ }
52
+ return this.streams.get(name);
53
+ },
54
+ listStreams: () => this.backend.eventListStreams(),
55
+ };
56
+ }
57
+ get query() {
58
+ return {
59
+ sql: (query, params) => this.backend.querySql(query, params),
60
+ };
61
+ }
62
+ async transaction(fn) {
63
+ return this.backend.transactionRun(() => fn(this));
64
+ }
65
+ async close() {
66
+ await this.backend.close();
67
+ this.streams.clear();
68
+ }
69
+ }
70
+ /**
71
+ * Implementation of EventStream that delegates to a backend.
72
+ */
73
+ class EventStreamImpl {
74
+ name;
75
+ backend;
76
+ constructor(name, backend) {
77
+ this.name = name;
78
+ this.backend = backend;
79
+ }
80
+ append(event) {
81
+ return this.backend.eventAppend(this.name, event);
82
+ }
83
+ replay(query) {
84
+ return this.backend.eventReplay(this.name, query);
85
+ }
86
+ getSnapshot(type) {
87
+ return this.backend.eventGetSnapshot(this.name, type);
88
+ }
89
+ saveSnapshot(type, data, eventId) {
90
+ return this.backend.eventSaveSnapshot(this.name, type, data, eventId);
91
+ }
92
+ }
93
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/shared/persistence/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Migration utilities for transitioning from legacy StateStore/StatsStore to unified persistence.
3
+ *
4
+ * Provides atomic migration with rollback support and progress reporting.
5
+ */
6
+ import type { StateStore } from "../state-store.js";
7
+ import type { StatsStore } from "../../stats/store.js";
8
+ import type { PersistenceStore } from "./index.js";
9
+ export interface MigrationProgress {
10
+ /** Current step being performed */
11
+ step: string;
12
+ /** Number of items processed */
13
+ processed: number;
14
+ /** Total items to process */
15
+ total: number;
16
+ /** Estimated completion percentage */
17
+ percentage: number;
18
+ }
19
+ export interface MigrationOptions {
20
+ /** Progress callback */
21
+ onProgress?: (progress: MigrationProgress) => void;
22
+ /** Batch size for processing large datasets */
23
+ batchSize?: number;
24
+ /** Whether to preserve original data after migration */
25
+ preserveOriginal?: boolean;
26
+ }
27
+ export declare class LegacyMigrator {
28
+ private newStore;
29
+ constructor(newStore: PersistenceStore);
30
+ /**
31
+ * Migrate from legacy StateStore to new persistence layer.
32
+ */
33
+ migrateStateStore(legacyStore: StateStore, options?: MigrationOptions): Promise<void>;
34
+ /**
35
+ * Migrate from legacy StatsStore to event-sourced analytics.
36
+ */
37
+ migrateStatsStore(legacyStore: StatsStore, options?: MigrationOptions): Promise<void>;
38
+ /**
39
+ * Perform complete migration from all legacy stores.
40
+ */
41
+ migrateAll(legacyStateStore?: StateStore, legacyStatsStore?: StatsStore, options?: MigrationOptions): Promise<void>;
42
+ }
43
+ /**
44
+ * Helper function to run migration with console progress reporting.
45
+ */
46
+ export declare function migrateFromLegacy(newStore: PersistenceStore, legacyStateStore?: StateStore, legacyStatsStore?: StatsStore, options?: Omit<MigrationOptions, 'onProgress'>): Promise<void>;
47
+ //# sourceMappingURL=migration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration.d.ts","sourceRoot":"","sources":["../../../src/shared/persistence/migration.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAA6B,MAAM,sBAAsB,CAAC;AAClF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGnD,MAAM,WAAW,iBAAiB;IAChC,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,wBAAwB;IACxB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACnD,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wDAAwD;IACxD,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,qBAAa,cAAc;IACb,OAAO,CAAC,QAAQ;gBAAR,QAAQ,EAAE,gBAAgB;IAE9C;;OAEG;IACG,iBAAiB,CACrB,WAAW,EAAE,UAAU,EACvB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,IAAI,CAAC;IAiFhB;;OAEG;IACG,iBAAiB,CACrB,WAAW,EAAE,UAAU,EACvB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,IAAI,CAAC;IAsLhB;;OAEG;IACG,UAAU,CACd,gBAAgB,CAAC,EAAE,UAAU,EAC7B,gBAAgB,CAAC,EAAE,UAAU,EAC7B,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,IAAI,CAAC;CA4EjB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,gBAAgB,EAC1B,gBAAgB,CAAC,EAAE,UAAU,EAC7B,gBAAgB,CAAC,EAAE,UAAU,EAC7B,OAAO,GAAE,IAAI,CAAC,gBAAgB,EAAE,YAAY,CAAM,GACjD,OAAO,CAAC,IAAI,CAAC,CASf"}
@@ -0,0 +1,297 @@
1
+ /**
2
+ * Migration utilities for transitioning from legacy StateStore/StatsStore to unified persistence.
3
+ *
4
+ * Provides atomic migration with rollback support and progress reporting.
5
+ */
6
+ import { createEvent, EventTypes } from "./event-store.js";
7
+ export class LegacyMigrator {
8
+ newStore;
9
+ constructor(newStore) {
10
+ this.newStore = newStore;
11
+ }
12
+ /**
13
+ * Migrate from legacy StateStore to new persistence layer.
14
+ */
15
+ async migrateStateStore(legacyStore, options = {}) {
16
+ const { onProgress, preserveOriginal = true } = options;
17
+ // Get all namespaces by querying common ones
18
+ const commonNamespaces = ["locks", "lock-holders", "sessions", "calls", "containers"];
19
+ let totalItems = 0;
20
+ const namespaceData = new Map();
21
+ // Count total items first
22
+ for (const namespace of commonNamespaces) {
23
+ try {
24
+ const items = await legacyStore.list(namespace);
25
+ namespaceData.set(namespace, items);
26
+ totalItems += items.length;
27
+ }
28
+ catch (error) {
29
+ // Namespace might not exist, skip
30
+ continue;
31
+ }
32
+ }
33
+ if (totalItems === 0) {
34
+ onProgress?.({ step: "No data to migrate", processed: 0, total: 0, percentage: 100 });
35
+ return;
36
+ }
37
+ let processed = 0;
38
+ await this.newStore.transaction(async (store) => {
39
+ for (const [namespace, items] of namespaceData) {
40
+ onProgress?.({
41
+ step: `Migrating namespace: ${namespace}`,
42
+ processed,
43
+ total: totalItems,
44
+ percentage: Math.floor((processed / totalItems) * 100),
45
+ });
46
+ for (const item of items) {
47
+ await store.kv.set(namespace, item.key, item.value);
48
+ // Create audit event for the migration
49
+ await store.events.stream("migration").append(createEvent("state.migrated", {
50
+ namespace,
51
+ key: item.key,
52
+ source: "legacy-state-store",
53
+ }, {
54
+ source: "migrator",
55
+ tags: ["migration", "state-store"],
56
+ }));
57
+ processed++;
58
+ if (processed % 100 === 0) {
59
+ onProgress?.({
60
+ step: `Migrating namespace: ${namespace}`,
61
+ processed,
62
+ total: totalItems,
63
+ percentage: Math.floor((processed / totalItems) * 100),
64
+ });
65
+ }
66
+ }
67
+ }
68
+ onProgress?.({
69
+ step: "Migration completed",
70
+ processed: totalItems,
71
+ total: totalItems,
72
+ percentage: 100,
73
+ });
74
+ });
75
+ if (!preserveOriginal) {
76
+ for (const namespace of namespaceData.keys()) {
77
+ await legacyStore.deleteAll(namespace);
78
+ }
79
+ }
80
+ }
81
+ /**
82
+ * Migrate from legacy StatsStore to event-sourced analytics.
83
+ */
84
+ async migrateStatsStore(legacyStore, options = {}) {
85
+ const { onProgress, batchSize = 1000, preserveOriginal = true } = options;
86
+ // Migration is complex because we need to convert SQL data to events
87
+ // We'll query the runs and call_edges tables and convert them to events
88
+ let processed = 0;
89
+ onProgress?.({
90
+ step: "Counting historical data",
91
+ processed: 0,
92
+ total: 0,
93
+ percentage: 0,
94
+ });
95
+ // Use direct SQL to get all data efficiently
96
+ const runs = await this.newStore.query.sql("SELECT * FROM runs ORDER BY started_at ASC").catch(() => []); // Table might not exist
97
+ const callEdges = await this.newStore.query.sql("SELECT * FROM call_edges ORDER BY started_at ASC").catch(() => []);
98
+ const totalItems = runs.length + callEdges.length;
99
+ if (totalItems === 0) {
100
+ onProgress?.({ step: "No stats data to migrate", processed: 0, total: 0, percentage: 100 });
101
+ return;
102
+ }
103
+ await this.newStore.transaction(async (store) => {
104
+ const statsStream = store.events.stream("stats");
105
+ // Migrate run records to events
106
+ onProgress?.({
107
+ step: "Migrating run records",
108
+ processed,
109
+ total: totalItems,
110
+ percentage: Math.floor((processed / totalItems) * 100),
111
+ });
112
+ for (const run of runs) {
113
+ // Convert to run started event
114
+ await statsStream.append(createEvent(EventTypes.RUN_STARTED, {
115
+ instanceId: run.instance_id,
116
+ agentName: run.agent_name,
117
+ triggerType: run.trigger_type,
118
+ triggerSource: run.trigger_source,
119
+ }, {
120
+ source: "migrator",
121
+ correlationId: run.instance_id,
122
+ tags: ["migration", "stats"],
123
+ }));
124
+ // Convert to run completed/failed event
125
+ const eventType = run.result === "error" ? EventTypes.RUN_FAILED : EventTypes.RUN_COMPLETED;
126
+ await statsStream.append(createEvent(eventType, {
127
+ instanceId: run.instance_id,
128
+ agentName: run.agent_name,
129
+ result: run.result,
130
+ exitCode: run.exit_code,
131
+ durationMs: run.duration_ms,
132
+ inputTokens: run.input_tokens,
133
+ outputTokens: run.output_tokens,
134
+ cacheReadTokens: run.cache_read_tokens,
135
+ cacheWriteTokens: run.cache_write_tokens,
136
+ totalTokens: run.total_tokens,
137
+ costUsd: run.cost_usd,
138
+ turnCount: run.turn_count,
139
+ errorMessage: run.error_message,
140
+ preHookMs: run.pre_hook_ms,
141
+ postHookMs: run.post_hook_ms,
142
+ }, {
143
+ source: "migrator",
144
+ correlationId: run.instance_id,
145
+ tags: ["migration", "stats"],
146
+ }));
147
+ processed++;
148
+ if (processed % 100 === 0) {
149
+ onProgress?.({
150
+ step: "Migrating run records",
151
+ processed,
152
+ total: totalItems,
153
+ percentage: Math.floor((processed / totalItems) * 100),
154
+ });
155
+ }
156
+ }
157
+ // Migrate call edge records to events
158
+ onProgress?.({
159
+ step: "Migrating call records",
160
+ processed,
161
+ total: totalItems,
162
+ percentage: Math.floor((processed / totalItems) * 100),
163
+ });
164
+ for (const call of callEdges) {
165
+ // Convert to call initiated event
166
+ await statsStream.append(createEvent(EventTypes.CALL_INITIATED, {
167
+ callerAgent: call.caller_agent,
168
+ callerInstance: call.caller_instance,
169
+ targetAgent: call.target_agent,
170
+ targetInstance: call.target_instance,
171
+ depth: call.depth,
172
+ }, {
173
+ source: "migrator",
174
+ correlationId: call.caller_instance,
175
+ tags: ["migration", "stats"],
176
+ }));
177
+ // Convert to call completed/failed event if finished
178
+ if (call.duration_ms !== null) {
179
+ const eventType = call.status === "error" ? EventTypes.CALL_FAILED : EventTypes.CALL_COMPLETED;
180
+ await statsStream.append(createEvent(eventType, {
181
+ callerAgent: call.caller_agent,
182
+ callerInstance: call.caller_instance,
183
+ targetAgent: call.target_agent,
184
+ targetInstance: call.target_instance,
185
+ depth: call.depth,
186
+ durationMs: call.duration_ms,
187
+ status: call.status,
188
+ }, {
189
+ source: "migrator",
190
+ correlationId: call.caller_instance,
191
+ tags: ["migration", "stats"],
192
+ }));
193
+ }
194
+ processed++;
195
+ if (processed % 100 === 0) {
196
+ onProgress?.({
197
+ step: "Migrating call records",
198
+ processed,
199
+ total: totalItems,
200
+ percentage: Math.floor((processed / totalItems) * 100),
201
+ });
202
+ }
203
+ }
204
+ // Create a migration completed event
205
+ await store.events.stream("migration").append(createEvent("stats.migrated", {
206
+ runsCount: runs.length,
207
+ callEdgesCount: callEdges.length,
208
+ source: "legacy-stats-store",
209
+ }, {
210
+ source: "migrator",
211
+ tags: ["migration", "stats-store"],
212
+ }));
213
+ onProgress?.({
214
+ step: "Migration completed",
215
+ processed: totalItems,
216
+ total: totalItems,
217
+ percentage: 100,
218
+ });
219
+ });
220
+ }
221
+ /**
222
+ * Perform complete migration from all legacy stores.
223
+ */
224
+ async migrateAll(legacyStateStore, legacyStatsStore, options = {}) {
225
+ const { onProgress } = options;
226
+ onProgress?.({
227
+ step: "Starting complete migration",
228
+ processed: 0,
229
+ total: 100,
230
+ percentage: 0,
231
+ });
232
+ try {
233
+ if (legacyStateStore) {
234
+ onProgress?.({
235
+ step: "Migrating state store",
236
+ processed: 25,
237
+ total: 100,
238
+ percentage: 25,
239
+ });
240
+ await this.migrateStateStore(legacyStateStore, {
241
+ ...options,
242
+ onProgress: undefined, // Don't double-report
243
+ });
244
+ }
245
+ if (legacyStatsStore) {
246
+ onProgress?.({
247
+ step: "Migrating stats store",
248
+ processed: 50,
249
+ total: 100,
250
+ percentage: 50,
251
+ });
252
+ await this.migrateStatsStore(legacyStatsStore, {
253
+ ...options,
254
+ onProgress: undefined, // Don't double-report
255
+ });
256
+ }
257
+ // Create final migration marker
258
+ await this.newStore.events.stream("migration").append(createEvent("migration.completed", {
259
+ timestamp: Date.now(),
260
+ version: "1.0.0",
261
+ }, {
262
+ source: "migrator",
263
+ tags: ["migration", "completion"],
264
+ }));
265
+ onProgress?.({
266
+ step: "All migrations completed",
267
+ processed: 100,
268
+ total: 100,
269
+ percentage: 100,
270
+ });
271
+ }
272
+ catch (error) {
273
+ // Create error event
274
+ await this.newStore.events.stream("migration").append(createEvent("migration.failed", {
275
+ error: error instanceof Error ? error.message : String(error),
276
+ timestamp: Date.now(),
277
+ }, {
278
+ source: "migrator",
279
+ tags: ["migration", "error"],
280
+ }));
281
+ throw error;
282
+ }
283
+ }
284
+ }
285
+ /**
286
+ * Helper function to run migration with console progress reporting.
287
+ */
288
+ export async function migrateFromLegacy(newStore, legacyStateStore, legacyStatsStore, options = {}) {
289
+ const migrator = new LegacyMigrator(newStore);
290
+ await migrator.migrateAll(legacyStateStore, legacyStatsStore, {
291
+ ...options,
292
+ onProgress: (progress) => {
293
+ console.log(`Migration: ${progress.step} (${progress.percentage}%)`);
294
+ },
295
+ });
296
+ }
297
+ //# sourceMappingURL=migration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration.js","sourceRoot":"","sources":["../../../src/shared/persistence/migration.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../src/shared/usage.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,GAAG,GAAG,UAAU,CAU1D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,UAAU,CAUtE;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,UAAU,CAU3C"}
1
+ {"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../src/shared/usage.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,GAAG,GAAG,UAAU,CAqE1D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,UAAU,CAUtE;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,UAAU,CAU3C"}
@@ -2,14 +2,59 @@
2
2
  * Convert pi-ai SDK SessionStats to our TokenUsage format
3
3
  */
4
4
  export function sessionStatsToUsage(stats) {
5
+ // Handle null/undefined stats
6
+ if (!stats) {
7
+ return zeroTokenUsage();
8
+ }
9
+ // Try multiple possible paths for input tokens
10
+ const inputTokens = stats.usage?.input ?? // Current working format (OpenAI)
11
+ stats.inputTokens ?? // Direct property
12
+ stats.metrics?.input_tokens ?? // Metrics object
13
+ stats.usageMetrics?.inputTokens ?? // Usage metrics object
14
+ stats.anthropic?.usage?.input_tokens ?? // Provider-specific format
15
+ 0;
16
+ // Try multiple possible paths for output tokens
17
+ const outputTokens = stats.usage?.output ?? // Current working format (OpenAI)
18
+ stats.outputTokens ?? // Direct property
19
+ stats.metrics?.output_tokens ?? // Metrics object
20
+ stats.usageMetrics?.outputTokens ?? // Usage metrics object
21
+ stats.anthropic?.usage?.output_tokens ?? // Provider-specific format
22
+ 0;
23
+ // Try multiple possible paths for cache read tokens
24
+ const cacheReadTokens = stats.usage?.cacheRead ?? // Current working format (OpenAI)
25
+ stats.cacheReadTokens ?? // Direct property
26
+ stats.metrics?.cache_read_tokens ?? // Metrics object
27
+ stats.usageMetrics?.cacheReadTokens ?? // Usage metrics object
28
+ stats.anthropic?.usage?.cache_read_input_tokens ?? // Anthropic cache format
29
+ 0;
30
+ // Try multiple possible paths for cache write tokens
31
+ const cacheWriteTokens = stats.usage?.cacheWrite ?? // Current working format (OpenAI)
32
+ stats.cacheWriteTokens ?? // Direct property
33
+ stats.metrics?.cache_write_tokens ?? // Metrics object
34
+ stats.usageMetrics?.cacheWriteTokens ?? // Usage metrics object
35
+ stats.anthropic?.usage?.cache_creation_input_tokens ?? // Anthropic cache format
36
+ 0;
37
+ // Calculate total tokens if not provided
38
+ const totalTokens = stats.usage?.totalTokens ?? // Provided total
39
+ stats.totalTokens ?? // Direct property
40
+ stats.metrics?.total_tokens ?? // Metrics object
41
+ inputTokens + outputTokens; // Fallback calculation
42
+ // Try multiple possible paths for cost
43
+ const cost = stats.usage?.cost?.total ?? // Current working format
44
+ stats.cost ?? // Direct property
45
+ stats.metrics?.cost ?? // Metrics object
46
+ stats.usageMetrics?.cost ?? // Usage metrics object
47
+ 0;
48
+ // Turn count should be consistent across providers
49
+ const turnCount = stats.turnCount ?? 0;
5
50
  return {
6
- inputTokens: stats.usage?.input ?? 0,
7
- outputTokens: stats.usage?.output ?? 0,
8
- cacheReadTokens: stats.usage?.cacheRead ?? 0,
9
- cacheWriteTokens: stats.usage?.cacheWrite ?? 0,
10
- totalTokens: stats.usage?.totalTokens ?? 0,
11
- cost: stats.usage?.cost?.total ?? 0,
12
- turnCount: stats.turnCount ?? 0,
51
+ inputTokens,
52
+ outputTokens,
53
+ cacheReadTokens,
54
+ cacheWriteTokens,
55
+ totalTokens,
56
+ cost,
57
+ turnCount,
13
58
  };
14
59
  }
15
60
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/shared/usage.ts"],"names":[],"mappings":"AAUA;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAU;IAC5C,OAAO;QACL,WAAW,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC;QACpC,YAAY,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;QACtC,eAAe,EAAE,KAAK,CAAC,KAAK,EAAE,SAAS,IAAI,CAAC;QAC5C,gBAAgB,EAAE,KAAK,CAAC,KAAK,EAAE,UAAU,IAAI,CAAC;QAC9C,WAAW,EAAE,KAAK,CAAC,KAAK,EAAE,WAAW,IAAI,CAAC;QAC1C,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;QACnC,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,CAAC;KAChC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,CAAa,EAAE,CAAa;IACxD,OAAO;QACL,WAAW,EAAE,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW;QAC1C,YAAY,EAAE,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY;QAC7C,eAAe,EAAE,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,eAAe;QACtD,gBAAgB,EAAE,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,gBAAgB;QACzD,WAAW,EAAE,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW;QAC1C,IAAI,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI;QACrB,SAAS,EAAE,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS;KACrC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO;QACL,WAAW,EAAE,CAAC;QACd,YAAY,EAAE,CAAC;QACf,eAAe,EAAE,CAAC;QAClB,gBAAgB,EAAE,CAAC;QACnB,WAAW,EAAE,CAAC;QACd,IAAI,EAAE,CAAC;QACP,SAAS,EAAE,CAAC;KACb,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/shared/usage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Enhanced validation functions for Action Llama configurations.
3
+ * Provides schema validation, unknown field detection, cron validation,
4
+ * model/provider compatibility checks, and unsafe config warnings.
5
+ */
6
+ import type { AgentConfig, GlobalConfig } from "./config.js";
7
+ export interface ValidationError {
8
+ type: "error" | "warning";
9
+ message: string;
10
+ field?: string;
11
+ context?: string;
12
+ }
13
+ export interface ValidationResult {
14
+ valid: boolean;
15
+ errors: ValidationError[];
16
+ warnings: ValidationError[];
17
+ }
18
+ export interface ConfigSchema {
19
+ required: Set<string>;
20
+ optional: Set<string>;
21
+ nested: Record<string, ConfigSchema>;
22
+ }
23
+ /**
24
+ * Validate a cron expression using the croner library.
25
+ */
26
+ export declare function validateCronExpression(schedule: string): {
27
+ valid: boolean;
28
+ error?: string;
29
+ };
30
+ /**
31
+ * Validate model/provider/authType compatibility.
32
+ */
33
+ export declare function validateModelProviderCompat(provider: string, model: string, authType: string): {
34
+ valid: boolean;
35
+ error?: string;
36
+ };
37
+ /**
38
+ * Validate config against a schema and return validation errors.
39
+ */
40
+ export declare function validateConfigSchema(config: unknown, schema: ConfigSchema, path?: string): ValidationResult;
41
+ /**
42
+ * Detect unknown fields in config that are not in the schema.
43
+ */
44
+ export declare function detectUnknownFields(config: unknown, schema: ConfigSchema, path?: string): string[];
45
+ /**
46
+ * Validate global config with comprehensive checks.
47
+ */
48
+ export declare function validateGlobalConfig(config: GlobalConfig, raw?: unknown): ValidationResult;
49
+ /**
50
+ * Validate agent config with comprehensive checks.
51
+ */
52
+ export declare function validateAgentConfig(config: AgentConfig, raw?: unknown): ValidationResult;
53
+ /**
54
+ * Check for unknown fields in global config.
55
+ */
56
+ export declare function detectGlobalConfigUnknownFields(raw: unknown): string[];
57
+ /**
58
+ * Check for unknown fields in agent config.
59
+ */
60
+ export declare function detectAgentConfigUnknownFields(raw: unknown): string[];
61
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/shared/validation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAe,MAAM,aAAa,CAAC;AAG1E,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACtC;AA4DD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAY3F;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAoCpC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,YAAY,EACpB,IAAI,SAAK,GACR,gBAAgB,CA2ClB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,YAAY,EACpB,IAAI,SAAK,GACR,MAAM,EAAE,CAwBV;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,CAAC,EAAE,OAAO,GAAG,gBAAgB,CAyC1F;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,OAAO,GAAG,gBAAgB,CAsDxF;AAED;;GAEG;AACH,wBAAgB,+BAA+B,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,EAAE,CAEtE;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,EAAE,CAErE"}