@jungjaehoon/mama-os 0.18.2 → 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 (171) hide show
  1. package/dist/agent/agent-loop.d.ts +25 -0
  2. package/dist/agent/agent-loop.d.ts.map +1 -1
  3. package/dist/agent/agent-loop.js +67 -14
  4. package/dist/agent/agent-loop.js.map +1 -1
  5. package/dist/agent/code-act/host-bridge.d.ts.map +1 -1
  6. package/dist/agent/code-act/host-bridge.js +98 -0
  7. package/dist/agent/code-act/host-bridge.js.map +1 -1
  8. package/dist/agent/code-act/type-definition-generator.d.ts.map +1 -1
  9. package/dist/agent/code-act/type-definition-generator.js +0 -1
  10. package/dist/agent/code-act/type-definition-generator.js.map +1 -1
  11. package/dist/agent/gateway-tool-executor.d.ts +36 -1
  12. package/dist/agent/gateway-tool-executor.d.ts.map +1 -1
  13. package/dist/agent/gateway-tool-executor.js +938 -54
  14. package/dist/agent/gateway-tool-executor.js.map +1 -1
  15. package/dist/agent/gateway-tools.md +9 -0
  16. package/dist/agent/managed-agent-runtime-sync.d.ts +36 -0
  17. package/dist/agent/managed-agent-runtime-sync.d.ts.map +1 -0
  18. package/dist/agent/managed-agent-runtime-sync.js +207 -0
  19. package/dist/agent/managed-agent-runtime-sync.js.map +1 -0
  20. package/dist/agent/managed-agent-validation.d.ts +4 -0
  21. package/dist/agent/managed-agent-validation.d.ts.map +1 -0
  22. package/dist/agent/managed-agent-validation.js +84 -0
  23. package/dist/agent/managed-agent-validation.js.map +1 -0
  24. package/dist/agent/os-agent-capabilities.md +400 -0
  25. package/dist/agent/skill-loader.d.ts +2 -0
  26. package/dist/agent/skill-loader.d.ts.map +1 -1
  27. package/dist/agent/skill-loader.js +28 -0
  28. package/dist/agent/skill-loader.js.map +1 -1
  29. package/dist/agent/tool-registry.d.ts.map +1 -1
  30. package/dist/agent/tool-registry.js +66 -0
  31. package/dist/agent/tool-registry.js.map +1 -1
  32. package/dist/agent/types.d.ts +2 -1
  33. package/dist/agent/types.d.ts.map +1 -1
  34. package/dist/agent/types.js.map +1 -1
  35. package/dist/api/agent-handler.d.ts +34 -0
  36. package/dist/api/agent-handler.d.ts.map +1 -0
  37. package/dist/api/agent-handler.js +216 -0
  38. package/dist/api/agent-handler.js.map +1 -0
  39. package/dist/api/graph-api-types.d.ts +4 -0
  40. package/dist/api/graph-api-types.d.ts.map +1 -1
  41. package/dist/api/graph-api.d.ts +2 -2
  42. package/dist/api/graph-api.d.ts.map +1 -1
  43. package/dist/api/graph-api.js +480 -51
  44. package/dist/api/graph-api.js.map +1 -1
  45. package/dist/api/index.d.ts.map +1 -1
  46. package/dist/api/index.js +4 -0
  47. package/dist/api/index.js.map +1 -1
  48. package/dist/api/token-handler.d.ts +1 -0
  49. package/dist/api/token-handler.d.ts.map +1 -1
  50. package/dist/api/token-handler.js +4 -3
  51. package/dist/api/token-handler.js.map +1 -1
  52. package/dist/api/ui-command-handler.d.ts +48 -0
  53. package/dist/api/ui-command-handler.d.ts.map +1 -0
  54. package/dist/api/ui-command-handler.js +160 -0
  55. package/dist/api/ui-command-handler.js.map +1 -0
  56. package/dist/cli/commands/start.d.ts.map +1 -1
  57. package/dist/cli/commands/start.js +127 -1
  58. package/dist/cli/commands/start.js.map +1 -1
  59. package/dist/cli/config/config-manager.d.ts.map +1 -1
  60. package/dist/cli/config/config-manager.js +16 -31
  61. package/dist/cli/config/config-manager.js.map +1 -1
  62. package/dist/cli/runtime/agent-loop-init.d.ts.map +1 -1
  63. package/dist/cli/runtime/agent-loop-init.js +31 -7
  64. package/dist/cli/runtime/agent-loop-init.js.map +1 -1
  65. package/dist/cli/runtime/api-routes-init.d.ts +3 -0
  66. package/dist/cli/runtime/api-routes-init.d.ts.map +1 -1
  67. package/dist/cli/runtime/api-routes-init.js +283 -34
  68. package/dist/cli/runtime/api-routes-init.js.map +1 -1
  69. package/dist/cli/runtime/gateway-init.d.ts +2 -1
  70. package/dist/cli/runtime/gateway-init.d.ts.map +1 -1
  71. package/dist/cli/runtime/gateway-init.js +5 -1
  72. package/dist/cli/runtime/gateway-init.js.map +1 -1
  73. package/dist/connectors/framework/raw-store.d.ts +4 -0
  74. package/dist/connectors/framework/raw-store.d.ts.map +1 -1
  75. package/dist/connectors/framework/raw-store.js +33 -10
  76. package/dist/connectors/framework/raw-store.js.map +1 -1
  77. package/dist/db/agent-store.d.ts +115 -0
  78. package/dist/db/agent-store.d.ts.map +1 -0
  79. package/dist/db/agent-store.js +248 -0
  80. package/dist/db/agent-store.js.map +1 -0
  81. package/dist/db/migrations/agent-activity-validation-columns.d.ts +3 -0
  82. package/dist/db/migrations/agent-activity-validation-columns.d.ts.map +1 -0
  83. package/dist/db/migrations/agent-activity-validation-columns.js +22 -0
  84. package/dist/db/migrations/agent-activity-validation-columns.js.map +1 -0
  85. package/dist/db/migrations/agent-metrics-response-avg.d.ts +3 -0
  86. package/dist/db/migrations/agent-metrics-response-avg.d.ts.map +1 -0
  87. package/dist/db/migrations/agent-metrics-response-avg.js +19 -0
  88. package/dist/db/migrations/agent-metrics-response-avg.js.map +1 -0
  89. package/dist/db/migrations/agent-store-tables.d.ts +3 -0
  90. package/dist/db/migrations/agent-store-tables.d.ts.map +1 -0
  91. package/dist/db/migrations/agent-store-tables.js +59 -0
  92. package/dist/db/migrations/agent-store-tables.js.map +1 -0
  93. package/dist/db/migrations/token-usage-agent-version.d.ts +3 -0
  94. package/dist/db/migrations/token-usage-agent-version.d.ts.map +1 -0
  95. package/dist/db/migrations/token-usage-agent-version.js +16 -0
  96. package/dist/db/migrations/token-usage-agent-version.js.map +1 -0
  97. package/dist/db/migrations/validation-session-tables.d.ts +3 -0
  98. package/dist/db/migrations/validation-session-tables.d.ts.map +1 -0
  99. package/dist/db/migrations/validation-session-tables.js +59 -0
  100. package/dist/db/migrations/validation-session-tables.js.map +1 -0
  101. package/dist/gateways/message-router.d.ts +10 -0
  102. package/dist/gateways/message-router.d.ts.map +1 -1
  103. package/dist/gateways/message-router.js +188 -14
  104. package/dist/gateways/message-router.js.map +1 -1
  105. package/dist/gateways/types.d.ts +1 -1
  106. package/dist/gateways/types.d.ts.map +1 -1
  107. package/dist/multi-agent/agent-process-manager.js +1 -1
  108. package/dist/multi-agent/agent-process-manager.js.map +1 -1
  109. package/dist/multi-agent/conductor-persona.d.ts +13 -0
  110. package/dist/multi-agent/conductor-persona.d.ts.map +1 -0
  111. package/dist/multi-agent/conductor-persona.js +157 -0
  112. package/dist/multi-agent/conductor-persona.js.map +1 -0
  113. package/dist/multi-agent/dashboard-agent-persona.d.ts +1 -1
  114. package/dist/multi-agent/dashboard-agent-persona.d.ts.map +1 -1
  115. package/dist/multi-agent/dashboard-agent-persona.js +7 -3
  116. package/dist/multi-agent/dashboard-agent-persona.js.map +1 -1
  117. package/dist/multi-agent/delegation-manager.d.ts +5 -0
  118. package/dist/multi-agent/delegation-manager.d.ts.map +1 -1
  119. package/dist/multi-agent/delegation-manager.js +37 -0
  120. package/dist/multi-agent/delegation-manager.js.map +1 -1
  121. package/dist/multi-agent/ultrawork.d.ts +3 -0
  122. package/dist/multi-agent/ultrawork.d.ts.map +1 -1
  123. package/dist/multi-agent/ultrawork.js +9 -0
  124. package/dist/multi-agent/ultrawork.js.map +1 -1
  125. package/dist/validation/session-service.d.ts +72 -0
  126. package/dist/validation/session-service.d.ts.map +1 -0
  127. package/dist/validation/session-service.js +298 -0
  128. package/dist/validation/session-service.js.map +1 -0
  129. package/dist/validation/store.d.ts +25 -0
  130. package/dist/validation/store.d.ts.map +1 -0
  131. package/dist/validation/store.js +200 -0
  132. package/dist/validation/store.js.map +1 -0
  133. package/dist/validation/types.d.ts +119 -0
  134. package/dist/validation/types.d.ts.map +1 -0
  135. package/dist/validation/types.js +57 -0
  136. package/dist/validation/types.js.map +1 -0
  137. package/package.json +3 -3
  138. package/public/viewer/js/modules/agents.js +1148 -0
  139. package/public/viewer/js/modules/chat.js +20 -11
  140. package/public/viewer/js/modules/connector-feed.js +35 -0
  141. package/public/viewer/js/modules/dashboard.js +49 -0
  142. package/public/viewer/js/modules/memory.js +32 -0
  143. package/public/viewer/js/modules/settings.js +34 -79
  144. package/public/viewer/js/modules/wiki.js +59 -4
  145. package/public/viewer/js/utils/api.js +70 -0
  146. package/public/viewer/js/utils/dom.js +3 -0
  147. package/public/viewer/js/utils/ui-commands.js +93 -0
  148. package/public/viewer/log-viewer.html +2 -2
  149. package/public/viewer/src/modules/agents.ts +1299 -0
  150. package/public/viewer/src/modules/chat.ts +23 -14
  151. package/public/viewer/src/modules/connector-feed.ts +35 -0
  152. package/public/viewer/src/modules/dashboard.ts +50 -0
  153. package/public/viewer/src/modules/memory.ts +31 -0
  154. package/public/viewer/src/modules/settings.ts +36 -96
  155. package/public/viewer/src/modules/wiki.ts +73 -6
  156. package/public/viewer/src/types/global.d.ts +0 -9
  157. package/public/viewer/src/utils/api.ts +156 -2
  158. package/public/viewer/src/utils/dom.ts +6 -1
  159. package/public/viewer/src/utils/ui-commands.ts +118 -0
  160. package/public/viewer/viewer.css +105 -10
  161. package/public/viewer/viewer.html +1868 -777
  162. package/scripts/generate-gateway-tools.ts +5 -1
  163. package/public/viewer/js/modules/playground.js +0 -148
  164. package/public/viewer/js/modules/skills.js +0 -451
  165. package/public/viewer/src/modules/playground.ts +0 -173
  166. package/public/viewer/src/modules/skills.ts +0 -491
  167. package/templates/playgrounds/cron-workflow-lab.html +0 -1601
  168. package/templates/playgrounds/mama-log-viewer.html +0 -1341
  169. package/templates/playgrounds/skill-lab-playground.html +0 -1625
  170. package/templates/playgrounds/wave-visualizer.html +0 -694
  171. package/templates/skills/playground.md +0 -197
@@ -0,0 +1,298 @@
1
+ "use strict";
2
+ /**
3
+ * Validation Session Service
4
+ *
5
+ * Orchestrates the validation session lifecycle:
6
+ * startSession → recordRun → finalizeSession
7
+ *
8
+ * Includes snapshot building (API-only, no DOM),
9
+ * metric computation, status classification, and stale session cleanup.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ValidationSessionService = void 0;
13
+ const crypto_1 = require("crypto");
14
+ const store_js_1 = require("./store.js");
15
+ const types_js_1 = require("./types.js");
16
+ // ── Service ─────────────────────────────────────────────────────────────────
17
+ class ValidationSessionService {
18
+ db;
19
+ constructor(db) {
20
+ this.db = db;
21
+ }
22
+ /**
23
+ * Start a new validation session.
24
+ * Captures before snapshot, looks up baseline, creates DB row.
25
+ */
26
+ startSession(agentId, agentVersion, triggerType, options) {
27
+ const sessionId = `vs-${(0, crypto_1.randomUUID)().slice(0, 8)}-${Date.now()}`;
28
+ const profile = (0, types_js_1.getMetricProfile)(agentId);
29
+ // Baseline lookup
30
+ const baseline = (0, store_js_1.findBaseline)(this.db, agentId, triggerType);
31
+ // Before snapshot (API state summary)
32
+ const beforeSnapshot = options?.customBeforeSnapshot ?? this.buildBeforeSnapshot(agentId);
33
+ return (0, store_js_1.createValidationSession)(this.db, {
34
+ id: sessionId,
35
+ agent_id: agentId,
36
+ agent_version: agentVersion,
37
+ trigger_type: triggerType,
38
+ goal: options?.goal,
39
+ metric_profile_json: JSON.stringify(profile),
40
+ baseline_version: baseline?.version,
41
+ baseline_session_id: baseline?.sessionId,
42
+ execution_status: 'started',
43
+ validation_outcome: 'inconclusive',
44
+ before_snapshot_json: (0, types_js_1.guardJsonSize)(beforeSnapshot),
45
+ started_at: Date.now(),
46
+ });
47
+ }
48
+ /**
49
+ * Record a run envelope. Links an activity row to this session via run_id.
50
+ */
51
+ recordRun(sessionId, input) {
52
+ if (input.activityId) {
53
+ this.db
54
+ .prepare('UPDATE agent_activity SET run_id = ? WHERE id = ?')
55
+ .run(sessionId, input.activityId);
56
+ }
57
+ }
58
+ /**
59
+ * Finalize a session: capture after snapshot, compute metrics,
60
+ * classify status, update validation state.
61
+ */
62
+ finalizeSession(sessionId, input) {
63
+ this.validateFinalizeInput(input);
64
+ const detail = (0, store_js_1.getValidationSessionDetail)(this.db, sessionId);
65
+ if (!detail) {
66
+ throw new Error(`Session ${sessionId} not found`);
67
+ }
68
+ const session = detail.session;
69
+ if (input.activity_row_id !== undefined) {
70
+ this.recordRun(sessionId, { activityId: input.activity_row_id });
71
+ }
72
+ // If execution failed, mark inconclusive
73
+ if (input.execution_status === 'failed' || input.execution_status === 'timeout') {
74
+ (0, store_js_1.updateValidationSession)(this.db, sessionId, {
75
+ execution_status: input.execution_status,
76
+ validation_outcome: 'inconclusive',
77
+ summary: input.error_message ?? `Execution ${input.execution_status}`,
78
+ after_snapshot_json: this.buildAfterSnapshot(session.agent_id, input),
79
+ ended_at: Date.now(),
80
+ });
81
+ this.updateState(session.agent_id, session.trigger_type, 'inconclusive');
82
+ return this.getSession(sessionId);
83
+ }
84
+ // Compute metrics and deltas against baseline
85
+ const profile = JSON.parse(session.metric_profile_json);
86
+ const baselineMetrics = this.loadBaselineMetrics(session.baseline_session_id);
87
+ let outcome = 'inconclusive';
88
+ if (input.metrics && Object.keys(input.metrics).length > 0) {
89
+ const { hasImprovement, hasRegression } = this.saveMetricsWithDelta(sessionId, input.metrics, baselineMetrics, profile);
90
+ outcome = this.classifyOutcome(input.metrics, profile, hasImprovement, hasRegression);
91
+ }
92
+ // Build after snapshot
93
+ const afterSnapshot = this.buildAfterSnapshot(session.agent_id, input);
94
+ // Build report
95
+ const report = this.buildReport(session, input, outcome);
96
+ (0, store_js_1.updateValidationSession)(this.db, sessionId, {
97
+ execution_status: 'completed',
98
+ validation_outcome: outcome,
99
+ after_snapshot_json: afterSnapshot,
100
+ report_json: report,
101
+ summary: `${outcome}: ${Object.keys(input.metrics ?? {}).length} metrics evaluated`,
102
+ ended_at: Date.now(),
103
+ });
104
+ this.updateState(session.agent_id, session.trigger_type, outcome);
105
+ return this.getSession(sessionId);
106
+ }
107
+ /**
108
+ * Clean up stale sessions (started but never ended).
109
+ * Returns count of cleaned sessions.
110
+ */
111
+ cleanupStaleSessions(maxAgeMs) {
112
+ const stale = (0, store_js_1.listStaleSessions)(this.db, maxAgeMs);
113
+ for (const session of stale) {
114
+ (0, store_js_1.updateValidationSession)(this.db, session.id, {
115
+ execution_status: 'timeout',
116
+ validation_outcome: 'inconclusive',
117
+ summary: 'Session timed out (stale cleanup)',
118
+ ended_at: Date.now(),
119
+ });
120
+ this.updateState(session.agent_id, session.trigger_type, 'inconclusive');
121
+ }
122
+ return stale.length;
123
+ }
124
+ // ── Private ─────────────────────────────────────────────────────────────
125
+ getSession(id) {
126
+ const detail = (0, store_js_1.getValidationSessionDetail)(this.db, id);
127
+ if (!detail)
128
+ throw new Error(`Session ${id} not found`);
129
+ return detail.session;
130
+ }
131
+ buildBeforeSnapshot(agentId) {
132
+ // Capture API-level state summary from DB
133
+ const activityCount = this.db
134
+ .prepare('SELECT COUNT(*) as cnt FROM agent_activity WHERE agent_id = ?')
135
+ .get(agentId)?.cnt ?? 0;
136
+ const latestActivity = this.db
137
+ .prepare('SELECT type, score, created_at FROM agent_activity WHERE agent_id = ? ORDER BY created_at DESC LIMIT 1')
138
+ .get(agentId);
139
+ return JSON.stringify({
140
+ schema_version: types_js_1.SCHEMA_VERSION,
141
+ agent_id: agentId,
142
+ activity_count: activityCount,
143
+ latest_activity_type: latestActivity?.type ?? null,
144
+ latest_score: latestActivity?.score ?? null,
145
+ captured_at: Date.now(),
146
+ });
147
+ }
148
+ buildAfterSnapshot(agentId, input) {
149
+ const base = JSON.parse(this.buildBeforeSnapshot(agentId));
150
+ return JSON.stringify({
151
+ ...base,
152
+ execution_status: input.execution_status,
153
+ error_message: input.error_message ?? null,
154
+ test_input_summary: input.test_input_summary ?? null,
155
+ });
156
+ }
157
+ validateFinalizeInput(input) {
158
+ const validStatuses = ['completed', 'failed', 'timeout'];
159
+ if (!validStatuses.includes(input.execution_status)) {
160
+ throw new Error(`Invalid execution status: ${input.execution_status}`);
161
+ }
162
+ if (input.error_message !== undefined && typeof input.error_message !== 'string') {
163
+ throw new Error('Invalid validation error payload');
164
+ }
165
+ if (input.test_input_summary !== undefined && typeof input.test_input_summary !== 'string') {
166
+ throw new Error('Invalid validation test input payload');
167
+ }
168
+ if (input.metrics !== undefined) {
169
+ if (typeof input.metrics !== 'object' || input.metrics === null) {
170
+ throw new Error('Invalid validation metrics payload');
171
+ }
172
+ for (const value of Object.values(input.metrics)) {
173
+ if (typeof value !== 'number' || !Number.isFinite(value)) {
174
+ throw new Error('Invalid validation metrics payload');
175
+ }
176
+ }
177
+ }
178
+ }
179
+ loadBaselineMetrics(baselineSessionId) {
180
+ const map = new Map();
181
+ if (!baselineSessionId)
182
+ return map;
183
+ const detail = (0, store_js_1.getValidationSessionDetail)(this.db, baselineSessionId);
184
+ if (!detail)
185
+ return map;
186
+ for (const m of detail.metrics) {
187
+ map.set(m.name, m);
188
+ }
189
+ return map;
190
+ }
191
+ saveMetricsWithDelta(sessionId, metrics, baselineMetrics, profile) {
192
+ let hasImprovement = false;
193
+ let hasRegression = false;
194
+ for (const [name, value] of Object.entries(metrics)) {
195
+ const direction = profile.directions?.[name] ?? this.inferDirection(name);
196
+ const baselineMetric = baselineMetrics.get(name);
197
+ const baselineValue = baselineMetric?.value ?? null;
198
+ let deltaValue = null;
199
+ if (baselineValue !== null) {
200
+ deltaValue = value - baselineValue;
201
+ // Check if improved or regressed
202
+ if (direction === 'down_good') {
203
+ if (deltaValue < 0)
204
+ hasImprovement = true;
205
+ if (deltaValue > 0)
206
+ hasRegression = true;
207
+ }
208
+ else if (direction === 'up_good') {
209
+ if (deltaValue > 0)
210
+ hasImprovement = true;
211
+ if (deltaValue < 0)
212
+ hasRegression = true;
213
+ }
214
+ }
215
+ (0, store_js_1.saveValidationMetric)(this.db, {
216
+ validation_session_id: sessionId,
217
+ name,
218
+ value,
219
+ baseline_value: baselineValue,
220
+ delta_value: deltaValue,
221
+ direction,
222
+ });
223
+ }
224
+ return { hasImprovement, hasRegression };
225
+ }
226
+ classifyOutcome(metrics, profile, hasImprovement, hasRegression) {
227
+ // Check critical thresholds
228
+ if (profile.thresholds) {
229
+ for (const [name, threshold] of Object.entries(profile.thresholds)) {
230
+ const value = metrics[name];
231
+ if (value !== undefined && value >= threshold.critical) {
232
+ return 'regressed';
233
+ }
234
+ }
235
+ }
236
+ if (hasRegression)
237
+ return 'regressed';
238
+ if (hasImprovement)
239
+ return 'improved';
240
+ return 'healthy';
241
+ }
242
+ /**
243
+ * Infer metric direction from naming conventions when the metric profile does not
244
+ * provide an explicit override.
245
+ *
246
+ * `down_good`: names containing latency, duration, cost, error, meaningless, staleness
247
+ * `up_good`: names containing rate, efficiency, accuracy, signal
248
+ * default: neutral
249
+ */
250
+ inferDirection(metricName) {
251
+ if (metricName.includes('latency') ||
252
+ metricName.includes('duration') ||
253
+ metricName.includes('cost') ||
254
+ metricName.includes('error') ||
255
+ metricName.includes('meaningless') ||
256
+ metricName.includes('staleness')) {
257
+ return 'down_good';
258
+ }
259
+ // Metrics where higher is better
260
+ if (metricName.includes('rate') ||
261
+ metricName.includes('efficiency') ||
262
+ metricName.includes('accuracy') ||
263
+ metricName.includes('signal')) {
264
+ return 'up_good';
265
+ }
266
+ return 'neutral';
267
+ }
268
+ buildReport(session, input, outcome) {
269
+ const lines = [
270
+ `${session.agent_id} validation: ${outcome}`,
271
+ `trigger: ${session.trigger_type}`,
272
+ `version: ${session.agent_version}`,
273
+ ];
274
+ if (input.metrics) {
275
+ for (const [name, value] of Object.entries(input.metrics)) {
276
+ lines.push(` ${name}: ${value}`);
277
+ }
278
+ }
279
+ if (input.error_message) {
280
+ lines.push(`error: ${input.error_message}`);
281
+ }
282
+ return JSON.stringify({
283
+ schema_version: types_js_1.SCHEMA_VERSION,
284
+ headline: `${session.agent_id}: ${outcome}`,
285
+ what_changed: input.metrics ? Object.keys(input.metrics).join(', ') : 'no metrics',
286
+ outcome,
287
+ details: lines.join('\n'),
288
+ });
289
+ }
290
+ updateState(agentId, triggerType, outcome) {
291
+ (0, store_js_1.updateAgentValidationState)(this.db, agentId, triggerType, {
292
+ current_status: outcome,
293
+ last_validation_at: Date.now(),
294
+ });
295
+ }
296
+ }
297
+ exports.ValidationSessionService = ValidationSessionService;
298
+ //# sourceMappingURL=session-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-service.js","sourceRoot":"","sources":["../../src/validation/session-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Validation Session Store
3
+ *
4
+ * SQLite persistence for validation_sessions, validation_metrics,
5
+ * and agent_validation_state. Includes ALTER TABLE migration for
6
+ * agent_activity (run_id, execution_status, trigger_reason).
7
+ */
8
+ import type { SQLiteDatabase } from '../sqlite.js';
9
+ import { type CreateValidationSessionInput, type ValidationSessionRow, type SaveValidationMetricInput, type AgentValidationStateRow, type UpdateValidationStateInput, type ValidationSessionDetail, type ValidationTriggerType } from './types.js';
10
+ export declare function initValidationTables(db: SQLiteDatabase): void;
11
+ export declare function createValidationSession(db: SQLiteDatabase, input: CreateValidationSessionInput): ValidationSessionRow;
12
+ export declare function updateValidationSession(db: SQLiteDatabase, id: string, updates: Partial<Pick<CreateValidationSessionInput, 'execution_status' | 'validation_outcome' | 'summary' | 'recommendation' | 'after_snapshot_json' | 'report_json' | 'ended_at'>>): void;
13
+ export declare function saveValidationMetric(db: SQLiteDatabase, input: SaveValidationMetricInput): void;
14
+ export declare function getValidationSummary(db: SQLiteDatabase, agentId: string, triggerType?: ValidationTriggerType): ValidationSessionRow | null;
15
+ export declare function listValidationHistory(db: SQLiteDatabase, agentId: string, limit?: number, triggerType?: ValidationTriggerType): ValidationSessionRow[];
16
+ export declare function getValidationSessionDetail(db: SQLiteDatabase, sessionId: string): ValidationSessionDetail | null;
17
+ export declare function approveValidationSession(db: SQLiteDatabase, sessionId: string): void;
18
+ export declare function getAgentValidationState(db: SQLiteDatabase, agentId: string, triggerType: string): AgentValidationStateRow | null;
19
+ export declare function updateAgentValidationState(db: SQLiteDatabase, agentId: string, triggerType: string, input: UpdateValidationStateInput): void;
20
+ export declare function listStaleSessions(db: SQLiteDatabase, maxAgeMs: number): ValidationSessionRow[];
21
+ export declare function findBaseline(db: SQLiteDatabase, agentId: string, triggerType: string): {
22
+ version: number;
23
+ sessionId: string;
24
+ } | null;
25
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/validation/store.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAGnD,OAAO,EAGL,KAAK,4BAA4B,EACjC,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAE9B,KAAK,uBAAuB,EAC5B,KAAK,0BAA0B,EAC/B,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC3B,MAAM,YAAY,CAAC;AAIpB,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI,CAG7D;AAUD,wBAAgB,uBAAuB,CACrC,EAAE,EAAE,cAAc,EAClB,KAAK,EAAE,4BAA4B,GAClC,oBAAoB,CAgCtB;AAED,wBAAgB,uBAAuB,CACrC,EAAE,EAAE,cAAc,EAClB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,OAAO,CACd,IAAI,CACF,4BAA4B,EAC1B,kBAAkB,GAClB,oBAAoB,GACpB,SAAS,GACT,gBAAgB,GAChB,qBAAqB,GACrB,aAAa,GACb,UAAU,CACb,CACF,GACA,IAAI,CAoCN;AAID,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,yBAAyB,GAAG,IAAI,CAc/F;AAID,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,cAAc,EAClB,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,qBAAqB,GAClC,oBAAoB,GAAG,IAAI,CAuB7B;AAID,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,cAAc,EAClB,OAAO,EAAE,MAAM,EACf,KAAK,SAAK,EACV,WAAW,CAAC,EAAE,qBAAqB,GAClC,oBAAoB,EAAE,CAmBxB;AAID,wBAAgB,0BAA0B,CACxC,EAAE,EAAE,cAAc,EAClB,SAAS,EAAE,MAAM,GAChB,uBAAuB,GAAG,IAAI,CAYhC;AAID,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAepF;AAID,wBAAgB,uBAAuB,CACrC,EAAE,EAAE,cAAc,EAClB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAClB,uBAAuB,GAAG,IAAI,CAMhC;AAED,wBAAgB,0BAA0B,CACxC,EAAE,EAAE,cAAc,EAClB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,0BAA0B,GAChC,IAAI,CAqBN;AAID,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,oBAAoB,EAAE,CAS9F;AAID,wBAAgB,YAAY,CAC1B,EAAE,EAAE,cAAc,EAClB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAClB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAiC/C"}
@@ -0,0 +1,200 @@
1
+ "use strict";
2
+ /**
3
+ * Validation Session Store
4
+ *
5
+ * SQLite persistence for validation_sessions, validation_metrics,
6
+ * and agent_validation_state. Includes ALTER TABLE migration for
7
+ * agent_activity (run_id, execution_status, trigger_reason).
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.initValidationTables = initValidationTables;
11
+ exports.createValidationSession = createValidationSession;
12
+ exports.updateValidationSession = updateValidationSession;
13
+ exports.saveValidationMetric = saveValidationMetric;
14
+ exports.getValidationSummary = getValidationSummary;
15
+ exports.listValidationHistory = listValidationHistory;
16
+ exports.getValidationSessionDetail = getValidationSessionDetail;
17
+ exports.approveValidationSession = approveValidationSession;
18
+ exports.getAgentValidationState = getAgentValidationState;
19
+ exports.updateAgentValidationState = updateAgentValidationState;
20
+ exports.listStaleSessions = listStaleSessions;
21
+ exports.findBaseline = findBaseline;
22
+ const validation_session_tables_js_1 = require("../db/migrations/validation-session-tables.js");
23
+ const agent_activity_validation_columns_js_1 = require("../db/migrations/agent-activity-validation-columns.js");
24
+ const types_js_1 = require("./types.js");
25
+ // ── Table Init ──────────────────────────────────────────────────────────────
26
+ function initValidationTables(db) {
27
+ (0, validation_session_tables_js_1.applyValidationSessionTablesMigration)(db);
28
+ migrateAgentActivity(db);
29
+ }
30
+ // ── agent_activity Migration ────────────────────────────────────────────────
31
+ function migrateAgentActivity(db) {
32
+ (0, agent_activity_validation_columns_js_1.applyAgentActivityValidationColumnsMigration)(db);
33
+ }
34
+ // ── Validation Session CRUD ─────────────────────────────────────────────────
35
+ function createValidationSession(db, input) {
36
+ db.prepare(`INSERT INTO validation_sessions
37
+ (id, agent_id, agent_version, trigger_type, goal, metric_profile_json,
38
+ baseline_version, baseline_session_id, execution_status, validation_outcome,
39
+ summary, recommendation, before_snapshot_json, after_snapshot_json,
40
+ report_json, schema_version, requires_approval, started_at, ended_at)
41
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(input.id, input.agent_id, input.agent_version, input.trigger_type, input.goal ?? null, input.metric_profile_json, input.baseline_version ?? null, input.baseline_session_id ?? null, input.execution_status, input.validation_outcome, input.summary ?? null, input.recommendation ?? null, (0, types_js_1.guardJsonSize)(input.before_snapshot_json), (0, types_js_1.guardJsonSize)(input.after_snapshot_json), (0, types_js_1.guardJsonSize)(input.report_json), input.schema_version ?? types_js_1.SCHEMA_VERSION, input.requires_approval ?? 0, input.started_at, input.ended_at ?? null);
42
+ return db
43
+ .prepare('SELECT * FROM validation_sessions WHERE id = ?')
44
+ .get(input.id);
45
+ }
46
+ function updateValidationSession(db, id, updates) {
47
+ const setClauses = [];
48
+ const values = [];
49
+ if (updates.execution_status !== undefined) {
50
+ setClauses.push('execution_status = ?');
51
+ values.push(updates.execution_status);
52
+ }
53
+ if (updates.validation_outcome !== undefined) {
54
+ setClauses.push('validation_outcome = ?');
55
+ values.push(updates.validation_outcome);
56
+ }
57
+ if (updates.summary !== undefined) {
58
+ setClauses.push('summary = ?');
59
+ values.push(updates.summary);
60
+ }
61
+ if (updates.recommendation !== undefined) {
62
+ setClauses.push('recommendation = ?');
63
+ values.push(updates.recommendation);
64
+ }
65
+ if (updates.after_snapshot_json !== undefined) {
66
+ setClauses.push('after_snapshot_json = ?');
67
+ values.push((0, types_js_1.guardJsonSize)(updates.after_snapshot_json));
68
+ }
69
+ if (updates.report_json !== undefined) {
70
+ setClauses.push('report_json = ?');
71
+ values.push((0, types_js_1.guardJsonSize)(updates.report_json));
72
+ }
73
+ if (updates.ended_at !== undefined) {
74
+ setClauses.push('ended_at = ?');
75
+ values.push(updates.ended_at);
76
+ }
77
+ if (setClauses.length === 0)
78
+ return;
79
+ values.push(id);
80
+ db.prepare(`UPDATE validation_sessions SET ${setClauses.join(', ')} WHERE id = ?`).run(...values);
81
+ }
82
+ // ── Validation Metrics ──────────────────────────────────────────────────────
83
+ function saveValidationMetric(db, input) {
84
+ db.prepare(`INSERT INTO validation_metrics
85
+ (validation_session_id, name, value, baseline_value, delta_value, direction, created_at)
86
+ VALUES (?, ?, ?, ?, ?, ?, ?)`).run(input.validation_session_id, input.name, input.value, input.baseline_value ?? null, input.delta_value ?? null, input.direction, Date.now());
87
+ }
88
+ // ── Query: Summary ──────────────────────────────────────────────────────────
89
+ function getValidationSummary(db, agentId, triggerType) {
90
+ if (triggerType) {
91
+ return (db
92
+ .prepare(`SELECT * FROM validation_sessions
93
+ WHERE agent_id = ? AND trigger_type = ?
94
+ ORDER BY started_at DESC
95
+ LIMIT 1`)
96
+ .get(agentId, triggerType) ?? null);
97
+ }
98
+ return (db
99
+ .prepare(`SELECT * FROM validation_sessions
100
+ WHERE agent_id = ?
101
+ ORDER BY started_at DESC
102
+ LIMIT 1`)
103
+ .get(agentId) ?? null);
104
+ }
105
+ // ── Query: History ──────────────────────────────────────────────────────────
106
+ function listValidationHistory(db, agentId, limit = 50, triggerType) {
107
+ if (triggerType) {
108
+ return db
109
+ .prepare(`SELECT * FROM validation_sessions
110
+ WHERE agent_id = ? AND trigger_type = ?
111
+ ORDER BY started_at DESC
112
+ LIMIT ?`)
113
+ .all(agentId, triggerType, limit);
114
+ }
115
+ return db
116
+ .prepare(`SELECT * FROM validation_sessions
117
+ WHERE agent_id = ?
118
+ ORDER BY started_at DESC
119
+ LIMIT ?`)
120
+ .all(agentId, limit);
121
+ }
122
+ // ── Query: Session Detail ───────────────────────────────────────────────────
123
+ function getValidationSessionDetail(db, sessionId) {
124
+ const session = db.prepare('SELECT * FROM validation_sessions WHERE id = ?').get(sessionId);
125
+ if (!session)
126
+ return null;
127
+ const metrics = db
128
+ .prepare('SELECT * FROM validation_metrics WHERE validation_session_id = ? ORDER BY created_at')
129
+ .all(sessionId);
130
+ return { session, metrics };
131
+ }
132
+ // ── Approval ────────────────────────────────────────────────────────────────
133
+ function approveValidationSession(db, sessionId) {
134
+ const session = db.prepare('SELECT * FROM validation_sessions WHERE id = ?').get(sessionId);
135
+ if (!session) {
136
+ throw new Error(`Validation session not found: ${sessionId}`);
137
+ }
138
+ updateAgentValidationState(db, session.agent_id, session.trigger_type, {
139
+ approved_version: session.agent_version,
140
+ approved_session_id: session.id,
141
+ current_status: session.validation_outcome,
142
+ last_validation_at: Date.now(),
143
+ });
144
+ }
145
+ // ── Agent Validation State ──────────────────────────────────────────────────
146
+ function getAgentValidationState(db, agentId, triggerType) {
147
+ return (db
148
+ .prepare('SELECT * FROM agent_validation_state WHERE agent_id = ? AND trigger_type = ?')
149
+ .get(agentId, triggerType) ?? null);
150
+ }
151
+ function updateAgentValidationState(db, agentId, triggerType, input) {
152
+ const now = Date.now();
153
+ db.prepare(`INSERT INTO agent_validation_state
154
+ (agent_id, trigger_type, approved_version, approved_session_id, current_status, last_validation_at, updated_at)
155
+ VALUES (?, ?, ?, ?, ?, ?, ?)
156
+ ON CONFLICT(agent_id, trigger_type) DO UPDATE SET
157
+ approved_version = COALESCE(excluded.approved_version, approved_version),
158
+ approved_session_id = COALESCE(excluded.approved_session_id, approved_session_id),
159
+ current_status = COALESCE(excluded.current_status, current_status),
160
+ last_validation_at = COALESCE(excluded.last_validation_at, last_validation_at),
161
+ updated_at = excluded.updated_at`).run(agentId, triggerType, input.approved_version ?? null, input.approved_session_id ?? null, input.current_status ?? null, input.last_validation_at ?? null, now);
162
+ }
163
+ // ── Stale Session Cleanup ───────────────────────────────────────────────────
164
+ function listStaleSessions(db, maxAgeMs) {
165
+ const cutoff = Date.now() - maxAgeMs;
166
+ return db
167
+ .prepare(`SELECT * FROM validation_sessions
168
+ WHERE ended_at IS NULL AND started_at < ?
169
+ ORDER BY started_at ASC`)
170
+ .all(cutoff);
171
+ }
172
+ // ── Baseline Lookup ─────────────────────────────────────────────────────────
173
+ function findBaseline(db, agentId, triggerType) {
174
+ // 1. approved session
175
+ const state = getAgentValidationState(db, agentId, triggerType);
176
+ if (state?.approved_session_id && state.approved_version !== null) {
177
+ return { version: state.approved_version, sessionId: state.approved_session_id };
178
+ }
179
+ // 2. last healthy session
180
+ const healthy = db
181
+ .prepare(`SELECT id, agent_version FROM validation_sessions
182
+ WHERE agent_id = ? AND trigger_type = ? AND validation_outcome = 'healthy'
183
+ ORDER BY started_at DESC LIMIT 1`)
184
+ .get(agentId, triggerType);
185
+ if (healthy) {
186
+ return { version: healthy.agent_version, sessionId: healthy.id };
187
+ }
188
+ // 3. last completed session
189
+ const completed = db
190
+ .prepare(`SELECT id, agent_version FROM validation_sessions
191
+ WHERE agent_id = ? AND trigger_type = ? AND execution_status = 'completed'
192
+ ORDER BY started_at DESC LIMIT 1`)
193
+ .get(agentId, triggerType);
194
+ if (completed) {
195
+ return { version: completed.agent_version, sessionId: completed.id };
196
+ }
197
+ // 4. no baseline → inconclusive
198
+ return null;
199
+ }
200
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/validation/store.ts"],"names":[],"mappings":"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"}