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.
Files changed (250) hide show
  1. package/.claude/commands/workflow/lite-execute.md +2 -0
  2. package/.claude/commands/workflow/lite-fix.md +108 -9
  3. package/.claude/skills/ccw-loop/README.md +303 -0
  4. package/.claude/skills/ccw-loop/SKILL.md +259 -0
  5. package/.claude/skills/ccw-loop/phases/actions/action-complete.md +320 -0
  6. package/.claude/skills/ccw-loop/phases/actions/action-debug-with-file.md +485 -0
  7. package/.claude/skills/ccw-loop/phases/actions/action-develop-with-file.md +365 -0
  8. package/.claude/skills/ccw-loop/phases/actions/action-init.md +200 -0
  9. package/.claude/skills/ccw-loop/phases/actions/action-menu.md +192 -0
  10. package/.claude/skills/ccw-loop/phases/actions/action-validate-with-file.md +307 -0
  11. package/.claude/skills/ccw-loop/phases/orchestrator.md +486 -0
  12. package/.claude/skills/ccw-loop/phases/state-schema.md +474 -0
  13. package/.claude/skills/ccw-loop/specs/action-catalog.md +300 -0
  14. package/.claude/skills/ccw-loop/specs/loop-requirements.md +192 -0
  15. package/.claude/skills/ccw-loop/templates/progress-template.md +175 -0
  16. package/.claude/skills/ccw-loop/templates/understanding-template.md +303 -0
  17. package/.claude/skills/ccw-loop/templates/validation-template.md +258 -0
  18. package/.codex/agents/action-planning-agent.md +885 -0
  19. package/.codex/agents/ccw-loop-executor.md +260 -0
  20. package/.codex/agents/cli-discuss-agent.md +391 -0
  21. package/.codex/agents/cli-execution-agent.md +333 -0
  22. package/.codex/agents/cli-explore-agent.md +186 -0
  23. package/.codex/agents/cli-lite-planning-agent.md +736 -0
  24. package/.codex/agents/cli-planning-agent.md +562 -0
  25. package/.codex/agents/code-developer.md +408 -0
  26. package/.codex/agents/conceptual-planning-agent.md +321 -0
  27. package/.codex/agents/context-search-agent.md +585 -0
  28. package/.codex/agents/debug-explore-agent.md +436 -0
  29. package/.codex/agents/doc-generator.md +334 -0
  30. package/.codex/agents/issue-plan-agent.md +417 -0
  31. package/.codex/agents/issue-queue-agent.md +311 -0
  32. package/.codex/agents/memory-bridge.md +96 -0
  33. package/.codex/agents/test-context-search-agent.md +402 -0
  34. package/.codex/agents/test-fix-agent.md +359 -0
  35. package/.codex/agents/ui-design-agent.md +595 -0
  36. package/.codex/agents/universal-executor.md +135 -0
  37. package/.codex/prompts/issue-discover-by-prompt.md +364 -0
  38. package/.codex/prompts/issue-discover.md +261 -0
  39. package/.codex/prompts/issue-execute.md +10 -0
  40. package/.codex/prompts/issue-new.md +285 -0
  41. package/.codex/prompts/issue-plan.md +161 -63
  42. package/.codex/prompts/issue-queue.md +298 -288
  43. package/.codex/prompts/lite-execute.md +627 -133
  44. package/.codex/prompts/lite-fix.md +670 -0
  45. package/.codex/prompts/lite-plan-a.md +337 -0
  46. package/.codex/prompts/lite-plan-b.md +485 -0
  47. package/.codex/prompts/{lite-plan.md → lite-plan-c.md} +601 -469
  48. package/.codex/skills/ccw-loop/README.md +171 -0
  49. package/.codex/skills/ccw-loop/SKILL.md +349 -0
  50. package/.codex/skills/ccw-loop/phases/actions/action-complete.md +269 -0
  51. package/.codex/skills/ccw-loop/phases/actions/action-debug.md +286 -0
  52. package/.codex/skills/ccw-loop/phases/actions/action-develop.md +183 -0
  53. package/.codex/skills/ccw-loop/phases/actions/action-init.md +164 -0
  54. package/.codex/skills/ccw-loop/phases/actions/action-menu.md +205 -0
  55. package/.codex/skills/ccw-loop/phases/actions/action-validate.md +250 -0
  56. package/.codex/skills/ccw-loop/phases/orchestrator.md +416 -0
  57. package/.codex/skills/ccw-loop/phases/state-schema.md +388 -0
  58. package/.codex/skills/ccw-loop/specs/action-catalog.md +182 -0
  59. package/.codex/skills/ccw-loop-b/README.md +102 -0
  60. package/.codex/skills/ccw-loop-b/SKILL.md +322 -0
  61. package/.codex/skills/ccw-loop-b/phases/orchestrator.md +257 -0
  62. package/.codex/skills/ccw-loop-b/phases/state-schema.md +181 -0
  63. package/ccw/dist/cli.d.ts.map +1 -1
  64. package/ccw/dist/cli.js +12 -1
  65. package/ccw/dist/cli.js.map +1 -1
  66. package/ccw/dist/commands/cli.d.ts.map +1 -1
  67. package/ccw/dist/commands/cli.js +14 -1
  68. package/ccw/dist/commands/cli.js.map +1 -1
  69. package/ccw/dist/commands/install.d.ts.map +1 -1
  70. package/ccw/dist/commands/install.js +38 -7
  71. package/ccw/dist/commands/install.js.map +1 -1
  72. package/ccw/dist/commands/issue.d.ts +3 -0
  73. package/ccw/dist/commands/issue.d.ts.map +1 -1
  74. package/ccw/dist/commands/issue.js +107 -0
  75. package/ccw/dist/commands/issue.js.map +1 -1
  76. package/ccw/dist/commands/loop.d.ts +10 -0
  77. package/ccw/dist/commands/loop.d.ts.map +1 -0
  78. package/ccw/dist/commands/loop.js +289 -0
  79. package/ccw/dist/commands/loop.js.map +1 -0
  80. package/ccw/dist/commands/upgrade.js +1 -1
  81. package/ccw/dist/commands/upgrade.js.map +1 -1
  82. package/ccw/dist/config/litellm-api-config-manager.d.ts.map +1 -1
  83. package/ccw/dist/config/litellm-api-config-manager.js +3 -2
  84. package/ccw/dist/config/litellm-api-config-manager.js.map +1 -1
  85. package/ccw/dist/core/dashboard-generator.d.ts.map +1 -1
  86. package/ccw/dist/core/dashboard-generator.js +4 -1
  87. package/ccw/dist/core/dashboard-generator.js.map +1 -1
  88. package/ccw/dist/core/memory-embedder-bridge.d.ts.map +1 -1
  89. package/ccw/dist/core/memory-embedder-bridge.js +2 -5
  90. package/ccw/dist/core/memory-embedder-bridge.js.map +1 -1
  91. package/ccw/dist/core/routes/claude-routes.d.ts.map +1 -1
  92. package/ccw/dist/core/routes/claude-routes.js +5 -3
  93. package/ccw/dist/core/routes/claude-routes.js.map +1 -1
  94. package/ccw/dist/core/routes/cli-routes.d.ts +6 -0
  95. package/ccw/dist/core/routes/cli-routes.d.ts.map +1 -1
  96. package/ccw/dist/core/routes/cli-routes.js +42 -13
  97. package/ccw/dist/core/routes/cli-routes.js.map +1 -1
  98. package/ccw/dist/core/routes/cli-settings-routes.d.ts.map +1 -1
  99. package/ccw/dist/core/routes/cli-settings-routes.js +44 -0
  100. package/ccw/dist/core/routes/cli-settings-routes.js.map +1 -1
  101. package/ccw/dist/core/routes/codexlens/config-handlers.d.ts.map +1 -1
  102. package/ccw/dist/core/routes/codexlens/config-handlers.js +7 -6
  103. package/ccw/dist/core/routes/codexlens/config-handlers.js.map +1 -1
  104. package/ccw/dist/core/routes/codexlens/semantic-handlers.d.ts.map +1 -1
  105. package/ccw/dist/core/routes/codexlens/semantic-handlers.js +5 -4
  106. package/ccw/dist/core/routes/codexlens/semantic-handlers.js.map +1 -1
  107. package/ccw/dist/core/routes/core-memory-routes.d.ts.map +1 -1
  108. package/ccw/dist/core/routes/core-memory-routes.js +4 -2
  109. package/ccw/dist/core/routes/core-memory-routes.js.map +1 -1
  110. package/ccw/dist/core/routes/files-routes.d.ts.map +1 -1
  111. package/ccw/dist/core/routes/files-routes.js +4 -2
  112. package/ccw/dist/core/routes/files-routes.js.map +1 -1
  113. package/ccw/dist/core/routes/graph-routes.d.ts.map +1 -1
  114. package/ccw/dist/core/routes/graph-routes.js +17 -2
  115. package/ccw/dist/core/routes/graph-routes.js.map +1 -1
  116. package/ccw/dist/core/routes/issue-routes.d.ts.map +1 -1
  117. package/ccw/dist/core/routes/issue-routes.js +280 -33
  118. package/ccw/dist/core/routes/issue-routes.js.map +1 -1
  119. package/ccw/dist/core/routes/loop-routes.d.ts +24 -0
  120. package/ccw/dist/core/routes/loop-routes.d.ts.map +1 -0
  121. package/ccw/dist/core/routes/loop-routes.js +334 -0
  122. package/ccw/dist/core/routes/loop-routes.js.map +1 -0
  123. package/ccw/dist/core/routes/loop-v2-routes.d.ts +44 -0
  124. package/ccw/dist/core/routes/loop-v2-routes.d.ts.map +1 -0
  125. package/ccw/dist/core/routes/loop-v2-routes.js +1260 -0
  126. package/ccw/dist/core/routes/loop-v2-routes.js.map +1 -0
  127. package/ccw/dist/core/routes/memory-routes.d.ts.map +1 -1
  128. package/ccw/dist/core/routes/memory-routes.js +2 -1
  129. package/ccw/dist/core/routes/memory-routes.js.map +1 -1
  130. package/ccw/dist/core/routes/system-routes.d.ts.map +1 -1
  131. package/ccw/dist/core/routes/system-routes.js +3 -2
  132. package/ccw/dist/core/routes/system-routes.js.map +1 -1
  133. package/ccw/dist/core/routes/task-routes.d.ts +12 -0
  134. package/ccw/dist/core/routes/task-routes.d.ts.map +1 -0
  135. package/ccw/dist/core/routes/task-routes.js +321 -0
  136. package/ccw/dist/core/routes/task-routes.js.map +1 -0
  137. package/ccw/dist/core/routes/test-loop-routes.d.ts +11 -0
  138. package/ccw/dist/core/routes/test-loop-routes.d.ts.map +1 -0
  139. package/ccw/dist/core/routes/test-loop-routes.js +298 -0
  140. package/ccw/dist/core/routes/test-loop-routes.js.map +1 -0
  141. package/ccw/dist/core/server.d.ts.map +1 -1
  142. package/ccw/dist/core/server.js +47 -5
  143. package/ccw/dist/core/server.js.map +1 -1
  144. package/ccw/dist/core/websocket.d.ts +59 -0
  145. package/ccw/dist/core/websocket.d.ts.map +1 -1
  146. package/ccw/dist/core/websocket.js +34 -0
  147. package/ccw/dist/core/websocket.js.map +1 -1
  148. package/ccw/dist/tools/claude-cli-tools.d.ts +40 -0
  149. package/ccw/dist/tools/claude-cli-tools.d.ts.map +1 -1
  150. package/ccw/dist/tools/claude-cli-tools.js +119 -0
  151. package/ccw/dist/tools/claude-cli-tools.js.map +1 -1
  152. package/ccw/dist/tools/codex-lens-lsp.d.ts.map +1 -1
  153. package/ccw/dist/tools/codex-lens-lsp.js +2 -5
  154. package/ccw/dist/tools/codex-lens-lsp.js.map +1 -1
  155. package/ccw/dist/tools/codex-lens.d.ts.map +1 -1
  156. package/ccw/dist/tools/codex-lens.js +22 -32
  157. package/ccw/dist/tools/codex-lens.js.map +1 -1
  158. package/ccw/dist/tools/litellm-client.d.ts +6 -0
  159. package/ccw/dist/tools/litellm-client.d.ts.map +1 -1
  160. package/ccw/dist/tools/litellm-client.js +15 -2
  161. package/ccw/dist/tools/litellm-client.js.map +1 -1
  162. package/ccw/dist/tools/loop-manager.d.ts +84 -0
  163. package/ccw/dist/tools/loop-manager.d.ts.map +1 -0
  164. package/ccw/dist/tools/loop-manager.js +425 -0
  165. package/ccw/dist/tools/loop-manager.js.map +1 -0
  166. package/ccw/dist/tools/loop-state-manager.d.ts +47 -0
  167. package/ccw/dist/tools/loop-state-manager.d.ts.map +1 -0
  168. package/ccw/dist/tools/loop-state-manager.js +149 -0
  169. package/ccw/dist/tools/loop-state-manager.js.map +1 -0
  170. package/ccw/dist/tools/loop-task-manager.d.ts +149 -0
  171. package/ccw/dist/tools/loop-task-manager.d.ts.map +1 -0
  172. package/ccw/dist/tools/loop-task-manager.js +270 -0
  173. package/ccw/dist/tools/loop-task-manager.js.map +1 -0
  174. package/ccw/dist/tools/native-session-discovery.d.ts.map +1 -1
  175. package/ccw/dist/tools/native-session-discovery.js +35 -7
  176. package/ccw/dist/tools/native-session-discovery.js.map +1 -1
  177. package/ccw/dist/types/index.d.ts +1 -0
  178. package/ccw/dist/types/index.d.ts.map +1 -1
  179. package/ccw/dist/types/index.js +1 -0
  180. package/ccw/dist/types/index.js.map +1 -1
  181. package/ccw/dist/types/loop.d.ts +257 -0
  182. package/ccw/dist/types/loop.d.ts.map +1 -0
  183. package/ccw/dist/types/loop.js +17 -0
  184. package/ccw/dist/types/loop.js.map +1 -0
  185. package/ccw/dist/utils/codexlens-path.d.ts +36 -0
  186. package/ccw/dist/utils/codexlens-path.d.ts.map +1 -0
  187. package/ccw/dist/utils/codexlens-path.js +56 -0
  188. package/ccw/dist/utils/codexlens-path.js.map +1 -0
  189. package/ccw/dist/utils/uv-manager.d.ts.map +1 -1
  190. package/ccw/dist/utils/uv-manager.js +3 -2
  191. package/ccw/dist/utils/uv-manager.js.map +1 -1
  192. package/ccw/src/cli.ts +13 -1
  193. package/ccw/src/commands/cli.ts +14 -1
  194. package/ccw/src/commands/install.ts +50 -7
  195. package/ccw/src/commands/issue.ts +119 -0
  196. package/ccw/src/commands/loop.ts +344 -0
  197. package/ccw/src/commands/upgrade.ts +1 -1
  198. package/ccw/src/config/litellm-api-config-manager.ts +3 -2
  199. package/ccw/src/core/dashboard-generator.ts +4 -1
  200. package/ccw/src/core/memory-embedder-bridge.ts +2 -6
  201. package/ccw/src/core/routes/claude-routes.ts +5 -3
  202. package/ccw/src/core/routes/cli-routes.ts +48 -16
  203. package/ccw/src/core/routes/cli-settings-routes.ts +47 -0
  204. package/ccw/src/core/routes/codexlens/config-handlers.ts +7 -6
  205. package/ccw/src/core/routes/codexlens/semantic-handlers.ts +5 -4
  206. package/ccw/src/core/routes/core-memory-routes.ts +4 -2
  207. package/ccw/src/core/routes/files-routes.ts +4 -2
  208. package/ccw/src/core/routes/graph-routes.ts +18 -2
  209. package/ccw/src/core/routes/issue-routes.ts +308 -33
  210. package/ccw/src/core/routes/loop-routes.ts +386 -0
  211. package/ccw/src/core/routes/loop-v2-routes.ts +1470 -0
  212. package/ccw/src/core/routes/memory-routes.ts +2 -1
  213. package/ccw/src/core/routes/system-routes.ts +3 -2
  214. package/ccw/src/core/routes/task-routes.ts +361 -0
  215. package/ccw/src/core/routes/test-loop-routes.ts +312 -0
  216. package/ccw/src/core/server.ts +49 -5
  217. package/ccw/src/core/websocket.ts +104 -0
  218. package/ccw/src/templates/dashboard-css/02-session.css +2 -0
  219. package/ccw/src/templates/dashboard-css/04-lite-tasks.css +103 -1
  220. package/ccw/src/templates/dashboard-css/12-cli-legacy.css +56 -0
  221. package/ccw/src/templates/dashboard-css/32-issue-manager.css +32 -0
  222. package/ccw/src/templates/dashboard-css/33-cli-stream-viewer.css +55 -0
  223. package/ccw/src/templates/dashboard-css/36-loop-monitor.css +1896 -0
  224. package/ccw/src/templates/dashboard-css/36-loop-monitor.css.backup +1877 -0
  225. package/ccw/src/templates/dashboard-js/components/cli-history.js +48 -48
  226. package/ccw/src/templates/dashboard-js/components/cli-status.js +64 -3
  227. package/ccw/src/templates/dashboard-js/components/cli-stream-viewer.js +251 -110
  228. package/ccw/src/templates/dashboard-js/components/navigation.js +16 -0
  229. package/ccw/src/templates/dashboard-js/components/notifications.js +22 -0
  230. package/ccw/src/templates/dashboard-js/components/version-check.js +38 -0
  231. package/ccw/src/templates/dashboard-js/i18n.js +601 -1
  232. package/ccw/src/templates/dashboard-js/state.js +2 -0
  233. package/ccw/src/templates/dashboard-js/views/cli-manager.js +4 -3
  234. package/ccw/src/templates/dashboard-js/views/issue-manager.js +183 -1
  235. package/ccw/src/templates/dashboard-js/views/lite-tasks.js +55 -11
  236. package/ccw/src/templates/dashboard-js/views/loop-monitor.js +3345 -0
  237. package/ccw/src/templates/dashboard.html +68 -4
  238. package/ccw/src/tools/claude-cli-tools.ts +143 -0
  239. package/ccw/src/tools/codex-lens-lsp.ts +2 -5
  240. package/ccw/src/tools/codex-lens.ts +27 -38
  241. package/ccw/src/tools/litellm-client.ts +16 -2
  242. package/ccw/src/tools/loop-manager.ts +519 -0
  243. package/ccw/src/tools/loop-state-manager.ts +173 -0
  244. package/ccw/src/tools/loop-task-manager.ts +391 -0
  245. package/ccw/src/tools/native-session-discovery.ts +38 -7
  246. package/ccw/src/types/index.ts +1 -0
  247. package/ccw/src/types/loop.ts +316 -0
  248. package/ccw/src/utils/codexlens-path.ts +60 -0
  249. package/ccw/src/utils/uv-manager.ts +3 -2
  250. 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":"AAAA;;;;;;;GAOG;AAOH;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAEhB,oCAAoC;IACpC,WAAW,EAAE,MAAM,CAAC;IAEpB;;;;;;;;;;;OAWG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb,qBAAqB;IACrB,IAAI,EAAE,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC;IAEtC,gDAAgD;IAChD,eAAe,EAAE,MAAM,CAAC;IAExB,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;IAEd,yBAAyB;IACzB,UAAU,EAAE,MAAM,CAAC;IAEnB,4BAA4B;IAC5B,UAAU,EAAE,MAAM,CAAC;IAEnB,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,WAAW,CAAC;CAC/C;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACvB,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACxB,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED;;;GAGG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAAS;gBAEZ,WAAW,EAAE,MAAM;IAK/B;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,QAAQ,CAAC;IA0B5E;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAInD;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAKvE;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAyBtG;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAelE;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAqCpF;;OAEG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBnD;;OAEG;IACG,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAmBhE;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAIpC;;OAEG;YACW,SAAS;IAWvB;;OAEG;IACH,OAAO,CAAC,eAAe;IAgBvB;;OAEG;YACW,UAAU;IAgBxB;;OAEG;YACW,UAAU;IAgBxB;;OAEG;YACW,aAAa;IAO3B;;OAEG;IACH,OAAO,CAAC,cAAc;IAMtB;;OAEG;IACH,OAAO,CAAC,cAAc;IAKtB;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAQ5B"}
@@ -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;AAsvBD;;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"}
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"}