claude-code-workflow 6.3.36 → 6.3.38
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/.claude/commands/workflow/lite-execute.md +2 -0
- package/.claude/commands/workflow/lite-fix.md +108 -9
- package/.claude/skills/ccw-loop/README.md +303 -0
- package/.claude/skills/ccw-loop/SKILL.md +259 -0
- package/.claude/skills/ccw-loop/phases/actions/action-complete.md +320 -0
- package/.claude/skills/ccw-loop/phases/actions/action-debug-with-file.md +485 -0
- package/.claude/skills/ccw-loop/phases/actions/action-develop-with-file.md +365 -0
- package/.claude/skills/ccw-loop/phases/actions/action-init.md +200 -0
- package/.claude/skills/ccw-loop/phases/actions/action-menu.md +192 -0
- package/.claude/skills/ccw-loop/phases/actions/action-validate-with-file.md +307 -0
- package/.claude/skills/ccw-loop/phases/orchestrator.md +486 -0
- package/.claude/skills/ccw-loop/phases/state-schema.md +474 -0
- package/.claude/skills/ccw-loop/specs/action-catalog.md +300 -0
- package/.claude/skills/ccw-loop/specs/loop-requirements.md +192 -0
- package/.claude/skills/ccw-loop/templates/progress-template.md +175 -0
- package/.claude/skills/ccw-loop/templates/understanding-template.md +303 -0
- package/.claude/skills/ccw-loop/templates/validation-template.md +258 -0
- package/.codex/agents/action-planning-agent.md +885 -0
- package/.codex/agents/ccw-loop-executor.md +260 -0
- package/.codex/agents/cli-discuss-agent.md +391 -0
- package/.codex/agents/cli-execution-agent.md +333 -0
- package/.codex/agents/cli-explore-agent.md +186 -0
- package/.codex/agents/cli-lite-planning-agent.md +736 -0
- package/.codex/agents/cli-planning-agent.md +562 -0
- package/.codex/agents/code-developer.md +408 -0
- package/.codex/agents/conceptual-planning-agent.md +321 -0
- package/.codex/agents/context-search-agent.md +585 -0
- package/.codex/agents/debug-explore-agent.md +436 -0
- package/.codex/agents/doc-generator.md +334 -0
- package/.codex/agents/issue-plan-agent.md +417 -0
- package/.codex/agents/issue-queue-agent.md +311 -0
- package/.codex/agents/memory-bridge.md +96 -0
- package/.codex/agents/test-context-search-agent.md +402 -0
- package/.codex/agents/test-fix-agent.md +359 -0
- package/.codex/agents/ui-design-agent.md +595 -0
- package/.codex/agents/universal-executor.md +135 -0
- package/.codex/prompts/issue-discover-by-prompt.md +364 -0
- package/.codex/prompts/issue-discover.md +261 -0
- package/.codex/prompts/issue-execute.md +10 -0
- package/.codex/prompts/issue-new.md +285 -0
- package/.codex/prompts/issue-plan.md +161 -63
- package/.codex/prompts/issue-queue.md +298 -288
- package/.codex/prompts/lite-execute.md +627 -133
- package/.codex/prompts/lite-fix.md +670 -0
- package/.codex/prompts/lite-plan-a.md +337 -0
- package/.codex/prompts/lite-plan-b.md +485 -0
- package/.codex/prompts/{lite-plan.md → lite-plan-c.md} +601 -469
- package/.codex/skills/ccw-loop/README.md +171 -0
- package/.codex/skills/ccw-loop/SKILL.md +349 -0
- package/.codex/skills/ccw-loop/phases/actions/action-complete.md +269 -0
- package/.codex/skills/ccw-loop/phases/actions/action-debug.md +286 -0
- package/.codex/skills/ccw-loop/phases/actions/action-develop.md +183 -0
- package/.codex/skills/ccw-loop/phases/actions/action-init.md +164 -0
- package/.codex/skills/ccw-loop/phases/actions/action-menu.md +205 -0
- package/.codex/skills/ccw-loop/phases/actions/action-validate.md +250 -0
- package/.codex/skills/ccw-loop/phases/orchestrator.md +416 -0
- package/.codex/skills/ccw-loop/phases/state-schema.md +388 -0
- package/.codex/skills/ccw-loop/specs/action-catalog.md +182 -0
- package/.codex/skills/ccw-loop-b/README.md +102 -0
- package/.codex/skills/ccw-loop-b/SKILL.md +322 -0
- package/.codex/skills/ccw-loop-b/phases/orchestrator.md +257 -0
- package/.codex/skills/ccw-loop-b/phases/state-schema.md +181 -0
- package/ccw/dist/cli.d.ts.map +1 -1
- package/ccw/dist/cli.js +12 -1
- package/ccw/dist/cli.js.map +1 -1
- package/ccw/dist/commands/cli.d.ts.map +1 -1
- package/ccw/dist/commands/cli.js +14 -1
- package/ccw/dist/commands/cli.js.map +1 -1
- package/ccw/dist/commands/install.d.ts.map +1 -1
- package/ccw/dist/commands/install.js +38 -7
- package/ccw/dist/commands/install.js.map +1 -1
- package/ccw/dist/commands/issue.d.ts +3 -0
- package/ccw/dist/commands/issue.d.ts.map +1 -1
- package/ccw/dist/commands/issue.js +107 -0
- package/ccw/dist/commands/issue.js.map +1 -1
- package/ccw/dist/commands/loop.d.ts +10 -0
- package/ccw/dist/commands/loop.d.ts.map +1 -0
- package/ccw/dist/commands/loop.js +289 -0
- package/ccw/dist/commands/loop.js.map +1 -0
- package/ccw/dist/commands/upgrade.js +1 -1
- package/ccw/dist/commands/upgrade.js.map +1 -1
- package/ccw/dist/config/litellm-api-config-manager.d.ts.map +1 -1
- package/ccw/dist/config/litellm-api-config-manager.js +3 -2
- package/ccw/dist/config/litellm-api-config-manager.js.map +1 -1
- package/ccw/dist/core/dashboard-generator.d.ts.map +1 -1
- package/ccw/dist/core/dashboard-generator.js +4 -1
- package/ccw/dist/core/dashboard-generator.js.map +1 -1
- package/ccw/dist/core/memory-embedder-bridge.d.ts.map +1 -1
- package/ccw/dist/core/memory-embedder-bridge.js +2 -5
- package/ccw/dist/core/memory-embedder-bridge.js.map +1 -1
- package/ccw/dist/core/routes/claude-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/claude-routes.js +5 -3
- package/ccw/dist/core/routes/claude-routes.js.map +1 -1
- package/ccw/dist/core/routes/cli-routes.d.ts +6 -0
- package/ccw/dist/core/routes/cli-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/cli-routes.js +42 -13
- package/ccw/dist/core/routes/cli-routes.js.map +1 -1
- package/ccw/dist/core/routes/cli-settings-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/cli-settings-routes.js +44 -0
- package/ccw/dist/core/routes/cli-settings-routes.js.map +1 -1
- package/ccw/dist/core/routes/codexlens/config-handlers.d.ts.map +1 -1
- package/ccw/dist/core/routes/codexlens/config-handlers.js +7 -6
- package/ccw/dist/core/routes/codexlens/config-handlers.js.map +1 -1
- package/ccw/dist/core/routes/codexlens/semantic-handlers.d.ts.map +1 -1
- package/ccw/dist/core/routes/codexlens/semantic-handlers.js +5 -4
- package/ccw/dist/core/routes/codexlens/semantic-handlers.js.map +1 -1
- package/ccw/dist/core/routes/core-memory-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/core-memory-routes.js +4 -2
- package/ccw/dist/core/routes/core-memory-routes.js.map +1 -1
- package/ccw/dist/core/routes/files-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/files-routes.js +4 -2
- package/ccw/dist/core/routes/files-routes.js.map +1 -1
- package/ccw/dist/core/routes/graph-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/graph-routes.js +17 -2
- package/ccw/dist/core/routes/graph-routes.js.map +1 -1
- package/ccw/dist/core/routes/issue-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/issue-routes.js +280 -33
- package/ccw/dist/core/routes/issue-routes.js.map +1 -1
- package/ccw/dist/core/routes/loop-routes.d.ts +24 -0
- package/ccw/dist/core/routes/loop-routes.d.ts.map +1 -0
- package/ccw/dist/core/routes/loop-routes.js +334 -0
- package/ccw/dist/core/routes/loop-routes.js.map +1 -0
- package/ccw/dist/core/routes/loop-v2-routes.d.ts +44 -0
- package/ccw/dist/core/routes/loop-v2-routes.d.ts.map +1 -0
- package/ccw/dist/core/routes/loop-v2-routes.js +1260 -0
- package/ccw/dist/core/routes/loop-v2-routes.js.map +1 -0
- package/ccw/dist/core/routes/memory-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/memory-routes.js +2 -1
- package/ccw/dist/core/routes/memory-routes.js.map +1 -1
- package/ccw/dist/core/routes/system-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/system-routes.js +3 -2
- package/ccw/dist/core/routes/system-routes.js.map +1 -1
- package/ccw/dist/core/routes/task-routes.d.ts +12 -0
- package/ccw/dist/core/routes/task-routes.d.ts.map +1 -0
- package/ccw/dist/core/routes/task-routes.js +321 -0
- package/ccw/dist/core/routes/task-routes.js.map +1 -0
- package/ccw/dist/core/routes/test-loop-routes.d.ts +11 -0
- package/ccw/dist/core/routes/test-loop-routes.d.ts.map +1 -0
- package/ccw/dist/core/routes/test-loop-routes.js +298 -0
- package/ccw/dist/core/routes/test-loop-routes.js.map +1 -0
- package/ccw/dist/core/server.d.ts.map +1 -1
- package/ccw/dist/core/server.js +47 -5
- package/ccw/dist/core/server.js.map +1 -1
- package/ccw/dist/core/websocket.d.ts +59 -0
- package/ccw/dist/core/websocket.d.ts.map +1 -1
- package/ccw/dist/core/websocket.js +34 -0
- package/ccw/dist/core/websocket.js.map +1 -1
- package/ccw/dist/tools/claude-cli-tools.d.ts +40 -0
- package/ccw/dist/tools/claude-cli-tools.d.ts.map +1 -1
- package/ccw/dist/tools/claude-cli-tools.js +119 -0
- package/ccw/dist/tools/claude-cli-tools.js.map +1 -1
- package/ccw/dist/tools/codex-lens-lsp.d.ts.map +1 -1
- package/ccw/dist/tools/codex-lens-lsp.js +2 -5
- package/ccw/dist/tools/codex-lens-lsp.js.map +1 -1
- package/ccw/dist/tools/codex-lens.d.ts.map +1 -1
- package/ccw/dist/tools/codex-lens.js +22 -32
- package/ccw/dist/tools/codex-lens.js.map +1 -1
- package/ccw/dist/tools/litellm-client.d.ts +6 -0
- package/ccw/dist/tools/litellm-client.d.ts.map +1 -1
- package/ccw/dist/tools/litellm-client.js +15 -2
- package/ccw/dist/tools/litellm-client.js.map +1 -1
- package/ccw/dist/tools/loop-manager.d.ts +84 -0
- package/ccw/dist/tools/loop-manager.d.ts.map +1 -0
- package/ccw/dist/tools/loop-manager.js +425 -0
- package/ccw/dist/tools/loop-manager.js.map +1 -0
- package/ccw/dist/tools/loop-state-manager.d.ts +47 -0
- package/ccw/dist/tools/loop-state-manager.d.ts.map +1 -0
- package/ccw/dist/tools/loop-state-manager.js +149 -0
- package/ccw/dist/tools/loop-state-manager.js.map +1 -0
- package/ccw/dist/tools/loop-task-manager.d.ts +149 -0
- package/ccw/dist/tools/loop-task-manager.d.ts.map +1 -0
- package/ccw/dist/tools/loop-task-manager.js +270 -0
- package/ccw/dist/tools/loop-task-manager.js.map +1 -0
- package/ccw/dist/tools/native-session-discovery.d.ts.map +1 -1
- package/ccw/dist/tools/native-session-discovery.js +35 -7
- package/ccw/dist/tools/native-session-discovery.js.map +1 -1
- package/ccw/dist/types/index.d.ts +1 -0
- package/ccw/dist/types/index.d.ts.map +1 -1
- package/ccw/dist/types/index.js +1 -0
- package/ccw/dist/types/index.js.map +1 -1
- package/ccw/dist/types/loop.d.ts +257 -0
- package/ccw/dist/types/loop.d.ts.map +1 -0
- package/ccw/dist/types/loop.js +17 -0
- package/ccw/dist/types/loop.js.map +1 -0
- package/ccw/dist/utils/codexlens-path.d.ts +36 -0
- package/ccw/dist/utils/codexlens-path.d.ts.map +1 -0
- package/ccw/dist/utils/codexlens-path.js +56 -0
- package/ccw/dist/utils/codexlens-path.js.map +1 -0
- package/ccw/dist/utils/uv-manager.d.ts.map +1 -1
- package/ccw/dist/utils/uv-manager.js +3 -2
- package/ccw/dist/utils/uv-manager.js.map +1 -1
- package/ccw/src/cli.ts +13 -1
- package/ccw/src/commands/cli.ts +14 -1
- package/ccw/src/commands/install.ts +50 -7
- package/ccw/src/commands/issue.ts +119 -0
- package/ccw/src/commands/loop.ts +344 -0
- package/ccw/src/commands/upgrade.ts +1 -1
- package/ccw/src/config/litellm-api-config-manager.ts +3 -2
- package/ccw/src/core/dashboard-generator.ts +4 -1
- package/ccw/src/core/memory-embedder-bridge.ts +2 -6
- package/ccw/src/core/routes/claude-routes.ts +5 -3
- package/ccw/src/core/routes/cli-routes.ts +48 -16
- package/ccw/src/core/routes/cli-settings-routes.ts +47 -0
- package/ccw/src/core/routes/codexlens/config-handlers.ts +7 -6
- package/ccw/src/core/routes/codexlens/semantic-handlers.ts +5 -4
- package/ccw/src/core/routes/core-memory-routes.ts +4 -2
- package/ccw/src/core/routes/files-routes.ts +4 -2
- package/ccw/src/core/routes/graph-routes.ts +18 -2
- package/ccw/src/core/routes/issue-routes.ts +308 -33
- package/ccw/src/core/routes/loop-routes.ts +386 -0
- package/ccw/src/core/routes/loop-v2-routes.ts +1470 -0
- package/ccw/src/core/routes/memory-routes.ts +2 -1
- package/ccw/src/core/routes/system-routes.ts +3 -2
- package/ccw/src/core/routes/task-routes.ts +361 -0
- package/ccw/src/core/routes/test-loop-routes.ts +312 -0
- package/ccw/src/core/server.ts +49 -5
- package/ccw/src/core/websocket.ts +104 -0
- package/ccw/src/templates/dashboard-css/02-session.css +2 -0
- package/ccw/src/templates/dashboard-css/04-lite-tasks.css +103 -1
- package/ccw/src/templates/dashboard-css/12-cli-legacy.css +56 -0
- package/ccw/src/templates/dashboard-css/32-issue-manager.css +32 -0
- package/ccw/src/templates/dashboard-css/33-cli-stream-viewer.css +55 -0
- package/ccw/src/templates/dashboard-css/36-loop-monitor.css +1896 -0
- package/ccw/src/templates/dashboard-css/36-loop-monitor.css.backup +1877 -0
- package/ccw/src/templates/dashboard-js/components/cli-history.js +48 -48
- package/ccw/src/templates/dashboard-js/components/cli-status.js +64 -3
- package/ccw/src/templates/dashboard-js/components/cli-stream-viewer.js +251 -110
- package/ccw/src/templates/dashboard-js/components/navigation.js +16 -0
- package/ccw/src/templates/dashboard-js/components/notifications.js +22 -0
- package/ccw/src/templates/dashboard-js/components/version-check.js +38 -0
- package/ccw/src/templates/dashboard-js/i18n.js +601 -1
- package/ccw/src/templates/dashboard-js/state.js +2 -0
- package/ccw/src/templates/dashboard-js/views/cli-manager.js +4 -3
- package/ccw/src/templates/dashboard-js/views/issue-manager.js +183 -1
- package/ccw/src/templates/dashboard-js/views/lite-tasks.js +55 -11
- package/ccw/src/templates/dashboard-js/views/loop-monitor.js +3345 -0
- package/ccw/src/templates/dashboard.html +68 -4
- package/ccw/src/tools/claude-cli-tools.ts +143 -0
- package/ccw/src/tools/codex-lens-lsp.ts +2 -5
- package/ccw/src/tools/codex-lens.ts +27 -38
- package/ccw/src/tools/litellm-client.ts +16 -2
- package/ccw/src/tools/loop-manager.ts +519 -0
- package/ccw/src/tools/loop-state-manager.ts +173 -0
- package/ccw/src/tools/loop-task-manager.ts +391 -0
- package/ccw/src/tools/native-session-discovery.ts +38 -7
- package/ccw/src/types/index.ts +1 -0
- package/ccw/src/types/loop.ts +316 -0
- package/ccw/src/utils/codexlens-path.ts +60 -0
- package/ccw/src/utils/uv-manager.ts +3 -2
- package/package.json +1 -1
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Loop State Manager
|
|
3
|
+
* CCW Loop System - JSON state persistence layer
|
|
4
|
+
* Reference: .workflow/.scratchpad/loop-system-complete-design-20260121.md section 4.1
|
|
5
|
+
*/
|
|
6
|
+
import { readFile, writeFile, unlink, mkdir, copyFile } from 'fs/promises';
|
|
7
|
+
import { join } from 'path';
|
|
8
|
+
import { existsSync } from 'fs';
|
|
9
|
+
export class LoopStateManager {
|
|
10
|
+
baseDir;
|
|
11
|
+
constructor(workflowDir) {
|
|
12
|
+
// State files stored in .workflow/.loop/
|
|
13
|
+
this.baseDir = join(workflowDir, '.workflow', '.loop');
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Create new loop state
|
|
17
|
+
*/
|
|
18
|
+
async createState(loopId, taskId, config) {
|
|
19
|
+
await this.ensureDir();
|
|
20
|
+
const state = {
|
|
21
|
+
loop_id: loopId,
|
|
22
|
+
task_id: taskId,
|
|
23
|
+
status: 'created',
|
|
24
|
+
current_iteration: 1,
|
|
25
|
+
max_iterations: config.max_iterations,
|
|
26
|
+
current_cli_step: 0,
|
|
27
|
+
cli_sequence: config.cli_sequence,
|
|
28
|
+
session_mapping: {},
|
|
29
|
+
state_variables: {},
|
|
30
|
+
success_condition: config.success_condition,
|
|
31
|
+
error_policy: {
|
|
32
|
+
on_failure: config.error_policy.on_failure,
|
|
33
|
+
retry_count: 0,
|
|
34
|
+
max_retries: config.error_policy.max_retries || 3
|
|
35
|
+
},
|
|
36
|
+
created_at: new Date().toISOString(),
|
|
37
|
+
updated_at: new Date().toISOString(),
|
|
38
|
+
execution_history: []
|
|
39
|
+
};
|
|
40
|
+
await this.writeState(loopId, state);
|
|
41
|
+
return state;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Read loop state
|
|
45
|
+
*/
|
|
46
|
+
async readState(loopId) {
|
|
47
|
+
const filePath = this.getStateFilePath(loopId);
|
|
48
|
+
if (!existsSync(filePath)) {
|
|
49
|
+
throw new Error(`Loop state not found: ${loopId}`);
|
|
50
|
+
}
|
|
51
|
+
const content = await readFile(filePath, 'utf-8');
|
|
52
|
+
return JSON.parse(content);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Update loop state
|
|
56
|
+
*/
|
|
57
|
+
async updateState(loopId, updates) {
|
|
58
|
+
const currentState = await this.readState(loopId);
|
|
59
|
+
const newState = {
|
|
60
|
+
...currentState,
|
|
61
|
+
...updates,
|
|
62
|
+
updated_at: new Date().toISOString()
|
|
63
|
+
};
|
|
64
|
+
await this.writeState(loopId, newState);
|
|
65
|
+
return newState;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Delete loop state
|
|
69
|
+
*/
|
|
70
|
+
async deleteState(loopId) {
|
|
71
|
+
const filePath = this.getStateFilePath(loopId);
|
|
72
|
+
if (existsSync(filePath)) {
|
|
73
|
+
await unlink(filePath);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* List all loop states
|
|
78
|
+
*/
|
|
79
|
+
async listStates() {
|
|
80
|
+
if (!existsSync(this.baseDir)) {
|
|
81
|
+
return [];
|
|
82
|
+
}
|
|
83
|
+
const { readdir } = await import('fs/promises');
|
|
84
|
+
const files = await readdir(this.baseDir);
|
|
85
|
+
const stateFiles = files.filter(f => f.startsWith('loop-') && f.endsWith('.json'));
|
|
86
|
+
const states = [];
|
|
87
|
+
for (const file of stateFiles) {
|
|
88
|
+
const loopId = file.replace('.json', '');
|
|
89
|
+
try {
|
|
90
|
+
const state = await this.readState(loopId);
|
|
91
|
+
states.push(state);
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
console.error(`Failed to read state ${loopId}:`, err);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return states;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Read state with recovery from backup
|
|
101
|
+
*/
|
|
102
|
+
async readStateWithRecovery(loopId) {
|
|
103
|
+
try {
|
|
104
|
+
return await this.readState(loopId);
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
console.warn(`State file corrupted, attempting recovery for ${loopId}...`);
|
|
108
|
+
// Try reading from backup
|
|
109
|
+
const backupFile = `${this.getStateFilePath(loopId)}.backup`;
|
|
110
|
+
if (existsSync(backupFile)) {
|
|
111
|
+
const content = await readFile(backupFile, 'utf-8');
|
|
112
|
+
const state = JSON.parse(content);
|
|
113
|
+
// Restore from backup
|
|
114
|
+
await this.writeState(loopId, state);
|
|
115
|
+
return state;
|
|
116
|
+
}
|
|
117
|
+
throw error;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Get state file path
|
|
122
|
+
*/
|
|
123
|
+
getStateFilePath(loopId) {
|
|
124
|
+
return join(this.baseDir, `${loopId}.json`);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Ensure directory exists
|
|
128
|
+
*/
|
|
129
|
+
async ensureDir() {
|
|
130
|
+
if (!existsSync(this.baseDir)) {
|
|
131
|
+
await mkdir(this.baseDir, { recursive: true });
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Write state file with automatic backup
|
|
136
|
+
*/
|
|
137
|
+
async writeState(loopId, state) {
|
|
138
|
+
const filePath = this.getStateFilePath(loopId);
|
|
139
|
+
// Create backup if file exists
|
|
140
|
+
if (existsSync(filePath)) {
|
|
141
|
+
const backupPath = `${filePath}.backup`;
|
|
142
|
+
await copyFile(filePath, backupPath).catch(() => {
|
|
143
|
+
// Ignore backup errors
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
await writeFile(filePath, JSON.stringify(state, null, 2), 'utf-8');
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=loop-state-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loop-state-manager.js","sourceRoot":"","sources":["../../src/tools/loop-state-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Loop Task Manager
|
|
3
|
+
* CCW Loop System - JSONL task persistence layer for v2 loops
|
|
4
|
+
* Reference: .workflow/.scratchpad/loop-system-complete-design-20260121.md section 4.2
|
|
5
|
+
*
|
|
6
|
+
* Storage format: .workflow/.loop/{loopId}/tasks.jsonl
|
|
7
|
+
* JSONL format: one JSON object per line for efficient append-only operations
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Loop Task - simplified task definition for v2 loops
|
|
11
|
+
*/
|
|
12
|
+
export interface LoopTask {
|
|
13
|
+
/** Unique task identifier */
|
|
14
|
+
task_id: string;
|
|
15
|
+
/** Task description (what to do) */
|
|
16
|
+
description: string;
|
|
17
|
+
/**
|
|
18
|
+
* CLI tool to use
|
|
19
|
+
*
|
|
20
|
+
* Should be one of the enabled tools from cli-tools.json:
|
|
21
|
+
* - 'bash' (always available)
|
|
22
|
+
* - Builtin tools: 'gemini', 'qwen', 'codex', 'claude', 'opencode'
|
|
23
|
+
* - CLI wrappers: 'doubao', etc. (if enabled)
|
|
24
|
+
* - API endpoints: custom tools (if enabled)
|
|
25
|
+
*
|
|
26
|
+
* Note: Validation is performed at the API layer (loop-v2-routes.ts)
|
|
27
|
+
* to ensure tool is enabled before saving.
|
|
28
|
+
*/
|
|
29
|
+
tool: string;
|
|
30
|
+
/** Execution mode */
|
|
31
|
+
mode: 'analysis' | 'write' | 'review';
|
|
32
|
+
/** Prompt template with variable replacement */
|
|
33
|
+
prompt_template: string;
|
|
34
|
+
/** Display order (for drag-drop reordering) */
|
|
35
|
+
order: number;
|
|
36
|
+
/** Creation timestamp */
|
|
37
|
+
created_at: string;
|
|
38
|
+
/** Last update timestamp */
|
|
39
|
+
updated_at: string;
|
|
40
|
+
/** Optional: custom bash command */
|
|
41
|
+
command?: string;
|
|
42
|
+
/** Optional: step failure behavior */
|
|
43
|
+
on_error?: 'continue' | 'pause' | 'fail_fast';
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Task create request
|
|
47
|
+
*/
|
|
48
|
+
export interface TaskCreateRequest {
|
|
49
|
+
description: string;
|
|
50
|
+
tool: LoopTask['tool'];
|
|
51
|
+
mode: LoopTask['mode'];
|
|
52
|
+
prompt_template: string;
|
|
53
|
+
command?: string;
|
|
54
|
+
on_error?: LoopTask['on_error'];
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Task update request
|
|
58
|
+
*/
|
|
59
|
+
export interface TaskUpdateRequest {
|
|
60
|
+
description?: string;
|
|
61
|
+
tool?: LoopTask['tool'];
|
|
62
|
+
mode?: LoopTask['mode'];
|
|
63
|
+
prompt_template?: string;
|
|
64
|
+
command?: string;
|
|
65
|
+
on_error?: LoopTask['on_error'];
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Task reorder request
|
|
69
|
+
*/
|
|
70
|
+
export interface TaskReorderRequest {
|
|
71
|
+
ordered_task_ids: string[];
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Task Storage Manager
|
|
75
|
+
* Handles JSONL persistence for loop tasks
|
|
76
|
+
*/
|
|
77
|
+
export declare class TaskStorageManager {
|
|
78
|
+
private baseDir;
|
|
79
|
+
constructor(workflowDir: string);
|
|
80
|
+
/**
|
|
81
|
+
* Add a new task to the loop
|
|
82
|
+
*/
|
|
83
|
+
addTask(loopId: string, request: TaskCreateRequest): Promise<LoopTask>;
|
|
84
|
+
/**
|
|
85
|
+
* Get all tasks for a loop
|
|
86
|
+
*/
|
|
87
|
+
getTasks(loopId: string): Promise<LoopTask[]>;
|
|
88
|
+
/**
|
|
89
|
+
* Get single task by ID
|
|
90
|
+
*/
|
|
91
|
+
getTask(loopId: string, taskId: string): Promise<LoopTask | null>;
|
|
92
|
+
/**
|
|
93
|
+
* Update existing task
|
|
94
|
+
*/
|
|
95
|
+
updateTask(loopId: string, taskId: string, updates: TaskUpdateRequest): Promise<LoopTask | null>;
|
|
96
|
+
/**
|
|
97
|
+
* Delete task and reorder remaining tasks
|
|
98
|
+
*/
|
|
99
|
+
deleteTask(loopId: string, taskId: string): Promise<boolean>;
|
|
100
|
+
/**
|
|
101
|
+
* Reorder tasks based on provided task ID sequence
|
|
102
|
+
*/
|
|
103
|
+
reorderTasks(loopId: string, request: TaskReorderRequest): Promise<LoopTask[]>;
|
|
104
|
+
/**
|
|
105
|
+
* Delete all tasks for a loop
|
|
106
|
+
*/
|
|
107
|
+
deleteAllTasks(loopId: string): Promise<void>;
|
|
108
|
+
/**
|
|
109
|
+
* Read tasks with recovery from backup
|
|
110
|
+
*/
|
|
111
|
+
readTasksWithRecovery(loopId: string): Promise<LoopTask[]>;
|
|
112
|
+
/**
|
|
113
|
+
* Get tasks file path
|
|
114
|
+
*/
|
|
115
|
+
getTasksPath(loopId: string): string;
|
|
116
|
+
/**
|
|
117
|
+
* Read tasks from JSONL file
|
|
118
|
+
*/
|
|
119
|
+
private readTasks;
|
|
120
|
+
/**
|
|
121
|
+
* Parse JSONL content into tasks array
|
|
122
|
+
*/
|
|
123
|
+
private parseTasksJsonl;
|
|
124
|
+
/**
|
|
125
|
+
* Write tasks array to JSONL file
|
|
126
|
+
*/
|
|
127
|
+
private writeTasks;
|
|
128
|
+
/**
|
|
129
|
+
* Append single task to JSONL file
|
|
130
|
+
*/
|
|
131
|
+
private appendTask;
|
|
132
|
+
/**
|
|
133
|
+
* Ensure loop directory exists
|
|
134
|
+
*/
|
|
135
|
+
private ensureLoopDir;
|
|
136
|
+
/**
|
|
137
|
+
* Generate unique task ID
|
|
138
|
+
*/
|
|
139
|
+
private generateTaskId;
|
|
140
|
+
/**
|
|
141
|
+
* Sanitize loop ID for filesystem usage
|
|
142
|
+
*/
|
|
143
|
+
private sanitizeLoopId;
|
|
144
|
+
/**
|
|
145
|
+
* Reorder tasks array by updating order indices sequentially
|
|
146
|
+
*/
|
|
147
|
+
private reorderTasksByOrder;
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=loop-task-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loop-task-manager.d.ts","sourceRoot":"","sources":["../../src/tools/loop-task-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Loop Task Manager
|
|
3
|
+
* CCW Loop System - JSONL task persistence layer for v2 loops
|
|
4
|
+
* Reference: .workflow/.scratchpad/loop-system-complete-design-20260121.md section 4.2
|
|
5
|
+
*
|
|
6
|
+
* Storage format: .workflow/.loop/{loopId}/tasks.jsonl
|
|
7
|
+
* JSONL format: one JSON object per line for efficient append-only operations
|
|
8
|
+
*/
|
|
9
|
+
import { readFile, writeFile, mkdir, copyFile } from 'fs/promises';
|
|
10
|
+
import { join } from 'path';
|
|
11
|
+
import { existsSync } from 'fs';
|
|
12
|
+
import { randomBytes } from 'crypto';
|
|
13
|
+
/**
|
|
14
|
+
* Task Storage Manager
|
|
15
|
+
* Handles JSONL persistence for loop tasks
|
|
16
|
+
*/
|
|
17
|
+
export class TaskStorageManager {
|
|
18
|
+
baseDir;
|
|
19
|
+
constructor(workflowDir) {
|
|
20
|
+
// Task files stored in .workflow/.loop/{loopId}/
|
|
21
|
+
this.baseDir = join(workflowDir, '.workflow', '.loop');
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Add a new task to the loop
|
|
25
|
+
*/
|
|
26
|
+
async addTask(loopId, request) {
|
|
27
|
+
await this.ensureLoopDir(loopId);
|
|
28
|
+
// Read existing tasks to determine next order
|
|
29
|
+
const existingTasks = await this.readTasks(loopId);
|
|
30
|
+
const nextOrder = existingTasks.length > 0
|
|
31
|
+
? Math.max(...existingTasks.map(t => t.order)) + 1
|
|
32
|
+
: 0;
|
|
33
|
+
const task = {
|
|
34
|
+
task_id: this.generateTaskId(),
|
|
35
|
+
description: request.description,
|
|
36
|
+
tool: request.tool,
|
|
37
|
+
mode: request.mode,
|
|
38
|
+
prompt_template: request.prompt_template,
|
|
39
|
+
order: nextOrder,
|
|
40
|
+
created_at: new Date().toISOString(),
|
|
41
|
+
updated_at: new Date().toISOString(),
|
|
42
|
+
command: request.command,
|
|
43
|
+
on_error: request.on_error
|
|
44
|
+
};
|
|
45
|
+
await this.appendTask(loopId, task);
|
|
46
|
+
return task;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Get all tasks for a loop
|
|
50
|
+
*/
|
|
51
|
+
async getTasks(loopId) {
|
|
52
|
+
return this.readTasks(loopId);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Get single task by ID
|
|
56
|
+
*/
|
|
57
|
+
async getTask(loopId, taskId) {
|
|
58
|
+
const tasks = await this.readTasks(loopId);
|
|
59
|
+
return tasks.find(t => t.task_id === taskId) || null;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Update existing task
|
|
63
|
+
*/
|
|
64
|
+
async updateTask(loopId, taskId, updates) {
|
|
65
|
+
const tasks = await this.readTasks(loopId);
|
|
66
|
+
const taskIndex = tasks.findIndex(t => t.task_id === taskId);
|
|
67
|
+
if (taskIndex === -1) {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
const task = tasks[taskIndex];
|
|
71
|
+
const updatedTask = {
|
|
72
|
+
...task,
|
|
73
|
+
description: updates.description ?? task.description,
|
|
74
|
+
tool: updates.tool ?? task.tool,
|
|
75
|
+
mode: updates.mode ?? task.mode,
|
|
76
|
+
prompt_template: updates.prompt_template ?? task.prompt_template,
|
|
77
|
+
command: updates.command ?? task.command,
|
|
78
|
+
on_error: updates.on_error ?? task.on_error,
|
|
79
|
+
updated_at: new Date().toISOString()
|
|
80
|
+
};
|
|
81
|
+
tasks[taskIndex] = updatedTask;
|
|
82
|
+
await this.writeTasks(loopId, tasks);
|
|
83
|
+
return updatedTask;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Delete task and reorder remaining tasks
|
|
87
|
+
*/
|
|
88
|
+
async deleteTask(loopId, taskId) {
|
|
89
|
+
const tasks = await this.readTasks(loopId);
|
|
90
|
+
const filteredTasks = tasks.filter(t => t.task_id !== taskId);
|
|
91
|
+
if (filteredTasks.length === tasks.length) {
|
|
92
|
+
return false; // Task not found
|
|
93
|
+
}
|
|
94
|
+
// Reorder remaining tasks
|
|
95
|
+
const reorderedTasks = this.reorderTasksByOrder(filteredTasks);
|
|
96
|
+
await this.writeTasks(loopId, reorderedTasks);
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Reorder tasks based on provided task ID sequence
|
|
101
|
+
*/
|
|
102
|
+
async reorderTasks(loopId, request) {
|
|
103
|
+
const tasks = await this.readTasks(loopId);
|
|
104
|
+
const taskMap = new Map(tasks.map(t => [t.task_id, t]));
|
|
105
|
+
// Verify all provided task IDs exist
|
|
106
|
+
for (const taskId of request.ordered_task_ids) {
|
|
107
|
+
if (!taskMap.has(taskId)) {
|
|
108
|
+
throw new Error(`Task not found: ${taskId}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// Reorder tasks and update order indices
|
|
112
|
+
const reorderedTasks = [];
|
|
113
|
+
for (let i = 0; i < request.ordered_task_ids.length; i++) {
|
|
114
|
+
const task = taskMap.get(request.ordered_task_ids[i]);
|
|
115
|
+
reorderedTasks.push({
|
|
116
|
+
...task,
|
|
117
|
+
order: i,
|
|
118
|
+
updated_at: new Date().toISOString()
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
// Add any tasks not in the reorder list (shouldn't happen normally)
|
|
122
|
+
for (const task of tasks) {
|
|
123
|
+
if (!request.ordered_task_ids.includes(task.task_id)) {
|
|
124
|
+
reorderedTasks.push({
|
|
125
|
+
...task,
|
|
126
|
+
order: reorderedTasks.length,
|
|
127
|
+
updated_at: new Date().toISOString()
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
await this.writeTasks(loopId, reorderedTasks);
|
|
132
|
+
return reorderedTasks;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Delete all tasks for a loop
|
|
136
|
+
*/
|
|
137
|
+
async deleteAllTasks(loopId) {
|
|
138
|
+
const tasksPath = this.getTasksPath(loopId);
|
|
139
|
+
if (existsSync(tasksPath)) {
|
|
140
|
+
const { unlink } = await import('fs/promises');
|
|
141
|
+
await unlink(tasksPath).catch(() => { });
|
|
142
|
+
}
|
|
143
|
+
// Also delete backup
|
|
144
|
+
const backupPath = `${tasksPath}.backup`;
|
|
145
|
+
if (existsSync(backupPath)) {
|
|
146
|
+
const { unlink } = await import('fs/promises');
|
|
147
|
+
await unlink(backupPath).catch(() => { });
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Read tasks with recovery from backup
|
|
152
|
+
*/
|
|
153
|
+
async readTasksWithRecovery(loopId) {
|
|
154
|
+
try {
|
|
155
|
+
return await this.readTasks(loopId);
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
console.warn(`Tasks file corrupted, attempting recovery for ${loopId}...`);
|
|
159
|
+
const backupPath = `${this.getTasksPath(loopId)}.backup`;
|
|
160
|
+
if (existsSync(backupPath)) {
|
|
161
|
+
const content = await readFile(backupPath, 'utf-8');
|
|
162
|
+
const tasks = this.parseTasksJsonl(content);
|
|
163
|
+
// Restore from backup
|
|
164
|
+
await this.writeTasks(loopId, tasks);
|
|
165
|
+
return tasks;
|
|
166
|
+
}
|
|
167
|
+
throw error;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Get tasks file path
|
|
172
|
+
*/
|
|
173
|
+
getTasksPath(loopId) {
|
|
174
|
+
return join(this.baseDir, this.sanitizeLoopId(loopId), 'tasks.jsonl');
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Read tasks from JSONL file
|
|
178
|
+
*/
|
|
179
|
+
async readTasks(loopId) {
|
|
180
|
+
const filePath = this.getTasksPath(loopId);
|
|
181
|
+
if (!existsSync(filePath)) {
|
|
182
|
+
return [];
|
|
183
|
+
}
|
|
184
|
+
const content = await readFile(filePath, 'utf-8');
|
|
185
|
+
return this.parseTasksJsonl(content);
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Parse JSONL content into tasks array
|
|
189
|
+
*/
|
|
190
|
+
parseTasksJsonl(content) {
|
|
191
|
+
const tasks = [];
|
|
192
|
+
const lines = content.split('\n').filter(line => line.trim().length > 0);
|
|
193
|
+
for (const line of lines) {
|
|
194
|
+
try {
|
|
195
|
+
const task = JSON.parse(line);
|
|
196
|
+
tasks.push(task);
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
console.error('Failed to parse task line:', error);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return tasks;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Write tasks array to JSONL file
|
|
206
|
+
*/
|
|
207
|
+
async writeTasks(loopId, tasks) {
|
|
208
|
+
await this.ensureLoopDir(loopId);
|
|
209
|
+
const filePath = this.getTasksPath(loopId);
|
|
210
|
+
// Create backup if file exists
|
|
211
|
+
if (existsSync(filePath)) {
|
|
212
|
+
const backupPath = `${filePath}.backup`;
|
|
213
|
+
await copyFile(filePath, backupPath).catch(() => { });
|
|
214
|
+
}
|
|
215
|
+
// Write each task as a JSON line
|
|
216
|
+
const jsonlContent = tasks.map(t => JSON.stringify(t)).join('\n');
|
|
217
|
+
await writeFile(filePath, jsonlContent, 'utf-8');
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Append single task to JSONL file
|
|
221
|
+
*/
|
|
222
|
+
async appendTask(loopId, task) {
|
|
223
|
+
await this.ensureLoopDir(loopId);
|
|
224
|
+
const filePath = this.getTasksPath(loopId);
|
|
225
|
+
// Create backup if file exists
|
|
226
|
+
if (existsSync(filePath)) {
|
|
227
|
+
const backupPath = `${filePath}.backup`;
|
|
228
|
+
await copyFile(filePath, backupPath).catch(() => { });
|
|
229
|
+
}
|
|
230
|
+
// Append task as new line
|
|
231
|
+
const line = JSON.stringify(task) + '\n';
|
|
232
|
+
await writeFile(filePath, line, { flag: 'a' });
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Ensure loop directory exists
|
|
236
|
+
*/
|
|
237
|
+
async ensureLoopDir(loopId) {
|
|
238
|
+
const dirPath = join(this.baseDir, this.sanitizeLoopId(loopId));
|
|
239
|
+
if (!existsSync(dirPath)) {
|
|
240
|
+
await mkdir(dirPath, { recursive: true });
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Generate unique task ID
|
|
245
|
+
*/
|
|
246
|
+
generateTaskId() {
|
|
247
|
+
const timestamp = Date.now();
|
|
248
|
+
const random = randomBytes(4).toString('hex');
|
|
249
|
+
return `task-${timestamp}-${random}`;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Sanitize loop ID for filesystem usage
|
|
253
|
+
*/
|
|
254
|
+
sanitizeLoopId(loopId) {
|
|
255
|
+
// Remove any path traversal characters
|
|
256
|
+
return loopId.replace(/[\/\\]/g, '-').replace(/\.\./g, '').replace(/^\./, '');
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Reorder tasks array by updating order indices sequentially
|
|
260
|
+
*/
|
|
261
|
+
reorderTasksByOrder(tasks) {
|
|
262
|
+
return tasks
|
|
263
|
+
.sort((a, b) => a.order - b.order)
|
|
264
|
+
.map((task, index) => ({
|
|
265
|
+
...task,
|
|
266
|
+
order: index
|
|
267
|
+
}));
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
//# sourceMappingURL=loop-task-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loop-task-manager.js","sourceRoot":"","sources":["../../src/tools/loop-task-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-session-discovery.d.ts","sourceRoot":"","sources":["../../src/tools/native-session-discovery.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,IAAI,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAI/D;AASD;;GAEG;AACH,uBAAe,iBAAiB;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,uBAAuB,GAAG,aAAa,EAAE;IAExE;;OAEG;IACH,gBAAgB,CAAC,OAAO,CAAC,EAAE,uBAAuB,GAAG,aAAa,GAAG,IAAI;IAKzE;;OAEG;IACH,QAAQ,CAAC,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAEjE;;;;;OAKG;IACG,eAAe,CACnB,eAAe,EAAE,IAAI,EACrB,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAmBhC;;;OAGG;IACH,oBAAoB,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAkBrF;;;OAGG;IACH,QAAQ,CAAC,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAClE;
|
|
1
|
+
{"version":3,"file":"native-session-discovery.d.ts","sourceRoot":"","sources":["../../src/tools/native-session-discovery.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,IAAI,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAI/D;AASD;;GAEG;AACH,uBAAe,iBAAiB;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,uBAAuB,GAAG,aAAa,EAAE;IAExE;;OAEG;IACH,gBAAgB,CAAC,OAAO,CAAC,EAAE,uBAAuB,GAAG,aAAa,GAAG,IAAI;IAKzE;;OAEG;IACH,QAAQ,CAAC,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAEjE;;;;;OAKG;IACG,eAAe,CACnB,eAAe,EAAE,IAAI,EACrB,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAmBhC;;;OAGG;IACH,oBAAoB,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAkBrF;;;OAGG;IACH,QAAQ,CAAC,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAClE;AAqxBD;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAEpE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,MAAM,GAClB,aAAa,GAAG,IAAI,CAItB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAChB,aAAa,GAAG,IAAI,CAItB;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,eAAe,EAAE,IAAI,EACrB,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAI/B;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,uBAAuB,GAChC,aAAa,EAAE,CAIjB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAM1D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAAG,QAAQ,GAC3B,MAAM,EAAE,CA8BV;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG9D"}
|