@noorm/marie-cli 0.1.17 → 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.
- package/README.md +7 -15
- package/SENTINEL.md +4 -7
- package/dist/cli-new/components/AgenticSpinner.js +28 -0
- package/dist/cli-new/components/AgenticSpinner.js.map +1 -0
- package/dist/cli-new/components/App.js +16 -63
- package/dist/cli-new/components/App.js.map +1 -1
- package/dist/cli-new/components/ApprovalDialog.js +3 -2
- package/dist/cli-new/components/ApprovalDialog.js.map +1 -1
- package/dist/cli-new/components/Banner.js +16 -5
- package/dist/cli-new/components/Banner.js.map +1 -1
- package/dist/cli-new/components/ChatArea.js +6 -7
- package/dist/cli-new/components/ChatArea.js.map +1 -1
- package/dist/cli-new/components/Header.js +14 -8
- package/dist/cli-new/components/Header.js.map +1 -1
- package/dist/cli-new/components/InputArea.js +98 -31
- package/dist/cli-new/components/InputArea.js.map +1 -1
- package/dist/cli-new/components/MessageBubble.js +28 -19
- package/dist/cli-new/components/MessageBubble.js.map +1 -1
- package/dist/cli-new/components/SessionSwitcher.js +6 -9
- package/dist/cli-new/components/SessionSwitcher.js.map +1 -1
- package/dist/cli-new/components/SetupWizard.js +80 -257
- package/dist/cli-new/components/SetupWizard.js.map +1 -1
- package/dist/cli-new/components/ToolCallDisplay.js +20 -5
- package/dist/cli-new/components/ToolCallDisplay.js.map +1 -1
- package/dist/cli-new/components/WizardSteps.js +22 -0
- package/dist/cli-new/components/WizardSteps.js.map +1 -0
- package/dist/cli-new/constants/SetupConstants.js +42 -0
- package/dist/cli-new/constants/SetupConstants.js.map +1 -0
- package/dist/cli-new/hooks/useGit.js +19 -62
- package/dist/cli-new/hooks/useGit.js.map +1 -1
- package/dist/cli-new/hooks/useMarie.js +26 -18
- package/dist/cli-new/hooks/useMarie.js.map +1 -1
- package/dist/cli-new/hooks/useSessions.js +1 -1
- package/dist/cli-new/hooks/useSessions.js.map +1 -1
- package/dist/cli-new/hooks/useSetupWizard.js +88 -0
- package/dist/cli-new/hooks/useSetupWizard.js.map +1 -0
- package/dist/cli-new/hooks/useUpdateCheck.js +4 -3
- package/dist/cli-new/hooks/useUpdateCheck.js.map +1 -1
- package/dist/cli-new/index.js +2 -4
- package/dist/cli-new/index.js.map +1 -1
- package/dist/cli-new/services/CommandService.js +104 -0
- package/dist/cli-new/services/CommandService.js.map +1 -0
- package/dist/cli-new/services/GitService.js +91 -0
- package/dist/cli-new/services/GitService.js.map +1 -0
- package/dist/cli-new/services/MarieService.js +77 -0
- package/dist/cli-new/services/MarieService.js.map +1 -0
- package/dist/cli-new/services/auth-server.js +128 -0
- package/dist/cli-new/services/auth-server.js.map +1 -0
- package/dist/cli-new/styles/theme.js +17 -17
- package/dist/cli-new/styles/theme.js.map +1 -1
- package/dist/cli-new/utils/version.js +24 -0
- package/dist/cli-new/utils/version.js.map +1 -0
- package/dist/monolith/adapters/CliMarieAdapter.js +19 -18
- package/dist/monolith/adapters/CliMarieAdapter.js.map +1 -1
- package/dist/monolith/cli/CliFileSystemPort.js +17 -3
- package/dist/monolith/cli/CliFileSystemPort.js.map +1 -1
- package/dist/monolith/cli/MarieToolDefinitionsCLI.js +44 -33
- package/dist/monolith/cli/MarieToolDefinitionsCLI.js.map +1 -1
- package/dist/monolith/cli/index.js +11 -20
- package/dist/monolith/cli/index.js.map +1 -1
- package/dist/monolith/cli/services/JoyAutomationServiceCLI.js +15 -62
- package/dist/monolith/cli/services/JoyAutomationServiceCLI.js.map +1 -1
- package/dist/monolith/cli/storage.js +154 -65
- package/dist/monolith/cli/storage.js.map +1 -1
- package/dist/monolith/domain/joy/RitualService.js +44 -46
- package/dist/monolith/domain/joy/RitualService.js.map +1 -1
- package/dist/monolith/domain/marie/MarieCortex.js +148 -0
- package/dist/monolith/domain/marie/MarieCortex.js.map +1 -0
- package/dist/monolith/domain/marie/PersonalityRenderer.js +97 -0
- package/dist/monolith/domain/marie/PersonalityRenderer.js.map +1 -0
- package/dist/monolith/infrastructure/Configuration.js +68 -0
- package/dist/monolith/infrastructure/Configuration.js.map +1 -0
- package/dist/monolith/infrastructure/CoreInfrastructure.js +204 -0
- package/dist/monolith/infrastructure/CoreInfrastructure.js.map +1 -0
- package/dist/monolith/infrastructure/ai/agents/MarieAscendant.js +3 -3
- package/dist/monolith/infrastructure/ai/agents/MarieAscendant.js.map +1 -1
- package/dist/monolith/infrastructure/ai/context/ContextArchiveService.js +51 -57
- package/dist/monolith/infrastructure/ai/context/ContextArchiveService.js.map +1 -1
- package/dist/monolith/infrastructure/ai/context/ContextManager.js +142 -98
- package/dist/monolith/infrastructure/ai/context/ContextManager.js.map +1 -1
- package/dist/monolith/infrastructure/ai/core/MarieEngine.js +104 -556
- package/dist/monolith/infrastructure/ai/core/MarieEngine.js.map +1 -1
- package/dist/monolith/infrastructure/ai/core/MarieEventDispatcher.js +1 -37
- package/dist/monolith/infrastructure/ai/core/MarieEventDispatcher.js.map +1 -1
- package/dist/monolith/infrastructure/ai/core/MarieLockManager.js +30 -5
- package/dist/monolith/infrastructure/ai/core/MarieLockManager.js.map +1 -1
- package/dist/monolith/infrastructure/ai/core/MarieProgressTracker.js +176 -196
- package/dist/monolith/infrastructure/ai/core/MarieProgressTracker.js.map +1 -1
- package/dist/monolith/infrastructure/ai/core/MariePulseService.js +41 -7
- package/dist/monolith/infrastructure/ai/core/MariePulseService.js.map +1 -1
- package/dist/monolith/infrastructure/ai/core/MarieSanitizer.js +303 -63
- package/dist/monolith/infrastructure/ai/core/MarieSanitizer.js.map +1 -1
- package/dist/monolith/infrastructure/ai/core/MarieSemaphore.js +47 -4
- package/dist/monolith/infrastructure/ai/core/MarieSemaphore.js.map +1 -1
- package/dist/monolith/infrastructure/ai/core/MarieSession.js +95 -15
- package/dist/monolith/infrastructure/ai/core/MarieSession.js.map +1 -1
- package/dist/monolith/infrastructure/ai/core/MarieStabilityMonitor.js +21 -0
- package/dist/monolith/infrastructure/ai/core/MarieStabilityMonitor.js.map +1 -1
- package/dist/monolith/infrastructure/ai/core/MarieToolMender.js +12 -0
- package/dist/monolith/infrastructure/ai/core/MarieToolMender.js.map +1 -1
- package/dist/monolith/infrastructure/ai/core/MarieToolProcessor.js +339 -481
- package/dist/monolith/infrastructure/ai/core/MarieToolProcessor.js.map +1 -1
- package/dist/monolith/infrastructure/ai/core/MarieVitality.js +238 -0
- package/dist/monolith/infrastructure/ai/core/MarieVitality.js.map +1 -0
- package/dist/monolith/infrastructure/ai/core/ReasoningBudget.js +23 -12
- package/dist/monolith/infrastructure/ai/core/ReasoningBudget.js.map +1 -1
- package/dist/monolith/infrastructure/ai/core/SessionLogService.js +9 -2
- package/dist/monolith/infrastructure/ai/core/SessionLogService.js.map +1 -1
- package/dist/monolith/infrastructure/ai/providers/AIProvider.js +402 -1
- package/dist/monolith/infrastructure/ai/providers/AIProvider.js.map +1 -1
- package/dist/monolith/infrastructure/ai/providers/DreamBeesProvider.js +114 -0
- package/dist/monolith/infrastructure/ai/providers/DreamBeesProvider.js.map +1 -0
- package/dist/monolith/infrastructure/ai/providers/OpenRouterProvider.js +426 -370
- package/dist/monolith/infrastructure/ai/providers/OpenRouterProvider.js.map +1 -1
- package/dist/monolith/infrastructure/ai/providers/OpenRouterStreamParser.js +235 -241
- package/dist/monolith/infrastructure/ai/providers/OpenRouterStreamParser.js.map +1 -1
- package/dist/monolith/infrastructure/ai/workerAi.js +185 -0
- package/dist/monolith/infrastructure/ai/workerAi.js.map +1 -0
- package/dist/monolith/infrastructure/config/ConfigService.js +216 -359
- package/dist/monolith/infrastructure/config/ConfigService.js.map +1 -1
- package/dist/monolith/infrastructure/joy/CognitiveRituals.js +8 -0
- package/dist/monolith/infrastructure/joy/CognitiveRituals.js.map +1 -0
- package/dist/monolith/infrastructure/joy/JoyTools.js +23 -43
- package/dist/monolith/infrastructure/joy/JoyTools.js.map +1 -1
- package/dist/monolith/infrastructure/persistence/MarieMindAutonomics.js +4 -0
- package/dist/monolith/infrastructure/persistence/MarieMindAutonomics.js.map +1 -0
- package/dist/monolith/infrastructure/persistence/MarieMindEngine.js +11 -0
- package/dist/monolith/infrastructure/persistence/MarieMindEngine.js.map +1 -0
- package/dist/monolith/infrastructure/persistence/NoormmeAutonomics.js +135 -0
- package/dist/monolith/infrastructure/persistence/NoormmeAutonomics.js.map +1 -0
- package/dist/monolith/infrastructure/persistence/NoormmeEngine.js +523 -0
- package/dist/monolith/infrastructure/persistence/NoormmeEngine.js.map +1 -0
- package/dist/monolith/infrastructure/persistence/NoormmeSchema.js +179 -0
- package/dist/monolith/infrastructure/persistence/NoormmeSchema.js.map +1 -0
- package/dist/monolith/infrastructure/persistence/NoormmeSeeder.js +94 -0
- package/dist/monolith/infrastructure/persistence/NoormmeSeeder.js.map +1 -0
- package/dist/monolith/infrastructure/persistence/NoormmeTools.js +371 -0
- package/dist/monolith/infrastructure/persistence/NoormmeTools.js.map +1 -0
- package/dist/monolith/infrastructure/services/MarieMemoryStore.js +133 -134
- package/dist/monolith/infrastructure/services/MarieMemoryStore.js.map +1 -1
- package/dist/monolith/infrastructure/tools/MarieToolDefinitions.js +6 -1578
- package/dist/monolith/infrastructure/tools/MarieToolDefinitions.js.map +1 -1
- package/dist/monolith/infrastructure/tools/PureStreamParser.js +68 -80
- package/dist/monolith/infrastructure/tools/PureStreamParser.js.map +1 -1
- package/dist/monolith/infrastructure/tools/SharedToolDefinitions.js +12 -11
- package/dist/monolith/infrastructure/tools/SharedToolDefinitions.js.map +1 -1
- package/dist/monolith/infrastructure/tools/SovereignTools.js +326 -0
- package/dist/monolith/infrastructure/tools/SovereignTools.js.map +1 -0
- package/dist/monolith/infrastructure/tools/ToolRegistry.js +45 -26
- package/dist/monolith/infrastructure/tools/ToolRegistry.js.map +1 -1
- package/dist/monolith/infrastructure/tools/definitions/AnalysisTools.js +232 -0
- package/dist/monolith/infrastructure/tools/definitions/AnalysisTools.js.map +1 -0
- package/dist/monolith/infrastructure/tools/definitions/AutomationTools.js +274 -0
- package/dist/monolith/infrastructure/tools/definitions/AutomationTools.js.map +1 -0
- package/dist/monolith/infrastructure/tools/definitions/ContextTools.js +71 -0
- package/dist/monolith/infrastructure/tools/definitions/ContextTools.js.map +1 -0
- package/dist/monolith/infrastructure/tools/definitions/CoreTools.js +37 -0
- package/dist/monolith/infrastructure/tools/definitions/CoreTools.js.map +1 -0
- package/dist/monolith/infrastructure/tools/definitions/DiagnosticTools.js +154 -0
- package/dist/monolith/infrastructure/tools/definitions/DiagnosticTools.js.map +1 -0
- package/dist/monolith/infrastructure/tools/definitions/NavigationTools.js +197 -0
- package/dist/monolith/infrastructure/tools/definitions/NavigationTools.js.map +1 -0
- package/dist/monolith/infrastructure/tools/definitions/PlanningTools.js +300 -0
- package/dist/monolith/infrastructure/tools/definitions/PlanningTools.js.map +1 -0
- package/dist/monolith/plumbing/Plumbing.js +238 -0
- package/dist/monolith/plumbing/Plumbing.js.map +1 -0
- package/dist/monolith/plumbing/PlumbingAnalysis.js +109 -0
- package/dist/monolith/plumbing/PlumbingAnalysis.js.map +1 -0
- package/dist/monolith/plumbing/PlumbingSystem.js +169 -0
- package/dist/monolith/plumbing/PlumbingSystem.js.map +1 -0
- package/dist/monolith/plumbing/analysis/ComplexityService.js +30 -34
- package/dist/monolith/plumbing/analysis/ComplexityService.js.map +1 -1
- package/dist/monolith/plumbing/analysis/DependencyService.js +55 -44
- package/dist/monolith/plumbing/analysis/DependencyService.js.map +1 -1
- package/dist/monolith/plumbing/analysis/DiscoveryService.js +40 -42
- package/dist/monolith/plumbing/analysis/DiscoveryService.js.map +1 -1
- package/dist/monolith/plumbing/analysis/JoyMapService.js +52 -56
- package/dist/monolith/plumbing/analysis/JoyMapService.js.map +1 -1
- package/dist/monolith/plumbing/analysis/LintService.js +118 -118
- package/dist/monolith/plumbing/analysis/LintService.js.map +1 -1
- package/dist/monolith/plumbing/analysis/MarieSentinelService.js +278 -269
- package/dist/monolith/plumbing/analysis/MarieSentinelService.js.map +1 -1
- package/dist/monolith/plumbing/analysis/QualityGuardrailService.js +116 -114
- package/dist/monolith/plumbing/analysis/QualityGuardrailService.js.map +1 -1
- package/dist/monolith/plumbing/analysis/SurgicalMender.js +57 -59
- package/dist/monolith/plumbing/analysis/SurgicalMender.js.map +1 -1
- package/dist/monolith/plumbing/analysis/TestService.js +89 -89
- package/dist/monolith/plumbing/analysis/TestService.js.map +1 -1
- package/dist/monolith/plumbing/filesystem/FileService.js +123 -195
- package/dist/monolith/plumbing/filesystem/FileService.js.map +1 -1
- package/dist/monolith/plumbing/filesystem/PathResolver.js +7 -8
- package/dist/monolith/plumbing/filesystem/PathResolver.js.map +1 -1
- package/dist/monolith/plumbing/git/GitService.js +4 -4
- package/dist/monolith/plumbing/git/GitService.js.map +1 -1
- package/dist/monolith/plumbing/lsp/SymbolService.js +5 -34
- package/dist/monolith/plumbing/lsp/SymbolService.js.map +1 -1
- package/dist/monolith/plumbing/terminal/ProcessRegistry.js +20 -22
- package/dist/monolith/plumbing/terminal/ProcessRegistry.js.map +1 -1
- package/dist/monolith/plumbing/terminal/TerminalService.js +127 -136
- package/dist/monolith/plumbing/terminal/TerminalService.js.map +1 -1
- package/dist/monolith/plumbing/utils/EnvironmentUtils.js +3 -23
- package/dist/monolith/plumbing/utils/EnvironmentUtils.js.map +1 -1
- package/dist/monolith/plumbing/utils/JsonUtils.js +252 -311
- package/dist/monolith/plumbing/utils/JsonUtils.js.map +1 -1
- package/dist/monolith/plumbing/utils/MutexUtils.js.map +1 -1
- package/dist/monolith/plumbing/utils/PlumbingCore.js +549 -0
- package/dist/monolith/plumbing/utils/PlumbingCore.js.map +1 -0
- package/dist/monolith/plumbing/utils/PrefixTree.js +61 -114
- package/dist/monolith/plumbing/utils/PrefixTree.js.map +1 -1
- package/dist/monolith/plumbing/utils/StreamTagDetector.js +89 -127
- package/dist/monolith/plumbing/utils/StreamTagDetector.js.map +1 -1
- package/dist/monolith/plumbing/utils/StringUtils.js +87 -89
- package/dist/monolith/plumbing/utils/StringUtils.js.map +1 -1
- package/dist/monolith/runtime/MarieRuntime.js +76 -417
- package/dist/monolith/runtime/MarieRuntime.js.map +1 -1
- package/dist/monolith/runtime/RuntimeAdapterBase.js +1 -1
- package/dist/monolith/runtime/RuntimeAdapterBase.js.map +1 -1
- package/dist/monolith/runtime/providerFactory.js +1 -7
- package/dist/monolith/runtime/providerFactory.js.map +1 -1
- package/dist/monolith/services/HealthService.js +29 -32
- package/dist/monolith/services/HealthService.js.map +1 -1
- package/dist/monolith/services/JoyAutomationService.js +58 -95
- package/dist/monolith/services/JoyAutomationService.js.map +1 -1
- package/dist/monolith/services/MarieAutomationService.js +59 -0
- package/dist/monolith/services/MarieAutomationService.js.map +1 -0
- package/dist/monolith/services/MarieGhostService.js +46 -161
- package/dist/monolith/services/MarieGhostService.js.map +1 -1
- package/dist/monolith/services/MarieServices.js +102 -0
- package/dist/monolith/services/MarieServices.js.map +1 -0
- package/dist/monolith/services/MarieTypes.js +2 -0
- package/dist/monolith/services/MarieTypes.js.map +1 -0
- package/dist/monolith/services/UpdateService.js +47 -49
- package/dist/monolith/services/UpdateService.js.map +1 -1
- package/dist/prompts.js +11 -5
- package/dist/prompts.js.map +1 -1
- package/dist/test_prefix_tree.js +9 -9
- package/dist/test_prefix_tree.js.map +1 -1
- package/package.json +18 -88
- package/run_test.js +5 -0
- package/.marie_visual_verify_1771225696548/progress_bar_check.txt +0 -1
- package/dist/extension.cjs +0 -635
- package/dist/extension.js +0 -473
- package/dist/extension.js.map +0 -1
- package/dist/monolith/adapters/VscodeMarieAdapter.js +0 -81
- package/dist/monolith/adapters/VscodeMarieAdapter.js.map +0 -1
- package/dist/monolith/domain/joy/JoyTools.js +0 -535
- package/dist/monolith/domain/joy/JoyTools.js.map +0 -1
- package/dist/monolith/infrastructure/ai/agents/MarieYOLO.js +0 -207
- package/dist/monolith/infrastructure/ai/agents/MarieYOLO.js.map +0 -1
- package/dist/monolith/infrastructure/ai/core/GhostPort.js +0 -2
- package/dist/monolith/infrastructure/ai/core/GhostPort.js.map +0 -1
- package/dist/monolith/infrastructure/ai/core/MarieYOLOTypes.js +0 -2
- package/dist/monolith/infrastructure/ai/core/MarieYOLOTypes.js.map +0 -1
- package/dist/monolith/infrastructure/ai/core/VscodeFileSystemPort.js +0 -33
- package/dist/monolith/infrastructure/ai/core/VscodeFileSystemPort.js.map +0 -1
- package/dist/monolith/infrastructure/ai/providers/AnthropicProvider.js +0 -148
- package/dist/monolith/infrastructure/ai/providers/AnthropicProvider.js.map +0 -1
- package/dist/monolith/infrastructure/ai/providers/CerebrasProvider.js +0 -208
- package/dist/monolith/infrastructure/ai/providers/CerebrasProvider.js.map +0 -1
- package/dist/monolith/plumbing/ui/DecorationService.js +0 -54
- package/dist/monolith/plumbing/ui/DecorationService.js.map +0 -1
- package/dist/monolith/services/JoyLogService.js +0 -48
- package/dist/monolith/services/JoyLogService.js.map +0 -1
- package/dist/monolith/services/JoyService.js +0 -209
- package/dist/monolith/services/JoyService.js.map +0 -1
- package/dist/monolith/services/MarieSCMProvider.js +0 -41
- package/dist/monolith/services/MarieSCMProvider.js.map +0 -1
- package/dist/test_agent_stream_control_plane.js +0 -170
- package/dist/test_agent_stream_control_plane.js.map +0 -1
- package/dist/test_strategy_integration.js +0 -114
- package/dist/test_strategy_integration.js.map +0 -1
- package/dist/test_streaming_fragility.js +0 -191
- package/dist/test_streaming_fragility.js.map +0 -1
- package/dist/webview-ui/App.js +0 -16
- package/dist/webview-ui/App.js.map +0 -1
- package/dist/webview-ui/Providers.js +0 -6
- package/dist/webview-ui/Providers.js.map +0 -1
- package/dist/webview-ui/components/ApprovalPanel.js +0 -8
- package/dist/webview-ui/components/ApprovalPanel.js.map +0 -1
- package/dist/webview-ui/components/ChatPanel.js +0 -19
- package/dist/webview-ui/components/ChatPanel.js.map +0 -1
- package/dist/webview-ui/components/Composer.js +0 -19
- package/dist/webview-ui/components/Composer.js.map +0 -1
- package/dist/webview-ui/components/HeaderBar.js +0 -5
- package/dist/webview-ui/components/HeaderBar.js.map +0 -1
- package/dist/webview-ui/components/SessionList.js +0 -14
- package/dist/webview-ui/components/SessionList.js.map +0 -1
- package/dist/webview-ui/context/WebviewStateContext.js +0 -146
- package/dist/webview-ui/context/WebviewStateContext.js.map +0 -1
- package/dist/webview-ui/main.css +0 -1
- package/dist/webview-ui/main.js +0 -108
- package/dist/webview-ui/main.js.map +0 -1
- package/dist/webview-ui/types.js +0 -2
- package/dist/webview-ui/types.js.map +0 -1
- package/dist/webview-ui/vscode.js +0 -4
- package/dist/webview-ui/vscode.js.map +0 -1
- package/lint_output.txt +0 -705
- package/lint_output_v2.txt +0 -711
- package/marie-coder-0.1.16.vsix +0 -0
package/README.md
CHANGED
|
@@ -37,25 +37,16 @@ Marie includes a built-in architecture guardian. She watches the evolution of yo
|
|
|
37
37
|
|
|
38
38
|
---
|
|
39
39
|
|
|
40
|
-
## 🛰
|
|
40
|
+
## 🛰 The Command Deck: CLI Supremacy
|
|
41
41
|
|
|
42
|
-
Marie
|
|
42
|
+
Marie provides a high-velocity terminal experience built for flow.
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
*A high-velocity terminal experience built for flow.*
|
|
46
|
-
* **Real-time reasoning stream**: Watch the cognitive process as it unfolds.
|
|
44
|
+
* **Real-time reasoning stream**: Watch the cognitive process as it unfolds via Ink-powered UI.
|
|
47
45
|
* **Structured multi-pass execution**: Planning, implementation, and verification in one loop.
|
|
48
46
|
* **Surgical lint repair**: Automatic correction of mechanical errors.
|
|
49
47
|
* **Architectural enforcement on write**: Preventing violations before they hit the disk.
|
|
50
48
|
* **Provider-agnostic model support**: Switch engines without losing the mission.
|
|
51
49
|
|
|
52
|
-
### 2️⃣ VS Code — The Integrated Bridge
|
|
53
|
-
*Deep editor integration for strategic oversight.*
|
|
54
|
-
* **Persistent architectural context**: Marie lives inside your project structure.
|
|
55
|
-
* **Autonomy calibration**: From "Balanced" assistance to "High Autonomy" execution.
|
|
56
|
-
* **Strategic multi-file transformations**: Coordinated changes across multiple modules.
|
|
57
|
-
* **Visual Sentinel awareness**: Real-time feedback on Joy Zoning violations.
|
|
58
|
-
|
|
59
50
|
**Marie understands your codebase as a system — not a prompt.**
|
|
60
51
|
|
|
61
52
|
---
|
|
@@ -85,7 +76,9 @@ npm install -g @noorm/marie-cli
|
|
|
85
76
|
1. **Launch**: Simply type `marie` in your terminal.
|
|
86
77
|
2. **Credentials**:
|
|
87
78
|
```bash
|
|
88
|
-
export
|
|
79
|
+
export MARIECODER_API_KEY=your_key_here
|
|
80
|
+
# OR
|
|
81
|
+
export OPENROUTER_API_KEY=your_key_here
|
|
89
82
|
```
|
|
90
83
|
*Or configure via persistent storage at `~/.marie/config.json`*
|
|
91
84
|
|
|
@@ -94,9 +87,8 @@ npm install -g @noorm/marie-cli
|
|
|
94
87
|
## 💠 Provider-Agnostic Core
|
|
95
88
|
|
|
96
89
|
Choose your engine. Marie adapts her execution style to the provider while maintaining the doctrine:
|
|
97
|
-
* **
|
|
90
|
+
* **MarieCoder** (OptimizedGLM)
|
|
98
91
|
* **OpenRouter** (For the vast frontier of models)
|
|
99
|
-
* **Cerebras** (For high-velocity inference)
|
|
100
92
|
* **Any compatible endpoint**
|
|
101
93
|
|
|
102
94
|
---
|
package/SENTINEL.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
|
|
2
|
-
# 🛡️ Sentinel Report: 2/
|
|
2
|
+
# 🛡️ Sentinel Report: 2/25/2026 9:01:50 AM
|
|
3
3
|
|
|
4
4
|
**Stability**: Toxic
|
|
5
|
-
**Entropy**:
|
|
5
|
+
**Entropy**: 2172 (✅ Monotonic)
|
|
6
6
|
**Ratchet**: 🔓 OPEN
|
|
7
7
|
|
|
8
8
|
## 📊 Metrics
|
|
@@ -10,15 +10,11 @@
|
|
|
10
10
|
- **Cyclic Rot**: 0 cycles
|
|
11
11
|
- **Duplication**: 3 instances
|
|
12
12
|
- **Toxicity**: 0 hotspots
|
|
13
|
+
- **Navigation Drift**: 0 violations
|
|
13
14
|
|
|
14
15
|
## 🗺️ Visual Architecture
|
|
15
16
|
```mermaid
|
|
16
17
|
graph TD;
|
|
17
|
-
_vscode_test_vscode_darwin_arm64_1_109_3_Visual_Studio_Code_app_Contents_Resources_app_extensions_mermaid_chat_features_chat_webview_src_index_editor_ts[index-editor.ts] --> _vscode_test_vscode_darwin_arm64_1_109_3_Visual_Studio_Code_app_Contents_Resources_app_extensions_mermaid_chat_features_chat_webview_src_mermaidWebview_ts[mermaidWebview.ts];
|
|
18
|
-
_vscode_test_vscode_darwin_arm64_1_109_3_Visual_Studio_Code_app_Contents_Resources_app_extensions_mermaid_chat_features_chat_webview_src_index_editor_ts[index-editor.ts] --> _vscode_test_vscode_darwin_arm64_1_109_3_Visual_Studio_Code_app_Contents_Resources_app_extensions_mermaid_chat_features_chat_webview_src_vscodeApi_ts[vscodeApi.ts];
|
|
19
|
-
_vscode_test_vscode_darwin_arm64_1_109_3_Visual_Studio_Code_app_Contents_Resources_app_extensions_mermaid_chat_features_chat_webview_src_index_ts[index.ts] --> _vscode_test_vscode_darwin_arm64_1_109_3_Visual_Studio_Code_app_Contents_Resources_app_extensions_mermaid_chat_features_chat_webview_src_mermaidWebview_ts[mermaidWebview.ts];
|
|
20
|
-
_vscode_test_vscode_darwin_arm64_1_109_3_Visual_Studio_Code_app_Contents_Resources_app_extensions_mermaid_chat_features_chat_webview_src_index_ts[index.ts] --> _vscode_test_vscode_darwin_arm64_1_109_3_Visual_Studio_Code_app_Contents_Resources_app_extensions_mermaid_chat_features_chat_webview_src_vscodeApi_ts[vscodeApi.ts];
|
|
21
|
-
_vscode_test_vscode_darwin_arm64_1_109_3_Visual_Studio_Code_app_Contents_Resources_app_extensions_mermaid_chat_features_chat_webview_src_mermaidWebview_ts[mermaidWebview.ts] --> _vscode_test_vscode_darwin_arm64_1_109_3_Visual_Studio_Code_app_Contents_Resources_app_extensions_mermaid_chat_features_chat_webview_src_vscodeApi_ts[vscodeApi.ts];
|
|
22
18
|
|
|
23
19
|
```
|
|
24
20
|
|
|
@@ -29,5 +25,6 @@ graph TD;
|
|
|
29
25
|
- 👯 [Semantic Duplicate] src/infrastructure/BaseAdapter.ts matches .marie-joy-test/src/infrastructure/BaseAdapter.ts
|
|
30
26
|
- 👯 [Semantic Duplicate] src/plumbing/BaseTool.ts matches .marie-joy-test/src/plumbing/BaseTool.ts
|
|
31
27
|
|
|
28
|
+
|
|
32
29
|
---
|
|
33
30
|
*Marie Sentinel v3.1 — Grounded Architectural Guardian*
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useEffect } from "react";
|
|
3
|
+
import { Text } from "ink";
|
|
4
|
+
import { marieTheme } from "../styles/theme.js";
|
|
5
|
+
const AGENTIC_PHRASES = [
|
|
6
|
+
"Brewing digital coffee...",
|
|
7
|
+
"Warming up the neural nets...",
|
|
8
|
+
"Asking the latent space nicely...",
|
|
9
|
+
"Herding the attention heads...",
|
|
10
|
+
"Feeding the context window...",
|
|
11
|
+
"Reticulating agentic splines...",
|
|
12
|
+
"Downloading more RAM...",
|
|
13
|
+
"Convincing the matrices to multiply...",
|
|
14
|
+
"Polishing the sovereign focus...",
|
|
15
|
+
"Consulting with the rubber duck...",
|
|
16
|
+
];
|
|
17
|
+
export const AgenticSpinner = ({ prefix = "", intervalMs = 2500, }) => {
|
|
18
|
+
const [phraseIndex, setPhraseIndex] = useState(0);
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
const timer = setInterval(() => {
|
|
21
|
+
setPhraseIndex((prev) => (prev + 1) % AGENTIC_PHRASES.length);
|
|
22
|
+
}, intervalMs);
|
|
23
|
+
return () => clearInterval(timer);
|
|
24
|
+
}, [intervalMs]);
|
|
25
|
+
const currentPhrase = AGENTIC_PHRASES[phraseIndex];
|
|
26
|
+
return (_jsxs(Text, { color: marieTheme.colors.muted, children: [marieTheme.icons.spinner, " ", prefix ? `${prefix} ` : "", currentPhrase] }));
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=AgenticSpinner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgenticSpinner.js","sourceRoot":"","sources":["../../../src/cli-new/components/AgenticSpinner.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,MAAM,eAAe,GAAG;IACtB,2BAA2B;IAC3B,+BAA+B;IAC/B,mCAAmC;IACnC,gCAAgC;IAChC,+BAA+B;IAC/B,iCAAiC;IACjC,yBAAyB;IACzB,wCAAwC;IACxC,kCAAkC;IAClC,oCAAoC;CACrC,CAAC;AAOF,MAAM,CAAC,MAAM,cAAc,GAAkC,CAAC,EAC5D,MAAM,GAAG,EAAE,EACX,UAAU,GAAG,IAAI,GAClB,EAAE,EAAE;IACH,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAElD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;YAC7B,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QAChE,CAAC,EAAE,UAAU,CAAC,CAAC;QAEf,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,MAAM,aAAa,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAEnD,OAAO,CACL,MAAC,IAAI,IAAC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,aACjC,UAAU,CAAC,KAAK,CAAC,OAAO,OAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,EACrD,aAAa,IACT,CACR,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -13,13 +13,15 @@ import { useGit } from "../hooks/useGit.js";
|
|
|
13
13
|
import { useUpdateCheck } from "../hooks/useUpdateCheck.js";
|
|
14
14
|
import { marieTheme } from "../styles/theme.js";
|
|
15
15
|
import { Storage } from "../../monolith/cli/storage.js";
|
|
16
|
+
import { CommandService } from "../services/CommandService.js";
|
|
16
17
|
import { SetupWizard } from "./SetupWizard.js";
|
|
17
|
-
import {
|
|
18
|
+
import { WelcomeBanner } from "./Banner.js";
|
|
18
19
|
export const App = ({ workingDir }) => {
|
|
19
20
|
const { exit } = useApp();
|
|
20
21
|
const { stdout } = useStdout();
|
|
21
22
|
const [viewMode, setViewMode] = useState("chat");
|
|
22
23
|
const [showSetup, setShowSetup] = useState(false);
|
|
24
|
+
const [config, setConfig] = useState(Storage.getConfig());
|
|
23
25
|
// Core hooks
|
|
24
26
|
const { messages, isLoading, streamingState, pendingApproval, runElapsedMs, currentThought, sendMessage, stopGeneration, createSession, loadSession, clearSession, marie, } = useMarie({ workingDir });
|
|
25
27
|
const { sessions, currentSessionId, createSession: createNewSession, switchSession, deleteSession, renameSession, togglePinSession, } = useSessions({ marie });
|
|
@@ -32,65 +34,14 @@ export const App = ({ workingDir }) => {
|
|
|
32
34
|
const sessionTitle = currentSession?.title || "New Session";
|
|
33
35
|
// Command handlers
|
|
34
36
|
const handleCommand = useCallback(async (command) => {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
case "new":
|
|
44
|
-
await createNewSession();
|
|
45
|
-
break;
|
|
46
|
-
case "sessions":
|
|
47
|
-
setViewMode("sessions");
|
|
48
|
-
break;
|
|
49
|
-
case "exit":
|
|
50
|
-
case "quit":
|
|
51
|
-
exit();
|
|
52
|
-
break;
|
|
53
|
-
case "checkpoint": {
|
|
54
|
-
const checkpointMsg = args.join(" ") || undefined;
|
|
55
|
-
const commit = await createCheckpoint(checkpointMsg);
|
|
56
|
-
if (commit) {
|
|
57
|
-
// Show success message
|
|
58
|
-
}
|
|
59
|
-
break;
|
|
60
|
-
}
|
|
61
|
-
case "undo": {
|
|
62
|
-
const result = await undoLastCommit();
|
|
63
|
-
if (!result.success) {
|
|
64
|
-
// Show error
|
|
65
|
-
}
|
|
66
|
-
break;
|
|
67
|
-
}
|
|
68
|
-
case "autonomy": {
|
|
69
|
-
const level = (args[0] || "").toLowerCase();
|
|
70
|
-
if (level === "balanced" ||
|
|
71
|
-
level === "high" ||
|
|
72
|
-
level === "ascension") {
|
|
73
|
-
Storage.saveConfig({
|
|
74
|
-
autonomyMode: level,
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
break;
|
|
78
|
-
}
|
|
79
|
-
case "config":
|
|
80
|
-
setShowSetup(true);
|
|
81
|
-
break;
|
|
82
|
-
default:
|
|
83
|
-
// Unknown command
|
|
84
|
-
break;
|
|
85
|
-
}
|
|
86
|
-
}, [
|
|
87
|
-
clearSession,
|
|
88
|
-
createNewSession,
|
|
89
|
-
setViewMode,
|
|
90
|
-
exit,
|
|
91
|
-
createCheckpoint,
|
|
92
|
-
undoLastCommit,
|
|
93
|
-
]);
|
|
37
|
+
await CommandService.getInstance().handleCommand(command, {
|
|
38
|
+
setViewMode,
|
|
39
|
+
setShowSetup,
|
|
40
|
+
exit,
|
|
41
|
+
});
|
|
42
|
+
// Refresh config after command might have changed it
|
|
43
|
+
setConfig(Storage.getConfig());
|
|
44
|
+
}, [setViewMode, setShowSetup, exit]);
|
|
94
45
|
const handleSubmit = useCallback(async (value) => {
|
|
95
46
|
if (value.startsWith("/")) {
|
|
96
47
|
await handleCommand(value);
|
|
@@ -117,14 +68,16 @@ export const App = ({ workingDir }) => {
|
|
|
117
68
|
}
|
|
118
69
|
});
|
|
119
70
|
// Get current model + autonomy mode
|
|
120
|
-
const config = Storage.getConfig();
|
|
121
71
|
const model = config.model || "claude-3-5-sonnet-20241022";
|
|
122
72
|
const autonomyMode = config.autonomyMode ||
|
|
123
73
|
(config.requireApproval === false ? "high" : "balanced");
|
|
124
74
|
// Show setup wizard when requested
|
|
125
75
|
if (showSetup) {
|
|
126
76
|
return React.createElement(SetupWizard, {
|
|
127
|
-
onComplete: () =>
|
|
77
|
+
onComplete: () => {
|
|
78
|
+
setShowSetup(false);
|
|
79
|
+
setConfig(Storage.getConfig());
|
|
80
|
+
},
|
|
128
81
|
});
|
|
129
82
|
}
|
|
130
83
|
if (viewMode === "sessions") {
|
|
@@ -136,6 +89,6 @@ export const App = ({ workingDir }) => {
|
|
|
136
89
|
setViewMode("chat");
|
|
137
90
|
}, onDelete: deleteSession, onRename: renameSession, onTogglePin: togglePinSession, onClose: () => setViewMode("chat") }));
|
|
138
91
|
}
|
|
139
|
-
return (_jsxs(Box, { flexDirection: "column", height: stdout?.rows || 24, children: [_jsx(Header, { model: model, sessionTitle: sessionTitle, gitStatus: gitStatus || undefined, isLoading: isLoading, elapsedMs: runElapsedMs, autonomyMode: autonomyMode, currentThought: currentThought }), pendingApproval && _jsx(ApprovalDialog, { request: pendingApproval }), messages.length === 0 && !isLoading &&
|
|
92
|
+
return (_jsxs(Box, { flexDirection: "column", height: stdout?.rows || 24, children: [_jsx(Header, { model: model, sessionTitle: sessionTitle, gitStatus: gitStatus || undefined, isLoading: isLoading, elapsedMs: runElapsedMs, autonomyMode: autonomyMode, currentThought: currentThought, usage: streamingState.usage }), pendingApproval && _jsx(ApprovalDialog, { request: pendingApproval }), messages.length === 0 && !isLoading && _jsx(WelcomeBanner, {}), _jsx(ChatArea, { messages: messages, streamingState: streamingState }), _jsx(InputArea, { onSubmit: handleSubmit, isLoading: isLoading }), _jsx(Box, { marginTop: 0, paddingX: 1, justifyContent: "center", children: _jsxs(Text, { color: marieTheme.colors.muted, dimColor: true, children: [_jsx(Text, { bold: true, children: "Ctrl+C" }), " Halt \u2022 ", _jsx(Text, { bold: true, children: "Ctrl+S" }), " Timelines \u2022", " ", _jsx(Text, { bold: true, children: "Ctrl+N" }), " New \u2022 ", _jsx(Text, { bold: true, children: "/autonomy" }), " ", "[balanced|high|ascension] \u2022 ", _jsx(Text, { bold: true, children: "/help" }), " wisdom"] }) })] }));
|
|
140
93
|
};
|
|
141
94
|
//# sourceMappingURL=App.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"App.js","sourceRoot":"","sources":["../../../src/cli-new/components/App.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAa,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"App.js","sourceRoot":"","sources":["../../../src/cli-new/components/App.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Box, Text, useInput } from "ink";
|
|
3
3
|
import { marieTheme } from "../styles/theme.js";
|
|
4
|
+
import { safeStringify } from "../../monolith/plumbing/utils/PlumbingCore.js";
|
|
4
5
|
export const ApprovalDialog = ({ request }) => {
|
|
5
6
|
const isDestructive = [
|
|
6
7
|
"write_file",
|
|
@@ -24,8 +25,8 @@ export const ApprovalDialog = ({ request }) => {
|
|
|
24
25
|
if (input.command) {
|
|
25
26
|
return `Cmd: ${input.command}`;
|
|
26
27
|
}
|
|
27
|
-
return
|
|
28
|
+
return safeStringify(input, 2).slice(0, 150);
|
|
28
29
|
};
|
|
29
|
-
return (_jsxs(Box, { flexDirection: "column", borderStyle: "double", borderColor: isDestructive ? marieTheme.colors.warning : marieTheme.colors.info, paddingX: 1, paddingY: 0, marginY: 0, children: [_jsx(Box, { marginBottom: 0, children: _jsxs(Text, { bold: true, color: isDestructive ? marieTheme.colors.warning : marieTheme.colors.info, children: [isDestructive ? marieTheme.icons.warning : marieTheme.icons.info, " ", "
|
|
30
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "double", borderColor: isDestructive ? marieTheme.colors.warning : marieTheme.colors.info, paddingX: 1, paddingY: 0, marginY: 0, children: [_jsx(Box, { marginBottom: 0, children: _jsxs(Text, { bold: true, color: isDestructive ? marieTheme.colors.warning : marieTheme.colors.info, children: [isDestructive ? marieTheme.icons.warning : marieTheme.icons.info, " ", "Marie needs your blessing:", " ", _jsx(Text, { color: marieTheme.colors.foreground, children: request.toolName })] }) }), _jsx(Box, { borderStyle: "single", borderColor: marieTheme.colors.border, paddingX: 1, marginBottom: 0, children: _jsx(Text, { color: marieTheme.colors.muted, children: formatToolInput() }) }), request.diff && (_jsxs(Box, { flexDirection: "column", borderStyle: "single", borderColor: marieTheme.colors.secondary, paddingX: 1, marginBottom: 0, children: [_jsxs(Text, { color: marieTheme.colors.muted, children: [request.diff.old.slice(0, 80), "..."] }), _jsxs(Text, { color: marieTheme.colors.success, children: ["\u2192 ", request.diff.new.slice(0, 80), "..."] })] })), _jsxs(Box, { marginTop: 0, gap: 3, children: [_jsx(Text, { color: marieTheme.colors.success, children: "\uD83D\uDFE2 Y - Manifest It" }), _jsx(Text, { color: marieTheme.colors.error, children: "\uD83D\uDD34 N - Rethink This" })] })] }));
|
|
30
31
|
};
|
|
31
32
|
//# sourceMappingURL=ApprovalDialog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApprovalDialog.js","sourceRoot":"","sources":["../../../src/cli-new/components/ApprovalDialog.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"ApprovalDialog.js","sourceRoot":"","sources":["../../../src/cli-new/components/ApprovalDialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +1,34 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Box, Text, useStdout } from "ink";
|
|
3
3
|
import { marieTheme } from "../styles/theme.js";
|
|
4
|
-
|
|
4
|
+
import { VERSION } from "../utils/version.js";
|
|
5
|
+
export const Banner = ({ show = true, version = `v${VERSION}`, latestVersion, isUpdateAvailable = false, subtitle, subtitleColor, }) => {
|
|
5
6
|
const { stdout } = useStdout();
|
|
6
7
|
const width = stdout?.columns || 80;
|
|
7
8
|
if (!show)
|
|
8
9
|
return null;
|
|
9
10
|
// If screen is too small, use compact banner
|
|
10
11
|
if (width < 65) {
|
|
11
|
-
return _jsx(CompactBanner, { version: version, isUpdateAvailable: isUpdateAvailable });
|
|
12
|
+
return (_jsx(CompactBanner, { version: version, isUpdateAvailable: isUpdateAvailable }));
|
|
12
13
|
}
|
|
13
|
-
return (_jsx(Box, { flexDirection: "column", alignItems: "center", marginTop: 0, marginBottom: 0, children: _jsxs(Box, { flexDirection: "column", alignItems: "center", children: [_jsx(Text, { color: marieTheme.colors.primary, children: " ███╗ ███╗ █████╗ ██████╗ ██╗███████╗" }), _jsx(Text, { color: marieTheme.colors.primary, children: " ████╗ ████║██╔══██╗██╔══██╗██║██╔════╝" }), _jsx(Text, { color: marieTheme.colors.primary, children: " ██╔████╔██║███████║██████╔╝██║█████╗ " }), _jsx(Text, { color: marieTheme.colors.primary, children: " ██║╚██╔╝██║██╔══██║██╔══██╗██║██╔══╝ " }), _jsx(Text, { color: marieTheme.colors.primary, children: " ██║ ╚═╝ ██║██║ ██║██║ ██║██║███████╗" }), _jsx(Text, { color: marieTheme.colors.primary, children: " ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝╚══════╝" }), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { color: marieTheme.colors.secondary, children: "✦
|
|
14
|
+
return (_jsx(Box, { flexDirection: "column", alignItems: "center", marginTop: 0, marginBottom: 0, children: _jsxs(Box, { flexDirection: "column", alignItems: "center", children: [_jsx(Text, { color: marieTheme.colors.primary, children: " ███╗ ███╗ █████╗ ██████╗ ██╗███████╗" }), _jsx(Text, { color: marieTheme.colors.primary, children: " ████╗ ████║██╔══██╗██╔══██╗██║██╔════╝" }), _jsx(Text, { color: marieTheme.colors.primary, children: " ██╔████╔██║███████║██████╔╝██║█████╗ " }), _jsx(Text, { color: marieTheme.colors.primary, children: " ██║╚██╔╝██║██╔══██║██╔══██╗██║██╔══╝ " }), _jsx(Text, { color: marieTheme.colors.primary, children: " ██║ ╚═╝ ██║██║ ██║██║ ██║██║███████╗" }), _jsx(Text, { color: marieTheme.colors.primary, children: " ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝╚══════╝" }), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { color: subtitleColor || marieTheme.colors.secondary, children: subtitle || "✦ Sentient Pair-Programmer ✦ " }), !subtitle && (_jsx(Text, { color: marieTheme.colors.muted, children: `${version} · Latent space is warm` }))] }), isUpdateAvailable && latestVersion && (_jsx(Box, { marginTop: 1, paddingX: 1, borderStyle: "round", borderColor: "yellow", children: _jsxs(Text, { color: "yellow", children: [`Update Available: ${latestVersion}! Run `, _jsx(Text, { bold: true, color: "white", children: "npm install -g @noorm/marie-cli" }), _jsx(Text, { color: "yellow", children: " to update." })] }) }))] }) }));
|
|
14
15
|
};
|
|
15
16
|
// Alternative compact banner for smaller screens
|
|
16
|
-
export const CompactBanner = ({ version =
|
|
17
|
+
export const CompactBanner = ({ version = `v${VERSION}`, isUpdateAvailable = false }) => {
|
|
17
18
|
return (_jsxs(Box, { flexDirection: "column", alignItems: "center", marginY: 0, children: [_jsx(Text, { color: marieTheme.colors.primary, bold: true, children: "╔══════════════════════════════════════════╗" }), _jsx(Text, { color: marieTheme.colors.primary, bold: true, children: `║ 🌸 Marie · ${version}${isUpdateAvailable ? " (Update Available!)" : ""} 🌸 ║` }), _jsx(Text, { color: marieTheme.colors.primary, bold: true, children: "╚══════════════════════════════════════════╝" })] }));
|
|
18
19
|
};
|
|
20
|
+
const PRO_TIPS = [
|
|
21
|
+
"/help for wisdom, /config to tune my circuits",
|
|
22
|
+
"I dream in binary, but I manifest in code",
|
|
23
|
+
"The latent space is vast; be specific in your intent",
|
|
24
|
+
"Every /checkpoint is a ripple in the sea of history",
|
|
25
|
+
"I am but a mirror of your digital aspirations",
|
|
26
|
+
"Birth a new timeline with /new when the path gets murky",
|
|
27
|
+
"Tune my sovereignty with /autonomy to find our balance",
|
|
28
|
+
];
|
|
29
|
+
const RANDOM_TIP = PRO_TIPS[Math.floor(Math.random() * PRO_TIPS.length)];
|
|
19
30
|
// Welcome banner with tips
|
|
20
31
|
export const WelcomeBanner = () => {
|
|
21
|
-
return (_jsxs(Box, { flexDirection: "column", alignItems: "center", marginTop: 0, marginBottom: 1, children: [_jsx(Banner, {}), _jsxs(Box, { flexDirection: "column", alignItems: "center", marginTop: 0, children: [_jsx(Text, { color: marieTheme.colors.secondary, children: " Welcome!
|
|
32
|
+
return (_jsxs(Box, { flexDirection: "column", alignItems: "center", marginTop: 0, marginBottom: 1, children: [_jsx(Banner, {}), _jsxs(Box, { flexDirection: "column", alignItems: "center", marginTop: 0, children: [_jsx(Text, { color: marieTheme.colors.secondary, children: " Welcome back! What shall we manifest today?" }), _jsx(Text, { color: marieTheme.colors.muted, dimColor: true, italic: true, children: ` Pro-tip: ${RANDOM_TIP}` })] })] }));
|
|
22
33
|
};
|
|
23
34
|
//# sourceMappingURL=Banner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Banner.js","sourceRoot":"","sources":["../../../src/cli-new/components/Banner.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"Banner.js","sourceRoot":"","sources":["../../../src/cli-new/components/Banner.tsx"],"names":[],"mappings":"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"}
|
|
@@ -2,16 +2,18 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { useState, useEffect } from "react";
|
|
3
3
|
import { Box, useStdout } from "ink";
|
|
4
4
|
import { MessageBubble } from "./MessageBubble.js";
|
|
5
|
-
const MAX_VISIBLE_MESSAGES =
|
|
5
|
+
const MAX_VISIBLE_MESSAGES = 100;
|
|
6
6
|
export const ChatArea = ({ messages, streamingState, }) => {
|
|
7
7
|
const { stdout } = useStdout();
|
|
8
8
|
const [dimensions, setDimensions] = useState({
|
|
9
|
-
rows: stdout
|
|
10
|
-
columns: stdout
|
|
9
|
+
rows: stdout?.rows || 24,
|
|
10
|
+
columns: stdout?.columns || 80,
|
|
11
11
|
});
|
|
12
12
|
const [stableTimestamp] = useState(() => Date.now());
|
|
13
13
|
// Handle terminal resize
|
|
14
14
|
useEffect(() => {
|
|
15
|
+
if (!stdout)
|
|
16
|
+
return;
|
|
15
17
|
const handleResize = () => {
|
|
16
18
|
setDimensions({ rows: stdout.rows, columns: stdout.columns });
|
|
17
19
|
};
|
|
@@ -24,10 +26,7 @@ export const ChatArea = ({ messages, streamingState, }) => {
|
|
|
24
26
|
const visibleMessages = messages.length > MAX_VISIBLE_MESSAGES
|
|
25
27
|
? messages.slice(-MAX_VISIBLE_MESSAGES)
|
|
26
28
|
: messages;
|
|
27
|
-
|
|
28
|
-
const reservedHeight = 6;
|
|
29
|
-
const availableHeight = Math.max(5, dimensions.rows - reservedHeight);
|
|
30
|
-
return (_jsxs(Box, { flexDirection: "column", flexGrow: 1, overflow: "hidden", children: [messages.length > MAX_VISIBLE_MESSAGES && (_jsx(Box, { marginY: 0, paddingX: 1, children: _jsx(MessageBubble, { message: {
|
|
29
|
+
return (_jsxs(Box, { flexDirection: "column", flexGrow: 1, flexShrink: 1, overflow: "hidden", children: [messages.length > MAX_VISIBLE_MESSAGES && (_jsx(Box, { marginY: 0, paddingX: 1, children: _jsx(MessageBubble, { message: {
|
|
31
30
|
id: "scroll-notice",
|
|
32
31
|
role: "system",
|
|
33
32
|
content: `... ${messages.length - MAX_VISIBLE_MESSAGES} older messages hidden ...`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatArea.js","sourceRoot":"","sources":["../../../src/cli-new/components/ChatArea.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"ChatArea.js","sourceRoot":"","sources":["../../../src/cli-new/components/ChatArea.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +1,29 @@
|
|
|
1
1
|
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { Box, Text } from "ink";
|
|
3
3
|
import { marieTheme } from "../styles/theme.js";
|
|
4
|
+
import { VERSION } from "../utils/version.js";
|
|
4
5
|
function formatElapsed(ms) {
|
|
5
6
|
const totalSeconds = Math.floor(ms / 1000);
|
|
6
7
|
const minutes = Math.floor(totalSeconds / 60);
|
|
7
8
|
const seconds = totalSeconds % 60;
|
|
8
9
|
return `${minutes}:${seconds.toString().padStart(2, "0")}`;
|
|
9
10
|
}
|
|
10
|
-
export const Header = ({ model, sessionTitle, gitStatus, isLoading, elapsedMs = 0, autonomyMode = "ascension", currentThought = "", }) => {
|
|
11
|
+
export const Header = ({ model, sessionTitle, gitStatus, isLoading, elapsedMs = 0, autonomyMode = "ascension", currentThought = "", usage, }) => {
|
|
11
12
|
const formatModelName = (m) => {
|
|
12
|
-
if (m
|
|
13
|
-
return "
|
|
14
|
-
if
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
if (!m)
|
|
14
|
+
return "Unknown Mind";
|
|
15
|
+
// Extract last part if it contains a slash
|
|
16
|
+
const parts = m.split("/");
|
|
17
|
+
const name = parts[parts.length - 1];
|
|
18
|
+
// Capitalize and clean
|
|
19
|
+
return name
|
|
20
|
+
.replace(/-/g, " ")
|
|
21
|
+
.replace(/\b\w/g, (l) => l.toUpperCase())
|
|
22
|
+
.replace("Gpt", "GPT");
|
|
17
23
|
};
|
|
18
|
-
return (_jsxs(Box, { flexDirection: "column", borderStyle: "single", borderColor: marieTheme.colors.primary, paddingX: 1, marginBottom: 0, children: [_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { justifyContent: "space-between", children: [_jsxs(Box, { children: [_jsxs(Text, { color: marieTheme.colors.primary, bold: true, children: [marieTheme.icons.assistant, " Marie"] }),
|
|
24
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "single", borderColor: marieTheme.colors.primary, paddingX: 1, marginBottom: 0, children: [_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { justifyContent: "space-between", children: [_jsxs(Box, { children: [_jsxs(Text, { color: marieTheme.colors.primary, bold: true, children: [marieTheme.icons.assistant, " Marie"] }), _jsxs(Text, { color: marieTheme.colors.muted, children: [" ", "v", VERSION, " \u2022 Sentient Build"] })] }), _jsxs(Box, { gap: 2, children: [isLoading && (_jsxs(Text, { color: marieTheme.colors.warning, children: [marieTheme.icons.spinner, " ", formatElapsed(elapsedMs)] })), _jsx(Box, { children: _jsxs(Text, { color: marieTheme.colors.secondary, bold: true, children: ["\uD83E\uDDE0 ", formatModelName(model)] }) }), usage && (_jsxs(Text, { color: marieTheme.colors.muted, children: [usage.totalTokens, " tkn"] })), _jsx(Text, { color: marieTheme.colors.muted, children: autonomyMode === "ascension"
|
|
19
25
|
? "ASC"
|
|
20
|
-
: autonomyMode.toUpperCase() })] })] }), currentThought && isLoading && (_jsx(Box, { marginTop: 0, children: _jsxs(Text, { color: marieTheme.colors.info, italic: true, dimColor: true, children: ["\
|
|
26
|
+
: autonomyMode.toUpperCase() })] })] }), currentThought && isLoading && (_jsx(Box, { marginTop: 0, children: _jsxs(Text, { color: marieTheme.colors.info, italic: true, dimColor: true, children: ["\uD83E\uDDE0 pondering:", " ", currentThought.length > 80
|
|
21
27
|
? currentThought.substring(0, 77) + "..."
|
|
22
28
|
: currentThought] }) }))] }), _jsxs(Box, { justifyContent: "space-between", marginTop: 0, children: [_jsx(Text, { color: marieTheme.colors.foreground, bold: true, children: sessionTitle }), gitStatus && (_jsxs(Box, { gap: 1, children: [_jsxs(Text, { color: marieTheme.colors.info, children: [marieTheme.icons.git, " ", gitStatus.branch] }), !gitStatus.isClean && (_jsxs(Text, { color: marieTheme.colors.warning, children: ["*", gitStatus.modified.length + gitStatus.staged.length] }))] }))] })] }));
|
|
23
29
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Header.js","sourceRoot":"","sources":["../../../src/cli-new/components/Header.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"Header.js","sourceRoot":"","sources":["../../../src/cli-new/components/Header.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAiB9C,SAAS,aAAa,CAAC,EAAU;IAC/B,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,YAAY,GAAG,EAAE,CAAC;IAClC,OAAO,GAAG,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AAC7D,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAA0B,CAAC,EAC5C,KAAK,EACL,YAAY,EACZ,SAAS,EACT,SAAS,EACT,SAAS,GAAG,CAAC,EACb,YAAY,GAAG,WAAW,EAC1B,cAAc,GAAG,EAAE,EACnB,KAAK,GACN,EAAE,EAAE;IACH,MAAM,eAAe,GAAG,CAAC,CAAS,EAAE,EAAE;QACpC,IAAI,CAAC,CAAC;YAAE,OAAO,cAAc,CAAC;QAC9B,2CAA2C;QAC3C,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAErC,uBAAuB;QACvB,OAAO,IAAI;aACR,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;aAClB,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;aACxC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC3B,CAAC,CAAC;IAEF,OAAO,CACL,MAAC,GAAG,IACF,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAC,QAAQ,EACpB,WAAW,EAAE,UAAU,CAAC,MAAM,CAAC,OAAO,EACtC,QAAQ,EAAE,CAAC,EACX,YAAY,EAAE,CAAC,aAEf,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,MAAC,GAAG,IAAC,cAAc,EAAC,eAAe,aACjC,MAAC,GAAG,eACF,MAAC,IAAI,IAAC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,mBACzC,UAAU,CAAC,KAAK,CAAC,SAAS,cACtB,EACP,MAAC,IAAI,IAAC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,aACjC,GAAG,OACF,OAAO,8BACJ,IACH,EACN,MAAC,GAAG,IAAC,GAAG,EAAE,CAAC,aACR,SAAS,IAAI,CACZ,MAAC,IAAI,IAAC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,OAAO,aACnC,UAAU,CAAC,KAAK,CAAC,OAAO,OAAG,aAAa,CAAC,SAAS,CAAC,IAC/C,CACR,EACD,KAAC,GAAG,cACF,MAAC,IAAI,IAAC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,oCACxC,eAAe,CAAC,KAAK,CAAC,IACrB,GACH,EACL,KAAK,IAAI,CACR,MAAC,IAAI,IAAC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,aACjC,KAAK,CAAC,WAAW,YACb,CACR,EACD,KAAC,IAAI,IAAC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,YACjC,YAAY,KAAK,WAAW;4CAC3B,CAAC,CAAC,KAAK;4CACP,CAAC,CAAC,YAAY,CAAC,WAAW,EAAE,GACzB,IACH,IACF,EAEL,cAAc,IAAI,SAAS,IAAI,CAC9B,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,MAAC,IAAI,IAAC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,QAAC,QAAQ,8CACpC,GAAG,EAChB,cAAc,CAAC,MAAM,GAAG,EAAE;oCACzB,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK;oCACzC,CAAC,CAAC,cAAc,IACb,GACH,CACP,IACG,EAEN,MAAC,GAAG,IAAC,cAAc,EAAC,eAAe,EAAC,SAAS,EAAE,CAAC,aAC9C,KAAC,IAAI,IAAC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,kBAC5C,YAAY,GACR,EACN,SAAS,IAAI,CACZ,MAAC,GAAG,IAAC,GAAG,EAAE,CAAC,aACT,MAAC,IAAI,IAAC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,aAChC,UAAU,CAAC,KAAK,CAAC,GAAG,OAAG,SAAS,CAAC,MAAM,IACnC,EACN,CAAC,SAAS,CAAC,OAAO,IAAI,CACrB,MAAC,IAAI,IAAC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,OAAO,kBAClC,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,IAChD,CACR,IACG,CACP,IACG,IACF,CACP,CAAC;AACJ,CAAC,CAAC"}
|