@rubytech/create-maxy-code 0.1.311 → 0.1.312

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 (55) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/lib/graph-style/dist/index.d.ts +5 -2
  3. package/payload/platform/lib/graph-style/dist/index.d.ts.map +1 -1
  4. package/payload/platform/lib/graph-style/dist/index.js +65 -2
  5. package/payload/platform/lib/graph-style/dist/index.js.map +1 -1
  6. package/payload/platform/lib/graph-style/src/__tests__/parity.test.ts +218 -0
  7. package/payload/platform/lib/graph-style/src/index.ts +53 -2
  8. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +20 -2
  9. package/payload/platform/plugins/docs/references/admin-ui.md +19 -1
  10. package/payload/platform/services/claude-session-manager/dist/reseat-ledger.d.ts +10 -0
  11. package/payload/platform/services/claude-session-manager/dist/reseat-ledger.d.ts.map +1 -1
  12. package/payload/platform/services/claude-session-manager/dist/reseat-ledger.js +62 -53
  13. package/payload/platform/services/claude-session-manager/dist/reseat-ledger.js.map +1 -1
  14. package/payload/platform/services/claude-session-manager/dist/scope-record.d.ts.map +1 -1
  15. package/payload/platform/services/claude-session-manager/dist/scope-record.js +35 -53
  16. package/payload/platform/services/claude-session-manager/dist/scope-record.js.map +1 -1
  17. package/payload/platform/services/claude-session-manager/dist/sidecar-store.d.ts +45 -0
  18. package/payload/platform/services/claude-session-manager/dist/sidecar-store.d.ts.map +1 -0
  19. package/payload/platform/services/claude-session-manager/dist/sidecar-store.js +118 -0
  20. package/payload/platform/services/claude-session-manager/dist/sidecar-store.js.map +1 -0
  21. package/payload/server/public/assets/{AccessGate-ChFLk-rp.js → AccessGate-Dh5A79FU.js} +1 -1
  22. package/payload/server/public/assets/{AdminLoginScreens-DU6zgbk5.js → AdminLoginScreens-B8s2TbT7.js} +1 -1
  23. package/payload/server/public/assets/AdminShell-Cu1zlb6L.js +1 -0
  24. package/payload/server/public/assets/{Checkbox-CQGLKMXu.js → Checkbox-B_sOAyv1.js} +1 -1
  25. package/payload/server/public/assets/OperatorConversations-hm0Gpu_Q.js +1 -0
  26. package/payload/server/public/assets/{admin-COHPIWdb.js → admin-gZEndvJT.js} +1 -1
  27. package/payload/server/public/assets/{audio-attachment-mime-DL06xo72.js → audio-attachment-mime-B0b89VnH.js} +1 -1
  28. package/payload/server/public/assets/{brand-CN7uSSKl.css → brand-BcNavK6q.css} +1 -1
  29. package/payload/server/public/assets/{browser-L7N4tAOl.js → browser-BUlB5_MD.js} +1 -1
  30. package/payload/server/public/assets/chat-BnceaVl7.js +1 -0
  31. package/payload/server/public/assets/data-3Nl3P5wt.js +1 -0
  32. package/payload/server/public/assets/{graph-Cro3-mgY.js → graph-DMCKpW6P.js} +2 -2
  33. package/payload/server/public/assets/graph-labels-AZLGoVy8.js +1 -0
  34. package/payload/server/public/assets/operator-BF4F7k23.js +1 -0
  35. package/payload/server/public/assets/page-DQUEst1o.js +1 -0
  36. package/payload/server/public/assets/{public-CX148JKi.js → public-G_-UI9nB.js} +1 -1
  37. package/payload/server/public/assets/{public-next-BCItsUbZ.js → public-next-C8_nExQB.js} +1 -1
  38. package/payload/server/public/assets/{useSelectionMode-BHAAhkDg.js → useSelectionMode-Bf6Rt-sl.js} +1 -1
  39. package/payload/server/public/browser.html +6 -6
  40. package/payload/server/public/chat.html +8 -8
  41. package/payload/server/public/data.html +5 -5
  42. package/payload/server/public/graph.html +8 -8
  43. package/payload/server/public/index.html +8 -8
  44. package/payload/server/public/operator.html +10 -10
  45. package/payload/server/public/public-next.html +9 -9
  46. package/payload/server/public/public.html +7 -7
  47. package/payload/server/server.js +832 -444
  48. package/payload/server/public/assets/AdminShell-BJCYb1v5.js +0 -1
  49. package/payload/server/public/assets/OperatorConversations-CHEQTz20.js +0 -1
  50. package/payload/server/public/assets/chat-B_jYIH9a.js +0 -1
  51. package/payload/server/public/assets/data-BmSTKHR1.js +0 -1
  52. package/payload/server/public/assets/graph-labels-WQQn6JIJ.js +0 -1
  53. package/payload/server/public/assets/operator-B4I25isQ.js +0 -1
  54. package/payload/server/public/assets/page-B-6ZQ4JG.js +0 -1
  55. /package/payload/server/public/assets/{brand-MKGM8WZp.js → brand-BQ_u9UdS.js} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rubytech/create-maxy-code",
3
- "version": "0.1.311",
3
+ "version": "0.1.312",
4
4
  "description": "Install Maxy — AI for Productive People",
5
5
  "bin": {
6
6
  "create-maxy-code": "./dist/index.js"
@@ -64,8 +64,11 @@ export declare function formatMessageTimestamp(iso: string): string | null;
64
64
  /**
65
65
  * 24-char canvas label for a node. Label precedence per label family
66
66
  * (ToolCall.toolName, WorkflowRun startedAt formatted, WorkflowStep.label,
67
- * Person givenName+familyName compose, Agent displayName/slug, Message
68
- * role+timestamp), then a generic fallthrough across curated keys
67
+ * Person givenName+familyName compose, Agent displayName/slug, Job
68
+ * client+#jobId compose, QuoteDocument ref, InboundInvoice
69
+ * supplier+#confirmationNumber compose, WhatsAppGroup clientName,
70
+ * Message role+timestamp), then a generic
71
+ * fallthrough across curated keys
69
72
  * (name, title, summary, givenName, subject, text) — :ConversationArchive
70
73
  * rows (Task 397) carry a stable `title` written by the writer so they pick
71
74
  * up the generic-fallback `title` key naturally. Finally a
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAyFtD,CAAA;AAED,eAAO,MAAM,qBAAqB,YAAY,CAAA;AAE9C,eAAO,MAAM,gBAAgB,EAAE,SAAS,MAAM,EAE7C,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAOzE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,eAAe,EAAE,MAAM,CAAA;CACxB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,kBAAkB,CAU/E;AASD;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACpC;AAKD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI7D;AAED,iEAAiE;AACjE,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIjE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CA0D1D;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAmC3D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAyFtD,CAAA;AAED,eAAO,MAAM,qBAAqB,YAAY,CAAA;AAE9C,eAAO,MAAM,gBAAgB,EAAE,SAAS,MAAM,EAE7C,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAOzE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,eAAe,EAAE,MAAM,CAAA;CACxB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,kBAAkB,CAU/E;AASD;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACpC;AAKD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI7D;AAED,iEAAiE;AACjE,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIjE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAsF1D;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAuD3D"}
@@ -170,8 +170,11 @@ function formatMessageTimestamp(iso) {
170
170
  /**
171
171
  * 24-char canvas label for a node. Label precedence per label family
172
172
  * (ToolCall.toolName, WorkflowRun startedAt formatted, WorkflowStep.label,
173
- * Person givenName+familyName compose, Agent displayName/slug, Message
174
- * role+timestamp), then a generic fallthrough across curated keys
173
+ * Person givenName+familyName compose, Agent displayName/slug, Job
174
+ * client+#jobId compose, QuoteDocument ref, InboundInvoice
175
+ * supplier+#confirmationNumber compose, WhatsAppGroup clientName,
176
+ * Message role+timestamp), then a generic
177
+ * fallthrough across curated keys
175
178
  * (name, title, summary, givenName, subject, text) — :ConversationArchive
176
179
  * rows (Task 397) carry a stable `title` written by the writer so they pick
177
180
  * up the generic-fallback `title` key naturally. Finally a
@@ -217,6 +220,38 @@ function pickShortLabel(node) {
217
220
  return v.length > 24 ? v.slice(0, 24) + '…' : v;
218
221
  }
219
222
  }
223
+ else if (primaryLabel === 'Job') {
224
+ const client = typeof props.client === 'string' ? props.client : '';
225
+ const jobId = typeof props.jobId === 'string' ? props.jobId : '';
226
+ const composed = [client, jobId.length > 0 ? `#${jobId}` : '']
227
+ .filter((s) => s.length > 0)
228
+ .join(' ');
229
+ if (composed.length > 0) {
230
+ return composed.length > 24 ? composed.slice(0, 24) + '…' : composed;
231
+ }
232
+ }
233
+ else if (primaryLabel === 'QuoteDocument') {
234
+ const ref = typeof props.ref === 'string' ? props.ref : '';
235
+ if (ref.length > 0) {
236
+ return ref.length > 24 ? ref.slice(0, 24) + '…' : ref;
237
+ }
238
+ }
239
+ else if (primaryLabel === 'InboundInvoice') {
240
+ const supplier = typeof props.supplier === 'string' ? props.supplier : '';
241
+ const conf = typeof props.confirmationNumber === 'string' ? props.confirmationNumber : '';
242
+ const composed = [supplier, conf.length > 0 ? `#${conf}` : '']
243
+ .filter((s) => s.length > 0)
244
+ .join(' ');
245
+ if (composed.length > 0) {
246
+ return composed.length > 24 ? composed.slice(0, 24) + '…' : composed;
247
+ }
248
+ }
249
+ else if (primaryLabel === 'WhatsAppGroup') {
250
+ const clientName = typeof props.clientName === 'string' ? props.clientName : '';
251
+ if (clientName.length > 0) {
252
+ return clientName.length > 24 ? clientName.slice(0, 24) + '…' : clientName;
253
+ }
254
+ }
220
255
  else if (primaryLabel === 'Message') {
221
256
  const role = typeof props.role === 'string' ? props.role : '';
222
257
  const roleShort = role === 'user' ? 'user'
@@ -283,6 +318,34 @@ function pickDisplayName(node) {
283
318
  if (v.length > 0)
284
319
  return v;
285
320
  }
321
+ else if (primaryLabel === 'Job') {
322
+ const client = typeof props.client === 'string' ? props.client : '';
323
+ const jobId = typeof props.jobId === 'string' ? props.jobId : '';
324
+ const composed = [client, jobId.length > 0 ? `#${jobId}` : '']
325
+ .filter((s) => s.length > 0)
326
+ .join(' ');
327
+ if (composed.length > 0)
328
+ return composed;
329
+ }
330
+ else if (primaryLabel === 'QuoteDocument') {
331
+ const ref = typeof props.ref === 'string' ? props.ref : '';
332
+ if (ref.length > 0)
333
+ return ref;
334
+ }
335
+ else if (primaryLabel === 'InboundInvoice') {
336
+ const supplier = typeof props.supplier === 'string' ? props.supplier : '';
337
+ const conf = typeof props.confirmationNumber === 'string' ? props.confirmationNumber : '';
338
+ const composed = [supplier, conf.length > 0 ? `#${conf}` : '']
339
+ .filter((s) => s.length > 0)
340
+ .join(' ');
341
+ if (composed.length > 0)
342
+ return composed;
343
+ }
344
+ else if (primaryLabel === 'WhatsAppGroup') {
345
+ const clientName = typeof props.clientName === 'string' ? props.clientName : '';
346
+ if (clientName.length > 0)
347
+ return clientName;
348
+ }
286
349
  for (const k of ['name', 'title', 'summary', 'givenName', 'subject', 'text']) {
287
350
  const v = props[k];
288
351
  if (typeof v === 'string' && v.length > 0)
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -112,3 +112,221 @@ describe("pickDisplayName", () => {
112
112
  ).toBe(longName);
113
113
  });
114
114
  });
115
+
116
+ describe("pickShortLabel — Job", () => {
117
+ it("composes client + #jobId", () => {
118
+ expect(
119
+ pickShortLabel({
120
+ id: "x",
121
+ labels: ["Job"],
122
+ properties: { client: "Mr R French", jobId: "1842" },
123
+ }),
124
+ ).toBe("Mr R French #1842");
125
+ });
126
+
127
+ it("client only", () => {
128
+ expect(
129
+ pickShortLabel({ id: "x", labels: ["Job"], properties: { client: "Mr R French" } }),
130
+ ).toBe("Mr R French");
131
+ });
132
+
133
+ it("jobId only", () => {
134
+ expect(
135
+ pickShortLabel({ id: "x", labels: ["Job"], properties: { jobId: "1842" } }),
136
+ ).toBe("#1842");
137
+ });
138
+
139
+ it("neither falls back to the label", () => {
140
+ expect(
141
+ pickShortLabel({ id: "x", labels: ["Job"], properties: { status: "quoting" } }),
142
+ ).toBe("Job");
143
+ });
144
+
145
+ it("truncates an over-cap composition to 24 chars + ellipsis", () => {
146
+ const out = pickShortLabel({
147
+ id: "x",
148
+ labels: ["Job"],
149
+ properties: { client: "Construction Client With An Extremely Long Trading Name Ltd", jobId: "1842" },
150
+ });
151
+ expect(out.length).toBeLessThanOrEqual(25);
152
+ expect(out.endsWith("…")).toBe(true);
153
+ });
154
+ });
155
+
156
+ describe("pickDisplayName — Job", () => {
157
+ it("returns the untruncated composition", () => {
158
+ expect(
159
+ pickDisplayName({
160
+ id: "x",
161
+ labels: ["Job"],
162
+ properties: { client: "Construction Client With An Extremely Long Trading Name Ltd", jobId: "1842" },
163
+ }),
164
+ ).toBe("Construction Client With An Extremely Long Trading Name Ltd #1842");
165
+ });
166
+
167
+ it("Job with neither falls back to the label", () => {
168
+ expect(
169
+ pickDisplayName({ id: "x", labels: ["Job"], properties: { status: "quoting" } }),
170
+ ).toBe("Job");
171
+ });
172
+ });
173
+
174
+ describe("pickShortLabel — QuoteDocument", () => {
175
+ it("renders the ref document number", () => {
176
+ expect(
177
+ pickShortLabel({ id: "x", labels: ["QuoteDocument"], properties: { ref: "Q-1042" } }),
178
+ ).toBe("Q-1042");
179
+ });
180
+
181
+ it("falls back to the label when ref is absent", () => {
182
+ expect(
183
+ pickShortLabel({ id: "x", labels: ["QuoteDocument"], properties: { status: "draft" } }),
184
+ ).toBe("QuoteDocument");
185
+ });
186
+
187
+ it("truncates an over-cap ref to 24 chars + ellipsis", () => {
188
+ const out = pickShortLabel({
189
+ id: "x",
190
+ labels: ["QuoteDocument"],
191
+ properties: { ref: "Q-this-quote-reference-is-far-too-long-to-fit" },
192
+ });
193
+ expect(out.length).toBeLessThanOrEqual(25);
194
+ expect(out.endsWith("…")).toBe(true);
195
+ });
196
+ });
197
+
198
+ describe("pickDisplayName — QuoteDocument", () => {
199
+ it("returns the untruncated ref", () => {
200
+ expect(
201
+ pickDisplayName({
202
+ id: "x",
203
+ labels: ["QuoteDocument"],
204
+ properties: { ref: "Q-this-quote-reference-is-far-too-long-to-fit" },
205
+ }),
206
+ ).toBe("Q-this-quote-reference-is-far-too-long-to-fit");
207
+ });
208
+
209
+ it("falls back to the label when ref is absent", () => {
210
+ expect(
211
+ pickDisplayName({ id: "x", labels: ["QuoteDocument"], properties: { status: "draft" } }),
212
+ ).toBe("QuoteDocument");
213
+ });
214
+ });
215
+
216
+ describe("pickShortLabel — InboundInvoice", () => {
217
+ it("composes supplier + #confirmationNumber", () => {
218
+ expect(
219
+ pickShortLabel({
220
+ id: "x",
221
+ labels: ["InboundInvoice"],
222
+ properties: { supplier: "Travis Perkins", confirmationNumber: "88123" },
223
+ }),
224
+ ).toBe("Travis Perkins #88123");
225
+ });
226
+
227
+ it("supplier only", () => {
228
+ expect(
229
+ pickShortLabel({ id: "x", labels: ["InboundInvoice"], properties: { supplier: "Travis Perkins" } }),
230
+ ).toBe("Travis Perkins");
231
+ });
232
+
233
+ it("confirmationNumber only", () => {
234
+ expect(
235
+ pickShortLabel({ id: "x", labels: ["InboundInvoice"], properties: { confirmationNumber: "88123" } }),
236
+ ).toBe("#88123");
237
+ });
238
+
239
+ it("neither falls back to the label", () => {
240
+ expect(
241
+ pickShortLabel({ id: "x", labels: ["InboundInvoice"], properties: { status: "pending" } }),
242
+ ).toBe("InboundInvoice");
243
+ });
244
+
245
+ it("truncates an over-cap composition to 24 chars + ellipsis", () => {
246
+ const out = pickShortLabel({
247
+ id: "x",
248
+ labels: ["InboundInvoice"],
249
+ properties: { supplier: "Builders Merchant With An Extremely Long Trading Name Ltd", confirmationNumber: "88123" },
250
+ });
251
+ expect(out.length).toBeLessThanOrEqual(25);
252
+ expect(out.endsWith("…")).toBe(true);
253
+ });
254
+ });
255
+
256
+ describe("pickDisplayName — InboundInvoice", () => {
257
+ it("returns the untruncated composition", () => {
258
+ expect(
259
+ pickDisplayName({
260
+ id: "x",
261
+ labels: ["InboundInvoice"],
262
+ properties: { supplier: "Builders Merchant With An Extremely Long Trading Name Ltd", confirmationNumber: "88123" },
263
+ }),
264
+ ).toBe("Builders Merchant With An Extremely Long Trading Name Ltd #88123");
265
+ });
266
+
267
+ it("neither falls back to the label", () => {
268
+ expect(
269
+ pickDisplayName({ id: "x", labels: ["InboundInvoice"], properties: { status: "pending" } }),
270
+ ).toBe("InboundInvoice");
271
+ });
272
+ });
273
+
274
+ describe("pickShortLabel — WhatsAppGroup", () => {
275
+ it("renders clientName", () => {
276
+ expect(
277
+ pickShortLabel({ id: "x", labels: ["WhatsAppGroup"], properties: { clientName: "Mr R French", groupId: "123@g.us" } }),
278
+ ).toBe("Mr R French");
279
+ });
280
+
281
+ it("falls back to the label when clientName is absent (groupId is not used for display)", () => {
282
+ expect(
283
+ pickShortLabel({ id: "x", labels: ["WhatsAppGroup"], properties: { groupId: "123@g.us" } }),
284
+ ).toBe("WhatsAppGroup");
285
+ });
286
+
287
+ it("truncates an over-cap clientName to 24 chars + ellipsis", () => {
288
+ const out = pickShortLabel({
289
+ id: "x",
290
+ labels: ["WhatsAppGroup"],
291
+ properties: { clientName: "Construction Client With An Extremely Long Trading Name Ltd" },
292
+ });
293
+ expect(out.length).toBeLessThanOrEqual(25);
294
+ expect(out.endsWith("…")).toBe(true);
295
+ });
296
+ });
297
+
298
+ describe("pickDisplayName — WhatsAppGroup", () => {
299
+ it("returns the untruncated clientName", () => {
300
+ expect(
301
+ pickDisplayName({
302
+ id: "x",
303
+ labels: ["WhatsAppGroup"],
304
+ properties: { clientName: "Construction Client With An Extremely Long Trading Name Ltd" },
305
+ }),
306
+ ).toBe("Construction Client With An Extremely Long Trading Name Ltd");
307
+ });
308
+
309
+ it("falls back to the label when clientName is absent", () => {
310
+ expect(
311
+ pickDisplayName({ id: "x", labels: ["WhatsAppGroup"], properties: { groupId: "123@g.us" } }),
312
+ ).toBe("WhatsAppGroup");
313
+ });
314
+ });
315
+
316
+ describe("regression — Job and generic labels unaffected by the new branches", () => {
317
+ it("Job still composes client + #jobId", () => {
318
+ expect(
319
+ pickShortLabel({ id: "x", labels: ["Job"], properties: { client: "Mr R French", jobId: "1842" } }),
320
+ ).toBe("Mr R French #1842");
321
+ });
322
+ it("Person still composes given+family", () => {
323
+ expect(
324
+ pickShortLabel({ id: "x", labels: ["Person"], properties: { givenName: "Dan", familyName: "Brett" } }),
325
+ ).toBe("Dan Brett");
326
+ });
327
+ it("generic name-bearing node unaffected", () => {
328
+ expect(
329
+ pickShortLabel({ id: "x", labels: ["LocalBusiness"], properties: { name: "Acme" } }),
330
+ ).toBe("Acme");
331
+ });
332
+ });
@@ -203,8 +203,11 @@ export function formatMessageTimestamp(iso: string): string | null {
203
203
  /**
204
204
  * 24-char canvas label for a node. Label precedence per label family
205
205
  * (ToolCall.toolName, WorkflowRun startedAt formatted, WorkflowStep.label,
206
- * Person givenName+familyName compose, Agent displayName/slug, Message
207
- * role+timestamp), then a generic fallthrough across curated keys
206
+ * Person givenName+familyName compose, Agent displayName/slug, Job
207
+ * client+#jobId compose, QuoteDocument ref, InboundInvoice
208
+ * supplier+#confirmationNumber compose, WhatsAppGroup clientName,
209
+ * Message role+timestamp), then a generic
210
+ * fallthrough across curated keys
208
211
  * (name, title, summary, givenName, subject, text) — :ConversationArchive
209
212
  * rows (Task 397) carry a stable `title` written by the writer so they pick
210
213
  * up the generic-fallback `title` key naturally. Finally a
@@ -244,6 +247,34 @@ export function pickShortLabel(node: GraphNodeLike): string {
244
247
  if (v.length > 0) {
245
248
  return v.length > 24 ? v.slice(0, 24) + '…' : v
246
249
  }
250
+ } else if (primaryLabel === 'Job') {
251
+ const client = typeof props.client === 'string' ? props.client : ''
252
+ const jobId = typeof props.jobId === 'string' ? props.jobId : ''
253
+ const composed = [client, jobId.length > 0 ? `#${jobId}` : '']
254
+ .filter((s) => s.length > 0)
255
+ .join(' ')
256
+ if (composed.length > 0) {
257
+ return composed.length > 24 ? composed.slice(0, 24) + '…' : composed
258
+ }
259
+ } else if (primaryLabel === 'QuoteDocument') {
260
+ const ref = typeof props.ref === 'string' ? props.ref : ''
261
+ if (ref.length > 0) {
262
+ return ref.length > 24 ? ref.slice(0, 24) + '…' : ref
263
+ }
264
+ } else if (primaryLabel === 'InboundInvoice') {
265
+ const supplier = typeof props.supplier === 'string' ? props.supplier : ''
266
+ const conf = typeof props.confirmationNumber === 'string' ? props.confirmationNumber : ''
267
+ const composed = [supplier, conf.length > 0 ? `#${conf}` : '']
268
+ .filter((s) => s.length > 0)
269
+ .join(' ')
270
+ if (composed.length > 0) {
271
+ return composed.length > 24 ? composed.slice(0, 24) + '…' : composed
272
+ }
273
+ } else if (primaryLabel === 'WhatsAppGroup') {
274
+ const clientName = typeof props.clientName === 'string' ? props.clientName : ''
275
+ if (clientName.length > 0) {
276
+ return clientName.length > 24 ? clientName.slice(0, 24) + '…' : clientName
277
+ }
247
278
  } else if (primaryLabel === 'Message') {
248
279
  const role = typeof props.role === 'string' ? props.role : ''
249
280
  const roleShort =
@@ -300,6 +331,26 @@ export function pickDisplayName(node: GraphNodeLike): string {
300
331
  const slug = typeof props.slug === 'string' ? props.slug : ''
301
332
  const v = dn.length > 0 ? dn : slug
302
333
  if (v.length > 0) return v
334
+ } else if (primaryLabel === 'Job') {
335
+ const client = typeof props.client === 'string' ? props.client : ''
336
+ const jobId = typeof props.jobId === 'string' ? props.jobId : ''
337
+ const composed = [client, jobId.length > 0 ? `#${jobId}` : '']
338
+ .filter((s) => s.length > 0)
339
+ .join(' ')
340
+ if (composed.length > 0) return composed
341
+ } else if (primaryLabel === 'QuoteDocument') {
342
+ const ref = typeof props.ref === 'string' ? props.ref : ''
343
+ if (ref.length > 0) return ref
344
+ } else if (primaryLabel === 'InboundInvoice') {
345
+ const supplier = typeof props.supplier === 'string' ? props.supplier : ''
346
+ const conf = typeof props.confirmationNumber === 'string' ? props.confirmationNumber : ''
347
+ const composed = [supplier, conf.length > 0 ? `#${conf}` : '']
348
+ .filter((s) => s.length > 0)
349
+ .join(' ')
350
+ if (composed.length > 0) return composed
351
+ } else if (primaryLabel === 'WhatsAppGroup') {
352
+ const clientName = typeof props.clientName === 'string' ? props.clientName : ''
353
+ if (clientName.length > 0) return clientName
303
354
  }
304
355
  for (const k of ['name', 'title', 'summary', 'givenName', 'subject', 'text']) {
305
356
  const v = props[k]
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: platform-architecture
3
3
  description: Use when grounding any documented-surface claim about what Maxy ships — plugins, skills, specialists, install/deploy flows, internals. This is the install catalogue, not evidence of what is enabled on the current account. For install state on this account, call `capabilities-here`; for documented surface, cite the `Source:` URL inline.
4
- content-hash: sha256:2dbfcb8246f85a6b6adc588c742acaaa57d81196907dc3bcef07a1c6ae2ad013
4
+ content-hash: sha256:14ea06161a5423a4a55415fac3ef50699469968a7224fa04fa9ace74757c616f
5
5
  brand: maxy-code
6
6
  product-name: Maxy
7
7
  ---
@@ -2309,7 +2309,7 @@ either is a regression.
2309
2309
  | `/sidebar-artefact-content` | Reads a single artefact's bytes for the artefact pane. |
2310
2310
  | `/sidebar-artefact-save` | Persists an artefact edit. |
2311
2311
  | `/attachment` | Per-attachment binary fetch (images, PDFs, etc.). |
2312
- | `/files` | File browser CRUD (list, download, upload, delete). Listings put directories first, then files newest-first by `mtime` (name tie-break) so a just-changed file leads the panel. |
2312
+ | `/files` | File browser CRUD (list, download, upload, delete). Listings put directories first, then files newest-first by `mtime` (name tie-break) so a just-changed file leads the panel. Upload is a raw-body stream (file bytes are the request body; `session_key`/`path`/`filename` in the query) written to disk without buffering — ceiling 2 GB (`MAX_DATA_UPLOAD_BYTES`), over-ceiling bodies abort mid-stream with `413`; the client shows a determinate progress bar. Distinct from the 50 MB in-memory chat-attachment cap. |
2313
2313
 
2314
2314
  **Artefact download resolution.** Clicking a sidebar Artefacts row
2315
2315
  streams the `KnowledgeDocument`'s real backing file, which can live in one of
@@ -2337,6 +2337,24 @@ that folder instead of snapping back to the data root; the hash never reaches
2337
2337
  the server and `/data` has no client router, so the channel is isolated.
2338
2338
  `path=` is cleared at the root for a clean URL.
2339
2339
 
2340
+ **`/data` upload — button and drag-drop.** Besides the Upload button (one OS-picked
2341
+ file, stored under a timestamped name), files and whole folders can be dragged
2342
+ onto the file-browser body to upload into the open folder. A dropped folder's
2343
+ subtree is recreated under the open folder and every contained file uploaded,
2344
+ preserving source names and relative paths (a same-named file in an existing
2345
+ folder is overwritten; empty source subfolders are skipped). The drop region
2346
+ shows an active outline while a drag is over it and is inert wherever the open
2347
+ folder is not writable (outside the operator's own `accounts/<id>/…` subtree),
2348
+ rejecting the drop with the same "Open a folder inside your account to upload"
2349
+ guidance as the button. Each drop reports an uploaded/skipped summary; a file
2350
+ that fails the 50 MB limit, the MIME allowlist, or its HTTP write is skipped
2351
+ individually without aborting the rest, and every uploaded file is indexed for
2352
+ search exactly as the button path is. The server `/files/upload` endpoint takes
2353
+ an optional `relpath` form field (the file's path relative to the drop root); it
2354
+ recreates that path's directories under the open folder, scope-checked level by
2355
+ level, and writes the file under its original basename. A flat upload (no
2356
+ `relpath`) is unchanged.
2357
+
2340
2358
  **`/data` operator surface.** `/data` mounts the operator
2341
2359
  `HeaderMenu` (logo-left / name-centre / burger-right; flyout = Chat / Data /
2342
2360
  Log out) above the toolbar — the burger's Chat item returns to `/`, replacing
@@ -78,7 +78,7 @@ either is a regression.
78
78
  | `/sidebar-artefact-content` | Reads a single artefact's bytes for the artefact pane. |
79
79
  | `/sidebar-artefact-save` | Persists an artefact edit. |
80
80
  | `/attachment` | Per-attachment binary fetch (images, PDFs, etc.). |
81
- | `/files` | File browser CRUD (list, download, upload, delete). Listings put directories first, then files newest-first by `mtime` (name tie-break) so a just-changed file leads the panel. |
81
+ | `/files` | File browser CRUD (list, download, upload, delete). Listings put directories first, then files newest-first by `mtime` (name tie-break) so a just-changed file leads the panel. Upload is a raw-body stream (file bytes are the request body; `session_key`/`path`/`filename` in the query) written to disk without buffering — ceiling 2 GB (`MAX_DATA_UPLOAD_BYTES`), over-ceiling bodies abort mid-stream with `413`; the client shows a determinate progress bar. Distinct from the 50 MB in-memory chat-attachment cap. |
82
82
 
83
83
  **Artefact download resolution.** Clicking a sidebar Artefacts row
84
84
  streams the `KnowledgeDocument`'s real backing file, which can live in one of
@@ -106,6 +106,24 @@ that folder instead of snapping back to the data root; the hash never reaches
106
106
  the server and `/data` has no client router, so the channel is isolated.
107
107
  `path=` is cleared at the root for a clean URL.
108
108
 
109
+ **`/data` upload — button and drag-drop.** Besides the Upload button (one OS-picked
110
+ file, stored under a timestamped name), files and whole folders can be dragged
111
+ onto the file-browser body to upload into the open folder. A dropped folder's
112
+ subtree is recreated under the open folder and every contained file uploaded,
113
+ preserving source names and relative paths (a same-named file in an existing
114
+ folder is overwritten; empty source subfolders are skipped). The drop region
115
+ shows an active outline while a drag is over it and is inert wherever the open
116
+ folder is not writable (outside the operator's own `accounts/<id>/…` subtree),
117
+ rejecting the drop with the same "Open a folder inside your account to upload"
118
+ guidance as the button. Each drop reports an uploaded/skipped summary; a file
119
+ that fails the 50 MB limit, the MIME allowlist, or its HTTP write is skipped
120
+ individually without aborting the rest, and every uploaded file is indexed for
121
+ search exactly as the button path is. The server `/files/upload` endpoint takes
122
+ an optional `relpath` form field (the file's path relative to the drop root); it
123
+ recreates that path's directories under the open folder, scope-checked level by
124
+ level, and writes the file under its original basename. A flat upload (no
125
+ `relpath`) is unchanged.
126
+
109
127
  **`/data` operator surface.** `/data` mounts the operator
110
128
  `HeaderMenu` (logo-left / name-centre / burger-right; flyout = Chat / Data /
111
129
  Log out) above the toolbar — the burger's Chat item returns to `/`, replacing
@@ -25,6 +25,16 @@ export interface ReseatChainResult {
25
25
  * Cycle-guarded by a visited set and a hard depth cap.
26
26
  */
27
27
  export declare function resolveReseatChain(sessionsDir: string, sourceSessionId: string, jsonlExists: (sessionId: string) => boolean, maxDepth?: number): ReseatChainResult;
28
+ /**
29
+ * The inverse of resolveReseatChain. Given a fork id whose own JSONL does not
30
+ * exist yet (claude --fork-session flushes the copied history only at the
31
+ * fork's first turn), walk the ledger back to the nearest ancestor whose JSONL
32
+ * exists, so the resolver can serve that source transcript read-only until the
33
+ * fork materialises. Returns the source id, or null when forkSessionId is not a
34
+ * recorded fork or no ancestor has a JSONL. Cycle-guarded by a visited set and
35
+ * depth-capped, mirroring resolveReseatChain.
36
+ */
37
+ export declare function resolveBridgeSource(sessionsDir: string, forkSessionId: string, jsonlExists: (sessionId: string) => boolean, maxDepth?: number): string | null;
28
38
  export interface ReseatReconcileResult {
29
39
  scanned: number;
30
40
  stopped: number;
@@ -1 +1 @@
1
- {"version":3,"file":"reseat-ledger.d.ts","sourceRoot":"","sources":["../src/reseat-ledger.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAKxC,MAAM,WAAW,YAAY;IAC3B,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,EAAE,EAAE,MAAM,CAAA;CACX;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM,CAErF;AAED,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,EACvB,aAAa,EAAE,MAAM,EACrB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,GACb,IAAI,CAaN;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAWlG;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,EAAE,CAexF;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAUpG;AAED,MAAM,WAAW,iBAAiB;IAChC,+FAA+F;IAC/F,MAAM,EAAE,MAAM,CAAA;IACd,0EAA0E;IAC1E,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,sEAAsE;IACtE,UAAU,EAAE,OAAO,CAAA;IACnB,sFAAsF;IACtF,KAAK,EAAE,OAAO,CAAA;CACf;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,EAC3C,QAAQ,GAAE,MAA+B,GACxC,iBAAiB,CAwBnB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,EACtC,IAAI,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EAC9E,WAAW,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,EAC3C,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,qBAAqB,CAAC,CAchC"}
1
+ {"version":3,"file":"reseat-ledger.d.ts","sourceRoot":"","sources":["../src/reseat-ledger.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAKxC,MAAM,WAAW,YAAY;IAC3B,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,EAAE,EAAE,MAAM,CAAA;CACX;AAcD,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM,CAErF;AAED,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,EACvB,aAAa,EAAE,MAAM,EACrB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,GACb,IAAI,CAQN;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAElG;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,EAAE,CAIxF;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAQpG;AAED,MAAM,WAAW,iBAAiB;IAChC,+FAA+F;IAC/F,MAAM,EAAE,MAAM,CAAA;IACd,0EAA0E;IAC1E,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,sEAAsE;IACtE,UAAU,EAAE,OAAO,CAAA;IACnB,sFAAsF;IACtF,KAAK,EAAE,OAAO,CAAA;CACf;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,EAC3C,QAAQ,GAAE,MAA+B,GACxC,iBAAiB,CAwBnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,EAC3C,QAAQ,GAAE,MAA+B,GACxC,MAAM,GAAG,IAAI,CAiBf;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,EACtC,IAAI,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EAC9E,WAAW,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,EAC3C,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,qBAAqB,CAAC,CAchC"}