pi-crew 0.6.3 → 0.7.1

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 (56) hide show
  1. package/CHANGELOG.md +84 -0
  2. package/README.md +80 -1
  3. package/docs/ui-optimization-plan.md +447 -0
  4. package/package.json +2 -1
  5. package/src/extension/knowledge-injection.ts +71 -0
  6. package/src/extension/pi-api.ts +47 -0
  7. package/src/extension/register.ts +32 -1
  8. package/src/extension/registration/commands.ts +65 -1
  9. package/src/extension/registration/compaction-guard.ts +154 -14
  10. package/src/extension/registration/subagent-tools.ts +8 -3
  11. package/src/extension/registration/team-tool.ts +18 -11
  12. package/src/extension/team-tool/handle-settings.ts +57 -0
  13. package/src/extension/team-tool/inspect.ts +4 -1
  14. package/src/extension/team-tool/plan.ts +8 -1
  15. package/src/extension/team-tool/run.ts +4 -3
  16. package/src/extension/team-tool-types.ts +2 -0
  17. package/src/runtime/intercom-bridge.ts +5 -1
  18. package/src/runtime/replace.ts +555 -0
  19. package/src/runtime/resilient-edit.ts +166 -0
  20. package/src/runtime/single-agent-compose.ts +87 -0
  21. package/src/runtime/team-runner.ts +23 -6
  22. package/src/schema/team-tool-schema.ts +6 -0
  23. package/src/state/session-state-map.ts +51 -0
  24. package/src/state/usage.ts +73 -0
  25. package/src/ui/card-colors.ts +126 -0
  26. package/src/ui/deploy-bundled-themes.ts +71 -0
  27. package/src/ui/powerbar-publisher.ts +1 -1
  28. package/src/ui/render-diff.ts +37 -3
  29. package/src/ui/settings-overlay.ts +70 -7
  30. package/src/ui/status-colors.ts +5 -1
  31. package/src/ui/syntax-highlight.ts +42 -23
  32. package/src/ui/theme-adapter.ts +80 -1
  33. package/src/ui/theme-discovery.ts +188 -0
  34. package/src/ui/tool-progress-formatter.ts +9 -5
  35. package/src/ui/tool-render.ts +4 -0
  36. package/src/ui/tool-renderers/brief-mode.ts +207 -0
  37. package/src/ui/tool-renderers/index.ts +640 -0
  38. package/src/ui/widget/index.ts +224 -0
  39. package/src/ui/widget/widget-formatters.ts +148 -0
  40. package/src/ui/widget/widget-model.ts +90 -0
  41. package/src/ui/widget/widget-renderer.ts +130 -0
  42. package/src/ui/widget/widget-types.ts +37 -0
  43. package/src/utils/guards.ts +110 -0
  44. package/themes/crew-catppuccin-latte.json +96 -0
  45. package/themes/crew-catppuccin-mocha.json +93 -0
  46. package/themes/crew-dark.json +90 -0
  47. package/themes/crew-dracula.json +83 -0
  48. package/themes/crew-gruvbox-dark.json +83 -0
  49. package/themes/crew-gruvbox-light.json +90 -0
  50. package/themes/crew-nord.json +85 -0
  51. package/themes/crew-one-dark.json +89 -0
  52. package/themes/crew-solarized-dark.json +90 -0
  53. package/themes/crew-solarized-light.json +92 -0
  54. package/themes/crew-tokyo-night.json +85 -0
  55. package/src/runtime/budget-tracker.ts +0 -354
  56. package/src/state/memory-store.ts +0 -244
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Centralized type guard library for pi-crew.
3
+ *
4
+ * Inspired by @ayulab/runtime-core — all unknown-to-narrowed checks
5
+ * go through these helpers instead of inline typeof/instanceof.
6
+ */
7
+
8
+ // ── Primitive guards ──────────────────────────────────────────────────
9
+
10
+ /** Narrow `unknown` to `Record<string, unknown>`. */
11
+ export function isRecord(value: unknown): value is Record<string, unknown> {
12
+ return typeof value === "object" && value !== null && !Array.isArray(value);
13
+ }
14
+
15
+ /** Narrow `unknown` to `string`. */
16
+ export function isString(value: unknown): value is string {
17
+ return typeof value === "string";
18
+ }
19
+
20
+ /** Narrow `unknown` to a non-empty string. */
21
+ export function isNonEmptyString(value: unknown): value is string {
22
+ return typeof value === "string" && value.length > 0;
23
+ }
24
+
25
+ /** Narrow `unknown` to `number` (excludes NaN). */
26
+ export function isNumber(value: unknown): value is number {
27
+ return typeof value === "number" && !Number.isNaN(value);
28
+ }
29
+
30
+ /** Narrow `unknown` to `boolean`. */
31
+ export function isBoolean(value: unknown): value is boolean {
32
+ return typeof value === "boolean";
33
+ }
34
+
35
+ /** Narrow `unknown` to `readonly string[]`. */
36
+ export function isStringArray(value: unknown): value is readonly string[] {
37
+ return Array.isArray(value) && value.every((v) => typeof v === "string");
38
+ }
39
+
40
+ /**
41
+ * Higher-order guard: build a guard that checks every element of an array.
42
+ *
43
+ * @example
44
+ * const isNumberArray = isArrayOf(isNumber);
45
+ */
46
+ export function isArrayOf<T>(
47
+ guard: (item: unknown) => item is T,
48
+ ): (value: unknown) => value is readonly T[] {
49
+ return (value: unknown): value is readonly T[] =>
50
+ Array.isArray(value) && value.every(guard);
51
+ }
52
+
53
+ // ── Record field extractors ───────────────────────────────────────────
54
+
55
+ /** Extract a string field from a record, returning `undefined` if absent. */
56
+ export function getStringField(value: unknown, key: string): string | undefined {
57
+ if (!isRecord(value)) return undefined;
58
+ const field = value[key];
59
+ return typeof field === "string" ? field : undefined;
60
+ }
61
+
62
+ /** Extract a number field from a record, returning `undefined` if absent. */
63
+ export function getNumberField(value: unknown, key: string): number | undefined {
64
+ if (!isRecord(value)) return undefined;
65
+ const field = value[key];
66
+ return typeof field === "number" && !Number.isNaN(field) ? field : undefined;
67
+ }
68
+
69
+ /** Extract a boolean field from a record, returning `undefined` if absent. */
70
+ export function getBooleanField(value: unknown, key: string): boolean | undefined {
71
+ if (!isRecord(value)) return undefined;
72
+ const field = value[key];
73
+ return typeof field === "boolean" ? field : undefined;
74
+ }
75
+
76
+ /** Extract a nested record field from a record, returning `undefined` if absent. */
77
+ export function getRecordField(value: unknown, key: string): Record<string, unknown> | undefined {
78
+ if (!isRecord(value)) return undefined;
79
+ const field = value[key];
80
+ return isRecord(field) ? field : undefined;
81
+ }
82
+
83
+ /** Extract an array field from a record, returning `undefined` if absent. */
84
+ export function getArrayField(value: unknown, key: string): unknown[] | undefined {
85
+ if (!isRecord(value)) return undefined;
86
+ const field = value[key];
87
+ return Array.isArray(field) ? field : undefined;
88
+ }
89
+
90
+ // ── Error helpers ─────────────────────────────────────────────────────
91
+
92
+ /**
93
+ * Extract a human-readable message from an unknown error value.
94
+ *
95
+ * Prefer this over manual `instanceof Error` checks to keep error
96
+ * handling uniform across the codebase.
97
+ */
98
+ export function errorMessage(err: unknown): string {
99
+ return err instanceof Error ? err.message : String(err);
100
+ }
101
+
102
+ // ── Utility types ─────────────────────────────────────────────────────
103
+
104
+ /** A non-empty readonly array type. */
105
+ export type NonEmptyReadonlyArray<T> = readonly [T, ...T[]];
106
+
107
+ /** Narrow a readonly array to a non-empty readonly array. */
108
+ export function hasItems<T>(items: readonly T[]): items is NonEmptyReadonlyArray<T> {
109
+ return items.length > 0;
110
+ }
@@ -0,0 +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": "crew-catppuccin-latte",
4
+ "vars": {
5
+ "bg": "#eff1f5",
6
+ "fg": "#4c4f69",
7
+ "mauve": "#8839ef",
8
+ "pink": "#ea76cb",
9
+ "blue": "#1e66f5",
10
+ "green": "#40a02b",
11
+ "teal": "#179299",
12
+ "sky": "#04a5e5",
13
+ "sapphire": "#209fb5",
14
+ "red": "#d20f39",
15
+ "maroon": "#e64553",
16
+ "peach": "#fe640b",
17
+ "yellow": "#df8e1d",
18
+ "rosewater": "#dc8a78",
19
+ "flamingo": "#dd7878",
20
+ "lavender": "#7287fd",
21
+ "gray": "#6c6f85",
22
+ "dimGray": "#9ca0b0",
23
+ "darkGray": "#bcc0cc",
24
+ "darkerGray": "#ccd0da",
25
+ "selection": "#dcd8f5",
26
+ "userMsgBg": "#ccd0da",
27
+ "customMsgBg": "#ccd0da",
28
+ "toolPending": "#e6e9ef",
29
+ "toolSuccess": "#e3f0df",
30
+ "toolError": "#fbe0e3"
31
+ },
32
+ "colors": {
33
+ "accent": "mauve",
34
+ "border": "darkGray",
35
+ "borderAccent": "mauve",
36
+ "borderMuted": "darkerGray",
37
+ "success": "green",
38
+ "error": "red",
39
+ "warning": "peach",
40
+ "muted": "gray",
41
+ "dim": "dimGray",
42
+ "text": "fg",
43
+ "thinkingText": "gray",
44
+
45
+ "selectedBg": "selection",
46
+ "userMessageBg": "userMsgBg",
47
+ "userMessageText": "fg",
48
+ "customMessageBg": "customMsgBg",
49
+ "customMessageText": "fg",
50
+ "customMessageLabel": "lavender",
51
+ "toolPendingBg": "toolPending",
52
+ "toolSuccessBg": "toolSuccess",
53
+ "toolErrorBg": "toolError",
54
+ "toolTitle": "sky",
55
+ "toolOutput": "gray",
56
+
57
+ "mdHeading": "yellow",
58
+ "mdLink": "blue",
59
+ "mdLinkUrl": "dimGray",
60
+ "mdCode": "green",
61
+ "mdCodeBlock": "#179299",
62
+ "mdCodeBlockBorder": "darkGray",
63
+ "mdQuote": "gray",
64
+ "mdQuoteBorder": "darkGray",
65
+ "mdHr": "darkGray",
66
+ "mdListBullet": "blue",
67
+
68
+ "toolDiffAdded": "green",
69
+ "toolDiffRemoved": "red",
70
+ "toolDiffContext": "gray",
71
+
72
+ "syntaxComment": "#9ca0b0",
73
+ "syntaxKeyword": "pink",
74
+ "syntaxFunction": "blue",
75
+ "syntaxVariable": "peach",
76
+ "syntaxString": "green",
77
+ "syntaxNumber": "peach",
78
+ "syntaxType": "yellow",
79
+ "syntaxOperator": "sky",
80
+ "syntaxPunctuation": "fg",
81
+
82
+ "thinkingOff": "darkerGray",
83
+ "thinkingMinimal": "dimGray",
84
+ "thinkingLow": "lavender",
85
+ "thinkingMedium": "mauve",
86
+ "thinkingHigh": "pink",
87
+ "thinkingXhigh": "#c896ff",
88
+
89
+ "bashMode": "green"
90
+ },
91
+ "export": {
92
+ "pageBg": "#eff1f5",
93
+ "cardBg": "#ccd0da",
94
+ "infoBg": "#dcd8f5"
95
+ }
96
+ }
@@ -0,0 +1,93 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
3
+ "name": "crew-catppuccin-mocha",
4
+ "vars": {
5
+ "bg": "#1e1e2e",
6
+ "fg": "#cdd6f4",
7
+ "mauve": "#cba6f7",
8
+ "blue": "#89b4fa",
9
+ "green": "#a6e3a1",
10
+ "teal": "#94e2d5",
11
+ "red": "#f38ba8",
12
+ "peach": "#fab387",
13
+ "yellow": "#f9e2af",
14
+ "pink": "#f5c2e7",
15
+ "sky": "#89dceb",
16
+ "lavender": "#b4befe",
17
+ "rosewater": "#f5e0dc",
18
+ "gray": "#a6adc8",
19
+ "dimGray": "#6c7086",
20
+ "darkGray": "#45475a",
21
+ "darkerGray": "#313244",
22
+ "selection": "#313244",
23
+ "userMsgBg": "#181825",
24
+ "customMsgBg": "#181825",
25
+ "toolPending": "#11111b",
26
+ "toolSuccess": "#1a2b1f",
27
+ "toolError": "#311d24"
28
+ },
29
+ "colors": {
30
+ "accent": "mauve",
31
+ "border": "darkGray",
32
+ "borderAccent": "mauve",
33
+ "borderMuted": "darkerGray",
34
+ "success": "green",
35
+ "error": "red",
36
+ "warning": "peach",
37
+ "muted": "gray",
38
+ "dim": "dimGray",
39
+ "text": "fg",
40
+ "thinkingText": "gray",
41
+
42
+ "selectedBg": "selection",
43
+ "userMessageBg": "userMsgBg",
44
+ "userMessageText": "fg",
45
+ "customMessageBg": "customMsgBg",
46
+ "customMessageText": "fg",
47
+ "customMessageLabel": "lavender",
48
+ "toolPendingBg": "toolPending",
49
+ "toolSuccessBg": "toolSuccess",
50
+ "toolErrorBg": "toolError",
51
+ "toolTitle": "sky",
52
+ "toolOutput": "gray",
53
+
54
+ "mdHeading": "yellow",
55
+ "mdLink": "blue",
56
+ "mdLinkUrl": "dimGray",
57
+ "mdCode": "green",
58
+ "mdCodeBlock": "#94e2d5",
59
+ "mdCodeBlockBorder": "darkGray",
60
+ "mdQuote": "gray",
61
+ "mdQuoteBorder": "darkGray",
62
+ "mdHr": "darkGray",
63
+ "mdListBullet": "mauve",
64
+
65
+ "toolDiffAdded": "green",
66
+ "toolDiffRemoved": "red",
67
+ "toolDiffContext": "gray",
68
+
69
+ "syntaxComment": "#6c7086",
70
+ "syntaxKeyword": "#cba6f7",
71
+ "syntaxFunction": "#89b4fa",
72
+ "syntaxVariable": "#fab387",
73
+ "syntaxString": "#a6e3a1",
74
+ "syntaxNumber": "#fab387",
75
+ "syntaxType": "#f9e2af",
76
+ "syntaxOperator": "#89dceb",
77
+ "syntaxPunctuation": "#cdd6f4",
78
+
79
+ "thinkingOff": "darkerGray",
80
+ "thinkingMinimal": "#585b70",
81
+ "thinkingLow": "mauve",
82
+ "thinkingMedium": "lavender",
83
+ "thinkingHigh": "pink",
84
+ "thinkingXhigh": "rosewater",
85
+
86
+ "bashMode": "green"
87
+ },
88
+ "export": {
89
+ "pageBg": "#1e1e2e",
90
+ "cardBg": "#181825",
91
+ "infoBg": "#313244"
92
+ }
93
+ }
@@ -0,0 +1,90 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
3
+ "name": "crew-dark",
4
+ "vars": {
5
+ "bg": "#0d1117",
6
+ "fg": "#c9d1d9",
7
+ "crewBlue": "#58a6ff",
8
+ "deepBlue": "#1f6feb",
9
+ "skyBlue": "#79c0ff",
10
+ "teal": "#39d353",
11
+ "amber": "#e3b341",
12
+ "coral": "#f78166",
13
+ "rose": "#ff7b72",
14
+ "lavender": "#d2a8ff",
15
+ "gray": "#8b949e",
16
+ "dimGray": "#484f58",
17
+ "darkGray": "#30363d",
18
+ "darkerGray": "#21262d",
19
+ "selection": "#1c2541",
20
+ "userMsgBg": "#161b22",
21
+ "customMsgBg": "#161b22",
22
+ "toolPending": "#111820",
23
+ "toolSuccess": "#0d1f0d",
24
+ "toolError": "#2a1215"
25
+ },
26
+ "colors": {
27
+ "accent": "crewBlue",
28
+ "border": "darkGray",
29
+ "borderAccent": "deepBlue",
30
+ "borderMuted": "darkerGray",
31
+ "success": "teal",
32
+ "error": "rose",
33
+ "warning": "amber",
34
+ "muted": "gray",
35
+ "dim": "dimGray",
36
+ "text": "fg",
37
+ "thinkingText": "gray",
38
+
39
+ "selectedBg": "selection",
40
+ "userMessageBg": "userMsgBg",
41
+ "userMessageText": "fg",
42
+ "customMessageBg": "customMsgBg",
43
+ "customMessageText": "fg",
44
+ "customMessageLabel": "lavender",
45
+ "toolPendingBg": "toolPending",
46
+ "toolSuccessBg": "toolSuccess",
47
+ "toolErrorBg": "toolError",
48
+ "toolTitle": "skyBlue",
49
+ "toolOutput": "gray",
50
+
51
+ "mdHeading": "amber",
52
+ "mdLink": "deepBlue",
53
+ "mdLinkUrl": "dimGray",
54
+ "mdCode": "teal",
55
+ "mdCodeBlock": "#56d364",
56
+ "mdCodeBlockBorder": "darkGray",
57
+ "mdQuote": "gray",
58
+ "mdQuoteBorder": "darkGray",
59
+ "mdHr": "darkGray",
60
+ "mdListBullet": "crewBlue",
61
+
62
+ "toolDiffAdded": "teal",
63
+ "toolDiffRemoved": "rose",
64
+ "toolDiffContext": "gray",
65
+
66
+ "syntaxComment": "#6e7681",
67
+ "syntaxKeyword": "#ff7b72",
68
+ "syntaxFunction": "#d2a8ff",
69
+ "syntaxVariable": "#ffa657",
70
+ "syntaxString": "#a5d6ff",
71
+ "syntaxNumber": "#79c0ff",
72
+ "syntaxType": "#ff7b72",
73
+ "syntaxOperator": "#79c0ff",
74
+ "syntaxPunctuation": "#c9d1d9",
75
+
76
+ "thinkingOff": "darkerGray",
77
+ "thinkingMinimal": "#484f58",
78
+ "thinkingLow": "#1f6feb",
79
+ "thinkingMedium": "#58a6ff",
80
+ "thinkingHigh": "#79c0ff",
81
+ "thinkingXhigh": "#d2a8ff",
82
+
83
+ "bashMode": "teal"
84
+ },
85
+ "export": {
86
+ "pageBg": "#0d1117",
87
+ "cardBg": "#161b22",
88
+ "infoBg": "#1c2541"
89
+ }
90
+ }
@@ -0,0 +1,83 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
3
+ "name": "crew-dracula",
4
+ "vars": {
5
+ "bg": "#282a36",
6
+ "fg": "#f8f8f2",
7
+ "purple": "#bd93f9",
8
+ "pink": "#ff79c6",
9
+ "cyan": "#8be9fd",
10
+ "green": "#50fa7b",
11
+ "orange": "#ffb86c",
12
+ "red": "#ff5555",
13
+ "yellow": "#f1fa8c",
14
+ "gray": "#6272a4",
15
+ "dimGray": "#44475a",
16
+ "darkGray": "#44475a",
17
+ "darkerGray": "#21222c",
18
+ "selection": "#44475a",
19
+ "userMsgBg": "#343746",
20
+ "customMsgBg": "#343746",
21
+ "toolPending": "#343746",
22
+ "toolSuccess": "#1e2d20",
23
+ "toolError": "#2e1a1e"
24
+ },
25
+ "colors": {
26
+ "accent": "purple",
27
+ "border": "darkGray",
28
+ "borderAccent": "purple",
29
+ "borderMuted": "darkerGray",
30
+ "success": "green",
31
+ "error": "red",
32
+ "warning": "orange",
33
+ "muted": "gray",
34
+ "dim": "dimGray",
35
+ "text": "fg",
36
+ "thinkingText": "gray",
37
+ "selectedBg": "selection",
38
+ "userMessageBg": "userMsgBg",
39
+ "userMessageText": "fg",
40
+ "customMessageBg": "customMsgBg",
41
+ "customMessageText": "fg",
42
+ "customMessageLabel": "purple",
43
+ "toolPendingBg": "toolPending",
44
+ "toolSuccessBg": "toolSuccess",
45
+ "toolErrorBg": "toolError",
46
+ "toolTitle": "cyan",
47
+ "toolOutput": "gray",
48
+ "mdHeading": "yellow",
49
+ "mdLink": "purple",
50
+ "mdLinkUrl": "dimGray",
51
+ "mdCode": "green",
52
+ "mdCodeBlock": "#50fa7b",
53
+ "mdCodeBlockBorder": "darkGray",
54
+ "mdQuote": "gray",
55
+ "mdQuoteBorder": "darkGray",
56
+ "mdHr": "darkGray",
57
+ "mdListBullet": "purple",
58
+ "toolDiffAdded": "green",
59
+ "toolDiffRemoved": "red",
60
+ "toolDiffContext": "gray",
61
+ "syntaxComment": "#6272a4",
62
+ "syntaxKeyword": "pink",
63
+ "syntaxFunction": "purple",
64
+ "syntaxVariable": "orange",
65
+ "syntaxString": "yellow",
66
+ "syntaxNumber": "purple",
67
+ "syntaxType": "cyan",
68
+ "syntaxOperator": "pink",
69
+ "syntaxPunctuation": "fg",
70
+ "thinkingOff": "darkerGray",
71
+ "thinkingMinimal": "#44475a",
72
+ "thinkingLow": "purple",
73
+ "thinkingMedium": "#bd93f9",
74
+ "thinkingHigh": "cyan",
75
+ "thinkingXhigh": "pink",
76
+ "bashMode": "green"
77
+ },
78
+ "export": {
79
+ "pageBg": "#282a36",
80
+ "cardBg": "#343746",
81
+ "infoBg": "#44475a"
82
+ }
83
+ }
@@ -0,0 +1,83 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
3
+ "name": "crew-gruvbox-dark",
4
+ "vars": {
5
+ "bg": "#282828",
6
+ "fg": "#ebdbb2",
7
+ "blue": "#83a598",
8
+ "aqua": "#8ec07c",
9
+ "green": "#b8bb26",
10
+ "yellow": "#fabd2f",
11
+ "orange": "#fe8019",
12
+ "red": "#fb4934",
13
+ "purple": "#d3869b",
14
+ "gray": "#928374",
15
+ "dimGray": "#928374",
16
+ "darkGray": "#3c3836",
17
+ "darkerGray": "#1d2021",
18
+ "selection": "#3c3836",
19
+ "userMsgBg": "#32302f",
20
+ "customMsgBg": "#32302f",
21
+ "toolPending": "#1d2021",
22
+ "toolSuccess": "#1a2a1a",
23
+ "toolError": "#2e1a1a"
24
+ },
25
+ "colors": {
26
+ "accent": "blue",
27
+ "border": "darkGray",
28
+ "borderAccent": "blue",
29
+ "borderMuted": "darkerGray",
30
+ "success": "green",
31
+ "error": "red",
32
+ "warning": "yellow",
33
+ "muted": "gray",
34
+ "dim": "dimGray",
35
+ "text": "fg",
36
+ "thinkingText": "gray",
37
+ "selectedBg": "selection",
38
+ "userMessageBg": "userMsgBg",
39
+ "userMessageText": "fg",
40
+ "customMessageBg": "customMsgBg",
41
+ "customMessageText": "fg",
42
+ "customMessageLabel": "purple",
43
+ "toolPendingBg": "toolPending",
44
+ "toolSuccessBg": "toolSuccess",
45
+ "toolErrorBg": "toolError",
46
+ "toolTitle": "aqua",
47
+ "toolOutput": "gray",
48
+ "mdHeading": "yellow",
49
+ "mdLink": "blue",
50
+ "mdLinkUrl": "dimGray",
51
+ "mdCode": "green",
52
+ "mdCodeBlock": "#b8bb26",
53
+ "mdCodeBlockBorder": "darkGray",
54
+ "mdQuote": "gray",
55
+ "mdQuoteBorder": "darkGray",
56
+ "mdHr": "darkGray",
57
+ "mdListBullet": "blue",
58
+ "toolDiffAdded": "green",
59
+ "toolDiffRemoved": "red",
60
+ "toolDiffContext": "gray",
61
+ "syntaxComment": "#928374",
62
+ "syntaxKeyword": "red",
63
+ "syntaxFunction": "green",
64
+ "syntaxVariable": "orange",
65
+ "syntaxString": "yellow",
66
+ "syntaxNumber": "purple",
67
+ "syntaxType": "aqua",
68
+ "syntaxOperator": "blue",
69
+ "syntaxPunctuation": "fg",
70
+ "thinkingOff": "darkerGray",
71
+ "thinkingMinimal": "#928374",
72
+ "thinkingLow": "blue",
73
+ "thinkingMedium": "#83a598",
74
+ "thinkingHigh": "aqua",
75
+ "thinkingXhigh": "purple",
76
+ "bashMode": "green"
77
+ },
78
+ "export": {
79
+ "pageBg": "#282828",
80
+ "cardBg": "#32302f",
81
+ "infoBg": "#3c3836"
82
+ }
83
+ }
@@ -0,0 +1,90 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
3
+ "name": "crew-gruvbox-light",
4
+ "vars": {
5
+ "bg": "#fbf1c7",
6
+ "fg": "#3c3836",
7
+ "blue": "#076678",
8
+ "green": "#79740e",
9
+ "aqua": "#427b58",
10
+ "yellow": "#d79921",
11
+ "orange": "#d65d0e",
12
+ "red": "#cc241d",
13
+ "purple": "#8f3f71",
14
+ "fg4": "#7c6f64",
15
+ "gray": "#928374",
16
+ "dimGray": "#a89984",
17
+ "darkGray": "#d5c4a1",
18
+ "darkerGray": "#ebdbb2",
19
+ "selection": "#e8d9a8",
20
+ "userMsgBg": "#ebdbb2",
21
+ "customMsgBg": "#ebdbb2",
22
+ "toolPending": "#ebdbb2",
23
+ "toolSuccess": "#d9e8c0",
24
+ "toolError": "#f0d0c8"
25
+ },
26
+ "colors": {
27
+ "accent": "blue",
28
+ "border": "darkGray",
29
+ "borderAccent": "blue",
30
+ "borderMuted": "darkerGray",
31
+ "success": "green",
32
+ "error": "red",
33
+ "warning": "yellow",
34
+ "muted": "gray",
35
+ "dim": "dimGray",
36
+ "text": "fg",
37
+ "thinkingText": "gray",
38
+
39
+ "selectedBg": "selection",
40
+ "userMessageBg": "userMsgBg",
41
+ "userMessageText": "fg",
42
+ "customMessageBg": "customMsgBg",
43
+ "customMessageText": "fg",
44
+ "customMessageLabel": "purple",
45
+ "toolPendingBg": "toolPending",
46
+ "toolSuccessBg": "toolSuccess",
47
+ "toolErrorBg": "toolError",
48
+ "toolTitle": "aqua",
49
+ "toolOutput": "gray",
50
+
51
+ "mdHeading": "yellow",
52
+ "mdLink": "blue",
53
+ "mdLinkUrl": "dimGray",
54
+ "mdCode": "green",
55
+ "mdCodeBlock": "#427b58",
56
+ "mdCodeBlockBorder": "darkGray",
57
+ "mdQuote": "gray",
58
+ "mdQuoteBorder": "darkGray",
59
+ "mdHr": "darkGray",
60
+ "mdListBullet": "blue",
61
+
62
+ "toolDiffAdded": "green",
63
+ "toolDiffRemoved": "red",
64
+ "toolDiffContext": "gray",
65
+
66
+ "syntaxComment": "#928374",
67
+ "syntaxKeyword": "red",
68
+ "syntaxFunction": "blue",
69
+ "syntaxVariable": "orange",
70
+ "syntaxString": "green",
71
+ "syntaxNumber": "purple",
72
+ "syntaxType": "aqua",
73
+ "syntaxOperator": "aqua",
74
+ "syntaxPunctuation": "fg",
75
+
76
+ "thinkingOff": "darkerGray",
77
+ "thinkingMinimal": "dimGray",
78
+ "thinkingLow": "purple",
79
+ "thinkingMedium": "blue",
80
+ "thinkingHigh": "aqua",
81
+ "thinkingXhigh": "#1498a8",
82
+
83
+ "bashMode": "green"
84
+ },
85
+ "export": {
86
+ "pageBg": "#fbf1c7",
87
+ "cardBg": "#ebdbb2",
88
+ "infoBg": "#e8d9a8"
89
+ }
90
+ }