@rubytech/create-maxy-code 0.1.322 → 0.1.324

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/dist/index.js +55 -3
  2. package/package.json +1 -1
  3. package/payload/platform/plugins/admin/skills/insight/SKILL.md +1 -1
  4. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +36 -5
  5. package/payload/platform/plugins/docs/references/admin-ui.md +12 -0
  6. package/payload/platform/plugins/docs/references/deployment.md +19 -0
  7. package/payload/platform/plugins/docs/references/plugins-guide.md +4 -4
  8. package/payload/platform/plugins/memory/PLUGIN.md +0 -1
  9. package/payload/platform/plugins/memory/mcp/dist/index.js +0 -45
  10. package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -1
  11. package/payload/platform/plugins/memory/mcp/dist/lib/typed-edge-schema.js +6 -6
  12. package/payload/platform/plugins/memory/mcp/dist/lib/typed-edge-schema.js.map +1 -1
  13. package/payload/platform/plugins/notion-import/.claude-plugin/plugin.json +1 -1
  14. package/payload/platform/plugins/notion-import/PLUGIN.md +6 -6
  15. package/payload/platform/plugins/notion-import/skills/notion-import/SKILL.md +1 -1
  16. package/payload/platform/plugins/notion-import/skills/notion-import/references/databases.md +1 -1
  17. package/payload/platform/plugins/obsidian-import/.claude-plugin/plugin.json +1 -1
  18. package/payload/platform/plugins/obsidian-import/PLUGIN.md +5 -5
  19. package/payload/platform/plugins/obsidian-import/skills/obsidian-import/SKILL.md +1 -1
  20. package/payload/platform/plugins/substack-import/.claude-plugin/plugin.json +1 -1
  21. package/payload/platform/plugins/substack-import/PLUGIN.md +8 -8
  22. package/payload/platform/plugins/substack-import/skills/substack-import/SKILL.md +2 -2
  23. package/payload/platform/plugins/substack-import/skills/substack-import/references/posts.md +1 -1
  24. package/payload/platform/plugins/x-import/.claude-plugin/plugin.json +1 -1
  25. package/payload/platform/plugins/x-import/PLUGIN.md +5 -5
  26. package/payload/platform/plugins/x-import/skills/x-import/SKILL.md +1 -1
  27. package/payload/platform/scripts/check-no-esm-require.mjs +3 -0
  28. package/payload/platform/scripts/identity-forbidden-token-check.mjs +0 -1
  29. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts.map +1 -1
  30. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js +0 -1
  31. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -1
  32. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
  33. package/payload/platform/services/claude-session-manager/dist/http-server.js +24 -7
  34. package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
  35. package/payload/platform/services/claude-session-manager/dist/index.js +3 -3
  36. package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
  37. package/payload/platform/services/claude-session-manager/dist/jsonl-tail.d.ts.map +1 -1
  38. package/payload/platform/services/claude-session-manager/dist/jsonl-tail.js +8 -4
  39. package/payload/platform/services/claude-session-manager/dist/jsonl-tail.js.map +1 -1
  40. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +3 -3
  41. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
  42. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +13 -12
  43. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
  44. package/payload/platform/services/claude-session-manager/dist/rc-daemon.d.ts +5 -4
  45. package/payload/platform/services/claude-session-manager/dist/rc-daemon.d.ts.map +1 -1
  46. package/payload/platform/services/claude-session-manager/dist/rc-daemon.js.map +1 -1
  47. package/payload/platform/services/claude-session-manager/dist/reaper.js +6 -6
  48. package/payload/platform/services/claude-session-manager/dist/reaper.js.map +1 -1
  49. package/payload/platform/services/claude-session-manager/dist/system-prompt.d.ts.map +1 -1
  50. package/payload/platform/services/claude-session-manager/dist/system-prompt.js +0 -1
  51. package/payload/platform/services/claude-session-manager/dist/system-prompt.js.map +1 -1
  52. package/payload/platform/templates/specialists/agents/coding-assistant.md +1 -1
  53. package/payload/platform/templates/specialists/agents/database-operator.md +2 -6
  54. package/payload/platform/templates/specialists/agents/librarian.md +20 -7
  55. package/payload/server/power-health.cjs +129 -0
  56. package/payload/server/public/assets/AdminLoginScreens-BaNHSvDG.js +1 -0
  57. package/payload/server/public/assets/AdminShell-6Iq4co_0.js +1 -0
  58. package/payload/server/public/assets/{Checkbox-DjANdKoK.js → Checkbox-BoljWa0z.js} +1 -1
  59. package/payload/server/public/assets/OperatorConversations-DL9372pQ.css +1 -0
  60. package/payload/server/public/assets/OperatorConversations-yKFxglvV.js +9 -0
  61. package/payload/server/public/assets/{admin--FlkQOMu.js → admin-DgGttnBt.js} +1 -1
  62. package/payload/server/public/assets/{browser-vowQc0TJ.js → browser-BLoa93fm.js} +1 -1
  63. package/payload/server/public/assets/chat-BJ4229vV.js +1 -0
  64. package/payload/server/public/assets/data-BK_ggj-z.js +1 -0
  65. package/payload/server/public/assets/{graph-B-64Cq-y.js → graph-iNIIHeRn.js} +3 -3
  66. package/payload/server/public/assets/{graph-labels-Dtd2ckXH.js → graph-labels-IeLlsqB1.js} +1 -1
  67. package/payload/server/public/assets/operator-plsrZHSk.js +1 -0
  68. package/payload/server/public/assets/page-BOQHw8Fa.js +30 -0
  69. package/payload/server/public/assets/{public-CrFepd06.js → public-CuMZDmDF.js} +1 -1
  70. package/payload/server/public/browser.html +4 -4
  71. package/payload/server/public/chat.html +5 -5
  72. package/payload/server/public/data.html +4 -4
  73. package/payload/server/public/graph.html +6 -6
  74. package/payload/server/public/index.html +6 -6
  75. package/payload/server/public/operator.html +7 -7
  76. package/payload/server/public/public.html +5 -5
  77. package/payload/server/server-init.cjs +40 -0
  78. package/payload/server/server.js +36 -1
  79. package/payload/platform/plugins/memory/mcp/scripts/backfill-typed-edges.ts +0 -72
  80. package/payload/platform/templates/specialists/agents/archive-ingest-operator.md +0 -45
  81. package/payload/server/public/assets/AdminLoginScreens-D1X4M9wX.js +0 -1
  82. package/payload/server/public/assets/AdminShell-BGZ3d3gY.js +0 -1
  83. package/payload/server/public/assets/OperatorConversations-BkitSIiT.js +0 -9
  84. package/payload/server/public/assets/OperatorConversations-C-eFXT7w.css +0 -1
  85. package/payload/server/public/assets/chat-Cw6rUWiC.js +0 -1
  86. package/payload/server/public/assets/data-9ArhwX1q.js +0 -1
  87. package/payload/server/public/assets/operator-Cqn1Ne60.js +0 -1
  88. package/payload/server/public/assets/page-DQ5D6Dg9.js +0 -30
@@ -1,34 +1,34 @@
1
1
  ---
2
2
  name: substack-import
3
- description: "Import a Substack 'Export your data' archive into the Maxy Neo4j graph. Skill-only plugin owned by the archive-ingest-operator specialist. Opt-in per brand — not enabled by default."
3
+ description: "Import a Substack 'Export your data' archive into the Maxy Neo4j graph. Skill-only plugin owned by the librarian specialist. Opt-in per brand — not enabled by default."
4
4
  tools: []
5
5
  always: false
6
6
  embed: false
7
- specialist: archive-ingest-operator
7
+ specialist: librarian
8
8
  metadata: {"platform":{"optional":true,"pluginKey":"substack-import"}}
9
9
  ---
10
10
 
11
11
  # Substack Import
12
12
 
13
- Ingests a Substack "Export your data" archive (extracted directory or zip — `posts.csv` + per-post HTML bodies under `posts/`, `subscribers.csv`, an engagement events file when present, and an `images/` tree referenced from post bodies) into the Maxy Neo4j graph. Skill-only plugin — no MCP server, no admin tools added. The skill runs under the `specialists:archive-ingest-operator` specialist, which owns bulk external-archive ingestion.
13
+ Ingests a Substack "Export your data" archive (extracted directory or zip — `posts.csv` + per-post HTML bodies under `posts/`, `subscribers.csv`, an engagement events file when present, and an `images/` tree referenced from post bodies) into the Maxy Neo4j graph. Skill-only plugin — no MCP server, no admin tools added. The skill runs under the `specialists:librarian` specialist, which owns foreground ingest of documents, transcripts, LinkedIn, and every bulk external archive.
14
14
 
15
15
  ## When this applies
16
16
 
17
- The admin agent delegates to `specialists:archive-ingest-operator` when the operator drops an extracted Substack archive directory (or a `<publication>.zip` path) into chat and asks to import it. The specialist runs the skill's owner + publication confirmation flow before any CSV or HTML body is read, then dispatches the two existing write surfaces:
17
+ The admin agent delegates to `specialists:librarian` when the operator drops an extracted Substack archive directory (or a `<publication>.zip` path) into chat and asks to import it. The specialist runs the skill's owner + publication confirmation flow before any CSV or HTML body is read, then dispatches the two existing write surfaces:
18
18
 
19
19
  - **Posts** → per-post Task-tool dispatch to `librarian`, which loads `document-ingest` and writes one `:KnowledgeDocument {source:'substack', kind:'substack-post', substackPostId}` per essay. `:Section` chunking is owned by `document-ingest`'s in-turn typed-section classification, not this plugin.
20
- - **Subscribers** → `archive-ingest-operator` directly MERGEs a single `:KnowledgeDocument {kind:'substack-subscriber-roster'}` via `memory-write`, then per-row `memory-write` for each subscriber `:Person` (MERGEd on `(accountId, email)`), then `:MENTIONS {mentionContext:'substack-subscription', tier, subscribedAt, unsubscribedAt?, totalOpens?, totalClicks?, lastOpenedAt?, lastClickedAt?, engagementWindowDays?}` from the roster KD to each `:Person`. Engagement aggregates come from `email_activity.csv` (filename varies by export — the skill tries a known list).
20
+ - **Subscribers** → `librarian` directly MERGEs a single `:KnowledgeDocument {kind:'substack-subscriber-roster'}` via `memory-write`, then per-row `memory-write` for each subscriber `:Person` (MERGEd on `(accountId, email)`), then `:MENTIONS {mentionContext:'substack-subscription', tier, subscribedAt, unsubscribedAt?, totalOpens?, totalClicks?, lastOpenedAt?, lastClickedAt?, engagementWindowDays?}` from the roster KD to each `:Person`. Engagement aggregates come from `email_activity.csv` (filename varies by export — the skill tries a known list).
21
21
 
22
22
  ## What this plugin is not
23
23
 
24
24
  - **Not a new graph writer.** Every write routes through existing surfaces — `document-ingest` (via librarian) for posts, `memory-write` for subscribers, roster KD, and images. No new MCP tool, no new archive-write handler.
25
25
  - **Not a new label.** No `:SubstackPublication` anchor; `publicationName` is a short-string property on every post KD and the roster KD. No bespoke `:Post`, `:Subscriber`, `:Subscription`. Posts are `:KnowledgeDocument`, subscribers are `:Person`, images are `:DigitalDocument`.
26
- - **Not a new edge type.** The closed-edge rule (`archive-ingest-operator.md`) forbids inventing `:SUBSCRIBED_TO`. Subscription is `:MENTIONS {mentionContext:'substack-subscription', tier, ...engagement}` from the roster KD to each `:Person`. Per-event detail is intentionally aggregated to per-edge totals.
26
+ - **Not a new edge type.** The closed-edge rule (`librarian.md`) forbids inventing `:SUBSCRIBED_TO`. Subscription is `:MENTIONS {mentionContext:'substack-subscription', tier, ...engagement}` from the roster KD to each `:Person`. Per-event detail is intentionally aggregated to per-edge totals.
27
27
  - **Not a live Substack client.** Archive-only — no RSS poll, no API, no scraper. Comments are not in the export and not in scope.
28
28
 
29
29
  ## Relationship to other plugins
30
30
 
31
31
  - **memory** — the underlying Cypher-write surface used by the skill (`memory-write`, `memory-update`, `memory-search`). Every node carries `source='substack'` + `createdByAgent='substack-import'` for provenance, plus `importId` (UUID per skill run) so a future dream-cycle pass can detect orphans or selectively re-ingest.
32
- - **document-ingest** (memory skill, run by librarian) — owns the per-post `:KnowledgeDocument` writes and `:Section` chunking. Dispatched from `archive-ingest-operator` via the Task tool with `sourceType: 'substack'` and a synthetic stable `attachmentId = "substack-post-${substackPostId}"`.
33
- - **archive-ingest-operator specialist** — owns execution. See the delegation clause in [archive-ingest-operator.md](../../templates/specialists/agents/archive-ingest-operator.md).
32
+ - **document-ingest** (memory skill, run by librarian) — owns the per-post `:KnowledgeDocument` writes and `:Section` chunking. Dispatched by `librarian` via the Task tool with `sourceType: 'substack'` and a synthetic stable `attachmentId = "substack-post-${substackPostId}"`.
33
+ - **librarian specialist** — owns execution. See the delegation clause in [librarian.md](../../templates/specialists/agents/librarian.md).
34
34
  - **x-import** — sibling skill-only ingest plugin under the same specialist. The two share no code; the pattern (provenance confirmation → walk → bulk gate → write through existing surfaces) is the same.
@@ -5,7 +5,7 @@ description: Ingest an extracted Substack "Export your data" archive into the gr
5
5
 
6
6
  # Substack Import
7
7
 
8
- **Invoked from `specialists:archive-ingest-operator`** — the admin agent dispatches the archive-ingest-operator when the operator hands over a Substack archive, and the specialist loads this skill. The admin agent never calls this skill directly.
8
+ **Invoked from `specialists:librarian`** — the admin agent dispatches the librarian when the operator hands over a Substack archive, and the specialist loads this skill. The admin agent never calls this skill directly.
9
9
 
10
10
  One Substack archive becomes:
11
11
 
@@ -83,7 +83,7 @@ See [posts.md](references/posts.md) for HTML-to-markdown body conversion rules a
83
83
 
84
84
  **3b. Roster KD + per-subscriber `:Person` + `:MENTIONS` edges.**
85
85
 
86
- `archive-ingest-operator` runs these writes directly using its `memory-write` tool — no dispatch needed.
86
+ `librarian` runs these writes directly using its `memory-write` tool — no dispatch needed.
87
87
 
88
88
  1. **Read engagement aggregates** (once, before the per-subscriber loop). If `$engagementFile` is non-null, parse it per [engagement.md](references/engagement.md) and build an in-memory map `emailToAggregates: { email -> { totalOpens, totalClicks, lastOpenedAt, lastClickedAt, engagementWindowDays } }`. If `$engagementFile` is null, emit `[substack-import:warn] no-engagement-file` once and use an empty map.
89
89
 
@@ -48,7 +48,7 @@ When detected, set `bodyTruncated=true` on the dispatch brief's `extraProperties
48
48
 
49
49
  ## Inline `@person` mentions
50
50
 
51
- Substack post bodies occasionally reference `@handle`-style mentions. `document-ingest`'s in-turn typed-section classification handles these — the dispatch brief does not pre-resolve them. Per `archive-ingest-operator.md`'s account-isolation rule, mentions resolve against `:Person {accountId}` only; no auto-create from mention text.
51
+ Substack post bodies occasionally reference `@handle`-style mentions. `document-ingest`'s in-turn typed-section classification handles these — the dispatch brief does not pre-resolve them. Per `librarian.md`'s account-isolation rule, mentions resolve against `:Person {accountId}` only; no auto-create from mention text.
52
52
 
53
53
  ## Dispatch brief shape (the Task-tool input the operator builds)
54
54
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "x-import",
3
- "description": "Import an X (Twitter) archive into the Maxy Neo4j graph. Skill-only plugin owned by the database-operator specialist. Opt-in per brand — not enabled by default.",
3
+ "description": "Import an X (Twitter) archive into the Maxy Neo4j graph. Skill-only plugin owned by the librarian specialist. Opt-in per brand — not enabled by default.",
4
4
  "version": "0.1.0",
5
5
  "author": {
6
6
  "name": "Rubytech LLC"
@@ -1,20 +1,20 @@
1
1
  ---
2
2
  name: x-import
3
- description: "Import an X (Twitter) archive into the Maxy Neo4j graph. Skill-only plugin owned by the database-operator specialist. Opt-in per brand — not enabled by default."
3
+ description: "Import an X (Twitter) archive into the Maxy Neo4j graph. Skill-only plugin owned by the librarian specialist. Opt-in per brand — not enabled by default."
4
4
  tools: []
5
5
  always: false
6
6
  embed: false
7
- specialist: database-operator
7
+ specialist: librarian
8
8
  metadata: {"platform":{"optional":true,"pluginKey":"x-import"}}
9
9
  ---
10
10
 
11
11
  # X Import
12
12
 
13
- Ingests an X (formerly Twitter) Basic Data Export (extracted ZIP — a directory of `.js` shims plus media subdirectories) into the Maxy Neo4j graph. Skill-only plugin — no MCP server, no admin tools added. The skill runs under the `specialists:database-operator` specialist, which owns bulk external-archive ingestion.
13
+ Ingests an X (formerly Twitter) Basic Data Export (extracted ZIP — a directory of `.js` shims plus media subdirectories) into the Maxy Neo4j graph. Skill-only plugin — no MCP server, no admin tools added. The skill runs under the `specialists:librarian` specialist, which owns foreground ingest of documents, transcripts, LinkedIn, and every bulk external archive.
14
14
 
15
15
  ## When this applies
16
16
 
17
- The admin agent delegates to `specialists:database-operator` when the operator drops an extracted X archive directory (or a `twitter-<handle>-archive.zip` reference) into chat. The specialist runs the skill's owner + participant confirmation flow before any `.js` shim is read, then dispatches the two existing ingestion surfaces:
17
+ The admin agent delegates to `specialists:librarian` when the operator drops an extracted X archive directory (or a `twitter-<handle>-archive.zip` reference) into chat. The specialist runs the skill's owner + participant confirmation flow before any `.js` shim is read, then dispatches the two existing ingestion surfaces:
18
18
 
19
19
  - **Tweet stream** → `document-ingest` produces one `:KnowledgeDocument` with `source='x'` whose body is the verbatim chronological transcript of the operator's own tweets, replies, and quote-tweet authorship. `:Section` chunking is owned by `memory-classify` (document mode).
20
20
  - **Direct messages** → `conversation-archive-ingest.sh --source x-dm` once per distinct `dmConversation`, producing one `:ConversationArchive` per participant set (keyed on `conversationIdentity`). Senders confirm to existing `:AdminUser` / `:Person` nodes — never auto-created.
@@ -30,4 +30,4 @@ The admin agent delegates to `specialists:database-operator` when the operator d
30
30
  - **memory** — the underlying graph-write surface used by the skill (`mcp__plugin_memory_memory__memory-write` etc.). The skill passes `source='x'` / `source='x-dm'` and `createdByAgent='x-import'` for provenance on every write.
31
31
  - **document-ingest** (memory skill) — owns the tweet-stream KnowledgeDocument writes. `:Section` classification is its responsibility, not this plugin's.
32
32
  - **conversation-archive** (memory skill) — owns the DM transcript writes (`:ConversationArchive` keyed on `conversationIdentity`). The `x-dm` enum entry on `CONVERSATION_SOURCES` and the sibling normaliser in `platform/plugins/memory/mcp/src/lib/conversation-normalisers/x-dm.ts` are the only new code outside this plugin.
33
- - **database-operator specialist** — owns execution. See [platform/templates/specialists/agents/database-operator.md](../../templates/specialists/agents/database-operator.md) external-archive ingestion clause.
33
+ - **librarian specialist** — owns execution. See [platform/templates/specialists/agents/librarian.md](../../templates/specialists/agents/librarian.md) skill-routing table.
@@ -5,7 +5,7 @@ description: Ingest an extracted X (Twitter) archive directory into the graph as
5
5
 
6
6
  # X Import
7
7
 
8
- **Invoked from `specialists:archive-ingest-operator`** — the admin agent dispatches the archive-ingest-operator when the operator hands over an X archive, and the archive-ingest-operator loads this skill. The admin agent never calls this skill directly.
8
+ **Invoked from `specialists:librarian`** — the admin agent dispatches the librarian when the operator hands over an X archive, and the librarian loads this skill. The admin agent never calls this skill directly.
9
9
 
10
10
  One X archive becomes:
11
11
 
@@ -51,6 +51,9 @@ const ALLOWLIST = new Set([
51
51
  // (server-init-line-stamper.cjs); the test loads it via the sanctioned
52
52
  // createRequire(import.meta.url) ESM→CJS bridge, not a raw require.
53
53
  'platform/ui/app/lib/__tests__/server-init-line-stamper.test.ts',
54
+ // The module under test is a pure .cjs preload (power-health.cjs), loaded via
55
+ // the sanctioned createRequire(import.meta.url) ESM→CJS bridge, not a raw require.
56
+ 'platform/ui/app/lib/__tests__/power-health.test.ts',
54
57
  // Same vi.hoisted pattern: Task 829's operator-domains test builds a tmpdir
55
58
  // before the module's `../paths` mock fires, to redirect MAXY_DIR off the
56
59
  // operator's real home config.
@@ -20,7 +20,6 @@ const FORBIDDEN_MCP_TOKENS = [
20
20
  "memory-report-list",
21
21
  "memory-report-read-latest",
22
22
  "memory-compiled-truth-history",
23
- "memory-typed-edge-pass",
24
23
  "profile-read",
25
24
  "database-operator",
26
25
  "session-retrospective-mark-complete",
@@ -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,EAkB7C,CAAA;AAED,gEAAgE;AAChE,eAAO,MAAM,yBAAyB,EAAE,SAAS,MAAM,EAiMtD,CAAA"}
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,EAkB7C,CAAA;AAED,gEAAgE;AAChE,eAAO,MAAM,yBAAyB,EAAE,SAAS,MAAM,EAgMtD,CAAA"}
@@ -139,7 +139,6 @@ export const CANONICAL_MAXY_TOOL_NAMES = [
139
139
  "mcp__plugin_memory_memory__memory-restore",
140
140
  "mcp__plugin_memory_memory__memory-review-queue",
141
141
  "mcp__plugin_memory_memory__memory-search",
142
- "mcp__plugin_memory_memory__memory-typed-edge-pass",
143
142
  "mcp__plugin_memory_memory__memory-update",
144
143
  "mcp__plugin_memory_memory__memory-update-by-name",
145
144
  "mcp__plugin_memory_memory__memory-write",
@@ -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":"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,CAu2EpD"}
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,CAu3EpD"}
@@ -2034,6 +2034,12 @@ export function buildHttpApp(deps) {
2034
2034
  // `--resume` is the continue-this-conversation flag.
2035
2035
  const existingJsonlPath = sessionId ? findExistingJsonlForSessionId(deps.claudeConfigDir, sessionId) : null;
2036
2036
  const mode = existingJsonlPath ? 'resume' : 'fresh';
2037
+ // Task 969 — the new-session picker's model/effort apply only to a genuinely
2038
+ // fresh ADMIN spawn (the /chat popover posts role:'admin'). Gating on the
2039
+ // admin role as well as freshness keeps any other fresh spawn (LinkedIn
2040
+ // ingest, public, specialist, channel cold-start) on the settings defaults
2041
+ // even if a future caller were to put model/effort on its body.
2042
+ const freshAdminLevers = mode === 'fresh' && rcRole === 'admin';
2037
2043
  const argv = ['--remote-control'];
2038
2044
  // Task 945 — `name` is the row's display label, never a prompt. It must NOT
2039
2045
  // be pushed as a positional: the CLI treats a bare positional as the initial
@@ -2059,6 +2065,12 @@ export function buildHttpApp(deps) {
2059
2065
  }
2060
2066
  else if (sessionId) {
2061
2067
  argv.push(mode === 'resume' ? '--resume' : '--session-id', sessionId);
2068
+ // Task 969 — a fresh new-session spawn (the /chat new-session popover)
2069
+ // carries the picked model as the canonical --model flag. A resume keeps
2070
+ // the model its JSONL already ran under, and an absent/invalid model
2071
+ // (reseatModel null) leaves the settings.json default model in force.
2072
+ if (freshAdminLevers && reseatModel)
2073
+ argv.push('--model', reseatModel);
2062
2074
  }
2063
2075
  // Task 592 — per-spawn bypass-permissions waiver. The brand settings.json
2064
2076
  // carries `defaultMode: bypassPermissions` (Task 583); without this flag
@@ -2067,12 +2079,14 @@ export function buildHttpApp(deps) {
2067
2079
  // waived so the disclaimer is suppressed whatever mode the session resolves
2068
2080
  // to. Per Task 574 doctrine the waiver is per-spawn (never written into
2069
2081
  // settings.json / .claude.json, which would permanently waive it).
2070
- // Task 928 the picked effort rides the fork in the SAME per-spawn inline
2071
- // settings (never the shared settings.json — that would change every later
2072
- // spawn's effort fleet-wide). effortLevel only when this is a fork with a
2073
- // valid effort; a model-only or mode-only re-seat leaves it unset.
2082
+ // Task 928 (fork) / Task 969 (fresh new-session) the picked effort rides
2083
+ // the SAME per-spawn inline settings (never the shared settings.json — that
2084
+ // would change every later spawn's effort fleet-wide). Set on a fork with a
2085
+ // valid effort, or on a fresh new-session spawn carrying a picked effort; a
2086
+ // resume keeps its settings-resolved effort, and an absent effort leaves it
2087
+ // unset (the harness default).
2074
2088
  const inlineSettings = { skipDangerousModePermissionPrompt: true, skipAutoPermissionPrompt: true };
2075
- if (forkFromSessionId !== null && reseatEffort)
2089
+ if ((forkFromSessionId !== null || freshAdminLevers) && reseatEffort)
2076
2090
  inlineSettings.effortLevel = reseatEffort;
2077
2091
  argv.push('--settings', JSON.stringify(inlineSettings));
2078
2092
  // Task 677 P2 — admin WhatsApp native channel. When the caller supplies
@@ -2279,8 +2293,11 @@ export function buildHttpApp(deps) {
2279
2293
  // settings.json (pinned to Opus/medium by the rc-daemon); a fork rides its
2280
2294
  // picked values. Surfaced on the lifeline so the admin-param audit can assert
2281
2295
  // model=claude-opus-4-8[1m] effort=medium without reconstructing the argv.
2282
- const effectiveRcModel = forkFromSessionId !== null && reseatModel ? reseatModel : resolveSettingsModel(deps.claudeConfigDir);
2283
- const effectiveRcEffort = forkFromSessionId !== null && reseatEffort ? reseatEffort : resolveSettingsEffort(deps.claudeConfigDir);
2296
+ // Task 969 a fresh new-session spawn carrying picked levers runs under
2297
+ // them too (not just a fork), so the sidecar + lifeline + the /chat params
2298
+ // row report the model/effort the session actually launched on.
2299
+ const effectiveRcModel = (forkFromSessionId !== null || freshAdminLevers) && reseatModel ? reseatModel : resolveSettingsModel(deps.claudeConfigDir);
2300
+ const effectiveRcEffort = (forkFromSessionId !== null || freshAdminLevers) && reseatEffort ? reseatEffort : resolveSettingsEffort(deps.claudeConfigDir);
2284
2301
  // Step 2 — the exact claude argv (the inner command). The systemd-run
2285
2302
  // wrap is composed by the spawnPty adapter; logging the inner argv
2286
2303
  // here is enough for an operator to reproduce by hand. The wrapped