pilotswarm 0.5.58 → 0.5.60
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.
- package/README.md +6 -0
- package/mcp/dist/src/context.d.ts +2 -0
- package/mcp/dist/src/context.d.ts.map +1 -1
- package/mcp/dist/src/context.js +3 -1
- package/mcp/dist/src/context.js.map +1 -1
- package/mcp/dist/src/tools/agent-packages.js +1 -1
- package/mcp/dist/src/tools/agent-packages.js.map +1 -1
- package/mcp/dist/src/tools/capabilities.d.ts +4 -0
- package/mcp/dist/src/tools/capabilities.d.ts.map +1 -1
- package/mcp/dist/src/tools/capabilities.js +4 -0
- package/mcp/dist/src/tools/capabilities.js.map +1 -1
- package/package.json +2 -2
- package/ui/core/src/controller.js +58 -20
- package/ui/core/src/formatting.js +18 -9
- package/ui/core/src/history.js +81 -25
- package/ui/core/src/index.js +2 -0
- package/ui/core/src/moa.js +47 -0
- package/ui/core/src/reducer.js +51 -7
- package/ui/core/src/selectors.js +67 -64
- package/ui/core/src/session-errors.js +113 -11
- package/ui/core/src/state.js +1 -0
- package/ui/react/src/components.js +1 -0
- package/ui/react/src/web-app.js +345 -200
- package/web/api/router.js +1 -1
- package/web/api/ws.js +43 -3
- package/web/authz.js +6 -1
- package/web/dist/assets/{abnfDiagram-VRR7QNED-CCTGbkH5.js → abnfDiagram-VRR7QNED-CXEHJkTQ.js} +1 -1
- package/web/dist/assets/{arc-w8Hl2ORd.js → arc-lInHlEVm.js} +1 -1
- package/web/dist/assets/{architectureDiagram-ZJ3FMSHR-DAFM73jL.js → architectureDiagram-ZJ3FMSHR-vrocx6re.js} +1 -1
- package/web/dist/assets/{blockDiagram-677ZJIJ3-BYfTQFe7.js → blockDiagram-677ZJIJ3-B1KA5QIB.js} +1 -1
- package/web/dist/assets/{c4Diagram-LMCZKHZV-bNF2gRsg.js → c4Diagram-LMCZKHZV-Du9xJMjz.js} +1 -1
- package/web/dist/assets/channel-6wPrR6sC.js +1 -0
- package/web/dist/assets/{chunk-2Q5K7J3B-DhqJnJ4W.js → chunk-2Q5K7J3B-BuHucQOQ.js} +1 -1
- package/web/dist/assets/{chunk-32BRIVSS-Jg1a6n_3.js → chunk-32BRIVSS-T-AE5Yz0.js} +1 -1
- package/web/dist/assets/{chunk-5VM5RSS4-y7NKpClZ.js → chunk-5VM5RSS4-B_kTsNzt.js} +1 -1
- package/web/dist/assets/{chunk-EX3LRPZG-Lks3EhVc.js → chunk-EX3LRPZG-CtqgceBQ.js} +1 -1
- package/web/dist/assets/{chunk-JWPE2WC7-BjcSkfk2.js → chunk-JWPE2WC7-C_Fv9QUd.js} +1 -1
- package/web/dist/assets/{chunk-MOJQB5TN-USDZsR-1.js → chunk-MOJQB5TN-D5GeF8ZZ.js} +1 -1
- package/web/dist/assets/{chunk-RYQCIY6F--HnsBTqS.js → chunk-RYQCIY6F-Cg63wDst.js} +1 -1
- package/web/dist/assets/{chunk-V7JOEXUC-CUql3Oy3.js → chunk-V7JOEXUC-Bz6G3lev.js} +1 -1
- package/web/dist/assets/{chunk-VR4S4FIN-CpS-l3FG.js → chunk-VR4S4FIN-DKs_hvUD.js} +1 -1
- package/web/dist/assets/{chunk-XXDRQBXY-Bjb7ifTV.js → chunk-XXDRQBXY-B9AtUlbn.js} +1 -1
- package/web/dist/assets/classDiagram-OUVF2IWQ-vvXyIfbC.js +1 -0
- package/web/dist/assets/classDiagram-v2-EOCWNBFH-vvXyIfbC.js +1 -0
- package/web/dist/assets/{cose-bilkent-JH36ORCC-CmY3-Xrd.js → cose-bilkent-JH36ORCC-rAG6oS0i.js} +1 -1
- package/web/dist/assets/{cynefin-VYW2F7L2-DVtcyDi5.js → cynefin-VYW2F7L2-CUy2C8UT.js} +1 -1
- package/web/dist/assets/{cynefinDiagram-TSTJHNR4-BPqkLecJ.js → cynefinDiagram-TSTJHNR4-C1W8blXH.js} +1 -1
- package/web/dist/assets/{dagre-VKFMJZFB-B73fSRpn.js → dagre-VKFMJZFB-DC0XqwcC.js} +1 -1
- package/web/dist/assets/{diagram-FQU43EPY-uRCPZyuW.js → diagram-FQU43EPY-COAY9zCP.js} +1 -1
- package/web/dist/assets/{diagram-G47NLZAW-CHs_l9pw.js → diagram-G47NLZAW-DLPr8eWG.js} +1 -1
- package/web/dist/assets/{diagram-NH7WQ7WH-BDs35ueJ.js → diagram-NH7WQ7WH-DoNgwoDz.js} +1 -1
- package/web/dist/assets/{diagram-OA4YK3LP-Dsv48zWW.js → diagram-OA4YK3LP-D3-5TINE.js} +1 -1
- package/web/dist/assets/{diagram-WEI45ONY-Bty-lxLj.js → diagram-WEI45ONY-DplCkBJC.js} +1 -1
- package/web/dist/assets/{ebnfDiagram-CCIWWBDH-DgaxsuDg.js → ebnfDiagram-CCIWWBDH-dvcVh7yr.js} +1 -1
- package/web/dist/assets/{erDiagram-Q63AITRT-CR6l4OsK.js → erDiagram-Q63AITRT-Cde8cTY6.js} +1 -1
- package/web/dist/assets/{flowDiagram-23GEKE2U-4y1ts4PX.js → flowDiagram-23GEKE2U-MGMNsh2E.js} +1 -1
- package/web/dist/assets/{ganttDiagram-NO4QXBWP-CyKdJ2e9.js → ganttDiagram-NO4QXBWP-BiKw7AfS.js} +1 -1
- package/web/dist/assets/{gitGraphDiagram-IHSO6WYX-Ct5ShF3i.js → gitGraphDiagram-IHSO6WYX-vC7fsylq.js} +1 -1
- package/web/dist/assets/index-D9Ab1VTY.css +1 -0
- package/web/dist/assets/index-DDAyy127.js +24 -0
- package/web/dist/assets/{infoDiagram-FWYZ7A6U-uWoTXOM3.js → infoDiagram-FWYZ7A6U-Du1uirB0.js} +1 -1
- package/web/dist/assets/{ishikawaDiagram-FXEZZL3T-BTlDV_pc.js → ishikawaDiagram-FXEZZL3T-Dk--Qshr.js} +1 -1
- package/web/dist/assets/{journeyDiagram-5HDEW3XC-_R-XB78s.js → journeyDiagram-5HDEW3XC-iDE4zf_N.js} +1 -1
- package/web/dist/assets/{kanban-definition-HUTT4EX6-D7iwBjoS.js → kanban-definition-HUTT4EX6-D7WI8iRR.js} +1 -1
- package/web/dist/assets/{linear-BugN16AP.js → linear-B1_kxCBK.js} +1 -1
- package/web/dist/assets/{mermaid.core-De_KIbl-.js → mermaid.core-DNmC5O4Y.js} +4 -4
- package/web/dist/assets/{mindmap-definition-LN4V7U3C-B72NDgcU.js → mindmap-definition-LN4V7U3C-DIbLKLMA.js} +1 -1
- package/web/dist/assets/{papaparse.min-BsD41u4P.js → papaparse.min-BdWinjY-.js} +1 -1
- package/web/dist/assets/{pegDiagram-2B236MQR-C6oifn4x.js → pegDiagram-2B236MQR-CkxxR07G.js} +1 -1
- package/web/dist/assets/{pieDiagram-ENE6RG2P-Cpn0_Hp6.js → pieDiagram-ENE6RG2P-Dxvp1mn7.js} +1 -1
- package/web/dist/assets/pilotswarm-493nqGmy.js +98 -0
- package/web/dist/assets/{quadrantDiagram-ABIIQ3AL-CJT4OoDA.js → quadrantDiagram-ABIIQ3AL-CrL0hjZW.js} +1 -1
- package/web/dist/assets/{railroadDiagram-RFXS5EU6-BKtBN8XC.js → railroadDiagram-RFXS5EU6-CmVmFBPa.js} +1 -1
- package/web/dist/assets/{requirementDiagram-TGXJPOKE-Dw7BCEzo.js → requirementDiagram-TGXJPOKE-DJc3NRXb.js} +1 -1
- package/web/dist/assets/{sankeyDiagram-HTMAVEWB-Avmr1rvJ.js → sankeyDiagram-HTMAVEWB-BJNqWqBb.js} +1 -1
- package/web/dist/assets/{sequenceDiagram-DBY2YBRQ-BRNnslq1.js → sequenceDiagram-DBY2YBRQ-C0wddECV.js} +1 -1
- package/web/dist/assets/{sizeCapture-X5ZJPWSS-BNmM8zTz.js → sizeCapture-X5ZJPWSS-Cw0dqPWS.js} +1 -1
- package/web/dist/assets/{stateDiagram-2N3HPSRC-CKXaP1Y6.js → stateDiagram-2N3HPSRC-C5793RHZ.js} +1 -1
- package/web/dist/assets/stateDiagram-v2-6OUMAXLB-qGaRayHj.js +1 -0
- package/web/dist/assets/{swimlanes-5IMT3BWC-Dkeka0gO.js → swimlanes-5IMT3BWC-Bhpm77Zu.js} +2 -2
- package/web/dist/assets/swimlanesDiagram-G3AALYLV-BXjNM_Zw.js +8 -0
- package/web/dist/assets/{timeline-definition-FHXFAJF6-5hTTq-SL.js → timeline-definition-FHXFAJF6-CwbE4NsH.js} +1 -1
- package/web/dist/assets/{vennDiagram-L72KCM5P-DL8MolqK.js → vennDiagram-L72KCM5P-DZnJEL_w.js} +1 -1
- package/web/dist/assets/{wardleyDiagram-EHGQE667-CwGhy6eW.js → wardleyDiagram-EHGQE667-DwTgBDev.js} +1 -1
- package/web/dist/assets/{xychartDiagram-FW5EYKEG-Dn4T-3Dx.js → xychartDiagram-FW5EYKEG-BiPjN3Qc.js} +1 -1
- package/web/dist/index.html +3 -3
- package/web/runtime.js +81 -44
- package/web/server.js +1 -0
- package/web/dist/assets/channel-s4nVWOVf.js +0 -1
- package/web/dist/assets/classDiagram-OUVF2IWQ-tj8tRjww.js +0 -1
- package/web/dist/assets/classDiagram-v2-EOCWNBFH-tj8tRjww.js +0 -1
- package/web/dist/assets/index-DaRnh5NC.css +0 -1
- package/web/dist/assets/index-aFRNNWe9.js +0 -24
- package/web/dist/assets/pilotswarm-9Szh1sEC.js +0 -99
- package/web/dist/assets/stateDiagram-v2-6OUMAXLB-Dr0juUsm.js +0 -1
- package/web/dist/assets/swimlanesDiagram-G3AALYLV-q-jLf0ZX.js +0 -8
package/README.md
CHANGED
|
@@ -260,3 +260,9 @@ Docs: [Quick Start](https://github.com/affandar/pilotswarm/blob/main/docs/quicks
|
|
|
260
260
|
[MCP Setup](https://github.com/affandar/pilotswarm/blob/main/docs/user-guide/mcp-local-setup.md) ·
|
|
261
261
|
[Web API Reference](https://github.com/affandar/pilotswarm/blob/main/docs/api/reference.md) ·
|
|
262
262
|
[Architecture / Layering](https://github.com/affandar/pilotswarm/blob/main/docs/architecture/layering.md)
|
|
263
|
+
|
|
264
|
+
## Master of Agents
|
|
265
|
+
|
|
266
|
+
The desktop portal includes a personal multi-session workspace with resizable
|
|
267
|
+
chat/canvas panels, one focused composer, and zen mode. Layouts save automatically.
|
|
268
|
+
See the [MoA guide](https://github.com/affandar/PilotSwarm/blob/main/docs/user-guide/master-of-agents.md).
|
|
@@ -73,6 +73,8 @@ interface ServerContextBase {
|
|
|
73
73
|
ownershipEnforced: boolean;
|
|
74
74
|
defaultVisibility: string;
|
|
75
75
|
systemVisibility: string;
|
|
76
|
+
adminScope?: string;
|
|
77
|
+
policyVersion?: number;
|
|
76
78
|
};
|
|
77
79
|
/** True when running over the Web API (`--api-url`); false in direct mode. */
|
|
78
80
|
webMode: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,gBAAgB,EAEhB,6BAA6B,EAS7B,qBAAqB,EAErB,cAAc,EACd,KAAK,uBAAuB,EAC5B,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,KAAK,UAAU,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D;;;;;;;;GAQG;AACH,KAAK,UAAU,GACT;IACE;;;OAGG;IACH,GAAG,EAAE,SAAS,CAAC;IACf;;;;;OAKG;IACH,GAAG,EAAE,6BAA6B,CAAC;CACtC,GACC;IAAE,GAAG,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,IAAI,CAAA;CAAE,CAAC;AAE/B,MAAM,MAAM,aAAa,GAAG,iBAAiB,GAAG,UAAU,CAAC;AAE3D,UAAU,iBAAiB;IACvB,MAAM,EAAE,gBAAgB,CAAC;IACzB;;;;OAIG;IACH,IAAI,EAAE,uBAAuB,CAAC;IAC9B,KAAK,EAAE,SAAS,CAAC;IACjB;;;;;OAKG;IACH,aAAa,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACxC;;;;;OAKG;IACH,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IACzB;;;;;;OAMG;IACH,KAAK,EAAE,OAAO,CAAC;IACf,oEAAoE;IACpE,SAAS,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;IACnC;;;;;;OAMG;IACH,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE;QAAE,iBAAiB,EAAE,OAAO,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,gBAAgB,EAEhB,6BAA6B,EAS7B,qBAAqB,EAErB,cAAc,EACd,KAAK,uBAAuB,EAC5B,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,KAAK,UAAU,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D;;;;;;;;GAQG;AACH,KAAK,UAAU,GACT;IACE;;;OAGG;IACH,GAAG,EAAE,SAAS,CAAC;IACf;;;;;OAKG;IACH,GAAG,EAAE,6BAA6B,CAAC;CACtC,GACC;IAAE,GAAG,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,IAAI,CAAA;CAAE,CAAC;AAE/B,MAAM,MAAM,aAAa,GAAG,iBAAiB,GAAG,UAAU,CAAC;AAE3D,UAAU,iBAAiB;IACvB,MAAM,EAAE,gBAAgB,CAAC;IACzB;;;;OAIG;IACH,IAAI,EAAE,uBAAuB,CAAC;IAC9B,KAAK,EAAE,SAAS,CAAC;IACjB;;;;;OAKG;IACH,aAAa,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACxC;;;;;OAKG;IACH,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IACzB;;;;;;OAMG;IACH,KAAK,EAAE,OAAO,CAAC;IACf,oEAAoE;IACpE,SAAS,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;IACnC;;;;;;OAMG;IACH,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE;QAAE,iBAAiB,EAAE,OAAO,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACxI,8EAA8E;IAC9E,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACrC,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrE;;;;;;OAMG;IACH,gBAAgB,EAAE,WAAW,EAAE,CAAC;IAChC;;;;;OAKG;IACH,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B;;;;;OAKG;IACH,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,oBAAoB;IACjC,wFAAwF;IACxF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB;;;;OAIG;IACH,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;CACvC;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,CAAC,CAmNtF"}
|
package/mcp/dist/src/context.js
CHANGED
|
@@ -10,7 +10,7 @@ export async function createContext(opts) {
|
|
|
10
10
|
let graph = null;
|
|
11
11
|
let admin = false;
|
|
12
12
|
let ctxRole = null;
|
|
13
|
-
let ctxAuthz = { ownershipEnforced: false, defaultVisibility: "private", systemVisibility: "read" };
|
|
13
|
+
let ctxAuthz = { ownershipEnforced: false, defaultVisibility: "private", systemVisibility: "read", adminScope: "unrestricted", policyVersion: 0 };
|
|
14
14
|
let webAgents = null;
|
|
15
15
|
if (opts.apiUrl) {
|
|
16
16
|
// Web API mode (supported): no database credentials in this process.
|
|
@@ -55,6 +55,8 @@ export async function createContext(opts) {
|
|
|
55
55
|
ownershipEnforced: Boolean(boot.authz.ownershipEnforced),
|
|
56
56
|
defaultVisibility: String(boot.authz.defaultVisibility || "private"),
|
|
57
57
|
systemVisibility: String(boot.authz.systemVisibility || "read"),
|
|
58
|
+
adminScope: String(boot.authz.adminScope || "unrestricted"),
|
|
59
|
+
policyVersion: Number(boot.authz.policyVersion) || 0,
|
|
58
60
|
};
|
|
59
61
|
}
|
|
60
62
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,gBAAgB,EAChB,0BAA0B,EAE1B,sBAAsB,EACtB,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAElB,UAAU,EACV,cAAc,GAKjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAqHnD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAA0B;IAC1D,IAAI,MAAwB,CAAC;IAC7B,IAAI,IAA6B,CAAC;IAClC,gEAAgE;IAChE,IAAI,OAAO,GAAe,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IACnD,IAAI,KAAgB,CAAC;IACrB,IAAI,KAAK,GAAsB,IAAI,CAAC;IACpC,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,OAAO,GAAkB,IAAI,CAAC;IAClC,IAAI,QAAQ,GAAG,EAAE,iBAAiB,EAAE,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,7 +18,7 @@ export function registerAgentPackageTools(server, ctx) {
|
|
|
18
18
|
server.registerTool("list_agent_packages", {
|
|
19
19
|
title: "List Agent Packages",
|
|
20
20
|
description: "List registry agent packages visible to this credential: shared packages plus your own "
|
|
21
|
-
+ "user-scope ones (admins see all). Each row carries the active version (semver, sha, size) "
|
|
21
|
+
+ "user-scope ones (unrestricted admins see all; cluster-scoped admins use ordinary access). Each row carries the active version (semver, sha, size) "
|
|
22
22
|
+ "and its manifest (agents/skills/tools).",
|
|
23
23
|
inputSchema: {},
|
|
24
24
|
}, withToolErrors(async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-packages.js","sourceRoot":"","sources":["../../../src/tools/agent-packages.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE7E;;;;;;;;;GASG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAAiB,EAAE,GAAkB;IAC3E,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;IACpB,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,KAAK,KAAK;QAAE,OAAO;IAC5C,MAAM,KAAK,GAAG,IAAI,CAAC;IAEnB,MAAM,CAAC,YAAY,CACf,qBAAqB,EACrB;QACI,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EACP,yFAAyF;cACvF,
|
|
1
|
+
{"version":3,"file":"agent-packages.js","sourceRoot":"","sources":["../../../src/tools/agent-packages.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,10 @@ export declare function buildCapabilities(ctx: ServerContext): {
|
|
|
14
14
|
admin: boolean;
|
|
15
15
|
role: string | null;
|
|
16
16
|
ownership_enforced: boolean;
|
|
17
|
+
admin_scope: string;
|
|
18
|
+
authz_policy_version: number;
|
|
19
|
+
user_resource_bypass: boolean;
|
|
20
|
+
system_session_admin: boolean;
|
|
17
21
|
default_visibility: string;
|
|
18
22
|
viewerScopedGroups: boolean;
|
|
19
23
|
facts: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../../src/tools/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGnD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,aAAa
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../../src/tools/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGnD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,aAAa;;;;;;;;;;;;;;;;;;;;;;;;EAsCnD;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,QA0C5E"}
|
|
@@ -19,6 +19,10 @@ export function buildCapabilities(ctx) {
|
|
|
19
19
|
// refused with the reason in the error.
|
|
20
20
|
role: ctx.role ?? null,
|
|
21
21
|
ownership_enforced: ctx.authz?.ownershipEnforced ?? false,
|
|
22
|
+
admin_scope: ctx.authz?.adminScope ?? "unrestricted",
|
|
23
|
+
authz_policy_version: ctx.authz?.policyVersion ?? 0,
|
|
24
|
+
user_resource_bypass: ctx.admin && ctx.authz?.adminScope !== "cluster",
|
|
25
|
+
system_session_admin: ctx.admin,
|
|
22
26
|
default_visibility: ctx.authz?.defaultVisibility ?? "private",
|
|
23
27
|
// Session groups are private per-user organization: list_session_groups
|
|
24
28
|
// returns only the caller's groups, session views carry viewer_group_id
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../../src/tools/capabilities.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../../src/tools/capabilities.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.
|
|
3
|
+
"version": "0.5.60",
|
|
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.
|
|
84
|
+
"pilotswarm-sdk": "0.5.60",
|
|
85
85
|
"react": "^19.2.4",
|
|
86
86
|
"react-dom": "^19.2.4",
|
|
87
87
|
"ws": "^8.18.2"
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
} from "./history.js";
|
|
15
15
|
import { applySessionUsageEvent, cloneContextUsageSnapshot } from "./context-usage.js";
|
|
16
16
|
import { validateCanvasAction, formatCanvasActionPrompt, createCanvasActionLimiter } from "./canvas-actions.js";
|
|
17
|
-
import {
|
|
17
|
+
import { shouldKeepSessionWarning } from "./session-errors.js";
|
|
18
18
|
import {
|
|
19
19
|
computeLegacyLayout,
|
|
20
20
|
getBaseSessionPaneHeight,
|
|
@@ -164,12 +164,12 @@ function classifyNavigationLoadError(error) {
|
|
|
164
164
|
}
|
|
165
165
|
|
|
166
166
|
// A 404/NOT_FOUND on a per-session data loop is TERMINAL: the session was
|
|
167
|
-
// deleted
|
|
168
|
-
//
|
|
167
|
+
// deleted or no longer accessible. A permission denial must clear retained
|
|
168
|
+
// content; network/server failures remain retryable.
|
|
169
169
|
function isSessionGoneError(error) {
|
|
170
170
|
const status = Number(error?.status);
|
|
171
171
|
const code = String(error?.code || "").toUpperCase();
|
|
172
|
-
return status === 404 || code === "NOT_FOUND";
|
|
172
|
+
return status === 404 || status === 403 || code === "NOT_FOUND" || code === "FORBIDDEN";
|
|
173
173
|
}
|
|
174
174
|
|
|
175
175
|
async function loadSessionCatalogPageWindow(transport) {
|
|
@@ -423,7 +423,7 @@ function buildSessionMergePatch(previousSession, nextSession) {
|
|
|
423
423
|
patch.waitReason = null;
|
|
424
424
|
changed = true;
|
|
425
425
|
}
|
|
426
|
-
if (
|
|
426
|
+
if (shouldKeepSessionWarning(previousSession, nextSession)) {
|
|
427
427
|
if (patch.error !== previousSession.error) {
|
|
428
428
|
patch.error = previousSession.error;
|
|
429
429
|
changed = true;
|
|
@@ -2550,6 +2550,8 @@ export class PilotSwarmUiController {
|
|
|
2550
2550
|
// A folder row can never be "gone" from the session catalog: it is not
|
|
2551
2551
|
// a session. Only sessions/groupsLoaded may remove one.
|
|
2552
2552
|
if (isSessionGroupRowId(sessionId)) return;
|
|
2553
|
+
// An older in-flight catalog read must not undo an access revocation.
|
|
2554
|
+
this.sessionRefreshSeq = (this.sessionRefreshSeq || 0) + 1;
|
|
2553
2555
|
if (this.activeSessionSubscriptionId === sessionId) {
|
|
2554
2556
|
this.detachActiveSession();
|
|
2555
2557
|
}
|
|
@@ -3253,6 +3255,8 @@ export class PilotSwarmUiController {
|
|
|
3253
3255
|
*/
|
|
3254
3256
|
revealCreatedSession() {
|
|
3255
3257
|
if (this.getState().admin?.visible) this.closeAdminConsole();
|
|
3258
|
+
this.closeBudget();
|
|
3259
|
+
this.dispatch({ type: "ui/revealCreatedSession", sessionId: this.getState().sessions.activeSessionId });
|
|
3256
3260
|
this.setFocus(FOCUS_REGIONS.PROMPT);
|
|
3257
3261
|
}
|
|
3258
3262
|
|
|
@@ -5452,7 +5456,9 @@ export class PilotSwarmUiController {
|
|
|
5452
5456
|
return;
|
|
5453
5457
|
}
|
|
5454
5458
|
await this.ensureSessionHistory(sessionId, { force: true });
|
|
5459
|
+
if (this.getState().sessions.activeSessionId !== sessionId) return;
|
|
5455
5460
|
await this.syncSessionDetail(sessionId).catch(() => {});
|
|
5461
|
+
if (this.getState().sessions.activeSessionId !== sessionId) return;
|
|
5456
5462
|
this.attachActiveSession(sessionId);
|
|
5457
5463
|
this.ensureInspectorData().catch(() => {});
|
|
5458
5464
|
// Canvas snapshot rides the selection burst. Invalidate-then-fetch on
|
|
@@ -5588,8 +5594,9 @@ export class PilotSwarmUiController {
|
|
|
5588
5594
|
* history pipeline recognizes the canonical prefix and keeps it out of
|
|
5589
5595
|
* the portal chat pane; the transcript still records it for provenance.
|
|
5590
5596
|
*/
|
|
5591
|
-
submitCanvasAction(sessionId, message) {
|
|
5597
|
+
submitCanvasAction(sessionId, message, slot = 1) {
|
|
5592
5598
|
if (!sessionId) return Promise.resolve({ ok: false, reason: "no session" });
|
|
5599
|
+
if (!Number.isInteger(slot) || slot < 1 || slot > 5) return Promise.resolve({ ok: false, reason: "invalid canvas slot" });
|
|
5593
5600
|
// Creator-only, mirrored from the server's enforcement (the server is
|
|
5594
5601
|
// the authority; this is the friendly refusal). The canvas mutates —
|
|
5595
5602
|
// a shared viewer may be looking at a different revision than the one
|
|
@@ -5599,7 +5606,7 @@ export class PilotSwarmUiController {
|
|
|
5599
5606
|
// longer pre-refuses non-owners: a write-shared collaborator's click
|
|
5600
5607
|
// must reach the agent, and the server's refusal for a read-only
|
|
5601
5608
|
// viewer comes back as the result's reason.
|
|
5602
|
-
const contract = this.getState().canvas.bySessionId[sessionId]?.responseContract || null;
|
|
5609
|
+
const contract = this.getState().canvas.bySessionId[canvasPrefKey(sessionId, slot)]?.responseContract || null;
|
|
5603
5610
|
const verdict = validateCanvasAction(contract, message);
|
|
5604
5611
|
if (!verdict.ok) return Promise.resolve(verdict);
|
|
5605
5612
|
if (!this.canvasActionLimiters) this.canvasActionLimiters = new Map();
|
|
@@ -5745,6 +5752,10 @@ export class PilotSwarmUiController {
|
|
|
5745
5752
|
|
|
5746
5753
|
mergeSessionEvent(sessionId, event) {
|
|
5747
5754
|
if (!sessionId || !event) return false;
|
|
5755
|
+
if (event.eventType === "session.access_revoked") {
|
|
5756
|
+
this.handleSessionGone(sessionId);
|
|
5757
|
+
return true;
|
|
5758
|
+
}
|
|
5748
5759
|
// Plane-synthesized canvas events are TRANSIENT: they update canvas
|
|
5749
5760
|
// state and nothing else. They carry no seq — letting them into
|
|
5750
5761
|
// history would corrupt the replay cursor — and they must never
|
|
@@ -6005,15 +6016,42 @@ export class PilotSwarmUiController {
|
|
|
6005
6016
|
this.maybeFlushQueuedOutbox(sessionId, session);
|
|
6006
6017
|
}
|
|
6007
6018
|
|
|
6019
|
+
async openCreatedSession(created, options = {}) {
|
|
6020
|
+
const sessionId = created.sessionId;
|
|
6021
|
+
// Creation is explicit navigation, even if a paged/stale catalog or
|
|
6022
|
+
// the current filters omit the new row. Seed the response, preserve
|
|
6023
|
+
// the outgoing draft, and latch the same visibility rules as a link.
|
|
6024
|
+
// Invalidate catalog reads that started before this row existed.
|
|
6025
|
+
this.sessionRefreshSeq = (this.sessionRefreshSeq || 0) + 1;
|
|
6026
|
+
if (this.getState().ui.promptEdit) this.exitPendingPromptEdit({ restoreDraft: true });
|
|
6027
|
+
this.dispatch({ type: "sessions/selected", sessionId });
|
|
6028
|
+
this.dispatch({ type: "ui/sequenceExpandedTurns", turns: [] });
|
|
6029
|
+
this.dispatch({ type: "ui/sequenceSelectedTurn", turn: null });
|
|
6030
|
+
this.dispatch({ type: "sessions/navigationIntent", sessionId });
|
|
6031
|
+
this.dispatch({ type: "sessions/merged", session: normalizeSessionListRow({
|
|
6032
|
+
...created,
|
|
6033
|
+
...(options.groupId ? { viewerGroupId: options.groupId } : {}),
|
|
6034
|
+
}) });
|
|
6035
|
+
this.revealCreatedSession();
|
|
6036
|
+
this.dispatch({ type: "ui/status", text: `Created session ${sessionId.slice(0, 8)}` });
|
|
6037
|
+
// A follow-up read failure must not masquerade as a failed create and
|
|
6038
|
+
// invite a duplicate. The regular refresh loop can finish hydration.
|
|
6039
|
+
try {
|
|
6040
|
+
await this.loadSession(sessionId);
|
|
6041
|
+
} catch (error) {
|
|
6042
|
+
if (this.getState().sessions.activeSessionId === sessionId) {
|
|
6043
|
+
this.dispatch({ type: "ui/status", text: `Created session ${sessionId.slice(0, 8)}; could not load it yet: ${error?.message || error}` });
|
|
6044
|
+
}
|
|
6045
|
+
}
|
|
6046
|
+
this.scheduleSessionsRefresh(0);
|
|
6047
|
+
}
|
|
6048
|
+
|
|
6008
6049
|
async createSession(options = {}) {
|
|
6009
6050
|
try {
|
|
6010
6051
|
const requestOptions = this.applyActiveGroupDefault(options);
|
|
6011
6052
|
const created = await this.transport.createSession(requestOptions);
|
|
6012
6053
|
await this.placeCreatedSessionInGroup(created, requestOptions.groupId ?? null);
|
|
6013
|
-
await this.
|
|
6014
|
-
await this.loadSession(created.sessionId);
|
|
6015
|
-
this.revealCreatedSession();
|
|
6016
|
-
this.dispatch({ type: "ui/status", text: `Created session ${created.sessionId.slice(0, 8)}` });
|
|
6054
|
+
await this.openCreatedSession(created, requestOptions);
|
|
6017
6055
|
return created;
|
|
6018
6056
|
} catch (error) {
|
|
6019
6057
|
this.dispatch({ type: "ui/status", text: error?.message || String(error) || "Failed to create session" });
|
|
@@ -6033,13 +6071,7 @@ export class PilotSwarmUiController {
|
|
|
6033
6071
|
// session that was just created, and a lost count only reorders a list.
|
|
6034
6072
|
this._recordAgentPickerUse(agentName);
|
|
6035
6073
|
await this.placeCreatedSessionInGroup(created, requestOptions.groupId ?? null);
|
|
6036
|
-
await this.
|
|
6037
|
-
await this.loadSession(created.sessionId);
|
|
6038
|
-
this.revealCreatedSession();
|
|
6039
|
-
this.dispatch({
|
|
6040
|
-
type: "ui/status",
|
|
6041
|
-
text: `Created ${formatAgentDisplayTitle(agentName, options.title)} session ${created.sessionId.slice(0, 8)}`,
|
|
6042
|
-
});
|
|
6074
|
+
await this.openCreatedSession(created, requestOptions);
|
|
6043
6075
|
return created;
|
|
6044
6076
|
} catch (error) {
|
|
6045
6077
|
this.dispatch({ type: "ui/status", text: error?.message || String(error) || "Failed to create session" });
|
|
@@ -9649,10 +9681,16 @@ export class PilotSwarmUiController {
|
|
|
9649
9681
|
...(olderHistory.events || []),
|
|
9650
9682
|
...(history?.events || []),
|
|
9651
9683
|
];
|
|
9684
|
+
// A page can split an assistant message from its turn
|
|
9685
|
+
// boundary. Reclassify the combined durable window while
|
|
9686
|
+
// retaining this visit's preview identity and reasoning.
|
|
9687
|
+
const existingChatById = new Map((history?.chat || []).map((item) => [item.id, item]));
|
|
9688
|
+
const combinedHistory = buildHistoryModel(combinedEvents, { requestedLimit: combinedEvents.length });
|
|
9652
9689
|
history = {
|
|
9690
|
+
...history,
|
|
9653
9691
|
chat: dedupeChatMessages([
|
|
9654
|
-
...
|
|
9655
|
-
...(history?.chat || []),
|
|
9692
|
+
...combinedHistory.chat.map((item) => ({ ...existingChatById.get(item.id), ...item })),
|
|
9693
|
+
...(history?.chat || []).filter((item) => item.liveTurn || item.optimistic),
|
|
9656
9694
|
]),
|
|
9657
9695
|
activity: [
|
|
9658
9696
|
...(olderHistory.activity || []),
|
|
@@ -617,7 +617,9 @@ export function extractHttpLinks(source = "") {
|
|
|
617
617
|
.filter((token) => token.href);
|
|
618
618
|
}
|
|
619
619
|
|
|
620
|
-
function parseInlineMarkdownRuns(source) {
|
|
620
|
+
function parseInlineMarkdownRuns(source, depth = 0) {
|
|
621
|
+
// Keep pathological model output from exhausting the JS call stack.
|
|
622
|
+
if (depth >= 32) return [{ text: String(source || ""), color: null, bold: false, underline: false }];
|
|
621
623
|
const tokens = tokenizeInlineMarkdown(source);
|
|
622
624
|
const runs = [];
|
|
623
625
|
|
|
@@ -626,12 +628,16 @@ function parseInlineMarkdownRuns(source) {
|
|
|
626
628
|
pushTextRun(runs, token.text, { color: "cyan" });
|
|
627
629
|
continue;
|
|
628
630
|
}
|
|
629
|
-
if (token.type === "strong") {
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
631
|
+
if (token.type === "strong" || token.type === "em") {
|
|
632
|
+
// Emphasis may contain links (e.g. **[Download](artifact://...)**).
|
|
633
|
+
// Preserve their href so the portal can render its artifact card;
|
|
634
|
+
// flattening token.text here leaves raw Markdown in the transcript.
|
|
635
|
+
for (const run of parseInlineMarkdownRuns(token.text, depth + 1)) {
|
|
636
|
+
pushTextRun(runs, run.text, {
|
|
637
|
+
...run,
|
|
638
|
+
...(token.type === "strong" ? { bold: true } : { underline: true }),
|
|
639
|
+
});
|
|
640
|
+
}
|
|
635
641
|
continue;
|
|
636
642
|
}
|
|
637
643
|
if (token.type === "link") {
|
|
@@ -1050,7 +1056,9 @@ export function parseMarkdownLines(input, options = {}) {
|
|
|
1050
1056
|
|
|
1051
1057
|
const headingMatch = /^(#{1,6})\s+(.*)$/.exec(rawLine);
|
|
1052
1058
|
if (headingMatch) {
|
|
1053
|
-
lines.push(
|
|
1059
|
+
lines.push(parseInlineMarkdownRuns(headingMatch[2]).map((run) => ({
|
|
1060
|
+
...run, color: run.color || "white", bold: true,
|
|
1061
|
+
})));
|
|
1054
1062
|
continue;
|
|
1055
1063
|
}
|
|
1056
1064
|
|
|
@@ -1106,6 +1114,7 @@ export function buildMessageCardLines({
|
|
|
1106
1114
|
bodyColor = null,
|
|
1107
1115
|
fitToContent = false,
|
|
1108
1116
|
tableMode = null,
|
|
1117
|
+
cardKey = null,
|
|
1109
1118
|
} = {}) {
|
|
1110
1119
|
const maxWidth = Math.max(fitToContent ? 12 : 20, Number(width) || (fitToContent ? 12 : 20));
|
|
1111
1120
|
const maxContentWidth = Math.max(1, maxWidth - 4);
|
|
@@ -1130,7 +1139,7 @@ export function buildMessageCardLines({
|
|
|
1130
1139
|
: lineRuns))
|
|
1131
1140
|
: sentinelBodyLines;
|
|
1132
1141
|
return [
|
|
1133
|
-
{ kind: "cardStart", runs: titleRuns, borderColor },
|
|
1142
|
+
{ kind: "cardStart", runs: titleRuns, borderColor, ...(cardKey ? { cardKey } : {}) },
|
|
1134
1143
|
...sentinelTinted,
|
|
1135
1144
|
{ kind: "cardEnd" },
|
|
1136
1145
|
[{ text: "", color: null }],
|
package/ui/core/src/history.js
CHANGED
|
@@ -2,6 +2,7 @@ import { formatHumanDurationSeconds, formatTimestamp, shortModelName, shortSessi
|
|
|
2
2
|
import { isCanvasActionContent, parseCanvasActionContent } from "./canvas-actions.js";
|
|
3
3
|
import { formatCompactionActivityRuns } from "./context-usage.js";
|
|
4
4
|
import { canonicalSystemTitle } from "./system-titles.js";
|
|
5
|
+
import { buildSessionWarning } from "./session-errors.js";
|
|
5
6
|
|
|
6
7
|
export const DEFAULT_HISTORY_EVENT_LIMIT = 300;
|
|
7
8
|
export const HISTORY_EVENT_LIMIT_STEPS = [
|
|
@@ -16,8 +17,13 @@ export const HISTORY_EVENT_LIMIT_STEPS = [
|
|
|
16
17
|
// noisy sessions (thousands of tool/orchestration events between messages)
|
|
17
18
|
// load transcript pages instead of raw-stream pages.
|
|
18
19
|
export const CHAT_HISTORY_EVENT_TYPES = [
|
|
20
|
+
"session.error",
|
|
19
21
|
"user.message",
|
|
20
22
|
"assistant.message",
|
|
23
|
+
// Needed to distinguish interim assistant output from the final answer
|
|
24
|
+
// when an older transcript page is loaded.
|
|
25
|
+
"session.turn_completed",
|
|
26
|
+
"session.turn_stopped",
|
|
21
27
|
"system.message",
|
|
22
28
|
// Session regeneration boundary — rendered as an inline epoch divider in
|
|
23
29
|
// the transcript, so it must survive backward chat-history paging.
|
|
@@ -246,14 +252,18 @@ function comparableMessageText(message) {
|
|
|
246
252
|
export function parseAskedAndAnsweredExchange(text) {
|
|
247
253
|
const source = String(text || "").replace(/\r\n/g, "\n").trim();
|
|
248
254
|
const prefix = 'The user was asked: "';
|
|
249
|
-
const marker = '"\nThe user responded: "';
|
|
250
|
-
|
|
251
255
|
if (!source.startsWith(prefix) || !source.endsWith('"')) return null;
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
const
|
|
256
|
+
// Multi-writer sessions include the answering participant in the runtime
|
|
257
|
+
// wrapper. This is still an agent question followed by a human answer,
|
|
258
|
+
// not a human-authored copy of the entire question. Identity comes from
|
|
259
|
+
// the event's sender metadata, never from this display-only wrapper.
|
|
260
|
+
const marker = /"\nThe user responded(?: \(answered by [^\r\n]+?\))?: "/g;
|
|
261
|
+
marker.lastIndex = prefix.length;
|
|
262
|
+
const match = marker.exec(source);
|
|
263
|
+
if (!match) return null;
|
|
264
|
+
|
|
265
|
+
const question = source.slice(prefix.length, match.index);
|
|
266
|
+
const answer = source.slice(marker.lastIndex, -1);
|
|
257
267
|
if (!question.trim() || !answer.trim()) return null;
|
|
258
268
|
return { question, answer };
|
|
259
269
|
}
|
|
@@ -395,11 +405,17 @@ function sharesClientMessageId(left, right) {
|
|
|
395
405
|
function areMessagesEquivalent(left, right) {
|
|
396
406
|
if (!left || !right) return false;
|
|
397
407
|
if (left.role !== right.role) return false;
|
|
408
|
+
// Identical text in separate model messages still represents separate
|
|
409
|
+
// preview slots (and one may later become the final answer).
|
|
410
|
+
if (left.role === "assistant" && left.messageId && right.messageId) {
|
|
411
|
+
return left.messageId === right.messageId;
|
|
412
|
+
}
|
|
398
413
|
// Canvas revision lines are platform-minted, exactly-once (one durable
|
|
399
414
|
// event per rev), and share identical text by design (the artifact://
|
|
400
415
|
// link) — the redelivery time-window below would eat rev N-1 on every
|
|
401
416
|
// reload, making the transcript disagree with what live append showed.
|
|
402
|
-
if (left.kind === "canvas-update" || right.kind === "canvas-update"
|
|
417
|
+
if (left.kind === "canvas-update" || right.kind === "canvas-update"
|
|
418
|
+
|| left.kind === "session-warning" || right.kind === "session-warning") {
|
|
403
419
|
return left.kind === right.kind && left.id === right.id;
|
|
404
420
|
}
|
|
405
421
|
|
|
@@ -533,9 +549,10 @@ function buildChatMessage(event, role) {
|
|
|
533
549
|
const messageId = typeof event?.data?.messageId === "string" && event.data.messageId
|
|
534
550
|
? event.data.messageId
|
|
535
551
|
: null;
|
|
552
|
+
const chatRole = deriveChatRole(event, role, text);
|
|
536
553
|
return {
|
|
537
554
|
id: `${event.sessionId}:${event.seq}`,
|
|
538
|
-
role:
|
|
555
|
+
role: chatRole,
|
|
539
556
|
text,
|
|
540
557
|
time: formatTimestamp(event.createdAt),
|
|
541
558
|
createdAt: event.createdAt instanceof Date ? event.createdAt.getTime() : new Date(event.createdAt).getTime(),
|
|
@@ -543,9 +560,38 @@ function buildChatMessage(event, role) {
|
|
|
543
560
|
...(sender ? { sender } : {}),
|
|
544
561
|
...(attachments.length > 0 ? { attachments } : {}),
|
|
545
562
|
...(messageId ? { messageId } : {}),
|
|
563
|
+
...(chatRole === "assistant" ? {
|
|
564
|
+
assistantPreview: true,
|
|
565
|
+
responsePending: true,
|
|
566
|
+
responseFinal: false,
|
|
567
|
+
responseCanFinalize: !event?.data?.parentToolCallId && !event?.data?.toolRequests?.length,
|
|
568
|
+
...(typeof event?.data?.reasoningText === "string" && event.data.reasoningText
|
|
569
|
+
? { liveReasoningText: event.data.reasoningText } : {}),
|
|
570
|
+
} : {}),
|
|
546
571
|
};
|
|
547
572
|
}
|
|
548
573
|
|
|
574
|
+
// A saved assistant.message is not necessarily the answer: a single runTurn
|
|
575
|
+
// can contain many tool-loop utterances. Only its successful durable boundary
|
|
576
|
+
// promotes the last eligible message. Use the same rule for replay and append.
|
|
577
|
+
function settleAssistantResponses(chat, event) {
|
|
578
|
+
const resultType = event?.data?.resultType || event?.data?.result;
|
|
579
|
+
const successful = event?.eventType === "session.turn_completed"
|
|
580
|
+
&& (!resultType || resultType === "completed");
|
|
581
|
+
let finalIndex = -1;
|
|
582
|
+
for (let index = chat.length - 1; index >= 0; index -= 1) {
|
|
583
|
+
if (chat[index]?.responsePending) {
|
|
584
|
+
if (successful && chat[index].responseCanFinalize) finalIndex = index;
|
|
585
|
+
break;
|
|
586
|
+
}
|
|
587
|
+
}
|
|
588
|
+
for (let index = 0; index < chat.length; index += 1) {
|
|
589
|
+
if (chat[index]?.responsePending) chat[index] = {
|
|
590
|
+
...chat[index], responsePending: false, responseFinal: index === finalIndex,
|
|
591
|
+
};
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
|
|
549
595
|
/** Apply one transient `turn` topic snapshot without touching durable events/seq. */
|
|
550
596
|
export function applyLiveTurnToHistory(history, payload, meta = {}) {
|
|
551
597
|
if (!payload) return history;
|
|
@@ -1168,6 +1214,13 @@ export function buildHistoryModel(events = [], options = {}) {
|
|
|
1168
1214
|
|
|
1169
1215
|
for (const event of events) {
|
|
1170
1216
|
storedEvents.push(event);
|
|
1217
|
+
if (event.eventType === "session.error") {
|
|
1218
|
+
const warning = buildSessionWarning(event);
|
|
1219
|
+
if (warning) chat.push(warning);
|
|
1220
|
+
}
|
|
1221
|
+
if (["user.message", "session.turn_completed", "session.turn_stopped", "session.epoch_committed"].includes(event.eventType)) {
|
|
1222
|
+
settleAssistantResponses(chat, event);
|
|
1223
|
+
}
|
|
1171
1224
|
if (event.eventType === "user.message") {
|
|
1172
1225
|
activity.push(...buildEmbeddedSystemNoticeActivityItems(event, "user"));
|
|
1173
1226
|
const message = buildChatMessage(event, "user");
|
|
@@ -1262,6 +1315,17 @@ export function appendEventToHistory(history, event) {
|
|
|
1262
1315
|
stoppedMessageIds: Array.isArray(history?.stoppedMessageIds) ? history.stoppedMessageIds : [],
|
|
1263
1316
|
};
|
|
1264
1317
|
|
|
1318
|
+
if (event.eventType === "session.error") {
|
|
1319
|
+
const warning = buildSessionWarning(event);
|
|
1320
|
+
if (warning && !next.chat.some(item => item.id === warning.id)) {
|
|
1321
|
+
next.chat = clampHistoryItems([...next.chat, warning], loadedEventLimit);
|
|
1322
|
+
}
|
|
1323
|
+
}
|
|
1324
|
+
|
|
1325
|
+
if (["user.message", "session.turn_completed", "session.turn_stopped", "session.epoch_committed"].includes(event.eventType)) {
|
|
1326
|
+
settleAssistantResponses(next.chat, event);
|
|
1327
|
+
}
|
|
1328
|
+
|
|
1265
1329
|
// A stopped turn leaves a durable session.turn_stopped carrying the
|
|
1266
1330
|
// interrupted prompt's clientMessageIds. Record them and retroactively
|
|
1267
1331
|
// flag any matching transcript message (the user.message usually lands
|
|
@@ -1331,22 +1395,14 @@ export function appendEventToHistory(history, event) {
|
|
|
1331
1395
|
if (liveIndex >= 0) {
|
|
1332
1396
|
const settledAt = Date.now();
|
|
1333
1397
|
const liveStartedAt = Number(liveItem?.liveStartedAt || liveItem?.createdAt) || settledAt;
|
|
1334
|
-
|
|
1335
|
-
//
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
streamSettling: true,
|
|
1343
|
-
liveKey: liveItem?.liveKey || message.messageId,
|
|
1344
|
-
liveStartedAt,
|
|
1345
|
-
liveReasoningText: liveItem?.reasoningText || "",
|
|
1346
|
-
streamSettleDelayMs,
|
|
1347
|
-
streamSettleAt: settledAt + streamSettleDelayMs + 180,
|
|
1348
|
-
});
|
|
1349
|
-
}
|
|
1398
|
+
// Keep the disclosure identity even for short streams. Committing
|
|
1399
|
+
// an interim message must not reset expansion or its scroll box.
|
|
1400
|
+
Object.assign(message, {
|
|
1401
|
+
streamSettling: true,
|
|
1402
|
+
liveKey: liveItem?.liveKey || message.messageId,
|
|
1403
|
+
liveStartedAt,
|
|
1404
|
+
liveReasoningText: message.liveReasoningText || liveItem?.reasoningText || "",
|
|
1405
|
+
});
|
|
1350
1406
|
next.chat.splice(Math.min(liveIndex, next.chat.length), 0, message);
|
|
1351
1407
|
}
|
|
1352
1408
|
else next.chat.push(message);
|
package/ui/core/src/index.js
CHANGED
|
@@ -16,3 +16,5 @@ 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
18
|
export * from "./table-layout.js";
|
|
19
|
+
|
|
20
|
+
export * from "./moa.js";
|