wogiflow 1.0.0

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 (221) hide show
  1. package/.workflow/agents/reviewer.md +81 -0
  2. package/.workflow/agents/security.md +94 -0
  3. package/.workflow/agents/story-writer.md +58 -0
  4. package/.workflow/bridges/base-bridge.js +395 -0
  5. package/.workflow/bridges/claude-bridge.js +434 -0
  6. package/.workflow/bridges/index.js +130 -0
  7. package/.workflow/lib/assumption-detector.js +481 -0
  8. package/.workflow/lib/config-substitution.js +371 -0
  9. package/.workflow/lib/failure-categories.js +478 -0
  10. package/.workflow/state/app-map.md.template +15 -0
  11. package/.workflow/state/architecture.md.template +24 -0
  12. package/.workflow/state/component-index.json.template +5 -0
  13. package/.workflow/state/decisions.md.template +15 -0
  14. package/.workflow/state/feedback-patterns.md.template +9 -0
  15. package/.workflow/state/knowledge-sync.json.template +6 -0
  16. package/.workflow/state/progress.md.template +14 -0
  17. package/.workflow/state/ready.json.template +7 -0
  18. package/.workflow/state/request-log.md.template +14 -0
  19. package/.workflow/state/session-state.json.template +11 -0
  20. package/.workflow/state/stack.md.template +33 -0
  21. package/.workflow/state/testing.md.template +36 -0
  22. package/.workflow/templates/claude-md.hbs +257 -0
  23. package/.workflow/templates/correction-report.md +67 -0
  24. package/.workflow/templates/gemini-md.hbs +52 -0
  25. package/README.md +1802 -0
  26. package/bin/flow +205 -0
  27. package/lib/index.js +33 -0
  28. package/lib/installer.js +467 -0
  29. package/lib/release-channel.js +269 -0
  30. package/lib/skill-registry.js +526 -0
  31. package/lib/upgrader.js +401 -0
  32. package/lib/utils.js +305 -0
  33. package/package.json +64 -0
  34. package/scripts/flow +985 -0
  35. package/scripts/flow-adaptive-learning.js +1259 -0
  36. package/scripts/flow-aggregate.js +488 -0
  37. package/scripts/flow-archive +133 -0
  38. package/scripts/flow-auto-context.js +1015 -0
  39. package/scripts/flow-auto-learn.js +615 -0
  40. package/scripts/flow-bridge.js +223 -0
  41. package/scripts/flow-browser-suggest.js +316 -0
  42. package/scripts/flow-bug.js +247 -0
  43. package/scripts/flow-cascade.js +711 -0
  44. package/scripts/flow-changelog +85 -0
  45. package/scripts/flow-checkpoint.js +483 -0
  46. package/scripts/flow-cli.js +403 -0
  47. package/scripts/flow-code-intelligence.js +760 -0
  48. package/scripts/flow-complexity.js +502 -0
  49. package/scripts/flow-config-set.js +152 -0
  50. package/scripts/flow-constants.js +157 -0
  51. package/scripts/flow-context +152 -0
  52. package/scripts/flow-context-init.js +482 -0
  53. package/scripts/flow-context-monitor.js +384 -0
  54. package/scripts/flow-context-scoring.js +886 -0
  55. package/scripts/flow-correct.js +458 -0
  56. package/scripts/flow-damage-control.js +985 -0
  57. package/scripts/flow-deps +101 -0
  58. package/scripts/flow-diff.js +700 -0
  59. package/scripts/flow-done +151 -0
  60. package/scripts/flow-done.js +489 -0
  61. package/scripts/flow-durable-session.js +1541 -0
  62. package/scripts/flow-entropy-monitor.js +345 -0
  63. package/scripts/flow-export-profile +349 -0
  64. package/scripts/flow-export-scanner.js +1046 -0
  65. package/scripts/flow-figma-confirm.js +400 -0
  66. package/scripts/flow-figma-extract.js +496 -0
  67. package/scripts/flow-figma-generate.js +683 -0
  68. package/scripts/flow-figma-index.js +909 -0
  69. package/scripts/flow-figma-match.js +617 -0
  70. package/scripts/flow-figma-mcp-server.js +518 -0
  71. package/scripts/flow-figma-pipeline.js +414 -0
  72. package/scripts/flow-file-ops.js +301 -0
  73. package/scripts/flow-gate-confidence.js +825 -0
  74. package/scripts/flow-guided-edit.js +659 -0
  75. package/scripts/flow-health +185 -0
  76. package/scripts/flow-health.js +413 -0
  77. package/scripts/flow-hooks.js +556 -0
  78. package/scripts/flow-http-client.js +249 -0
  79. package/scripts/flow-hybrid-detect.js +167 -0
  80. package/scripts/flow-hybrid-interactive.js +591 -0
  81. package/scripts/flow-hybrid-test.js +152 -0
  82. package/scripts/flow-import-profile +439 -0
  83. package/scripts/flow-init +253 -0
  84. package/scripts/flow-instruction-richness.js +827 -0
  85. package/scripts/flow-jira-integration.js +579 -0
  86. package/scripts/flow-knowledge-router.js +522 -0
  87. package/scripts/flow-knowledge-sync.js +589 -0
  88. package/scripts/flow-linear-integration.js +631 -0
  89. package/scripts/flow-links.js +774 -0
  90. package/scripts/flow-log-manager.js +559 -0
  91. package/scripts/flow-loop-enforcer.js +1246 -0
  92. package/scripts/flow-loop-retry-learning.js +630 -0
  93. package/scripts/flow-lsp.js +923 -0
  94. package/scripts/flow-map-index +348 -0
  95. package/scripts/flow-map-sync +201 -0
  96. package/scripts/flow-memory-blocks.js +668 -0
  97. package/scripts/flow-memory-compactor.js +350 -0
  98. package/scripts/flow-memory-db.js +1110 -0
  99. package/scripts/flow-memory-sync.js +484 -0
  100. package/scripts/flow-metrics.js +353 -0
  101. package/scripts/flow-migrate-ids.js +370 -0
  102. package/scripts/flow-model-adapter.js +802 -0
  103. package/scripts/flow-model-router.js +884 -0
  104. package/scripts/flow-models.js +1231 -0
  105. package/scripts/flow-morning.js +517 -0
  106. package/scripts/flow-multi-approach.js +660 -0
  107. package/scripts/flow-new-feature +86 -0
  108. package/scripts/flow-onboard +1042 -0
  109. package/scripts/flow-orchestrate-llm.js +459 -0
  110. package/scripts/flow-orchestrate.js +3592 -0
  111. package/scripts/flow-output.js +123 -0
  112. package/scripts/flow-parallel-detector.js +399 -0
  113. package/scripts/flow-parallel-dispatch.js +987 -0
  114. package/scripts/flow-parallel.js +428 -0
  115. package/scripts/flow-pattern-enforcer.js +600 -0
  116. package/scripts/flow-prd-manager.js +282 -0
  117. package/scripts/flow-progress.js +323 -0
  118. package/scripts/flow-project-analyzer.js +975 -0
  119. package/scripts/flow-prompt-composer.js +487 -0
  120. package/scripts/flow-providers.js +1381 -0
  121. package/scripts/flow-queue.js +308 -0
  122. package/scripts/flow-ready +82 -0
  123. package/scripts/flow-ready.js +189 -0
  124. package/scripts/flow-regression.js +396 -0
  125. package/scripts/flow-response-parser.js +450 -0
  126. package/scripts/flow-resume.js +284 -0
  127. package/scripts/flow-rules-sync.js +439 -0
  128. package/scripts/flow-run-trace.js +718 -0
  129. package/scripts/flow-safety.js +587 -0
  130. package/scripts/flow-search +104 -0
  131. package/scripts/flow-security.js +481 -0
  132. package/scripts/flow-session-end +106 -0
  133. package/scripts/flow-session-end.js +437 -0
  134. package/scripts/flow-session-state.js +671 -0
  135. package/scripts/flow-setup-hooks +216 -0
  136. package/scripts/flow-setup-hooks.js +377 -0
  137. package/scripts/flow-skill-create.js +329 -0
  138. package/scripts/flow-skill-creator.js +572 -0
  139. package/scripts/flow-skill-generator.js +1046 -0
  140. package/scripts/flow-skill-learn.js +880 -0
  141. package/scripts/flow-skill-matcher.js +578 -0
  142. package/scripts/flow-spec-generator.js +820 -0
  143. package/scripts/flow-stack-wizard.js +895 -0
  144. package/scripts/flow-standup +162 -0
  145. package/scripts/flow-start +74 -0
  146. package/scripts/flow-start.js +235 -0
  147. package/scripts/flow-status +110 -0
  148. package/scripts/flow-status.js +301 -0
  149. package/scripts/flow-step-browser.js +83 -0
  150. package/scripts/flow-step-changelog.js +217 -0
  151. package/scripts/flow-step-comments.js +306 -0
  152. package/scripts/flow-step-complexity.js +234 -0
  153. package/scripts/flow-step-coverage.js +218 -0
  154. package/scripts/flow-step-knowledge.js +193 -0
  155. package/scripts/flow-step-pr-tests.js +364 -0
  156. package/scripts/flow-step-regression.js +89 -0
  157. package/scripts/flow-step-review.js +516 -0
  158. package/scripts/flow-step-security.js +162 -0
  159. package/scripts/flow-step-silent-failures.js +290 -0
  160. package/scripts/flow-step-simplifier.js +346 -0
  161. package/scripts/flow-story +105 -0
  162. package/scripts/flow-story.js +500 -0
  163. package/scripts/flow-suspend.js +252 -0
  164. package/scripts/flow-sync-daemon.js +654 -0
  165. package/scripts/flow-task-analyzer.js +606 -0
  166. package/scripts/flow-team-dashboard.js +748 -0
  167. package/scripts/flow-team-sync.js +752 -0
  168. package/scripts/flow-team.js +977 -0
  169. package/scripts/flow-tech-options.js +528 -0
  170. package/scripts/flow-templates.js +812 -0
  171. package/scripts/flow-tiered-learning.js +728 -0
  172. package/scripts/flow-trace +204 -0
  173. package/scripts/flow-transcript-chunking.js +1106 -0
  174. package/scripts/flow-transcript-digest.js +7918 -0
  175. package/scripts/flow-transcript-language.js +465 -0
  176. package/scripts/flow-transcript-parsing.js +1085 -0
  177. package/scripts/flow-transcript-stories.js +2194 -0
  178. package/scripts/flow-update-map +224 -0
  179. package/scripts/flow-utils.js +2242 -0
  180. package/scripts/flow-verification.js +644 -0
  181. package/scripts/flow-verify.js +1177 -0
  182. package/scripts/flow-voice-input.js +638 -0
  183. package/scripts/flow-watch +168 -0
  184. package/scripts/flow-workflow-steps.js +521 -0
  185. package/scripts/flow-workflow.js +1029 -0
  186. package/scripts/flow-worktree.js +489 -0
  187. package/scripts/hooks/adapters/base-adapter.js +102 -0
  188. package/scripts/hooks/adapters/claude-code.js +359 -0
  189. package/scripts/hooks/adapters/index.js +79 -0
  190. package/scripts/hooks/core/component-check.js +341 -0
  191. package/scripts/hooks/core/index.js +35 -0
  192. package/scripts/hooks/core/loop-check.js +241 -0
  193. package/scripts/hooks/core/session-context.js +294 -0
  194. package/scripts/hooks/core/task-gate.js +177 -0
  195. package/scripts/hooks/core/validation.js +230 -0
  196. package/scripts/hooks/entry/claude-code/post-tool-use.js +65 -0
  197. package/scripts/hooks/entry/claude-code/pre-tool-use.js +89 -0
  198. package/scripts/hooks/entry/claude-code/session-end.js +87 -0
  199. package/scripts/hooks/entry/claude-code/session-start.js +46 -0
  200. package/scripts/hooks/entry/claude-code/stop.js +43 -0
  201. package/scripts/postinstall.js +139 -0
  202. package/templates/browser-test-flow.json +56 -0
  203. package/templates/bug-report.md +43 -0
  204. package/templates/component-detail.md +42 -0
  205. package/templates/component.stories.tsx +49 -0
  206. package/templates/context/constraints.md +83 -0
  207. package/templates/context/conventions.md +177 -0
  208. package/templates/context/stack.md +60 -0
  209. package/templates/correction-report.md +90 -0
  210. package/templates/feature-proposal.md +35 -0
  211. package/templates/hybrid/_base.md +254 -0
  212. package/templates/hybrid/_patterns.md +45 -0
  213. package/templates/hybrid/create-component.md +127 -0
  214. package/templates/hybrid/create-file.md +56 -0
  215. package/templates/hybrid/create-hook.md +145 -0
  216. package/templates/hybrid/create-service.md +70 -0
  217. package/templates/hybrid/fix-bug.md +33 -0
  218. package/templates/hybrid/modify-file.md +55 -0
  219. package/templates/story.md +68 -0
  220. package/templates/task.json +56 -0
  221. package/templates/trace.md +69 -0
@@ -0,0 +1,359 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Wogi Flow - Claude Code Adapter
5
+ *
6
+ * Transforms core hook results to Claude Code's hook format.
7
+ * Handles SessionStart, PreToolUse, PostToolUse, Stop, SessionEnd.
8
+ */
9
+
10
+ const path = require('path');
11
+ const fs = require('fs');
12
+ const { BaseAdapter } = require('./base-adapter');
13
+
14
+ // Import from parent scripts directory
15
+ const { PATHS } = require('../../flow-utils');
16
+
17
+ /**
18
+ * Claude Code Hook Events
19
+ */
20
+ const CLAUDE_CODE_EVENTS = [
21
+ 'SessionStart',
22
+ 'PreToolUse',
23
+ 'PostToolUse',
24
+ 'Stop',
25
+ 'SubagentStop',
26
+ 'SessionEnd',
27
+ 'Notification',
28
+ 'UserPromptSubmit'
29
+ ];
30
+
31
+ /**
32
+ * Claude Code Adapter
33
+ */
34
+ class ClaudeCodeAdapter extends BaseAdapter {
35
+ constructor() {
36
+ super('claude-code');
37
+ }
38
+
39
+ /**
40
+ * Get Claude Code's settings path
41
+ */
42
+ getConfigPath() {
43
+ return path.join(PATHS.claude, 'settings.json');
44
+ }
45
+
46
+ /**
47
+ * Get local settings path (not committed)
48
+ */
49
+ getLocalConfigPath() {
50
+ return path.join(PATHS.claude, 'settings.local.json');
51
+ }
52
+
53
+ /**
54
+ * Get supported events
55
+ */
56
+ getSupportedEvents() {
57
+ return CLAUDE_CODE_EVENTS;
58
+ }
59
+
60
+ /**
61
+ * Check if Claude Code is likely available
62
+ */
63
+ isAvailable() {
64
+ // Check if .claude directory exists
65
+ return fs.existsSync(PATHS.claude);
66
+ }
67
+
68
+ /**
69
+ * Parse Claude Code hook input
70
+ */
71
+ parseInput(input) {
72
+ return {
73
+ sessionId: input.session_id,
74
+ transcriptPath: input.transcript_path,
75
+ cwd: input.cwd,
76
+ permissionMode: input.permission_mode,
77
+ hookEvent: input.hook_event_name,
78
+ toolName: input.tool_name,
79
+ toolInput: input.tool_input,
80
+ toolUseId: input.tool_use_id,
81
+ toolResponse: input.tool_response,
82
+ prompt: input.prompt,
83
+ source: input.source,
84
+ reason: input.reason
85
+ };
86
+ }
87
+
88
+ /**
89
+ * Transform core result to Claude Code format
90
+ */
91
+ transformResult(event, coreResult) {
92
+ switch (event) {
93
+ case 'SessionStart':
94
+ return this.transformSessionStart(coreResult);
95
+ case 'PreToolUse':
96
+ return this.transformPreToolUse(coreResult);
97
+ case 'PostToolUse':
98
+ return this.transformPostToolUse(coreResult);
99
+ case 'Stop':
100
+ case 'SubagentStop':
101
+ return this.transformStop(coreResult);
102
+ case 'SessionEnd':
103
+ return this.transformSessionEnd(coreResult);
104
+ default:
105
+ return { continue: true };
106
+ }
107
+ }
108
+
109
+ /**
110
+ * Transform SessionStart result
111
+ */
112
+ transformSessionStart(coreResult) {
113
+ if (!coreResult.enabled || !coreResult.context) {
114
+ return { continue: true };
115
+ }
116
+
117
+ // Format context for injection
118
+ const { formatContextForInjection } = require('../core/session-context');
119
+ const contextText = formatContextForInjection(coreResult);
120
+
121
+ return {
122
+ continue: true,
123
+ hookSpecificOutput: {
124
+ hookEventName: 'SessionStart',
125
+ additionalContext: contextText
126
+ }
127
+ };
128
+ }
129
+
130
+ /**
131
+ * Transform PreToolUse result (task gating, component check)
132
+ */
133
+ transformPreToolUse(coreResult) {
134
+ // Blocked - deny permission
135
+ if (coreResult.blocked) {
136
+ return {
137
+ continue: true,
138
+ hookSpecificOutput: {
139
+ hookEventName: 'PreToolUse',
140
+ permissionDecision: 'deny',
141
+ permissionDecisionReason: coreResult.message || 'Action blocked by Wogi Flow'
142
+ }
143
+ };
144
+ }
145
+
146
+ // Warning - allow but show message
147
+ if (coreResult.warning && coreResult.message) {
148
+ return {
149
+ continue: true,
150
+ systemMessage: coreResult.message,
151
+ hookSpecificOutput: {
152
+ hookEventName: 'PreToolUse',
153
+ permissionDecision: 'allow'
154
+ }
155
+ };
156
+ }
157
+
158
+ // Allowed
159
+ return {
160
+ continue: true,
161
+ hookSpecificOutput: {
162
+ hookEventName: 'PreToolUse',
163
+ permissionDecision: 'allow'
164
+ }
165
+ };
166
+ }
167
+
168
+ /**
169
+ * Transform PostToolUse result (validation)
170
+ */
171
+ transformPostToolUse(coreResult) {
172
+ // If validation was skipped or passed
173
+ if (coreResult.skipped || coreResult.passed) {
174
+ const message = coreResult.summary || (coreResult.passed ? 'Validation passed' : null);
175
+ return {
176
+ continue: true,
177
+ ...(message && { systemMessage: message })
178
+ };
179
+ }
180
+
181
+ // Validation failed
182
+ return {
183
+ continue: true,
184
+ systemMessage: coreResult.summary || 'Validation failed',
185
+ hookSpecificOutput: {
186
+ hookEventName: 'PostToolUse',
187
+ decision: coreResult.blocked ? 'block' : undefined,
188
+ reason: coreResult.message
189
+ }
190
+ };
191
+ }
192
+
193
+ /**
194
+ * Transform Stop result (loop enforcement + task queue continuation)
195
+ */
196
+ transformStop(coreResult) {
197
+ // Can exit
198
+ if (coreResult.canExit) {
199
+ return {
200
+ continue: false, // Allow stop
201
+ ...(coreResult.message && { systemMessage: coreResult.message })
202
+ };
203
+ }
204
+
205
+ // Continue to next task in queue (not blocked, just continue)
206
+ if (coreResult.continueToNext) {
207
+ const nextTaskMsg = `
208
+ ✓ Task complete!
209
+
210
+ **Continuing to next task in queue:** ${coreResult.nextTaskId}
211
+ (${coreResult.remaining} task(s) remaining)
212
+
213
+ Run: /wogi-start ${coreResult.nextTaskId}`;
214
+
215
+ return {
216
+ continue: true, // Force continue to next task
217
+ systemMessage: nextTaskMsg,
218
+ hookSpecificOutput: {
219
+ hookEventName: 'Stop',
220
+ decision: 'continue_queue',
221
+ nextTaskId: coreResult.nextTaskId,
222
+ remaining: coreResult.remaining
223
+ }
224
+ };
225
+ }
226
+
227
+ // Prompt before continuing to next task (pauseBetweenTasks: true)
228
+ if (coreResult.shouldPrompt) {
229
+ return {
230
+ continue: true,
231
+ systemMessage: coreResult.message,
232
+ hookSpecificOutput: {
233
+ hookEventName: 'Stop',
234
+ decision: 'prompt_continue',
235
+ nextTaskId: coreResult.nextTaskId
236
+ }
237
+ };
238
+ }
239
+
240
+ // Block exit - criteria not complete
241
+ return {
242
+ continue: true, // Force continue
243
+ stopReason: coreResult.message || 'Acceptance criteria not complete',
244
+ hookSpecificOutput: {
245
+ hookEventName: 'Stop',
246
+ decision: 'block',
247
+ reason: coreResult.message
248
+ }
249
+ };
250
+ }
251
+
252
+ /**
253
+ * Transform SessionEnd result (auto-logging)
254
+ */
255
+ transformSessionEnd(coreResult) {
256
+ // SessionEnd doesn't block, just provides info
257
+ return {
258
+ continue: true,
259
+ ...(coreResult.warning && { systemMessage: coreResult.warning }),
260
+ ...(coreResult.logged && { systemMessage: `Logged as ${coreResult.requestId}` })
261
+ };
262
+ }
263
+
264
+ /**
265
+ * Generate Claude Code hook configuration
266
+ */
267
+ generateConfig(rules, projectRoot) {
268
+ const scriptsDir = path.join(projectRoot, 'scripts', 'hooks', 'entry', 'claude-code');
269
+ const hooks = {};
270
+
271
+ // SessionStart hook
272
+ if (rules.sessionContext?.enabled !== false) {
273
+ hooks.SessionStart = [{
274
+ hooks: [{
275
+ type: 'command',
276
+ command: `node "${path.join(scriptsDir, 'session-start.js')}"`,
277
+ timeout: 10
278
+ }]
279
+ }];
280
+ }
281
+
282
+ // PreToolUse hooks for Edit/Write
283
+ const preToolUseMatchers = [];
284
+
285
+ if (rules.taskGating?.enabled !== false) {
286
+ preToolUseMatchers.push({
287
+ matcher: 'Edit|Write',
288
+ hooks: [{
289
+ type: 'command',
290
+ command: `node "${path.join(scriptsDir, 'pre-tool-use.js')}"`,
291
+ timeout: 5
292
+ }]
293
+ });
294
+ }
295
+
296
+ if (preToolUseMatchers.length > 0) {
297
+ hooks.PreToolUse = preToolUseMatchers;
298
+ }
299
+
300
+ // PostToolUse hooks for validation
301
+ if (rules.validation?.enabled !== false) {
302
+ hooks.PostToolUse = [{
303
+ matcher: 'Edit|Write',
304
+ hooks: [{
305
+ type: 'command',
306
+ command: `node "${path.join(scriptsDir, 'post-tool-use.js')}"`,
307
+ timeout: 60
308
+ }]
309
+ }];
310
+ }
311
+
312
+ // Stop hook for loop enforcement
313
+ if (rules.loopEnforcement?.enabled !== false) {
314
+ hooks.Stop = [{
315
+ hooks: [{
316
+ type: 'command',
317
+ command: `node "${path.join(scriptsDir, 'stop.js')}"`,
318
+ timeout: 5
319
+ }]
320
+ }];
321
+ }
322
+
323
+ // SessionEnd hook for auto-logging
324
+ if (rules.autoLogging?.enabled !== false) {
325
+ hooks.SessionEnd = [{
326
+ hooks: [{
327
+ type: 'command',
328
+ command: `node "${path.join(scriptsDir, 'session-end.js')}"`,
329
+ timeout: 10
330
+ }]
331
+ }];
332
+ }
333
+
334
+ return { hooks };
335
+ }
336
+
337
+ /**
338
+ * Get install instructions
339
+ */
340
+ getInstallInstructions() {
341
+ return `Claude Code hooks will be installed to ${this.getLocalConfigPath()}
342
+
343
+ To use:
344
+ 1. Run: ./scripts/flow hooks setup
345
+ 2. Hooks are automatically loaded by Claude Code
346
+
347
+ To remove:
348
+ - Run: ./scripts/flow hooks remove`;
349
+ }
350
+ }
351
+
352
+ // Export singleton instance
353
+ const claudeCodeAdapter = new ClaudeCodeAdapter();
354
+
355
+ module.exports = {
356
+ ClaudeCodeAdapter,
357
+ claudeCodeAdapter,
358
+ CLAUDE_CODE_EVENTS
359
+ };
@@ -0,0 +1,79 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Wogi Flow - Adapters Index
5
+ *
6
+ * Registry of all CLI adapters.
7
+ */
8
+
9
+ const { BaseAdapter, CoreResultSchema } = require('./base-adapter');
10
+ const { ClaudeCodeAdapter, claudeCodeAdapter, CLAUDE_CODE_EVENTS } = require('./claude-code');
11
+
12
+ /**
13
+ * Adapter registry
14
+ */
15
+ const adapters = {
16
+ 'claude-code': claudeCodeAdapter
17
+ };
18
+
19
+ /**
20
+ * Get adapter by name
21
+ * @param {string} name - Adapter name
22
+ * @returns {BaseAdapter|null}
23
+ */
24
+ function getAdapter(name) {
25
+ return adapters[name] || null;
26
+ }
27
+
28
+ /**
29
+ * Get all available adapters
30
+ * @returns {Object} Map of adapter name to instance
31
+ */
32
+ function getAllAdapters() {
33
+ return { ...adapters };
34
+ }
35
+
36
+ /**
37
+ * Get adapters that are available (CLI installed)
38
+ * @returns {Object} Map of available adapters
39
+ */
40
+ function getAvailableAdapters() {
41
+ const available = {};
42
+ for (const [name, adapter] of Object.entries(adapters)) {
43
+ if (adapter.isAvailable()) {
44
+ available[name] = adapter;
45
+ }
46
+ }
47
+ return available;
48
+ }
49
+
50
+ /**
51
+ * Register a new adapter
52
+ * @param {string} name - Adapter name
53
+ * @param {BaseAdapter} adapter - Adapter instance
54
+ */
55
+ function registerAdapter(name, adapter) {
56
+ if (!(adapter instanceof BaseAdapter)) {
57
+ throw new Error('Adapter must extend BaseAdapter');
58
+ }
59
+ adapters[name] = adapter;
60
+ }
61
+
62
+ module.exports = {
63
+ // Classes
64
+ BaseAdapter,
65
+ ClaudeCodeAdapter,
66
+ CoreResultSchema,
67
+
68
+ // Instances
69
+ claudeCodeAdapter,
70
+
71
+ // Constants
72
+ CLAUDE_CODE_EVENTS,
73
+
74
+ // Functions
75
+ getAdapter,
76
+ getAllAdapters,
77
+ getAvailableAdapters,
78
+ registerAdapter
79
+ };