@rubytech/create-maxy-code 0.1.388 → 0.1.389
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/__tests__/joblogic-excluded.test.js +39 -0
- package/dist/index.js +21 -0
- package/package.json +1 -1
- package/payload/platform/config/brand.json +1 -1
- package/payload/platform/plugins/.claude-plugin/marketplace.json +0 -5
- package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +21 -2
- package/payload/platform/plugins/docs/references/admin-session.md +4 -0
- package/payload/platform/plugins/docs/references/admin-ui.md +18 -1
- package/payload/platform/plugins/docs/references/joblogic.md +2 -0
- package/payload/platform/plugins/whatsapp/references/channels-whatsapp.md +2 -0
- package/payload/platform/plugins/work/PLUGIN.md +3 -0
- package/payload/platform/plugins/work/mcp/dist/__tests__/session-metering.test.d.ts +2 -0
- package/payload/platform/plugins/work/mcp/dist/__tests__/session-metering.test.d.ts.map +1 -0
- package/payload/platform/plugins/work/mcp/dist/__tests__/session-metering.test.js +98 -0
- package/payload/platform/plugins/work/mcp/dist/__tests__/session-metering.test.js.map +1 -0
- package/payload/platform/plugins/work/mcp/dist/index.js +16 -0
- package/payload/platform/plugins/work/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/work/mcp/dist/tools/session-metering.d.ts +53 -0
- package/payload/platform/plugins/work/mcp/dist/tools/session-metering.d.ts.map +1 -0
- package/payload/platform/plugins/work/mcp/dist/tools/session-metering.js +80 -0
- package/payload/platform/plugins/work/mcp/dist/tools/session-metering.js.map +1 -0
- package/payload/platform/plugins/work/mcp/package.json +2 -1
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js +1 -0
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.js +98 -8
- package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pricing.d.ts +45 -0
- package/payload/platform/services/claude-session-manager/dist/pricing.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/pricing.js +57 -0
- package/payload/platform/services/claude-session-manager/dist/pricing.js.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/session-metering.d.ts +38 -0
- package/payload/platform/services/claude-session-manager/dist/session-metering.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/session-metering.js +292 -0
- package/payload/platform/services/claude-session-manager/dist/session-metering.js.map +1 -0
- package/payload/platform/templates/specialists/agents/project-manager.md +1 -1
- package/payload/server/public/assets/{AdminLoginScreens-BejIjbmU.js → AdminLoginScreens-CerrEc_m.js} +1 -1
- package/payload/server/public/assets/AdminShell-cRTvNRbo.js +1 -0
- package/payload/server/public/assets/{Checkbox-1F1tzqca.js → Checkbox-Dh2pLMFN.js} +1 -1
- package/payload/server/public/assets/{Transcript-DkGa4CQH.js → Transcript-B_GVJujB.js} +1 -1
- package/payload/server/public/assets/{admin-DqQARkjy.js → admin-BXaYelnR.js} +1 -1
- package/payload/server/public/assets/{browser-nDtEK6RC.js → browser-fhjGE7fH.js} +1 -1
- package/payload/server/public/assets/calendar-PnZudAtc.js +1 -0
- package/payload/server/public/assets/chat-Dy_zrjKS.js +1 -0
- package/payload/server/public/assets/chevron-left-IB6TmMZ_.js +1 -0
- package/payload/server/public/assets/data-B2IcjAj6.js +1 -0
- package/payload/server/public/assets/{graph-DFyicKd7.js → graph-CycO3tkW.js} +2 -2
- package/payload/server/public/assets/{graph-labels-D3BQdcpD.js → graph-labels-DlSsSpBV.js} +1 -1
- package/payload/server/public/assets/{operator-BxrjWdT9.js → operator-L4kBC-zS.js} +1 -1
- package/payload/server/public/assets/page-D5E-Ng4D.js +1 -0
- package/payload/server/public/assets/page-M8sD9LOi.js +32 -0
- package/payload/server/public/assets/{public-DbdqfdYq.js → public-BmnajF3K.js} +1 -1
- package/payload/server/public/assets/{rotate-ccw-BkX8HODe.js → rotate-ccw-W5HhvAbo.js} +1 -1
- package/payload/server/public/assets/useSubAccountSwitcher-D1TI1xvd.css +1 -0
- package/payload/server/public/assets/useSubAccountSwitcher-UqZbmzYy.js +9 -0
- package/payload/server/public/browser.html +4 -4
- package/payload/server/public/calendar.html +5 -5
- package/payload/server/public/chat.html +8 -8
- package/payload/server/public/data.html +7 -7
- package/payload/server/public/graph.html +8 -8
- package/payload/server/public/index.html +10 -10
- package/payload/server/public/operator.html +10 -10
- package/payload/server/public/public.html +8 -8
- package/payload/server/server.js +275 -248
- package/payload/platform/plugins/joblogic/.claude-plugin/plugin.json +0 -21
- package/payload/platform/plugins/joblogic/PLUGIN.md +0 -182
- package/payload/platform/plugins/joblogic/lib/mcp-spawn-tee/index.js +0 -193
- package/payload/platform/plugins/joblogic/lib/mcp-spawn-tee/package.json +0 -3
- package/payload/platform/plugins/joblogic/mcp/dist/index.d.ts +0 -2
- package/payload/platform/plugins/joblogic/mcp/dist/index.d.ts.map +0 -1
- package/payload/platform/plugins/joblogic/mcp/dist/index.js +0 -229
- package/payload/platform/plugins/joblogic/mcp/dist/index.js.map +0 -1
- package/payload/platform/plugins/joblogic/mcp/dist/lib/auth.d.ts +0 -31
- package/payload/platform/plugins/joblogic/mcp/dist/lib/auth.d.ts.map +0 -1
- package/payload/platform/plugins/joblogic/mcp/dist/lib/auth.js +0 -78
- package/payload/platform/plugins/joblogic/mcp/dist/lib/auth.js.map +0 -1
- package/payload/platform/plugins/joblogic/mcp/dist/lib/client.d.ts +0 -35
- package/payload/platform/plugins/joblogic/mcp/dist/lib/client.d.ts.map +0 -1
- package/payload/platform/plugins/joblogic/mcp/dist/lib/client.js +0 -106
- package/payload/platform/plugins/joblogic/mcp/dist/lib/client.js.map +0 -1
- package/payload/platform/plugins/joblogic/mcp/dist/lib/idempotency.d.ts +0 -8
- package/payload/platform/plugins/joblogic/mcp/dist/lib/idempotency.d.ts.map +0 -1
- package/payload/platform/plugins/joblogic/mcp/dist/lib/idempotency.js +0 -41
- package/payload/platform/plugins/joblogic/mcp/dist/lib/idempotency.js.map +0 -1
- package/payload/platform/plugins/joblogic/mcp/dist/lib/secrets.d.ts +0 -21
- package/payload/platform/plugins/joblogic/mcp/dist/lib/secrets.d.ts.map +0 -1
- package/payload/platform/plugins/joblogic/mcp/dist/lib/secrets.js +0 -47
- package/payload/platform/plugins/joblogic/mcp/dist/lib/secrets.js.map +0 -1
- package/payload/platform/plugins/joblogic/mcp/package.json +0 -10
- package/payload/platform/plugins/joblogic/skills/joblogic/SKILL.md +0 -32
- package/payload/server/public/assets/AdminShell-D2-uBSB5.js +0 -1
- package/payload/server/public/assets/calendar-CO4Bwmho.js +0 -1
- package/payload/server/public/assets/chat-DeIge_bC.js +0 -1
- package/payload/server/public/assets/chevron-left-DhVdq0aN.js +0 -1
- package/payload/server/public/assets/data-B1GIdzHk.js +0 -1
- package/payload/server/public/assets/page-ByDLq_o1.js +0 -1
- package/payload/server/public/assets/page-D-Ep4bXd.js +0 -32
- package/payload/server/public/assets/useSubAccountSwitcher-DMbRhLPv.js +0 -9
- package/payload/server/public/assets/useSubAccountSwitcher-DS0iqSkP.css +0 -1
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
// Task 1384 — loopback wrapper. The admin-agent MCP tool and the operator usage
|
|
2
|
+
// modal share ONE implementation and ONE result by both calling
|
|
3
|
+
// GET /:sessionId/metering on the claude-session-manager over the local port.
|
|
4
|
+
// Port resolution mirrors memory-empty-trash.ts.
|
|
5
|
+
function resolveManagerBase(explicit) {
|
|
6
|
+
if (explicit)
|
|
7
|
+
return explicit;
|
|
8
|
+
const port = process.env.CLAUDE_SESSION_MANAGER_PORT;
|
|
9
|
+
if (!port)
|
|
10
|
+
return null;
|
|
11
|
+
const parsed = Number(port);
|
|
12
|
+
if (!Number.isFinite(parsed) || parsed <= 0 || parsed >= 65536)
|
|
13
|
+
return null;
|
|
14
|
+
return `http://127.0.0.1:${parsed}`;
|
|
15
|
+
}
|
|
16
|
+
export async function sessionMetering(params) {
|
|
17
|
+
const base = resolveManagerBase(params.managerBase);
|
|
18
|
+
if (!base) {
|
|
19
|
+
return {
|
|
20
|
+
ok: false,
|
|
21
|
+
status: 0,
|
|
22
|
+
error: "CLAUDE_SESSION_MANAGER_PORT is not set — this MCP instance cannot reach the session manager for metering.",
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
const fetchImpl = params.fetchImpl ?? fetch;
|
|
26
|
+
const url = `${base}/${encodeURIComponent(params.sessionId)}/metering`;
|
|
27
|
+
let res;
|
|
28
|
+
try {
|
|
29
|
+
res = await fetchImpl(url, { method: "GET" });
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
return { ok: false, status: 0, error: `request failed: ${err instanceof Error ? err.message : String(err)}` };
|
|
33
|
+
}
|
|
34
|
+
if (res.status !== 200) {
|
|
35
|
+
let detail = `manager returned ${res.status}`;
|
|
36
|
+
try {
|
|
37
|
+
const body = (await res.json());
|
|
38
|
+
if (typeof body.detail === "string")
|
|
39
|
+
detail = body.detail;
|
|
40
|
+
else if (typeof body.error === "string")
|
|
41
|
+
detail = body.error;
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
// body was not JSON — keep the status-code message
|
|
45
|
+
}
|
|
46
|
+
return { ok: false, status: res.status, error: detail };
|
|
47
|
+
}
|
|
48
|
+
const summary = (await res.json());
|
|
49
|
+
return { ok: true, status: 200, summary };
|
|
50
|
+
}
|
|
51
|
+
function fmtActive(ms) {
|
|
52
|
+
const totalMin = Math.round(ms / 60000);
|
|
53
|
+
const h = Math.floor(totalMin / 60);
|
|
54
|
+
const m = totalMin % 60;
|
|
55
|
+
return `${h}h ${String(m).padStart(2, "0")}m`;
|
|
56
|
+
}
|
|
57
|
+
function activeMs(d) {
|
|
58
|
+
return d.activeMs.thinking + d.activeMs.messaging + d.activeMs.toolUse;
|
|
59
|
+
}
|
|
60
|
+
function fmtTok(n) {
|
|
61
|
+
return n.toLocaleString("en-GB");
|
|
62
|
+
}
|
|
63
|
+
function fmtGBP(n) {
|
|
64
|
+
return `£${n.toFixed(2)}`;
|
|
65
|
+
}
|
|
66
|
+
/** Markdown table matching the operator usage modal's columns, so the agent
|
|
67
|
+
* surface and the modal present the same figures. */
|
|
68
|
+
export function renderMeteringTable(s) {
|
|
69
|
+
const header = "| Day | Active | Output tok | Input tok | Cache write | Cache read | Opus 4.8 (GBP) | Sonnet 4.6 (GBP) |\n" +
|
|
70
|
+
"|-----|--:|--:|--:|--:|--:|--:|--:|";
|
|
71
|
+
const rowFor = (label, d, bold = false) => {
|
|
72
|
+
const cell = (x) => (bold ? `**${x}**` : x);
|
|
73
|
+
return `| ${cell(label)} | ${cell(fmtActive(activeMs(d)))} | ${cell(fmtTok(d.tokens.output))} | ${cell(fmtTok(d.tokens.input))} | ${cell(fmtTok(d.tokens.cacheWrite))} | ${cell(fmtTok(d.tokens.cacheRead))} | ${cell(fmtGBP(d.costGBP.opus))} | ${cell(fmtGBP(d.costGBP.sonnet))} |`;
|
|
74
|
+
};
|
|
75
|
+
const body = s.days.map((d) => rowFor(d.date, d)).join("\n");
|
|
76
|
+
const total = rowFor(`TOTAL (${s.days.length} d)`, s.totals, true);
|
|
77
|
+
const foot = `\nPrices dated ${s.pricing.opusPriceDate} · £/$ = ${s.pricing.usdPerGbp} · Sonnet tokenizer factor ${s.pricing.tokenizerFactor}. Sonnet is a tokenizer-adjusted estimate; cache read dominates cost.`;
|
|
78
|
+
return [header, body, total].join("\n") + "\n" + foot;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=session-metering.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-metering.js","sourceRoot":"","sources":["../../src/tools/session-metering.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canonical-tool-names.generated.d.ts","sourceRoot":"","sources":["../src/canonical-tool-names.generated.ts"],"names":[],"mappings":"AAQA,+EAA+E;AAC/E,eAAO,MAAM,gBAAgB,EAAE,SAAS,MAAM,EAoB7C,CAAA;AAED,gEAAgE;AAChE,eAAO,MAAM,yBAAyB,EAAE,SAAS,MAAM,
|
|
1
|
+
{"version":3,"file":"canonical-tool-names.generated.d.ts","sourceRoot":"","sources":["../src/canonical-tool-names.generated.ts"],"names":[],"mappings":"AAQA,+EAA+E;AAC/E,eAAO,MAAM,gBAAgB,EAAE,SAAS,MAAM,EAoB7C,CAAA;AAED,gEAAgE;AAChE,eAAO,MAAM,yBAAyB,EAAE,SAAS,MAAM,EA4PtD,CAAA"}
|
package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js
CHANGED
|
@@ -263,6 +263,7 @@ export const CANONICAL_MAXY_TOOL_NAMES = [
|
|
|
263
263
|
"mcp__plugin_work_work__project-list",
|
|
264
264
|
"mcp__plugin_work_work__project-update",
|
|
265
265
|
"mcp__plugin_work_work__session-list",
|
|
266
|
+
"mcp__plugin_work_work__session-metering",
|
|
266
267
|
"mcp__plugin_work_work__session-name",
|
|
267
268
|
"mcp__plugin_work_work__work-complete",
|
|
268
269
|
"mcp__plugin_work_work__work-create",
|
package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canonical-tool-names.generated.js","sourceRoot":"","sources":["../src/canonical-tool-names.generated.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"canonical-tool-names.generated.js","sourceRoot":"","sources":["../src/canonical-tool-names.generated.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAe3B,OAAO,EAkBL,KAAK,SAAS,EAEf,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAe3B,OAAO,EAkBL,KAAK,SAAS,EAEf,MAAM,kBAAkB,CAAA;AA6BzB,OAAO,KAAK,EAAE,SAAS,EAAyB,MAAM,iBAAiB,CAAA;AAEvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAE3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAyFlE,eAAO,MAAM,kBAAkB,QAA2B,CAAA;AAS1D,eAAO,MAAM,4BAA4B,QAAS,CAAA;AAIlD,MAAM,WAAW,QAAS,SAAQ,IAAI,CAAC,SAAS,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAC7E;;qEAEiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,SAAS,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,iBAAiB,EAAE,MAAM,CAAA;IACzB,kBAAkB,EAAE,WAAW,CAAA;IAC/B,eAAe,EAAE,aAAa,CAAA;IAC9B;kFAC8E;IAC9E,WAAW,EAAE,kBAAkB,CAAA;IAC/B;;gFAE4E;IAC5E,cAAc,EAAE,cAAc,CAAA;IAC9B;;;6BAGyB;IACzB,mBAAmB,CAAC,EAAE,mBAAmB,CAAA;IACzC;;;sCAGkC;IAClC,oBAAoB,CAAC,EAAE,oBAAoB,CAAA;IAC3C;;gFAE4E;IAC5E,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAsFD;;;;;;mEAMmE;AACnE,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAiC9D;AAMD;;;;;;iBAMiB;AACjB,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAmCvF;AAID;;;;;;yBAMyB;AACzB,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAiCzD;AAkCD,wBAAgB,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAEpG;AAgBD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1D;AAUD,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAMvE;AAMD,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,GACtB,MAAM,CAER;AAkCD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAe5F;AAwJD;;;kEAGkE;AAClE,MAAM,MAAM,OAAO,GAAG,IAAI,GAAG;IAC3B,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACpD;;;+CAG2C;IAC3C,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAChD,CAAA;AA8CD,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CA4vFpD"}
|
|
@@ -27,7 +27,7 @@ import { buildWebchatChannelMcpServers, buildWebchatChannelArgv, webchatChannelM
|
|
|
27
27
|
import { buildTelegramChannelMcpServers, buildTelegramChannelArgv, telegramChannelMcpConfigPath } from './telegram-channel-mcp.js';
|
|
28
28
|
import { buildChannelMcpServers, buildChannelArgv, channelMcpConfigPath } from './channel-mcp.js';
|
|
29
29
|
import { mergeTarget, isMultiTarget, targetKinds } from './channel-targets.js';
|
|
30
|
-
import { randomUUID } from 'node:crypto';
|
|
30
|
+
import { randomUUID, createHash } from 'node:crypto';
|
|
31
31
|
import { execFile, execFileSync } from 'node:child_process';
|
|
32
32
|
import { buildRcChildEnv, reapplyAdminLevers } from './rc-daemon.js';
|
|
33
33
|
import { runConnectorAuthLogin } from './connector-auth.js';
|
|
@@ -44,6 +44,7 @@ import { createRcChildLog } from './rc-child-log.js';
|
|
|
44
44
|
// --append-system-prompt for channel-bound admin sessions.
|
|
45
45
|
import { extractVoiceSection } from './system-prompt.js';
|
|
46
46
|
import { readJsonlSession } from './jsonl-enumerator.js';
|
|
47
|
+
import { computeMetering } from './session-metering.js';
|
|
47
48
|
import { claudeStateRoot, projectSlugForCwd, jsonlPathForSessionId, sidecarPathForSessionId, permissionModeLogPathForSessionId, findExistingJsonlForSessionId, slugForExistingJsonl, jsonlPathForSlug, sidecarPathForSlug, detectRemoteControlSlug, classifyBindBlocker, } from './jsonl-path.js';
|
|
48
49
|
import { basename, dirname, join } from 'node:path';
|
|
49
50
|
import { validateUserTitle } from './user-title-store.js';
|
|
@@ -54,6 +55,15 @@ const CHANNELS = ['browser', 'whatsapp', 'telegram', 'webchat', 'email'];
|
|
|
54
55
|
// sessionId UUID (v4) minted by createNewAdminConversation in
|
|
55
56
|
// platform/ui/app/lib/neo4j-store.ts.
|
|
56
57
|
const UUID_PATTERN = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;
|
|
58
|
+
// Task 1392 — the WhatsApp-channel launch-param override. Every WhatsApp admin
|
|
59
|
+
// session runs Sonnet 5 / effort max / bypass, overriding the Task 956 fixed admin
|
|
60
|
+
// params (Opus 4.8 / medium, resolved from settings.json). Expressed as an explicit
|
|
61
|
+
// constant set mirroring the rc-daemon `ADMIN_*` shape. Permission mode is already
|
|
62
|
+
// bypassPermissions (settings.json), so only model + effort are asserted here. `max`
|
|
63
|
+
// is session-only and invalid as a settings.json `effortLevel`, so it rides the
|
|
64
|
+
// `--effort max` argv flag, not the inline settings.
|
|
65
|
+
const WHATSAPP_ADMIN_MODEL = SONNET_MODEL;
|
|
66
|
+
const WHATSAPP_ADMIN_EFFORT = 'max';
|
|
57
67
|
function parseAboutOwner(raw) {
|
|
58
68
|
if (!raw || typeof raw !== 'object')
|
|
59
69
|
return undefined;
|
|
@@ -1402,6 +1412,37 @@ export function buildHttpApp(deps) {
|
|
|
1402
1412
|
timed(deps.logger, 'GET', `/${id}/meta`, 200, Date.now() - start);
|
|
1403
1413
|
return c.json(payload, 200);
|
|
1404
1414
|
});
|
|
1415
|
+
// Task 1384 — deterministic per-day usage & GBP cost for one session. Reads
|
|
1416
|
+
// whichever location holds the JSONL (top level or archive subdir), runs the
|
|
1417
|
+
// full-parse metering core (no AI), and returns the summary. The `op=surface`
|
|
1418
|
+
// checksum lets the http and MCP callers be proven to agree on one session.
|
|
1419
|
+
app.get('/:sessionId/metering', async (c) => {
|
|
1420
|
+
const start = Date.now();
|
|
1421
|
+
const id = c.req.param('sessionId');
|
|
1422
|
+
if (!SESSION_ID_PATTERN.test(id)) {
|
|
1423
|
+
timed(deps.logger, 'GET', `/${id}/metering`, 400, Date.now() - start);
|
|
1424
|
+
return c.json({ error: 'invalid-session-id' }, 400);
|
|
1425
|
+
}
|
|
1426
|
+
const row = resolveRow(deps.watcher, id);
|
|
1427
|
+
if (!row) {
|
|
1428
|
+
timed(deps.logger, 'GET', `/${id}/metering`, 404, Date.now() - start);
|
|
1429
|
+
return c.json({ error: 'session-not-found' }, 404);
|
|
1430
|
+
}
|
|
1431
|
+
const topJsonl = jsonlPathForSessionId(deps.spawnCwd, row.sessionId);
|
|
1432
|
+
const archivedJsonl = jsonlPathForSessionId(deps.spawnCwd, row.sessionId, { archived: true });
|
|
1433
|
+
const jsonlPath = existsSync(topJsonl) ? topJsonl : archivedJsonl;
|
|
1434
|
+
if (!existsSync(jsonlPath)) {
|
|
1435
|
+
timed(deps.logger, 'GET', `/${id}/metering`, 404, Date.now() - start);
|
|
1436
|
+
return c.json({ error: 'session-not-found' }, 404);
|
|
1437
|
+
}
|
|
1438
|
+
const summary = await computeMetering(jsonlPath, { logger: deps.logger });
|
|
1439
|
+
const checksum = createHash('sha256').update(JSON.stringify(summary)).digest('hex').slice(0, 16);
|
|
1440
|
+
const bytes = statSync(jsonlPath).size;
|
|
1441
|
+
deps.logger(`[metering] op=surface caller=http sessionId=${row.sessionId.slice(0, 8)} checksum=${checksum}`);
|
|
1442
|
+
deps.logger(`[metering] op=http sessionId=${row.sessionId.slice(0, 8)} ms=${Date.now() - start} bytes=${bytes}`);
|
|
1443
|
+
timed(deps.logger, 'GET', `/${id}/metering`, 200, Date.now() - start);
|
|
1444
|
+
return c.json(summary, 200);
|
|
1445
|
+
});
|
|
1405
1446
|
app.post('/:sessionId/archive', async (c) => {
|
|
1406
1447
|
const start = Date.now();
|
|
1407
1448
|
const id = c.req.param('sessionId');
|
|
@@ -2394,6 +2435,28 @@ export function buildHttpApp(deps) {
|
|
|
2394
2435
|
// ingest, public, specialist, channel cold-start) on the settings defaults
|
|
2395
2436
|
// even if a future caller were to put model/effort on its body.
|
|
2396
2437
|
const freshAdminLevers = mode === 'fresh' && rcRole === 'admin';
|
|
2438
|
+
// Task 1392 — resolve whether this spawn runs under the WhatsApp Sonnet-5/max
|
|
2439
|
+
// override, for BOTH the argv and the reported launch params below. Only
|
|
2440
|
+
// sessions BORN under the override adopt it, so an existing Opus-born WhatsApp
|
|
2441
|
+
// session finishes its life on Opus:
|
|
2442
|
+
// - fresh: a WhatsApp admin spawn (gateway body carries role:'admin',
|
|
2443
|
+
// channel:'whatsapp', and waChannel) is birthed under the override. The
|
|
2444
|
+
// channel gate matches exactly what the classification sidecar records
|
|
2445
|
+
// (`classifyChannel`), so the argv override and the born-stamp can never
|
|
2446
|
+
// disagree.
|
|
2447
|
+
// - resume: the override is inherited iff the session's classification
|
|
2448
|
+
// sidecar was stamped model=SONNET_MODEL at birth. A bare operator/PIN
|
|
2449
|
+
// resume omits role/channel/waChannel, so the sidecar — not the request
|
|
2450
|
+
// body — is the authoritative born-under-override signal (no other spawn
|
|
2451
|
+
// path stamps a WhatsApp-admin sidecar with a Sonnet model).
|
|
2452
|
+
const whatsappResumeSidecar = mode === 'resume' && sessionId
|
|
2453
|
+
? readSidecar(sidecarPathForSessionId(effectiveAccountDir, sessionId), deps.logger).sidecar
|
|
2454
|
+
: null;
|
|
2455
|
+
const whatsappSonnetSpawn = mode === 'fresh'
|
|
2456
|
+
? rcRole === 'admin' && adminChannel === 'whatsapp' && waChannel !== undefined
|
|
2457
|
+
: whatsappResumeSidecar?.role === 'admin' &&
|
|
2458
|
+
whatsappResumeSidecar?.channel === 'whatsapp' &&
|
|
2459
|
+
whatsappResumeSidecar?.model === WHATSAPP_ADMIN_MODEL;
|
|
2397
2460
|
const argv = ['--remote-control'];
|
|
2398
2461
|
// Task 945 — `name` is the row's display label, never a prompt. It must NOT
|
|
2399
2462
|
// be pushed as a positional: the CLI treats a bare positional as the initial
|
|
@@ -2419,11 +2482,16 @@ export function buildHttpApp(deps) {
|
|
|
2419
2482
|
}
|
|
2420
2483
|
else if (sessionId) {
|
|
2421
2484
|
argv.push(mode === 'resume' ? '--resume' : '--session-id', sessionId);
|
|
2422
|
-
// Task
|
|
2423
|
-
//
|
|
2424
|
-
// the
|
|
2485
|
+
// Task 1392 — a WhatsApp admin session (fresh spawn or a resume born under
|
|
2486
|
+
// the override) is pinned to Sonnet 5 on both branches, so the model holds
|
|
2487
|
+
// for the session's whole life and cannot revert to the settings default.
|
|
2488
|
+
// Task 969 — otherwise, a fresh new-session spawn (the /chat new-session
|
|
2489
|
+
// popover) carries the picked model as the canonical --model flag. A resume
|
|
2490
|
+
// keeps the model its JSONL already ran under, and an absent/invalid model
|
|
2425
2491
|
// (reseatModel null) leaves the settings.json default model in force.
|
|
2426
|
-
if (
|
|
2492
|
+
if (whatsappSonnetSpawn)
|
|
2493
|
+
argv.push('--model', WHATSAPP_ADMIN_MODEL);
|
|
2494
|
+
else if (freshAdminLevers && reseatModel)
|
|
2427
2495
|
argv.push('--model', reseatModel);
|
|
2428
2496
|
}
|
|
2429
2497
|
// Task 592 — per-spawn bypass-permissions waiver. The brand settings.json
|
|
@@ -2445,6 +2513,14 @@ export function buildHttpApp(deps) {
|
|
|
2445
2513
|
if (reseatEffort)
|
|
2446
2514
|
inlineSettings.effortLevel = reseatEffort;
|
|
2447
2515
|
}
|
|
2516
|
+
else if (whatsappSonnetSpawn) {
|
|
2517
|
+
// Task 1392 — WhatsApp admin effort is pinned to `max` on both the fresh
|
|
2518
|
+
// spawn and every resume born under the override. `max` is session-only
|
|
2519
|
+
// (invalid as a settings.json effortLevel), so it rides the --effort argv
|
|
2520
|
+
// flag; asserting it on resume too stops the effort reverting to the
|
|
2521
|
+
// settings default (medium) on the session's second turn.
|
|
2522
|
+
argv.push('--effort', WHATSAPP_ADMIN_EFFORT);
|
|
2523
|
+
}
|
|
2448
2524
|
else if (freshAdminLevers && freshEffort) {
|
|
2449
2525
|
if (freshEffort === 'max')
|
|
2450
2526
|
argv.push('--effort', 'max');
|
|
@@ -2731,11 +2807,21 @@ export function buildHttpApp(deps) {
|
|
|
2731
2807
|
// Task 969 — a fresh new-session spawn carrying picked levers runs under
|
|
2732
2808
|
// them too (not just a fork), so the sidecar + lifeline + the /chat params
|
|
2733
2809
|
// row report the model/effort the session actually launched on.
|
|
2734
|
-
const effectiveRcModel =
|
|
2810
|
+
const effectiveRcModel = whatsappSonnetSpawn
|
|
2811
|
+
? WHATSAPP_ADMIN_MODEL
|
|
2812
|
+
: (forkFromSessionId !== null || freshAdminLevers) && reseatModel
|
|
2813
|
+
? reseatModel
|
|
2814
|
+
: resolveSettingsModel(deps.claudeConfigDir);
|
|
2735
2815
|
// Task 970 — the fork path reports its 4-level effort; the fresh path reports
|
|
2736
2816
|
// its 5-level pick (incl. `max`). Falls back to the settings-resolved effort
|
|
2737
2817
|
// when neither path carries one (absent on a fork, invalid/absent on a fresh).
|
|
2738
|
-
const pickedRcEffort =
|
|
2818
|
+
const pickedRcEffort = whatsappSonnetSpawn
|
|
2819
|
+
? WHATSAPP_ADMIN_EFFORT
|
|
2820
|
+
: forkFromSessionId !== null
|
|
2821
|
+
? reseatEffort
|
|
2822
|
+
: freshAdminLevers
|
|
2823
|
+
? freshEffort
|
|
2824
|
+
: undefined;
|
|
2739
2825
|
const effectiveRcEffort = pickedRcEffort ?? resolveSettingsEffort(deps.claudeConfigDir);
|
|
2740
2826
|
// Step 2 — the exact claude argv (the inner command). The systemd-run
|
|
2741
2827
|
// wrap is composed by the spawnPty adapter; logging the inner argv
|
|
@@ -2859,7 +2945,11 @@ export function buildHttpApp(deps) {
|
|
|
2859
2945
|
// passes no --debug=auto-mode.
|
|
2860
2946
|
permissionMode: effectiveRcPermissionMode,
|
|
2861
2947
|
effectivePermissionMode: null,
|
|
2862
|
-
model
|
|
2948
|
+
// Task 1392 — a fresh WhatsApp admin spawn stamps its Sonnet model
|
|
2949
|
+
// here so a later resume can read this marker back and re-assert the
|
|
2950
|
+
// override; every other spawn leaves this null (the wire `model`
|
|
2951
|
+
// still derives from the JSONL, per the sidecar field contract).
|
|
2952
|
+
model: whatsappSonnetSpawn ? WHATSAPP_ADMIN_MODEL : null,
|
|
2863
2953
|
hidden: false,
|
|
2864
2954
|
specialist: null,
|
|
2865
2955
|
scopeUnitToken: unitToken,
|