lsd-pi 1.1.2 → 1.1.3

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 (183) hide show
  1. package/README.md +2 -1
  2. package/dist/bedrock-auth.d.ts +25 -0
  3. package/dist/bedrock-auth.js +59 -0
  4. package/dist/headless.js +8 -3
  5. package/dist/loader.js +1 -0
  6. package/dist/onboarding-llm.d.ts +37 -0
  7. package/dist/onboarding-llm.js +64 -0
  8. package/dist/onboarding.d.ts +2 -14
  9. package/dist/onboarding.js +146 -71
  10. package/dist/pi-migration.js +1 -0
  11. package/dist/resources/extensions/memory/auto-extract.js +21 -3
  12. package/dist/resources/extensions/memory/dream.js +703 -0
  13. package/dist/resources/extensions/memory/extension-manifest.json +2 -2
  14. package/dist/resources/extensions/memory/index.js +115 -8
  15. package/dist/resources/extensions/slash-commands/extension-manifest.json +10 -10
  16. package/dist/resources/extensions/slash-commands/index.js +0 -4
  17. package/dist/resources/extensions/slash-commands/plan.js +181 -45
  18. package/dist/resources/extensions/subagent/agents.js +14 -1
  19. package/dist/resources/extensions/subagent/configured-model.js +3 -2
  20. package/dist/resources/extensions/subagent/index.js +34 -28
  21. package/dist/resources/extensions/subagent/launch-helpers.js +24 -0
  22. package/dist/resources/extensions/subagent/model-resolution.js +41 -3
  23. package/dist/resources/extensions/usage/extension-manifest.json +11 -0
  24. package/dist/resources/extensions/usage/index.js +346 -0
  25. package/{src/resources/skills/create-gsd-extension → dist/resources/skills/create-lsd-extension}/SKILL.md +6 -6
  26. package/{src/resources/skills/create-gsd-extension → dist/resources/skills/create-lsd-extension}/references/custom-tools.md +1 -1
  27. package/dist/resources/skills/{create-gsd-extension → create-lsd-extension}/references/extension-lifecycle.md +2 -2
  28. package/dist/resources/skills/{create-gsd-extension → create-lsd-extension}/references/extensioncontext-reference.md +1 -1
  29. package/{src/resources/skills/create-gsd-extension → dist/resources/skills/create-lsd-extension}/references/key-rules-gotchas.md +4 -4
  30. package/dist/resources/skills/{create-gsd-extension → create-lsd-extension}/references/packaging-distribution.md +6 -6
  31. package/dist/resources/skills/{create-gsd-extension → create-lsd-extension}/workflows/create-extension.md +3 -3
  32. package/dist/resources/skills/{create-gsd-extension → create-lsd-extension}/workflows/debug-extension.md +5 -5
  33. package/dist/resources/skills/teams-debug/SKILL.md +5 -6
  34. package/dist/resources/skills/teams-document/SKILL.md +1 -2
  35. package/dist/resources/skills/teams-plan/SKILL.md +3 -4
  36. package/dist/resources/skills/teams-run/SKILL.md +3 -4
  37. package/dist/resources/skills/teams-verify/SKILL.md +4 -5
  38. package/dist/startup-model-validation.js +1 -0
  39. package/dist/welcome-screen.js +13 -11
  40. package/dist/wizard.js +12 -0
  41. package/package.json +1 -1
  42. package/packages/pi-ai/dist/models.generated.d.ts +688 -409
  43. package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
  44. package/packages/pi-ai/dist/models.generated.js +761 -488
  45. package/packages/pi-ai/dist/models.generated.js.map +1 -1
  46. package/packages/pi-ai/scripts/generate-models.ts +40 -18
  47. package/packages/pi-ai/src/models.generated.ts +759 -486
  48. package/packages/pi-coding-agent/dist/cli/config-selector.js +1 -1
  49. package/packages/pi-coding-agent/dist/cli/config-selector.js.map +1 -1
  50. package/packages/pi-coding-agent/dist/core/agent-session.d.ts +1 -2
  51. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  52. package/packages/pi-coding-agent/dist/core/agent-session.js +6 -30
  53. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  54. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +6 -0
  55. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  56. package/packages/pi-coding-agent/dist/core/settings-manager.js +44 -1
  57. package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  58. package/packages/pi-coding-agent/dist/core/skill-tool.test.js +9 -5
  59. package/packages/pi-coding-agent/dist/core/skill-tool.test.js.map +1 -1
  60. package/packages/pi-coding-agent/dist/core/skills.d.ts.map +1 -1
  61. package/packages/pi-coding-agent/dist/core/skills.js +3 -2
  62. package/packages/pi-coding-agent/dist/core/skills.js.map +1 -1
  63. package/packages/pi-coding-agent/dist/index.d.ts +1 -1
  64. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  65. package/packages/pi-coding-agent/dist/index.js +1 -1
  66. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  67. package/packages/pi-coding-agent/dist/main.js +1 -1
  68. package/packages/pi-coding-agent/dist/main.js.map +1 -1
  69. package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.js +2 -2
  70. package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.js.map +1 -1
  71. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
  72. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +15 -12
  73. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
  74. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts +6 -0
  75. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  76. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js +25 -1
  77. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js.map +1 -1
  78. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +1 -1
  79. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
  80. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  81. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +10 -0
  82. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  83. package/packages/pi-coding-agent/dist/modes/interactive/controllers/extension-ui-controller.js +1 -1
  84. package/packages/pi-coding-agent/dist/modes/interactive/controllers/extension-ui-controller.js.map +1 -1
  85. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  86. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +31 -22
  87. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  88. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +18 -5
  89. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  90. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +139 -20
  91. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
  92. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts.map +1 -1
  93. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +4 -0
  94. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -1
  95. package/packages/pi-coding-agent/package.json +1 -1
  96. package/packages/pi-coding-agent/src/cli/config-selector.ts +1 -1
  97. package/packages/pi-coding-agent/src/core/agent-session.ts +5 -28
  98. package/packages/pi-coding-agent/src/core/settings-manager.ts +52 -1
  99. package/packages/pi-coding-agent/src/core/skill-tool.test.ts +18 -5
  100. package/packages/pi-coding-agent/src/core/skills.ts +3 -2
  101. package/packages/pi-coding-agent/src/index.ts +1 -1
  102. package/packages/pi-coding-agent/src/main.ts +1 -1
  103. package/packages/pi-coding-agent/src/modes/interactive/components/bash-execution.ts +2 -2
  104. package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +12 -13
  105. package/packages/pi-coding-agent/src/modes/interactive/components/settings-selector.ts +39 -1
  106. package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +1 -1
  107. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +10 -0
  108. package/packages/pi-coding-agent/src/modes/interactive/controllers/extension-ui-controller.ts +1 -1
  109. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +46 -20
  110. package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +171 -20
  111. package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +4 -0
  112. package/packages/pi-tui/dist/components/editor.d.ts +1 -0
  113. package/packages/pi-tui/dist/components/editor.d.ts.map +1 -1
  114. package/packages/pi-tui/dist/components/editor.js +23 -0
  115. package/packages/pi-tui/dist/components/editor.js.map +1 -1
  116. package/packages/pi-tui/src/components/editor.ts +23 -0
  117. package/pkg/dist/modes/interactive/theme/theme.d.ts +18 -5
  118. package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  119. package/pkg/dist/modes/interactive/theme/theme.js +139 -20
  120. package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
  121. package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -1
  122. package/pkg/dist/modes/interactive/theme/themes.js +4 -0
  123. package/pkg/dist/modes/interactive/theme/themes.js.map +1 -1
  124. package/pkg/package.json +1 -1
  125. package/src/resources/extensions/memory/auto-extract.ts +23 -3
  126. package/src/resources/extensions/memory/dream.ts +814 -0
  127. package/src/resources/extensions/memory/extension-manifest.json +2 -2
  128. package/src/resources/extensions/memory/index.ts +134 -13
  129. package/src/resources/extensions/memory/tests/auto-extract.test.ts +10 -2
  130. package/src/resources/extensions/memory/tests/dream.test.ts +142 -0
  131. package/src/resources/extensions/slash-commands/extension-manifest.json +10 -10
  132. package/src/resources/extensions/slash-commands/index.ts +3 -7
  133. package/src/resources/extensions/slash-commands/plan.ts +192 -46
  134. package/src/resources/extensions/subagent/agents.ts +11 -1
  135. package/src/resources/extensions/subagent/configured-model.ts +3 -2
  136. package/src/resources/extensions/subagent/index.ts +38 -30
  137. package/src/resources/extensions/subagent/launch-helpers.ts +30 -0
  138. package/src/resources/extensions/subagent/model-resolution.ts +40 -3
  139. package/src/resources/extensions/usage/extension-manifest.json +11 -0
  140. package/src/resources/extensions/usage/index.ts +441 -0
  141. package/{dist/resources/skills/create-gsd-extension → src/resources/skills/create-lsd-extension}/SKILL.md +6 -6
  142. package/{dist/resources/skills/create-gsd-extension → src/resources/skills/create-lsd-extension}/references/custom-tools.md +1 -1
  143. package/src/resources/skills/{create-gsd-extension → create-lsd-extension}/references/extension-lifecycle.md +2 -2
  144. package/src/resources/skills/{create-gsd-extension → create-lsd-extension}/references/extensioncontext-reference.md +1 -1
  145. package/{dist/resources/skills/create-gsd-extension → src/resources/skills/create-lsd-extension}/references/key-rules-gotchas.md +4 -4
  146. package/src/resources/skills/{create-gsd-extension → create-lsd-extension}/references/packaging-distribution.md +6 -6
  147. package/src/resources/skills/{create-gsd-extension → create-lsd-extension}/workflows/create-extension.md +3 -3
  148. package/src/resources/skills/{create-gsd-extension → create-lsd-extension}/workflows/debug-extension.md +5 -5
  149. package/src/resources/skills/teams-debug/SKILL.md +5 -6
  150. package/src/resources/skills/teams-document/SKILL.md +1 -2
  151. package/src/resources/skills/teams-plan/SKILL.md +3 -4
  152. package/src/resources/skills/teams-run/SKILL.md +3 -4
  153. package/src/resources/skills/teams-verify/SKILL.md +4 -5
  154. package/dist/resources/extensions/slash-commands/create-extension.js +0 -264
  155. package/dist/resources/extensions/slash-commands/create-slash-command.js +0 -208
  156. package/src/resources/extensions/slash-commands/create-extension.ts +0 -297
  157. package/src/resources/extensions/slash-commands/create-slash-command.ts +0 -234
  158. /package/dist/resources/skills/{create-gsd-extension → create-lsd-extension}/references/compaction-session-control.md +0 -0
  159. /package/dist/resources/skills/{create-gsd-extension → create-lsd-extension}/references/custom-commands.md +0 -0
  160. /package/dist/resources/skills/{create-gsd-extension → create-lsd-extension}/references/custom-rendering.md +0 -0
  161. /package/dist/resources/skills/{create-gsd-extension → create-lsd-extension}/references/custom-ui.md +0 -0
  162. /package/dist/resources/skills/{create-gsd-extension → create-lsd-extension}/references/events-reference.md +0 -0
  163. /package/dist/resources/skills/{create-gsd-extension → create-lsd-extension}/references/extensionapi-reference.md +0 -0
  164. /package/dist/resources/skills/{create-gsd-extension → create-lsd-extension}/references/mode-behavior.md +0 -0
  165. /package/dist/resources/skills/{create-gsd-extension → create-lsd-extension}/references/model-provider-management.md +0 -0
  166. /package/dist/resources/skills/{create-gsd-extension → create-lsd-extension}/references/remote-execution-overrides.md +0 -0
  167. /package/dist/resources/skills/{create-gsd-extension → create-lsd-extension}/references/state-management.md +0 -0
  168. /package/dist/resources/skills/{create-gsd-extension → create-lsd-extension}/references/system-prompt-modification.md +0 -0
  169. /package/dist/resources/skills/{create-gsd-extension → create-lsd-extension}/workflows/add-capability.md +0 -0
  170. /package/src/resources/skills/{create-gsd-extension → create-lsd-extension}/references/compaction-session-control.md +0 -0
  171. /package/src/resources/skills/{create-gsd-extension → create-lsd-extension}/references/custom-commands.md +0 -0
  172. /package/src/resources/skills/{create-gsd-extension → create-lsd-extension}/references/custom-rendering.md +0 -0
  173. /package/src/resources/skills/{create-gsd-extension → create-lsd-extension}/references/custom-ui.md +0 -0
  174. /package/src/resources/skills/{create-gsd-extension → create-lsd-extension}/references/events-reference.md +0 -0
  175. /package/src/resources/skills/{create-gsd-extension → create-lsd-extension}/references/extensionapi-reference.md +0 -0
  176. /package/src/resources/skills/{create-gsd-extension → create-lsd-extension}/references/mode-behavior.md +0 -0
  177. /package/src/resources/skills/{create-gsd-extension → create-lsd-extension}/references/model-provider-management.md +0 -0
  178. /package/src/resources/skills/{create-gsd-extension → create-lsd-extension}/references/remote-execution-overrides.md +0 -0
  179. /package/src/resources/skills/{create-gsd-extension → create-lsd-extension}/references/state-management.md +0 -0
  180. /package/src/resources/skills/{create-gsd-extension → create-lsd-extension}/references/system-prompt-modification.md +0 -0
  181. /package/src/resources/skills/{create-gsd-extension → create-lsd-extension}/templates/extension-skeleton.ts +0 -0
  182. /package/src/resources/skills/{create-gsd-extension → create-lsd-extension}/templates/stateful-tool-skeleton.ts +0 -0
  183. /package/src/resources/skills/{create-gsd-extension → create-lsd-extension}/workflows/add-capability.md +0 -0
@@ -143,6 +143,9 @@ export class Editor implements Component, Focusable {
143
143
  // Border color (can be changed dynamically)
144
144
  public borderColor: (str: string) => string;
145
145
 
146
+ // Optional hint rendered in the bottom border line (right-aligned, already styled)
147
+ public bottomHint: string = "";
148
+
146
149
  // Autocomplete support
147
150
  private autocompleteProvider?: AutocompleteProvider;
148
151
  private autocompleteList?: SelectList;
@@ -427,6 +430,26 @@ export class Editor implements Component, Focusable {
427
430
  const indicator = `─── ↓ ${linesBelow} more `;
428
431
  const remaining = width - visibleWidth(indicator);
429
432
  result.push(this.borderColor(indicator + "─".repeat(Math.max(0, remaining))));
433
+ } else if (this.bottomHint) {
434
+ // Embed hint right-aligned in the bottom border: ─────── hint ─
435
+ // Apply borderColor only to the dashes so the hint's own styling is preserved.
436
+ const hintVisible = visibleWidth(this.bottomHint);
437
+ const minDashes = 1;
438
+ const separatorWidth = 1; // single space on each side of hint
439
+ const totalFixed = hintVisible + separatorWidth * 2 + minDashes * 2;
440
+ if (width >= totalFixed) {
441
+ const leftDashes = Math.floor((width - hintVisible - separatorWidth * 2) * 0.75);
442
+ const rightDashes = Math.max(minDashes, width - hintVisible - separatorWidth * 2 - leftDashes);
443
+ const line =
444
+ this.borderColor("─".repeat(leftDashes)) +
445
+ " " +
446
+ this.bottomHint +
447
+ " " +
448
+ this.borderColor("─".repeat(rightDashes));
449
+ result.push(line);
450
+ } else {
451
+ result.push(horizontal.repeat(width));
452
+ }
430
453
  } else {
431
454
  result.push(horizontal.repeat(width));
432
455
  }
@@ -12,6 +12,7 @@ declare const ThemeJsonSchema: import("@sinclair/typebox").TObject<{
12
12
  success: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TInteger]>;
13
13
  error: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TInteger]>;
14
14
  warning: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TInteger]>;
15
+ violet: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TInteger]>;
15
16
  muted: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TInteger]>;
16
17
  dim: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TInteger]>;
17
18
  text: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TInteger]>;
@@ -64,9 +65,21 @@ declare const ThemeJsonSchema: import("@sinclair/typebox").TObject<{
64
65
  }>>;
65
66
  }>;
66
67
  export type ThemeJson = Static<typeof ThemeJsonSchema>;
67
- export type ThemeColor = "accent" | "border" | "borderAccent" | "borderMuted" | "success" | "error" | "warning" | "muted" | "dim" | "text" | "thinkingText" | "userMessageText" | "customMessageText" | "customMessageLabel" | "toolTitle" | "toolOutput" | "mdHeading" | "mdLink" | "mdLinkUrl" | "mdCode" | "mdCodeBlock" | "mdCodeBlockBorder" | "mdQuote" | "mdQuoteBorder" | "mdHr" | "mdListBullet" | "toolDiffAdded" | "toolDiffRemoved" | "toolDiffContext" | "syntaxComment" | "syntaxKeyword" | "syntaxFunction" | "syntaxVariable" | "syntaxString" | "syntaxNumber" | "syntaxType" | "syntaxOperator" | "syntaxPunctuation" | "thinkingOff" | "thinkingMinimal" | "thinkingLow" | "thinkingMedium" | "thinkingHigh" | "thinkingXhigh" | "bashMode";
68
+ export type ThemeColor = "accent" | "border" | "borderAccent" | "borderMuted" | "success" | "error" | "warning" | "violet" | "muted" | "dim" | "text" | "thinkingText" | "userMessageText" | "customMessageText" | "customMessageLabel" | "toolTitle" | "toolOutput" | "mdHeading" | "mdLink" | "mdLinkUrl" | "mdCode" | "mdCodeBlock" | "mdCodeBlockBorder" | "mdQuote" | "mdQuoteBorder" | "mdHr" | "mdListBullet" | "toolDiffAdded" | "toolDiffRemoved" | "toolDiffContext" | "syntaxComment" | "syntaxKeyword" | "syntaxFunction" | "syntaxVariable" | "syntaxString" | "syntaxNumber" | "syntaxType" | "syntaxOperator" | "syntaxPunctuation" | "thinkingOff" | "thinkingMinimal" | "thinkingLow" | "thinkingMedium" | "thinkingHigh" | "thinkingXhigh" | "bashMode";
68
69
  export type ThemeBg = "selectedBg" | "userMessageBg" | "customMessageBg" | "toolPendingBg" | "toolSuccessBg" | "toolErrorBg";
69
70
  type ColorMode = "truecolor" | "256color";
71
+ export declare const THEME_ACCENT_PRESETS: readonly ["default", "golden-yellow", "blue", "green", "violet", "red"];
72
+ export type ThemeAccentPreset = (typeof THEME_ACCENT_PRESETS)[number];
73
+ export interface ThemeAccentInfo {
74
+ label: string;
75
+ description: string;
76
+ accent: string | undefined;
77
+ thinking: readonly string[] | undefined;
78
+ }
79
+ type ResolvedThemeAccentPreset = Exclude<ThemeAccentPreset, "default">;
80
+ export declare function getThemeAccentInfo(accent: ThemeAccentPreset): ThemeAccentInfo;
81
+ export declare function getThemeAccentLabel(accent: ThemeAccentPreset): string;
82
+ export declare function getAvailableThemeAccents(): ThemeAccentPreset[];
70
83
  export declare class Theme {
71
84
  readonly name?: string;
72
85
  readonly sourcePath?: string;
@@ -96,12 +109,12 @@ export interface ThemeInfo {
96
109
  path: string | undefined;
97
110
  }
98
111
  export declare function getAvailableThemesWithPaths(): ThemeInfo[];
99
- export declare function loadThemeFromPath(themePath: string, mode?: ColorMode): Theme;
100
- export declare function getThemeByName(name: string): Theme | undefined;
112
+ export declare function loadThemeFromPath(themePath: string, mode?: ColorMode, accent?: ResolvedThemeAccentPreset): Theme;
113
+ export declare function getThemeByName(name: string, accent?: string): Theme | undefined;
101
114
  export declare const theme: Theme;
102
115
  export declare function setRegisteredThemes(themes: Theme[]): void;
103
- export declare function initTheme(themeName?: string, enableWatcher?: boolean): void;
104
- export declare function setTheme(name: string, enableWatcher?: boolean): {
116
+ export declare function initTheme(themeName?: string, enableWatcher?: boolean, accent?: string): void;
117
+ export declare function setTheme(name: string, enableWatcher?: boolean, accent?: string): {
105
118
  success: boolean;
106
119
  error?: string;
107
120
  };
@@ -1 +1 @@
1
- {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/theme/theme.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,KAAK,MAAM,EAAQ,MAAM,mBAAmB,CAAC;AA2BtD,QAAA,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuEnB,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,eAAe,CAAC,CAAC;AAIvD,MAAM,MAAM,UAAU,GACnB,QAAQ,GACR,QAAQ,GACR,cAAc,GACd,aAAa,GACb,SAAS,GACT,OAAO,GACP,SAAS,GACT,OAAO,GACP,KAAK,GACL,MAAM,GACN,cAAc,GACd,iBAAiB,GACjB,mBAAmB,GACnB,oBAAoB,GACpB,WAAW,GACX,YAAY,GACZ,WAAW,GACX,QAAQ,GACR,WAAW,GACX,QAAQ,GACR,aAAa,GACb,mBAAmB,GACnB,SAAS,GACT,eAAe,GACf,MAAM,GACN,cAAc,GACd,eAAe,GACf,iBAAiB,GACjB,iBAAiB,GACjB,eAAe,GACf,eAAe,GACf,gBAAgB,GAChB,gBAAgB,GAChB,cAAc,GACd,cAAc,GACd,YAAY,GACZ,gBAAgB,GAChB,mBAAmB,GACnB,aAAa,GACb,iBAAiB,GACjB,aAAa,GACb,gBAAgB,GAChB,cAAc,GACd,eAAe,GACf,UAAU,CAAC;AAEd,MAAM,MAAM,OAAO,GAChB,YAAY,GACZ,eAAe,GACf,iBAAiB,GACjB,eAAe,GACf,eAAe,GACf,aAAa,CAAC;AAEjB,KAAK,SAAS,GAAG,WAAW,GAAG,UAAU,CAAC;AA4L1C,qBAAa,KAAK;IACjB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,OAAO,CAAC,QAAQ,CAA0B;IAC1C,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,IAAI,CAAY;gBAGvB,QAAQ,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC,EAC7C,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,EAC1C,IAAI,EAAE,SAAS,EACf,OAAO,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAO;IAerD,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAM3C,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAMxC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI1B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI5B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI/B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI7B,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAInC,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM;IAMpC,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;IAMjC,YAAY,IAAI,SAAS;IAIzB,sBAAsB,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM;IAoB/G,sBAAsB,IAAI,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM;CAGjD;AAUD,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAe7C;AAED,MAAM,WAAW,SAAS;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;CACzB;AAED,wBAAgB,2BAA2B,IAAI,SAAS,EAAE,CA4BzD;AA6FD,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,KAAK,CAI5E;AAWD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAM9D;AA8BD,eAAO,MAAM,KAAK,EAAE,KAMlB,CAAC;AAWH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAOzD;AAED,wBAAgB,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,aAAa,GAAE,OAAe,GAAG,IAAI,CAclF;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,GAAE,OAAe,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAmB3G;AAED,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,KAAK,GAAG,IAAI,CAK3D;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAG9D;AAwDD,wBAAgB,gBAAgB,IAAI,IAAI,CAKvC;AAoDD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAqBjF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB,CA4BA;AA+BD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAWnE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAkExE;AAED,wBAAgB,gBAAgB,IAAI,aAAa,CA6BhD;AAED,wBAAgB,kBAAkB,IAAI,eAAe,CAQpD;AAED,wBAAgB,cAAc,IAAI,WAAW,CAK5C;AAED,wBAAgB,oBAAoB,IAAI,OAAO,aAAa,EAAE,iBAAiB,CAQ9E"}
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/theme/theme.ts"],"names":[],"mappings":"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"}
@@ -30,6 +30,7 @@ const ThemeJsonSchema = Type.Object({
30
30
  success: ColorValueSchema,
31
31
  error: ColorValueSchema,
32
32
  warning: ColorValueSchema,
33
+ violet: ColorValueSchema,
33
34
  muted: ColorValueSchema,
34
35
  dim: ColorValueSchema,
35
36
  text: ColorValueSchema,
@@ -88,6 +89,63 @@ const ThemeJsonSchema = Type.Object({
88
89
  })),
89
90
  });
90
91
  const validateThemeJson = TypeCompiler.Compile(ThemeJsonSchema);
92
+ export const THEME_ACCENT_PRESETS = ["default", "golden-yellow", "blue", "green", "violet", "red"];
93
+ const THEME_ACCENT_INFO = {
94
+ default: {
95
+ label: "Default",
96
+ description: "Use the active theme’s native accent colors.",
97
+ accent: undefined,
98
+ thinking: undefined,
99
+ },
100
+ "golden-yellow": {
101
+ label: "Golden yellow",
102
+ description: "Warm amber accent (#F59E0B).",
103
+ accent: "#F59E0B",
104
+ thinking: ["#92400E", "#B45309", "#D97706", "#F59E0B", "#FBBF24", "#FCD34D"],
105
+ },
106
+ blue: {
107
+ label: "Blue",
108
+ description: "Bright blue accent (#60A5FA).",
109
+ accent: "#60A5FA",
110
+ thinking: ["#1D4ED8", "#2563EB", "#3B82F6", "#60A5FA", "#93C5FD", "#BFDBFE"],
111
+ },
112
+ green: {
113
+ label: "Green",
114
+ description: "Emerald accent (#34D399).",
115
+ accent: "#34D399",
116
+ thinking: ["#047857", "#059669", "#10B981", "#34D399", "#6EE7B7", "#A7F3D0"],
117
+ },
118
+ violet: {
119
+ label: "Violet",
120
+ description: "Soft violet accent (#A78BFA).",
121
+ accent: "#A78BFA",
122
+ thinking: ["#6D28D9", "#7C3AED", "#8B5CF6", "#A78BFA", "#C4B5FD", "#DDD6FE"],
123
+ },
124
+ red: {
125
+ label: "Red",
126
+ description: "Coral red accent (#F87171).",
127
+ accent: "#F87171",
128
+ thinking: ["#B91C1C", "#DC2626", "#EF4444", "#F87171", "#FCA5A5", "#FECACA"],
129
+ },
130
+ };
131
+ export function getThemeAccentInfo(accent) {
132
+ return THEME_ACCENT_INFO[accent];
133
+ }
134
+ export function getThemeAccentLabel(accent) {
135
+ return THEME_ACCENT_INFO[accent].label;
136
+ }
137
+ export function getAvailableThemeAccents() {
138
+ return [...THEME_ACCENT_PRESETS];
139
+ }
140
+ function isThemeAccentPreset(value) {
141
+ return value !== undefined && THEME_ACCENT_PRESETS.includes(value);
142
+ }
143
+ function normalizeThemeAccent(accent) {
144
+ if (accent === undefined || accent === "default" || !isThemeAccentPreset(accent)) {
145
+ return undefined;
146
+ }
147
+ return accent;
148
+ }
91
149
  // ============================================================================
92
150
  // Color Utilities
93
151
  // ============================================================================
@@ -440,9 +498,60 @@ function loadThemeJson(name) {
440
498
  const content = fs.readFileSync(themePath, "utf-8");
441
499
  return parseThemeJsonContent(name, content);
442
500
  }
443
- function createTheme(themeJson, mode, sourcePath) {
501
+ function applyThemeAccent(themeJson, accent) {
502
+ if (!accent) {
503
+ return themeJson;
504
+ }
505
+ const accentColor = THEME_ACCENT_INFO[accent].accent;
506
+ const thinkingPalette = THEME_ACCENT_INFO[accent].thinking;
507
+ const vars = { ...(themeJson.vars ?? {}) };
508
+ const colors = { ...themeJson.colors };
509
+ const originalAccent = resolveVarRefs(themeJson.colors.accent, themeJson.vars ?? {});
510
+ const accentDrivenKeys = [
511
+ "accent",
512
+ "borderAccent",
513
+ "mdCode",
514
+ "mdListBullet",
515
+ "thinkingOff",
516
+ "thinkingMinimal",
517
+ "thinkingLow",
518
+ "thinkingMedium",
519
+ "thinkingHigh",
520
+ "thinkingXhigh",
521
+ ];
522
+ if ("accent" in vars) {
523
+ vars.accent = accentColor;
524
+ }
525
+ colors.thinkingOff = thinkingPalette[0];
526
+ colors.thinkingMinimal = thinkingPalette[1];
527
+ colors.thinkingLow = thinkingPalette[2];
528
+ colors.thinkingMedium = thinkingPalette[3];
529
+ colors.thinkingHigh = thinkingPalette[4];
530
+ colors.thinkingXhigh = thinkingPalette[5];
531
+ for (const key of accentDrivenKeys) {
532
+ if (key === "thinkingOff" ||
533
+ key === "thinkingMinimal" ||
534
+ key === "thinkingLow" ||
535
+ key === "thinkingMedium" ||
536
+ key === "thinkingHigh" ||
537
+ key === "thinkingXhigh") {
538
+ continue;
539
+ }
540
+ const currentResolved = resolveVarRefs(themeJson.colors[key], themeJson.vars ?? {});
541
+ if (key === "accent" || key === "borderAccent" || currentResolved === originalAccent) {
542
+ colors[key] = accentColor;
543
+ }
544
+ }
545
+ return {
546
+ ...themeJson,
547
+ vars,
548
+ colors,
549
+ };
550
+ }
551
+ function createTheme(themeJson, mode, sourcePath, accent) {
444
552
  const colorMode = mode ?? detectColorMode();
445
- const resolvedColors = resolveThemeColors(themeJson.colors, themeJson.vars);
553
+ const resolvedThemeJson = applyThemeAccent(themeJson, accent);
554
+ const resolvedColors = resolveThemeColors(resolvedThemeJson.colors, resolvedThemeJson.vars);
446
555
  const fgColors = {};
447
556
  const bgColors = {};
448
557
  const bgColorKeys = new Set([
@@ -462,26 +571,31 @@ function createTheme(themeJson, mode, sourcePath) {
462
571
  }
463
572
  }
464
573
  return new Theme(fgColors, bgColors, colorMode, {
465
- name: themeJson.name,
574
+ name: resolvedThemeJson.name,
466
575
  sourcePath,
467
576
  });
468
577
  }
469
- export function loadThemeFromPath(themePath, mode) {
578
+ export function loadThemeFromPath(themePath, mode, accent) {
470
579
  const content = fs.readFileSync(themePath, "utf-8");
471
580
  const themeJson = parseThemeJsonContent(themePath, content);
472
- return createTheme(themeJson, mode, themePath);
581
+ return createTheme(themeJson, mode, themePath, accent);
473
582
  }
474
- function loadTheme(name, mode) {
583
+ function loadTheme(name, mode, accent) {
475
584
  const registeredTheme = registeredThemes.get(name);
476
585
  if (registeredTheme) {
477
- return registeredTheme;
586
+ if (!accent) {
587
+ return registeredTheme;
588
+ }
589
+ if (registeredTheme.sourcePath) {
590
+ return loadThemeFromPath(registeredTheme.sourcePath, mode, accent);
591
+ }
478
592
  }
479
593
  const themeJson = loadThemeJson(name);
480
- return createTheme(themeJson, mode);
594
+ return createTheme(themeJson, mode, undefined, accent);
481
595
  }
482
- export function getThemeByName(name) {
596
+ export function getThemeByName(name, accent) {
483
597
  try {
484
- return loadTheme(name);
598
+ return loadTheme(name, undefined, normalizeThemeAccent(accent));
485
599
  }
486
600
  catch {
487
601
  return undefined;
@@ -523,6 +637,7 @@ function setGlobalTheme(t) {
523
637
  globalThis[THEME_KEY] = t;
524
638
  }
525
639
  let currentThemeName;
640
+ let currentThemeAccent;
526
641
  let themeWatcher;
527
642
  const onThemeChangeCallbacks = new Set();
528
643
  const registeredThemes = new Map();
@@ -534,11 +649,13 @@ export function setRegisteredThemes(themes) {
534
649
  }
535
650
  }
536
651
  }
537
- export function initTheme(themeName, enableWatcher = false) {
652
+ export function initTheme(themeName, enableWatcher = false, accent) {
538
653
  const name = themeName ?? getDefaultTheme();
654
+ const normalizedAccent = normalizeThemeAccent(accent);
539
655
  currentThemeName = name;
656
+ currentThemeAccent = normalizedAccent;
540
657
  try {
541
- setGlobalTheme(loadTheme(name));
658
+ setGlobalTheme(loadTheme(name, undefined, normalizedAccent));
542
659
  if (enableWatcher) {
543
660
  startThemeWatcher();
544
661
  }
@@ -546,14 +663,16 @@ export function initTheme(themeName, enableWatcher = false) {
546
663
  catch (_error) {
547
664
  // Theme is invalid - fall back to dark theme silently
548
665
  currentThemeName = "dark";
549
- setGlobalTheme(loadTheme("dark"));
666
+ setGlobalTheme(loadTheme("dark", undefined, normalizedAccent));
550
667
  // Don't start watcher for fallback theme
551
668
  }
552
669
  }
553
- export function setTheme(name, enableWatcher = false) {
670
+ export function setTheme(name, enableWatcher = false, accent) {
671
+ const normalizedAccent = normalizeThemeAccent(accent);
554
672
  currentThemeName = name;
673
+ currentThemeAccent = normalizedAccent;
555
674
  try {
556
- setGlobalTheme(loadTheme(name));
675
+ setGlobalTheme(loadTheme(name, undefined, normalizedAccent));
557
676
  if (enableWatcher) {
558
677
  startThemeWatcher();
559
678
  }
@@ -563,7 +682,7 @@ export function setTheme(name, enableWatcher = false) {
563
682
  catch (error) {
564
683
  // Theme is invalid - fall back to dark theme
565
684
  currentThemeName = "dark";
566
- setGlobalTheme(loadTheme("dark"));
685
+ setGlobalTheme(loadTheme("dark", undefined, normalizedAccent));
567
686
  // Don't start watcher for fallback theme
568
687
  return {
569
688
  success: false,
@@ -604,7 +723,7 @@ function startThemeWatcher() {
604
723
  setTimeout(() => {
605
724
  try {
606
725
  // Reload the theme
607
- setGlobalTheme(loadTheme(currentThemeName));
726
+ setGlobalTheme(loadTheme(currentThemeName, undefined, currentThemeAccent));
608
727
  // Notify callbacks (to invalidate UI)
609
728
  onThemeChangeCallbacks.forEach(cb => cb());
610
729
  }
@@ -618,7 +737,7 @@ function startThemeWatcher() {
618
737
  setTimeout(() => {
619
738
  if (!fs.existsSync(themeFile)) {
620
739
  currentThemeName = "dark";
621
- setGlobalTheme(loadTheme("dark"));
740
+ setGlobalTheme(loadTheme("dark", undefined, currentThemeAccent));
622
741
  if (themeWatcher) {
623
742
  themeWatcher.close();
624
743
  themeWatcher = undefined;
@@ -692,7 +811,7 @@ function ansi256ToHex(index) {
692
811
  export function getResolvedThemeColors(themeName) {
693
812
  const name = themeName ?? currentThemeName ?? getDefaultTheme();
694
813
  const isLight = name === "light";
695
- const themeJson = loadThemeJson(name);
814
+ const themeJson = applyThemeAccent(loadThemeJson(name), currentThemeAccent);
696
815
  const resolved = resolveThemeColors(themeJson.colors, themeJson.vars);
697
816
  // Default text color for empty values (terminal uses default fg color)
698
817
  const defaultText = isLight ? "#000000" : "#e5e5e7";
@@ -718,7 +837,7 @@ export function getResolvedThemeColors(themeName) {
718
837
  export function getThemeExportColors(themeName) {
719
838
  const name = themeName ?? currentThemeName ?? getDefaultTheme();
720
839
  try {
721
- const themeJson = loadThemeJson(name);
840
+ const themeJson = applyThemeAccent(loadThemeJson(name), currentThemeAccent);
722
841
  const exportSection = themeJson.export;
723
842
  if (!exportSection)
724
843
  return {};