@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.
- package/dist/index.js +4 -0
- package/package.json +1 -1
- package/payload/platform/plugins/admin/mcp/dist/content-producer-authoring-skills.d.ts.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/content-producer-authoring-skills.js +5 -4
- package/payload/platform/plugins/admin/mcp/dist/content-producer-authoring-skills.js.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/tools/__tests__/account-lifecycle.test.js +1 -1
- package/payload/platform/plugins/admin/mcp/dist/tools/__tests__/account-lifecycle.test.js.map +1 -1
- package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +37 -31
- package/payload/platform/plugins/docs/references/admin-ui.md +2 -0
- package/payload/platform/plugins/docs/references/graph.md +34 -30
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-write-path-task802.test.js +62 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-write-path-task802.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-loader.d.ts +14 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-loader.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-loader.js +18 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-loader.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-validator.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-validator.js +16 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-validator.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-search-fields.test.js +40 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-search-fields.test.js.map +1 -1
- package/payload/platform/plugins/memory/references/schema-construction.md +7 -0
- package/payload/platform/plugins/url-get/mcp/vitest.config.ts +14 -0
- package/payload/platform/services/claude-session-manager/dist/session-cap-audit.d.ts +46 -1
- package/payload/platform/services/claude-session-manager/dist/session-cap-audit.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/session-cap-audit.js +131 -7
- package/payload/platform/services/claude-session-manager/dist/session-cap-audit.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/stuck-turn.d.ts +5 -7
- package/payload/platform/services/claude-session-manager/dist/stuck-turn.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/stuck-turn.js +48 -32
- package/payload/platform/services/claude-session-manager/dist/stuck-turn.js.map +1 -1
- package/payload/platform/templates/agents/admin/IDENTITY.md +1 -1
- package/payload/premium-plugins/venture-studio/skills/investor-data-room/SKILL.md +73 -27
- package/payload/premium-plugins/writer-craft/PLUGIN.md +1 -1
- package/payload/premium-plugins/writer-craft/skills/voice-mirror/SKILL.md +2 -2
- package/payload/server/public/assets/{AdminLoginScreens-CJatEEai.js → AdminLoginScreens-B45MFjWG.js} +1 -1
- package/payload/server/public/assets/AdminShell-CyZPfbzd.js +1 -0
- package/payload/server/public/assets/{Checkbox-DqnBuFEU.js → Checkbox-BPYEJJPq.js} +1 -1
- package/payload/server/public/assets/OperatorConversations-Civ7TETM.css +1 -0
- package/payload/server/public/assets/{OperatorConversations-BwnO3IUP.js → OperatorConversations-D_o_59Oc.js} +1 -1
- package/payload/server/public/assets/{admin-Cocx_If1.js → admin-DcuJ3_xm.js} +1 -1
- package/payload/server/public/assets/{browser-BsFHTA93.js → browser-Be9LRtM2.js} +1 -1
- package/payload/server/public/assets/{calendar-hwGeTmWC.js → calendar-BeofvK7c.js} +1 -1
- package/payload/server/public/assets/chat-BWNFeIjw.js +1 -0
- package/payload/server/public/assets/{data-DOjJ8031.js → data-lTmU53k6.js} +1 -1
- package/payload/server/public/assets/{graph-DfUM66RH.js → graph-XYK2qT5D.js} +19 -19
- package/payload/server/public/assets/{graph-labels-CXt55mIP.js → graph-labels-DNCXtQVn.js} +1 -1
- package/payload/server/public/assets/{operator-CRRc0nD-.js → operator-B3hpbhNo.js} +1 -1
- package/payload/server/public/assets/page-DFOoEKVK.js +32 -0
- package/payload/server/public/assets/{public-Ba5G74iP.js → public-Bd_0QBGJ.js} +1 -1
- package/payload/server/public/assets/{rotate-ccw-BfYwa6ew.js → rotate-ccw-BxD1B_G-.js} +1 -1
- package/payload/server/public/browser.html +4 -4
- package/payload/server/public/calendar.html +4 -4
- package/payload/server/public/chat.html +6 -6
- package/payload/server/public/data.html +4 -4
- package/payload/server/public/graph.html +7 -7
- package/payload/server/public/index.html +6 -6
- package/payload/server/public/operator.html +8 -8
- package/payload/server/public/public.html +6 -6
- package/payload/server/server.js +51 -45
- package/payload/server/public/assets/AdminShell-D0MDlfI1.js +0 -1
- package/payload/server/public/assets/OperatorConversations-DDUzu1h8.css +0 -1
- package/payload/server/public/assets/chat-DMssYitp.js +0 -1
- 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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;
|
|
1
|
+
{"version":3,"file":"schema-validator.js","sourceRoot":"","sources":["../../src/lib/schema-validator.ts"],"names":[],"mappings":"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"}
|
package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-search-fields.test.js
CHANGED
|
@@ -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;
|
package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-search-fields.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-search-fields.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/memory-search-fields.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAE9D,yEAAyE;AACzE,8DAA8D;AAC9D,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,CAAC;IACnC,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;QACjB,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACzC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC;KAC7B,CAAC;CACH,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,yBAAyB,EAAE,GAAG,EAAE,CAAC,CAAC;IACxC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;CACpC,CAAC,CAAC,CAAC;AAEJ,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAC3B,EAAE,CAAC,IAAI,CAAC,kDAAkD,EAAE,GAAG,EAAE,CAAC,CAAC;IACjE,MAAM,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;IACnD,iBAAiB,EAAE,CAAC,aAA4C,EAAE,EAAE,CAClE,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,KAAK,QAAQ;IAC7F,yEAAyE;IACzE,qDAAqD;IACrD,wBAAwB,EAAE,IAAI;CAC/B,CAAC,CAAC,CAAC;AAEJ,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,SAAS,UAAU;IACjB,OAAO;QACL,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,CAAC,QAAQ,CAAC;QAClB,KAAK,EAAE,GAAG;QACV,WAAW,EAAE,GAAG;QAChB,SAAS,EAAE,GAAG;QACd,OAAO,EAAE;YACP;gBACE,MAAM,EAAE,IAAI;gBACZ,YAAY,EAAE,OAAO;gBACrB,SAAS,EAAE,UAAU;gBACrB,MAAM,EAAE,CAAC,QAAQ,CAAC;gBAClB,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE;aAC7C;SACF;QACD,UAAU,EAAE;YACV,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,OAAO;YACb,GAAG,EAAE,iBAAiB;YACtB,KAAK,EAAE,gBAAgB;YACvB,SAAS,EAAE,qBAAqB;SACjC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,GAAG;IACjB,KAAK,EAAE,OAAO;IACd,SAAS,EAAE,OAAO;CACnB,CAAC;AAEF,QAAQ,CAAC,6CAA6C,EAAE,GAAG,EAAE;IAC3D,UAAU,CAAC,GAAG,EAAE;QACd,UAAU,CAAC,SAAS,EAAE,CAAC;QACvB,UAAU,CAAC,iBAAiB,CAAC;YAC3B,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,CAAC,UAAU,EAAE,CAAC;YACvB,QAAQ,EAAE,CAAC;YACX,SAAS,EAAE,CAAC;YACZ,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,CAAC;YACb,SAAS,EAAE,IAAI;YACf,WAAW,EAAE;gBACX,UAAU,EAAE,CAAC;gBACb,MAAM,EAAE,CAAC;gBACT,IAAI,EAAE,CAAC;gBACP,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE,CAAC;gBACV,OAAO,EAAE,CAAC;gBACV,KAAK,EAAE,CAAC;aACT;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4FAA4F,EAAE,KAAK,IAAI,EAAE;QAC1G,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,EAAE,GAAG,UAAU,EAAE,CAAC,CAAC;QAClD,MAAM,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC;YAChC,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,OAAO;YACb,GAAG,EAAE,iBAAiB;YACtB,KAAK,EAAE,gBAAgB;YACvB,SAAS,EAAE,qBAAqB;SACjC,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,EAAE,GAAG,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QAC9D,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACtC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC1C,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,EAAE,GAAG,UAAU,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5E,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,EAAE,GAAG,UAAU,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;QAClF,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,EAAE,GAAG,UAAU,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACpE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;QAChF,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;QAClC,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,KAA0B,EAAE,EAAE;YACrD,MAAM,CAAC,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC/E,OAAO,IAAI,CAAC;QACd,CAAC,CAAgC,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,YAAY,CAAC,EAAE,GAAG,UAAU,EAAE,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAE9E,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YAClB,MAAM,YAAY,CAAC,EAAE,GAAG,UAAU,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACxD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC;YACjE,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QAC3C,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;QAC9B,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
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":"
|
|
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
|
-
//
|
|
9
|
-
//
|
|
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
|
|
165
|
+
const oomKills = readMemoryEventsOomKill(cgroup);
|
|
63
166
|
const was = prior.get(unit) ?? 0;
|
|
64
|
-
prior.set(unit,
|
|
65
|
-
if (
|
|
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
|
|
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":"AAAA,0EAA0E;AAC1E,2EAA2E;AAC3E,sEAAsE;AACtE,wEAAwE;AACxE,0EAA0E;AAC1E,wEAAwE;AACxE,EAAE;AACF,
|
|
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 `
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
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;
|
|
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
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
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
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
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
|
|