pilotswarm 0.5.47 → 0.5.49

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 (82) hide show
  1. package/mcp/dist/src/tools/providers.d.ts.map +1 -1
  2. package/mcp/dist/src/tools/providers.js +12 -0
  3. package/mcp/dist/src/tools/providers.js.map +1 -1
  4. package/package.json +2 -2
  5. package/tui/src/node-sdk-transport.js +5 -0
  6. package/ui/core/src/commands.js +1 -0
  7. package/ui/core/src/controller.js +85 -3
  8. package/ui/core/src/history.js +5 -37
  9. package/ui/core/src/index.js +1 -0
  10. package/ui/core/src/reducer.js +42 -0
  11. package/ui/core/src/selectors.js +153 -4
  12. package/ui/core/src/state.js +20 -0
  13. package/ui/core/src/table-layout.js +155 -0
  14. package/ui/react/src/web-app.js +479 -249
  15. package/web/dist/assets/{abnfDiagram-VRR7QNED-VPL8m_9W.js → abnfDiagram-VRR7QNED-CXF6f3n3.js} +1 -1
  16. package/web/dist/assets/{arc-T5I3-c1B.js → arc-MlDVINID.js} +1 -1
  17. package/web/dist/assets/{architectureDiagram-ZJ3FMSHR-DEP70bg6.js → architectureDiagram-ZJ3FMSHR-Bdz1J9H-.js} +1 -1
  18. package/web/dist/assets/{blockDiagram-677ZJIJ3-CvBu1MbO.js → blockDiagram-677ZJIJ3-tO706-rr.js} +1 -1
  19. package/web/dist/assets/{c4Diagram-LMCZKHZV-B5qwF4gm.js → c4Diagram-LMCZKHZV-BuZrMrYZ.js} +1 -1
  20. package/web/dist/assets/channel-moQWQGwr.js +1 -0
  21. package/web/dist/assets/{chunk-2Q5K7J3B-zVW8dS7X.js → chunk-2Q5K7J3B-BWWIPnCk.js} +1 -1
  22. package/web/dist/assets/{chunk-32BRIVSS-DWctxZZS.js → chunk-32BRIVSS-TyL8x2Q5.js} +1 -1
  23. package/web/dist/assets/{chunk-5VM5RSS4-Bq7_Vmf9.js → chunk-5VM5RSS4-ZTwZyN5B.js} +1 -1
  24. package/web/dist/assets/{chunk-EX3LRPZG-B8CFB3v-.js → chunk-EX3LRPZG-CjWsKz70.js} +1 -1
  25. package/web/dist/assets/{chunk-JWPE2WC7-B7gLPjgZ.js → chunk-JWPE2WC7-BNQrzsa3.js} +1 -1
  26. package/web/dist/assets/{chunk-MOJQB5TN-B2x6q12r.js → chunk-MOJQB5TN-B51xJi0l.js} +1 -1
  27. package/web/dist/assets/{chunk-RYQCIY6F-XorU9Stx.js → chunk-RYQCIY6F-BCdsh9nc.js} +1 -1
  28. package/web/dist/assets/{chunk-V7JOEXUC-CsLa6pw5.js → chunk-V7JOEXUC-C7FFxC7C.js} +1 -1
  29. package/web/dist/assets/{chunk-VR4S4FIN-BBv9mwmj.js → chunk-VR4S4FIN-DWoFV0Pb.js} +1 -1
  30. package/web/dist/assets/{chunk-XXDRQBXY-Cjm4mm6l.js → chunk-XXDRQBXY-plM48yQb.js} +1 -1
  31. package/web/dist/assets/classDiagram-OUVF2IWQ-33Sv-tmv.js +1 -0
  32. package/web/dist/assets/classDiagram-v2-EOCWNBFH-33Sv-tmv.js +1 -0
  33. package/web/dist/assets/{cose-bilkent-JH36ORCC-Zw9ZQbVl.js → cose-bilkent-JH36ORCC-cPPsd8jq.js} +1 -1
  34. package/web/dist/assets/{cynefin-VYW2F7L2-BYnR9YLM.js → cynefin-VYW2F7L2-DLoMRcB-.js} +1 -1
  35. package/web/dist/assets/{cynefinDiagram-TSTJHNR4-Cx8L0dOv.js → cynefinDiagram-TSTJHNR4-DbxB1EcR.js} +1 -1
  36. package/web/dist/assets/{dagre-VKFMJZFB-7GaqVcqz.js → dagre-VKFMJZFB-Cl5J3v7U.js} +1 -1
  37. package/web/dist/assets/{diagram-FQU43EPY-BWSRPJvU.js → diagram-FQU43EPY-C_5l69HJ.js} +1 -1
  38. package/web/dist/assets/{diagram-G47NLZAW-BELuAE1e.js → diagram-G47NLZAW-B_nxM69x.js} +1 -1
  39. package/web/dist/assets/{diagram-NH7WQ7WH-DGXhPpri.js → diagram-NH7WQ7WH-BogLLCcM.js} +1 -1
  40. package/web/dist/assets/{diagram-OA4YK3LP-DV8HqN0T.js → diagram-OA4YK3LP-1HZ1DJgO.js} +1 -1
  41. package/web/dist/assets/{diagram-WEI45ONY-Clv1X3ZL.js → diagram-WEI45ONY-CZ9akwtz.js} +1 -1
  42. package/web/dist/assets/{ebnfDiagram-CCIWWBDH-TpQx36oi.js → ebnfDiagram-CCIWWBDH-CCg2iaF2.js} +1 -1
  43. package/web/dist/assets/{erDiagram-Q63AITRT-DVVWd00c.js → erDiagram-Q63AITRT-BCYw6hLk.js} +1 -1
  44. package/web/dist/assets/{flowDiagram-23GEKE2U-Cdz_8_Dw.js → flowDiagram-23GEKE2U-B3O-UeAj.js} +1 -1
  45. package/web/dist/assets/{ganttDiagram-NO4QXBWP-zlco-o7u.js → ganttDiagram-NO4QXBWP-GJzz1tR4.js} +1 -1
  46. package/web/dist/assets/{gitGraphDiagram-IHSO6WYX-CfAZW1En.js → gitGraphDiagram-IHSO6WYX-Ch1cfaOe.js} +1 -1
  47. package/web/dist/assets/index-BUp5hFdX.css +1 -0
  48. package/web/dist/assets/{index-tQXCQojP.js → index-wYKm3Bnl.js} +6 -6
  49. package/web/dist/assets/{infoDiagram-FWYZ7A6U-0R-8efwI.js → infoDiagram-FWYZ7A6U-Bjo2ImAx.js} +1 -1
  50. package/web/dist/assets/{ishikawaDiagram-FXEZZL3T-lPpoXGlp.js → ishikawaDiagram-FXEZZL3T-Cknf936W.js} +1 -1
  51. package/web/dist/assets/{journeyDiagram-5HDEW3XC-D05vSVqu.js → journeyDiagram-5HDEW3XC-Chy2vDKP.js} +1 -1
  52. package/web/dist/assets/{kanban-definition-HUTT4EX6-ClaDdESv.js → kanban-definition-HUTT4EX6-BL4WMBwi.js} +1 -1
  53. package/web/dist/assets/{linear-CUnhHMvY.js → linear-B8XSGnZ8.js} +1 -1
  54. package/web/dist/assets/{mermaid.core-DaYS-X8Y.js → mermaid.core-CFdkmvEY.js} +4 -4
  55. package/web/dist/assets/{mindmap-definition-LN4V7U3C-N480VHds.js → mindmap-definition-LN4V7U3C-CHOBIkSR.js} +1 -1
  56. package/web/dist/assets/{papaparse.min-CNTcNgd8.js → papaparse.min-DnG1sqyK.js} +1 -1
  57. package/web/dist/assets/{pegDiagram-2B236MQR-CVWyJ5ck.js → pegDiagram-2B236MQR-VuMpZEdm.js} +1 -1
  58. package/web/dist/assets/{pieDiagram-ENE6RG2P-UR9uohPf.js → pieDiagram-ENE6RG2P-CkFTLWPp.js} +1 -1
  59. package/web/dist/assets/pilotswarm-CLJw14xm.js +97 -0
  60. package/web/dist/assets/{quadrantDiagram-ABIIQ3AL-D2SIOetn.js → quadrantDiagram-ABIIQ3AL-B74MHjsI.js} +1 -1
  61. package/web/dist/assets/{railroadDiagram-RFXS5EU6-OgN6qgOU.js → railroadDiagram-RFXS5EU6-CwcT-BI1.js} +1 -1
  62. package/web/dist/assets/{requirementDiagram-TGXJPOKE-BSUURBBz.js → requirementDiagram-TGXJPOKE-CfV8rmaQ.js} +1 -1
  63. package/web/dist/assets/{sankeyDiagram-HTMAVEWB-BBZhmSBZ.js → sankeyDiagram-HTMAVEWB-BECA4LLx.js} +1 -1
  64. package/web/dist/assets/{sequenceDiagram-DBY2YBRQ-C10IDNdW.js → sequenceDiagram-DBY2YBRQ-C80kbBkw.js} +1 -1
  65. package/web/dist/assets/{sizeCapture-X5ZJPWSS-B9787MHa.js → sizeCapture-X5ZJPWSS-BgdLZC94.js} +1 -1
  66. package/web/dist/assets/{stateDiagram-2N3HPSRC-BmSBo7es.js → stateDiagram-2N3HPSRC-DY_mnuOT.js} +1 -1
  67. package/web/dist/assets/stateDiagram-v2-6OUMAXLB-Dw3VhZ5V.js +1 -0
  68. package/web/dist/assets/{swimlanes-5IMT3BWC-DOXpv_KQ.js → swimlanes-5IMT3BWC-9m8kjDvw.js} +2 -2
  69. package/web/dist/assets/swimlanesDiagram-G3AALYLV-DoOI0AiK.js +8 -0
  70. package/web/dist/assets/{timeline-definition-FHXFAJF6-SjhGfPdI.js → timeline-definition-FHXFAJF6-CRDqu4Os.js} +1 -1
  71. package/web/dist/assets/{vennDiagram-L72KCM5P-BiujYen6.js → vennDiagram-L72KCM5P-B2KNeFvN.js} +1 -1
  72. package/web/dist/assets/{wardleyDiagram-EHGQE667-6nLXBvwc.js → wardleyDiagram-EHGQE667-DC0vN3Ub.js} +1 -1
  73. package/web/dist/assets/{xychartDiagram-FW5EYKEG-Di7ioTvW.js → xychartDiagram-FW5EYKEG-DOY6Rwu4.js} +1 -1
  74. package/web/dist/index.html +3 -3
  75. package/web/runtime.js +10 -0
  76. package/web/dist/assets/channel-D5LojeMw.js +0 -1
  77. package/web/dist/assets/classDiagram-OUVF2IWQ-C5edc5Or.js +0 -1
  78. package/web/dist/assets/classDiagram-v2-EOCWNBFH-C5edc5Or.js +0 -1
  79. package/web/dist/assets/index-CMtzFJre.css +0 -1
  80. package/web/dist/assets/pilotswarm-BG6hk0oE.js +0 -97
  81. package/web/dist/assets/stateDiagram-v2-6OUMAXLB-BqpsfoJI.js +0 -1
  82. package/web/dist/assets/swimlanesDiagram-G3AALYLV-k8WG_bWt.js +0 -8
@@ -1 +1 @@
1
- {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../../src/tools/providers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGnD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,QA0Y1E"}
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../../src/tools/providers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGnD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,QA6Z1E"}
@@ -257,6 +257,18 @@ export function registerProviderTools(server, ctx) {
257
257
  contextTier: context ?? null,
258
258
  }));
259
259
  }));
260
+ server.registerTool("get_provider_usage_summary", {
261
+ title: "Get Cluster Usage Summary",
262
+ description: "The cluster summary from the usage ledger: token totals for today, the last 7 and the last 30 UTC "
263
+ + "days (input, output, cache read, cache write, total, turns, sessions), a per-day series for a "
264
+ + "chart, and the per-MODEL pivot — one row per model name across every provider, reasoning effort "
265
+ + "and context tier. Admins see the whole cluster, system sessions included (the Providers meters "
266
+ + "count people's turns only; `classes` shows the split); everyone else sees their own turns.",
267
+ inputSchema: {
268
+ days: z.number().int().min(1).max(365).optional().describe("Days of history for the series and the model table (default 14; 14, 30 or 90 are the portal's choices)"),
269
+ providers: z.array(z.string()).optional().describe("Only these providers, by name; absent means all"),
270
+ },
271
+ }, withToolErrors(async ({ days, providers }) => jsonResult(await ctx.mgmt.getProviderUsageSummary(viewer, { days, providers }))));
260
272
  server.registerTool("get_provider_usage", {
261
273
  title: "Get Provider Usage",
262
274
  description: "Where the tokens went: totals (tokens, turns, sessions), a per-day series, and one breakdown, all "
@@ -1 +1 @@
1
- {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../../src/tools/providers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../../src/tools/providers.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pilotswarm",
3
- "version": "0.5.47",
3
+ "version": "0.5.49",
4
4
  "description": "PilotSwarm application package: terminal UI, browser portal + Web API server, and MCP server — one install, three bins.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -81,7 +81,7 @@
81
81
  "ink": "^6.8.0",
82
82
  "jose": "^6.2.2",
83
83
  "mermaid": "^11.16.0",
84
- "pilotswarm-sdk": "0.5.47",
84
+ "pilotswarm-sdk": "0.5.49",
85
85
  "react": "^19.2.4",
86
86
  "react-dom": "^19.2.4",
87
87
  "ws": "^8.18.2"
@@ -1569,6 +1569,11 @@ export class NodeSdkTransport {
1569
1569
  return this.mgmt.updateMyProviderCredential(await this._modelProviderViewer(), input || {});
1570
1570
  }
1571
1571
 
1572
+ /** The cluster summary: totals, a per-day series and the per-model pivot. */
1573
+ async getProviderUsageSummary(query = {}) {
1574
+ return this.mgmt.getProviderUsageSummary(await this._modelProviderViewer(), query || {});
1575
+ }
1576
+
1572
1577
  /** Rotate a SHARED provider's key. Admin-only, enforced in SQL. */
1573
1578
  async updateSharedProviderCredential(input) {
1574
1579
  return this.mgmt.updateSharedProviderCredential(await this._modelProviderViewer(), input || {});
@@ -87,6 +87,7 @@ export const UI_COMMANDS = {
87
87
  // Admin Console — swaps out sessions+chat for the per-user admin view.
88
88
  OPEN_ADMIN_CONSOLE: "openAdminConsole",
89
89
  CLOSE_ADMIN_CONSOLE: "closeAdminConsole",
90
+ OPEN_WORKSPACE: "openWorkspace",
90
91
  ADMIN_REFRESH_PROFILE: "adminRefreshProfile",
91
92
  ADMIN_SHOW_GHCP: "adminShowGhcp",
92
93
  ADMIN_SHOW_PACKAGES: "adminShowPackages",
@@ -3171,6 +3171,8 @@ export class PilotSwarmUiController {
3171
3171
  * admin view) and refresh the user profile so the UI is current.
3172
3172
  */
3173
3173
  async openAdminConsole() {
3174
+ // One MODE at a time — see openBudget.
3175
+ if (this.getState().ui?.budgetOpen) this.closeBudget();
3174
3176
  this.dispatch({ type: "admin/visibility", visible: true });
3175
3177
  await this.refreshAdminProfile().catch(() => {});
3176
3178
  void this.refreshAdminModelProviders().catch(() => {});
@@ -3182,6 +3184,24 @@ export class PilotSwarmUiController {
3182
3184
  this.dispatch({ type: "admin/visibility", visible: false });
3183
3185
  }
3184
3186
 
3187
+ /**
3188
+ * The Workspace mode: sessions, chat and the panels. Closes whichever
3189
+ * other mode is up. A real destination, so the toolbar can offer "back
3190
+ * to the workspace" as a button rather than "close whatever is open".
3191
+ */
3192
+ openWorkspace() {
3193
+ if (this.getState().admin?.visible) this.closeAdminConsole();
3194
+ if (this.getState().ui?.budgetOpen) this.closeBudget();
3195
+ }
3196
+
3197
+ /** Which mode is on screen: "workspace" | "budget" | "admin". */
3198
+ currentMode() {
3199
+ const state = this.getState();
3200
+ if (state.admin?.visible) return "admin";
3201
+ if (state.ui?.budgetOpen) return "budget";
3202
+ return "workspace";
3203
+ }
3204
+
3185
3205
  /**
3186
3206
  * Land on a freshly created session. Selecting it is not enough: the
3187
3207
  * Admin Console REPLACES the workspace, so creating from there left the
@@ -3435,6 +3455,12 @@ export class PilotSwarmUiController {
3435
3455
  });
3436
3456
  }
3437
3457
 
3458
+ /** Does the selected provider type authenticate as the worker itself? */
3459
+ _adminProviderTypeUsesWorkloadIdentity(typeId) {
3460
+ const types = selectAdminConsole(this.getState()).modelProviders?.providerTypes || [];
3461
+ return types.find((type) => type.id === typeId)?.usesWorkloadIdentity === true;
3462
+ }
3463
+
3438
3464
  cycleAdminProviderCreateType() {
3439
3465
  const providers = selectAdminConsole(this.getState()).modelProviders;
3440
3466
  const create = this.getState().admin?.modelProviders?.create;
@@ -3492,16 +3518,26 @@ export class PilotSwarmUiController {
3492
3518
  async saveAdminProviderCreate() {
3493
3519
  const create = this.getState().admin?.modelProviders?.create;
3494
3520
  if (!create?.editing || create.saving || create.stage !== "credential") return;
3521
+ // A workload-identity type has no key to type. The stage is still
3522
+ // reached — it is where the person confirms — but the draft is empty
3523
+ // by design, so demanding a credential would make the type
3524
+ // unusable from this screen.
3525
+ const workloadIdentity = this._adminProviderTypeUsesWorkloadIdentity(create.typeId);
3495
3526
  const credential = String(create.draft || "").trim();
3496
- if (!credential) {
3527
+ if (!credential && !workloadIdentity) {
3497
3528
  this.dispatch({ type: "admin/modelProviders/createFailed", error: "Enter a provider credential." });
3498
3529
  return;
3499
3530
  }
3500
3531
  const input = {
3501
3532
  name: create.name,
3502
3533
  type: create.typeId,
3503
- credentials: /github/i.test(create.typeId) ? { githubToken: credential } : { apiKey: credential },
3504
- shared: create.shared === true,
3534
+ credentials: workloadIdentity
3535
+ ? { kind: "workloadIdentity" }
3536
+ : /github/i.test(create.typeId) ? { githubToken: credential } : { apiKey: credential },
3537
+ // It runs on the worker's identity, which belongs to the
3538
+ // organization, so it can only be shared. The server refuses a
3539
+ // personal one; asking for it here would only earn an error.
3540
+ shared: workloadIdentity ? true : create.shared === true,
3505
3541
  };
3506
3542
  // Clear the credential from shared state before any network await.
3507
3543
  this.dispatch({ type: "admin/modelProviders/createSaving" });
@@ -4094,6 +4130,10 @@ export class PilotSwarmUiController {
4094
4130
  * row it names is in it.
4095
4131
  */
4096
4132
  async openBudget({ provider = undefined } = {}) {
4133
+ // One MODE at a time: Workspace, Budget or the Admin Console. The two
4134
+ // flags used to be independent, so Budget could open behind an open
4135
+ // Admin Console and the toolbar showed both as active.
4136
+ if (this.getState().admin?.visible) this.closeAdminConsole();
4097
4137
  this.dispatch({
4098
4138
  type: "ui/budgetOpen",
4099
4139
  open: true,
@@ -4115,6 +4155,45 @@ export class PilotSwarmUiController {
4115
4155
  this.dispatch({ type: "ui/budgetOpen", open: false });
4116
4156
  }
4117
4157
 
4158
+ /** Which tab of the Budget screen: "providers" or "summary". */
4159
+ setBudgetTab(tab) {
4160
+ this.dispatch({ type: "budget/tab", tab });
4161
+ if (tab === "summary") this.loadUsageSummary().catch(() => {});
4162
+ }
4163
+
4164
+ /**
4165
+ * Change the Cluster summary's window or provider filter and re-read.
4166
+ * `providers` is the exact list to ask for (empty = all); `preset` is
4167
+ * what the picker shows ("all" | "shared" | "users" | "custom").
4168
+ */
4169
+ async setUsageSummaryFilter({ days, providers, preset } = {}) {
4170
+ this.dispatch({ type: "budget/summary/filter", days, providers, preset });
4171
+ await this.loadUsageSummary();
4172
+ }
4173
+
4174
+ /**
4175
+ * Read the Cluster summary for the current filter. One request; the
4176
+ * database builds the windows, the series and the model pivot over the
4177
+ * same rows, so the three can never disagree.
4178
+ */
4179
+ async loadUsageSummary() {
4180
+ if (typeof this.transport.getProviderUsageSummary !== "function") {
4181
+ this.dispatch({ type: "budget/summary/failed", error: "The cluster summary is not available on this transport." });
4182
+ return;
4183
+ }
4184
+ const filter = this.getState().budget?.summary || {};
4185
+ this.dispatch({ type: "budget/summary/loading" });
4186
+ try {
4187
+ const data = await this.transport.getProviderUsageSummary({
4188
+ days: filter.days || 14,
4189
+ ...(Array.isArray(filter.providers) && filter.providers.length ? { providers: filter.providers } : {}),
4190
+ });
4191
+ this.dispatch({ type: "budget/summary/loaded", data, fetchedAt: Date.now() });
4192
+ } catch (error) {
4193
+ this.dispatch({ type: "budget/summary/failed", error: budgetRefusalMessage(error) });
4194
+ }
4195
+ }
4196
+
4118
4197
  /**
4119
4198
  * The "show overall usage" tick.
4120
4199
  *
@@ -10402,6 +10481,9 @@ export class PilotSwarmUiController {
10402
10481
  case UI_COMMANDS.CLOSE_ADMIN_CONSOLE:
10403
10482
  this.closeAdminConsole();
10404
10483
  return;
10484
+ case UI_COMMANDS.OPEN_WORKSPACE:
10485
+ this.openWorkspace();
10486
+ return;
10405
10487
  case UI_COMMANDS.ADMIN_REFRESH_PROFILE:
10406
10488
  await this.refreshAdminProfile();
10407
10489
  return;
@@ -542,27 +542,11 @@ function buildChatMessage(event, role) {
542
542
  };
543
543
  }
544
544
 
545
- // The per-turn system prompt, as the SDK summarises it for CMS: a marker line
546
- // naming the size with a 120-char snippet, never the whole 170k-char prompt.
547
- // Matched narrowly on purpose it is the ONE system.message worth a row in
548
- // the conversation, and widening this would move rehydration notices, child
549
- // updates and sub-agent chatter in with it.
550
- const SYSTEM_PROMPT_NOTICE_RE = /rebuilt the full system prompt for model input/i;
551
-
552
- /**
553
- * Is this the system prompt itself, rather than internal chatter?
554
- *
555
- * It stays in the ACTIVITY feed as before — that is the raw diagnostic
556
- * stream — and additionally earns one collapsed row in the transcript, the
557
- * same affordance as a sub-agent response or a canvas action. Visible enough
558
- * to open when you want to know what the model was told; folded away the rest
559
- * of the time.
560
- */
561
- export function isSystemPromptNotice(event) {
562
- if (event?.eventType !== "system.message") return false;
563
- return SYSTEM_PROMPT_NOTICE_RE.test(messageTextFromEvent(event) || "");
564
- }
565
-
545
+ // The Copilot SDK echoes the system prompt as a system.message on EVERY
546
+ // turn, and the worker keeps only a 120-char snippet of it (session-proxy.ts,
547
+ // "Full content omitted from CMS"). For one release (0.5.47) each echo also
548
+ // got a collapsed row in the chat pane — one per turn, and opening it showed
549
+ // the snippet, not the prompt. Activity feed only, as before.
566
550
  function shouldRenderSystemMessageAsActivity(event) {
567
551
  // Most system.message events stay out of the chat pane. They include the
568
552
  // per-turn system prompt sent to the LLM plus internal rehydration notices,
@@ -1141,13 +1125,6 @@ export function buildHistoryModel(events = [], options = {}) {
1141
1125
  if (shouldRenderSystemMessageAsActivity(event)) {
1142
1126
  const activityItem = formatActivity(event);
1143
1127
  if (activityItem) activity.push(activityItem);
1144
- // The system prompt also earns a collapsed row in the
1145
- // transcript. It stays in the activity feed above — that is
1146
- // the raw stream — and this is the readable handle on it.
1147
- if (isSystemPromptNotice(event)) {
1148
- const message = buildChatMessage(event, "system");
1149
- if (message) chat.push(message);
1150
- }
1151
1128
  } else {
1152
1129
  const message = buildChatMessage(event, "system");
1153
1130
  if (message) chat.push(message);
@@ -1275,15 +1252,6 @@ export function appendEventToHistory(history, event) {
1275
1252
  next.activity.push(activityItem);
1276
1253
  next.activity = clampHistoryItems(next.activity, loadedEventLimit);
1277
1254
  }
1278
- // Same as the bulk path: the system prompt is also worth one
1279
- // collapsed row in the conversation.
1280
- if (isSystemPromptNotice(event)) {
1281
- const message = buildChatMessage(event, "system");
1282
- if (message) {
1283
- next.chat.push(message);
1284
- next.chat = clampHistoryItems(dedupeChatMessages(next.chat), loadedEventLimit);
1285
- }
1286
- }
1287
1255
  } else {
1288
1256
  const message = buildChatMessage(event, "system");
1289
1257
  if (!message) return next;
@@ -15,3 +15,4 @@ export * from "./controller.js";
15
15
  export { isThemeLight } from "./themes/helpers.js";
16
16
  export * from "./themes/index.js";
17
17
  export { validateCanvasAction, formatCanvasActionPrompt, parseCanvasActionContent, isCanvasActionContent, createCanvasActionLimiter, CANVAS_ACTION_PREFIX } from "./canvas-actions.js";
18
+ export * from "./table-layout.js";
@@ -1037,6 +1037,48 @@ export function appReducer(state, action) {
1037
1037
  },
1038
1038
  };
1039
1039
 
1040
+ // ── Budget screen: tab + the Cluster summary ─────────────────
1041
+ case "budget/tab": {
1042
+ const tab = action.tab === "summary" ? "summary" : "providers";
1043
+ if (state.budget.tab === tab) return state;
1044
+ return { ...state, budget: { ...state.budget, tab } };
1045
+ }
1046
+ case "budget/summary/filter": {
1047
+ const prev = state.budget.summary;
1048
+ const days = [14, 30, 90].includes(Number(action.days)) ? Number(action.days) : prev.days;
1049
+ const providers = Array.isArray(action.providers)
1050
+ ? action.providers.map((p) => String(p ?? "").trim()).filter(Boolean)
1051
+ : prev.providers;
1052
+ const preset = ["all", "shared", "users", "custom"].includes(action.preset) ? action.preset
1053
+ : (Array.isArray(action.providers) ? "custom" : prev.preset);
1054
+ return { ...state, budget: { ...state.budget, summary: { ...prev, days, providers, preset } } };
1055
+ }
1056
+ case "budget/summary/loading":
1057
+ return { ...state, budget: { ...state.budget, summary: { ...state.budget.summary, loading: true } } };
1058
+ case "budget/summary/loaded":
1059
+ return {
1060
+ ...state,
1061
+ budget: {
1062
+ ...state.budget,
1063
+ summary: {
1064
+ ...state.budget.summary,
1065
+ loading: false,
1066
+ error: null,
1067
+ fetchedAt: Number(action.fetchedAt) || Date.now(),
1068
+ data: action.data && typeof action.data === "object" ? action.data : null,
1069
+ },
1070
+ },
1071
+ };
1072
+ case "budget/summary/failed":
1073
+ // Keep the last answer on screen; say the read failed beside it.
1074
+ return {
1075
+ ...state,
1076
+ budget: {
1077
+ ...state.budget,
1078
+ summary: { ...state.budget.summary, loading: false, error: String(action.error || "The summary could not be read.") },
1079
+ },
1080
+ };
1081
+
1040
1082
  case "ui/diagnosticsSplitAdjust":
1041
1083
  return {
1042
1084
  ...state,
@@ -39,6 +39,22 @@ import { isRecoverableTransportErrorText } from "./session-errors.js";
39
39
 
40
40
  export const ACTIVE_HIGHLIGHT_BACKGROUND = "activeHighlightBackground";
41
41
  export const ACTIVE_HIGHLIGHT_FOREGROUND = "activeHighlightForeground";
42
+
43
+ /**
44
+ * Provider types that authenticate as the worker rather than with a key.
45
+ *
46
+ * The same rule as `providerTypeUsesWorkloadIdentity` in the SDK, restated
47
+ * because the UI packages do not import from it. Both sides read the `type`
48
+ * field of the deployment's model-providers file, so they agree on the value
49
+ * even though they cannot share the function.
50
+ */
51
+ export function providerTypeUsesWorkloadIdentity(type) {
52
+ return type === "anthropic-wif";
53
+ }
54
+
55
+ /** What the add-provider form says where the key field would be. */
56
+ export const WORKLOAD_IDENTITY_CREDENTIAL_NOTE =
57
+ "Use the Workload Identity configured in the worker";
42
58
  const USER_CHAT_COLOR = "userChat";
43
59
  const USER_CHAT_LABEL_COLOR = "userChatLabel";
44
60
  // Speaker label for a message from another person in a shared session.
@@ -3939,11 +3955,19 @@ export function selectAdminConsole(state) {
3939
3955
  providerTypeMap.set(model.providerId, {
3940
3956
  id: model.providerId,
3941
3957
  label: model.providerType || model.providerId,
3958
+ // Carried on the type so that no screen has to know which type
3959
+ // names mean "no key": the add-provider form asks for a
3960
+ // credential unless this says the worker already holds one.
3961
+ usesWorkloadIdentity: providerTypeUsesWorkloadIdentity(model.providerType),
3942
3962
  });
3943
3963
  }
3944
3964
  const providerSummary = (provider) => ({
3945
3965
  name: provider.name,
3946
3966
  typeId: provider.typeId || provider.type || null,
3967
+ // There is no key on this one to rotate, so the screens that offer
3968
+ // "Update key" leave it off rather than offering an action the server
3969
+ // refuses.
3970
+ usesWorkloadIdentity: providerTypeMap.get(provider.typeId || provider.type)?.usesWorkloadIdentity === true,
3947
3971
  class: provider.class === "shared" ? "shared" : "personal",
3948
3972
  hasCredential: Boolean(provider.hasCredential),
3949
3973
  usableByMe: provider.usableByMe !== false,
@@ -4680,6 +4704,12 @@ export function selectAdminProviderCreateModal(state, maxWidth = 76) {
4680
4704
  ? "Add GitHub Copilot provider"
4681
4705
  : `Add ${create.typeId || "model"} provider`;
4682
4706
  const value = String(create.draft || "");
4707
+ // A workload-identity type has no key to ask for. The stage still exists
4708
+ // — it is where the person confirms what they are adding — but it prompts
4709
+ // instead of demanding, and nothing is typed into it.
4710
+ const typeRow = (admin.modelProviders?.models || [])
4711
+ .find((model) => model?.providerId === create.typeId);
4712
+ const workloadIdentity = providerTypeUsesWorkloadIdentity(typeRow?.providerType);
4683
4713
  return {
4684
4714
  type: "adminProviderCreate",
4685
4715
  title: updating
@@ -4687,10 +4717,12 @@ export function selectAdminProviderCreateModal(state, maxWidth = 76) {
4687
4717
  : credentialStage
4688
4718
  ? (shared ? "Add shared model provider" : ownTitle)
4689
4719
  : (shared ? "Name the shared provider" : ownTitle),
4690
- label: credentialStage ? "credential" : "provider name",
4691
- displayValue: credentialStage && value ? "•".repeat(value.length) : value,
4720
+ label: credentialStage ? (workloadIdentity ? "authentication" : "credential") : "provider name",
4721
+ displayValue: credentialStage && value && !workloadIdentity ? "•".repeat(value.length) : value,
4692
4722
  cursorIndex: Math.max(0, Math.min(Number(create.cursorIndex) || 0, value.length)),
4693
- placeholder: credentialStage ? "Paste token" : "my-ghcp",
4723
+ placeholder: credentialStage
4724
+ ? (workloadIdentity ? WORKLOAD_IDENTITY_CREDENTIAL_NOTE : "Paste token")
4725
+ : "my-ghcp",
4694
4726
  saving: Boolean(create.saving),
4695
4727
  error: create.error || null,
4696
4728
  idealWidth: Math.max(56, Math.min(maxWidth, 76)),
@@ -4698,6 +4730,9 @@ export function selectAdminProviderCreateModal(state, maxWidth = 76) {
4698
4730
  ? [
4699
4731
  { text: `Provider ${create.name}`, color: "white", bold: true },
4700
4732
  { text: `Type ${create.typeId}`, color: "cyan" },
4733
+ ...(workloadIdentity
4734
+ ? [{ text: WORKLOAD_IDENTITY_CREDENTIAL_NOTE, color: "gray" }]
4735
+ : []),
4701
4736
  { text: shared ? "Shared" : "Only you", color: "gray" },
4702
4737
  ]
4703
4738
  : [
@@ -4706,7 +4741,9 @@ export function selectAdminProviderCreateModal(state, maxWidth = 76) {
4706
4741
  { text: "Letters, numbers, dot, dash, and underscore only.", color: "gray" },
4707
4742
  ],
4708
4743
  helpLines: credentialStage
4709
- ? ["Type/paste credential", `Enter ${updating ? "update key" : "create provider"}`, "Esc cancel and clear"]
4744
+ ? workloadIdentity
4745
+ ? ["No key needed", "Enter create provider", "Esc cancel"]
4746
+ : ["Type/paste credential", `Enter ${updating ? "update key" : "create provider"}`, "Esc cancel and clear"]
4710
4747
  : ["Type provider name", "Tab next provider type", "Enter continue to credential", "Esc cancel"],
4711
4748
  };
4712
4749
  }
@@ -4829,9 +4866,30 @@ function budgetCell(raw, overall, nowMs) {
4829
4866
  // At 100/100 the two numbers are the story; the case this exists for is a
4830
4867
  // cell reading 13% of your share on a provider that has nothing left.
4831
4868
  const blockedButLooksFine = !overall && providerExhausted && (pct == null || pct < 100);
4869
+ // What the used figure is made of, for the pair on screen. A limit is on
4870
+ // the total — input + output — and the cache figures are parts OF the
4871
+ // input (what was served from the cache, what was written to it), not
4872
+ // additions to it. The parts are the meter's own turns over the meter's
4873
+ // own window, so input + output is the used figure beside them.
4874
+ const part = (key) => {
4875
+ const v = overall ? raw?.[key] : raw?.[`your${key[0].toUpperCase()}${key.slice(1)}`];
4876
+ return v == null ? null : Number(v);
4877
+ };
4878
+ const splitInput = part("inputTokens");
4879
+ const split = Number.isFinite(splitInput) ? {
4880
+ input: splitInput,
4881
+ output: part("outputTokens") || 0,
4882
+ cacheRead: part("cacheReadTokens") || 0,
4883
+ cacheWrite: part("cacheWriteTokens") || 0,
4884
+ } : null;
4885
+ const splitText = split
4886
+ ? `in ${formatCompactNumber(split.input)} (cache r ${formatCompactNumber(split.cacheRead)} · w ${formatCompactNumber(split.cacheWrite)}) · out ${formatCompactNumber(split.output)}`
4887
+ : null;
4832
4888
  return {
4833
4889
  providerExhausted: blockedButLooksFine,
4834
4890
  ruleId: raw?.ruleId || null,
4891
+ split,
4892
+ splitText,
4835
4893
  usedTokens: known ? usedTokens : null,
4836
4894
  quotaTokens: Number.isFinite(quotaTokens) ? quotaTokens : null,
4837
4895
  usedLabel,
@@ -4974,6 +5032,97 @@ function budgetTableRow(raw, { overall, selectedProvider, selectedScope = "*", n
4974
5032
  * Rows are NOT sorted here. The server returns them in render order and a
4975
5033
  * sort would move a model row out from under the provider it belongs to.
4976
5034
  */
5035
+ /**
5036
+ * The Cluster summary tab's view: the filter as the picker shows it, the
5037
+ * three KPI windows, a chart series with every day of the window present
5038
+ * (the database returns only days that had turns), the per-model rows with
5039
+ * a sparkline aligned to those same days, and the charge-class split.
5040
+ */
5041
+ export function selectUsageSummary(state) {
5042
+ const budget = state.budget || {};
5043
+ const summary = budget.summary || {};
5044
+ const data = summary.data && typeof summary.data === "object" ? summary.data : null;
5045
+ const days = [14, 30, 90].includes(Number(summary.days)) ? Number(summary.days) : 14;
5046
+
5047
+ // Provider choices come from the grid the Providers tab already read:
5048
+ // one entry per provider row, with its class, so the picker can offer
5049
+ // Shared / Users as presets and each name as a checkbox.
5050
+ const providers = [];
5051
+ const seen = new Set();
5052
+ for (const row of Array.isArray(budget.grid) ? budget.grid : []) {
5053
+ if (row?.rowKind !== "provider" || !row?.providerName || seen.has(row.providerName)) continue;
5054
+ seen.add(row.providerName);
5055
+ providers.push({ name: row.providerName, class: row.class === "shared" ? "shared" : "personal" });
5056
+ }
5057
+ const selected = new Set(Array.isArray(summary.providers) ? summary.providers : []);
5058
+ const preset = summary.preset || "all";
5059
+
5060
+ // Every UTC day of the window, oldest first, ending on the server's
5061
+ // "today" — so a quiet day is a zero bar, not a missing one.
5062
+ const today = typeof data?.today === "string" ? data.today : new Date().toISOString().slice(0, 10);
5063
+ const dayKeys = [];
5064
+ {
5065
+ const end = new Date(`${today}T00:00:00Z`).getTime();
5066
+ for (let i = days - 1; i >= 0; i -= 1) dayKeys.push(new Date(end - i * 86_400_000).toISOString().slice(0, 10));
5067
+ }
5068
+ const byDay = new Map((Array.isArray(data?.daily) ? data.daily : []).map((d) => [d.day, d]));
5069
+ const series = dayKeys.map((day) => {
5070
+ const d = byDay.get(day) || {};
5071
+ return {
5072
+ day,
5073
+ input: Number(d.input) || 0,
5074
+ output: Number(d.output) || 0,
5075
+ cacheRead: Number(d.cacheRead) || 0,
5076
+ cacheWrite: Number(d.cacheWrite) || 0,
5077
+ total: Number(d.total) || 0,
5078
+ turns: Number(d.turns) || 0,
5079
+ };
5080
+ });
5081
+ const windowTotal = series.reduce((sum, d) => sum + d.total, 0);
5082
+ const models = (Array.isArray(data?.models) ? data.models : []).map((m) => {
5083
+ const spark = new Map((Array.isArray(m.daily) ? m.daily : []).map((d) => [d.day, Number(d.total) || 0]));
5084
+ const total = Number(m.total) || 0;
5085
+ return {
5086
+ model: String(m.model || "?"),
5087
+ providers: Number(m.providers) || 0,
5088
+ turns: Number(m.turns) || 0,
5089
+ input: Number(m.input) || 0,
5090
+ output: Number(m.output) || 0,
5091
+ cacheRead: Number(m.cacheRead) || 0,
5092
+ cacheWrite: Number(m.cacheWrite) || 0,
5093
+ total,
5094
+ share: windowTotal > 0 ? total / windowTotal : 0,
5095
+ sparkline: dayKeys.map((day) => spark.get(day) || 0),
5096
+ };
5097
+ });
5098
+ const win = (key) => {
5099
+ const w = data?.windows?.[key] || {};
5100
+ return {
5101
+ input: Number(w.input) || 0, output: Number(w.output) || 0,
5102
+ cacheRead: Number(w.cacheRead) || 0, cacheWrite: Number(w.cacheWrite) || 0,
5103
+ total: Number(w.total) || 0, turns: Number(w.turns) || 0, sessions: Number(w.sessions) || 0,
5104
+ };
5105
+ };
5106
+ return {
5107
+ loading: Boolean(summary.loading),
5108
+ error: summary.error || null,
5109
+ loaded: Boolean(data),
5110
+ scope: data?.scope === "mine" ? "mine" : "cluster",
5111
+ days,
5112
+ today,
5113
+ preset,
5114
+ selectedProviders: Array.from(selected),
5115
+ providers,
5116
+ windows: { day: win("day"), week: win("week"), month: win("month") },
5117
+ series,
5118
+ windowTotal,
5119
+ models,
5120
+ classes: (Array.isArray(data?.classes) ? data.classes : []).map((c) => ({
5121
+ chargeClass: String(c.chargeClass || "?"), total: Number(c.total) || 0, turns: Number(c.turns) || 0,
5122
+ })),
5123
+ };
5124
+ }
5125
+
4977
5126
  export function selectProviderTable(state) {
4978
5127
  const budget = state.budget || {};
4979
5128
  const nowMs = Date.now();
@@ -530,6 +530,26 @@ export function createInitialState({ mode = "local", branding = null, docs = nul
530
530
  // why on the session row too, not only on this screen. See
531
531
  // docs/proposals/providers-and-budgets-meters.md.
532
532
  budget: {
533
+ // Which tab of the Budget screen is up: the per-provider table
534
+ // ("providers") or the cluster summary ("summary").
535
+ tab: "providers",
536
+ // The Cluster summary tab: totals for today / week / month, the
537
+ // per-day series and the per-model pivot, over a provider filter.
538
+ summary: {
539
+ loading: false,
540
+ error: null,
541
+ fetchedAt: 0,
542
+ // 14, 30 or 90 — the chart's and the model table's window.
543
+ days: 14,
544
+ // Provider filter. `preset` is what the picker shows as the
545
+ // headline choice; `providers` is the exact list the request
546
+ // carried (empty = every provider). A custom pick clears the
547
+ // preset.
548
+ preset: "all",
549
+ providers: [],
550
+ // The last answer, verbatim from getProviderUsageSummary.
551
+ data: null,
552
+ },
533
553
  // A first load, with nothing on screen yet.
534
554
  loading: false,
535
555
  // A re-read WITH numbers already on screen. Separate from