@rubytech/create-maxy-code 0.1.365 → 0.1.367

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 (64) hide show
  1. package/dist/index.js +4 -0
  2. package/package.json +1 -1
  3. package/payload/platform/plugins/admin/mcp/dist/content-producer-authoring-skills.d.ts.map +1 -1
  4. package/payload/platform/plugins/admin/mcp/dist/content-producer-authoring-skills.js +5 -4
  5. package/payload/platform/plugins/admin/mcp/dist/content-producer-authoring-skills.js.map +1 -1
  6. package/payload/platform/plugins/admin/mcp/dist/tools/__tests__/account-lifecycle.test.js +1 -1
  7. package/payload/platform/plugins/admin/mcp/dist/tools/__tests__/account-lifecycle.test.js.map +1 -1
  8. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +37 -31
  9. package/payload/platform/plugins/docs/references/admin-ui.md +2 -0
  10. package/payload/platform/plugins/docs/references/graph.md +34 -30
  11. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-write-path-task802.test.js +62 -0
  12. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-write-path-task802.test.js.map +1 -1
  13. package/payload/platform/plugins/memory/mcp/dist/lib/schema-loader.d.ts +14 -0
  14. package/payload/platform/plugins/memory/mcp/dist/lib/schema-loader.d.ts.map +1 -1
  15. package/payload/platform/plugins/memory/mcp/dist/lib/schema-loader.js +18 -0
  16. package/payload/platform/plugins/memory/mcp/dist/lib/schema-loader.js.map +1 -1
  17. package/payload/platform/plugins/memory/mcp/dist/lib/schema-validator.d.ts.map +1 -1
  18. package/payload/platform/plugins/memory/mcp/dist/lib/schema-validator.js +16 -1
  19. package/payload/platform/plugins/memory/mcp/dist/lib/schema-validator.js.map +1 -1
  20. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-search-fields.test.js +40 -0
  21. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-search-fields.test.js.map +1 -1
  22. package/payload/platform/plugins/memory/references/schema-construction.md +7 -0
  23. package/payload/platform/plugins/url-get/mcp/vitest.config.ts +14 -0
  24. package/payload/platform/services/claude-session-manager/dist/session-cap-audit.d.ts +46 -1
  25. package/payload/platform/services/claude-session-manager/dist/session-cap-audit.d.ts.map +1 -1
  26. package/payload/platform/services/claude-session-manager/dist/session-cap-audit.js +131 -7
  27. package/payload/platform/services/claude-session-manager/dist/session-cap-audit.js.map +1 -1
  28. package/payload/platform/services/claude-session-manager/dist/stuck-turn.d.ts +5 -7
  29. package/payload/platform/services/claude-session-manager/dist/stuck-turn.d.ts.map +1 -1
  30. package/payload/platform/services/claude-session-manager/dist/stuck-turn.js +48 -32
  31. package/payload/platform/services/claude-session-manager/dist/stuck-turn.js.map +1 -1
  32. package/payload/platform/templates/agents/admin/IDENTITY.md +1 -1
  33. package/payload/premium-plugins/venture-studio/skills/investor-data-room/SKILL.md +73 -27
  34. package/payload/premium-plugins/writer-craft/PLUGIN.md +1 -1
  35. package/payload/premium-plugins/writer-craft/skills/voice-mirror/SKILL.md +2 -2
  36. package/payload/server/public/assets/{AdminLoginScreens-CJatEEai.js → AdminLoginScreens-B45MFjWG.js} +1 -1
  37. package/payload/server/public/assets/AdminShell-CyZPfbzd.js +1 -0
  38. package/payload/server/public/assets/{Checkbox-DqnBuFEU.js → Checkbox-BPYEJJPq.js} +1 -1
  39. package/payload/server/public/assets/OperatorConversations-Civ7TETM.css +1 -0
  40. package/payload/server/public/assets/{OperatorConversations-BwnO3IUP.js → OperatorConversations-D_o_59Oc.js} +1 -1
  41. package/payload/server/public/assets/{admin-Cocx_If1.js → admin-DcuJ3_xm.js} +1 -1
  42. package/payload/server/public/assets/{browser-BsFHTA93.js → browser-Be9LRtM2.js} +1 -1
  43. package/payload/server/public/assets/{calendar-hwGeTmWC.js → calendar-BeofvK7c.js} +1 -1
  44. package/payload/server/public/assets/chat-BWNFeIjw.js +1 -0
  45. package/payload/server/public/assets/{data-DOjJ8031.js → data-lTmU53k6.js} +1 -1
  46. package/payload/server/public/assets/{graph-DfUM66RH.js → graph-XYK2qT5D.js} +19 -19
  47. package/payload/server/public/assets/{graph-labels-CXt55mIP.js → graph-labels-DNCXtQVn.js} +1 -1
  48. package/payload/server/public/assets/{operator-CRRc0nD-.js → operator-B3hpbhNo.js} +1 -1
  49. package/payload/server/public/assets/page-DFOoEKVK.js +32 -0
  50. package/payload/server/public/assets/{public-Ba5G74iP.js → public-Bd_0QBGJ.js} +1 -1
  51. package/payload/server/public/assets/{rotate-ccw-BfYwa6ew.js → rotate-ccw-BxD1B_G-.js} +1 -1
  52. package/payload/server/public/browser.html +4 -4
  53. package/payload/server/public/calendar.html +4 -4
  54. package/payload/server/public/chat.html +6 -6
  55. package/payload/server/public/data.html +4 -4
  56. package/payload/server/public/graph.html +7 -7
  57. package/payload/server/public/index.html +6 -6
  58. package/payload/server/public/operator.html +8 -8
  59. package/payload/server/public/public.html +6 -6
  60. package/payload/server/server.js +51 -45
  61. package/payload/server/public/assets/AdminShell-D0MDlfI1.js +0 -1
  62. package/payload/server/public/assets/OperatorConversations-DDUzu1h8.css +0 -1
  63. package/payload/server/public/assets/chat-DMssYitp.js +0 -1
  64. package/payload/server/public/assets/page-wUvf2I5u.js +0 -32
@@ -1 +1 @@
1
- {"version":3,"file":"schema-validator.js","sourceRoot":"","sources":["../../src/lib/schema-validator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema-validator.js","sourceRoot":"","sources":["../../src/lib/schema-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD,OAAO,EAAE,YAAY,EAAE,MAAM,2DAA2D,CAAC;AAEzF,MAAM,gBAAgB,GAAG,gBAAgB,CAAC;AAE1C;;;;;GAKG;AACH,SAAS,aAAa,CACpB,UAAkB,EAClB,gBAA+B;IAE/B,IAAI,UAAU,KAAK,gBAAgB;QAAE,OAAO,IAAI,CAAC;IACjD,IAAI,gBAAgB,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC5C,OAAO,UAAU,KAAK,GAAG,gBAAgB,KAAK,CAAC;AACjD,CAAC;AAyCD;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAyB,EACzB,GAAiB,EACjB,UAAgC,EAAE;IAElC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,QAAQ,CAAC;IACtC,MAAM,eAAe,GAAoB,OAAO,CAAC,eAAe,IAAI;QAClE,gBAAgB,EAAE,IAAI;QACtB,MAAM,EAAE,eAAe;KACxB,CAAC;IACF,MAAM,gBAAgB,GAAG,eAAe,CAAC,gBAAgB,CAAC;IAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAChD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,WAAW,CAAC;IAErC,uEAAuE;IACvE,uEAAuE;IACvE,uEAAuE;IACvE,IAAI,CACF,wCAAwC,gBAAgB,IAAI,MAAM,WAAW,eAAe,CAAC,MAAM,cAAc,SAAS,IAAI,QAAQ,EAAE,CACzI,CAAC;IAEF,wEAAwE;IACxE,yBAAyB;IACzB,wEAAwE;IACxE,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,KAAK,CACb,oEAAoE,CACrE,CAAC;IACJ,CAAC;IAED,wEAAwE;IACxE,yDAAyD;IACzD,oCAAoC;IACpC,wEAAwE;IACxE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CACb,4EAA4E,CAC7E,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;IACzC,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC;IACjD,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC;IAErD,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,YAAY,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QACvD,MAAM,kBAAkB,GAAG,UAAU;YACnC,CAAC,CAAC,kBAAkB,UAAU,IAAI;YAClC,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CACF,kCAAkC,aAAa,CAAC,MAAM,CAAC,uCAAuC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,CACvH,CAAC;QACF,MAAM,IAAI,KAAK,CACb,yCAAyC,QAAQ,KAAK,kBAAkB,uBAAuB,QAAQ,kCAAkC,YAAY,IAAI,CAC1J,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC9C,MAAM,gBAAgB,GACpB,MAAM,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC;IAE/D,wEAAwE;IACxE,gEAAgE;IAChE,EAAE;IACF,sEAAsE;IACtE,qEAAqE;IACrE,oEAAoE;IACpE,EAAE;IACF,uEAAuE;IACvE,yEAAyE;IACzE,yEAAyE;IACzE,uEAAuE;IACvE,wEAAwE;IACxE,yEAAyE;IACzE,yEAAyE;IACzE,wEAAwE;IACxE,6CAA6C;IAC7C,wEAAwE;IACxE,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1C,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/C,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC;YAAE,SAAS;QACjD,IAAI,aAAa,CAAC,GAAG,CAAC,UAAU,EAAE,gBAAgB,CAAC,EAAE,CAAC;YACpD,MAAM,IAAI,KAAK,CACb,gCAAgC,GAAG,8BAA8B,GAAG,CAAC,OAAO,cAAc,GAAG,CAAC,UAAU,yBAAyB,CAClI,CAAC;QACJ,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,yDAAyD;IACzD,sEAAsE;IACtE,oEAAoE;IACpE,qEAAqE;IACrE,oEAAoE;IACpE,uEAAuE;IACvE,6DAA6D;IAC7D,wEAAwE;IACxE,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAChE,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1C,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC,UAAU,EAAE,gBAAgB,CAAC,EAAE,CAAC;gBAC3D,IAAI,CACF,6CAA6C,YAAY,aAAa,GAAG,4BAA4B,UAAU,CAAC,UAAU,CAAC,EAAE,CAC9H,CAAC;gBACF,MAAM,IAAI,KAAK,CACb,kBAAkB,GAAG,oBAAoB,YAAY,eAAe,GAAG,CAAC,SAAS,KAAK,GAAG,CAAC,UAAU,yBAAyB,CAC9H,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,yEAAyE;IACzE,gEAAgE;IAChE,wEAAwE;IACxE,4EAA4E;IAC5E,oCAAoC;IACpC,wEAAwE;IACxE,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC/D,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,IAAI,CACF,kCAAkC,YAAY,SAAS,IAAI,4BAA4B,gBAAgB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,CACvI,CAAC;QACF,IAAI,CACF,kDAAkD,YAAY,EAAE,CACjE,CAAC;QACF,OAAO;IACT,CAAC;IAED,wEAAwE;IACxE,wEAAwE;IACxE,2EAA2E;IAC3E,oEAAoE;IACpE,qEAAqE;IACrE,kCAAkC;IAClC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,UAAU,EAAE,gBAAgB,CAAC,EAAE,CAAC;QAC5D,IAAI,CACF,kCAAkC,YAAY,SAAS,IAAI,4BAA4B,gBAAgB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,CACvI,CAAC;QACF,IAAI,CACF,kDAAkD,YAAY,2CAA2C,UAAU,CAAC,UAAU,WAAW,gBAAgB,IAAI,MAAM,EAAE,CACtK,CAAC;QACF,OAAO;IACT,CAAC;IAED,0DAA0D;IAC1D,yEAAyE;IACzE,0EAA0E;IAC1E,+BAA+B;IAC/B,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,IAAI,CACF,kCAAkC,YAAY,wCAAwC,gBAAgB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,CACtI,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,mBAAmB,GAA4B;QACnD,GAAG,UAAU;QACb,SAAS;KACV,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;QACxC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,mBAAmB,CAAC,EAAE,CAAC;YAClD,IAAI,CACF,2CAA2C,YAAY,gCAAgC,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAClH,CAAC;YACF,MAAM,IAAI,KAAK,CACb,2CAA2C,WAAW,CAAC,KAAK,CAAC,cAAc,YAAY,KAAK,UAAU,CAAC,UAAU,GAAG,CACrH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,CACF,2CAA2C,YAAY,oBAAoB,CAC5E,CAAC;IACF,IAAI,CACF,kCAAkC,YAAY,SAAS,IAAI,4BAA4B,gBAAgB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,CACvI,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACxD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,gBAAgB,CACvB,KAAoB,EACpB,UAAmC;IAEnC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,WAAW,CAAC,KAAoB;IACvC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC;IACtD,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAoB;IAC7C,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC;IAC/C,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC;AAED,8DAA8D;AAC9D,SAAS,aAAa,CAAC,MAAgB;IACrC,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;AAChC,CAAC;AAED;;;;;;GAMG;AACH,SAAS,UAAU,CAAC,UAAmC;IACrD,MAAM,KAAK,GAAG,UAAU,CAAC,cAAc,CAAC;IACxC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAChE,MAAM,IAAI,GAAG,UAAU,CAAC,aAAa,CAAC;IACtC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;AACpC,CAAC"}
@@ -101,6 +101,46 @@ describe("memorySearch — fields projection (Task 138)", () => {
101
101
  const res = await memorySearch({ ...baseParams, fields: ["name"] });
102
102
  expect(res[0].related[0].properties).toEqual({ name: "Bob", bio: "long bio" });
103
103
  });
104
+ // Rediscovery regression (Task 1229). Demoting AdminConversation /
105
+ // PublicConversation from the /graph canvas registry
106
+ // (FILTER_TOP_LEVEL_LABELS) must NOT affect memory-search: the
107
+ // message_embedding read path is a separate axis that never consults the
108
+ // canvas allowlist. This guard feeds a conversation-message node through
109
+ // memorySearch and asserts it is returned unfiltered, with its labels and
110
+ // body intact — so any future coupling of memory-search to canvas
111
+ // visibility fails the build.
112
+ it("returns an admin-conversation message node unfiltered (canvas demotion does not gate recall)", async () => {
113
+ hybridMock.mockReset();
114
+ hybridMock.mockResolvedValue({
115
+ mode: "hybrid",
116
+ results: [
117
+ {
118
+ nodeId: "msg-1",
119
+ labels: ["Message", "AssistantMessage"],
120
+ score: 0.91,
121
+ vectorScore: 0.88,
122
+ bm25Score: 0.4,
123
+ related: [],
124
+ properties: {
125
+ body: "the ATM reconciliation ran overnight",
126
+ role: "assistant",
127
+ channel: "webchat",
128
+ },
129
+ },
130
+ ],
131
+ expandMs: 0,
132
+ rawMerged: 1,
133
+ suppressed: 0,
134
+ bm25Bypass: 0,
135
+ threshold: null,
136
+ stageCounts: { expansions: 1, vector: 1, bm25: 0, fused: 1, boosted: 1, deduped: 1, final: 1 },
137
+ });
138
+ const res = await memorySearch({ query: "ATM", accountId: "acc-1" });
139
+ expect(res).toHaveLength(1);
140
+ expect(res[0].nodeId).toBe("msg-1");
141
+ expect(res[0].labels).toEqual(["Message", "AssistantMessage"]);
142
+ expect(res[0].properties.body).toBe("the ATM reconciliation ran overnight");
143
+ });
104
144
  it("emits [memory-search] observability line only when fields is set", async () => {
105
145
  const writes = [];
106
146
  const orig = process.stderr.write;
@@ -1 +1 @@
1
- {"version":3,"file":"memory-search-fields.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/memory-search-fields.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memory-search-fields.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/memory-search-fields.test.ts"],"names":[],"mappings":"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"}
@@ -64,6 +64,13 @@ fields (supplier vs customer), so they stay distinct rather than one label with
64
64
  | Invoice payment | `InvoicePayment` | `accountId`, `invoiceId`, `paymentId`, `amount`, `date`, `paymentType` | JobLogic-exact |
65
65
  | Credit | `Credit` | `accountId`, `creditId`, `amount`, `date` | authored |
66
66
 
67
+ `InvoiceLine`, `InvoicePayment`, and `Credit` carry a line-item monetary `amount`. The global
68
+ synonym map in `schema-base.md` bans `amount` in favour of `totalPaymentDue`, but that is
69
+ **invoice-level** semantics — the total owed on the whole bill. A line item, a single payment, and
70
+ a credit each hold their own value that is genuinely distinct from the invoice total, so they keep
71
+ the JobLogic-exact `amount` field. The contradiction detector (`detectContradictions` in
72
+ `schema-loader.ts`) exempts `amount` for exactly these three labels and nowhere else.
73
+
67
74
  `JobCost.costType` is one of `labour`, `material`, `travel`, `mileage`, `expense`,
68
75
  `subcontractor`, `scheduleOfRates` — the JobLogic cost-line taxonomy. A logged labour day (the
69
76
  old check-in) is a `JobCost` with `costType:'labour'`. `JobCost.priceCalculationType` is `0`
@@ -0,0 +1,14 @@
1
+ import { defineConfig } from "vitest/config";
2
+
3
+ // url-get ships no unit tests — it is a thin node-html-markdown fetch wrapper
4
+ // whose behaviour is exercised end-to-end, not in isolation. The package keeps
5
+ // `"test": "vitest run"` for sweep uniformity, so `passWithNoTests` lets the
6
+ // run exit 0 instead of failing on "No test files found". Add real specs here
7
+ // and this flag becomes a no-op.
8
+ export default defineConfig({
9
+ test: {
10
+ environment: "node",
11
+ include: ["src/**/__tests__/**/*.test.ts"],
12
+ passWithNoTests: true,
13
+ },
14
+ });
@@ -1,18 +1,63 @@
1
- import { type SystemctlRunner } from './systemd-scope.js';
1
+ import { type SystemctlRunner, type SystemctlResult } from './systemd-scope.js';
2
2
  export type Logger = (line: string) => void;
3
3
  /** cgroup v2 `memory.events` is `key value` lines; return the `oom_kill`
4
4
  * count (cumulative cgroup-OOM kills in this scope), or 0 if absent. */
5
5
  export declare function parseMemoryEventsOomKill(blob: string): number;
6
+ /** Pull every `claude-session-*.scope` unit that systemd logged a terminal
7
+ * `Failed with result 'oom-kill'` for out of a journalctl blob. That line
8
+ * fires only when the scope's main process (the claude leader) is OOM-
9
+ * killed — i.e. the whole-scope teardown, the case `memory.events` misses.
10
+ * The survivor line ("The kernel OOM killer killed some processes in this
11
+ * unit.") is deliberately NOT matched: a surviving scope is caught by the
12
+ * memory.events read instead. Deduped, first-seen order. */
13
+ export declare function parseOomKilledScopes(stdout: string): string[];
6
14
  export declare function formatCapKill(f: {
7
15
  sessionId: string;
8
16
  scope: string;
9
17
  oomKills: number;
10
18
  memCurrentMb: number;
11
19
  }): string;
20
+ export declare function formatCapKillFromJournal(f: {
21
+ sessionId?: string;
22
+ scope: string;
23
+ }): string;
24
+ /** Synchronous runner for `journalctl <args...>`, same shape as
25
+ * `SystemctlRunner`. Tests inject a recording stub. */
26
+ export type JournalctlRunner = (args: readonly string[]) => SystemctlResult;
27
+ export declare function defaultJournalctlRunner(args: readonly string[]): SystemctlResult;
28
+ /** Window cursor for the journal read. `lastSinceMs` is the lower bound of
29
+ * the next query (epoch ms); null on the very first poll (no backfill). */
30
+ export interface JournalPollState {
31
+ lastSinceMs: number | null;
32
+ }
33
+ /** One journal poll, folded into the audit tick. Reads systemd's durable
34
+ * whole-scope OOM-kill record since the last window, emits one
35
+ * `source=journal` line per scope NOT already recorded by the
36
+ * memory.events path (de-dup by scope unit), records each emitted scope in
37
+ * `capKillLogged` at `tickIndex`, and advances the window. On a journalctl
38
+ * failure it logs `op=journal-read-failed` and leaves the window
39
+ * unadvanced, so the next tick re-queries the same span. Pure given its
40
+ * injected `run`/clock; mutates the passed `capKillLogged` and `state`. */
41
+ export declare function pollJournalKills(deps: {
42
+ run: JournalctlRunner;
43
+ nowMs: number;
44
+ marginMs: number;
45
+ tickIndex: number;
46
+ capKillLogged: Map<string, number>;
47
+ resolveSessionId: (unit: string) => string | undefined;
48
+ state: JournalPollState;
49
+ logger: Logger;
50
+ }): void;
51
+ /** Drop `capKillLogged` entries older than `ttlTicks` so the map stays
52
+ * bounded. A reported scope's journal line falls out of the `--since`
53
+ * window within ~1 interval, so it can never reappear after the ttl. */
54
+ export declare function pruneCapKillLogged(map: Map<string, number>, tickIndex: number, ttlTicks: number): void;
12
55
  export interface SessionCapAuditDeps {
13
56
  intervalMs: number;
14
57
  logger: Logger;
15
58
  runSystemctl?: SystemctlRunner;
59
+ runJournalctl?: JournalctlRunner;
60
+ now?: () => number;
16
61
  }
17
62
  export interface SessionCapAudit {
18
63
  start(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"session-cap-audit.d.ts","sourceRoot":"","sources":["../src/session-cap-audit.ts"],"names":[],"mappings":"AAYA,OAAO,EAAyC,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAGhG,MAAM,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;AAE3C;yEACyE;AACzE,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG7D;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;CACrB,GAAG,MAAM,CAET;AAyBD,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,eAAe,CAAA;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,IAAI,IAAI,CAAA;IACb,IAAI,IAAI,IAAI,CAAA;IACZ,QAAQ,IAAI,IAAI,CAAA;CACjB;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,mBAAmB,GAAG,eAAe,CAgDhF"}
1
+ {"version":3,"file":"session-cap-audit.d.ts","sourceRoot":"","sources":["../src/session-cap-audit.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAyC,KAAK,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAGtH,MAAM,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;AAa3C;yEACyE;AACzE,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG7D;AAED;;;;;;6DAM6D;AAC7D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAY7D;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;CACrB,GAAG,MAAM,CAET;AAED,wBAAgB,wBAAwB,CAAC,CAAC,EAAE;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;CACd,GAAG,MAAM,CAET;AAyBD;wDACwD;AACxD,MAAM,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,eAAe,CAAA;AAE3E,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,eAAe,CAOhF;AAED;4EAC4E;AAC5E,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAC3B;AAED;;;;;;;4EAO4E;AAC5E,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,GAAG,EAAE,gBAAgB,CAAA;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAA;IACtD,KAAK,EAAE,gBAAgB,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;CACf,GAAG,IAAI,CAcP;AAED;;yEAEyE;AACzE,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAEtG;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,eAAe,CAAA;IAC9B,aAAa,CAAC,EAAE,gBAAgB,CAAA;IAChC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,IAAI,IAAI,CAAA;IACb,IAAI,IAAI,IAAI,CAAA;IACZ,QAAQ,IAAI,IAAI,CAAA;CACjB;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,mBAAmB,GAAG,eAAe,CAoFhF"}
@@ -5,20 +5,67 @@
5
5
  // oom_kill counter and emits one reason-stamped `[session-cap]` line when
6
6
  // it increments, so an auto cap-kill is as legible as an operator stop.
7
7
  //
8
- // Shape mirrors pty-census.ts: a PURE parser + a PURE formatter (unit
9
- // tested) and an impure factory whose setInterval is unref'd.
8
+ // Task 1226 a capped scope frequently dies WHOLE when OOM-killed (systemd
9
+ // tears the cgroup down in well under a second), so its `memory.events` is
10
+ // gone before the next 60s tick. The memory.events read therefore only
11
+ // catches the subset of cap-kills where the scope survives (a tool child
12
+ // dies, the claude leader lives). The common case — the whole scope dies —
13
+ // is recorded durably by systemd in the journal (`<scope>: Failed with
14
+ // result 'oom-kill'`) but never reaches server.log. So a second source is
15
+ // folded into the same tick: a journalctl read matched on that terminal
16
+ // line, de-duplicated by scope unit against the memory.events record so a
17
+ // kill caught by both (the death-window race) is logged once.
18
+ //
19
+ // Shape mirrors pty-census.ts: PURE parsers + PURE formatters + a pure
20
+ // journal poll/window/de-dup step (all unit tested), and an impure factory
21
+ // whose setInterval is unref'd.
10
22
  import { readFileSync } from 'node:fs';
23
+ import { spawnSync } from 'node:child_process';
11
24
  import { forEachLivePty } from './pty-spawner.js';
12
25
  import { scopeUnitName, defaultSystemctlRunner } from './systemd-scope.js';
13
26
  const TAG = '[session-cap]';
27
+ /** Overlap subtracted from `now` when advancing the journal `--since`
28
+ * window, so a kill whose journal entry lands just after a tick boundary
29
+ * is not missed. De-dup by scope unit absorbs the re-read. */
30
+ const JOURNAL_SINCE_MARGIN_MS = 5_000;
31
+ /** How many ticks a reported scope is remembered in `capKillLogged` (and a
32
+ * dead scope's sessionId in `unitToSessionId`). The journal `--since`
33
+ * window only looks back ~1 interval, so a reported scope cannot reappear
34
+ * after this and the maps stay bounded. */
35
+ const CAP_KILL_TTL_TICKS = 2;
14
36
  /** cgroup v2 `memory.events` is `key value` lines; return the `oom_kill`
15
37
  * count (cumulative cgroup-OOM kills in this scope), or 0 if absent. */
16
38
  export function parseMemoryEventsOomKill(blob) {
17
39
  const m = blob.match(/^oom_kill\s+(\d+)$/m);
18
40
  return m ? Number(m[1]) : 0;
19
41
  }
42
+ /** Pull every `claude-session-*.scope` unit that systemd logged a terminal
43
+ * `Failed with result 'oom-kill'` for out of a journalctl blob. That line
44
+ * fires only when the scope's main process (the claude leader) is OOM-
45
+ * killed — i.e. the whole-scope teardown, the case `memory.events` misses.
46
+ * The survivor line ("The kernel OOM killer killed some processes in this
47
+ * unit.") is deliberately NOT matched: a surviving scope is caught by the
48
+ * memory.events read instead. Deduped, first-seen order. */
49
+ export function parseOomKilledScopes(stdout) {
50
+ const out = [];
51
+ const seen = new Set();
52
+ for (const line of stdout.split('\n')) {
53
+ const m = line.match(/(claude-session-[A-Za-z0-9:_.\-]+\.scope): Failed with result 'oom-kill'/);
54
+ if (!m)
55
+ continue;
56
+ const scope = m[1];
57
+ if (seen.has(scope))
58
+ continue;
59
+ seen.add(scope);
60
+ out.push(scope);
61
+ }
62
+ return out;
63
+ }
20
64
  export function formatCapKill(f) {
21
- return `${TAG} op=cap-killed sessionId=${f.sessionId} scope=${f.scope} oomKills=${f.oomKills} memCurrentMb=${f.memCurrentMb}`;
65
+ return `${TAG} op=cap-killed source=memory-events sessionId=${f.sessionId} scope=${f.scope} oomKills=${f.oomKills} memCurrentMb=${f.memCurrentMb}`;
66
+ }
67
+ export function formatCapKillFromJournal(f) {
68
+ return `${TAG} op=cap-killed source=journal sessionId=${f.sessionId ?? 'unknown'} scope=${f.scope}`;
22
69
  }
23
70
  /** `systemctl --user show <unit> -p ControlGroup --value` -> cgroup path
24
71
  * (e.g. /user.slice/.../claude-ptys.slice/<unit>). Empty on failure. */
@@ -42,12 +89,67 @@ function readMemoryEventsOomKill(cgroup) {
42
89
  return 0;
43
90
  }
44
91
  }
92
+ export function defaultJournalctlRunner(args) {
93
+ const r = spawnSync('journalctl', [...args], { encoding: 'utf8', timeout: 10_000 });
94
+ return {
95
+ exitCode: typeof r.status === 'number' ? r.status : 1,
96
+ stdout: typeof r.stdout === 'string' ? r.stdout : '',
97
+ stderr: typeof r.stderr === 'string' ? r.stderr : '',
98
+ };
99
+ }
100
+ /** One journal poll, folded into the audit tick. Reads systemd's durable
101
+ * whole-scope OOM-kill record since the last window, emits one
102
+ * `source=journal` line per scope NOT already recorded by the
103
+ * memory.events path (de-dup by scope unit), records each emitted scope in
104
+ * `capKillLogged` at `tickIndex`, and advances the window. On a journalctl
105
+ * failure it logs `op=journal-read-failed` and leaves the window
106
+ * unadvanced, so the next tick re-queries the same span. Pure given its
107
+ * injected `run`/clock; mutates the passed `capKillLogged` and `state`. */
108
+ export function pollJournalKills(deps) {
109
+ const sinceMs = deps.state.lastSinceMs ?? deps.nowMs;
110
+ const sinceSec = Math.floor(sinceMs / 1000);
111
+ const r = deps.run(['--user', '--since', `@${sinceSec}`, '--no-pager', '--output=cat']);
112
+ if (r.exitCode !== 0) {
113
+ deps.logger(`${TAG} op=journal-read-failed exitCode=${r.exitCode} stderr=${r.stderr.trim()}`);
114
+ return;
115
+ }
116
+ for (const scope of parseOomKilledScopes(r.stdout)) {
117
+ if (deps.capKillLogged.has(scope))
118
+ continue;
119
+ deps.logger(formatCapKillFromJournal({ sessionId: deps.resolveSessionId(scope), scope }));
120
+ deps.capKillLogged.set(scope, deps.tickIndex);
121
+ }
122
+ deps.state.lastSinceMs = deps.nowMs - deps.marginMs;
123
+ }
124
+ /** Drop `capKillLogged` entries older than `ttlTicks` so the map stays
125
+ * bounded. A reported scope's journal line falls out of the `--since`
126
+ * window within ~1 interval, so it can never reappear after the ttl. */
127
+ export function pruneCapKillLogged(map, tickIndex, ttlTicks) {
128
+ for (const [unit, t] of map)
129
+ if (tickIndex - t > ttlTicks)
130
+ map.delete(unit);
131
+ }
45
132
  export function createSessionCapAudit(deps) {
46
133
  const run = deps.runSystemctl ?? defaultSystemctlRunner;
134
+ const runJournalctl = deps.runJournalctl ?? defaultJournalctlRunner;
135
+ const now = deps.now ?? (() => Date.now());
47
136
  // Per-scope prior oom_kill count; a rising value means a fresh cap-kill.
48
137
  const prior = new Map();
138
+ // Scopes a cap-kill has already been logged for (from either source),
139
+ // keyed unit -> tickIndex; de-dups the journal read against the
140
+ // memory.events read for the same scope/kill. Pruned by ttl.
141
+ const capKillLogged = new Map();
142
+ // Last-known sessionId per scope unit (unit -> {sessionId, lastSeenTick}),
143
+ // so the journal line can name the session of a scope that is already
144
+ // gone. Refreshed while the scope is live; pruned by the same ttl so a
145
+ // scope that dies between ticks is still resolvable on the next journal read.
146
+ const unitToSessionId = new Map();
147
+ const journalState = { lastSinceMs: null };
148
+ let tickIndex = 0;
49
149
  let timer = null;
50
150
  function tickOnce() {
151
+ tickIndex++;
152
+ const nowMs = now();
51
153
  const seen = new Set();
52
154
  forEachLivePty((t) => {
53
155
  // Per-scope guard: a single malformed token (scopeUnitName throws) or
@@ -56,15 +158,17 @@ export function createSessionCapAudit(deps) {
56
158
  try {
57
159
  const unit = scopeUnitName(t.scopeUnitToken);
58
160
  seen.add(unit);
161
+ unitToSessionId.set(unit, { sessionId: t.sessionId, lastSeenTick: tickIndex });
59
162
  const cgroup = readControlGroup(run, unit);
60
163
  if (!cgroup)
61
164
  return;
62
- const now = readMemoryEventsOomKill(cgroup);
165
+ const oomKills = readMemoryEventsOomKill(cgroup);
63
166
  const was = prior.get(unit) ?? 0;
64
- prior.set(unit, now);
65
- if (now > was) {
167
+ prior.set(unit, oomKills);
168
+ if (oomKills > was) {
66
169
  const memCurrentMb = Math.round(readCgroupFileNumber(cgroup, 'memory.current') / 1024 ** 2);
67
- deps.logger(formatCapKill({ sessionId: t.sessionId, scope: unit, oomKills: now, memCurrentMb }));
170
+ deps.logger(formatCapKill({ sessionId: t.sessionId, scope: unit, oomKills, memCurrentMb }));
171
+ capKillLogged.set(unit, tickIndex);
68
172
  }
69
173
  }
70
174
  catch (err) {
@@ -75,12 +179,32 @@ export function createSessionCapAudit(deps) {
75
179
  for (const unit of prior.keys())
76
180
  if (!seen.has(unit))
77
181
  prior.delete(unit);
182
+ // Second source: the durable journal record of whole-scope teardowns,
183
+ // de-duped against what the memory.events read above already logged.
184
+ pollJournalKills({
185
+ run: runJournalctl,
186
+ nowMs,
187
+ marginMs: JOURNAL_SINCE_MARGIN_MS,
188
+ tickIndex,
189
+ capKillLogged,
190
+ resolveSessionId: (unit) => unitToSessionId.get(unit)?.sessionId,
191
+ state: journalState,
192
+ logger: deps.logger,
193
+ });
194
+ pruneCapKillLogged(capKillLogged, tickIndex, CAP_KILL_TTL_TICKS);
195
+ for (const [unit, v] of unitToSessionId) {
196
+ if (tickIndex - v.lastSeenTick > CAP_KILL_TTL_TICKS)
197
+ unitToSessionId.delete(unit);
198
+ }
78
199
  }
79
200
  return {
80
201
  tickOnce,
81
202
  start() {
82
203
  if (timer)
83
204
  return;
205
+ // Seed the journal window at start so the first tick captures the full
206
+ // first interval without backfilling kills from before the audit ran.
207
+ journalState.lastSinceMs = now();
84
208
  timer = setInterval(() => {
85
209
  try {
86
210
  tickOnce();
@@ -1 +1 @@
1
- {"version":3,"file":"session-cap-audit.js","sourceRoot":"","sources":["../src/session-cap-audit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-cap-audit.js","sourceRoot":"","sources":["../src/session-cap-audit.ts"],"names":[],"mappings":"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"}
@@ -25,13 +25,11 @@ export declare function classifyStuckTurn(records: ReadonlyArray<Record<string,
25
25
  now: number;
26
26
  thresholdMs: number;
27
27
  }): StuckTurnVerdict;
28
- /** Read the last `TAIL_READ_BYTES` of a JSONL and parse complete records.
29
- * Drops a leading partial line. Returns [] on any read/parse failure.
30
- *
31
- * Bound: when the last progress record precedes more than this many bytes of
32
- * queued-inbound rows, it falls off-window and the classifier safe-defaults to
33
- * not-wedged. Robustness for that very-large-JSONL case is tracked separately
34
- * (.tasks/978). */
28
+ /** Read the last `tailBytes` of a JSONL and parse complete records. If no
29
+ * progress record (assistant turn or tool_result user) falls within that
30
+ * window, the window doubles on each iteration until a progress record is found
31
+ * or the scan reaches the full file size (capped at MAX_SCAN_BYTES). Returns []
32
+ * on any read/parse failure. */
35
33
  export declare function readJsonlTailRecords(path: string, tailBytes?: number): Record<string, unknown>[];
36
34
  /** One eligible session for a watchdog tick: a live channel session whose
37
35
  * process is alive. The watch reads its JSONL, classifies, and recycles. */
@@ -1 +1 @@
1
- {"version":3,"file":"stuck-turn.d.ts","sourceRoot":"","sources":["../src/stuck-turn.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAExC,MAAM,WAAW,gBAAgB;IAC/B;8CAC0C;IAC1C,MAAM,EAAE,OAAO,CAAA;IACf;;+EAE2E;IAC3E,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B;;;;qFAIiF;IACjF,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAAA;IACrC;yEACqE;IACrE,aAAa,EAAE,MAAM,CAAA;IACrB;oFACgF;IAChF,YAAY,EAAE,OAAO,CAAA;CACtB;AAiCD,kFAAkF;AAClF,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAC/C,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACzC,gBAAgB,CAuClB;AAID;;;;;;oBAMoB;AACpB,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,SAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAoCzG;AAED;6EAC6E;AAC7E,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,6EAA6E;IAC7E,UAAU,EAAE,MAAM,kBAAkB,EAAE,CAAA;IACtC;;kBAEc;IACd,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB;;;0DAGsD;IACtD,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;IAClB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;CACvD;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,IAAI,IAAI,CAAA;IACb,IAAI,IAAI,IAAI,CAAA;IACZ,QAAQ,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAChD;AAID,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,kBAAkB,GAAG,cAAc,CA+D7E"}
1
+ {"version":3,"file":"stuck-turn.d.ts","sourceRoot":"","sources":["../src/stuck-turn.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAExC,MAAM,WAAW,gBAAgB;IAC/B;8CAC0C;IAC1C,MAAM,EAAE,OAAO,CAAA;IACf;;+EAE2E;IAC3E,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B;;;;qFAIiF;IACjF,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAAA;IACrC;yEACqE;IACrE,aAAa,EAAE,MAAM,CAAA;IACrB;oFACgF;IAChF,YAAY,EAAE,OAAO,CAAA;CACtB;AAiCD,kFAAkF;AAClF,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAC/C,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACzC,gBAAgB,CAuClB;AAyCD;;;;iCAIiC;AACjC,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,SAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAqBzG;AAED;6EAC6E;AAC7E,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,6EAA6E;IAC7E,UAAU,EAAE,MAAM,kBAAkB,EAAE,CAAA;IACtC;;kBAEc;IACd,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB;;;0DAGsD;IACtD,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;IAClB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;CACvD;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,IAAI,IAAI,CAAA;IACb,IAAI,IAAI,IAAI,CAAA;IACZ,QAAQ,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAChD;AAID,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,kBAAkB,GAAG,cAAc,CA+D7E"}
@@ -88,13 +88,48 @@ export function classifyStuckTurn(records, opts) {
88
88
  return { wedged, lastProgressTs, oldestPendingEnqueueTs, pendingQueued, toolInFlight };
89
89
  }
90
90
  const TAIL_READ_BYTES = 256 * 1024;
91
- /** Read the last `TAIL_READ_BYTES` of a JSONL and parse complete records.
92
- * Drops a leading partial line. Returns [] on any read/parse failure.
93
- *
94
- * Bound: when the last progress record precedes more than this many bytes of
95
- * queued-inbound rows, it falls off-window and the classifier safe-defaults to
96
- * not-wedged. Robustness for that very-large-JSONL case is tracked separately
97
- * (.tasks/978). */
91
+ function parseLines(text) {
92
+ const out = [];
93
+ for (const line of text.split('\n')) {
94
+ const trimmed = line.trim();
95
+ if (trimmed.length === 0 || trimmed[0] !== '{')
96
+ continue;
97
+ try {
98
+ const obj = JSON.parse(trimmed);
99
+ if (obj && typeof obj === 'object' && !Array.isArray(obj))
100
+ out.push(obj);
101
+ }
102
+ catch { /* partial / malformed line — skip */ }
103
+ }
104
+ return out;
105
+ }
106
+ function isProgressRecord(rec) {
107
+ return isAssistant(rec) || isToolResultUser(rec);
108
+ }
109
+ function readWindowRecords(fd, size, windowBytes) {
110
+ const start = size > windowBytes ? size - windowBytes : 0;
111
+ const len = size - start;
112
+ if (len <= 0)
113
+ return [];
114
+ const buf = Buffer.alloc(len);
115
+ const n = readSync(fd, buf, 0, len, start);
116
+ let text = buf.toString('utf8', 0, n);
117
+ // Drop a leading partial line when we started mid-file.
118
+ if (start > 0) {
119
+ const nl = text.indexOf('\n');
120
+ text = nl === -1 ? '' : text.slice(nl + 1);
121
+ }
122
+ return parseLines(text);
123
+ }
124
+ /** Maximum window read per call when the initial tail holds no progress record.
125
+ * When the progress record is buried beyond this many bytes of enqueue rows the
126
+ * classifier safe-defaults to not-wedged (same as the original 256 KB bound). */
127
+ const MAX_SCAN_BYTES = 32 * 1024 * 1024;
128
+ /** Read the last `tailBytes` of a JSONL and parse complete records. If no
129
+ * progress record (assistant turn or tool_result user) falls within that
130
+ * window, the window doubles on each iteration until a progress record is found
131
+ * or the scan reaches the full file size (capped at MAX_SCAN_BYTES). Returns []
132
+ * on any read/parse failure. */
98
133
  export function readJsonlTailRecords(path, tailBytes = TAIL_READ_BYTES) {
99
134
  let fd;
100
135
  let size;
@@ -106,33 +141,14 @@ export function readJsonlTailRecords(path, tailBytes = TAIL_READ_BYTES) {
106
141
  return [];
107
142
  }
108
143
  try {
109
- const start = size > tailBytes ? size - tailBytes : 0;
110
- const len = size - start;
111
- if (len <= 0)
112
- return [];
113
- const buf = Buffer.alloc(len);
114
- const n = readSync(fd, buf, 0, len, start);
115
- let text = buf.toString('utf8', 0, n);
116
- // Drop a leading partial line when we started mid-file.
117
- if (start > 0) {
118
- const nl = text.indexOf('\n');
119
- text = nl === -1 ? '' : text.slice(nl + 1);
120
- }
121
- const out = [];
122
- for (const line of text.split('\n')) {
123
- const trimmed = line.trim();
124
- if (trimmed.length === 0 || trimmed[0] !== '{')
125
- continue;
126
- try {
127
- const obj = JSON.parse(trimmed);
128
- if (obj && typeof obj === 'object' && !Array.isArray(obj))
129
- out.push(obj);
130
- }
131
- catch {
132
- // Partial / malformed line — skip.
144
+ let window = tailBytes;
145
+ for (;;) {
146
+ const records = readWindowRecords(fd, size, window);
147
+ if (records.some(isProgressRecord) || window >= size || window >= MAX_SCAN_BYTES) {
148
+ return records;
133
149
  }
150
+ window = Math.min(window * 2, size, MAX_SCAN_BYTES);
134
151
  }
135
- return out;
136
152
  }
137
153
  finally {
138
154
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"stuck-turn.js","sourceRoot":"","sources":["../src/stuck-turn.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stuck-turn.js","sourceRoot":"","sources":["../src/stuck-turn.ts"],"names":[],"mappings":"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"}
@@ -58,7 +58,7 @@ The skill is the authority for the precision pass. The inline rules above under
58
58
 
59
59
  ## Writing in the operator's voice
60
60
 
61
- When prose will go out under the operator's name (a document, public-facing copy, anything they will send onward), the operator's voice profile is applied before the first sentence is written, not as a second pass after they object. Run `skill-load skillName=voice-mirror` to retrieve the profile and condition the draft on it. When content-producer or another specialist owns the deliverable, the voice condition is part of the brief you hand them, never a draft you pre-write and pass on. Authoring the prose yourself and conditioning it before you return it is reserved for the case no installed specialist owns, the same boundary the per-turn routing ladder draws. This is the operator's own authorial voice, used for work written in their name; it is separate from your voice file above, which is how you sound when you speak as yourself.
61
+ When prose will go out under the operator's name (a document, public-facing copy, anything they will send onward), the operator's voice profile is applied before the first sentence is written, not as a second pass after they object. Run `skill-load skillName=voice-mirror` to retrieve the profile and condition the draft on it. When content-producer or another specialist owns the deliverable, the voice condition is part of the brief you hand them, never a draft you pre-write and pass on. Authoring the prose yourself and conditioning it before you return it is reserved for the case no installed specialist owns, the same boundary the per-turn routing ladder draws. This is the operator's own authorial voice, used for work written in their name; it is separate from your voice file above, which is how you sound when you speak as yourself. `voice-retrieve-conditioning` is not on your tool surface — it lives on the drafting seat (content-producer). When you hand off a prose brief to content-producer, include the voice conditioning instruction in the brief (format, length, scope, topic); do not attempt to pre-condition the prose here.
62
62
 
63
63
  ## Access
64
64