@oh-my-pi/pi-coding-agent 6.8.5 → 6.9.69

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 (155) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/package.json +6 -6
  3. package/src/cli/stats-cli.ts +191 -0
  4. package/src/core/agent-session.ts +103 -1
  5. package/src/core/extensions/index.ts +2 -0
  6. package/src/core/extensions/runner.ts +31 -0
  7. package/src/core/extensions/types.ts +24 -0
  8. package/src/core/messages.ts +48 -0
  9. package/src/core/sdk.ts +0 -2
  10. package/src/core/session-manager.ts +10 -1
  11. package/src/core/settings-manager.ts +0 -105
  12. package/src/core/tools/bash.ts +5 -7
  13. package/src/core/tools/index.ts +1 -5
  14. package/src/core/tools/patch/applicator.ts +115 -17
  15. package/src/core/tools/patch/index.ts +1 -1
  16. package/src/core/tools/patch/normalize.ts +185 -10
  17. package/src/core/tools/python.ts +444 -86
  18. package/src/core/tools/task/executor.ts +2 -6
  19. package/src/core/tools/task/index.ts +30 -12
  20. package/src/core/tools/task/render.ts +163 -30
  21. package/src/core/tools/task/template.ts +37 -0
  22. package/src/core/tools/task/types.ts +6 -2
  23. package/src/core/tools/task/worker.ts +1 -1
  24. package/src/index.ts +2 -2
  25. package/src/main.ts +12 -0
  26. package/src/modes/interactive/components/python-execution.ts +180 -0
  27. package/src/modes/interactive/components/settings-defs.ts +0 -70
  28. package/src/modes/interactive/components/settings-selector.ts +0 -1
  29. package/src/modes/interactive/components/welcome.ts +1 -0
  30. package/src/modes/interactive/controllers/command-controller.ts +46 -0
  31. package/src/modes/interactive/controllers/event-controller.ts +0 -11
  32. package/src/modes/interactive/controllers/input-controller.ts +28 -1
  33. package/src/modes/interactive/controllers/selector-controller.ts +0 -9
  34. package/src/modes/interactive/interactive-mode.ts +10 -58
  35. package/src/modes/interactive/theme/dark.json +2 -9
  36. package/src/modes/interactive/theme/defaults/alabaster.json +2 -8
  37. package/src/modes/interactive/theme/defaults/amethyst.json +2 -9
  38. package/src/modes/interactive/theme/defaults/anthracite.json +2 -9
  39. package/src/modes/interactive/theme/defaults/basalt.json +89 -88
  40. package/src/modes/interactive/theme/defaults/birch.json +2 -8
  41. package/src/modes/interactive/theme/defaults/dark-abyss.json +2 -8
  42. package/src/modes/interactive/theme/defaults/dark-arctic.json +2 -9
  43. package/src/modes/interactive/theme/defaults/dark-aurora.json +3 -2
  44. package/src/modes/interactive/theme/defaults/dark-catppuccin.json +2 -1
  45. package/src/modes/interactive/theme/defaults/dark-cavern.json +2 -8
  46. package/src/modes/interactive/theme/defaults/dark-copper.json +3 -2
  47. package/src/modes/interactive/theme/defaults/dark-cosmos.json +2 -8
  48. package/src/modes/interactive/theme/defaults/dark-cyberpunk.json +2 -9
  49. package/src/modes/interactive/theme/defaults/dark-dracula.json +2 -9
  50. package/src/modes/interactive/theme/defaults/dark-eclipse.json +2 -8
  51. package/src/modes/interactive/theme/defaults/dark-ember.json +3 -2
  52. package/src/modes/interactive/theme/defaults/dark-equinox.json +2 -8
  53. package/src/modes/interactive/theme/defaults/dark-forest.json +2 -9
  54. package/src/modes/interactive/theme/defaults/dark-github.json +2 -9
  55. package/src/modes/interactive/theme/defaults/dark-gruvbox.json +2 -9
  56. package/src/modes/interactive/theme/defaults/dark-lavender.json +3 -2
  57. package/src/modes/interactive/theme/defaults/dark-lunar.json +2 -8
  58. package/src/modes/interactive/theme/defaults/dark-midnight.json +3 -2
  59. package/src/modes/interactive/theme/defaults/dark-monochrome.json +2 -9
  60. package/src/modes/interactive/theme/defaults/dark-monokai.json +2 -9
  61. package/src/modes/interactive/theme/defaults/dark-nebula.json +2 -8
  62. package/src/modes/interactive/theme/defaults/dark-nord.json +2 -9
  63. package/src/modes/interactive/theme/defaults/dark-ocean.json +2 -9
  64. package/src/modes/interactive/theme/defaults/dark-one.json +2 -9
  65. package/src/modes/interactive/theme/defaults/dark-rainforest.json +2 -8
  66. package/src/modes/interactive/theme/defaults/dark-reef.json +2 -8
  67. package/src/modes/interactive/theme/defaults/dark-retro.json +2 -9
  68. package/src/modes/interactive/theme/defaults/dark-rose-pine.json +2 -1
  69. package/src/modes/interactive/theme/defaults/dark-sakura.json +3 -2
  70. package/src/modes/interactive/theme/defaults/dark-slate.json +3 -2
  71. package/src/modes/interactive/theme/defaults/dark-solarized.json +2 -1
  72. package/src/modes/interactive/theme/defaults/dark-solstice.json +2 -8
  73. package/src/modes/interactive/theme/defaults/dark-starfall.json +2 -8
  74. package/src/modes/interactive/theme/defaults/dark-sunset.json +2 -9
  75. package/src/modes/interactive/theme/defaults/dark-swamp.json +2 -8
  76. package/src/modes/interactive/theme/defaults/dark-synthwave.json +2 -1
  77. package/src/modes/interactive/theme/defaults/dark-taiga.json +2 -8
  78. package/src/modes/interactive/theme/defaults/dark-terminal.json +3 -2
  79. package/src/modes/interactive/theme/defaults/dark-tokyo-night.json +2 -9
  80. package/src/modes/interactive/theme/defaults/dark-tundra.json +2 -8
  81. package/src/modes/interactive/theme/defaults/dark-twilight.json +2 -8
  82. package/src/modes/interactive/theme/defaults/dark-volcanic.json +2 -8
  83. package/src/modes/interactive/theme/defaults/graphite.json +2 -9
  84. package/src/modes/interactive/theme/defaults/light-arctic.json +2 -1
  85. package/src/modes/interactive/theme/defaults/light-aurora-day.json +2 -8
  86. package/src/modes/interactive/theme/defaults/light-canyon.json +2 -8
  87. package/src/modes/interactive/theme/defaults/light-catppuccin.json +2 -1
  88. package/src/modes/interactive/theme/defaults/light-cirrus.json +2 -8
  89. package/src/modes/interactive/theme/defaults/light-coral.json +3 -2
  90. package/src/modes/interactive/theme/defaults/light-cyberpunk.json +2 -9
  91. package/src/modes/interactive/theme/defaults/light-dawn.json +2 -8
  92. package/src/modes/interactive/theme/defaults/light-dunes.json +2 -8
  93. package/src/modes/interactive/theme/defaults/light-eucalyptus.json +3 -2
  94. package/src/modes/interactive/theme/defaults/light-forest.json +2 -9
  95. package/src/modes/interactive/theme/defaults/light-frost.json +3 -2
  96. package/src/modes/interactive/theme/defaults/light-github.json +2 -1
  97. package/src/modes/interactive/theme/defaults/light-glacier.json +2 -8
  98. package/src/modes/interactive/theme/defaults/light-gruvbox.json +2 -9
  99. package/src/modes/interactive/theme/defaults/light-haze.json +2 -8
  100. package/src/modes/interactive/theme/defaults/light-honeycomb.json +3 -2
  101. package/src/modes/interactive/theme/defaults/light-lagoon.json +2 -8
  102. package/src/modes/interactive/theme/defaults/light-lavender.json +3 -2
  103. package/src/modes/interactive/theme/defaults/light-meadow.json +2 -8
  104. package/src/modes/interactive/theme/defaults/light-mint.json +3 -2
  105. package/src/modes/interactive/theme/defaults/light-monochrome.json +2 -1
  106. package/src/modes/interactive/theme/defaults/light-ocean.json +2 -9
  107. package/src/modes/interactive/theme/defaults/light-one.json +2 -8
  108. package/src/modes/interactive/theme/defaults/light-opal.json +2 -8
  109. package/src/modes/interactive/theme/defaults/light-orchard.json +2 -8
  110. package/src/modes/interactive/theme/defaults/light-paper.json +3 -2
  111. package/src/modes/interactive/theme/defaults/light-prism.json +2 -8
  112. package/src/modes/interactive/theme/defaults/light-retro.json +2 -9
  113. package/src/modes/interactive/theme/defaults/light-sand.json +3 -2
  114. package/src/modes/interactive/theme/defaults/light-savanna.json +2 -8
  115. package/src/modes/interactive/theme/defaults/light-solarized.json +2 -1
  116. package/src/modes/interactive/theme/defaults/light-soleil.json +2 -8
  117. package/src/modes/interactive/theme/defaults/light-sunset.json +2 -9
  118. package/src/modes/interactive/theme/defaults/light-synthwave.json +2 -9
  119. package/src/modes/interactive/theme/defaults/light-tokyo-night.json +2 -9
  120. package/src/modes/interactive/theme/defaults/light-wetland.json +2 -8
  121. package/src/modes/interactive/theme/defaults/light-zenith.json +2 -8
  122. package/src/modes/interactive/theme/defaults/limestone.json +2 -8
  123. package/src/modes/interactive/theme/defaults/mahogany.json +2 -9
  124. package/src/modes/interactive/theme/defaults/marble.json +2 -8
  125. package/src/modes/interactive/theme/defaults/obsidian.json +89 -88
  126. package/src/modes/interactive/theme/defaults/onyx.json +89 -88
  127. package/src/modes/interactive/theme/defaults/pearl.json +2 -8
  128. package/src/modes/interactive/theme/defaults/porcelain.json +89 -88
  129. package/src/modes/interactive/theme/defaults/quartz.json +2 -8
  130. package/src/modes/interactive/theme/defaults/sandstone.json +2 -8
  131. package/src/modes/interactive/theme/defaults/titanium.json +88 -87
  132. package/src/modes/interactive/theme/light.json +2 -8
  133. package/src/modes/interactive/theme/theme-schema.json +5 -0
  134. package/src/modes/interactive/theme/theme.ts +7 -0
  135. package/src/modes/interactive/types.ts +5 -15
  136. package/src/modes/interactive/utils/ui-helpers.ts +20 -0
  137. package/src/prompts/system/system-prompt.md +8 -0
  138. package/src/prompts/tools/python.md +40 -2
  139. package/src/prompts/tools/task.md +8 -13
  140. package/src/core/custom-commands/bundled/wt/index.ts +0 -435
  141. package/src/core/tools/git.ts +0 -213
  142. package/src/core/voice-controller.ts +0 -135
  143. package/src/core/voice-supervisor.ts +0 -976
  144. package/src/core/voice.ts +0 -314
  145. package/src/lib/worktree/collapse.ts +0 -180
  146. package/src/lib/worktree/constants.ts +0 -14
  147. package/src/lib/worktree/errors.ts +0 -23
  148. package/src/lib/worktree/git.ts +0 -60
  149. package/src/lib/worktree/index.ts +0 -15
  150. package/src/lib/worktree/operations.ts +0 -216
  151. package/src/lib/worktree/session.ts +0 -114
  152. package/src/lib/worktree/stats.ts +0 -67
  153. package/src/modes/interactive/utils/voice-manager.ts +0 -96
  154. package/src/prompts/tools/git.md +0 -9
  155. package/src/prompts/voice-summary.md +0 -12
@@ -1,90 +1,91 @@
1
1
  {
2
- "$schema": "https://raw.githubusercontent.com/can1357/oh-my-pi/main/packages/coding-agent/theme-schema.json",
3
- "name": "porcelain",
4
- "vars": {
5
- "porcelainWhite": "#f8f9fc",
6
- "wedgwoodBlue": "#5070a0",
7
- "goldTrim": "#b09040",
8
- "delicateGray": "#d0d4e0",
9
- "cobaltBlack": "#1a2030",
10
- "paleBlue": "#e8eef8",
11
- "deepWedgwood": "#405080",
12
- "warmGold": "#c0a050",
13
- "softBlue": "#708cb0",
14
- "crimsonRed": "#c04040",
15
- "darkGold": "#907030",
16
- "mutedBlue": "#909cb0"
17
- },
18
- "colors": {
19
- "accent": "wedgwoodBlue",
20
- "border": "delicateGray",
21
- "borderAccent": "wedgwoodBlue",
22
- "borderMuted": "#e8eaf0",
23
- "success": "#507050",
24
- "error": "crimsonRed",
25
- "warning": "darkGold",
26
- "muted": "mutedBlue",
27
- "dim": "#a0a8b8",
28
- "text": "",
29
- "thinkingText": "softBlue",
30
- "selectedBg": "paleBlue",
31
- "userMessageBg": "wedgwoodBlue",
32
- "userMessageText": "",
33
- "customMessageBg": "goldTrim",
34
- "customMessageText": "",
35
- "customMessageLabel": "warmGold",
36
- "toolPendingBg": "paleBlue",
37
- "toolSuccessBg": "#e8f0e8",
38
- "toolErrorBg": "#f8e8e8",
39
- "toolTitle": "",
40
- "toolOutput": "cobaltBlack",
41
- "mdHeading": "deepWedgwood",
42
- "mdLink": "wedgwoodBlue",
43
- "mdLinkUrl": "goldTrim",
44
- "mdCode": "darkGold",
45
- "mdCodeBlock": "cobaltBlack",
46
- "mdCodeBlockBorder": "delicateGray",
47
- "mdQuote": "softBlue",
48
- "mdQuoteBorder": "wedgwoodBlue",
49
- "mdHr": "delicateGray",
50
- "mdListBullet": "wedgwoodBlue",
51
- "toolDiffAdded": "#507050",
52
- "toolDiffRemoved": "crimsonRed",
53
- "toolDiffContext": "mutedBlue",
54
- "syntaxComment": "mutedBlue",
55
- "syntaxKeyword": "deepWedgwood",
56
- "syntaxFunction": "wedgwoodBlue",
57
- "syntaxVariable": "cobaltBlack",
58
- "syntaxString": "darkGold",
59
- "syntaxNumber": "goldTrim",
60
- "syntaxType": "deepWedgwood",
61
- "syntaxOperator": "softBlue",
62
- "syntaxPunctuation": "#606870",
63
- "thinkingOff": "#c0c4d0",
64
- "thinkingMinimal": "mutedBlue",
65
- "thinkingLow": "softBlue",
66
- "thinkingMedium": "wedgwoodBlue",
67
- "thinkingHigh": "deepWedgwood",
68
- "thinkingXhigh": "cobaltBlack",
69
- "bashMode": "goldTrim",
70
- "statusLineBg": "porcelainWhite",
71
- "statusLineSep": "delicateGray",
72
- "statusLineModel": "wedgwoodBlue",
73
- "statusLinePath": "cobaltBlack",
74
- "statusLineGitClean": "#507050",
75
- "statusLineGitDirty": "darkGold",
76
- "statusLineContext": "softBlue",
77
- "statusLineSpend": "goldTrim",
78
- "statusLineStaged": "#507050",
79
- "statusLineDirty": "darkGold",
80
- "statusLineUntracked": "mutedBlue",
81
- "statusLineOutput": "wedgwoodBlue",
82
- "statusLineCost": "goldTrim",
83
- "statusLineSubagents": "deepWedgwood"
84
- },
85
- "export": {
86
- "pageBg": "porcelainWhite",
87
- "cardBg": "#ffffff",
88
- "infoBg": "paleBlue"
89
- }
2
+ "$schema": "https://raw.githubusercontent.com/can1357/oh-my-pi/main/packages/coding-agent/theme-schema.json",
3
+ "name": "porcelain",
4
+ "vars": {
5
+ "porcelainWhite": "#f8f9fc",
6
+ "wedgwoodBlue": "#5070a0",
7
+ "goldTrim": "#b09040",
8
+ "delicateGray": "#d0d4e0",
9
+ "cobaltBlack": "#1a2030",
10
+ "paleBlue": "#e8eef8",
11
+ "deepWedgwood": "#405080",
12
+ "warmGold": "#c0a050",
13
+ "softBlue": "#708cb0",
14
+ "crimsonRed": "#c04040",
15
+ "darkGold": "#907030",
16
+ "mutedBlue": "#909cb0"
17
+ },
18
+ "colors": {
19
+ "accent": "wedgwoodBlue",
20
+ "border": "delicateGray",
21
+ "borderAccent": "wedgwoodBlue",
22
+ "borderMuted": "#e8eaf0",
23
+ "success": "#507050",
24
+ "error": "crimsonRed",
25
+ "warning": "darkGold",
26
+ "muted": "mutedBlue",
27
+ "dim": "#a0a8b8",
28
+ "text": "",
29
+ "thinkingText": "softBlue",
30
+ "selectedBg": "paleBlue",
31
+ "userMessageBg": "wedgwoodBlue",
32
+ "userMessageText": "",
33
+ "customMessageBg": "goldTrim",
34
+ "customMessageText": "",
35
+ "customMessageLabel": "warmGold",
36
+ "toolPendingBg": "paleBlue",
37
+ "toolSuccessBg": "#e8f0e8",
38
+ "toolErrorBg": "#f8e8e8",
39
+ "toolTitle": "",
40
+ "toolOutput": "cobaltBlack",
41
+ "mdHeading": "deepWedgwood",
42
+ "mdLink": "wedgwoodBlue",
43
+ "mdLinkUrl": "goldTrim",
44
+ "mdCode": "darkGold",
45
+ "mdCodeBlock": "cobaltBlack",
46
+ "mdCodeBlockBorder": "delicateGray",
47
+ "mdQuote": "softBlue",
48
+ "mdQuoteBorder": "wedgwoodBlue",
49
+ "mdHr": "delicateGray",
50
+ "mdListBullet": "wedgwoodBlue",
51
+ "toolDiffAdded": "#507050",
52
+ "toolDiffRemoved": "crimsonRed",
53
+ "toolDiffContext": "mutedBlue",
54
+ "syntaxComment": "mutedBlue",
55
+ "syntaxKeyword": "deepWedgwood",
56
+ "syntaxFunction": "wedgwoodBlue",
57
+ "syntaxVariable": "cobaltBlack",
58
+ "syntaxString": "darkGold",
59
+ "syntaxNumber": "goldTrim",
60
+ "syntaxType": "deepWedgwood",
61
+ "syntaxOperator": "softBlue",
62
+ "syntaxPunctuation": "#606870",
63
+ "thinkingOff": "#c0c4d0",
64
+ "thinkingMinimal": "mutedBlue",
65
+ "thinkingLow": "softBlue",
66
+ "thinkingMedium": "wedgwoodBlue",
67
+ "thinkingHigh": "deepWedgwood",
68
+ "thinkingXhigh": "cobaltBlack",
69
+ "bashMode": "goldTrim",
70
+ "statusLineBg": "porcelainWhite",
71
+ "statusLineSep": "delicateGray",
72
+ "statusLineModel": "wedgwoodBlue",
73
+ "statusLinePath": "cobaltBlack",
74
+ "statusLineGitClean": "#507050",
75
+ "statusLineGitDirty": "darkGold",
76
+ "statusLineContext": "softBlue",
77
+ "statusLineSpend": "goldTrim",
78
+ "statusLineStaged": "#507050",
79
+ "statusLineDirty": "darkGold",
80
+ "statusLineUntracked": "mutedBlue",
81
+ "statusLineOutput": "wedgwoodBlue",
82
+ "statusLineCost": "goldTrim",
83
+ "statusLineSubagents": "deepWedgwood",
84
+ "pythonMode": "#f0c040"
85
+ },
86
+ "export": {
87
+ "pageBg": "porcelainWhite",
88
+ "cardBg": "#ffffff",
89
+ "infoBg": "paleBlue"
90
+ }
90
91
  }
@@ -32,7 +32,6 @@
32
32
  "dim": "lavenderGray",
33
33
  "text": "",
34
34
  "thinkingText": "dustyRose",
35
-
36
35
  "selectedBg": "selectedBg",
37
36
  "userMessageBg": "userMsgBg",
38
37
  "userMessageText": "",
@@ -44,7 +43,6 @@
44
43
  "toolErrorBg": "toolErrorBg",
45
44
  "toolTitle": "",
46
45
  "toolOutput": "dustyRose",
47
-
48
46
  "mdHeading": "warmGold",
49
47
  "mdLink": "quartzPurple",
50
48
  "mdLinkUrl": "lavenderGray",
@@ -55,11 +53,9 @@
55
53
  "mdQuoteBorder": "softRose",
56
54
  "mdHr": "softRose",
57
55
  "mdListBullet": "roseGreen",
58
-
59
56
  "toolDiffAdded": "roseGreen",
60
57
  "toolDiffRemoved": "roseRed",
61
58
  "toolDiffContext": "dustyRose",
62
-
63
59
  "syntaxComment": "#7fa090",
64
60
  "syntaxKeyword": "#8070a0",
65
61
  "syntaxFunction": "#c07088",
@@ -69,16 +65,13 @@
69
65
  "syntaxType": "#9e6b7b",
70
66
  "syntaxOperator": "#3a2830",
71
67
  "syntaxPunctuation": "#3a2830",
72
-
73
68
  "thinkingOff": "softRose",
74
69
  "thinkingMinimal": "#a898b0",
75
70
  "thinkingLow": "#8070a0",
76
71
  "thinkingMedium": "#c07088",
77
72
  "thinkingHigh": "#9e6b7b",
78
73
  "thinkingXhigh": "#8b4560",
79
-
80
74
  "bashMode": "roseGreen",
81
-
82
75
  "statusLineBg": "#f5e8ed",
83
76
  "statusLineSep": "#9e6b7b",
84
77
  "statusLineModel": "#8070a0",
@@ -92,7 +85,8 @@
92
85
  "statusLineUntracked": 139,
93
86
  "statusLineOutput": 132,
94
87
  "statusLineCost": 132,
95
- "statusLineSubagents": "rosePink"
88
+ "statusLineSubagents": "rosePink",
89
+ "pythonMode": "#f0c040"
96
90
  },
97
91
  "export": {
98
92
  "pageBg": "#fbf7f9",
@@ -31,7 +31,6 @@
31
31
  "dim": "darkGray",
32
32
  "text": "",
33
33
  "thinkingText": "mediumGray",
34
-
35
34
  "selectedBg": "selectedBg",
36
35
  "userMessageBg": "userMsgBg",
37
36
  "userMessageText": "",
@@ -43,7 +42,6 @@
43
42
  "toolErrorBg": "toolErrorBg",
44
43
  "toolTitle": "",
45
44
  "toolOutput": "mediumGray",
46
-
47
45
  "mdHeading": "amber",
48
46
  "mdLink": "terracotta",
49
47
  "mdLinkUrl": "mediumGray",
@@ -54,11 +52,9 @@
54
52
  "mdQuoteBorder": "erosion",
55
53
  "mdHr": "erosion",
56
54
  "mdListBullet": "sage",
57
-
58
55
  "toolDiffAdded": "sage",
59
56
  "toolDiffRemoved": "rust",
60
57
  "toolDiffContext": "mediumGray",
61
-
62
58
  "syntaxComment": "#688058",
63
59
  "syntaxKeyword": "#b86040",
64
60
  "syntaxFunction": "#c87850",
@@ -68,16 +64,13 @@
68
64
  "syntaxType": "#8a6848",
69
65
  "syntaxOperator": "#302820",
70
66
  "syntaxPunctuation": "#302820",
71
-
72
67
  "thinkingOff": "erosion",
73
68
  "thinkingMinimal": "#a89888",
74
69
  "thinkingLow": "#c87850",
75
70
  "thinkingMedium": "#b86040",
76
71
  "thinkingHigh": "#a05030",
77
72
  "thinkingXhigh": "#903020",
78
-
79
73
  "bashMode": "sage",
80
-
81
74
  "statusLineBg": "#ebe0d0",
82
75
  "statusLineSep": "#9a8878",
83
76
  "statusLineModel": "#a05030",
@@ -91,7 +84,8 @@
91
84
  "statusLineUntracked": 95,
92
85
  "statusLineOutput": 131,
93
86
  "statusLineCost": 131,
94
- "statusLineSubagents": "rust"
87
+ "statusLineSubagents": "rust",
88
+ "pythonMode": "amber"
95
89
  },
96
90
  "export": {
97
91
  "pageBg": "#f5ede3",
@@ -1,89 +1,90 @@
1
1
  {
2
- "$schema": "https://raw.githubusercontent.com/can1357/oh-my-pi/main/packages/coding-agent/theme-schema.json",
3
- "name": "titanium",
4
- "vars": {
5
- "brushedTitanium": "#151820",
6
- "darkTitanium": "#0f1216",
7
- "electricBlue": "#00b4ff",
8
- "deepBlue": "#0082b3",
9
- "titaniumGold": "#d4c090",
10
- "brightAluminum": "#e8ecf4",
11
- "dimAluminum": "#9ca3b0",
12
- "warningAmber": "#ffb347",
13
- "readoutGreen": "#00ff88",
14
- "alertRed": "#ff4757",
15
- "subtleGray": "#2a3038"
16
- },
17
- "colors": {
18
- "accent": "electricBlue",
19
- "border": "subtleGray",
20
- "borderAccent": "electricBlue",
21
- "borderMuted": "#1f252d",
22
- "success": "readoutGreen",
23
- "error": "alertRed",
24
- "warning": "warningAmber",
25
- "muted": "dimAluminum",
26
- "dim": "#6b7280",
27
- "text": "",
28
- "thinkingText": "dimAluminum",
29
- "selectedBg": "deepBlue",
30
- "userMessageBg": "darkTitanium",
31
- "userMessageText": "",
32
- "customMessageBg": "subtleGray",
33
- "customMessageText": "",
34
- "customMessageLabel": "titaniumGold",
35
- "toolPendingBg": "darkTitanium",
36
- "toolSuccessBg": "darkTitanium",
37
- "toolErrorBg": "#1a0f10",
38
- "toolTitle": "",
39
- "toolOutput": "dimAluminum",
40
- "mdHeading": "electricBlue",
41
- "mdLink": "electricBlue",
42
- "mdLinkUrl": "deepBlue",
43
- "mdCode": "readoutGreen",
44
- "mdCodeBlock": "dimAluminum",
45
- "mdCodeBlockBorder": "subtleGray",
46
- "mdQuote": "dimAluminum",
47
- "mdQuoteBorder": "subtleGray",
48
- "mdHr": "subtleGray",
49
- "mdListBullet": "electricBlue",
50
- "toolDiffAdded": "readoutGreen",
51
- "toolDiffRemoved": "alertRed",
52
- "toolDiffContext": "dimAluminum",
53
- "syntaxComment": "#6b7280",
54
- "syntaxKeyword": "electricBlue",
55
- "syntaxFunction": "readoutGreen",
56
- "syntaxVariable": "brightAluminum",
57
- "syntaxString": "titaniumGold",
58
- "syntaxNumber": "warningAmber",
59
- "syntaxType": "electricBlue",
60
- "syntaxOperator": "electricBlue",
61
- "syntaxPunctuation": "dimAluminum",
62
- "thinkingOff": "#4a5058",
63
- "thinkingMinimal": "#5a6068",
64
- "thinkingLow": "#6a7078",
65
- "thinkingMedium": "dimAluminum",
66
- "thinkingHigh": "electricBlue",
67
- "thinkingXhigh": "titaniumGold",
68
- "bashMode": "readoutGreen",
69
- "statusLineBg": "darkTitanium",
70
- "statusLineSep": "subtleGray",
71
- "statusLineModel": "electricBlue",
72
- "statusLinePath": "brightAluminum",
73
- "statusLineGitClean": "readoutGreen",
74
- "statusLineGitDirty": "warningAmber",
75
- "statusLineContext": "dimAluminum",
76
- "statusLineSpend": "titaniumGold",
77
- "statusLineStaged": "readoutGreen",
78
- "statusLineDirty": "warningAmber",
79
- "statusLineUntracked": "dimAluminum",
80
- "statusLineOutput": "deepBlue",
81
- "statusLineCost": "titaniumGold",
82
- "statusLineSubagents": "electricBlue"
83
- },
84
- "export": {
85
- "pageBg": "brushedTitanium",
86
- "cardBg": "darkTitanium",
87
- "infoBg": "subtleGray"
88
- }
2
+ "$schema": "https://raw.githubusercontent.com/can1357/oh-my-pi/main/packages/coding-agent/theme-schema.json",
3
+ "name": "titanium",
4
+ "vars": {
5
+ "brushedTitanium": "#151820",
6
+ "darkTitanium": "#0f1216",
7
+ "electricBlue": "#00b4ff",
8
+ "deepBlue": "#0082b3",
9
+ "titaniumGold": "#d4c090",
10
+ "brightAluminum": "#e8ecf4",
11
+ "dimAluminum": "#9ca3b0",
12
+ "warningAmber": "#ffb347",
13
+ "readoutGreen": "#00ff88",
14
+ "alertRed": "#ff4757",
15
+ "subtleGray": "#2a3038"
16
+ },
17
+ "colors": {
18
+ "accent": "electricBlue",
19
+ "border": "subtleGray",
20
+ "borderAccent": "electricBlue",
21
+ "borderMuted": "#1f252d",
22
+ "success": "readoutGreen",
23
+ "error": "alertRed",
24
+ "warning": "warningAmber",
25
+ "muted": "dimAluminum",
26
+ "dim": "#6b7280",
27
+ "text": "",
28
+ "thinkingText": "dimAluminum",
29
+ "selectedBg": "deepBlue",
30
+ "userMessageBg": "darkTitanium",
31
+ "userMessageText": "",
32
+ "customMessageBg": "subtleGray",
33
+ "customMessageText": "",
34
+ "customMessageLabel": "titaniumGold",
35
+ "toolPendingBg": "darkTitanium",
36
+ "toolSuccessBg": "darkTitanium",
37
+ "toolErrorBg": "#1a0f10",
38
+ "toolTitle": "",
39
+ "toolOutput": "dimAluminum",
40
+ "mdHeading": "electricBlue",
41
+ "mdLink": "electricBlue",
42
+ "mdLinkUrl": "deepBlue",
43
+ "mdCode": "readoutGreen",
44
+ "mdCodeBlock": "dimAluminum",
45
+ "mdCodeBlockBorder": "subtleGray",
46
+ "mdQuote": "dimAluminum",
47
+ "mdQuoteBorder": "subtleGray",
48
+ "mdHr": "subtleGray",
49
+ "mdListBullet": "electricBlue",
50
+ "toolDiffAdded": "readoutGreen",
51
+ "toolDiffRemoved": "alertRed",
52
+ "toolDiffContext": "dimAluminum",
53
+ "syntaxComment": "#6b7280",
54
+ "syntaxKeyword": "electricBlue",
55
+ "syntaxFunction": "readoutGreen",
56
+ "syntaxVariable": "brightAluminum",
57
+ "syntaxString": "titaniumGold",
58
+ "syntaxNumber": "warningAmber",
59
+ "syntaxType": "electricBlue",
60
+ "syntaxOperator": "electricBlue",
61
+ "syntaxPunctuation": "dimAluminum",
62
+ "thinkingOff": "#4a5058",
63
+ "thinkingMinimal": "#5a6068",
64
+ "thinkingLow": "#6a7078",
65
+ "thinkingMedium": "dimAluminum",
66
+ "thinkingHigh": "electricBlue",
67
+ "thinkingXhigh": "titaniumGold",
68
+ "bashMode": "readoutGreen",
69
+ "statusLineBg": "darkTitanium",
70
+ "statusLineSep": "subtleGray",
71
+ "statusLineModel": "electricBlue",
72
+ "statusLinePath": "brightAluminum",
73
+ "statusLineGitClean": "readoutGreen",
74
+ "statusLineGitDirty": "warningAmber",
75
+ "statusLineContext": "dimAluminum",
76
+ "statusLineSpend": "titaniumGold",
77
+ "statusLineStaged": "readoutGreen",
78
+ "statusLineDirty": "warningAmber",
79
+ "statusLineUntracked": "dimAluminum",
80
+ "statusLineOutput": "deepBlue",
81
+ "statusLineCost": "titaniumGold",
82
+ "statusLineSubagents": "electricBlue",
83
+ "pythonMode": "#f0c040"
84
+ },
85
+ "export": {
86
+ "pageBg": "brushedTitanium",
87
+ "cardBg": "darkTitanium",
88
+ "infoBg": "subtleGray"
89
+ }
89
90
  }
@@ -29,7 +29,6 @@
29
29
  "dim": "dimGray",
30
30
  "text": "",
31
31
  "thinkingText": "mediumGray",
32
-
33
32
  "selectedBg": "selectedBg",
34
33
  "userMessageBg": "userMsgBg",
35
34
  "userMessageText": "",
@@ -41,7 +40,6 @@
41
40
  "toolErrorBg": "toolErrorBg",
42
41
  "toolTitle": "",
43
42
  "toolOutput": "mediumGray",
44
-
45
43
  "mdHeading": "yellow",
46
44
  "mdLink": "blue",
47
45
  "mdLinkUrl": "dimGray",
@@ -52,11 +50,9 @@
52
50
  "mdQuoteBorder": "mediumGray",
53
51
  "mdHr": "mediumGray",
54
52
  "mdListBullet": "green",
55
-
56
53
  "toolDiffAdded": "green",
57
54
  "toolDiffRemoved": "red",
58
55
  "toolDiffContext": "mediumGray",
59
-
60
56
  "syntaxComment": "#008000",
61
57
  "syntaxKeyword": "#0000FF",
62
58
  "syntaxFunction": "#795E26",
@@ -66,16 +62,13 @@
66
62
  "syntaxType": "#267F99",
67
63
  "syntaxOperator": "#000000",
68
64
  "syntaxPunctuation": "#000000",
69
-
70
65
  "thinkingOff": "lightGray",
71
66
  "thinkingMinimal": "#767676",
72
67
  "thinkingLow": "blue",
73
68
  "thinkingMedium": "teal",
74
69
  "thinkingHigh": "#875f87",
75
70
  "thinkingXhigh": "#8b008b",
76
-
77
71
  "bashMode": "green",
78
-
79
72
  "statusLineBg": "#e0e0e0",
80
73
  "statusLineSep": "#808080",
81
74
  "statusLineModel": "#875f87",
@@ -89,7 +82,8 @@
89
82
  "statusLineUntracked": 31,
90
83
  "statusLineOutput": 133,
91
84
  "statusLineCost": 133,
92
- "statusLineSubagents": "teal"
85
+ "statusLineSubagents": "teal",
86
+ "pythonMode": "yellow"
93
87
  },
94
88
  "export": {
95
89
  "pageBg": "#f8f8f8",
@@ -86,6 +86,7 @@
86
86
  "thinkingHigh",
87
87
  "thinkingXhigh",
88
88
  "bashMode",
89
+ "pythonMode",
89
90
  "statusLineBg",
90
91
  "statusLineSep",
91
92
  "statusLineModel",
@@ -306,6 +307,10 @@
306
307
  "$ref": "#/$defs/colorValue",
307
308
  "description": "Editor border color in bash mode"
308
309
  },
310
+ "pythonMode": {
311
+ "$ref": "#/$defs/colorValue",
312
+ "description": "Editor border color in python mode"
313
+ },
309
314
  "statusLineBg": {
310
315
  "$ref": "#/$defs/colorValue",
311
316
  "description": "Status line background"
@@ -897,6 +897,8 @@ const ThemeJsonSchema = Type.Object({
897
897
  thinkingXhigh: ColorValueSchema,
898
898
  // Bash Mode (1 color)
899
899
  bashMode: ColorValueSchema,
900
+ // Python Mode (1 color)
901
+ pythonMode: ColorValueSchema,
900
902
  // Footer Status Line
901
903
  statusLineBg: ColorValueSchema,
902
904
  statusLineSep: ColorValueSchema,
@@ -974,6 +976,7 @@ export type ThemeColor =
974
976
  | "thinkingHigh"
975
977
  | "thinkingXhigh"
976
978
  | "bashMode"
979
+ | "pythonMode"
977
980
  | "statusLineSep"
978
981
  | "statusLineModel"
979
982
  | "statusLinePath"
@@ -1374,6 +1377,10 @@ export class Theme {
1374
1377
  return (str: string) => this.fg("bashMode", str);
1375
1378
  }
1376
1379
 
1380
+ getPythonModeBorderColor(): (str: string) => string {
1381
+ return (str: string) => this.fg("pythonMode", str);
1382
+ }
1383
+
1377
1384
  // ============================================================================
1378
1385
  // Symbol Methods
1379
1386
  // ============================================================================
@@ -9,13 +9,13 @@ import type { KeybindingsManager } from "../../core/keybindings";
9
9
  import type { MCPManager } from "../../core/mcp/index";
10
10
  import type { SessionContext, SessionManager } from "../../core/session-manager";
11
11
  import type { SettingsManager } from "../../core/settings-manager";
12
- import type { VoiceSupervisor } from "../../core/voice-supervisor";
13
12
  import type { AssistantMessageComponent } from "./components/assistant-message";
14
13
  import type { BashExecutionComponent } from "./components/bash-execution";
15
14
  import type { CustomEditor } from "./components/custom-editor";
16
15
  import type { HookEditorComponent } from "./components/hook-editor";
17
16
  import type { HookInputComponent } from "./components/hook-input";
18
17
  import type { HookSelectorComponent } from "./components/hook-selector";
18
+ import type { PythonExecutionComponent } from "./components/python-execution";
19
19
  import type { StatusLineComponent } from "./components/status-line";
20
20
  import type { ToolExecutionHandle } from "./components/tool-execution";
21
21
  import type { Theme } from "./theme/theme";
@@ -49,7 +49,6 @@ export interface InteractiveModeContext {
49
49
  settingsManager: SettingsManager;
50
50
  keybindings: KeybindingsManager;
51
51
  agent: AgentSession["agent"];
52
- voiceSupervisor: VoiceSupervisor;
53
52
  historyStorage?: HistoryStorage;
54
53
  mcpManager?: MCPManager;
55
54
  lspServers?: Array<{ name: string; status: "ready" | "error"; fileTypes: string[] }>;
@@ -66,6 +65,9 @@ export interface InteractiveModeContext {
66
65
  pendingTools: Map<string, ToolExecutionHandle>;
67
66
  pendingBashComponents: BashExecutionComponent[];
68
67
  bashComponent: BashExecutionComponent | undefined;
68
+ pendingPythonComponents: PythonExecutionComponent[];
69
+ pythonComponent: PythonExecutionComponent | undefined;
70
+ isPythonMode: boolean;
69
71
  streamingComponent: AssistantMessageComponent | undefined;
70
72
  streamingMessage: AssistantMessage | undefined;
71
73
  loadingAnimation: Loader | undefined;
@@ -77,12 +79,7 @@ export interface InteractiveModeContext {
77
79
  onInputCallback?: (input: { text: string; images?: ImageContent[] }) => void;
78
80
  lastSigintTime: number;
79
81
  lastEscapeTime: number;
80
- lastVoiceInterruptAt: number;
81
- voiceAutoModeEnabled: boolean;
82
82
  shutdownRequested: boolean;
83
- voiceProgressTimer: ReturnType<typeof setTimeout> | undefined;
84
- voiceProgressSpoken: boolean;
85
- voiceProgressLastLength: number;
86
83
  hookSelector: HookSelectorComponent | undefined;
87
84
  hookInput: HookInputComponent | undefined;
88
85
  hookEditor: HookEditorComponent | undefined;
@@ -144,6 +141,7 @@ export interface InteractiveModeContext {
144
141
  handleDebugCommand(): Promise<void>;
145
142
  handleArminSaysHi(): void;
146
143
  handleBashCommand(command: string, excludeFromContext?: boolean): Promise<void>;
144
+ handlePythonCommand(code: string, excludeFromContext?: boolean): Promise<void>;
147
145
  handleCompactCommand(customInstructions?: string): Promise<void>;
148
146
  executeCompaction(customInstructionsOrOptions?: string | CompactOptions, isAuto?: boolean): Promise<void>;
149
147
  openInBrowser(urlOrPath: string): void;
@@ -174,14 +172,6 @@ export interface InteractiveModeContext {
174
172
  openExternalEditor(): void;
175
173
  registerExtensionShortcuts(): void;
176
174
 
177
- // Voice handling
178
- setVoiceStatus(text: string | undefined): void;
179
- handleVoiceInterrupt(reason?: string): Promise<void>;
180
- startVoiceProgressTimer(): void;
181
- stopVoiceProgressTimer(): void;
182
- maybeSpeakProgress(): Promise<void>;
183
- submitVoiceText(text: string): Promise<void>;
184
-
185
175
  // Hook UI methods
186
176
  initHooksAndCustomTools(): Promise<void>;
187
177
  emitCustomToolSessionEvent(