@rubytech/create-maxy-code 0.1.324 → 0.1.326
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/package.json +1 -1
- package/payload/platform/lib/models/dist/index.d.ts +9 -0
- package/payload/platform/lib/models/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/models/dist/index.js +17 -3
- package/payload/platform/lib/models/dist/index.js.map +1 -1
- package/payload/platform/lib/models/src/index.ts +17 -2
- package/payload/platform/plugins/admin/skills/deck-pages/SKILL.md +13 -7
- package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +2 -2
- package/payload/platform/plugins/admin/skills/professional-document/SKILL.md +9 -3
- package/payload/platform/plugins/docs/references/admin-ui.md +1 -1
- package/payload/platform/plugins/slides/skills/deck-system/SKILL.md +2 -0
- 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 +30 -10
- package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
- package/payload/platform/templates/specialists/agents/content-producer.md +1 -1
- package/payload/premium-plugins/management-consulting/.claude-plugin/plugin.json +1 -1
- package/payload/premium-plugins/management-consulting/PLUGIN.md +3 -2
- package/payload/premium-plugins/management-consulting/skills/pitch-deck/SKILL.md +142 -0
- package/payload/server/public/assets/{AdminLoginScreens-BaNHSvDG.js → AdminLoginScreens-DNsCEyvZ.js} +1 -1
- package/payload/server/public/assets/AdminShell-DqyjA9x-.js +1 -0
- package/payload/server/public/assets/{Checkbox-BoljWa0z.js → Checkbox-C3WNcLH8.js} +1 -1
- package/payload/server/public/assets/{OperatorConversations-DL9372pQ.css → OperatorConversations-BQudGb45.css} +1 -1
- package/payload/server/public/assets/{admin-DgGttnBt.js → admin-3jmCp4G3.js} +1 -1
- package/payload/server/public/assets/{browser-BLoa93fm.js → browser-DarU3c-V.js} +1 -1
- package/payload/server/public/assets/chat-CG-r6QZ2.js +1 -0
- package/payload/server/public/assets/{data-BK_ggj-z.js → data-4jByS_fv.js} +1 -1
- package/payload/server/public/assets/{graph-iNIIHeRn.js → graph-CylZ1wV1.js} +1 -1
- package/payload/server/public/assets/{graph-labels-IeLlsqB1.js → graph-labels-hGbD_0qZ.js} +1 -1
- package/payload/server/public/assets/{operator-plsrZHSk.js → operator-DgGt6Hc0.js} +1 -1
- package/payload/server/public/assets/page-Dl3SpCO3.js +30 -0
- package/payload/server/public/assets/{public-CuMZDmDF.js → public-8hwaomIS.js} +1 -1
- package/payload/server/public/browser.html +4 -4
- package/payload/server/public/chat.html +5 -5
- package/payload/server/public/data.html +4 -4
- package/payload/server/public/graph.html +6 -6
- package/payload/server/public/index.html +6 -6
- package/payload/server/public/operator.html +7 -7
- package/payload/server/public/public.html +5 -5
- package/payload/server/server.js +5 -1
- package/payload/server/public/assets/AdminShell-6Iq4co_0.js +0 -1
- package/payload/server/public/assets/chat-BJ4229vV.js +0 -1
- package/payload/server/public/assets/page-BOQHw8Fa.js +0 -30
- /package/payload/server/public/assets/{OperatorConversations-yKFxglvV.js → OperatorConversations-BqFmHTF1.js} +0 -0
package/package.json
CHANGED
|
@@ -46,4 +46,13 @@ export type SpawnPermissionMode = (typeof SPAWN_PERMISSION_MODES)[number];
|
|
|
46
46
|
* plus the session-only `auto`/`max` excluded from that subset. */
|
|
47
47
|
export declare const SESSION_EFFORT_LEVELS: readonly ["auto", "low", "medium", "high", "xhigh", "max"];
|
|
48
48
|
export type SessionEffortLevel = (typeof SESSION_EFFORT_LEVELS)[number];
|
|
49
|
+
/** The 5 effort levels the /chat new-session picker may write: the 4 settings.json
|
|
50
|
+
* levels plus the session-only `max`. Distinct from EFFORT_LEVELS (the fork/daemon
|
|
51
|
+
* settings.json subset — `max` is invalid as a settings.json `effortLevel`) and
|
|
52
|
+
* from SESSION_EFFORT_LEVELS (which also carries `auto`, never offered by the
|
|
53
|
+
* picker). A `max` pick reaches the CLI via the `--effort max` argv flag, not the
|
|
54
|
+
* inline `effortLevel` settings key. */
|
|
55
|
+
export declare const NEW_SESSION_EFFORT_LEVELS: readonly ["low", "medium", "high", "xhigh", "max"];
|
|
56
|
+
export type NewSessionEffortLevel = (typeof NEW_SESSION_EFFORT_LEVELS)[number];
|
|
57
|
+
export declare function isNewSessionEffortLevel(value: string): value is NewSessionEffortLevel;
|
|
49
58
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,UAAU,wBAAwB,CAAC;AAChD,eAAO,MAAM,YAAY,sBAAsB,CAAC;AAChD,eAAO,MAAM,WAAW,qBAAqB,CAAC;AAE9C,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAIvD,CAAC;AAEF,wEAAwE;AACxE,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;qEAEqE;AACrE,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAItD,CAAC;AAEF;+DAC+D;AAC/D,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;;mCAGmC;AACnC,eAAO,MAAM,iBAAiB,EAAE,SAAS,MAAM,EAA4C,CAAC;AAC5F,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAErD;AAED;;;;;qCAKqC;AACrC,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED;;;;wDAIwD;AACxD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEnD;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,UAAU,wBAAwB,CAAC;AAChD,eAAO,MAAM,YAAY,sBAAsB,CAAC;AAChD,eAAO,MAAM,WAAW,qBAAqB,CAAC;AAE9C,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAIvD,CAAC;AAEF,wEAAwE;AACxE,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;qEAEqE;AACrE,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAItD,CAAC;AAEF;+DAC+D;AAC/D,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;;mCAGmC;AACnC,eAAO,MAAM,iBAAiB,EAAE,SAAS,MAAM,EAA4C,CAAC;AAC5F,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAErD;AAED;;;;;qCAKqC;AACrC,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED;;;;wDAIwD;AACxD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEnD;AAaD,4EAA4E;AAC5E,eAAO,MAAM,gBAAgB,0EAA2E,CAAC;AACzG,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAC/D,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,cAAc,CAEvE;AAED,sDAAsD;AACtD,eAAO,MAAM,aAAa,6CAA8C,CAAC;AACzE,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AACzD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,WAAW,CAEjE;AASD;kFACkF;AAClF,eAAO,MAAM,sBAAsB,qFAA4C,CAAC;AAChF,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1E;oEACoE;AACpE,eAAO,MAAM,qBAAqB,4DAA6C,CAAC;AAChF,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAExE;;;;;yCAKyC;AACzC,eAAO,MAAM,yBAAyB,oDAAqC,CAAC;AAC5E,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,yBAAyB,CAAC,CAAC,MAAM,CAAC,CAAC;AAC/E,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,qBAAqB,CAErF"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// Templates, docs, and skills reference these values as strings;
|
|
4
4
|
// all TypeScript consumers import from here.
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.SESSION_EFFORT_LEVELS = exports.SPAWN_PERMISSION_MODES = exports.EFFORT_LEVELS = exports.PERMISSION_MODES = exports.SELECTABLE_MODELS = exports.MODEL_DISPLAY_NAMES = exports.MODEL_CONTEXT_WINDOW = exports.HAIKU_MODEL = exports.SONNET_MODEL = exports.OPUS_MODEL = void 0;
|
|
6
|
+
exports.NEW_SESSION_EFFORT_LEVELS = exports.SESSION_EFFORT_LEVELS = exports.SPAWN_PERMISSION_MODES = exports.EFFORT_LEVELS = exports.PERMISSION_MODES = exports.SELECTABLE_MODELS = exports.MODEL_DISPLAY_NAMES = exports.MODEL_CONTEXT_WINDOW = exports.HAIKU_MODEL = exports.SONNET_MODEL = exports.OPUS_MODEL = void 0;
|
|
7
7
|
exports.contextWindow = contextWindow;
|
|
8
8
|
exports.modelDisplayName = modelDisplayName;
|
|
9
9
|
exports.isSelectableModel = isSelectableModel;
|
|
@@ -11,6 +11,7 @@ exports.baseModelId = baseModelId;
|
|
|
11
11
|
exports.canonicalModelId = canonicalModelId;
|
|
12
12
|
exports.isPermissionMode = isPermissionMode;
|
|
13
13
|
exports.isEffortLevel = isEffortLevel;
|
|
14
|
+
exports.isNewSessionEffortLevel = isNewSessionEffortLevel;
|
|
14
15
|
// Opus defaults to the 1M-context variant ([1m] is Claude Code's
|
|
15
16
|
// context-extension suffix, valid in settings.json "model" and agent
|
|
16
17
|
// frontmatter); Sonnet/Haiku stay on the standard 200k window.
|
|
@@ -69,8 +70,11 @@ function canonicalModelId(id) {
|
|
|
69
70
|
// modes and the settings.json effort levels. Single source of truth, imported
|
|
70
71
|
// by the webchat route, the session manager (rc-daemon + fork), the re-seat
|
|
71
72
|
// route, and the two /chat lever components. Friendly labels stay UI-local;
|
|
72
|
-
// only the value sets and their validators live here. `dontAsk`
|
|
73
|
-
//
|
|
73
|
+
// only the value sets and their validators live here. `dontAsk` is excluded from
|
|
74
|
+
// both (no surface offers it); `max` is excluded from the settings.json effort
|
|
75
|
+
// subset because it is invalid as a settings.json `effortLevel` — the new-session
|
|
76
|
+
// picker still offers it, routed via the `--effort max` argv flag (see
|
|
77
|
+
// NEW_SESSION_EFFORT_LEVELS below).
|
|
74
78
|
/** The 5 permission modes the /chat composer and re-seat fork may write. */
|
|
75
79
|
exports.PERMISSION_MODES = ["default", "acceptEdits", "plan", "auto", "bypassPermissions"];
|
|
76
80
|
function isPermissionMode(value) {
|
|
@@ -93,4 +97,14 @@ exports.SPAWN_PERMISSION_MODES = [...exports.PERMISSION_MODES, "dontAsk"];
|
|
|
93
97
|
/** The full effort set persisted in account.json: the 4 settings.json levels
|
|
94
98
|
* plus the session-only `auto`/`max` excluded from that subset. */
|
|
95
99
|
exports.SESSION_EFFORT_LEVELS = ["auto", ...exports.EFFORT_LEVELS, "max"];
|
|
100
|
+
/** The 5 effort levels the /chat new-session picker may write: the 4 settings.json
|
|
101
|
+
* levels plus the session-only `max`. Distinct from EFFORT_LEVELS (the fork/daemon
|
|
102
|
+
* settings.json subset — `max` is invalid as a settings.json `effortLevel`) and
|
|
103
|
+
* from SESSION_EFFORT_LEVELS (which also carries `auto`, never offered by the
|
|
104
|
+
* picker). A `max` pick reaches the CLI via the `--effort max` argv flag, not the
|
|
105
|
+
* inline `effortLevel` settings key. */
|
|
106
|
+
exports.NEW_SESSION_EFFORT_LEVELS = [...exports.EFFORT_LEVELS, "max"];
|
|
107
|
+
function isNewSessionEffortLevel(value) {
|
|
108
|
+
return exports.NEW_SESSION_EFFORT_LEVELS.includes(value);
|
|
109
|
+
}
|
|
96
110
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,0DAA0D;AAC1D,iEAAiE;AACjE,6CAA6C;;;AAgB7C,sCAEC;AAaD,4CAEC;AAOD,8CAEC;AAQD,kCAEC;AAOD,4CAEC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -68,8 +68,11 @@ export function canonicalModelId(id: string): string {
|
|
|
68
68
|
// modes and the settings.json effort levels. Single source of truth, imported
|
|
69
69
|
// by the webchat route, the session manager (rc-daemon + fork), the re-seat
|
|
70
70
|
// route, and the two /chat lever components. Friendly labels stay UI-local;
|
|
71
|
-
// only the value sets and their validators live here. `dontAsk`
|
|
72
|
-
//
|
|
71
|
+
// only the value sets and their validators live here. `dontAsk` is excluded from
|
|
72
|
+
// both (no surface offers it); `max` is excluded from the settings.json effort
|
|
73
|
+
// subset because it is invalid as a settings.json `effortLevel` — the new-session
|
|
74
|
+
// picker still offers it, routed via the `--effort max` argv flag (see
|
|
75
|
+
// NEW_SESSION_EFFORT_LEVELS below).
|
|
73
76
|
|
|
74
77
|
/** The 5 permission modes the /chat composer and re-seat fork may write. */
|
|
75
78
|
export const PERMISSION_MODES = ["default", "acceptEdits", "plan", "auto", "bypassPermissions"] as const;
|
|
@@ -101,3 +104,15 @@ export type SpawnPermissionMode = (typeof SPAWN_PERMISSION_MODES)[number];
|
|
|
101
104
|
* plus the session-only `auto`/`max` excluded from that subset. */
|
|
102
105
|
export const SESSION_EFFORT_LEVELS = ["auto", ...EFFORT_LEVELS, "max"] as const;
|
|
103
106
|
export type SessionEffortLevel = (typeof SESSION_EFFORT_LEVELS)[number];
|
|
107
|
+
|
|
108
|
+
/** The 5 effort levels the /chat new-session picker may write: the 4 settings.json
|
|
109
|
+
* levels plus the session-only `max`. Distinct from EFFORT_LEVELS (the fork/daemon
|
|
110
|
+
* settings.json subset — `max` is invalid as a settings.json `effortLevel`) and
|
|
111
|
+
* from SESSION_EFFORT_LEVELS (which also carries `auto`, never offered by the
|
|
112
|
+
* picker). A `max` pick reaches the CLI via the `--effort max` argv flag, not the
|
|
113
|
+
* inline `effortLevel` settings key. */
|
|
114
|
+
export const NEW_SESSION_EFFORT_LEVELS = [...EFFORT_LEVELS, "max"] as const;
|
|
115
|
+
export type NewSessionEffortLevel = (typeof NEW_SESSION_EFFORT_LEVELS)[number];
|
|
116
|
+
export function isNewSessionEffortLevel(value: string): value is NewSessionEffortLevel {
|
|
117
|
+
return (NEW_SESSION_EFFORT_LEVELS as readonly string[]).includes(value);
|
|
118
|
+
}
|
|
@@ -1,20 +1,26 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: deck-pages
|
|
3
3
|
description: >
|
|
4
|
-
|
|
4
|
+
The slide-deck format spec and generic renderer: HTML slide sequences that
|
|
5
5
|
download as pixel-perfect PDFs via client-side html2canvas + jsPDF rendering.
|
|
6
|
-
Use
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
Use for the slide format mechanics, for a deck the operator already wrote or
|
|
7
|
+
supplies as HTML, or when the output is a set of fixed-dimension landscape
|
|
8
|
+
pages viewed on screen and exported as a PDF. Trigger phrases: "slides",
|
|
9
|
+
"slide deck", "deck PDF", "download deck", "save this as a deck", or any
|
|
10
|
+
request to turn supplied slide content into a multi-page PDF with a download
|
|
11
|
+
button. Composition of consulting decks (a new-business or credentials pitch,
|
|
12
|
+
a client findings or recommendation deck, a thought-leadership deck) is owned
|
|
13
|
+
by `management-consulting:pitch-deck`; founder fundraise decks by
|
|
14
|
+
`venture-studio:investor-data-room`. This skill carries the format, not the
|
|
15
|
+
consulting method.
|
|
12
16
|
---
|
|
13
17
|
|
|
14
18
|
# Deck Pages — Slide-Based PDF Documents
|
|
15
19
|
|
|
16
20
|
Invoked by the admin agent directly.
|
|
17
21
|
|
|
22
|
+
This skill is the slide format spec and generic renderer. When the deck is a consulting deliverable (a new-business or credentials pitch, a client findings or recommendation deck, or a thought-leadership deck), its method and house-voice gate are owned by `management-consulting:pitch-deck`, which composes the content and then renders it. Founder fundraise decks are owned by `venture-studio:investor-data-room`. Use this skill for the format mechanics and for decks the operator already wrote or supplies as HTML.
|
|
23
|
+
|
|
18
24
|
Constraints for producing HTML slide decks that render correctly on screen and export as pixel-perfect PDFs via client-side `html2canvas-pro` + `jsPDF`. Every rule exists because violating it caused a visible rendering problem in exported decks.
|
|
19
25
|
|
|
20
26
|
## How this differs from A4 print documents
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: platform-architecture
|
|
3
3
|
description: Use when grounding any documented-surface claim about what Maxy ships — plugins, skills, specialists, install/deploy flows, internals. This is the install catalogue, not evidence of what is enabled on the current account. For install state on this account, call `capabilities-here`; for documented surface, cite the `Source:` URL inline.
|
|
4
|
-
content-hash: sha256:
|
|
4
|
+
content-hash: sha256:b3f1611fcb4116496aadfdfa39e64fce9061f0611c6d926545f6c6523688fc73
|
|
5
5
|
brand: maxy-code
|
|
6
6
|
product-name: Maxy
|
|
7
7
|
---
|
|
@@ -2326,7 +2326,7 @@ either is a regression.
|
|
|
2326
2326
|
| `/session-rc-spawn` | POST `{ sessionId?, name? }`. Fire-and-forget `claude --remote-control [name] [--session-id <sid>]`. Present `sessionId` resumes; absent starts a fresh session (also used by the sidebar's "New session" button — it no longer opens claude.ai/code directly). Proxies to the manager's `/rc-spawn`, which waits up to **60 s** (raised from 12 s) for the spawned PTY to bind and returns `{ spawnedPid, sessionId, bridgeSessionId, slug, outcome, reason }`. The Sidebar navigates the opened tab to `claude.ai/code/session_<id>` on `outcome=bound`; on `timeout` or `spawn-failed` it shows an error modal (reason + sessionId) and **never** opens a bare claude.ai/code tab. The new process registers itself as its own Remote Control entry in claude.ai/code. | `POST /` |
|
|
2327
2327
|
| `/claude-sessions` | **Spawn surface only**. `POST /` is the Sidebar new-session-with-prompt path, cookie-auth only (the recorder loopback caller was removed; LinkedIn ingest moved to `/rc-spawn`). The former UI-facing handlers (SSE row feed, list, resume, stop, rename, archive, delete, `/:id/meta`, `/:id/input`, `/:id/log`) were removed — the maxy dashboard no longer manages or displays sessions. | `POST /` |
|
|
2328
2328
|
|
|
2329
|
-
**Admin session management moved entirely to claude's own interfaces** (claude.ai/code, claude desktop). A manager-owned per-account `claude rc --spawn same-dir` daemon registers the device as a Remote Control target there; the composer creates / resumes / stops / renames / archives / deletes sessions, with model + permission-mode applied at inception. The model lever is `account.json.adminModel` → `CLAUDE_CONFIG_DIR/settings.json "model"`, written by the daemon supervisor at boot; the reasoning-effort lever is `account.json.effort` → `settings.json "effortLevel"` (accepted values `low|medium|high|xhigh`; any other value, e.g. legacy `"auto"`, leaves the key unset so claude's own default governs), written by the same read-merge-write at boot. A third inception lever, permission mode, is added: `account.json.adminPermissionMode` → `settings.json "permissions.defaultMode"` (the 5 composer-writable modes `default|acceptEdits|plan|auto|bypassPermissions`; `dontAsk` is out of scope). Unlike model/effort (top-level keys), this lever **deep-merges** the nested `permissions.defaultMode`, owning only that key and preserving sibling `permissions` keys (allow/deny/…) — what the binary and the spawn lifeline actually read. **
|
|
2329
|
+
**Admin session management moved entirely to claude's own interfaces** (claude.ai/code, claude desktop). A manager-owned per-account `claude rc --spawn same-dir` daemon registers the device as a Remote Control target there; the composer creates / resumes / stops / renames / archives / deletes sessions, with model + permission-mode applied at inception. The model lever is `account.json.adminModel` → `CLAUDE_CONFIG_DIR/settings.json "model"`, written by the daemon supervisor at boot; the reasoning-effort lever is `account.json.effort` → `settings.json "effortLevel"` (accepted values `low|medium|high|xhigh`; any other value, e.g. legacy `"auto"`, leaves the key unset so claude's own default governs), written by the same read-merge-write at boot. A third inception lever, permission mode, is added: `account.json.adminPermissionMode` → `settings.json "permissions.defaultMode"` (the 5 composer-writable modes `default|acceptEdits|plan|auto|bypassPermissions`; `dontAsk` is out of scope). Unlike model/effort (top-level keys), this lever **deep-merges** the nested `permissions.defaultMode`, owning only that key and preserving sibling `permissions` keys (allow/deny/…) — what the binary and the spawn lifeline actually read. **For admin sessions, permission mode is fixed (Bypass) and not operator-chosen, while model and effort ARE operator-chosen at launch** via the composer's `+` new-session popover — a radio model list (Opus / Sonnet / Haiku) plus a 5-stop Faster→Smarter effort slider (Low / Medium / High / Extra / Max, where `max` applies via the `--effort` argv rather than `settings.json`); the popover description lives in `.docs/admin-webchat-native-channel.md`. Absent a pick (and on every resume), the daemon-pinned defaults govern: the `/chat` composer *footer* carries no live re-seat pickers — `rc-daemon.ts` pins settings.json `model`/`effortLevel`/`permissions.defaultMode` to `claude-opus-4-8[1m]` / `medium` / `bypassPermissions` regardless of `account.json` (read by the rc-spawn webchat path), and `pty-spawner.ts` forces the claude.ai/code PTY `--permission-mode` to `bypassPermissions` for `role=admin`. Public sessions are fixed to `claude-sonnet-4-6` (the `/public-spawn` chokepoint + `buildPublicWebchatSpawnRequest`), keeping `dontAsk`. The composer footer instead renders a **read-only** params row (mode · model · effort labels) plus a context-window usage figure (`pct% · ~used/~window`), all sourced from the session pointer; the full path is in `.docs/admin-webchat-native-channel.md`. The composer cannot re-seat a session, so the "no transcript" 400 on a brand-new chat is unreachable; the `/api/admin/session-reseat` + `/api/webchat/settings` routes and the dashboard re-seat form stay as off-composer surfaces. When the live session runs in `default` ("Ask permissions") mode, a tool the agent attempts that needs approval surfaces an Allow/Deny card in the composer (tool, description, argument preview); a click sends the verdict over Claude Code's channel permission relay and the tool runs or is refused — webchat is the only interactive ask surface (WhatsApp stays text-only; Telegram has no agent channel). Beyond the composer, the maxy admin UI keeps a single "New session" link (`https://claude.ai/code`, opens in a new tab) and no separate session list, viewer, controls, or model/mode picker. The daemon supervisor lives at [`platform/services/claude-session-manager/src/rc-daemon.ts`](../../../services/claude-session-manager/src/rc-daemon.ts). The `/session-defaults` route and `SpawnPreference` node were deleted with the picker. `/new-session-failure`, `/new-session-submit`, and `/claude-capabilities` are now orphaned (consumed only by the deleted NewSessionModal) — see [`.tasks/501`](../../../.tasks/) for their removal.
|
|
2330
2330
|
|
|
2331
2331
|
**Row title resolution.** Both the sidebar (`/sidebar-sessions`) and the manager's own row payload resolve a row's title in the same order: operator rename → Claude Code `ai-title` → first non-CLI user message → 8-char sessionId prefix. The operator-rename tier is the on-disk `<accountDir>/session-titles.json` (the manager's `UserTitleStore`), keyed by the CC sessionId — the sidebar reads that same file, so a write to the store lights up both surfaces with one write.
|
|
2332
2332
|
|
|
@@ -14,8 +14,12 @@ description: >
|
|
|
14
14
|
(prospectus / term sheet / business plan / data room) route to
|
|
15
15
|
`venture-studio:investor-data-room`; property brochures route to
|
|
16
16
|
`real-agent:property-brochure`; pre-valuation packs route to
|
|
17
|
-
`real-agent:property-preval`;
|
|
18
|
-
|
|
17
|
+
`real-agent:property-preval`; consulting decks (new-business or credentials
|
|
18
|
+
pitch, client findings or recommendation deck, thought-leadership deck) route
|
|
19
|
+
to `management-consulting:pitch-deck`; founder fundraise decks route to
|
|
20
|
+
`venture-studio:investor-data-room`; generic slide decks the operator already
|
|
21
|
+
wrote or supplies as HTML route to `admin:deck-pages` (format spec). Does NOT
|
|
22
|
+
trigger on
|
|
19
23
|
format-only phrasings ("PDF", "one-pager", "A4", "brochure", "executive
|
|
20
24
|
document", "market analysis") — those are owned by `admin:a4-print-documents`.
|
|
21
25
|
---
|
|
@@ -35,7 +39,9 @@ These checks run in order against the operator brief. The first match wins and s
|
|
|
35
39
|
| prospectus, term sheet, data room, business plan, investor, fundraise, raise, round, SEIS, EIS, cap table | `venture-studio:investor-data-room` | Owns the UK seed-raise pack end-to-end (16-section plan, prospectus, term sheet, FCA self-cert appendices). |
|
|
36
40
|
| property brochure, property listing brochure | `real-agent:property-brochure` | Owns the estate-agent brochure pipeline (brand → property → A4 PDF). |
|
|
37
41
|
| pre-valuation, preval, valuation pitch, pre-appraisal | `real-agent:property-preval` | Owns the 5-page pre-valuation pitch pack. |
|
|
38
|
-
| deck,
|
|
42
|
+
| consulting deck, credentials pitch, capabilities deck, client findings deck, recommendation deck, steering-committee deck, board strategy deck, thought-leadership deck | `management-consulting:pitch-deck` | Owns the consulting deck method and the house-voice gate across all three modes. |
|
|
43
|
+
| founder pitch deck, investor deck, fundraise deck | `venture-studio:investor-data-room` | Owns the founder fundraise pitch. |
|
|
44
|
+
| deck, slides, slide deck, presentation (generic, operator-supplied, or save-this-HTML) | `admin:deck-pages` | Slide format spec and generic renderer; not an A4 document and not a consulting composer. |
|
|
39
45
|
| noun is "plan" and none of the fundraise tokens above match | **Ask the operator** before proceeding: "Is this a fundraise plan (business plan for investors) or an operating / strategic / marketing / transition plan?" If fundraise → refuse, redirect to `venture-studio:investor-data-room`. If non-fundraise → proceed. | The word "plan" splits cleanly between the two composers; the precision doctrine requires asking rather than guessing. |
|
|
40
46
|
|
|
41
47
|
Emit `[professional-document] refuse reason=<owned-by-other-composer> redirect=<skill-name>` on any refusal. Emit `[professional-document] plan-disambiguation asked` when the plan gate fires and `[professional-document] plan-disambiguation answered=<fundraise|non-fundraise>` once the operator answers.
|
|
@@ -61,7 +61,7 @@ either is a regression.
|
|
|
61
61
|
| `/session-rc-spawn` | POST `{ sessionId?, name? }`. Fire-and-forget `claude --remote-control [name] [--session-id <sid>]`. Present `sessionId` resumes; absent starts a fresh session (also used by the sidebar's "New session" button — it no longer opens claude.ai/code directly). Proxies to the manager's `/rc-spawn`, which waits up to **60 s** (raised from 12 s) for the spawned PTY to bind and returns `{ spawnedPid, sessionId, bridgeSessionId, slug, outcome, reason }`. The Sidebar navigates the opened tab to `claude.ai/code/session_<id>` on `outcome=bound`; on `timeout` or `spawn-failed` it shows an error modal (reason + sessionId) and **never** opens a bare claude.ai/code tab. The new process registers itself as its own Remote Control entry in claude.ai/code. | `POST /` |
|
|
62
62
|
| `/claude-sessions` | **Spawn surface only**. `POST /` is the Sidebar new-session-with-prompt path, cookie-auth only (the recorder loopback caller was removed; LinkedIn ingest moved to `/rc-spawn`). The former UI-facing handlers (SSE row feed, list, resume, stop, rename, archive, delete, `/:id/meta`, `/:id/input`, `/:id/log`) were removed — the maxy dashboard no longer manages or displays sessions. | `POST /` |
|
|
63
63
|
|
|
64
|
-
**Admin session management moved entirely to claude's own interfaces** (claude.ai/code, claude desktop). A manager-owned per-account `claude rc --spawn same-dir` daemon registers the device as a Remote Control target there; the composer creates / resumes / stops / renames / archives / deletes sessions, with model + permission-mode applied at inception. The model lever is `account.json.adminModel` → `CLAUDE_CONFIG_DIR/settings.json "model"`, written by the daemon supervisor at boot; the reasoning-effort lever is `account.json.effort` → `settings.json "effortLevel"` (accepted values `low|medium|high|xhigh`; any other value, e.g. legacy `"auto"`, leaves the key unset so claude's own default governs), written by the same read-merge-write at boot. A third inception lever, permission mode, is added: `account.json.adminPermissionMode` → `settings.json "permissions.defaultMode"` (the 5 composer-writable modes `default|acceptEdits|plan|auto|bypassPermissions`; `dontAsk` is out of scope). Unlike model/effort (top-level keys), this lever **deep-merges** the nested `permissions.defaultMode`, owning only that key and preserving sibling `permissions` keys (allow/deny/…) — what the binary and the spawn lifeline actually read. **
|
|
64
|
+
**Admin session management moved entirely to claude's own interfaces** (claude.ai/code, claude desktop). A manager-owned per-account `claude rc --spawn same-dir` daemon registers the device as a Remote Control target there; the composer creates / resumes / stops / renames / archives / deletes sessions, with model + permission-mode applied at inception. The model lever is `account.json.adminModel` → `CLAUDE_CONFIG_DIR/settings.json "model"`, written by the daemon supervisor at boot; the reasoning-effort lever is `account.json.effort` → `settings.json "effortLevel"` (accepted values `low|medium|high|xhigh`; any other value, e.g. legacy `"auto"`, leaves the key unset so claude's own default governs), written by the same read-merge-write at boot. A third inception lever, permission mode, is added: `account.json.adminPermissionMode` → `settings.json "permissions.defaultMode"` (the 5 composer-writable modes `default|acceptEdits|plan|auto|bypassPermissions`; `dontAsk` is out of scope). Unlike model/effort (top-level keys), this lever **deep-merges** the nested `permissions.defaultMode`, owning only that key and preserving sibling `permissions` keys (allow/deny/…) — what the binary and the spawn lifeline actually read. **For admin sessions, permission mode is fixed (Bypass) and not operator-chosen, while model and effort ARE operator-chosen at launch** via the composer's `+` new-session popover — a radio model list (Opus / Sonnet / Haiku) plus a 5-stop Faster→Smarter effort slider (Low / Medium / High / Extra / Max, where `max` applies via the `--effort` argv rather than `settings.json`); the popover description lives in `.docs/admin-webchat-native-channel.md`. Absent a pick (and on every resume), the daemon-pinned defaults govern: the `/chat` composer *footer* carries no live re-seat pickers — `rc-daemon.ts` pins settings.json `model`/`effortLevel`/`permissions.defaultMode` to `claude-opus-4-8[1m]` / `medium` / `bypassPermissions` regardless of `account.json` (read by the rc-spawn webchat path), and `pty-spawner.ts` forces the claude.ai/code PTY `--permission-mode` to `bypassPermissions` for `role=admin`. Public sessions are fixed to `claude-sonnet-4-6` (the `/public-spawn` chokepoint + `buildPublicWebchatSpawnRequest`), keeping `dontAsk`. The composer footer instead renders a **read-only** params row (mode · model · effort labels) plus a context-window usage figure (`pct% · ~used/~window`), all sourced from the session pointer; the full path is in `.docs/admin-webchat-native-channel.md`. The composer cannot re-seat a session, so the "no transcript" 400 on a brand-new chat is unreachable; the `/api/admin/session-reseat` + `/api/webchat/settings` routes and the dashboard re-seat form stay as off-composer surfaces. When the live session runs in `default` ("Ask permissions") mode, a tool the agent attempts that needs approval surfaces an Allow/Deny card in the composer (tool, description, argument preview); a click sends the verdict over Claude Code's channel permission relay and the tool runs or is refused — webchat is the only interactive ask surface (WhatsApp stays text-only; Telegram has no agent channel). Beyond the composer, the maxy admin UI keeps a single "New session" link (`https://claude.ai/code`, opens in a new tab) and no separate session list, viewer, controls, or model/mode picker. The daemon supervisor lives at [`platform/services/claude-session-manager/src/rc-daemon.ts`](../../../services/claude-session-manager/src/rc-daemon.ts). The `/session-defaults` route and `SpawnPreference` node were deleted with the picker. `/new-session-failure`, `/new-session-submit`, and `/claude-capabilities` are now orphaned (consumed only by the deleted NewSessionModal) — see [`.tasks/501`](../../../.tasks/) for their removal.
|
|
65
65
|
|
|
66
66
|
**Row title resolution.** Both the sidebar (`/sidebar-sessions`) and the manager's own row payload resolve a row's title in the same order: operator rename → Claude Code `ai-title` → first non-CLI user message → 8-char sessionId prefix. The operator-rename tier is the on-disk `<accountDir>/session-titles.json` (the manager's `UserTitleStore`), keyed by the CC sessionId — the sidebar reads that same file, so a write to the store lights up both surfaces with one write.
|
|
67
67
|
|
|
@@ -40,6 +40,8 @@ Based on the user's description, select the right storytelling format. Read the
|
|
|
40
40
|
|
|
41
41
|
These files are in the same directory as this SKILL.md. Read them from here.
|
|
42
42
|
|
|
43
|
+
**Consulting decks arrive composed.** When the brief is a consulting deliverable (a new-business or credentials pitch, a client findings or recommendation deck, or a thought-leadership deck), `management-consulting:pitch-deck` has already chosen the structure and composed the content in the operator's house voice (its findings mode uses the McKinsey SCR engine in `STORYTELLING-mbb.md`). Render that brief through the component library below; do not re-select a storytelling format or re-write the prose.
|
|
44
|
+
|
|
43
45
|
**Default:** If unclear, use the six-beat TED Talk structure from `STORYTELLING.md`. It adapts to most formats.
|
|
44
46
|
|
|
45
47
|
## Step 2. Draft the outline
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAa3B,OAAO,EAiBL,KAAK,SAAS,EAEf,MAAM,kBAAkB,CAAA;AAsBzB,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;AAC3D,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAgFhE,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,cAAc,EAAE,cAAc,CAAA;IAC9B;;gFAE4E;IAC5E,cAAc,EAAE,cAAc,CAAA;IAC9B;;;6BAGyB;IACzB,mBAAmB,CAAC,EAAE,mBAAmB,CAAA;IACzC;;gFAE4E;IAC5E,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAgHD,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;AAmBD,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAa3B,OAAO,EAiBL,KAAK,SAAS,EAEf,MAAM,kBAAkB,CAAA;AAsBzB,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;AAC3D,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAgFhE,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,cAAc,EAAE,cAAc,CAAA;IAC9B;;gFAE4E;IAC5E,cAAc,EAAE,cAAc,CAAA;IAC9B;;;6BAGyB;IACzB,mBAAmB,CAAC,EAAE,mBAAmB,CAAA;IACzC;;gFAE4E;IAC5E,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAgHD,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;AAmBD,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAy4EpD"}
|
|
@@ -30,7 +30,7 @@ import { mergeTarget, isMultiTarget, targetKinds } from './channel-targets.js';
|
|
|
30
30
|
import { randomUUID } from 'node:crypto';
|
|
31
31
|
import { execFileSync } from 'node:child_process';
|
|
32
32
|
import { buildRcChildEnv, reapplyAdminLevers } from './rc-daemon.js';
|
|
33
|
-
import { isEffortLevel, isPermissionMode, SONNET_MODEL } from '../../../lib/models/dist/index.js';
|
|
33
|
+
import { isEffortLevel, isNewSessionEffortLevel, isPermissionMode, SONNET_MODEL } from '../../../lib/models/dist/index.js';
|
|
34
34
|
import { spawnClaudeSession, stopSession, writeInputToPty, isLive, onPtyExit, livePtyCount, liveSessionIds, getPtyTrackerForTests, livePidForSession, classifyLiveness, priorExitedCountForSession, PERMISSION_MODES, openFdCount, registerRcSpawnPty, } from './pty-spawner.js';
|
|
35
35
|
import { writeScopeRecord, removeScopeRecord } from './scope-record.js';
|
|
36
36
|
import { writeReseatMarker, resolveReseatChain, clearReseatMarker } from './reseat-ledger.js';
|
|
@@ -1805,6 +1805,13 @@ export function buildHttpApp(deps) {
|
|
|
1805
1805
|
// absent (the fork keeps the settings-resolved mode / the harness default effort).
|
|
1806
1806
|
const reseatPermissionMode = typeof body.permissionMode === 'string' ? (isPermissionMode(body.permissionMode) ? body.permissionMode : null) : undefined;
|
|
1807
1807
|
const reseatEffort = typeof body.effort === 'string' ? (isEffortLevel(body.effort) ? body.effort : null) : undefined;
|
|
1808
|
+
// Task 970 — the fresh new-session picker admits a 5th level, `max`, that the
|
|
1809
|
+
// fork path never offers. Parsed against the wider allowlist; `max` is routed
|
|
1810
|
+
// to the `--effort` argv below (it is session-only — invalid as a settings.json
|
|
1811
|
+
// `effortLevel`), the 4 lower levels ride the inline `effortLevel`. null when
|
|
1812
|
+
// present-but-invalid (a silent drop to the settings default — the fresh path
|
|
1813
|
+
// is not a hard-reject path, unlike the fork's reseatEffort 400 above).
|
|
1814
|
+
const freshEffort = typeof body.effort === 'string' ? (isNewSessionEffortLevel(body.effort) ? body.effort : null) : undefined;
|
|
1808
1815
|
// Task 626 — per-visitor slice ringfence for the public session-end review
|
|
1809
1816
|
// rc session. Shape-gated identically to /public-spawn so a body-controlled
|
|
1810
1817
|
// value cannot reach the child env. Absent on channel-admin / LinkedIn.
|
|
@@ -2079,15 +2086,24 @@ export function buildHttpApp(deps) {
|
|
|
2079
2086
|
// waived so the disclaimer is suppressed whatever mode the session resolves
|
|
2080
2087
|
// to. Per Task 574 doctrine the waiver is per-spawn (never written into
|
|
2081
2088
|
// settings.json / .claude.json, which would permanently waive it).
|
|
2082
|
-
// Task 928 (fork) / Task 969 (fresh new-session) — the picked effort rides
|
|
2083
|
-
// the
|
|
2084
|
-
//
|
|
2085
|
-
//
|
|
2086
|
-
//
|
|
2087
|
-
//
|
|
2089
|
+
// Task 928 (fork) / Task 969/970 (fresh new-session) — the picked effort rides
|
|
2090
|
+
// the per-spawn inline settings (never the shared settings.json — that would
|
|
2091
|
+
// change every later spawn's effort fleet-wide), EXCEPT the fresh-path `max`
|
|
2092
|
+
// pick: `max` is session-only and invalid as a settings.json `effortLevel`
|
|
2093
|
+
// (the binary silently ignores it), so it must reach the CLI via the
|
|
2094
|
+
// `--effort max` argv flag. A fork keeps its 4-level effort on the inline path
|
|
2095
|
+
// (max is never offered there); a resume keeps its settings-resolved effort.
|
|
2088
2096
|
const inlineSettings = { skipDangerousModePermissionPrompt: true, skipAutoPermissionPrompt: true };
|
|
2089
|
-
if (
|
|
2090
|
-
|
|
2097
|
+
if (forkFromSessionId !== null) {
|
|
2098
|
+
if (reseatEffort)
|
|
2099
|
+
inlineSettings.effortLevel = reseatEffort;
|
|
2100
|
+
}
|
|
2101
|
+
else if (freshAdminLevers && freshEffort) {
|
|
2102
|
+
if (freshEffort === 'max')
|
|
2103
|
+
argv.push('--effort', 'max');
|
|
2104
|
+
else
|
|
2105
|
+
inlineSettings.effortLevel = freshEffort;
|
|
2106
|
+
}
|
|
2091
2107
|
argv.push('--settings', JSON.stringify(inlineSettings));
|
|
2092
2108
|
// Task 677 P2 — admin WhatsApp native channel. When the caller supplies
|
|
2093
2109
|
// waChannel, register the per-sender channel server in its own --mcp-config
|
|
@@ -2297,7 +2313,11 @@ export function buildHttpApp(deps) {
|
|
|
2297
2313
|
// them too (not just a fork), so the sidecar + lifeline + the /chat params
|
|
2298
2314
|
// row report the model/effort the session actually launched on.
|
|
2299
2315
|
const effectiveRcModel = (forkFromSessionId !== null || freshAdminLevers) && reseatModel ? reseatModel : resolveSettingsModel(deps.claudeConfigDir);
|
|
2300
|
-
|
|
2316
|
+
// Task 970 — the fork path reports its 4-level effort; the fresh path reports
|
|
2317
|
+
// its 5-level pick (incl. `max`). Falls back to the settings-resolved effort
|
|
2318
|
+
// when neither path carries one (absent on a fork, invalid/absent on a fresh).
|
|
2319
|
+
const pickedRcEffort = forkFromSessionId !== null ? reseatEffort : freshAdminLevers ? freshEffort : undefined;
|
|
2320
|
+
const effectiveRcEffort = pickedRcEffort ?? resolveSettingsEffort(deps.claudeConfigDir);
|
|
2301
2321
|
// Step 2 — the exact claude argv (the inner command). The systemd-run
|
|
2302
2322
|
// wrap is composed by the spawnPty adapter; logging the inner argv
|
|
2303
2323
|
// here is enough for an operator to reproduce by hand. The wrapped
|