@agentdeck/bridge 1.0.6 → 1.0.7

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 (115) hide show
  1. package/assets/fm-helper/agentdeck-fm-helper +0 -0
  2. package/dist/apme/collector.d.ts +10 -0
  3. package/dist/apme/collector.d.ts.map +1 -1
  4. package/dist/apme/collector.js +39 -10
  5. package/dist/apme/collector.js.map +1 -1
  6. package/dist/apme/dashboard-html.d.ts.map +1 -1
  7. package/dist/apme/dashboard-html.js +289 -0
  8. package/dist/apme/dashboard-html.js.map +1 -1
  9. package/dist/apme/graph.d.ts +48 -0
  10. package/dist/apme/graph.d.ts.map +1 -0
  11. package/dist/apme/graph.js +226 -0
  12. package/dist/apme/graph.js.map +1 -0
  13. package/dist/apme/http.d.ts.map +1 -1
  14. package/dist/apme/http.js +52 -0
  15. package/dist/apme/http.js.map +1 -1
  16. package/dist/apme/judge-detect.d.ts.map +1 -1
  17. package/dist/apme/judge-detect.js +26 -2
  18. package/dist/apme/judge-detect.js.map +1 -1
  19. package/dist/apme/store.d.ts +69 -1
  20. package/dist/apme/store.d.ts.map +1 -1
  21. package/dist/apme/store.js +238 -4
  22. package/dist/apme/store.js.map +1 -1
  23. package/dist/apme/types.d.ts +1 -1
  24. package/dist/apme/types.d.ts.map +1 -1
  25. package/dist/apme/types.js.map +1 -1
  26. package/dist/ble-sync-spawn.d.ts +25 -2
  27. package/dist/ble-sync-spawn.d.ts.map +1 -1
  28. package/dist/ble-sync-spawn.js +38 -2
  29. package/dist/ble-sync-spawn.js.map +1 -1
  30. package/dist/ble-sync-status.d.ts +77 -0
  31. package/dist/ble-sync-status.d.ts.map +1 -0
  32. package/dist/ble-sync-status.js +157 -0
  33. package/dist/ble-sync-status.js.map +1 -0
  34. package/dist/bridge-core.d.ts.map +1 -1
  35. package/dist/bridge-core.js +7 -1
  36. package/dist/bridge-core.js.map +1 -1
  37. package/dist/cli.js +0 -0
  38. package/dist/codex-rate-limits-live.d.ts +60 -0
  39. package/dist/codex-rate-limits-live.d.ts.map +1 -0
  40. package/dist/codex-rate-limits-live.js +282 -0
  41. package/dist/codex-rate-limits-live.js.map +1 -0
  42. package/dist/d200h/hid-protocol.d.ts +62 -0
  43. package/dist/d200h/hid-protocol.d.ts.map +1 -0
  44. package/dist/d200h/hid-protocol.js +124 -0
  45. package/dist/d200h/hid-protocol.js.map +1 -0
  46. package/dist/d200h/image-renderer.d.ts +24 -0
  47. package/dist/d200h/image-renderer.d.ts.map +1 -0
  48. package/dist/d200h/image-renderer.js +321 -0
  49. package/dist/d200h/image-renderer.js.map +1 -0
  50. package/dist/daemon-server.d.ts.map +1 -1
  51. package/dist/daemon-server.js +79 -0
  52. package/dist/daemon-server.js.map +1 -1
  53. package/dist/daemon.js +1 -1
  54. package/dist/hook-migration.d.ts +2 -0
  55. package/dist/hook-migration.d.ts.map +1 -0
  56. package/dist/hook-migration.js +116 -0
  57. package/dist/hook-migration.js.map +1 -0
  58. package/dist/idotmatrix/idotmatrix-daemon-sync.d.ts +8 -0
  59. package/dist/idotmatrix/idotmatrix-daemon-sync.d.ts.map +1 -1
  60. package/dist/idotmatrix/idotmatrix-daemon-sync.js +19 -3
  61. package/dist/idotmatrix/idotmatrix-daemon-sync.js.map +1 -1
  62. package/dist/modules/d200h-module.d.ts +65 -0
  63. package/dist/modules/d200h-module.d.ts.map +1 -0
  64. package/dist/modules/d200h-module.js +495 -0
  65. package/dist/modules/d200h-module.js.map +1 -0
  66. package/dist/modules/d200h-renderer.d.ts +7 -0
  67. package/dist/modules/d200h-renderer.d.ts.map +1 -0
  68. package/dist/modules/d200h-renderer.js +321 -0
  69. package/dist/modules/d200h-renderer.js.map +1 -0
  70. package/dist/modules/idotmatrix-module.d.ts.map +1 -1
  71. package/dist/modules/idotmatrix-module.js +12 -1
  72. package/dist/modules/idotmatrix-module.js.map +1 -1
  73. package/dist/modules/timebox-module.d.ts.map +1 -1
  74. package/dist/modules/timebox-module.js +12 -1
  75. package/dist/modules/timebox-module.js.map +1 -1
  76. package/dist/modules/trmnl-module.d.ts +38 -0
  77. package/dist/modules/trmnl-module.d.ts.map +1 -0
  78. package/dist/modules/trmnl-module.js +111 -0
  79. package/dist/modules/trmnl-module.js.map +1 -0
  80. package/dist/timebox/timebox-daemon-sync.d.ts +8 -0
  81. package/dist/timebox/timebox-daemon-sync.d.ts.map +1 -1
  82. package/dist/timebox/timebox-daemon-sync.js +29 -1
  83. package/dist/timebox/timebox-daemon-sync.js.map +1 -1
  84. package/dist/timeline-summarizer.d.ts +12 -2
  85. package/dist/timeline-summarizer.d.ts.map +1 -1
  86. package/dist/timeline-summarizer.js +66 -4
  87. package/dist/timeline-summarizer.js.map +1 -1
  88. package/dist/trmnl/byos-server.d.ts +39 -0
  89. package/dist/trmnl/byos-server.d.ts.map +1 -0
  90. package/dist/trmnl/byos-server.js +301 -0
  91. package/dist/trmnl/byos-server.js.map +1 -0
  92. package/dist/trmnl/frame-cache.d.ts +37 -0
  93. package/dist/trmnl/frame-cache.d.ts.map +1 -0
  94. package/dist/trmnl/frame-cache.js +157 -0
  95. package/dist/trmnl/frame-cache.js.map +1 -0
  96. package/dist/trmnl/image-renderer.d.ts +27 -0
  97. package/dist/trmnl/image-renderer.d.ts.map +1 -0
  98. package/dist/trmnl/image-renderer.js +235 -0
  99. package/dist/trmnl/image-renderer.js.map +1 -0
  100. package/dist/trmnl/trmnl-settings.d.ts +96 -0
  101. package/dist/trmnl/trmnl-settings.d.ts.map +1 -0
  102. package/dist/trmnl/trmnl-settings.js +177 -0
  103. package/dist/trmnl/trmnl-settings.js.map +1 -0
  104. package/dist/trmnl/trmnl-telemetry.d.ts +47 -0
  105. package/dist/trmnl/trmnl-telemetry.d.ts.map +1 -0
  106. package/dist/trmnl/trmnl-telemetry.js +56 -0
  107. package/dist/trmnl/trmnl-telemetry.js.map +1 -0
  108. package/dist/whisper-server-manager.d.ts +19 -0
  109. package/dist/whisper-server-manager.d.ts.map +1 -0
  110. package/dist/whisper-server-manager.js +171 -0
  111. package/dist/whisper-server-manager.js.map +1 -0
  112. package/package.json +13 -14
  113. package/src/idotmatrix/sync.py +16 -1
  114. package/src/pysync/matrix_sync_common.py +83 -0
  115. package/src/timebox/sync_ble.py +16 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/apme/graph.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/apme/http.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAK7C,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE,UAAU,GAAG,IAAI,GACtB,OAAO,CAAC,OAAO,CAAC,CA0MlB;AAyCD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,iBAAiB,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,CAMzG"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/apme/http.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAK7C,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE,UAAU,GAAG,IAAI,GACtB,OAAO,CAAC,OAAO,CAAC,CAgQlB;AAyCD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,iBAAiB,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,CAMzG"}
package/dist/apme/http.js CHANGED
@@ -95,6 +95,50 @@ export async function handleApmeRequest(req, res, apme) {
95
95
  });
96
96
  return true;
97
97
  }
98
+ // ── Tasks: the accumulating browse surface ──────────────────────────────
99
+ // Tasks are the canonical evaluation unit, but until this route the only
100
+ // way to reach one was to drill into its run — so there was no way to see
101
+ // "every work unit processed" at all. Paged + filtered + faceted so the
102
+ // list stays usable as the store grows past thousands of units.
103
+ if (method === 'GET' && path === '/apme/tasks') {
104
+ const limit = clampInt(url.searchParams.get('limit'), 1, 500, 50);
105
+ const offset = clampInt(url.searchParams.get('offset'), 0, 1_000_000, 0);
106
+ const stateParam = url.searchParams.get('state');
107
+ const { total, tasks } = apme.store.listTaskPage({
108
+ limit, offset,
109
+ ...(url.searchParams.get('agent') ? { agentType: url.searchParams.get('agent') } : {}),
110
+ ...(url.searchParams.get('project') ? { projectName: url.searchParams.get('project') } : {}),
111
+ ...(url.searchParams.get('category') ? { category: url.searchParams.get('category') } : {}),
112
+ ...(url.searchParams.get('outcome') ? { outcome: url.searchParams.get('outcome') } : {}),
113
+ ...(stateParam === 'closed' || stateParam === 'open' ? { state: stateParam } : {}),
114
+ ...(url.searchParams.get('q') ? { q: url.searchParams.get('q') } : {}),
115
+ });
116
+ sendJson(res, 200, {
117
+ schema: EVAL_SCHEMA_VERSION,
118
+ total, limit, offset, tasks,
119
+ facets: apme.store.taskFacets(),
120
+ });
121
+ return true;
122
+ }
123
+ // ── Graph projection ────────────────────────────────────────────────────
124
+ // The row store viewed as a property graph: the run→task→turn containment
125
+ // spine plus the derived session/project/model/agent/tool/file hubs that
126
+ // connect work units sharing no ancestor. See shared/src/apme-graph.ts for
127
+ // what the schema does and does not already express.
128
+ if (method === 'GET' && path === '/apme/graph') {
129
+ const { buildApmeGraph } = await import('./graph.js');
130
+ const slice = buildApmeGraph(apme.store, {
131
+ limit: clampInt(url.searchParams.get('limit'), 1, 400, 60),
132
+ minHubDegree: clampInt(url.searchParams.get('minHubDegree'), 1, 50, 2),
133
+ includeTurns: url.searchParams.get('turns') !== '0',
134
+ includeFiles: url.searchParams.get('files') !== '0',
135
+ ...(url.searchParams.get('agent') ? { agentType: url.searchParams.get('agent') } : {}),
136
+ ...(url.searchParams.get('project') ? { projectName: url.searchParams.get('project') } : {}),
137
+ ...(url.searchParams.get('category') ? { category: url.searchParams.get('category') } : {}),
138
+ });
139
+ sendJson(res, 200, { schema: EVAL_SCHEMA_VERSION, ...slice });
140
+ return true;
141
+ }
98
142
  if (method === 'GET' && path.startsWith('/apme/tasks/')) {
99
143
  const taskId = path.slice('/apme/tasks/'.length);
100
144
  const task = apme.store.getTask(taskId);
@@ -104,11 +148,19 @@ export async function handleApmeRequest(req, res, apme) {
104
148
  }
105
149
  const taskEvals = apme.store.listEvalsForTask(taskId);
106
150
  const turns = apme.store.listTurnsForTask(taskId);
151
+ const run = apme.store.getRun(task.runId);
107
152
  sendJson(res, 200, {
108
153
  schema: EVAL_SCHEMA_VERSION,
109
154
  task,
155
+ // Run context: the task row alone names no agent, model or project, so
156
+ // a task reached directly (not by drilling into a run) had no way to
157
+ // say whose work it was.
158
+ run,
110
159
  evals: taskEvals,
111
160
  turns,
161
+ // The canonical SessionSample — the typed trajectory the detail pane
162
+ // replays. Without it a task page can show scores but not the work.
163
+ sample: apme.store.getSample(taskId),
112
164
  overallScore: aggregateOverall(taskEvals),
113
165
  });
114
166
  return true;
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/apme/http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/apme/http.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"judge-detect.d.ts","sourceRoot":"","sources":["../../src/apme/judge-detect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,oEAAoE;IACpE,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AA2CD;;;;GAIG;AACH,wBAAsB,yBAAyB,CAAC,SAAS,SAAO,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAgB7F"}
1
+ {"version":3,"file":"judge-detect.d.ts","sourceRoot":"","sources":["../../src/apme/judge-detect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,oEAAoE;IACpE,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAmED;;;;GAIG;AACH,wBAAsB,yBAAyB,CAAC,SAAS,SAAO,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAgB7F"}
@@ -15,6 +15,23 @@ const CANDIDATES = [
15
15
  { provider: 'mlx', label: 'Local MLX server', base: 'http://127.0.0.1:8080', endpoint: 'http://127.0.0.1:8080/v1' },
16
16
  ];
17
17
  const NANO = 'nanollava';
18
+ /**
19
+ * True when an Ollama catalog entry can actually answer a chat completion.
20
+ *
21
+ * Ollama advertises `capabilities` per model (`["completion","tools",…]` for
22
+ * chat models, `["embedding"]` for embedders like `bge-m3`). Offering an
23
+ * embedding-only model as a judge candidate is a trap: the picker looks fine
24
+ * and the first real judge call fails with a 400 from the server.
25
+ *
26
+ * Absence of the field is "no information", NOT "unusable" — older Ollama
27
+ * builds omit `capabilities` entirely, and dropping those would empty the
28
+ * catalog on exactly the servers we can least afford to mis-report.
29
+ */
30
+ function ollamaChatCapable(m) {
31
+ if (!Array.isArray(m.capabilities))
32
+ return true;
33
+ return m.capabilities.some((c) => typeof c === 'string' && c.toLowerCase() === 'completion');
34
+ }
18
35
  async function modelsFor(c, timeoutMs) {
19
36
  // Ollama's canonical list is /api/tags; every OpenAI-compatible server
20
37
  // (LM Studio, MLX, vLLM, Ollama's compat shim) exposes /v1/models.
@@ -23,8 +40,15 @@ async function modelsFor(c, timeoutMs) {
23
40
  const r = await fetch(`${c.base}/api/tags`, { signal: AbortSignal.timeout(timeoutMs) }).catch(() => null);
24
41
  if (r?.ok) {
25
42
  const j = await r.json();
26
- const names = (j.models ?? []).map((m) => m.name).filter((n) => !!n);
27
- if (names.length)
43
+ const catalog = j.models ?? [];
44
+ const names = catalog
45
+ .filter(ollamaChatCapable)
46
+ .map((m) => m.name)
47
+ .filter((n) => !!n);
48
+ // Once /api/tags answered, its verdict is final: falling through to
49
+ // /v1/models would re-add the embedding-only models we just filtered
50
+ // out, since the OpenAI-compatible shim reports no capabilities.
51
+ if (catalog.length)
28
52
  return names;
29
53
  }
30
54
  }
@@ -1 +1 @@
1
- {"version":3,"file":"judge-detect.js","sourceRoot":"","sources":["../../src/apme/judge-detect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAoBH,MAAM,UAAU,GAAgB;IAC9B,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,wBAAwB,EAAE,QAAQ,EAAE,2BAA2B,EAAE,IAAI,EAAE,IAAI,EAAE;IAC1H,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,uBAAuB,EAAE,QAAQ,EAAE,0BAA0B,EAAE;IACjH,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,uBAAuB,EAAE,QAAQ,EAAE,0BAA0B,EAAE;IACnH,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,uBAAuB,EAAE,QAAQ,EAAE,0BAA0B,EAAE;CACpH,CAAC;AAEF,MAAM,IAAI,GAAG,WAAW,CAAC;AAEzB,KAAK,UAAU,SAAS,CAAC,CAAY,EAAE,SAAiB;IACtD,uEAAuE;IACvE,mEAAmE;IACnE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QACX,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,WAAW,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YAC1G,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC;gBACV,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,EAA2C,CAAC;gBAClE,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClF,IAAI,KAAK,CAAC,MAAM;oBAAE,OAAO,KAAK,CAAC;YACjC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,gCAAgC,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,YAAY,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAC3G,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC;YACV,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,EAAuC,CAAC;YAC9D,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YACnH,OAAO,GAAG,CAAC,CAAC,8CAA8C;QAC5D,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAC7B,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,SAAS,GAAG,IAAI;IAC9D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QAC3D,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAChD,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAsB,CAAC;IACzH,CAAC,CAAC,CAAC,CAAC;IACJ,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,GAAG,GAAuB,EAAE,CAAC;IACnC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC;YAAE,SAAS;QACjB,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC1C,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACd,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"judge-detect.js","sourceRoot":"","sources":["../../src/apme/judge-detect.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@
5
5
  * build tooling), we fall back to a no-op store so the bridge still boots.
6
6
  * Callers should check `store.enabled` before assuming persistence.
7
7
  */
8
- import type { ApmeRunRow, ApmeStepRow, ApmeArtifactRow, ApmeEvalRowDb, ApmeRubricRow, ApmeVibeRow, ApmeScorecardRow, ApmeTaskRow } from './types.js';
8
+ import type { ApmeRunRow, ApmeStepRow, ApmeArtifactRow, ApmeEvalRowDb, ApmeRubricRow, ApmeVibeRow, ApmeScorecardRow, ApmeTaskRow, ApmeTaskListRow } from './types.js';
9
9
  import type { ApmeSampleEventRow, ApmeSampleScorecardRow, SessionSample, TrajectoryEvent } from '@agentdeck/shared';
10
10
  export declare class ApmeStore {
11
11
  private db;
@@ -58,6 +58,39 @@ export declare class ApmeStore {
58
58
  limit?: number;
59
59
  closedOnly?: boolean;
60
60
  }): ApmeTaskRow[];
61
+ /** One page of task units with the run context needed to read them without a
62
+ * second query — the browse surface for "every work unit we have processed".
63
+ *
64
+ * `listAllTasks` returns bare task rows, which is why the dashboard could
65
+ * only reach a task by drilling into its run: the row alone carries no agent,
66
+ * model, project or prompt. Tasks are the canonical evaluation unit, so they
67
+ * need a first-class list of their own.
68
+ *
69
+ * `total` is the unpaged count for the same filters, so a caller can page
70
+ * without guessing when it has reached the end. */
71
+ listTaskPage(opts?: {
72
+ limit?: number;
73
+ offset?: number;
74
+ agentType?: string;
75
+ projectName?: string;
76
+ category?: string;
77
+ outcome?: string;
78
+ /** 'closed' — boundary hit; 'open' — still accumulating; default both. */
79
+ state?: 'closed' | 'open';
80
+ /** Substring match over the task summary and its run's first prompt. */
81
+ q?: string;
82
+ }): {
83
+ total: number;
84
+ tasks: ApmeTaskListRow[];
85
+ };
86
+ /** Distinct values behind the task list's filters, so the UI offers what the
87
+ * data actually contains rather than a hardcoded menu. */
88
+ taskFacets(): {
89
+ agents: string[];
90
+ projects: string[];
91
+ categories: string[];
92
+ outcomes: string[];
93
+ };
61
94
  listTurnsForTask(taskId: string): Array<Record<string, unknown>>;
62
95
  /** Ended tasks (boundary hit) that haven't been judged yet — backfill candidates. */
63
96
  listTasksNeedingSummary(limit?: number): Array<{
@@ -98,6 +131,41 @@ export declare class ApmeStore {
98
131
  id: string;
99
132
  runId: string;
100
133
  }>;
134
+ /** Abandoned runs: real work that was never closed. The daemon restarted (or
135
+ * crashed) mid-session, so the in-memory session→run map `closeRun` depends
136
+ * on is gone and nothing will ever finalize these rows.
137
+ *
138
+ * Distinct from `listOrphanedRuns`, which by design only matches empty
139
+ * shells (`task_prompt IS NULL` + no turns) and so steps right over the case
140
+ * that actually costs data: a run carrying prompts, turns and a whole tool
141
+ * trajectory stays open forever, its task never closes, and a task that
142
+ * never closes is never evaluated.
143
+ *
144
+ * Staleness is measured from the LAST recorded activity, never
145
+ * `started_at` — a live multi-hour session must not be reaped out from
146
+ * under the process that owns it (session bridges share this sqlite file
147
+ * and the daemon cannot see their in-memory state). Callers additionally
148
+ * skip runs their own collector still holds open.
149
+ * `lastActivity` is returned so the caller can close the rows AT the last
150
+ * activity instead of `now`, keeping durations honest. */
151
+ listAbandonedRuns(staleSec?: number, limit?: number): Array<{
152
+ id: string;
153
+ projectPath: string | null;
154
+ lastActivity: number;
155
+ }>;
156
+ /** Finalize an abandoned run: close its dangling turns, close its tasks with
157
+ * `boundary_signal='orphaned'`, then close the run itself — all stamped at
158
+ * `endedAt` (the run's last activity), not `now`, so a run abandoned last
159
+ * night doesn't report a 12-hour turn.
160
+ *
161
+ * Tasks are backfilled with their real first/last turn index when the
162
+ * in-memory close never ran, since the task rollup reads those columns.
163
+ * Returns the closed task ids so the caller can enqueue task-level evals —
164
+ * the whole point of closing them. */
165
+ reapAbandonedRun(runId: string, endedAt: number): Array<{
166
+ id: string;
167
+ category: string | null;
168
+ }>;
101
169
  /** Orphaned runs: started long ago, never closed, no turns.
102
170
  * Typically from session bridges that crashed without cleanup. */
103
171
  listOrphanedRuns(staleSec?: number): string[];
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/apme/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/apme/store.ts"],"names":[],"mappings":"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"}
@@ -543,8 +543,68 @@ export class ApmeStore {
543
543
  catch { /* ignore */ }
544
544
  }
545
545
  }
546
- // sample_events table + indexes are created via CREATE TABLE IF NOT EXISTS
547
- // in DDL; nothing to ALTER. The v_sample_scorecard view likewise.
546
+ // ── Graph-integrity columns ──
547
+ // The row model is a clean hierarchy (run → task → turn → event) EXCEPT for
548
+ // two severed edges, both of which a graph projection would have to guess at:
549
+ //
550
+ // 1. sample_events pointed at a turn by `turn_index`, an integer that is
551
+ // only unique within a run — so the trajectory could not be walked back
552
+ // to its turn without a compound join, and a task spanning turns had no
553
+ // first-class event→turn edge at all.
554
+ // 2. `/clear` splits a session into a fresh run (`splitRun`) with no
555
+ // pointer to the run it continues, so one conversation shows up as N
556
+ // disconnected components. One live session here had 127 such runs.
557
+ const sevCols = this.db.prepare("PRAGMA table_info(sample_events)").all().map(c => c.name);
558
+ if (!sevCols.includes('turn_id')) {
559
+ try {
560
+ this.db.exec('ALTER TABLE sample_events ADD COLUMN turn_id TEXT');
561
+ }
562
+ catch { /* ignore */ }
563
+ try {
564
+ this.db.exec('CREATE INDEX IF NOT EXISTS idx_sevents_turn ON sample_events(turn_id)');
565
+ }
566
+ catch { /* ignore */ }
567
+ // Backfill from the compound key the column replaces. One-shot: the
568
+ // column only appears once, so this never re-scans on later boots.
569
+ try {
570
+ this.db.exec(`UPDATE sample_events SET turn_id = (
571
+ SELECT t.id FROM turns t
572
+ WHERE t.run_id = sample_events.run_id AND t.turn_index = sample_events.turn_index
573
+ ) WHERE turn_id IS NULL AND turn_index IS NOT NULL`);
574
+ }
575
+ catch { /* best-effort backfill */ }
576
+ }
577
+ if (!cols.includes('parent_run_id')) {
578
+ try {
579
+ this.db.exec('ALTER TABLE runs ADD COLUMN parent_run_id TEXT');
580
+ }
581
+ catch { /* ignore */ }
582
+ try {
583
+ this.db.exec('CREATE INDEX IF NOT EXISTS idx_runs_parent ON runs(parent_run_id)');
584
+ }
585
+ catch { /* ignore */ }
586
+ }
587
+ // ── Covering indexes for the per-run/per-task rollups ──
588
+ // better-sqlite3 is synchronous on a single connection, so ANY slow query
589
+ // here stalls the daemon's whole HTTP path — this is a latency budget, not
590
+ // a nice-to-have. `MAX(ts)` over a run's steps was reading full rows to
591
+ // reach one integer, and `steps.payload` holds entire hook bodies, so the
592
+ // abandoned-run sweep was touching hundreds of megabytes and taking 22s.
593
+ // (run_id, ts) answers it from the index alone.
594
+ for (const sql of [
595
+ 'CREATE INDEX IF NOT EXISTS idx_steps_run_ts ON steps(run_id, ts)',
596
+ 'CREATE INDEX IF NOT EXISTS idx_sevents_run_ts ON sample_events(run_id, ts)',
597
+ 'CREATE INDEX IF NOT EXISTS idx_turns_run_started ON turns(run_id, started_at)',
598
+ // evals had an index on run_id only, while the task rollup and the task
599
+ // list both look up by task_id.
600
+ 'CREATE INDEX IF NOT EXISTS idx_evals_task ON evals(task_id)',
601
+ 'CREATE INDEX IF NOT EXISTS idx_tasks_started ON tasks(started_at)',
602
+ ]) {
603
+ try {
604
+ this.db.exec(sql);
605
+ }
606
+ catch { /* ignore */ }
607
+ }
548
608
  }
549
609
  seedDefaultRubric() {
550
610
  if (!this.db)
@@ -595,6 +655,7 @@ export class ApmeStore {
595
655
  exitCode: 'exit_code',
596
656
  gitBefore: 'git_before',
597
657
  gitAfter: 'git_after',
658
+ parentRunId: 'parent_run_id',
598
659
  hwProfile: 'hw_profile',
599
660
  taskSignals: 'task_signals',
600
661
  taskCategory: 'task_category',
@@ -756,6 +817,82 @@ export class ApmeStore {
756
817
  const rows = this.db.prepare(sql).all(limit);
757
818
  return rows.map(rowToTask);
758
819
  }
820
+ /** One page of task units with the run context needed to read them without a
821
+ * second query — the browse surface for "every work unit we have processed".
822
+ *
823
+ * `listAllTasks` returns bare task rows, which is why the dashboard could
824
+ * only reach a task by drilling into its run: the row alone carries no agent,
825
+ * model, project or prompt. Tasks are the canonical evaluation unit, so they
826
+ * need a first-class list of their own.
827
+ *
828
+ * `total` is the unpaged count for the same filters, so a caller can page
829
+ * without guessing when it has reached the end. */
830
+ listTaskPage(opts = {}) {
831
+ if (!this.db)
832
+ return { total: 0, tasks: [] };
833
+ const limit = Math.min(Math.max(opts.limit ?? 50, 1), 500);
834
+ const offset = Math.max(opts.offset ?? 0, 0);
835
+ const where = [];
836
+ const args = [];
837
+ // `_empty` runs are bookkeeping shells, never work the user did.
838
+ where.push("COALESCE(r.task_category, '') != '_empty'");
839
+ if (opts.agentType) {
840
+ where.push('r.agent_type = ?');
841
+ args.push(opts.agentType);
842
+ }
843
+ if (opts.projectName) {
844
+ where.push('r.project_name = ?');
845
+ args.push(opts.projectName);
846
+ }
847
+ if (opts.category) {
848
+ where.push('COALESCE(t.task_category, r.task_category) = ?');
849
+ args.push(opts.category);
850
+ }
851
+ if (opts.outcome) {
852
+ where.push('t.outcome = ?');
853
+ args.push(opts.outcome);
854
+ }
855
+ if (opts.state === 'closed')
856
+ where.push('t.ended_at IS NOT NULL');
857
+ if (opts.state === 'open')
858
+ where.push('t.ended_at IS NULL');
859
+ if (opts.q) {
860
+ where.push('(t.summary LIKE ? OR r.task_prompt LIKE ?)');
861
+ const like = `%${opts.q}%`;
862
+ args.push(like, like);
863
+ }
864
+ const whereSql = `WHERE ${where.join(' AND ')}`;
865
+ const total = this.db.prepare(`SELECT COUNT(*) AS n FROM tasks t JOIN runs r ON r.id = t.run_id ${whereSql}`).get(...args).n;
866
+ const rows = this.db.prepare(`SELECT t.*,
867
+ r.session_id, r.agent_type, r.model_id AS run_model_id, r.project_name,
868
+ r.project_path, r.task_prompt AS run_prompt, r.parent_run_id,
869
+ (SELECT COUNT(*) FROM turns tu WHERE tu.task_id = t.id) AS turn_count,
870
+ (SELECT COUNT(*) FROM turns tu WHERE tu.task_id = t.id AND tu.response IS NOT NULL) AS answered_turns,
871
+ (SELECT COUNT(*) FROM sample_events se WHERE se.task_id = t.id) AS event_count,
872
+ (SELECT COUNT(*) FROM sample_events se WHERE se.task_id = t.id AND se.kind = 'tool') AS tool_count,
873
+ (SELECT tu.prompt FROM turns tu WHERE tu.task_id = t.id ORDER BY tu.turn_index ASC LIMIT 1) AS first_prompt,
874
+ (SELECT e.score FROM evals e WHERE e.task_id = t.id AND e.metric = 'overall' ORDER BY e.created_at DESC LIMIT 1) AS overall_score,
875
+ (SELECT COUNT(*) FROM evals e WHERE e.task_id = t.id) AS eval_count
876
+ FROM tasks t JOIN runs r ON r.id = t.run_id
877
+ ${whereSql}
878
+ ORDER BY t.started_at DESC
879
+ LIMIT ? OFFSET ?`).all(...args, limit, offset);
880
+ return { total, tasks: rows.map(rowToTaskListRow) };
881
+ }
882
+ /** Distinct values behind the task list's filters, so the UI offers what the
883
+ * data actually contains rather than a hardcoded menu. */
884
+ taskFacets() {
885
+ if (!this.db)
886
+ return { agents: [], projects: [], categories: [], outcomes: [] };
887
+ const col = (sql) => this.db.prepare(sql).all()
888
+ .map((r) => r.v).filter((v) => typeof v === 'string' && v.length > 0);
889
+ return {
890
+ agents: col('SELECT DISTINCT agent_type AS v FROM runs ORDER BY v'),
891
+ projects: col('SELECT DISTINCT project_name AS v FROM runs ORDER BY v'),
892
+ categories: col("SELECT DISTINCT COALESCE(task_category,'') AS v FROM tasks WHERE v != '' ORDER BY v"),
893
+ outcomes: col("SELECT DISTINCT COALESCE(outcome,'') AS v FROM tasks WHERE v != '' ORDER BY v"),
894
+ };
895
+ }
759
896
  listTurnsForTask(taskId) {
760
897
  if (!this.db)
761
898
  return [];
@@ -934,6 +1071,80 @@ export class ApmeStore {
934
1071
  LIMIT ?`).all(limit);
935
1072
  return rows.map((r) => ({ id: r.id, runId: r.run_id }));
936
1073
  }
1074
+ /** Abandoned runs: real work that was never closed. The daemon restarted (or
1075
+ * crashed) mid-session, so the in-memory session→run map `closeRun` depends
1076
+ * on is gone and nothing will ever finalize these rows.
1077
+ *
1078
+ * Distinct from `listOrphanedRuns`, which by design only matches empty
1079
+ * shells (`task_prompt IS NULL` + no turns) and so steps right over the case
1080
+ * that actually costs data: a run carrying prompts, turns and a whole tool
1081
+ * trajectory stays open forever, its task never closes, and a task that
1082
+ * never closes is never evaluated.
1083
+ *
1084
+ * Staleness is measured from the LAST recorded activity, never
1085
+ * `started_at` — a live multi-hour session must not be reaped out from
1086
+ * under the process that owns it (session bridges share this sqlite file
1087
+ * and the daemon cannot see their in-memory state). Callers additionally
1088
+ * skip runs their own collector still holds open.
1089
+ * `lastActivity` is returned so the caller can close the rows AT the last
1090
+ * activity instead of `now`, keeping durations honest. */
1091
+ listAbandonedRuns(staleSec = 7200, limit = 20) {
1092
+ if (!this.db)
1093
+ return [];
1094
+ const cutoff = Date.now() - staleSec * 1000;
1095
+ const rows = this.db.prepare(`SELECT id, project_path, last_activity FROM (
1096
+ SELECT r.id AS id, r.project_path AS project_path,
1097
+ MAX(
1098
+ r.started_at,
1099
+ COALESCE((SELECT MAX(MAX(t.started_at, COALESCE(t.ended_at, 0))) FROM turns t WHERE t.run_id = r.id), 0),
1100
+ COALESCE((SELECT MAX(s.ts) FROM steps s WHERE s.run_id = r.id), 0),
1101
+ COALESCE((SELECT MAX(se.ts) FROM sample_events se WHERE se.run_id = r.id), 0)
1102
+ ) AS last_activity
1103
+ FROM runs r
1104
+ WHERE r.ended_at IS NULL
1105
+ -- Sound pre-filter, not an approximation: last_activity is a MAX that
1106
+ -- includes started_at, so last_activity < cutoff implies
1107
+ -- started_at < cutoff. Checking it first lets idx_runs_started skip
1108
+ -- every recent run before the correlated MAXes are evaluated.
1109
+ AND r.started_at < ?
1110
+ AND EXISTS (SELECT 1 FROM turns t WHERE t.run_id = r.id)
1111
+ )
1112
+ WHERE last_activity < ?
1113
+ ORDER BY last_activity ASC
1114
+ LIMIT ?`).all(cutoff, cutoff, limit);
1115
+ return rows.map((r) => ({ id: r.id, projectPath: r.project_path, lastActivity: r.last_activity }));
1116
+ }
1117
+ /** Finalize an abandoned run: close its dangling turns, close its tasks with
1118
+ * `boundary_signal='orphaned'`, then close the run itself — all stamped at
1119
+ * `endedAt` (the run's last activity), not `now`, so a run abandoned last
1120
+ * night doesn't report a 12-hour turn.
1121
+ *
1122
+ * Tasks are backfilled with their real first/last turn index when the
1123
+ * in-memory close never ran, since the task rollup reads those columns.
1124
+ * Returns the closed task ids so the caller can enqueue task-level evals —
1125
+ * the whole point of closing them. */
1126
+ reapAbandonedRun(runId, endedAt) {
1127
+ if (!this.db)
1128
+ return [];
1129
+ const bounds = this.db.prepare('SELECT MIN(turn_index) AS lo, MAX(turn_index) AS hi FROM turns WHERE run_id = ?').get(runId);
1130
+ const tasks = this.db.prepare('SELECT id, task_category FROM tasks WHERE run_id = ? AND ended_at IS NULL').all(runId);
1131
+ const tx = this.db.transaction(() => {
1132
+ this.db.prepare('UPDATE turns SET ended_at = ? WHERE run_id = ? AND ended_at IS NULL').run(endedAt, runId);
1133
+ this.db.prepare(`UPDATE tasks SET ended_at = ?, boundary_signal = 'orphaned',
1134
+ first_turn_index = COALESCE(first_turn_index, ?),
1135
+ last_turn_index = COALESCE(last_turn_index, ?)
1136
+ WHERE run_id = ? AND ended_at IS NULL`).run(endedAt, bounds?.lo ?? null, bounds?.hi ?? null, runId);
1137
+ this.db.prepare('UPDATE runs SET ended_at = ? WHERE id = ? AND ended_at IS NULL').run(endedAt, runId);
1138
+ });
1139
+ try {
1140
+ tx();
1141
+ }
1142
+ catch (err) {
1143
+ debug('APME', `reapAbandonedRun ${runId.slice(0, 8)} failed: ${String(err)}`);
1144
+ return [];
1145
+ }
1146
+ return tasks.map((t) => ({ id: t.id, category: t.task_category }));
1147
+ }
937
1148
  /** Orphaned runs: started long ago, never closed, no turns.
938
1149
  * Typically from session bridges that crashed without cleanup. */
939
1150
  listOrphanedRuns(staleSec = 1800) {
@@ -956,9 +1167,9 @@ export class ApmeStore {
956
1167
  if (!this.db)
957
1168
  return false;
958
1169
  const res = this.db.prepare(`INSERT OR IGNORE INTO sample_events
959
- (task_id, run_id, turn_index, seq, ts, kind, model, input_tokens, output_tokens,
1170
+ (task_id, run_id, turn_index, turn_id, seq, ts, kind, model, input_tokens, output_tokens,
960
1171
  cost_usd, latency_ms, tool_name, tool_status, tool_error, payload, dedup_key)
961
- VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`).run(row.taskId, row.runId, row.turnIndex ?? null, row.seq, row.ts, row.kind, row.model ?? null, row.inputTokens ?? null, row.outputTokens ?? null, row.costUsd ?? null, row.latencyMs ?? null, row.toolName ?? null, row.toolStatus ?? null, row.toolError ?? null, row.payload ?? null, row.dedupKey ?? null);
1172
+ VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`).run(row.taskId, row.runId, row.turnIndex ?? null, row.turnId ?? null, row.seq, row.ts, row.kind, row.model ?? null, row.inputTokens ?? null, row.outputTokens ?? null, row.costUsd ?? null, row.latencyMs ?? null, row.toolName ?? null, row.toolStatus ?? null, row.toolError ?? null, row.payload ?? null, row.dedupKey ?? null);
962
1173
  return res.changes > 0;
963
1174
  }
964
1175
  /** Update a previously-inserted event (e.g. a tool pending→resolved) by id. */
@@ -1125,6 +1336,7 @@ function rowToRun(r) {
1125
1336
  exitCode: r.exit_code ?? null,
1126
1337
  gitBefore: r.git_before ?? null,
1127
1338
  gitAfter: r.git_after ?? null,
1339
+ parentRunId: r.parent_run_id ?? null,
1128
1340
  hwProfile: r.hw_profile ?? null,
1129
1341
  taskSignals: r.task_signals ?? null,
1130
1342
  taskCategory: r.task_category ?? null,
@@ -1158,12 +1370,34 @@ function rowToTask(r) {
1158
1370
  latencyMs: r.latency_ms ?? null,
1159
1371
  };
1160
1372
  }
1373
+ /** Task row + the run context that makes it readable on its own. `modelId`
1374
+ * prefers the task's own sample header and falls back to the run's, since only
1375
+ * newer tasks carry one. */
1376
+ function rowToTaskListRow(r) {
1377
+ return {
1378
+ ...rowToTask(r),
1379
+ sessionId: r.session_id,
1380
+ agentType: r.agent_type,
1381
+ modelId: r.model_id ?? r.run_model_id ?? null,
1382
+ projectName: r.project_name ?? null,
1383
+ projectPath: r.project_path ?? null,
1384
+ parentRunId: r.parent_run_id ?? null,
1385
+ firstPrompt: r.first_prompt ?? r.run_prompt ?? null,
1386
+ turnCount: r.turn_count ?? 0,
1387
+ answeredTurns: r.answered_turns ?? 0,
1388
+ eventCount: r.event_count ?? 0,
1389
+ toolCount: r.tool_count ?? 0,
1390
+ evalCount: r.eval_count ?? 0,
1391
+ overallScore: r.overall_score ?? r.composite_score ?? null,
1392
+ };
1393
+ }
1161
1394
  function rowToSampleEvent(r) {
1162
1395
  return {
1163
1396
  id: r.id,
1164
1397
  taskId: r.task_id,
1165
1398
  runId: r.run_id,
1166
1399
  turnIndex: r.turn_index ?? null,
1400
+ turnId: r.turn_id ?? null,
1167
1401
  seq: r.seq,
1168
1402
  ts: r.ts,
1169
1403
  kind: r.kind,