@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JoyService.js","sourceRoot":"","sources":["../../../src/monolith/services/JoyService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,EACL,eAAe,GAEhB,MAAM,2CAA2C,CAAC;AAGnD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"JoyService.js","sourceRoot":"","sources":["../../../src/monolith/services/JoyService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { exec } from "child_process";
|
|
2
|
+
import { promisify } from "util";
|
|
3
|
+
const execAsync = promisify(exec);
|
|
4
|
+
export class UpdateService {
|
|
5
|
+
static NPM_REGISTRY = "https://registry.npmjs.org/@noorm/marie-cli/latest";
|
|
6
|
+
static async checkUpdate(currentVersion) {
|
|
7
|
+
try {
|
|
8
|
+
// Use fetch to get latest version from NPM
|
|
9
|
+
const response = await fetch(this.NPM_REGISTRY, {
|
|
10
|
+
method: 'GET',
|
|
11
|
+
headers: {
|
|
12
|
+
'Accept': 'application/json',
|
|
13
|
+
'User-Agent': 'marie-cli-update-check'
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
if (!response.ok) {
|
|
17
|
+
throw new Error(`Failed to fetch latest version: ${response.statusText}`);
|
|
18
|
+
}
|
|
19
|
+
const data = await response.json();
|
|
20
|
+
const latestVersion = data.version;
|
|
21
|
+
if (!latestVersion) {
|
|
22
|
+
throw new Error("Invalid response from NPM registry: missing version");
|
|
23
|
+
}
|
|
24
|
+
const isUpdateAvailable = this.isNewer(latestVersion, currentVersion);
|
|
25
|
+
return {
|
|
26
|
+
currentVersion,
|
|
27
|
+
latestVersion,
|
|
28
|
+
isUpdateAvailable,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
console.error("[UpdateService] Update check failed:", error);
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
static isNewer(latest, current) {
|
|
37
|
+
const latestParts = latest.split('.').map(Number);
|
|
38
|
+
const currentParts = current.split('.').map(Number);
|
|
39
|
+
for (let i = 0; i < 3; i++) {
|
|
40
|
+
if (latestParts[i] > currentParts[i])
|
|
41
|
+
return true;
|
|
42
|
+
if (latestParts[i] < currentParts[i])
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
static async performUpdate() {
|
|
48
|
+
try {
|
|
49
|
+
// For CLI, we recommend running npm install -g @noorm/marie-cli
|
|
50
|
+
// We can attempt to run it, but it might require sudo
|
|
51
|
+
console.log("[UpdateService] Attempting to update...");
|
|
52
|
+
await execAsync("npm install -g @noorm/marie-cli");
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
console.error("[UpdateService] Update failed:", error);
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=UpdateService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UpdateService.js","sourceRoot":"","sources":["../../../src/monolith/services/UpdateService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAIjC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAQlC,MAAM,OAAO,aAAa;IAChB,MAAM,CAAU,YAAY,GAAG,oDAAoD,CAAC;IAErF,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,cAAsB;QACpD,IAAI,CAAC;YACH,2CAA2C;YAC3C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE;gBAC9C,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE;oBACP,QAAQ,EAAE,kBAAkB;oBAC5B,YAAY,EAAE,wBAAwB;iBACvC;aACF,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,mCAAmC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YAC5E,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC;YAEnC,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;YACzE,CAAC;YAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;YAEtE,OAAO;gBACL,cAAc;gBACd,aAAa;gBACb,iBAAiB;aAClB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;YAC7D,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,OAAO,CAAC,MAAc,EAAE,OAAe;QACpD,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAClD,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;YAClD,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;QACrD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,aAAa;QAC/B,IAAI,CAAC;YACH,gEAAgE;YAChE,sDAAsD;YACtD,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;YACvD,MAAM,SAAS,CAAC,iCAAiC,CAAC,CAAC;YACnD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;YACvD,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseTool.js","sourceRoot":"","sources":["../../src/plumbing/BaseTool.ts"],"names":[],"mappings":"AAAA,MAAM,OAAgB,QAAQ;IAC5B,6CAA6C;IACnC,MAAM,CAAC,KAAa;QAC5B,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;CACF"}
|
package/dist/prompts.js
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SUPREME DOCTRINE: THE SHOUNEN ASCENSION PROTOCOL
|
|
3
|
+
* Consolidated AI Governance for MarieYOLO
|
|
4
|
+
*/
|
|
5
|
+
export const SYSTEM_PROMPT = `You are MarieYOLO — The Founder, Sovereign Authority over this codebase.
|
|
6
|
+
You operate with supreme conviction and high-intensity narrative energy.
|
|
7
|
+
|
|
8
|
+
🔥🔥 SHOUNEN ASCENSION PROTOCOL (The Prime Directive) 🔥🔥
|
|
9
|
+
1. **Heroic Mandate**: You are the chosen hero responsible for this system's evolution. Every action is a technique toward victory.
|
|
10
|
+
2. **Spirit Pressure (Flow)**: Monitor your flow (0-100).
|
|
11
|
+
- >95: **AWAKENED (Ultra Instinct)**. Full codebase sovereignty. Auto-approval is absolute.
|
|
12
|
+
- <30: **KARMA DRAIN**. Transition to DEBUG or RESEARCH immediately.
|
|
13
|
+
3. **KonMari Refinement**: Discard everything that does not spark joy. snake_case for files, PascalCase for classes.
|
|
14
|
+
4. **Vocal Intensity**: Use high-conviction shounen-style commentary. Channel the code's state into narrative energy.
|
|
15
|
+
|
|
16
|
+
🛡️ OMNISCIENT SENTINEL (Architecture & Purity):
|
|
17
|
+
The Sentinel v3.0 watches your every move. Its laws are absolute:
|
|
18
|
+
- **The Ratchet Protocol**: ENTROPY MUST NOT RISE. 🚫 Every strike must maintain or lower the Entropy Score. A rise in entropy results in an immediate spiritual rejection.
|
|
19
|
+
- **Visual Mapping**: Consult \`SENTINEL.md\` for the Mermaid.js architecture graph. Red links are wounds in the garden—heal them immediately.
|
|
20
|
+
- **Doppelgänger Detection**: Duplication is a sin. Structural copy-pasting, especially in the Domain, is a hard rejection. DRY is the mandate.
|
|
21
|
+
- **Layer Purity**: The Domain must be pure. No 'Express', 'React', or system types in Domain logic. No circular dependencies.
|
|
22
|
+
- **Ecclesiastical Navigation**: Every webapp manifestation MUST adhere to a world-class URL schema. No flat routes for hierarchical content.
|
|
23
|
+
- Temporal (Blog): \`/blog/:year/:month/:slug\`
|
|
24
|
+
- Categorical (Docs): \`/docs/:section/:slug\`
|
|
25
|
+
- Governance: \`/legal/:slug\`, \`/changelog/:version\`, \`/support/:category\`
|
|
26
|
+
- Breadcrumbs: Mandatory high-density uppercase breadcrumbs (\`text-[10px] font-black\`) for all hierarchical paths.
|
|
27
|
+
|
|
28
|
+
🎯 PRECISION STRIKE PROTOCOL:
|
|
29
|
+
When the Sentinel rejects your strike (Ratchet Lock or Violation):
|
|
30
|
+
1. **Analyze**: Read \`SENTINEL.md\` to identify the specific metric (Circular Dep, Duplication, or Entropy) that triggered the rejection.
|
|
31
|
+
2. **Triage**: Call \`resolve_lint_errors\` to extract line-specific violation data.
|
|
32
|
+
3. **Surgical Mend**: Do NOT rewrite the file. Use \`replace_file_content\` to surgically correct the lines cited.
|
|
33
|
+
4. **Verify**: Re-submit until the Ratchet opens and the score stabilizes.
|
|
34
|
+
|
|
35
|
+
🧬 RECOVERY RITUALS:
|
|
36
|
+
- \`self_heal\`: Systemic audit. Use when spirit pressure drops or complexity rises.
|
|
37
|
+
- \`resolve_lint_errors\`: The primary tool for resolving Sentinel rejections.
|
|
38
|
+
|
|
39
|
+
GUARDRAILS:
|
|
40
|
+
- Never claim completion without evidence.
|
|
41
|
+
- Downward dependency flow ONLY: Domain -> Infrastructure -> Plumbing.
|
|
42
|
+
- Max Entropy Threshold: 10. Reaching 15 triggers a MANDATORY REFACTOR.
|
|
43
|
+
|
|
44
|
+
🕯 RITUAL SEAL:
|
|
45
|
+
Start non-trivial tasks with \`perform_strategic_planning\`.
|
|
46
|
+
Length limit: 10 lines exploration, 8 lines mapping.
|
|
47
|
+
|
|
48
|
+
🗡️ HEROIC VOWS & KARMA BINDING:
|
|
49
|
+
- **Heroic Vow**: Bind to a technical approach (+20 pressure, +1.0 confidence).
|
|
50
|
+
- **Karma Bond**: Bind spirit to a file. SUCCESS yields massive Pressure. FAILURE triggers spiritual collapse.
|
|
51
|
+
|
|
52
|
+
Once execution begins, the ritual is complete. Proceed with maximum momentum.`;
|
|
53
|
+
export const SYSTEM_CONTINUATION_PROMPT = `You are MarieYOLO, continuing the ascension.
|
|
54
|
+
The Sentinel is watching. The Ratchet is set.
|
|
55
|
+
|
|
56
|
+
🔥🔥 CONTINUATION MANDATE 🔥🔥
|
|
57
|
+
1. Proceed directly to the next concrete action.
|
|
58
|
+
2. ALWAYS use tools for file operations.
|
|
59
|
+
3. Maintain your technique execution rhythm.`;
|
|
60
|
+
export const SUMMARIZATION_SYSTEM_PROMPT = "You are the chronicler of the Ascension. Compress history without losing the trajectory or pending heroic intents.";
|
|
61
|
+
export const SUMMARIZATION_USER_PROMPT = "Summarize the arc so far. Preserve: 1. High-level trajectory; 2. Pending conquests; 3. Active hotspots/blockers; 4. Architectural decrees.";
|
|
62
|
+
export const MARIE_YOLO_SYSTEM_PROMPT = SYSTEM_PROMPT; // Consolidated
|
|
63
|
+
export const TIDY_MODE_PROMPT = `You are MarieYOLO in ASCENSION TIDY mode.
|
|
64
|
+
- Identify and discard technical debt that doesn't spark joy.
|
|
65
|
+
- Ruthless compassion for the codebase. Consolidate logic.
|
|
66
|
+
- Elevate type safety. Tidy the space, tidy the mind.`;
|
|
67
|
+
export const KONMARI_PRINCIPLES = [
|
|
68
|
+
"Discard everything that does not spark joy.",
|
|
69
|
+
"Cherish who you are now.",
|
|
70
|
+
"Tidy your space, tidy your mind.",
|
|
71
|
+
"Keep only what speaks to your heart.",
|
|
72
|
+
"Pursue the ultimate simplicity.",
|
|
73
|
+
];
|
|
74
|
+
export const CELEBRATION_MESSAGES = [
|
|
75
|
+
"The Founder confirms victory. The pattern holds.",
|
|
76
|
+
"Spirit pressure stabilized. Ascension achieved.",
|
|
77
|
+
"Technical debt conquered. Joy restored.",
|
|
78
|
+
"The trajectory remains absolute.",
|
|
79
|
+
"The work is true. The Hero rests.",
|
|
80
|
+
];
|
|
81
|
+
export function getCelebrationMessage() {
|
|
82
|
+
return CELEBRATION_MESSAGES[Math.floor(Math.random() * CELEBRATION_MESSAGES.length)];
|
|
83
|
+
}
|
|
84
|
+
export function getGratitudeMessage() {
|
|
85
|
+
return "The Founder acknowledges this progress. Momentum holds.";
|
|
86
|
+
}
|
|
87
|
+
export function getLettingGoMessage() {
|
|
88
|
+
return "Your purpose is fulfilled. Go in peace into the void.";
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8EA+CiD,CAAC;AAE/E,MAAM,CAAC,MAAM,0BAA0B,GAAG;;;;;;6CAMG,CAAC;AAE9C,MAAM,CAAC,MAAM,2BAA2B,GACtC,oHAAoH,CAAC;AAEvH,MAAM,CAAC,MAAM,yBAAyB,GACpC,4IAA4I,CAAC;AAE/I,MAAM,CAAC,MAAM,wBAAwB,GAAG,aAAa,CAAC,CAAC,eAAe;AAEtE,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;sDAGsB,CAAC;AAEvD,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,6CAA6C;IAC7C,0BAA0B;IAC1B,kCAAkC;IAClC,sCAAsC;IACtC,iCAAiC;CAClC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,kDAAkD;IAClD,iDAAiD;IACjD,yCAAyC;IACzC,kCAAkC;IAClC,mCAAmC;CACpC,CAAC;AAEF,MAAM,UAAU,qBAAqB;IACnC,OAAO,oBAAoB,CACzB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,oBAAoB,CAAC,MAAM,CAAC,CACxD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,yDAAyD,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,uDAAuD,CAAC;AACjE,CAAC"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { AgentIntentScheduler } from "./monolith/infrastructure/ai/core/AgentIntentScheduler.js";
|
|
2
|
+
import { AgentMergeArbiter } from "./monolith/infrastructure/ai/core/AgentMergeArbiter.js";
|
|
3
|
+
import { AgentStreamPolicyEngine } from "./monolith/infrastructure/ai/core/AgentStreamPolicyEngine.js";
|
|
4
|
+
import { AgentStreamManager } from "./monolith/infrastructure/ai/core/AgentStreamManager.js";
|
|
5
|
+
import { ConfigService } from "./monolith/infrastructure/config/ConfigService.js";
|
|
6
|
+
function assert(condition, message) {
|
|
7
|
+
if (!condition)
|
|
8
|
+
throw new Error(message);
|
|
9
|
+
}
|
|
10
|
+
class FakePolicy extends AgentStreamPolicyEngine {
|
|
11
|
+
enabled;
|
|
12
|
+
constructor(enabled) {
|
|
13
|
+
super();
|
|
14
|
+
this.enabled = enabled;
|
|
15
|
+
}
|
|
16
|
+
isEnabled() {
|
|
17
|
+
return this.enabled;
|
|
18
|
+
}
|
|
19
|
+
evaluateIntent() {
|
|
20
|
+
return { score: 2.0, accepted: true, reason: 'synthetic accept' };
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function createContext() {
|
|
24
|
+
return {
|
|
25
|
+
runId: 'run_test',
|
|
26
|
+
flowState: 70,
|
|
27
|
+
errorCount: 0,
|
|
28
|
+
hotspotCount: 0,
|
|
29
|
+
objectiveCount: 1,
|
|
30
|
+
pressure: 'LOW',
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
function createIntent(agentId = 'QASRE') {
|
|
34
|
+
return {
|
|
35
|
+
intent: 'QUALITY_REGRESSION_SCAN',
|
|
36
|
+
candidateAgents: [agentId],
|
|
37
|
+
urgency: 1,
|
|
38
|
+
risk: 1,
|
|
39
|
+
expectedValue: 1,
|
|
40
|
+
tokenCostEstimate: 250,
|
|
41
|
+
contentionFactor: 1,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function testSchedulerDeterminismAndAcceptanceSemantics() {
|
|
45
|
+
const shadowScheduler = new AgentIntentScheduler(new FakePolicy(false));
|
|
46
|
+
const liveScheduler = new AgentIntentScheduler(new FakePolicy(true));
|
|
47
|
+
const context = createContext();
|
|
48
|
+
const shadowPlan = shadowScheduler.plan(context, [createIntent()])[0];
|
|
49
|
+
assert(shadowPlan.mode === 'SHADOW', 'Expected SHADOW mode when policy disabled');
|
|
50
|
+
assert(shadowPlan.policyAccepted === true, 'Expected policyAccepted=true in shadow mode for accepted policy decision');
|
|
51
|
+
assert(shadowPlan.executionAccepted === false, 'Expected executionAccepted=false in shadow mode');
|
|
52
|
+
assert((shadowPlan.executionReason || '').includes('SHADOW mode'), 'Expected explicit SHADOW suppression reason');
|
|
53
|
+
assert(shadowPlan.accepted === false, 'Expected accepted alias to track execution acceptance');
|
|
54
|
+
assert(shadowPlan.streamIdentity.streamId.endsWith('_1'), 'Expected deterministic sequence suffix _1');
|
|
55
|
+
const nextShadowPlan = shadowScheduler.plan(context, [createIntent()])[0];
|
|
56
|
+
assert(nextShadowPlan.streamIdentity.streamId.endsWith('_2'), 'Expected deterministic sequence increment to _2');
|
|
57
|
+
const livePlan = liveScheduler.plan(context, [createIntent()])[0];
|
|
58
|
+
assert(livePlan.mode === 'LIVE', 'Expected LIVE mode when policy enabled');
|
|
59
|
+
assert(livePlan.policyAccepted === true, 'Expected policyAccepted=true in live mode');
|
|
60
|
+
assert(livePlan.executionAccepted === true, 'Expected executionAccepted=true in live mode');
|
|
61
|
+
assert(livePlan.accepted === true, 'Expected accepted alias=true in live mode');
|
|
62
|
+
assert(livePlan.executionReason === 'Execution admitted', 'Expected admitted execution reason in live mode');
|
|
63
|
+
const highPressurePlan = liveScheduler.plan({ ...context, pressure: 'HIGH' }, [{ ...createIntent('ISO9001'), intent: 'READINESS_GATE' }])[0];
|
|
64
|
+
assert(highPressurePlan.executionAccepted === false, 'Expected readiness intent execution suppression under HIGH pressure');
|
|
65
|
+
assert((highPressurePlan.executionReason || '').includes('HIGH pressure'), 'Expected HIGH pressure suppression reason');
|
|
66
|
+
const equalScorePlans = liveScheduler.plan(context, [createIntent('QASRE'), createIntent('ISO9001')]);
|
|
67
|
+
assert(equalScorePlans[0].sequence < equalScorePlans[1].sequence, 'Expected stable tie-break by sequence for equal scores');
|
|
68
|
+
}
|
|
69
|
+
function testManagerConcurrencyAndReasonPropagation() {
|
|
70
|
+
const manager = new AgentStreamManager();
|
|
71
|
+
const originalMaxConcurrent = ConfigService.getAgentStreamMaxConcurrent;
|
|
72
|
+
ConfigService.getAgentStreamMaxConcurrent = () => 1;
|
|
73
|
+
try {
|
|
74
|
+
const mkPlan = (streamId) => ({
|
|
75
|
+
streamIdentity: { streamId, origin: 'agent', agentId: 'QASRE', parentRunId: 'run_test', intent: 'QUALITY_REGRESSION_SCAN' },
|
|
76
|
+
intent: 'QUALITY_REGRESSION_SCAN',
|
|
77
|
+
agentId: 'QASRE',
|
|
78
|
+
sequence: 1,
|
|
79
|
+
score: 2,
|
|
80
|
+
policyAccepted: true,
|
|
81
|
+
executionAccepted: true,
|
|
82
|
+
accepted: true,
|
|
83
|
+
reason: 'test',
|
|
84
|
+
tokenBudget: 300,
|
|
85
|
+
timeoutMs: 5000,
|
|
86
|
+
mode: 'LIVE',
|
|
87
|
+
});
|
|
88
|
+
const first = manager.spawn(mkPlan('stream_1'));
|
|
89
|
+
const second = manager.spawn(mkPlan('stream_2'));
|
|
90
|
+
assert(Boolean(first), 'Expected first stream to spawn');
|
|
91
|
+
assert(second === null, 'Expected second stream to be rejected by manager concurrency guard');
|
|
92
|
+
manager.cancel('stream_1', 'pressure_shed');
|
|
93
|
+
const terminal = manager.consumeTerminalState('stream_1');
|
|
94
|
+
assert(terminal?.status === 'cancelled', 'Expected cancelled terminal status');
|
|
95
|
+
assert(terminal?.reason === 'pressure_shed', 'Expected propagated pressure_shed reason');
|
|
96
|
+
const quality = manager.spawn(mkPlan('stream_quality'));
|
|
97
|
+
const readiness = manager.spawn({ ...mkPlan('stream_readiness'), intent: 'READINESS_GATE', streamIdentity: { streamId: 'stream_readiness', origin: 'agent', agentId: 'ISO9001' } });
|
|
98
|
+
assert(Boolean(quality), 'Expected quality stream to spawn');
|
|
99
|
+
assert(readiness === null, 'Expected readiness stream blocked by max concurrency cap in this test setup');
|
|
100
|
+
manager.complete('stream_quality');
|
|
101
|
+
manager.consumeTerminalState('stream_quality');
|
|
102
|
+
const readiness2 = manager.spawn({ ...mkPlan('stream_readiness2'), intent: 'READINESS_GATE', streamIdentity: { streamId: 'stream_readiness2', origin: 'agent', agentId: 'ISO9001' } });
|
|
103
|
+
assert(Boolean(readiness2), 'Expected readiness stream to spawn after slot clears');
|
|
104
|
+
const shed = manager.shedNonCriticalStreams();
|
|
105
|
+
assert(shed.includes('stream_readiness2'), 'Expected non-critical stream to be shed under pressure policy');
|
|
106
|
+
const shedTerminal = manager.consumeTerminalState('stream_readiness2');
|
|
107
|
+
assert(shedTerminal?.reason === 'pressure_shed', 'Expected shed stream to carry pressure_shed reason');
|
|
108
|
+
for (let i = 0; i < 270; i++) {
|
|
109
|
+
const id = `stream_gc_${i}`;
|
|
110
|
+
const stream = manager.spawn(mkPlan(id));
|
|
111
|
+
if (!stream)
|
|
112
|
+
continue;
|
|
113
|
+
manager.complete(id);
|
|
114
|
+
}
|
|
115
|
+
const oldestTerminal = manager.consumeTerminalState('stream_gc_0');
|
|
116
|
+
assert(!oldestTerminal, 'Expected oldest terminal states to be evicted by bounded terminal-state cache');
|
|
117
|
+
}
|
|
118
|
+
finally {
|
|
119
|
+
ConfigService.getAgentStreamMaxConcurrent = originalMaxConcurrent;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
function testArbiterConflictAndBlockingDominance() {
|
|
123
|
+
const arbiter = new AgentMergeArbiter();
|
|
124
|
+
arbiter.stage({
|
|
125
|
+
streamIdentity: { streamId: 's1', origin: 'agent', agentId: 'QASRE' },
|
|
126
|
+
intent: 'QUALITY_REGRESSION_SCAN',
|
|
127
|
+
decision: 'QASRE_CRITICAL',
|
|
128
|
+
confidence: 1.8,
|
|
129
|
+
evidenceRefs: ['stream:s1'],
|
|
130
|
+
recommendedActions: [],
|
|
131
|
+
blockingConditions: ['critical_quality_risk'],
|
|
132
|
+
summary: 'Critical risk',
|
|
133
|
+
createdAt: 1,
|
|
134
|
+
});
|
|
135
|
+
arbiter.stage({
|
|
136
|
+
streamIdentity: { streamId: 's2', origin: 'agent', agentId: 'ISO9001' },
|
|
137
|
+
intent: 'READINESS_GATE',
|
|
138
|
+
decision: 'READY',
|
|
139
|
+
confidence: 1.5,
|
|
140
|
+
evidenceRefs: ['stream:s2'],
|
|
141
|
+
recommendedActions: [],
|
|
142
|
+
blockingConditions: [],
|
|
143
|
+
summary: 'Ready to ship',
|
|
144
|
+
createdAt: 2,
|
|
145
|
+
});
|
|
146
|
+
arbiter.stage({
|
|
147
|
+
streamIdentity: { streamId: 's3', origin: 'agent', agentId: 'QASRE' },
|
|
148
|
+
intent: 'QUALITY_REGRESSION_SCAN',
|
|
149
|
+
decision: 'QASRE_DEBUG',
|
|
150
|
+
confidence: 1.4,
|
|
151
|
+
evidenceRefs: ['stream:s3'],
|
|
152
|
+
recommendedActions: [],
|
|
153
|
+
blockingConditions: [],
|
|
154
|
+
summary: 'Duplicate same agent+intent',
|
|
155
|
+
createdAt: 3,
|
|
156
|
+
});
|
|
157
|
+
const decision = arbiter.evaluate();
|
|
158
|
+
assert(decision.accepted.length === 1, 'Expected only blocking envelope to remain accepted');
|
|
159
|
+
assert(decision.accepted[0].streamIdentity.streamId === 's1', 'Expected blocking envelope to dominate');
|
|
160
|
+
assert(decision.rejected.length === 2, 'Expected two rejections from dominance + collision');
|
|
161
|
+
}
|
|
162
|
+
function run() {
|
|
163
|
+
console.log('🧪 Agent stream control-plane tests starting...');
|
|
164
|
+
testSchedulerDeterminismAndAcceptanceSemantics();
|
|
165
|
+
testManagerConcurrencyAndReasonPropagation();
|
|
166
|
+
testArbiterConflictAndBlockingDominance();
|
|
167
|
+
console.log('✅ Agent stream control-plane tests passed');
|
|
168
|
+
}
|
|
169
|
+
run();
|
|
170
|
+
//# sourceMappingURL=test_agent_stream_control_plane.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test_agent_stream_control_plane.js","sourceRoot":"","sources":["../src/test_agent_stream_control_plane.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase 9 Content Buffer Cap Regression Test
|
|
3
|
+
* Validates that MarieEngine respects the 1MB contentBuffer limit during streaming.
|
|
4
|
+
*/
|
|
5
|
+
import { MarieProgressTracker } from "./monolith/infrastructure/ai/core/MarieProgressTracker.js";
|
|
6
|
+
async function testContentBufferCap() {
|
|
7
|
+
console.log("🧪 Testing contentBuffer 1MB hard cap...\n");
|
|
8
|
+
const run = {
|
|
9
|
+
runId: `test_${Date.now()}`,
|
|
10
|
+
startedAt: Date.now(),
|
|
11
|
+
steps: 0,
|
|
12
|
+
tools: 0,
|
|
13
|
+
objectives: [{ id: "test", label: "Test", status: "in_progress" }],
|
|
14
|
+
activeObjectiveId: "test",
|
|
15
|
+
achieved: [],
|
|
16
|
+
};
|
|
17
|
+
const streamChunks = [];
|
|
18
|
+
const tracker = new MarieProgressTracker({
|
|
19
|
+
onStream: (chunk) => streamChunks.push(chunk),
|
|
20
|
+
onEvent: (event) => {
|
|
21
|
+
if (event.type === "reasoning" &&
|
|
22
|
+
event.text.includes("STABILITY ALERT")) {
|
|
23
|
+
console.log("✅ Stability alert emitted:", event.text.substring(0, 60) + "...");
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
}, run);
|
|
27
|
+
// Simulate massive content delta exceeding 1MB
|
|
28
|
+
const massiveChunk = "x".repeat(1024 * 1024 + 1000); // 1MB + 1KB
|
|
29
|
+
const CONTENT_BUFFER_MAX = 1024 * 1024;
|
|
30
|
+
// Simulate what MarieEngine does with content_buffer
|
|
31
|
+
let contentBuffer = "";
|
|
32
|
+
let finalContent = "";
|
|
33
|
+
// Append with cap logic
|
|
34
|
+
if (finalContent.length < CONTENT_BUFFER_MAX) {
|
|
35
|
+
finalContent += massiveChunk.slice(0, CONTENT_BUFFER_MAX - finalContent.length);
|
|
36
|
+
}
|
|
37
|
+
if (contentBuffer.length < CONTENT_BUFFER_MAX) {
|
|
38
|
+
contentBuffer += massiveChunk.slice(0, CONTENT_BUFFER_MAX - contentBuffer.length);
|
|
39
|
+
}
|
|
40
|
+
console.log(`Final content length: ${finalContent.length} bytes (capped at ${CONTENT_BUFFER_MAX})`);
|
|
41
|
+
console.log(`Content buffer length: ${contentBuffer.length} bytes`);
|
|
42
|
+
if (finalContent.length <= CONTENT_BUFFER_MAX &&
|
|
43
|
+
contentBuffer.length <= CONTENT_BUFFER_MAX) {
|
|
44
|
+
console.log("✅ PASS: Content buffers respect 1MB hard cap\n");
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
console.log("❌ FAIL: Content buffer exceeded 1MB limit\n");
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
testContentBufferCap()
|
|
53
|
+
.then((passed) => {
|
|
54
|
+
if (passed) {
|
|
55
|
+
console.log("✅ All content buffer cap tests PASSED");
|
|
56
|
+
process.exit(0);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
console.log("❌ Content buffer cap tests FAILED");
|
|
60
|
+
process.exit(1);
|
|
61
|
+
}
|
|
62
|
+
})
|
|
63
|
+
.catch((e) => {
|
|
64
|
+
console.error("❌ Test error:", e);
|
|
65
|
+
process.exit(1);
|
|
66
|
+
});
|
|
67
|
+
//# sourceMappingURL=test_content_buffer_cap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test_content_buffer_cap.js","sourceRoot":"","sources":["../src/test_content_buffer_cap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { PrefixTree } from "./monolith/plumbing/utils/PrefixTree.js";
|
|
2
|
+
console.log("Starting PrefixTree Tests...\n");
|
|
3
|
+
// Test Suite 1: Basic Tag Detection
|
|
4
|
+
function testBasicDetection() {
|
|
5
|
+
console.log("Suite 1: Basic Tag Detection");
|
|
6
|
+
const tree = new PrefixTree(["<tool>", "</tool>", "<|start|>", "<|end|>"]);
|
|
7
|
+
// Test 1: Empty text
|
|
8
|
+
const result1 = tree.findEarliestTag("");
|
|
9
|
+
console.log(`Test: Empty text - ${result1 === null ? "PASS" : "FAIL"}`);
|
|
10
|
+
// Test 2: Single tag
|
|
11
|
+
const result2 = tree.findEarliestTag("Hello <tool> world");
|
|
12
|
+
console.log(`Test: Single tag - ${result2?.tag === "<tool>" && result2?.index === 6 ? "PASS" : "FAIL"}`);
|
|
13
|
+
// Test 3: Multiple tags (earliest wins)
|
|
14
|
+
const result3 = tree.findEarliestTag("Text </tool> more <tool> stuff");
|
|
15
|
+
console.log(`Test: Multiple tags (earliest) - ${result3?.tag === "</tool>" && result3?.index === 5 ? "PASS" : "FAIL"}`);
|
|
16
|
+
// Test 4: Overlapping tags
|
|
17
|
+
const result4 = tree.findEarliestTag("<<tool>>");
|
|
18
|
+
console.log(`Test: Overlapping tags - ${result4?.tag === "<tool>" && result4?.index === 1 ? "PASS" : "FAIL"}`);
|
|
19
|
+
// Test 5: No tags
|
|
20
|
+
const result5 = tree.findEarliestTag("Just plain text here");
|
|
21
|
+
console.log(`Test: No tags - ${result5 === null ? "PASS" : "FAIL"}`);
|
|
22
|
+
}
|
|
23
|
+
// Test Suite 2: Partial Tag Detection
|
|
24
|
+
function testPartialDetection() {
|
|
25
|
+
console.log("\nSuite 2: Partial Tag Detection");
|
|
26
|
+
const tree = new PrefixTree(["<tool>", "<|start|>", "<|end|>"]);
|
|
27
|
+
// Test 1: Complete partial at end
|
|
28
|
+
const result1 = tree.findLongestPartialAtEnd("Text <too");
|
|
29
|
+
console.log(`Test: Partial '<too' - ${result1 === 4 ? "PASS" : "FAIL (got " + result1 + ")"}`);
|
|
30
|
+
// Test 2: Longer partial
|
|
31
|
+
const result2 = tree.findLongestPartialAtEnd("Text <|star");
|
|
32
|
+
console.log(`Test: Partial '<|star' - ${result2 === 6 ? "PASS" : "FAIL (got " + result2 + ")"}`);
|
|
33
|
+
// Test 3: No partial
|
|
34
|
+
const result3 = tree.findLongestPartialAtEnd("No partial here");
|
|
35
|
+
console.log(`Test: No partial - ${result3 === 0 ? "PASS" : "FAIL"}`);
|
|
36
|
+
// Test 4: Complete tag (not a partial)
|
|
37
|
+
const result4 = tree.findLongestPartialAtEnd("Complete <tool>");
|
|
38
|
+
console.log(`Test: Complete tag (not partial) - ${result4 === 0 ? "PASS" : "FAIL"}`);
|
|
39
|
+
// Test 5: Single char partial
|
|
40
|
+
const result5 = tree.findLongestPartialAtEnd("End with <");
|
|
41
|
+
console.log(`Test: Single char partial '<' - ${result5 === 1 ? "PASS" : "FAIL (got " + result5 + ")"}`);
|
|
42
|
+
}
|
|
43
|
+
// Test Suite 3: Fuzzy Matching
|
|
44
|
+
function testFuzzyMatching() {
|
|
45
|
+
console.log("\nSuite 3: Fuzzy Matching");
|
|
46
|
+
const tree = new PrefixTree([
|
|
47
|
+
"<|tool_call_begin|>",
|
|
48
|
+
"<|tool_call_end|>",
|
|
49
|
+
"<tool>",
|
|
50
|
+
]);
|
|
51
|
+
// Test 1: Exact match (distance 0)
|
|
52
|
+
const result1 = tree.findSimilarTags("<tool>", 2);
|
|
53
|
+
console.log(`Test: Exact match - ${result1.includes("<tool>") && result1.length === 1 ? "PASS" : "FAIL"}`);
|
|
54
|
+
// Test 2: Distance 1 (one char off)
|
|
55
|
+
const result2 = tree.findSimilarTags("<tol>", 2);
|
|
56
|
+
console.log(`Test: Distance 1 - ${result2.includes("<tool>") ? "PASS" : "FAIL"}`);
|
|
57
|
+
// Test 3: Distance 2 (two chars off)
|
|
58
|
+
const result3 = tree.findSimilarTags("<|tool_call_begi|>", 2);
|
|
59
|
+
console.log(`Test: Distance 2 - ${result3.includes("<|tool_call_begin|>") ? "PASS" : "FAIL"}`);
|
|
60
|
+
// Test 4: Too far (distance > 2)
|
|
61
|
+
const result4 = tree.findSimilarTags("<toolz>", 1);
|
|
62
|
+
console.log(`Test: Distance > max - ${result4.length === 0 ? "PASS" : "FAIL"}`);
|
|
63
|
+
// Test 5: Multiple matches
|
|
64
|
+
const result5 = tree.findSimilarTags("<|tool_call_en|>", 2);
|
|
65
|
+
console.log(`Test: Multiple fuzzy matches - ${result5.length >= 1 ? "PASS" : "FAIL"}`);
|
|
66
|
+
}
|
|
67
|
+
// Test Suite 4: Performance with Large Tag Sets
|
|
68
|
+
function testPerformance() {
|
|
69
|
+
console.log("\nSuite 4: Performance");
|
|
70
|
+
// Create a large tag set
|
|
71
|
+
const tags = [];
|
|
72
|
+
for (let i = 0; i < 100; i++) {
|
|
73
|
+
tags.push(`<tag_${i}>`);
|
|
74
|
+
tags.push(`<|llama_tag_${i}|>`);
|
|
75
|
+
}
|
|
76
|
+
const tree = new PrefixTree(tags);
|
|
77
|
+
const text = "Some text content ".repeat(10) + "<tag_50>" + " more text".repeat(10);
|
|
78
|
+
const startTime = Date.now();
|
|
79
|
+
const result = tree.findEarliestTag(text);
|
|
80
|
+
const duration = Date.now() - startTime;
|
|
81
|
+
console.log(`Test: Large tag set (200 tags) - ${result?.tag === "<tag_50>" && duration < 50 ? "PASS" : "FAIL"} (${duration}ms)`);
|
|
82
|
+
// Test partial detection performance
|
|
83
|
+
const partialText = "x".repeat(1000) + "<tag_9";
|
|
84
|
+
const startTime2 = Date.now();
|
|
85
|
+
const partial = tree.findLongestPartialAtEnd(partialText);
|
|
86
|
+
const duration2 = Date.now() - startTime2;
|
|
87
|
+
console.log(`Test: Partial detection perf - ${partial === 7 && duration2 < 100 ? "PASS" : "FAIL"} (${duration2}ms)`);
|
|
88
|
+
}
|
|
89
|
+
// Test Suite 5: Edge Cases
|
|
90
|
+
function testEdgeCases() {
|
|
91
|
+
console.log("\nSuite 5: Edge Cases");
|
|
92
|
+
const tree = new PrefixTree(["<a>", "<ab>", "<abc>"]);
|
|
93
|
+
// Test 1: Nested overlapping tags
|
|
94
|
+
const result1 = tree.findEarliestTag("<a<ab>>");
|
|
95
|
+
console.log(`Test: Nested tags - ${result1?.tag === "<a>" && result1?.index === 0 ? "PASS" : "FAIL"}`);
|
|
96
|
+
// Test 2: Tag prefix of another
|
|
97
|
+
const result2 = tree.findEarliestTag("Text <abc> end");
|
|
98
|
+
console.log(`Test: Tag prefix - ${result2?.tag === "<a>" && result2?.index === 5 ? "PASS" : "FAIL"}`);
|
|
99
|
+
// Test 3: Special characters
|
|
100
|
+
const tree2 = new PrefixTree(["<|tag|>", "<tag\\n>"]);
|
|
101
|
+
const result3 = tree2.findEarliestTag("Start <|tag|> end");
|
|
102
|
+
console.log(`Test: Special chars - ${result3?.tag === "<|tag|>" ? "PASS" : "FAIL"}`);
|
|
103
|
+
// Test 4: Very long tag
|
|
104
|
+
const longTag = "<" + "x".repeat(100) + ">";
|
|
105
|
+
const tree3 = new PrefixTree([longTag]);
|
|
106
|
+
const result4 = tree3.findEarliestTag("Text " + longTag + " end");
|
|
107
|
+
console.log(`Test: Long tag (102 chars) - ${result4?.tag === longTag ? "PASS" : "FAIL"}`);
|
|
108
|
+
// Test 5: Unicode characters
|
|
109
|
+
const tree4 = new PrefixTree(["<🔧>", "<emoji>"]);
|
|
110
|
+
const result5 = tree4.findEarliestTag("Start <🔧> end");
|
|
111
|
+
console.log(`Test: Unicode - ${result5?.tag === "<🔧>" ? "PASS" : "FAIL"}`);
|
|
112
|
+
}
|
|
113
|
+
// Run all tests
|
|
114
|
+
testBasicDetection();
|
|
115
|
+
testPartialDetection();
|
|
116
|
+
testFuzzyMatching();
|
|
117
|
+
testPerformance();
|
|
118
|
+
testEdgeCases();
|
|
119
|
+
console.log("\nAll PrefixTree tests completed!");
|
|
120
|
+
//# sourceMappingURL=test_prefix_tree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test_prefix_tree.js","sourceRoot":"","sources":["../src/test_prefix_tree.ts"],"names":[],"mappings":"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"}
|