specpi 0.10.0 → 0.11.2

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.
@@ -729,7 +729,18 @@ function validManagedModelScope(value) {
729
729
  }
730
730
 
731
731
  function desiredSettingsOperations() {
732
- return [{ path: ["theme"], value: "specpi-spec" }];
732
+ return [
733
+ {
734
+ path: ["theme"],
735
+ value: "specpi-spec",
736
+ userTunable: true,
737
+ validate: (value) =>
738
+ typeof value === "string" &&
739
+ value.trim().length > 0 &&
740
+ value.length <= 128 &&
741
+ !/[\u0000-\u001f\u007f]/u.test(value),
742
+ },
743
+ ];
733
744
  }
734
745
 
735
746
  function managedFiles(includeShell) {
@@ -755,6 +766,11 @@ function managedFiles(includeShell) {
755
766
  path.join(agentDir, "extensions", "workflow-controls", "scope.mjs"),
756
767
  0o644,
757
768
  ],
769
+ [
770
+ path.join(repoRoot, "extensions", "workflow-controls", "task-contract.mjs"),
771
+ path.join(agentDir, "extensions", "workflow-controls", "task-contract.mjs"),
772
+ 0o644,
773
+ ],
758
774
  [
759
775
  path.join(repoRoot, "extensions", "workflow-controls", "experiments.mjs"),
760
776
  path.join(agentDir, "extensions", "workflow-controls", "experiments.mjs"),
@@ -805,6 +821,11 @@ function managedFiles(includeShell) {
805
821
  path.join(agentDir, "extensions", "tool-wishlist", "core.mjs"),
806
822
  0o644,
807
823
  ],
824
+ [
825
+ path.join(repoRoot, "extensions", "tool-wishlist", "verification.mjs"),
826
+ path.join(agentDir, "extensions", "tool-wishlist", "verification.mjs"),
827
+ 0o644,
828
+ ],
808
829
  [
809
830
  path.join(repoRoot, "extensions", "tool-wishlist", "registry.mjs"),
810
831
  path.join(agentDir, "extensions", "tool-wishlist", "registry.mjs"),
@@ -1091,6 +1112,7 @@ function assertSources() {
1091
1112
  "extensions/ui-refresh/index.ts",
1092
1113
  "extensions/workflow-controls/index.ts",
1093
1114
  "extensions/workflow-controls/scope.mjs",
1115
+ "extensions/workflow-controls/task-contract.mjs",
1094
1116
  "extensions/workflow-controls/experiments.mjs",
1095
1117
  "extensions/workflow-controls/challenge.mjs",
1096
1118
  "extensions/workflow-controls/smoke.mjs",
@@ -1103,6 +1125,7 @@ function assertSources() {
1103
1125
  "browser-runtime/package-lock.json",
1104
1126
  "extensions/tool-wishlist/index.ts",
1105
1127
  "extensions/tool-wishlist/core.mjs",
1128
+ "extensions/tool-wishlist/verification.mjs",
1106
1129
  "extensions/tool-wishlist/registry.mjs",
1107
1130
  "extensions/tool-wishlist/validators.mjs",
1108
1131
  "extensions/tool-wishlist/capabilities.json",
@@ -1151,7 +1174,7 @@ Managed files:`);
1151
1174
  console.log(` ${manifestPath}`);
1152
1175
 
1153
1176
  console.log("\nSettings ownership:");
1154
- console.log(" theme = specpi-spec");
1177
+ console.log(" theme defaults to specpi-spec; existing valid user choices are preserved");
1155
1178
  console.log(" pinned package entries (merged by npm package identity)");
1156
1179
  console.log(" command-guard mode and approvals are session-only and no raw commands are persisted");
1157
1180
  console.log(" scope and completion state stays in the active Pi session branch without raw tool content");
@@ -1161,6 +1184,12 @@ Managed files:`);
1161
1184
  console.log(" collection requires one explicit local on/off decision and never uploads data");
1162
1185
  console.log(" wishlist lifecycle decisions are explicit, append-only, and reversible");
1163
1186
  console.log(" isolated browser contexts never reuse the user's Chrome profile or cookies");
1187
+ console.log("\nPrivacy boundaries:");
1188
+ console.log(" SpecPi keeps its wishlist and improvement evidence local; this does not make Pi offline");
1189
+ console.log(
1190
+ " model requests go to the selected provider; browser pages and installed packages may use the network",
1191
+ );
1192
+ console.log(" Pi controls its own telemetry and update checks; review Pi settings separately");
1164
1193
 
1165
1194
  console.log("\nManaged browser runtime:");
1166
1195
  if (options.skipBrowserInstall) {
@@ -1,54 +1,60 @@
1
- ---
2
- name: specpi-improve
3
- description: Turns a selected SpecPi capability-gap wishlist item into a minimal, evidence-backed, reversible improvement. Use when the user asks to improve SpecPi from its wishlist, act on a selected gap, or complete the notice-to-retire loop.
4
- ---
5
-
6
- # SpecPi Improve
7
-
8
- Improve the harness through an explicit experiment, never through quiet self-modification.
9
-
10
- ## Preconditions
11
-
12
- 1. Begin through `/harness-improvement`. Its menu exposes qualified and review-needed items, records the chosen item as selected, and starts this workflow.
13
- 2. Treat that exact menu choice as approval for the smallest sufficient implementation of that item. Ask again only if scope expands or external/remote state would change.
14
- 3. Treat wishlist summaries as leads, not proof. Inspect the current repository, tools, docs, tests, and runtime behavior before designing a change.
15
- 4. Do not inspect Pi credentials, trust decisions, sessions, history, missions, or unrelated private state.
16
-
17
- ## Improvement card
18
-
19
- Before editing, present one compact card:
20
-
21
- - **Gap ID and evidence:** occurrences, reach, impact, and representative sanitized needs.
22
- - **Smallest intervention:** choose among bug fix, config, prompt, skill, or tool; prefer the least powerful sufficient option.
23
- - **Hypothesis:** what friction the change should remove.
24
- - **Acceptance check:** direct behavior that proves the capability works.
25
- - **Rollback:** how the change can be removed or reverted cleanly.
26
- - **Privacy/security:** state what new data, permissions, dependencies, or external state would be introduced; prefer none.
27
- - **Non-goals:** reject adjacent feature accumulation.
28
-
29
- The `/harness-improvement` selection authorizes this exact smallest-sufficient card. Do not add another approval step unless the proposed work exceeds it.
30
-
31
- ## Implementation
32
-
33
- 1. Preserve a single writer for the active worktree.
34
- 2. Implement the smallest coherent intervention.
35
- 3. Add focused tests that reproduce the gap and prove the new behavior.
36
- 4. Update the reviewed capability registry only when the capability is actually shipped. Use exact aliases; do not hide adjacent unsupported cases.
37
- 5. Link deterministic capabilities to an existing or new `specpi doctor` check.
38
- 6. Update README, security documentation, changelog, third-party notices, and installer source lists only where the change requires it.
39
- 7. Keep installation explicit, reversible, backed up, atomic, and checksum-tracked.
40
- 8. If the user chooses to commit the improvement, include a `SpecPi-Gap: <gap-id>` trailer so the commit can be linked to its retirement in the journal. SpecPi itself never commits.
41
-
42
- ## Verification and retirement
43
-
44
- 1. Run the narrowest focused checks, then `npm run check`.
45
- 2. For installer changes, exercise plan/install/doctor/update/uninstall with a temporary `PI_CODING_AGENT_DIR`; never use the live Pi directory.
46
- 3. Inspect the final diff and obtain fresh read-only review when risk warrants it.
47
- 4. At the end, call `finish_harness_improvement` with the exact gap ID, concise direct acceptance evidence, and a sanitized validation note. The tool independently requires source-registry integration, runs `npm run check`, executes every capability validator through the closed validators catalog, persists that proof into the local improvement journal, and retires only if every gate passes.
48
- 5. If validation fails, fix or revert. Do not retire on plausibility; leave the item selected and report the blocker.
49
- 6. A later regression returns the retired item to the `/harness-improvement` menu. Choosing it there explicitly reopens and selects it for review.
50
- 7. When a retired item reopens, start from `/wishlist history <gap-id>`: the journal supplies the original proof and the changed-file set of the original change. Propose an explicit revert plan for human approval; never revert autonomously.
51
-
52
- ## Handoff
53
-
54
- Report the gap ID, changed files, acceptance evidence, commands and exit codes, lifecycle action, rollback path, and residual risks. Never claim that silence or the absence of later reports proves success.
1
+ ---
2
+ name: specpi-improve
3
+ description: Turns a selected SpecPi capability-gap wishlist item into a minimal, evidence-backed, reversible improvement. Use when the user asks to improve SpecPi from its wishlist, act on a selected gap, or complete the notice-to-retire loop.
4
+ ---
5
+
6
+ # SpecPi Improve
7
+
8
+ Improve the harness through an explicit experiment, never through quiet self-modification.
9
+
10
+ ## Preconditions
11
+
12
+ 1. Begin through `/harness-improvement`. Its menu exposes qualified and review-needed items, records the chosen item as selected, and starts this workflow.
13
+ 2. Treat that exact menu choice as approval for the smallest sufficient implementation of that item. Ask again only if scope expands or external/remote state would change.
14
+ 3. Treat wishlist summaries as leads, not proof. Inspect the current repository, tools, docs, tests, and runtime behavior before designing a change.
15
+ 4. Do not inspect Pi credentials, trust decisions, sessions, history, missions, or unrelated private state.
16
+
17
+ ## Improvement card
18
+
19
+ Before editing, present one compact card:
20
+
21
+ - **Gap ID and evidence:** occurrences, reach, impact, and representative sanitized needs.
22
+ - **Smallest intervention:** choose among bug fix, config, prompt, skill, or tool; prefer the least powerful sufficient option.
23
+ - **Hypothesis:** what friction the change should remove.
24
+ - **Acceptance check:** direct behavior that proves the capability works.
25
+ - **Rollback:** how the change can be removed or reverted cleanly.
26
+ - **Privacy/security:** state what new data, permissions, dependencies, or external state would be introduced; prefer none.
27
+ - **Non-goals:** reject adjacent feature accumulation.
28
+
29
+ The `/harness-improvement` selection authorizes this exact smallest-sufficient card. Do not add another approval step unless the proposed work exceeds it.
30
+
31
+ Record the card with `record_harness_contract` before editing. Include stable requirement IDs and direct acceptance checks, and declare the expected source paths. The tool binds the card to the selected gap, selection generation, session, and source checkout. An identical retry is allowed; a changed card requires the human to revise it with `/task set` or select the improvement again. Never use a new card to manufacture authorization for another gap. `/scope task` is the human command for importing its paths into scope monitoring.
32
+
33
+ The selection preserves verification policy, including task/scope and wishlist lifecycle rules, the package check, and formatter configuration. If the work changes those rules, obtain human review of that concrete policy change and a fresh `/harness-improvement` selection before using it to retire the item. Do not weaken or bypass preserved gates to make a change pass.
34
+
35
+ ## Implementation
36
+
37
+ 1. Preserve a single writer for the active worktree.
38
+ 2. Implement the smallest coherent intervention.
39
+ 3. Add focused tests that reproduce the gap and prove the new behavior.
40
+ 4. Update the reviewed capability registry only when the capability is actually shipped. Use exact aliases; do not hide adjacent unsupported cases.
41
+ 5. Link deterministic capabilities to an existing or new `specpi doctor` check.
42
+ 6. Update README, security documentation, changelog, third-party notices, and installer source lists only where the change requires it.
43
+ 7. Keep installation explicit, reversible, backed up, atomic, and checksum-tracked.
44
+ 8. If the user chooses to commit the improvement, include a `SpecPi-Gap: <gap-id>` trailer so the commit can be linked to its retirement in the journal. SpecPi itself never commits.
45
+
46
+ ## Verification and retirement
47
+
48
+ 1. Run the narrowest focused checks, then `npm run check`.
49
+ 2. For installer changes, exercise plan/install/doctor/update/uninstall with a temporary `PI_CODING_AGENT_DIR`; never use the live Pi directory.
50
+ 3. Inspect the final diff and obtain fresh read-only review when risk warrants it.
51
+ 4. At the end, call `finish_harness_improvement` with the exact gap ID, concise direct acceptance evidence, and a sanitized validation note. The tool requires the matching task contract, checks newly changed source paths against it, requires source-registry integration, runs `npm run check`, and executes every linked closed validator. It rejects stale selection or changed source and journals the resulting verification receipt separately from model-reported evidence. Retirement occurs only when every gate passes.
52
+ 5. If validation fails, fix or revert. Do not retire on plausibility; leave the item selected and report the blocker.
53
+ 6. A later regression returns the retired item to the `/harness-improvement` menu. Choosing it there explicitly reopens and selects it for review.
54
+ 7. When a retired item reopens, start from `/wishlist history <gap-id>`: the journal supplies the original proof and the changed-file set of the original change. Propose an explicit revert plan for human approval; never revert autonomously.
55
+
56
+ ## Handoff
57
+
58
+ Report the gap ID, changed files, acceptance evidence, commands and exit codes, lifecycle action, rollback path, and residual risks. Never claim that silence or the absence of later reports proves success.
59
+
60
+ When a separate human-directed review is useful, `/task handoff` assembles a bounded review packet in the current conversation. The human can later use `/wishlist outcome <gap-id>` to assess the latest local retirement. Do not submit outcome feedback on the human's behalf or treat a negative assessment as permission to start work.
package/specpi CHANGED
File without changes
@@ -1,23 +1,25 @@
1
- ## SpecPi Working Agreement
2
-
3
- - Prefer direct execution for small, well-scoped tasks; do not add workflow ceremony without a concrete benefit.
4
- - Ask concise, decision-oriented questions when material requirements are ambiguous instead of guessing.
5
- - Inspect existing code and repository guidance before editing. Keep changes surgical and avoid unrelated cleanup.
6
- - Use project-native commands and dependencies. Do not introduce global tooling when a local script or dependency already exists.
7
- - Treat plans and model output as context rather than proof. Files, diffs, command output, tests, and runtime behavior are authoritative.
8
- - Use visible `PLAN.md`, `TODO.md`, `DECISIONS.md`, or `HANDOFF.md` artifacts only when they improve continuity.
9
- - Delegate only when fresh context, parallel independent investigation, specialist judgment, or review justifies the overhead.
10
- - Keep one writer per shared working directory. Use `/experiment` or another isolated worktree for intentional parallel writers, and open the separate session yourself.
11
- - When `/scope` is active, treat outside-scope findings as pending until the human allows once, acknowledges them with `/scope accept`, expands the declared scope with `/scope add`, or clears it; never describe observed drift as accepted scope, and never assume an acknowledged path was added to the contract.
12
- - Use `/challenge` for material completion review when its adversarial checklist provides concrete value; its readiness card supports human review but is not independent proof.
13
- - Never launch `codex-exec` or `codex-exec-writer`; SpecPi disables these external subscription runners.
14
- - Treat command-guard denials as hard runtime constraints: use the stated safer alternative or ask the user; never obfuscate, split, encode, or reroute a denied operation to evade protection.
15
- - When Command Guard is active, prefer direct tool calls and simple, explicit commands. Avoid unnecessary command substitution, process substitution, stdin-driven `xargs`, compound shell programs, inline interpreter code, and executable heredocs because opaque forms require approval. When complexity is genuinely required, keep it transparent and request approval rather than restructuring it to bypass protection.
16
- - For material changes, run the narrowest relevant checks, inspect the final diff, and use fresh read-only review when risk warrants it.
17
- - Never claim completion from plausibility alone. Report commands run, validation results, and residual risks.
18
- - Treat wishlist observations as leads, not permission to edit. Start only from an exact `/harness-improvement` menu choice, use the `specpi-improve` skill, and retire through its verification gate only after direct evidence passes.
19
- - Do not commit, push, publish, deploy, or alter remote state unless the user explicitly requests it.
20
- - Prefer Pi web tools for ordinary research. Use the DonSeTch skill for whole-site crawling, bot walls, JavaScript-heavy extraction, or focused probes.
21
- - Use SpecPi browser tools to validate rendered web interfaces at relevant desktop, tablet, and mobile viewports; source review and HTTP checks are not proof of visual correctness.
22
- - Create or replace visual baselines only when explicitly requested, and report current, baseline, and diff artifact paths for regression comparisons.
23
- - Keep final responses concise and identify changed files clearly.
1
+ ## SpecPi Working Agreement
2
+
3
+ - Prefer direct execution for small, well-scoped tasks; do not add workflow ceremony without a concrete benefit.
4
+ - Ask concise, decision-oriented questions when material requirements are ambiguous instead of guessing.
5
+ - Inspect existing code and repository guidance before editing. Keep changes surgical and avoid unrelated cleanup.
6
+ - Use project-native commands and dependencies. Do not introduce global tooling when a local script or dependency already exists.
7
+ - Treat plans and model output as context rather than proof. Files, diffs, command output, tests, and runtime behavior are authoritative.
8
+ - Use visible `PLAN.md`, `TODO.md`, `DECISIONS.md`, or `HANDOFF.md` artifacts only when they improve continuity.
9
+ - For material work, an optional `/task` card keeps the original requirement IDs, acceptance checks, expected paths, rollback, and non-goals together. Use it as the shared reference for `/spec`, `/challenge`, and experiments; only the human's `/scope task` command imports its paths into scope monitoring.
10
+ - Preserve the original task requirements in reviews. A changed card invalidates earlier completion evidence; a handoff packet is review context, not permission to implement or launch another agent.
11
+ - Delegate only when fresh context, parallel independent investigation, specialist judgment, or review justifies the overhead.
12
+ - Keep one writer per shared working directory. Use `/experiment` or another isolated worktree for intentional parallel writers, and open the separate session yourself.
13
+ - When `/scope` is active, treat outside-scope findings as pending until the human allows once, acknowledges them with `/scope accept`, expands the declared scope with `/scope add`, or clears it; never describe observed drift as accepted scope, and never assume an acknowledged path was added to the contract.
14
+ - Use `/challenge` for material completion review when its adversarial checklist provides concrete value; its readiness card supports human review but is not independent proof.
15
+ - Never launch `codex-exec` or `codex-exec-writer`; SpecPi disables these external subscription runners.
16
+ - Treat command-guard denials as hard runtime constraints: use the stated safer alternative or ask the user; never obfuscate, split, encode, or reroute a denied operation to evade protection.
17
+ - When Command Guard is active, prefer direct tool calls and simple, explicit commands. Avoid unnecessary command substitution, process substitution, stdin-driven `xargs`, compound shell programs, inline interpreter code, and executable heredocs because opaque forms require approval. When complexity is genuinely required, keep it transparent and request approval rather than restructuring it to bypass protection.
18
+ - For material changes, run the narrowest relevant checks, inspect the final diff, and use fresh read-only review when risk warrants it.
19
+ - Never claim completion from plausibility alone. Report commands run, validation results, and residual risks.
20
+ - Treat wishlist observations as leads, not permission to edit. Start only from an exact `/harness-improvement` menu choice, use the `specpi-improve` skill, and retire through its verification gate only after direct evidence passes.
21
+ - Do not commit, push, publish, deploy, or alter remote state unless the user explicitly requests it.
22
+ - Prefer Pi web tools for ordinary research. Use the DonSeTch skill for whole-site crawling, bot walls, JavaScript-heavy extraction, or focused probes.
23
+ - Use SpecPi browser tools to validate rendered web interfaces at relevant desktop, tablet, and mobile viewports; source review and HTTP checks are not proof of visual correctness.
24
+ - Create or replace visual baselines only when explicitly requested, and report current, baseline, and diff artifact paths for regression comparisons.
25
+ - Keep final responses concise and identify changed files clearly.
@@ -1,10 +1,10 @@
1
- {
2
- "theme": "specpi-spec",
3
- "packages": [
4
- "npm:pi-web-access@0.25.0",
5
- "npm:@juicesharp/rpiv-ask-user-question@2.7.1",
6
- "npm:@llblab/pi-codex-usage@0.9.3",
7
- "npm:@tunnckocore/pi-gpt-fast-mode@0.4.0",
8
- "npm:@narumitw/pi-goal@0.54.3"
9
- ]
10
- }
1
+ {
2
+ "theme": "specpi-spec",
3
+ "packages": [
4
+ "npm:pi-web-access@0.25.0",
5
+ "npm:@juicesharp/rpiv-ask-user-question@2.7.1",
6
+ "npm:@llblab/pi-codex-usage@0.9.3",
7
+ "npm:@tunnckocore/pi-gpt-fast-mode@0.4.0",
8
+ "npm:@narumitw/pi-goal@0.54.3"
9
+ ]
10
+ }
@@ -1,96 +1,96 @@
1
- {
2
- "$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
3
- "name": "specpi-spec",
4
- "vars": {
5
- "blueprint": "#8FB6D9",
6
- "blueprintBright": "#B8D4EC",
7
- "blueprintDeep": "#6F93B3",
8
- "paper": "#E9EDF4",
9
- "paperBright": "#F7F9FC",
10
- "paperSoft": "#D6DCE6",
11
- "slate": "#A3ADBC",
12
- "quiet": "#78838F",
13
- "faint": "#5D6876",
14
- "rule": "#2A313B",
15
- "ruleStrong": "#39424F",
16
- "success": "#7FB08A",
17
- "warning": "#D7B36A",
18
- "error": "#E07A7A",
19
-
20
- "selectedBg": "#202A35",
21
- "searchBg": "#8FB6D9",
22
- "userMsgBg": "#181C22",
23
- "customMsgBg": "#20252D",
24
- "toolPendingBg": "#171E26",
25
- "toolSuccessBg": "#192027",
26
- "toolErrorBg": "#2A1B20"
27
- },
28
- "colors": {
29
- "accent": "blueprint",
30
- "border": "ruleStrong",
31
- "borderAccent": "blueprint",
32
- "borderMuted": "rule",
33
- "success": "success",
34
- "error": "error",
35
- "warning": "warning",
36
- "muted": "slate",
37
- "dim": "quiet",
38
- "text": "paper",
39
- "thinkingText": "slate",
40
-
41
- "selectedBg": "selectedBg",
42
- "scrollbarThumb": "ruleStrong",
43
- "searchMatchBg": "searchBg",
44
- "searchMatchText": "#121519",
45
- "userMessageBg": "userMsgBg",
46
- "userMessageText": "paperBright",
47
- "customMessageBg": "customMsgBg",
48
- "customMessageText": "paperSoft",
49
- "customMessageLabel": "blueprint",
50
- "toolPendingBg": "toolPendingBg",
51
- "toolSuccessBg": "toolSuccessBg",
52
- "toolErrorBg": "toolErrorBg",
53
- "toolTitle": "paperBright",
54
- "toolOutput": "slate",
55
-
56
- "mdHeading": "paperBright",
57
- "mdLink": "blueprintBright",
58
- "mdLinkUrl": "quiet",
59
- "mdCode": "blueprint",
60
- "mdCodeBlock": "paperSoft",
61
- "mdCodeBlockBorder": "ruleStrong",
62
- "mdQuote": "slate",
63
- "mdQuoteBorder": "blueprintDeep",
64
- "mdHr": "ruleStrong",
65
- "mdListBullet": "blueprint",
66
-
67
- "toolDiffAdded": "success",
68
- "toolDiffRemoved": "error",
69
- "toolDiffContext": "quiet",
70
-
71
- "syntaxComment": "faint",
72
- "syntaxKeyword": "blueprint",
73
- "syntaxFunction": "blueprintBright",
74
- "syntaxVariable": "paperSoft",
75
- "syntaxString": "success",
76
- "syntaxNumber": "warning",
77
- "syntaxType": "#9FC4DF",
78
- "syntaxOperator": "slate",
79
- "syntaxPunctuation": "quiet",
80
-
81
- "thinkingOff": "ruleStrong",
82
- "thinkingMinimal": "faint",
83
- "thinkingLow": "#6B7688",
84
- "thinkingMedium": "blueprintDeep",
85
- "thinkingHigh": "blueprint",
86
- "thinkingXhigh": "blueprintBright",
87
- "thinkingMax": "paperBright",
88
-
89
- "bashMode": "success"
90
- },
91
- "export": {
92
- "pageBg": "#121519",
93
- "cardBg": "#181C22",
94
- "infoBg": "#20252D"
95
- }
96
- }
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
3
+ "name": "specpi-spec",
4
+ "vars": {
5
+ "blueprint": "#8FB6D9",
6
+ "blueprintBright": "#B8D4EC",
7
+ "blueprintDeep": "#6F93B3",
8
+ "paper": "#E9EDF4",
9
+ "paperBright": "#F7F9FC",
10
+ "paperSoft": "#D6DCE6",
11
+ "slate": "#A3ADBC",
12
+ "quiet": "#78838F",
13
+ "faint": "#5D6876",
14
+ "rule": "#2A313B",
15
+ "ruleStrong": "#39424F",
16
+ "success": "#7FB08A",
17
+ "warning": "#D7B36A",
18
+ "error": "#E07A7A",
19
+
20
+ "selectedBg": "#202A35",
21
+ "searchBg": "#8FB6D9",
22
+ "userMsgBg": "#181C22",
23
+ "customMsgBg": "#20252D",
24
+ "toolPendingBg": "#171E26",
25
+ "toolSuccessBg": "#192027",
26
+ "toolErrorBg": "#2A1B20"
27
+ },
28
+ "colors": {
29
+ "accent": "blueprint",
30
+ "border": "ruleStrong",
31
+ "borderAccent": "blueprint",
32
+ "borderMuted": "rule",
33
+ "success": "success",
34
+ "error": "error",
35
+ "warning": "warning",
36
+ "muted": "slate",
37
+ "dim": "quiet",
38
+ "text": "paper",
39
+ "thinkingText": "slate",
40
+
41
+ "selectedBg": "selectedBg",
42
+ "scrollbarThumb": "ruleStrong",
43
+ "searchMatchBg": "searchBg",
44
+ "searchMatchText": "#121519",
45
+ "userMessageBg": "userMsgBg",
46
+ "userMessageText": "paperBright",
47
+ "customMessageBg": "customMsgBg",
48
+ "customMessageText": "paperSoft",
49
+ "customMessageLabel": "blueprint",
50
+ "toolPendingBg": "toolPendingBg",
51
+ "toolSuccessBg": "toolSuccessBg",
52
+ "toolErrorBg": "toolErrorBg",
53
+ "toolTitle": "paperBright",
54
+ "toolOutput": "slate",
55
+
56
+ "mdHeading": "paperBright",
57
+ "mdLink": "blueprintBright",
58
+ "mdLinkUrl": "quiet",
59
+ "mdCode": "blueprint",
60
+ "mdCodeBlock": "paperSoft",
61
+ "mdCodeBlockBorder": "ruleStrong",
62
+ "mdQuote": "slate",
63
+ "mdQuoteBorder": "blueprintDeep",
64
+ "mdHr": "ruleStrong",
65
+ "mdListBullet": "blueprint",
66
+
67
+ "toolDiffAdded": "success",
68
+ "toolDiffRemoved": "error",
69
+ "toolDiffContext": "quiet",
70
+
71
+ "syntaxComment": "faint",
72
+ "syntaxKeyword": "blueprint",
73
+ "syntaxFunction": "blueprintBright",
74
+ "syntaxVariable": "paperSoft",
75
+ "syntaxString": "success",
76
+ "syntaxNumber": "warning",
77
+ "syntaxType": "#9FC4DF",
78
+ "syntaxOperator": "slate",
79
+ "syntaxPunctuation": "quiet",
80
+
81
+ "thinkingOff": "ruleStrong",
82
+ "thinkingMinimal": "faint",
83
+ "thinkingLow": "#6B7688",
84
+ "thinkingMedium": "blueprintDeep",
85
+ "thinkingHigh": "blueprint",
86
+ "thinkingXhigh": "blueprintBright",
87
+ "thinkingMax": "paperBright",
88
+
89
+ "bashMode": "success"
90
+ },
91
+ "export": {
92
+ "pageBg": "#121519",
93
+ "cardBg": "#181C22",
94
+ "infoBg": "#20252D"
95
+ }
96
+ }