wicked-crew 0.9.13 → 0.10.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 (66) hide show
  1. package/dist/api/job-title.d.ts +24 -0
  2. package/dist/api/job-title.d.ts.map +1 -0
  3. package/dist/api/job-title.js +97 -0
  4. package/dist/api/job-title.js.map +1 -0
  5. package/dist/api/mcp.d.ts +26 -6
  6. package/dist/api/mcp.d.ts.map +1 -1
  7. package/dist/api/mcp.js +87 -10
  8. package/dist/api/mcp.js.map +1 -1
  9. package/dist/api/routes.d.ts.map +1 -1
  10. package/dist/api/routes.js +32 -2
  11. package/dist/api/routes.js.map +1 -1
  12. package/dist/api/run-timing-index.d.ts +23 -1
  13. package/dist/api/run-timing-index.d.ts.map +1 -1
  14. package/dist/api/run-timing-index.js +66 -1
  15. package/dist/api/run-timing-index.js.map +1 -1
  16. package/dist/api/seat-record.d.ts +1 -1
  17. package/dist/api/seat-record.js +1 -1
  18. package/dist/api/server.js +1 -1
  19. package/dist/api/server.js.map +1 -1
  20. package/dist/editors/registry.d.ts +11 -11
  21. package/dist/editors/registry.d.ts.map +1 -1
  22. package/dist/editors/registry.js +1 -0
  23. package/dist/editors/registry.js.map +1 -1
  24. package/dist/editors/routes.d.ts +19 -1
  25. package/dist/editors/routes.d.ts.map +1 -1
  26. package/dist/editors/routes.js +85 -7
  27. package/dist/editors/routes.js.map +1 -1
  28. package/dist/mcp/broker.d.ts.map +1 -1
  29. package/dist/mcp/broker.js +17 -0
  30. package/dist/mcp/broker.js.map +1 -1
  31. package/dist/mcp/classify.d.ts +12 -2
  32. package/dist/mcp/classify.d.ts.map +1 -1
  33. package/dist/mcp/classify.js +5 -2
  34. package/dist/mcp/classify.js.map +1 -1
  35. package/dist/mcp/policies.d.ts +10 -1
  36. package/dist/mcp/policies.d.ts.map +1 -1
  37. package/dist/mcp/policies.js +16 -4
  38. package/dist/mcp/policies.js.map +1 -1
  39. package/dist/mcp/probe.d.ts +2 -0
  40. package/dist/mcp/probe.d.ts.map +1 -1
  41. package/dist/mcp/probe.js.map +1 -1
  42. package/dist/mcp/registry-store.d.ts +6 -0
  43. package/dist/mcp/registry-store.d.ts.map +1 -1
  44. package/dist/mcp/registry-store.js.map +1 -1
  45. package/dist/mcp/registry.d.ts +83 -7
  46. package/dist/mcp/registry.d.ts.map +1 -1
  47. package/dist/mcp/registry.js +213 -24
  48. package/dist/mcp/registry.js.map +1 -1
  49. package/dist/mcp/rest.d.ts +29 -2
  50. package/dist/mcp/rest.d.ts.map +1 -1
  51. package/dist/mcp/rest.js +123 -2
  52. package/dist/mcp/rest.js.map +1 -1
  53. package/dist/mcp-inspect/routes.d.ts +55 -0
  54. package/dist/mcp-inspect/routes.d.ts.map +1 -0
  55. package/dist/mcp-inspect/routes.js +268 -0
  56. package/dist/mcp-inspect/routes.js.map +1 -0
  57. package/dist/mcp-inspect/session.d.ts +153 -0
  58. package/dist/mcp-inspect/session.d.ts.map +1 -0
  59. package/dist/mcp-inspect/session.js +487 -0
  60. package/dist/mcp-inspect/session.js.map +1 -0
  61. package/dist/projects/state-home.d.ts +2 -1
  62. package/dist/projects/state-home.d.ts.map +1 -1
  63. package/dist/projects/state-home.js +34 -4
  64. package/dist/projects/state-home.js.map +1 -1
  65. package/endpoint-manifest.json +56 -2
  66. package/package.json +2 -2
@@ -82,6 +82,7 @@ import { UsageError, replayOutboxInto } from '../cli/governance.js';
82
82
  import { foldDeadletters } from './governance-health.js';
83
83
  import { RetryIndex } from './retry-index.js';
84
84
  import { SEAT_RECORD_DEFAULT_DAYS, SEAT_RECORD_MAX_DAYS, seatRecord } from './seat-record.js';
85
+ import { jobTitle } from './job-title.js';
85
86
  import { DeliveryFreeze, frozenRefusal, isDeliverUnit, registerDeliveryFreezeRoutes } from './delivery-freeze.js';
86
87
  import { GroupIndex } from './group-index.js';
87
88
  import { RunTimingIndex, recordRunLaunched } from './run-timing-index.js';
@@ -103,6 +104,7 @@ import { ConsiderationService } from '../decisions/consider.js';
103
104
  import { gardenConformance, gardenPackCheck } from '../editors/pack-install.js';
104
105
  import { EditorRegistry } from '../editors/registry.js';
105
106
  import { registerEditorRoutes } from '../editors/routes.js';
107
+ import { registerMcpInspectRoutes } from '../mcp-inspect/routes.js';
106
108
  import { discoverLivePlugin } from '../skills/plugin-source.js';
107
109
  import { resolveDecisionsMode } from '../decisions/types.js';
108
110
  const V = API_PREFIX;
@@ -744,6 +746,13 @@ runtime = {}) {
744
746
  return;
745
747
  await deliveryResolver.settle(views, runtime.deliverySettleMs);
746
748
  };
749
+ // crew#985: terminal runs with no `run.ended` entry are dated from the engine's event log before
750
+ // the DTO is assembled (read-only, once per run per process; see `backfillEndedFromEvents`).
751
+ const backfillEndedAt = async (views) => {
752
+ if (typeof adapter.runEvents !== 'function')
753
+ return;
754
+ await runTimingIndex.backfillEndedFromEvents(views, (id) => adapter.runEvents(id));
755
+ };
747
756
  const deliveryCache = runtime.deliveryCache ??
748
757
  new DeliveryDerivationCache({
749
758
  listViews: () => adapter.sessionsDetail(),
@@ -925,6 +934,9 @@ runtime = {}) {
925
934
  // Wave 6 (F-4R2-006): the interactive document this run answered, from the seams' handoff
926
935
  // ledgers — `null` = genuinely not a document run, so the field is ALWAYS present on served runs.
927
936
  view.session.document_id = docRuns.documentOf(view.session.id) ?? null;
937
+ // api-types 0.113.0 (operator ruling 2026-10-12): the run's short job title, derived here from its
938
+ // own problem (pure, `job-title.ts`) so every skin shows the same one; the full text stays `problem`.
939
+ view.session.title = jobTitle(view.session.problem);
928
940
  const retryOf = retryIndex.retryOfFor(view.session.id);
929
941
  if (retryOf !== undefined)
930
942
  view.session.retry_of = retryOf;
@@ -1281,7 +1293,17 @@ runtime = {}) {
1281
1293
  }
1282
1294
  days = n;
1283
1295
  }
1284
- const views = (await adapter.sessionsDetail()).map(decorateRun);
1296
+ // api-types 0.113.0: `?project=<id>` folds only that project's runs (the dashboards' spend);
1297
+ // the answer echoes it, so a skin can tell a scoped answer from an older daemon's global one.
1298
+ const rawProject = req.query.project;
1299
+ if (rawProject !== undefined && (Array.isArray(rawProject) || rawProject.trim() === '')) {
1300
+ return reply.code(400).send({ error: 'Invalid ?project — expected one project id' });
1301
+ }
1302
+ const project = rawProject?.trim();
1303
+ const detail = await adapter.sessionsDetail();
1304
+ await backfillEndedAt(detail);
1305
+ const all = detail.map(decorateRun);
1306
+ const views = project === undefined ? all : all.filter((v) => v.session.project_id === project);
1285
1307
  const out = await seatRecord(views, async (id) => {
1286
1308
  const engine = await adapter.runEvents(id);
1287
1309
  if (engine === null)
@@ -1292,7 +1314,7 @@ runtime = {}) {
1292
1314
  if (out === null) {
1293
1315
  return reply.code(503).send({ error: 'Seat records are unavailable: this wicked-core build has no event-log read binding' });
1294
1316
  }
1295
- return out;
1317
+ return project === undefined ? out : { ...out, project };
1296
1318
  });
1297
1319
  // Open a file/folder with the OS default application (crew#273) — the studio Files tab's
1298
1320
  // click-to-open. The open MUST happen daemon-side (the SPA cannot spawn a process), which is
@@ -2174,6 +2196,7 @@ runtime = {}) {
2174
2196
  const ordered = sortActionableFirst(visible);
2175
2197
  const served = cap !== undefined ? ordered.slice(0, cap) : ordered;
2176
2198
  await settleDeliveries(served);
2199
+ await backfillEndedAt(served);
2177
2200
  return { runs: served.map(decorateRun) };
2178
2201
  });
2179
2202
  // ── Run archival (crew#265) — write-off, not delete ────────────────────────
@@ -2235,6 +2258,7 @@ runtime = {}) {
2235
2258
  if (!run)
2236
2259
  return reply.code(404).send({ error: 'Run not found' });
2237
2260
  await settleDeliveries([run]);
2261
+ await backfillEndedAt([run]);
2238
2262
  return { run: decorateRun(run) };
2239
2263
  });
2240
2264
  // ── Inventory claims (crew#721) — whether each enumerating step's list is complete ──
@@ -5939,6 +5963,12 @@ runtime = {}) {
5939
5963
  previewCalls: (json) => adapter.previewMcpCalls(json),
5940
5964
  })
5941
5965
  : undefined;
5966
+ // The MCP inspector bridge (DES-MCP-INSPECTOR-001): live sessions to MCP servers for studio's
5967
+ // `mcp-server` editor host; registry servers resolve through the same registry and secrets.
5968
+ registerMcpInspectRoutes(app, {
5969
+ ...(runtime.mcp !== undefined ? { registry: runtime.mcp } : {}),
5970
+ log: (m) => app.log.info(m),
5971
+ });
5942
5972
  registerMcpRoutes(app, {
5943
5973
  ...(runtime.mcp !== undefined ? { registry: runtime.mcp, toolLister: () => CoreAdapter.mcpToolLister() } : {}),
5944
5974
  ...(runtime.mcpBroker !== undefined ? { broker: runtime.mcpBroker } : {}),