@noorm/marie-cli 0.1.15 → 0.1.17
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/.marie_visual_verify_1771225696548/progress_bar_check.txt +1 -0
- package/SENTINEL.md +33 -0
- package/dist/cli-new/components/App.js +3 -1
- package/dist/cli-new/components/App.js.map +1 -1
- package/dist/cli-new/components/Banner.js +5 -5
- package/dist/cli-new/components/Banner.js.map +1 -1
- package/dist/cli-new/hooks/useUpdateCheck.js +17 -0
- package/dist/cli-new/hooks/useUpdateCheck.js.map +1 -0
- package/dist/domain/DomainEntity.js +7 -0
- package/dist/domain/DomainEntity.js.map +1 -0
- package/dist/extension.cjs +164 -154
- package/dist/extension.js +473 -0
- package/dist/extension.js.map +1 -0
- package/dist/infrastructure/BaseAdapter.js +3 -0
- package/dist/infrastructure/BaseAdapter.js.map +1 -0
- package/dist/monolith/cli/CliFileSystemPort.js +16 -8
- package/dist/monolith/cli/CliFileSystemPort.js.map +1 -1
- package/dist/monolith/cli/MarieToolDefinitionsCLI.js +9 -6
- package/dist/monolith/cli/MarieToolDefinitionsCLI.js.map +1 -1
- package/dist/monolith/cli/services/JoyAutomationServiceCLI.js +1 -1
- package/dist/monolith/cli/services/JoyAutomationServiceCLI.js.map +1 -1
- package/dist/monolith/infrastructure/ai/core/MarieEngine.js +29 -10
- package/dist/monolith/infrastructure/ai/core/MarieEngine.js.map +1 -1
- package/dist/monolith/infrastructure/ai/core/MarieToolProcessor.js +19 -13
- package/dist/monolith/infrastructure/ai/core/MarieToolProcessor.js.map +1 -1
- package/dist/monolith/infrastructure/ai/core/VscodeFileSystemPort.js +8 -8
- package/dist/monolith/infrastructure/ai/core/VscodeFileSystemPort.js.map +1 -1
- package/dist/monolith/infrastructure/config/ConfigService.js +2 -22
- package/dist/monolith/infrastructure/config/ConfigService.js.map +1 -1
- package/dist/monolith/infrastructure/joy/JoyTools.js +535 -0
- package/dist/monolith/infrastructure/joy/JoyTools.js.map +1 -0
- package/dist/monolith/infrastructure/tools/MarieToolDefinitions.js +14 -13
- package/dist/monolith/infrastructure/tools/MarieToolDefinitions.js.map +1 -1
- package/dist/monolith/plumbing/analysis/MarieSentinelService.js +23 -3
- package/dist/monolith/plumbing/analysis/MarieSentinelService.js.map +1 -1
- package/dist/monolith/plumbing/analysis/TestService.js +2 -1
- package/dist/monolith/plumbing/analysis/TestService.js.map +1 -1
- package/dist/monolith/plumbing/filesystem/FileService.js +22 -10
- package/dist/monolith/plumbing/filesystem/FileService.js.map +1 -1
- package/dist/monolith/plumbing/utils/EnvironmentUtils.js +59 -0
- package/dist/monolith/plumbing/utils/EnvironmentUtils.js.map +1 -0
- package/dist/monolith/plumbing/utils/MutexUtils.js +86 -0
- package/dist/monolith/plumbing/utils/MutexUtils.js.map +1 -0
- package/dist/monolith/runtime/MarieRuntime.js +250 -136
- package/dist/monolith/runtime/MarieRuntime.js.map +1 -1
- package/dist/monolith/runtime/RuntimeAdapterBase.js +6 -0
- package/dist/monolith/runtime/RuntimeAdapterBase.js.map +1 -1
- package/dist/monolith/services/JoyAutomationService.js +1 -1
- package/dist/monolith/services/JoyAutomationService.js.map +1 -1
- package/dist/monolith/services/JoyService.js +1 -1
- package/dist/monolith/services/JoyService.js.map +1 -1
- package/dist/monolith/services/UpdateService.js +61 -0
- package/dist/monolith/services/UpdateService.js.map +1 -0
- package/dist/plumbing/BaseTool.js +7 -0
- package/dist/plumbing/BaseTool.js.map +1 -0
- package/dist/prompts.js +90 -0
- package/dist/prompts.js.map +1 -0
- package/dist/test_agent_stream_control_plane.js +170 -0
- package/dist/test_agent_stream_control_plane.js.map +1 -0
- package/dist/test_content_buffer_cap.js +67 -0
- package/dist/test_content_buffer_cap.js.map +1 -0
- package/dist/test_prefix_tree.js +120 -0
- package/dist/test_prefix_tree.js.map +1 -0
- package/dist/test_retry_utils.js +169 -0
- package/dist/test_retry_utils.js.map +1 -0
- package/dist/test_strategy_integration.js +114 -0
- package/dist/test_strategy_integration.js.map +1 -0
- package/dist/test_streaming_fragility.js +191 -0
- package/dist/test_streaming_fragility.js.map +1 -0
- package/dist/webview-ui/App.js +16 -0
- package/dist/webview-ui/App.js.map +1 -0
- package/dist/webview-ui/Providers.js +6 -0
- package/dist/webview-ui/Providers.js.map +1 -0
- package/dist/webview-ui/components/ApprovalPanel.js +8 -0
- package/dist/webview-ui/components/ApprovalPanel.js.map +1 -0
- package/dist/webview-ui/components/ChatPanel.js +19 -0
- package/dist/webview-ui/components/ChatPanel.js.map +1 -0
- package/dist/webview-ui/components/Composer.js +19 -0
- package/dist/webview-ui/components/Composer.js.map +1 -0
- package/dist/webview-ui/components/HeaderBar.js +5 -0
- package/dist/webview-ui/components/HeaderBar.js.map +1 -0
- package/dist/webview-ui/components/SessionList.js +14 -0
- package/dist/webview-ui/components/SessionList.js.map +1 -0
- package/dist/webview-ui/context/WebviewStateContext.js +146 -0
- package/dist/webview-ui/context/WebviewStateContext.js.map +1 -0
- package/dist/webview-ui/main.css +1 -0
- package/dist/webview-ui/main.js +108 -0
- package/dist/webview-ui/main.js.map +1 -0
- package/dist/webview-ui/types.js +2 -0
- package/dist/webview-ui/types.js.map +1 -0
- package/dist/webview-ui/vscode.js +4 -0
- package/dist/webview-ui/vscode.js.map +1 -0
- package/lint_output.txt +705 -0
- package/lint_output_v2.txt +711 -0
- package/marie-coder-0.1.16.vsix +0 -0
- package/package.json +3 -10
- package/JOY_ZONING.md +0 -200
- package/dist/monolith/tests/FileAppendVerifyTest.js +0 -28
- package/dist/monolith/tests/FileAppendVerifyTest.js.map +0 -1
- package/dist/monolith/tests/StreamingVerifyTest.js +0 -100
- package/dist/monolith/tests/StreamingVerifyTest.js.map +0 -1
- package/dist/monolith/tests/VisualProgressTest.js +0 -86
- package/dist/monolith/tests/VisualProgressTest.js.map +0 -1
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@noorm/marie-cli",
|
|
3
3
|
"displayName": "MarieCoder",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.17",
|
|
5
5
|
"icon": "assets/icon.png",
|
|
6
6
|
"description": "A sentient AI pair programmer for your terminal",
|
|
7
7
|
"publisher": "DreamBeesAI",
|
|
@@ -14,16 +14,9 @@
|
|
|
14
14
|
"type": "git",
|
|
15
15
|
"url": "git+https://github.com/DreamBeesAI/Marie-Coder-New-the-vatican.git"
|
|
16
16
|
},
|
|
17
|
-
"files": [
|
|
18
|
-
"dist/cli-new",
|
|
19
|
-
"dist/monolith",
|
|
20
|
-
"README.md",
|
|
21
|
-
"LICENSE.md",
|
|
22
|
-
"JOY_ZONING.md"
|
|
23
|
-
],
|
|
24
17
|
"main": "dist/extension.cjs",
|
|
25
18
|
"engines": {
|
|
26
|
-
"vscode": "^1.
|
|
19
|
+
"vscode": "^1.95.0",
|
|
27
20
|
"node": ">=18.0.0"
|
|
28
21
|
},
|
|
29
22
|
"categories": [
|
|
@@ -144,7 +137,7 @@
|
|
|
144
137
|
"@types/node": "^20.0.0",
|
|
145
138
|
"@types/react": "^18.3.0",
|
|
146
139
|
"@types/react-dom": "^18.3.0",
|
|
147
|
-
"@types/vscode": "^1.
|
|
140
|
+
"@types/vscode": "^1.95.0",
|
|
148
141
|
"@typescript-eslint/eslint-plugin": "^8.55.0",
|
|
149
142
|
"@typescript-eslint/parser": "^8.55.0",
|
|
150
143
|
"@vscode/test-electron": "^2.5.1",
|
package/JOY_ZONING.md
DELETED
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
# Joy Zoning Protocol 🌸 (v5)
|
|
2
|
-
|
|
3
|
-
Non-joyful code is not a moral failure.
|
|
4
|
-
It is often necessary infrastructure, transitional work, or support plumbing.
|
|
5
|
-
|
|
6
|
-
Joy Zoning exists to protect clarity, reduce cognitive load, and preserve creative space.
|
|
7
|
-
The goal is containment—not shame.
|
|
8
|
-
|
|
9
|
-
## The Core Principle
|
|
10
|
-
|
|
11
|
-
**All code has a home.**
|
|
12
|
-
Code without a home becomes clutter.
|
|
13
|
-
|
|
14
|
-
We do not delete necessary complexity.
|
|
15
|
-
We name it, place it, and limit its spread.
|
|
16
|
-
|
|
17
|
-
## The Prime Directive
|
|
18
|
-
|
|
19
|
-
**Joyful zones must be defended.**
|
|
20
|
-
**Non-joyful zones must be honest.**
|
|
21
|
-
|
|
22
|
-
This protocol optimizes for long-term human comprehension, not short-term velocity.
|
|
23
|
-
|
|
24
|
-
## Zones (with Intent)
|
|
25
|
-
|
|
26
|
-
### 1. Joyful Code ✨
|
|
27
|
-
|
|
28
|
-
* **Purpose**: Expression and meaning
|
|
29
|
-
* **Question**: Is this the reason the system exists?
|
|
30
|
-
* **Location**: `src/domain/`, core application flows
|
|
31
|
-
|
|
32
|
-
**Characteristics**:
|
|
33
|
-
* Expressive
|
|
34
|
-
* Intentional
|
|
35
|
-
* Readable
|
|
36
|
-
|
|
37
|
-
**Constraints**:
|
|
38
|
-
* No adapters
|
|
39
|
-
* No glue
|
|
40
|
-
* No “just in case” logic
|
|
41
|
-
* No environment awareness
|
|
42
|
-
* No orchestration logic
|
|
43
|
-
* **Protected Zone**: Complexity must justify its presence
|
|
44
|
-
|
|
45
|
-
*Joyful code is where humans think. Guard it fiercely.*
|
|
46
|
-
|
|
47
|
-
### 2. Infrastructure 🏗️
|
|
48
|
-
|
|
49
|
-
* **Purpose**: Stability and coordination
|
|
50
|
-
* **Question**: Does this absorb complexity so the system stays calm?
|
|
51
|
-
* **Location**: `src/infrastructure/`
|
|
52
|
-
|
|
53
|
-
**Characteristics**:
|
|
54
|
-
* Heavy
|
|
55
|
-
* Necessary
|
|
56
|
-
* Emotionally flat
|
|
57
|
-
|
|
58
|
-
**Examples**:
|
|
59
|
-
* Config loaders
|
|
60
|
-
* AI clients
|
|
61
|
-
* Registries
|
|
62
|
-
* State bridges
|
|
63
|
-
* Dependency wiring
|
|
64
|
-
|
|
65
|
-
**Constraints**:
|
|
66
|
-
* Must terminate complexity
|
|
67
|
-
* Must not leak abstractions upward
|
|
68
|
-
* Must be replaceable without touching domain logic
|
|
69
|
-
* Should be boring to read
|
|
70
|
-
|
|
71
|
-
*Infrastructure exists so joyful code doesn’t have to care.*
|
|
72
|
-
|
|
73
|
-
### 3. Plumbing 🔧
|
|
74
|
-
|
|
75
|
-
* **Purpose**: Mechanical execution
|
|
76
|
-
* **Question**: Is this unavoidable work best treated as machinery?
|
|
77
|
-
* **Location**: `src/plumbing/`
|
|
78
|
-
|
|
79
|
-
**Characteristics**:
|
|
80
|
-
* Low-level
|
|
81
|
-
* Mechanical
|
|
82
|
-
* Replaceable
|
|
83
|
-
|
|
84
|
-
**Examples**:
|
|
85
|
-
* Filesystem I/O
|
|
86
|
-
* Git wrappers
|
|
87
|
-
* Shell execution
|
|
88
|
-
* Static analysis primitives
|
|
89
|
-
|
|
90
|
-
**Constraints**:
|
|
91
|
-
* Explicit boundaries
|
|
92
|
-
* Minimal surface area
|
|
93
|
-
* No domain knowledge
|
|
94
|
-
* No opinionated logic
|
|
95
|
-
* No lifecycle awareness
|
|
96
|
-
|
|
97
|
-
*Plumbing is respected, but never romanticized.*
|
|
98
|
-
|
|
99
|
-
## Dependency Law (Hard Rule) 📐
|
|
100
|
-
|
|
101
|
-
Dependencies may only flow downward.
|
|
102
|
-
|
|
103
|
-
| From \ To | Joyful | Infrastructure | Plumbing |
|
|
104
|
-
| :--- | :---: | :---: | :---: |
|
|
105
|
-
| **Joyful** | ✅ | ✅ | ❌ |
|
|
106
|
-
| **Infrastructure** | ❌ | ✅ | ✅ |
|
|
107
|
-
| **Plumbing** | ❌ | ❌ | ✅ |
|
|
108
|
-
|
|
109
|
-
**Rule**: If you violate this table, zoning has failed.
|
|
110
|
-
This rule exists to prevent conceptual backflow.
|
|
111
|
-
|
|
112
|
-
## Project Formation Rule 🧱
|
|
113
|
-
|
|
114
|
-
There are no generic buckets.
|
|
115
|
-
|
|
116
|
-
❌ `utils.ts`
|
|
117
|
-
❌ `helpers/`
|
|
118
|
-
|
|
119
|
-
✅ `filesystem/`
|
|
120
|
-
✅ `analysis/`
|
|
121
|
-
✅ `formatting/`
|
|
122
|
-
|
|
123
|
-
Every file belongs to a **Project** that explains what responsibility it owns.
|
|
124
|
-
If you cannot name the project, the code is not ready to exist.
|
|
125
|
-
|
|
126
|
-
## Lifecycle & Movement
|
|
127
|
-
|
|
128
|
-
Code is allowed—and expected—to move.
|
|
129
|
-
|
|
130
|
-
1. **Sprout → Joyful**: When intent becomes legible.
|
|
131
|
-
2. **Joyful → Infrastructure**: When patterns stabilize and repetition appears.
|
|
132
|
-
3. **Infrastructure → Plumbing**: When logic becomes mechanical or commoditized.
|
|
133
|
-
4. **Any → Compost**: When obsolete. Trust version control.
|
|
134
|
-
|
|
135
|
-
*Movement is maturity, not failure.*
|
|
136
|
-
|
|
137
|
-
## Pressure Valves 🔋
|
|
138
|
-
|
|
139
|
-
Pressure valves allow temporary disorder without dishonesty.
|
|
140
|
-
|
|
141
|
-
**Allowed**:
|
|
142
|
-
* Flat files
|
|
143
|
-
* TODOs with intent
|
|
144
|
-
* Unzoned drafts
|
|
145
|
-
|
|
146
|
-
**Rules**:
|
|
147
|
-
1. Must be acknowledged.
|
|
148
|
-
2. Must answer: “Where does this belong once it settles?”
|
|
149
|
-
3. Are not permanent homes.
|
|
150
|
-
|
|
151
|
-
*Pressure valves prevent premature abstraction and false cleanliness.*
|
|
152
|
-
|
|
153
|
-
## Agent & Automation Contract 🤖
|
|
154
|
-
|
|
155
|
-
When AI agents or automated tools interact with this codebase:
|
|
156
|
-
* Agents may observe and suggest, never enforce.
|
|
157
|
-
* Agents may flag heaviness, never moralize.
|
|
158
|
-
* Agents must prefer containment over refactor.
|
|
159
|
-
* Agents must not invent zones, projects, or abstractions without human approval.
|
|
160
|
-
* Agents must never optimize for “elegance” over placement.
|
|
161
|
-
|
|
162
|
-
*Agents assist judgment. They do not replace it.*
|
|
163
|
-
|
|
164
|
-
## Review & Maintenance Cadence (NEW) 📅
|
|
165
|
-
|
|
166
|
-
Joy Zoning is enforced continuously, lightly.
|
|
167
|
-
|
|
168
|
-
* **During development**: Ask “Where does this belong?”
|
|
169
|
-
* **During review**: Ask “Is this carrying the right amount of meaning?”
|
|
170
|
-
* **Periodically**: Relocate, don’t redesign.
|
|
171
|
-
|
|
172
|
-
*There are no “zoning sprints.” Tidying is part of normal work.*
|
|
173
|
-
|
|
174
|
-
## Reviewer Heuristics (Fast Checks)
|
|
175
|
-
|
|
176
|
-
* “Why does this live here?”
|
|
177
|
-
* “What zone would this fall into if it grew 3×?”
|
|
178
|
-
* “Is this protecting joyful code—or polluting it?”
|
|
179
|
-
* “Is this doing thinking it shouldn’t be doing?”
|
|
180
|
-
|
|
181
|
-
*If the answer feels fuzzy, pause. Do not invent abstractions to escape discomfort.*
|
|
182
|
-
|
|
183
|
-
## Failure Conditions (Explicit) 🚨
|
|
184
|
-
|
|
185
|
-
Joy Zoning has failed if it:
|
|
186
|
-
1. Becomes a gatekeeping tool.
|
|
187
|
-
2. Encourages hiding work.
|
|
188
|
-
3. Replaces judgment with ritual.
|
|
189
|
-
4. Rewards cleverness over clarity.
|
|
190
|
-
5. Lets agents override humans.
|
|
191
|
-
|
|
192
|
-
*When this happens, simplify the protocol, not the people.*
|
|
193
|
-
|
|
194
|
-
## Final Safeguard
|
|
195
|
-
|
|
196
|
-
This protocol exists to reduce suffering, not to increase purity.
|
|
197
|
-
|
|
198
|
-
Clarity is the goal.
|
|
199
|
-
Joy is the signal.
|
|
200
|
-
Humans are the authority.
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import * as fs from "fs";
|
|
2
|
-
import * as path from "path";
|
|
3
|
-
import { appendToFile } from "../plumbing/filesystem/FileService.js";
|
|
4
|
-
async function verifyFileAppend() {
|
|
5
|
-
const testFile = path.join(process.cwd(), "test_append.txt");
|
|
6
|
-
if (fs.existsSync(testFile))
|
|
7
|
-
fs.unlinkSync(testFile);
|
|
8
|
-
console.log(`Verifying appendToFile for: ${testFile}`);
|
|
9
|
-
let totalBytesAppended = 0;
|
|
10
|
-
const onProgress = (b) => {
|
|
11
|
-
totalBytesAppended += b;
|
|
12
|
-
console.log(`Progress: +${b} bytes (Total: ${totalBytesAppended})`);
|
|
13
|
-
};
|
|
14
|
-
await appendToFile(testFile, "Line 1\n", undefined, onProgress);
|
|
15
|
-
await appendToFile(testFile, "Line 2\n", undefined, onProgress);
|
|
16
|
-
const content = fs.readFileSync(testFile, "utf-8");
|
|
17
|
-
console.log(`Content:\n${content}`);
|
|
18
|
-
if (content !== "Line 1\nLine 2\n") {
|
|
19
|
-
throw new Error("File append verification failed!");
|
|
20
|
-
}
|
|
21
|
-
console.log("✅ File append verification successful!");
|
|
22
|
-
fs.unlinkSync(testFile);
|
|
23
|
-
}
|
|
24
|
-
verifyFileAppend().catch((err) => {
|
|
25
|
-
console.error("❌ Verification failed:", err);
|
|
26
|
-
process.exit(1);
|
|
27
|
-
});
|
|
28
|
-
//# sourceMappingURL=FileAppendVerifyTest.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FileAppendVerifyTest.js","sourceRoot":"","sources":["../../../src/monolith/tests/FileAppendVerifyTest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAErE,KAAK,UAAU,gBAAgB;IAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,iBAAiB,CAAC,CAAC;IAE7D,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAErD,OAAO,CAAC,GAAG,CAAC,+BAA+B,QAAQ,EAAE,CAAC,CAAC;IAEvD,IAAI,kBAAkB,GAAG,CAAC,CAAC;IAC3B,MAAM,UAAU,GAAG,CAAC,CAAS,EAAE,EAAE;QAC/B,kBAAkB,IAAI,CAAC,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,kBAAkB,kBAAkB,GAAG,CAAC,CAAC;IACtE,CAAC,CAAC;IAEF,MAAM,YAAY,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAChE,MAAM,YAAY,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAEhE,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,EAAE,CAAC,CAAC;IAEpC,IAAI,OAAO,KAAK,kBAAkB,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;IACtD,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC1B,CAAC;AAED,gBAAgB,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAC/B,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC;IAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import * as fs from "fs";
|
|
2
|
-
import * as path from "path";
|
|
3
|
-
import * as os from "os";
|
|
4
|
-
import { SessionLogService } from "../infrastructure/ai/core/SessionLogService.js";
|
|
5
|
-
import { CliFileSystemPort } from "../cli/CliFileSystemPort.js";
|
|
6
|
-
import { MarieProgressTracker } from "../infrastructure/ai/core/MarieProgressTracker.js";
|
|
7
|
-
import { MarieToolProcessor } from "../infrastructure/ai/core/MarieToolProcessor.js";
|
|
8
|
-
import { ToolRegistry } from "../infrastructure/tools/ToolRegistry.js";
|
|
9
|
-
import { registerSharedToolDefinitions } from "../infrastructure/tools/SharedToolDefinitions.js";
|
|
10
|
-
async function verifyStreaming() {
|
|
11
|
-
const workingDir = path.join(process.cwd(), `.marie_streaming_verify_${Date.now()}`);
|
|
12
|
-
fs.mkdirSync(workingDir, { recursive: true });
|
|
13
|
-
const sessionId = `test_streaming_${Date.now()}`;
|
|
14
|
-
const logService = new SessionLogService(sessionId);
|
|
15
|
-
console.log(`Starting streaming & persistence verification for session: ${sessionId}`);
|
|
16
|
-
const cliFs = new CliFileSystemPort(workingDir);
|
|
17
|
-
const registry = new ToolRegistry();
|
|
18
|
-
// Register shared tools
|
|
19
|
-
registerSharedToolDefinitions(registry, {
|
|
20
|
-
resolvePath: (p) => (path.isAbsolute(p) ? p : path.join(workingDir, p)),
|
|
21
|
-
writeFile: (p, c, s, onProgress) => cliFs.writeFile(p, c, s, onProgress),
|
|
22
|
-
appendFile: (p, c, s, onProgress) => cliFs.appendFile(p, c, s, onProgress),
|
|
23
|
-
readFile: (p, s, e, sig) => cliFs.readFile(p, sig),
|
|
24
|
-
listDir: (p, sig) => Promise.resolve(""),
|
|
25
|
-
grepSearch: (q, p, sig) => Promise.resolve(""),
|
|
26
|
-
getGitContext: () => Promise.resolve(""),
|
|
27
|
-
});
|
|
28
|
-
const emittedEvents = [];
|
|
29
|
-
const tracker = new MarieProgressTracker({
|
|
30
|
-
onEvent: async (e) => {
|
|
31
|
-
emittedEvents.push(e);
|
|
32
|
-
await logService.appendEvent(e);
|
|
33
|
-
},
|
|
34
|
-
}, {
|
|
35
|
-
runId: "streaming_run",
|
|
36
|
-
startedAt: Date.now(),
|
|
37
|
-
steps: 0,
|
|
38
|
-
tools: 0,
|
|
39
|
-
objectives: [],
|
|
40
|
-
achieved: [],
|
|
41
|
-
});
|
|
42
|
-
const processor = new MarieToolProcessor(registry, tracker, async () => true, {
|
|
43
|
-
spiritPressure: 100,
|
|
44
|
-
toolHistory: [],
|
|
45
|
-
techniqueExecutions: [],
|
|
46
|
-
mood: "CAUTIOUS",
|
|
47
|
-
errorHotspots: {},
|
|
48
|
-
totalErrorCount: 0,
|
|
49
|
-
victoryStreak: 0,
|
|
50
|
-
}, cliFs);
|
|
51
|
-
// Large content (>16KB to trigger chunking)
|
|
52
|
-
const totalSize = 50000;
|
|
53
|
-
const largeContent = "S".repeat(totalSize);
|
|
54
|
-
const filePath = path.join(workingDir, "streaming_test.txt");
|
|
55
|
-
console.log("Executing write_to_file with 50KB content...");
|
|
56
|
-
const result = await processor.process({
|
|
57
|
-
id: "call_streaming",
|
|
58
|
-
name: "write_to_file",
|
|
59
|
-
input: { path: filePath, content: largeContent },
|
|
60
|
-
});
|
|
61
|
-
console.log(`Tool Result: ${result}`);
|
|
62
|
-
// Verify events
|
|
63
|
-
const deltas = emittedEvents.filter((e) => e.type === "file_stream_delta");
|
|
64
|
-
console.log(`Verification: ${deltas.length} file_stream_delta events emitted.`);
|
|
65
|
-
if (deltas.length < 2) {
|
|
66
|
-
throw new Error(`Insufficient streaming deltas! Expected > 1, got ${deltas.length}`);
|
|
67
|
-
}
|
|
68
|
-
const lastDelta = deltas[deltas.length - 1];
|
|
69
|
-
if (lastDelta.bytesWritten !== totalSize ||
|
|
70
|
-
lastDelta.totalBytes !== totalSize) {
|
|
71
|
-
throw new Error(`Final delta mismatch! Expected ${totalSize} bytes, got ${lastDelta.bytesWritten}`);
|
|
72
|
-
}
|
|
73
|
-
// Verify stage was changed to "editing"
|
|
74
|
-
const stages = emittedEvents.filter((e) => e.type === "stage" && e.stage === "editing");
|
|
75
|
-
if (stages.length === 0) {
|
|
76
|
-
throw new Error("Missing 'editing' stage event!");
|
|
77
|
-
}
|
|
78
|
-
console.log(`Verification: 'editing' stage detected correctly.`);
|
|
79
|
-
// Verify persistence
|
|
80
|
-
const logPath = path.join(os.homedir(), ".marie", "logs", "sessions", `${sessionId}.jsonl`);
|
|
81
|
-
const logContent = fs.readFileSync(logPath, "utf-8");
|
|
82
|
-
const logLines = logContent.trim().split("\n");
|
|
83
|
-
console.log(`Log Content Check: ${logLines.length} lines persisted.`);
|
|
84
|
-
if (logLines.length === 0) {
|
|
85
|
-
throw new Error("Log file is empty!");
|
|
86
|
-
}
|
|
87
|
-
const recoveredEvents = logLines.map((l) => JSON.parse(l));
|
|
88
|
-
const persistedDeltas = recoveredEvents.filter((e) => e.type === "file_stream_delta");
|
|
89
|
-
if (persistedDeltas.length !== deltas.length) {
|
|
90
|
-
throw new Error(`Persistence mismatch! Expected ${deltas.length} deltas, got ${persistedDeltas.length}`);
|
|
91
|
-
}
|
|
92
|
-
console.log("✅ Granular file streaming & high-integrity persistence verified!");
|
|
93
|
-
// Cleanup
|
|
94
|
-
fs.rmSync(workingDir, { recursive: true, force: true });
|
|
95
|
-
}
|
|
96
|
-
verifyStreaming().catch((err) => {
|
|
97
|
-
console.error("❌ Verification FAILED:", err);
|
|
98
|
-
process.exit(1);
|
|
99
|
-
});
|
|
100
|
-
//# sourceMappingURL=StreamingVerifyTest.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"StreamingVerifyTest.js","sourceRoot":"","sources":["../../../src/monolith/tests/StreamingVerifyTest.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import * as fs from "fs";
|
|
2
|
-
import * as path from "path";
|
|
3
|
-
import { CliFileSystemPort } from "../cli/CliFileSystemPort.js";
|
|
4
|
-
import { MarieProgressTracker } from "../infrastructure/ai/core/MarieProgressTracker.js";
|
|
5
|
-
import { MarieToolProcessor } from "../infrastructure/ai/core/MarieToolProcessor.js";
|
|
6
|
-
import { ToolRegistry } from "../infrastructure/tools/ToolRegistry.js";
|
|
7
|
-
import { registerSharedToolDefinitions } from "../infrastructure/tools/SharedToolDefinitions.js";
|
|
8
|
-
async function verifyVisualProgressBar() {
|
|
9
|
-
console.log("Starting Visual Progress Bar Verification...");
|
|
10
|
-
const workingDir = path.join(process.cwd(), `.marie_visual_verify_${Date.now()}`);
|
|
11
|
-
fs.mkdirSync(workingDir, { recursive: true });
|
|
12
|
-
const cliFs = new CliFileSystemPort(workingDir);
|
|
13
|
-
const registry = new ToolRegistry();
|
|
14
|
-
// Register only the shared tools we need for testing
|
|
15
|
-
registerSharedToolDefinitions(registry, {
|
|
16
|
-
resolvePath: (p) => (path.isAbsolute(p) ? p : path.join(workingDir, p)),
|
|
17
|
-
writeFile: (p, c, s, onProgress) => cliFs.writeFile(p, c, s, onProgress),
|
|
18
|
-
appendFile: (p, c, s, onProgress) => cliFs.appendFile(p, c, s, onProgress),
|
|
19
|
-
readFile: (p, s, e, sig) => cliFs.readFile(p, sig),
|
|
20
|
-
listDir: (p, sig) => Promise.resolve(""),
|
|
21
|
-
grepSearch: (q, p, sig) => Promise.resolve(""),
|
|
22
|
-
getGitContext: () => Promise.resolve(""),
|
|
23
|
-
});
|
|
24
|
-
const eventLogs = [];
|
|
25
|
-
const tracker = new MarieProgressTracker({
|
|
26
|
-
onEvent: (e) => {
|
|
27
|
-
if (e.type === "file_stream_delta") {
|
|
28
|
-
eventLogs.push(e);
|
|
29
|
-
// MOCK THE CLI RENDERER LOGIC HERE
|
|
30
|
-
if (e.totalBytes) {
|
|
31
|
-
const pct = Math.round((e.bytesWritten / e.totalBytes) * 100);
|
|
32
|
-
const barWidth = 10;
|
|
33
|
-
const completed = Math.round((barWidth * pct) / 100);
|
|
34
|
-
const bar = "=".repeat(completed) +
|
|
35
|
-
">" +
|
|
36
|
-
" ".repeat(Math.max(0, barWidth - completed));
|
|
37
|
-
const fileName = e.path.split("/").pop();
|
|
38
|
-
console.log(`[CLI MOCK] Writing ${fileName} [${bar}] ${pct}% (${e.bytesWritten}/${e.totalBytes})`);
|
|
39
|
-
}
|
|
40
|
-
else {
|
|
41
|
-
console.log(`[CLI MOCK] Writing... (No totalBytes)`);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
},
|
|
45
|
-
}, {
|
|
46
|
-
runId: "verify_visual_run",
|
|
47
|
-
startedAt: Date.now(),
|
|
48
|
-
steps: 0,
|
|
49
|
-
tools: 0,
|
|
50
|
-
objectives: [],
|
|
51
|
-
achieved: [],
|
|
52
|
-
});
|
|
53
|
-
const processor = new MarieToolProcessor(registry, tracker, async () => true, {
|
|
54
|
-
spiritPressure: 100,
|
|
55
|
-
toolHistory: [],
|
|
56
|
-
techniqueExecutions: [],
|
|
57
|
-
mood: "CAUTIOUS",
|
|
58
|
-
errorHotspots: {},
|
|
59
|
-
totalErrorCount: 0,
|
|
60
|
-
victoryStreak: 0,
|
|
61
|
-
}, cliFs);
|
|
62
|
-
// Large content (>16KB to trigger chunking)
|
|
63
|
-
const totalSize = 50000;
|
|
64
|
-
const largeContent = "X".repeat(totalSize);
|
|
65
|
-
const filePath = path.join(workingDir, "progress_bar_check.txt");
|
|
66
|
-
console.log("Executing write_to_file with large content...");
|
|
67
|
-
await processor.process({
|
|
68
|
-
id: "call_visual",
|
|
69
|
-
name: "write_to_file",
|
|
70
|
-
input: { path: filePath, content: largeContent },
|
|
71
|
-
});
|
|
72
|
-
console.log(`Verification Results:`);
|
|
73
|
-
const hasTotalBytes = eventLogs.every((e) => e.totalBytes === totalSize);
|
|
74
|
-
console.log(`- All events have correct totalBytes (${totalSize}): ${hasTotalBytes ? "✅" : "❌"}`);
|
|
75
|
-
if (!hasTotalBytes) {
|
|
76
|
-
throw new Error("Events missing correct totalBytes!");
|
|
77
|
-
}
|
|
78
|
-
console.log("✅ Visual Progress Bar logic verified!");
|
|
79
|
-
// Cleanup
|
|
80
|
-
fs.rmSync(workingDir, { recursive: true, force: true });
|
|
81
|
-
}
|
|
82
|
-
verifyVisualProgressBar().catch((err) => {
|
|
83
|
-
console.error("❌ Verification FAILED:", err);
|
|
84
|
-
process.exit(1);
|
|
85
|
-
});
|
|
86
|
-
//# sourceMappingURL=VisualProgressTest.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"VisualProgressTest.js","sourceRoot":"","sources":["../../../src/monolith/tests/VisualProgressTest.ts"],"names":[],"mappings":"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"}
|