@noorm/marie-cli 0.1.18 → 0.1.25

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 (251) hide show
  1. package/README.md +7 -15
  2. package/SENTINEL.md +4 -7
  3. package/dist/cli-new/components/App.js +16 -63
  4. package/dist/cli-new/components/App.js.map +1 -1
  5. package/dist/cli-new/components/ApprovalDialog.js +2 -1
  6. package/dist/cli-new/components/ApprovalDialog.js.map +1 -1
  7. package/dist/cli-new/components/Banner.js +4 -3
  8. package/dist/cli-new/components/Banner.js.map +1 -1
  9. package/dist/cli-new/components/ChatArea.js +6 -7
  10. package/dist/cli-new/components/ChatArea.js.map +1 -1
  11. package/dist/cli-new/components/Header.js +13 -7
  12. package/dist/cli-new/components/Header.js.map +1 -1
  13. package/dist/cli-new/components/InputArea.js +73 -12
  14. package/dist/cli-new/components/InputArea.js.map +1 -1
  15. package/dist/cli-new/components/MessageBubble.js +26 -18
  16. package/dist/cli-new/components/MessageBubble.js.map +1 -1
  17. package/dist/cli-new/components/SessionSwitcher.js +4 -7
  18. package/dist/cli-new/components/SessionSwitcher.js.map +1 -1
  19. package/dist/cli-new/components/SetupWizard.js +80 -257
  20. package/dist/cli-new/components/SetupWizard.js.map +1 -1
  21. package/dist/cli-new/components/ToolCallDisplay.js +20 -5
  22. package/dist/cli-new/components/ToolCallDisplay.js.map +1 -1
  23. package/dist/cli-new/components/WizardSteps.js +22 -0
  24. package/dist/cli-new/components/WizardSteps.js.map +1 -0
  25. package/dist/cli-new/constants/SetupConstants.js +42 -0
  26. package/dist/cli-new/constants/SetupConstants.js.map +1 -0
  27. package/dist/cli-new/hooks/useGit.js +19 -62
  28. package/dist/cli-new/hooks/useGit.js.map +1 -1
  29. package/dist/cli-new/hooks/useMarie.js +26 -18
  30. package/dist/cli-new/hooks/useMarie.js.map +1 -1
  31. package/dist/cli-new/hooks/useSessions.js +1 -1
  32. package/dist/cli-new/hooks/useSessions.js.map +1 -1
  33. package/dist/cli-new/hooks/useSetupWizard.js +88 -0
  34. package/dist/cli-new/hooks/useSetupWizard.js.map +1 -0
  35. package/dist/cli-new/hooks/useUpdateCheck.js +4 -3
  36. package/dist/cli-new/hooks/useUpdateCheck.js.map +1 -1
  37. package/dist/cli-new/index.js +2 -4
  38. package/dist/cli-new/index.js.map +1 -1
  39. package/dist/cli-new/services/CommandService.js +104 -0
  40. package/dist/cli-new/services/CommandService.js.map +1 -0
  41. package/dist/cli-new/services/GitService.js +91 -0
  42. package/dist/cli-new/services/GitService.js.map +1 -0
  43. package/dist/cli-new/services/MarieService.js +77 -0
  44. package/dist/cli-new/services/MarieService.js.map +1 -0
  45. package/dist/cli-new/services/auth-server.js +128 -0
  46. package/dist/cli-new/services/auth-server.js.map +1 -0
  47. package/dist/cli-new/utils/version.js +24 -0
  48. package/dist/cli-new/utils/version.js.map +1 -0
  49. package/dist/monolith/adapters/CliMarieAdapter.js +12 -11
  50. package/dist/monolith/adapters/CliMarieAdapter.js.map +1 -1
  51. package/dist/monolith/cli/CliFileSystemPort.js +17 -3
  52. package/dist/monolith/cli/CliFileSystemPort.js.map +1 -1
  53. package/dist/monolith/cli/MarieToolDefinitionsCLI.js +39 -31
  54. package/dist/monolith/cli/MarieToolDefinitionsCLI.js.map +1 -1
  55. package/dist/monolith/cli/index.js +5 -20
  56. package/dist/monolith/cli/index.js.map +1 -1
  57. package/dist/monolith/cli/services/JoyAutomationServiceCLI.js +15 -62
  58. package/dist/monolith/cli/services/JoyAutomationServiceCLI.js.map +1 -1
  59. package/dist/monolith/cli/storage.js +142 -72
  60. package/dist/monolith/cli/storage.js.map +1 -1
  61. package/dist/monolith/domain/joy/RitualService.js +44 -46
  62. package/dist/monolith/domain/joy/RitualService.js.map +1 -1
  63. package/dist/monolith/domain/marie/MarieCortex.js +148 -0
  64. package/dist/monolith/domain/marie/MarieCortex.js.map +1 -0
  65. package/dist/monolith/domain/marie/PersonalityRenderer.js +97 -0
  66. package/dist/monolith/domain/marie/PersonalityRenderer.js.map +1 -0
  67. package/dist/monolith/infrastructure/Configuration.js +68 -0
  68. package/dist/monolith/infrastructure/Configuration.js.map +1 -0
  69. package/dist/monolith/infrastructure/CoreInfrastructure.js +204 -0
  70. package/dist/monolith/infrastructure/CoreInfrastructure.js.map +1 -0
  71. package/dist/monolith/infrastructure/ai/agents/MarieAscendant.js +3 -3
  72. package/dist/monolith/infrastructure/ai/agents/MarieAscendant.js.map +1 -1
  73. package/dist/monolith/infrastructure/ai/context/ContextArchiveService.js +6 -27
  74. package/dist/monolith/infrastructure/ai/context/ContextArchiveService.js.map +1 -1
  75. package/dist/monolith/infrastructure/ai/context/ContextManager.js +142 -131
  76. package/dist/monolith/infrastructure/ai/context/ContextManager.js.map +1 -1
  77. package/dist/monolith/infrastructure/ai/core/MarieEngine.js +115 -1077
  78. package/dist/monolith/infrastructure/ai/core/MarieEngine.js.map +1 -1
  79. package/dist/monolith/infrastructure/ai/core/MarieEventDispatcher.js +1 -37
  80. package/dist/monolith/infrastructure/ai/core/MarieEventDispatcher.js.map +1 -1
  81. package/dist/monolith/infrastructure/ai/core/MarieLockManager.js +6 -1
  82. package/dist/monolith/infrastructure/ai/core/MarieLockManager.js.map +1 -1
  83. package/dist/monolith/infrastructure/ai/core/MarieProgressTracker.js +172 -221
  84. package/dist/monolith/infrastructure/ai/core/MarieProgressTracker.js.map +1 -1
  85. package/dist/monolith/infrastructure/ai/core/MarieSanitizer.js +292 -141
  86. package/dist/monolith/infrastructure/ai/core/MarieSanitizer.js.map +1 -1
  87. package/dist/monolith/infrastructure/ai/core/MarieToolProcessor.js +331 -614
  88. package/dist/monolith/infrastructure/ai/core/MarieToolProcessor.js.map +1 -1
  89. package/dist/monolith/infrastructure/ai/core/MarieVitality.js +238 -0
  90. package/dist/monolith/infrastructure/ai/core/MarieVitality.js.map +1 -0
  91. package/dist/monolith/infrastructure/ai/core/SessionLogService.js +9 -2
  92. package/dist/monolith/infrastructure/ai/core/SessionLogService.js.map +1 -1
  93. package/dist/monolith/infrastructure/ai/providers/AIProvider.js +402 -1
  94. package/dist/monolith/infrastructure/ai/providers/AIProvider.js.map +1 -1
  95. package/dist/monolith/infrastructure/ai/providers/DreamBeesProvider.js +114 -0
  96. package/dist/monolith/infrastructure/ai/providers/DreamBeesProvider.js.map +1 -0
  97. package/dist/monolith/infrastructure/ai/providers/OpenRouterProvider.js +426 -392
  98. package/dist/monolith/infrastructure/ai/providers/OpenRouterProvider.js.map +1 -1
  99. package/dist/monolith/infrastructure/ai/providers/OpenRouterStreamParser.js +235 -241
  100. package/dist/monolith/infrastructure/ai/providers/OpenRouterStreamParser.js.map +1 -1
  101. package/dist/monolith/infrastructure/ai/workerAi.js +185 -0
  102. package/dist/monolith/infrastructure/ai/workerAi.js.map +1 -0
  103. package/dist/monolith/infrastructure/config/ConfigService.js +216 -503
  104. package/dist/monolith/infrastructure/config/ConfigService.js.map +1 -1
  105. package/dist/monolith/infrastructure/joy/CognitiveRituals.js +4 -165
  106. package/dist/monolith/infrastructure/joy/CognitiveRituals.js.map +1 -1
  107. package/dist/monolith/infrastructure/joy/JoyTools.js +14 -47
  108. package/dist/monolith/infrastructure/joy/JoyTools.js.map +1 -1
  109. package/dist/monolith/infrastructure/persistence/MarieMindAutonomics.js +4 -0
  110. package/dist/monolith/infrastructure/persistence/MarieMindAutonomics.js.map +1 -0
  111. package/dist/monolith/infrastructure/persistence/MarieMindEngine.js +11 -0
  112. package/dist/monolith/infrastructure/persistence/MarieMindEngine.js.map +1 -0
  113. package/dist/monolith/infrastructure/persistence/NoormmeAutonomics.js +123 -106
  114. package/dist/monolith/infrastructure/persistence/NoormmeAutonomics.js.map +1 -1
  115. package/dist/monolith/infrastructure/persistence/NoormmeEngine.js +508 -63
  116. package/dist/monolith/infrastructure/persistence/NoormmeEngine.js.map +1 -1
  117. package/dist/monolith/infrastructure/persistence/NoormmeSchema.js +68 -39
  118. package/dist/monolith/infrastructure/persistence/NoormmeSchema.js.map +1 -1
  119. package/dist/monolith/infrastructure/persistence/NoormmeSeeder.js +80 -67
  120. package/dist/monolith/infrastructure/persistence/NoormmeSeeder.js.map +1 -1
  121. package/dist/monolith/infrastructure/persistence/NoormmeTools.js +122 -75
  122. package/dist/monolith/infrastructure/persistence/NoormmeTools.js.map +1 -1
  123. package/dist/monolith/infrastructure/services/MarieMemoryStore.js +133 -134
  124. package/dist/monolith/infrastructure/services/MarieMemoryStore.js.map +1 -1
  125. package/dist/monolith/infrastructure/tools/MarieToolDefinitions.js +6 -30
  126. package/dist/monolith/infrastructure/tools/MarieToolDefinitions.js.map +1 -1
  127. package/dist/monolith/infrastructure/tools/PureStreamParser.js +68 -80
  128. package/dist/monolith/infrastructure/tools/PureStreamParser.js.map +1 -1
  129. package/dist/monolith/infrastructure/tools/SharedToolDefinitions.js +12 -11
  130. package/dist/monolith/infrastructure/tools/SharedToolDefinitions.js.map +1 -1
  131. package/dist/monolith/infrastructure/tools/SovereignTools.js +326 -0
  132. package/dist/monolith/infrastructure/tools/SovereignTools.js.map +1 -0
  133. package/dist/monolith/infrastructure/tools/ToolRegistry.js +45 -26
  134. package/dist/monolith/infrastructure/tools/ToolRegistry.js.map +1 -1
  135. package/dist/monolith/infrastructure/tools/definitions/AnalysisTools.js +39 -153
  136. package/dist/monolith/infrastructure/tools/definitions/AnalysisTools.js.map +1 -1
  137. package/dist/monolith/infrastructure/tools/definitions/AutomationTools.js +31 -46
  138. package/dist/monolith/infrastructure/tools/definitions/AutomationTools.js.map +1 -1
  139. package/dist/monolith/infrastructure/tools/definitions/ContextTools.js +41 -13
  140. package/dist/monolith/infrastructure/tools/definitions/ContextTools.js.map +1 -1
  141. package/dist/monolith/infrastructure/tools/definitions/CoreTools.js +10 -14
  142. package/dist/monolith/infrastructure/tools/definitions/CoreTools.js.map +1 -1
  143. package/dist/monolith/infrastructure/tools/definitions/DiagnosticTools.js +39 -70
  144. package/dist/monolith/infrastructure/tools/definitions/DiagnosticTools.js.map +1 -1
  145. package/dist/monolith/infrastructure/tools/definitions/NavigationTools.js +30 -181
  146. package/dist/monolith/infrastructure/tools/definitions/NavigationTools.js.map +1 -1
  147. package/dist/monolith/infrastructure/tools/definitions/PlanningTools.js +12 -9
  148. package/dist/monolith/infrastructure/tools/definitions/PlanningTools.js.map +1 -1
  149. package/dist/monolith/plumbing/Plumbing.js +238 -0
  150. package/dist/monolith/plumbing/Plumbing.js.map +1 -0
  151. package/dist/monolith/plumbing/PlumbingAnalysis.js +109 -0
  152. package/dist/monolith/plumbing/PlumbingAnalysis.js.map +1 -0
  153. package/dist/monolith/plumbing/PlumbingSystem.js +169 -0
  154. package/dist/monolith/plumbing/PlumbingSystem.js.map +1 -0
  155. package/dist/monolith/plumbing/analysis/ComplexityService.js +30 -34
  156. package/dist/monolith/plumbing/analysis/ComplexityService.js.map +1 -1
  157. package/dist/monolith/plumbing/analysis/DependencyService.js +55 -44
  158. package/dist/monolith/plumbing/analysis/DependencyService.js.map +1 -1
  159. package/dist/monolith/plumbing/analysis/DiscoveryService.js +40 -42
  160. package/dist/monolith/plumbing/analysis/DiscoveryService.js.map +1 -1
  161. package/dist/monolith/plumbing/analysis/JoyMapService.js +52 -56
  162. package/dist/monolith/plumbing/analysis/JoyMapService.js.map +1 -1
  163. package/dist/monolith/plumbing/analysis/LintService.js +118 -118
  164. package/dist/monolith/plumbing/analysis/LintService.js.map +1 -1
  165. package/dist/monolith/plumbing/analysis/MarieSentinelService.js +278 -268
  166. package/dist/monolith/plumbing/analysis/MarieSentinelService.js.map +1 -1
  167. package/dist/monolith/plumbing/analysis/QualityGuardrailService.js +116 -114
  168. package/dist/monolith/plumbing/analysis/QualityGuardrailService.js.map +1 -1
  169. package/dist/monolith/plumbing/analysis/SurgicalMender.js +57 -59
  170. package/dist/monolith/plumbing/analysis/SurgicalMender.js.map +1 -1
  171. package/dist/monolith/plumbing/analysis/TestService.js +89 -89
  172. package/dist/monolith/plumbing/analysis/TestService.js.map +1 -1
  173. package/dist/monolith/plumbing/filesystem/FileService.js +123 -195
  174. package/dist/monolith/plumbing/filesystem/FileService.js.map +1 -1
  175. package/dist/monolith/plumbing/filesystem/PathResolver.js +7 -8
  176. package/dist/monolith/plumbing/filesystem/PathResolver.js.map +1 -1
  177. package/dist/monolith/plumbing/git/GitService.js +4 -4
  178. package/dist/monolith/plumbing/git/GitService.js.map +1 -1
  179. package/dist/monolith/plumbing/lsp/SymbolService.js +5 -34
  180. package/dist/monolith/plumbing/lsp/SymbolService.js.map +1 -1
  181. package/dist/monolith/plumbing/terminal/ProcessRegistry.js +20 -22
  182. package/dist/monolith/plumbing/terminal/ProcessRegistry.js.map +1 -1
  183. package/dist/monolith/plumbing/terminal/TerminalService.js +127 -141
  184. package/dist/monolith/plumbing/terminal/TerminalService.js.map +1 -1
  185. package/dist/monolith/plumbing/utils/EnvironmentUtils.js +3 -23
  186. package/dist/monolith/plumbing/utils/EnvironmentUtils.js.map +1 -1
  187. package/dist/monolith/plumbing/utils/JsonUtils.js +252 -311
  188. package/dist/monolith/plumbing/utils/JsonUtils.js.map +1 -1
  189. package/dist/monolith/plumbing/utils/PlumbingCore.js +549 -0
  190. package/dist/monolith/plumbing/utils/PlumbingCore.js.map +1 -0
  191. package/dist/monolith/plumbing/utils/PrefixTree.js +61 -114
  192. package/dist/monolith/plumbing/utils/PrefixTree.js.map +1 -1
  193. package/dist/monolith/plumbing/utils/StreamTagDetector.js +89 -127
  194. package/dist/monolith/plumbing/utils/StreamTagDetector.js.map +1 -1
  195. package/dist/monolith/plumbing/utils/StringUtils.js +87 -89
  196. package/dist/monolith/plumbing/utils/StringUtils.js.map +1 -1
  197. package/dist/monolith/runtime/MarieRuntime.js +76 -499
  198. package/dist/monolith/runtime/MarieRuntime.js.map +1 -1
  199. package/dist/monolith/runtime/RuntimeAdapterBase.js +1 -1
  200. package/dist/monolith/runtime/RuntimeAdapterBase.js.map +1 -1
  201. package/dist/monolith/runtime/providerFactory.js +1 -7
  202. package/dist/monolith/runtime/providerFactory.js.map +1 -1
  203. package/dist/monolith/services/HealthService.js +29 -32
  204. package/dist/monolith/services/HealthService.js.map +1 -1
  205. package/dist/monolith/services/JoyAutomationService.js +58 -95
  206. package/dist/monolith/services/JoyAutomationService.js.map +1 -1
  207. package/dist/monolith/services/MarieAutomationService.js +59 -0
  208. package/dist/monolith/services/MarieAutomationService.js.map +1 -0
  209. package/dist/monolith/services/MarieGhostService.js +46 -173
  210. package/dist/monolith/services/MarieGhostService.js.map +1 -1
  211. package/dist/monolith/services/MarieServices.js +102 -0
  212. package/dist/monolith/services/MarieServices.js.map +1 -0
  213. package/dist/monolith/services/MarieTypes.js +2 -0
  214. package/dist/monolith/services/MarieTypes.js.map +1 -0
  215. package/dist/monolith/services/UpdateService.js +47 -49
  216. package/dist/monolith/services/UpdateService.js.map +1 -1
  217. package/dist/prompts.js +11 -5
  218. package/dist/prompts.js.map +1 -1
  219. package/dist/test_prefix_tree.js +9 -9
  220. package/dist/test_prefix_tree.js.map +1 -1
  221. package/package.json +18 -89
  222. package/run_test.js +5 -0
  223. package/.marie_visual_verify_1771225696548/progress_bar_check.txt +0 -1
  224. package/dist/extension.cjs +0 -1155
  225. package/dist/extension.js +0 -474
  226. package/dist/extension.js.map +0 -1
  227. package/dist/monolith/adapters/VscodeMarieAdapter.js +0 -81
  228. package/dist/monolith/adapters/VscodeMarieAdapter.js.map +0 -1
  229. package/dist/monolith/infrastructure/ai/core/GhostPort.js +0 -2
  230. package/dist/monolith/infrastructure/ai/core/GhostPort.js.map +0 -1
  231. package/dist/monolith/infrastructure/ai/core/VscodeFileSystemPort.js +0 -33
  232. package/dist/monolith/infrastructure/ai/core/VscodeFileSystemPort.js.map +0 -1
  233. package/dist/monolith/infrastructure/ai/providers/AnthropicProvider.js +0 -154
  234. package/dist/monolith/infrastructure/ai/providers/AnthropicProvider.js.map +0 -1
  235. package/dist/monolith/infrastructure/ai/providers/CerebrasProvider.js +0 -214
  236. package/dist/monolith/infrastructure/ai/providers/CerebrasProvider.js.map +0 -1
  237. package/dist/monolith/plumbing/ui/DecorationService.js +0 -54
  238. package/dist/monolith/plumbing/ui/DecorationService.js.map +0 -1
  239. package/dist/monolith/services/JoyLogService.js +0 -48
  240. package/dist/monolith/services/JoyLogService.js.map +0 -1
  241. package/dist/monolith/services/JoyService.js +0 -209
  242. package/dist/monolith/services/JoyService.js.map +0 -1
  243. package/dist/monolith/services/MarieSCMProvider.js +0 -41
  244. package/dist/monolith/services/MarieSCMProvider.js.map +0 -1
  245. package/dist/webview-ui/main.css +0 -1
  246. package/dist/webview-ui/main.js +0 -108
  247. package/lint_output.txt +0 -705
  248. package/lint_output_v2.txt +0 -711
  249. package/test-mind-p6.sqlite +0 -0
  250. package/test-mind-p6.sqlite-shm +0 -0
  251. package/test-mind-p6.sqlite-wal +0 -0
@@ -1,154 +0,0 @@
1
- import { Anthropic } from "@anthropic-ai/sdk";
2
- import { ConfigService } from "../../config/ConfigService.js";
3
- import { JsonUtils } from "../../../plumbing/utils/JsonUtils.js";
4
- export class AnthropicProvider {
5
- client;
6
- constructor(apiKey) {
7
- this.client = new Anthropic({ apiKey });
8
- }
9
- async createMessage(params) {
10
- const response = await this.client.messages.create({
11
- model: params.model,
12
- max_tokens: params.max_tokens || 1024,
13
- system: params.system,
14
- messages: params.messages,
15
- tools: params.tools,
16
- });
17
- if (!response.content || response.content.length === 0) {
18
- throw new Error("Anthropic API returned an empty content array.");
19
- }
20
- const toolUses = response.content
21
- .filter((c) => c.type === "tool_use")
22
- .map((c) => ({
23
- id: c.id,
24
- name: c.name,
25
- input: c.input,
26
- }));
27
- return {
28
- role: "assistant",
29
- content: response.content,
30
- tool_uses: toolUses.length > 0 ? toolUses : undefined,
31
- };
32
- }
33
- async createMessageStream(params, onUpdate, signal) {
34
- const startTime = Date.now();
35
- onUpdate({ type: "run_started", timestamp: startTime });
36
- onUpdate({
37
- type: "stage_change",
38
- stage: "thinking",
39
- label: "Processing request...",
40
- });
41
- const stream = await this.client.messages.create({
42
- model: params.model,
43
- max_tokens: params.max_tokens || 1024,
44
- system: params.system,
45
- messages: params.messages,
46
- tools: params.tools,
47
- stream: true,
48
- }, { signal });
49
- // Use array buffers to avoid string concatenation overhead
50
- const contentBuffer = [];
51
- const toolCalls = {};
52
- let hasStartedContent = false;
53
- for await (const chunk of stream) {
54
- if (chunk.type === "content_block_delta" &&
55
- chunk.delta.type === "text_delta") {
56
- if (!hasStartedContent) {
57
- hasStartedContent = true;
58
- onUpdate({
59
- type: "stage_change",
60
- stage: "responding",
61
- label: "Generating response...",
62
- });
63
- }
64
- const text = chunk.delta.text;
65
- contentBuffer.push(text);
66
- onUpdate({ type: "content_delta", text });
67
- }
68
- else if (chunk.type === "content_block_start" &&
69
- chunk.content_block.type === "tool_use") {
70
- onUpdate({
71
- type: "stage_change",
72
- stage: "calling_tool",
73
- label: "Using tool...",
74
- });
75
- toolCalls[chunk.index] = {
76
- id: chunk.content_block.id,
77
- name: chunk.content_block.name,
78
- inputParts: [],
79
- };
80
- onUpdate({
81
- type: "tool_call_delta",
82
- index: chunk.index,
83
- id: chunk.content_block.id,
84
- name: chunk.content_block.name,
85
- });
86
- }
87
- else if (chunk.type === "content_block_delta" &&
88
- chunk.delta.type === "input_json_delta") {
89
- const toolCall = toolCalls[chunk.index];
90
- if (toolCall) {
91
- toolCall.inputParts.push(chunk.delta.partial_json);
92
- onUpdate({
93
- type: "tool_call_delta",
94
- index: chunk.index,
95
- argumentsDelta: chunk.delta.partial_json,
96
- });
97
- }
98
- }
99
- else if (chunk.type === "message_delta" && chunk.usage) {
100
- onUpdate({
101
- type: "usage",
102
- usage: {
103
- inputTokens: chunk.usage.input_tokens ?? undefined,
104
- outputTokens: chunk.usage.output_tokens ?? undefined,
105
- totalTokens: (chunk.usage.input_tokens ?? 0) +
106
- (chunk.usage.output_tokens ?? 0),
107
- },
108
- });
109
- }
110
- }
111
- const endTime = Date.now();
112
- onUpdate({
113
- type: "run_completed",
114
- timestamp: endTime,
115
- durationMs: endTime - startTime,
116
- });
117
- // Join array buffers into final strings
118
- const fullContent = contentBuffer.join("");
119
- const finalToolUses = Object.values(toolCalls).map((tc) => ({
120
- id: tc.id,
121
- name: tc.name,
122
- input: JsonUtils.safeParseJson(tc.inputParts.join("")),
123
- }));
124
- return {
125
- role: "assistant",
126
- content: fullContent,
127
- tool_uses: finalToolUses.length > 0 ? finalToolUses : undefined,
128
- };
129
- }
130
- /**
131
- * Efficiently estimates tokens via character count.
132
- * Uses ConfigService.getTokensPerChar() (default 0.25 tokens/char).
133
- */
134
- estimateTokens(text) {
135
- const tokensPerChar = ConfigService.getTokensPerChar();
136
- return Math.ceil(text.length * tokensPerChar);
137
- }
138
- async listModels() {
139
- return [
140
- { id: "claude-3-5-sonnet-20241022", name: "Claude 3.5 Sonnet (Latest)" },
141
- { id: "claude-3-5-haiku-20241022", name: "Claude 3.5 Haiku" },
142
- { id: "claude-3-opus-20240229", name: "Claude 3 Opus" },
143
- { id: "claude-3-sonnet-20240229", name: "Claude 3 Sonnet" },
144
- { id: "claude-3-haiku-20240307", name: "Claude 3 Haiku" },
145
- ];
146
- }
147
- async createEmbedding(_text) {
148
- // Anthropic does not currently provide an embeddings API.
149
- // Users requiring semantic sovereignty should use OpenRouter or a dedicated embedding provider.
150
- // Returning a zeroed vector as a passive fallback.
151
- return new Array(1536).fill(0);
152
- }
153
- }
154
- //# sourceMappingURL=AnthropicProvider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AnthropicProvider.js","sourceRoot":"","sources":["../../../../../src/monolith/infrastructure/ai/providers/AnthropicProvider.ts"],"names":[],"mappings":"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"}
@@ -1,214 +0,0 @@
1
- import { Cerebras } from "@cerebras/cerebras_cloud_sdk";
2
- import { ConfigService } from "../../config/ConfigService.js";
3
- import { JsonUtils } from "../../../plumbing/utils/JsonUtils.js";
4
- import { getErrorMessage } from "../../../plumbing/utils/ErrorUtils.js";
5
- export class CerebrasProvider {
6
- client;
7
- constructor(apiKey) {
8
- this.client = new Cerebras({ apiKey });
9
- }
10
- async createMessage(params) {
11
- try {
12
- const response = await this.client.chat.completions.create({
13
- model: params.model,
14
- messages: this.convertMessages(params.messages),
15
- tools: this.convertTools(params.tools),
16
- max_tokens: params.max_tokens || 1024,
17
- });
18
- const completion = response;
19
- const choice = completion.choices[0].message;
20
- if (choice.tool_calls && choice.tool_calls.length > 0) {
21
- return {
22
- role: "assistant",
23
- content: choice.content || "",
24
- tool_uses: choice.tool_calls.map((tc) => ({
25
- id: tc.id,
26
- name: tc.function.name,
27
- input: JsonUtils.safeParseJson(tc.function.arguments),
28
- })),
29
- };
30
- }
31
- return {
32
- role: "assistant",
33
- content: choice.content || "",
34
- };
35
- }
36
- catch (error) {
37
- throw new Error(`Cerebras API Error: ${getErrorMessage(error)}`);
38
- }
39
- }
40
- async createMessageStream(params, onUpdate, signal) {
41
- const startTime = Date.now();
42
- onUpdate({ type: "run_started", timestamp: startTime });
43
- onUpdate({
44
- type: "stage_change",
45
- stage: "thinking",
46
- label: "Processing request...",
47
- });
48
- try {
49
- // Cerebras SDK does not natively support AbortSignal in the create method yet,
50
- // but we can handle the stream consumption loop and break if aborted.
51
- const stream = await this.client.chat.completions.create({
52
- model: params.model,
53
- messages: this.convertMessages(params.messages),
54
- tools: this.convertTools(params.tools),
55
- max_tokens: params.max_tokens || 1024,
56
- stream: true,
57
- }, { abortSignal: signal });
58
- // Use array buffers to avoid string concatenation overhead
59
- const contentBuffer = [];
60
- const toolCalls = {};
61
- let hasStartedContent = false;
62
- for await (const chunk of stream) {
63
- if (signal?.aborted) {
64
- throw new Error("Cerebras request aborted by user.");
65
- }
66
- const chunkData = chunk;
67
- const delta = chunkData.choices[0]?.delta;
68
- if (!delta)
69
- continue;
70
- if (delta.content) {
71
- if (!hasStartedContent) {
72
- hasStartedContent = true;
73
- onUpdate({
74
- type: "stage_change",
75
- stage: "responding",
76
- label: "Generating response...",
77
- });
78
- }
79
- contentBuffer.push(delta.content);
80
- onUpdate({ type: "content_delta", text: delta.content });
81
- }
82
- if (delta.tool_calls) {
83
- onUpdate({
84
- type: "stage_change",
85
- stage: "calling_tool",
86
- label: "Using tool...",
87
- });
88
- for (const tc of delta.tool_calls) {
89
- const index = tc.index;
90
- if (tc.id) {
91
- toolCalls[index] = {
92
- id: tc.id,
93
- name: tc.function?.name || "",
94
- inputParts: [],
95
- };
96
- onUpdate({
97
- type: "tool_call_delta",
98
- index: index,
99
- id: tc.id,
100
- name: tc.function?.name,
101
- });
102
- }
103
- if (tc.function?.arguments) {
104
- if (toolCalls[index]) {
105
- toolCalls[index].inputParts.push(tc.function.arguments);
106
- }
107
- onUpdate({
108
- type: "tool_call_delta",
109
- index: index,
110
- argumentsDelta: tc.function.arguments,
111
- });
112
- }
113
- }
114
- }
115
- if (chunk.usage) {
116
- const usage = chunk.usage;
117
- onUpdate({
118
- type: "usage",
119
- usage: {
120
- inputTokens: usage.prompt_tokens,
121
- outputTokens: usage.completion_tokens,
122
- totalTokens: usage.total_tokens,
123
- },
124
- });
125
- }
126
- }
127
- const endTime = Date.now();
128
- onUpdate({
129
- type: "run_completed",
130
- timestamp: endTime,
131
- durationMs: endTime - startTime,
132
- });
133
- // Join array buffers into final strings
134
- const fullContent = contentBuffer.join("");
135
- const finalToolUses = Object.values(toolCalls).map((tc) => ({
136
- id: tc.id,
137
- name: tc.name,
138
- input: JsonUtils.safeParseJson(tc.inputParts.join("")),
139
- }));
140
- const blocks = [];
141
- if (fullContent)
142
- blocks.push({ type: "text", text: fullContent });
143
- return {
144
- role: "assistant",
145
- content: blocks.length > 0 ? blocks : fullContent,
146
- tool_uses: finalToolUses.length > 0 ? finalToolUses : undefined,
147
- };
148
- }
149
- catch (error) {
150
- throw new Error(`Cerebras Stream Error: ${getErrorMessage(error)}`);
151
- }
152
- }
153
- estimateTokens(text) {
154
- return Math.ceil(text.length * ConfigService.getTokensPerChar());
155
- }
156
- async listModels() {
157
- // Hardcoded list for now as Cerebras is compatible with Llama models
158
- return [
159
- { id: "llama3.1-8b", name: "Llama 3.1 8B" },
160
- { id: "llama3.1-70b", name: "Llama 3.1 70B" },
161
- ];
162
- }
163
- async createEmbedding(_text) {
164
- // Cerebras recently added embedding support (e.g., bge-large-en-v1.5).
165
- // For simplicity and alignment with local testing, we use a zeroed vector fallback
166
- // unless a dedicated embedding integration is requested.
167
- return new Array(1024).fill(0); // BGE Large usually has 1024 dims
168
- }
169
- convertMessages(messages) {
170
- // Convert Anthropic-style messages to OpenAI/Cerebras format
171
- return messages.map((msg) => {
172
- if (Array.isArray(msg.content)) {
173
- // Handle tools/text blocks
174
- const content = msg.content.map((block) => {
175
- if (block.type === "text")
176
- return { type: "text", text: block.text };
177
- // ... other block conversions if necessary, Cerebras expects standard OpenAI format usually
178
- return block;
179
- });
180
- // Simplification: join text parts if valid
181
- const textParts = msg.content
182
- .filter((c) => c.type === "text")
183
- .map((c) => c.text)
184
- .join("");
185
- // Check for tool result
186
- const toolResult = msg.content.find((c) => c.type === "tool_result");
187
- if (toolResult) {
188
- return {
189
- role: "tool",
190
- tool_call_id: toolResult.tool_use_id,
191
- content: typeof toolResult.content === "string"
192
- ? toolResult.content
193
- : JSON.stringify(toolResult.content),
194
- };
195
- }
196
- return { role: msg.role, content: textParts };
197
- }
198
- return { role: msg.role, content: msg.content };
199
- });
200
- }
201
- convertTools(tools) {
202
- if (!tools)
203
- return undefined;
204
- return tools.map((tool) => ({
205
- type: "function",
206
- function: {
207
- name: tool.name,
208
- description: tool.description,
209
- parameters: tool.input_schema,
210
- },
211
- }));
212
- }
213
- }
214
- //# sourceMappingURL=CerebrasProvider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CerebrasProvider.js","sourceRoot":"","sources":["../../../../../src/monolith/infrastructure/ai/providers/CerebrasProvider.ts"],"names":[],"mappings":"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"}
@@ -1,54 +0,0 @@
1
- import * as vscode from "vscode";
2
- // Decoration for Creates (Blue/Cyan with Sparkle)
3
- const createDecorationType = vscode.window.createTextEditorDecorationType({
4
- backgroundColor: "rgba(0, 255, 255, 0.1)", // Light Cyan background
5
- isWholeLine: false,
6
- overviewRulerColor: "rgba(0, 255, 255, 0.8)",
7
- overviewRulerLane: vscode.OverviewRulerLane.Right,
8
- after: {
9
- contentText: " ✨ Marie Created",
10
- color: "rgba(0, 255, 255, 0.7)",
11
- margin: "0 0 0 20px",
12
- fontWeight: "bold",
13
- },
14
- gutterIconPath: vscode.Uri.parse("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDBmZmZmIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+PHBhdGggZD0iTTggMEw5LjUgNi41TDE2IDhMOS41IDkuNUw4IDE2TDYuNSA5LjVMMCA4TDYuNSA2LjVMOCAwWiIgZmlsbD0idXJsKCNncmFkKSIvPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0iZ3JhZCIgeDE9IjAiIHkxPSIwIiB4Mj0iMTYiIHkyPSIxNiIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzAwZmZmZiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2ZmYjdjNSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjwvc3ZnPg=="), // Refined Sparkle with Sakura Gradient
15
- gutterIconSize: "contain",
16
- });
17
- // Decoration for Modifications (Green with Pencil)
18
- const modifyDecorationType = vscode.window.createTextEditorDecorationType({
19
- backgroundColor: "rgba(100, 255, 100, 0.1)", // Light Green background
20
- isWholeLine: false,
21
- overviewRulerColor: "rgba(100, 255, 100, 0.8)",
22
- overviewRulerLane: vscode.OverviewRulerLane.Right,
23
- after: {
24
- contentText: " ✏️ Marie Modified",
25
- color: "rgba(100, 255, 100, 0.7)",
26
- margin: "0 0 0 20px",
27
- fontWeight: "bold",
28
- },
29
- gutterIconPath: vscode.Uri.parse("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjNDJkZjc4IiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+PHBhdGggZD0iTTMgMTNWNU0zIDExTDExIDNNMTEgNWwtMi0yTDMgMTFsMiAyIi8+PC9zdmc+"), // Refined Git-themed Pencil
30
- gutterIconSize: "contain",
31
- });
32
- export const DecorationService = {
33
- /**
34
- * Highlights a range with the "Created by Marie" decoration.
35
- */
36
- decorateCreation(editor, range) {
37
- editor.setDecorations(createDecorationType, [range]);
38
- // Remove decoration after a short delay
39
- setTimeout(() => {
40
- editor.setDecorations(createDecorationType, []);
41
- }, 2000);
42
- },
43
- /**
44
- * Highlights a range with the "Modified by Marie" decoration.
45
- */
46
- decorateModification(editor, range) {
47
- editor.setDecorations(modifyDecorationType, [range]);
48
- // Remove decoration after a short delay
49
- setTimeout(() => {
50
- editor.setDecorations(modifyDecorationType, []);
51
- }, 2000);
52
- },
53
- };
54
- //# sourceMappingURL=DecorationService.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DecorationService.js","sourceRoot":"","sources":["../../../../src/monolith/plumbing/ui/DecorationService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEjC,kDAAkD;AAClD,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC,8BAA8B,CAAC;IACxE,eAAe,EAAE,wBAAwB,EAAE,wBAAwB;IACnE,WAAW,EAAE,KAAK;IAClB,kBAAkB,EAAE,wBAAwB;IAC5C,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,CAAC,KAAK;IACjD,KAAK,EAAE;QACL,WAAW,EAAE,kBAAkB;QAC/B,KAAK,EAAE,wBAAwB;QAC/B,MAAM,EAAE,YAAY;QACpB,UAAU,EAAE,MAAM;KACnB;IACD,cAAc,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAC9B,wmBAAwmB,CACzmB,EAAE,uCAAuC;IAC1C,cAAc,EAAE,SAAS;CAC1B,CAAC,CAAC;AAEH,mDAAmD;AACnD,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC,8BAA8B,CAAC;IACxE,eAAe,EAAE,0BAA0B,EAAE,yBAAyB;IACtE,WAAW,EAAE,KAAK;IAClB,kBAAkB,EAAE,0BAA0B;IAC9C,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,CAAC,KAAK;IACjD,KAAK,EAAE;QACL,WAAW,EAAE,oBAAoB;QACjC,KAAK,EAAE,0BAA0B;QACjC,MAAM,EAAE,YAAY;QACpB,UAAU,EAAE,MAAM;KACnB;IACD,cAAc,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAC9B,gTAAgT,CACjT,EAAE,4BAA4B;IAC/B,cAAc,EAAE,SAAS;CAC1B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B;;OAEG;IACH,gBAAgB,CAAC,MAAyB,EAAE,KAAmB;QAC7D,MAAM,CAAC,cAAc,CAAC,oBAAoB,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QAErD,wCAAwC;QACxC,UAAU,CAAC,GAAG,EAAE;YACd,MAAM,CAAC,cAAc,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;QAClD,CAAC,EAAE,IAAI,CAAC,CAAC;IACX,CAAC;IAED;;OAEG;IACH,oBAAoB,CAAC,MAAyB,EAAE,KAAmB;QACjE,MAAM,CAAC,cAAc,CAAC,oBAAoB,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QAErD,wCAAwC;QACxC,UAAU,CAAC,GAAG,EAAE;YACd,MAAM,CAAC,cAAc,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;QAClD,CAAC,EAAE,IAAI,CAAC,CAAC;IACX,CAAC;CACF,CAAC"}
@@ -1,48 +0,0 @@
1
- import * as vscode from "vscode";
2
- export class JoyLogService {
3
- context;
4
- static STORAGE_KEY = "marie.joyLog";
5
- _log = [];
6
- _onAchievementAdded = new vscode.EventEmitter();
7
- onAchievementAdded = this._onAchievementAdded.event;
8
- constructor(context) {
9
- this.context = context;
10
- this._loadLog();
11
- }
12
- _loadLog() {
13
- const saved = this.context.globalState.get(JoyLogService.STORAGE_KEY);
14
- this._log = saved || [];
15
- }
16
- async addAchievement(description, points = 10) {
17
- const achievement = {
18
- id: Math.random().toString(36).substring(7),
19
- description,
20
- timestamp: Date.now(),
21
- points,
22
- };
23
- this._log.unshift(achievement);
24
- // Keep last 100 achievements
25
- if (this._log.length > 100) {
26
- this._log = this._log.slice(0, 100);
27
- }
28
- await this.context.globalState.update(JoyLogService.STORAGE_KEY, this._log);
29
- this._onAchievementAdded.fire(achievement);
30
- return achievement;
31
- }
32
- getLog() {
33
- return this._log;
34
- }
35
- getStats() {
36
- const totalPoints = this._log.reduce((acc, curr) => acc + curr.points, 0);
37
- return {
38
- totalPoints,
39
- count: this._log.length,
40
- recent: this._log.slice(0, 5),
41
- };
42
- }
43
- async clearLog() {
44
- this._log = [];
45
- await this.context.globalState.update(JoyLogService.STORAGE_KEY, []);
46
- }
47
- }
48
- //# sourceMappingURL=JoyLogService.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"JoyLogService.js","sourceRoot":"","sources":["../../../src/monolith/services/JoyLogService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AASjC,MAAM,OAAO,aAAa;IAQK;IAPrB,MAAM,CAAU,WAAW,GAAG,cAAc,CAAC;IAC7C,IAAI,GAAsB,EAAE,CAAC;IAEpB,mBAAmB,GAClC,IAAI,MAAM,CAAC,YAAY,EAAmB,CAAC;IAC7B,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;IAEpE,YAA6B,OAAgC;QAAhC,YAAO,GAAP,OAAO,CAAyB;QAC3D,IAAI,CAAC,QAAQ,EAAE,CAAC;IAClB,CAAC;IAEO,QAAQ;QACd,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CACxC,aAAa,CAAC,WAAW,CAC1B,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;IAC1B,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,WAAmB,EAAE,SAAiB,EAAE;QAClE,MAAM,WAAW,GAAoB;YACnC,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;YAC3C,WAAW;YACX,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,MAAM;SACP,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC/B,6BAA6B;QAC7B,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACtC,CAAC;QAED,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5E,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC3C,OAAO,WAAW,CAAC;IACrB,CAAC;IAEM,MAAM;QACX,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAEM,QAAQ;QACb,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC1E,OAAO;YACL,WAAW;YACX,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM;YACvB,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SAC9B,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,QAAQ;QACnB,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QACf,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACvE,CAAC"}