@cleocode/adapters 2.0.0 → 2026.3.39

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 (234) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +503 -0
  3. package/dist/index.js +621 -496
  4. package/dist/index.js.map +4 -4
  5. package/package.json +12 -7
  6. package/src/__tests__/claude-code-adapter.test.d.ts +10 -0
  7. package/src/__tests__/claude-code-adapter.test.d.ts.map +1 -0
  8. package/src/__tests__/claude-code-adapter.test.js +192 -0
  9. package/src/__tests__/claude-code-adapter.test.js.map +1 -0
  10. package/src/__tests__/claude-code-adapter.test.ts +235 -0
  11. package/src/__tests__/cursor-adapter.test.d.ts +10 -0
  12. package/src/__tests__/cursor-adapter.test.d.ts.map +1 -0
  13. package/src/__tests__/cursor-adapter.test.js +196 -0
  14. package/src/__tests__/cursor-adapter.test.js.map +1 -0
  15. package/src/__tests__/cursor-adapter.test.ts +246 -0
  16. package/src/__tests__/opencode-adapter.test.d.ts +10 -0
  17. package/src/__tests__/opencode-adapter.test.d.ts.map +1 -0
  18. package/src/__tests__/opencode-adapter.test.js +204 -0
  19. package/src/__tests__/opencode-adapter.test.js.map +1 -0
  20. package/src/__tests__/opencode-adapter.test.ts +250 -0
  21. package/src/index.d.ts +28 -20
  22. package/src/index.d.ts.map +1 -1
  23. package/src/index.js +4 -19
  24. package/src/index.js.map +1 -1
  25. package/src/index.ts +25 -25
  26. package/src/providers/claude-code/__tests__/adapter.test.d.ts +1 -1
  27. package/src/providers/claude-code/__tests__/adapter.test.d.ts.map +0 -0
  28. package/src/providers/claude-code/__tests__/adapter.test.js +2 -2
  29. package/src/providers/claude-code/__tests__/adapter.test.js.map +1 -1
  30. package/src/providers/claude-code/__tests__/adapter.test.ts +2 -2
  31. package/src/providers/claude-code/adapter.d.ts +54 -50
  32. package/src/providers/claude-code/adapter.d.ts.map +0 -0
  33. package/src/providers/claude-code/adapter.js +1 -1
  34. package/src/providers/claude-code/adapter.js.map +1 -1
  35. package/src/providers/claude-code/adapter.ts +1 -1
  36. package/src/providers/claude-code/context-monitor.d.ts +6 -6
  37. package/src/providers/claude-code/context-monitor.d.ts.map +0 -0
  38. package/src/providers/claude-code/context-monitor.js +0 -0
  39. package/src/providers/claude-code/context-monitor.js.map +0 -0
  40. package/src/providers/claude-code/context-monitor.ts +0 -0
  41. package/src/providers/claude-code/hooks.d.ts +36 -36
  42. package/src/providers/claude-code/hooks.d.ts.map +0 -0
  43. package/src/providers/claude-code/hooks.js +0 -0
  44. package/src/providers/claude-code/hooks.js.map +0 -0
  45. package/src/providers/claude-code/hooks.ts +0 -0
  46. package/src/providers/claude-code/index.d.ts +6 -2
  47. package/src/providers/claude-code/index.d.ts.map +1 -1
  48. package/src/providers/claude-code/index.js +1 -1
  49. package/src/providers/claude-code/index.js.map +1 -1
  50. package/src/providers/claude-code/index.ts +2 -2
  51. package/src/providers/claude-code/install.d.ts +52 -52
  52. package/src/providers/claude-code/install.d.ts.map +1 -1
  53. package/src/providers/claude-code/install.js +1 -4
  54. package/src/providers/claude-code/install.js.map +1 -1
  55. package/src/providers/claude-code/install.ts +1 -4
  56. package/src/providers/claude-code/manifest.json +0 -0
  57. package/src/providers/claude-code/paths.d.ts +5 -5
  58. package/src/providers/claude-code/paths.d.ts.map +0 -0
  59. package/src/providers/claude-code/paths.js +0 -0
  60. package/src/providers/claude-code/paths.js.map +0 -0
  61. package/src/providers/claude-code/paths.ts +0 -0
  62. package/src/providers/claude-code/spawn.d.ts +37 -37
  63. package/src/providers/claude-code/spawn.d.ts.map +1 -1
  64. package/src/providers/claude-code/spawn.js +4 -0
  65. package/src/providers/claude-code/spawn.js.map +1 -1
  66. package/src/providers/claude-code/spawn.ts +5 -0
  67. package/src/providers/claude-code/statusline.d.ts +1 -2
  68. package/src/providers/claude-code/statusline.d.ts.map +0 -0
  69. package/src/providers/claude-code/statusline.js +2 -1
  70. package/src/providers/claude-code/statusline.js.map +1 -1
  71. package/src/providers/claude-code/statusline.ts +3 -3
  72. package/src/providers/claude-code/task-sync.d.ts +7 -7
  73. package/src/providers/claude-code/task-sync.d.ts.map +1 -1
  74. package/src/providers/claude-code/task-sync.js +1 -3
  75. package/src/providers/claude-code/task-sync.js.map +1 -1
  76. package/src/providers/claude-code/task-sync.ts +1 -3
  77. package/src/providers/claude-code/transport.d.ts +3 -3
  78. package/src/providers/claude-code/transport.d.ts.map +0 -0
  79. package/src/providers/claude-code/transport.js +0 -0
  80. package/src/providers/claude-code/transport.js.map +0 -0
  81. package/src/providers/claude-code/transport.ts +0 -0
  82. package/src/providers/cursor/__tests__/adapter.test.d.ts +1 -1
  83. package/src/providers/cursor/__tests__/adapter.test.d.ts.map +0 -0
  84. package/src/providers/cursor/__tests__/adapter.test.js +2 -2
  85. package/src/providers/cursor/__tests__/adapter.test.js.map +1 -1
  86. package/src/providers/cursor/__tests__/adapter.test.ts +2 -2
  87. package/src/providers/cursor/adapter.d.ts +44 -40
  88. package/src/providers/cursor/adapter.d.ts.map +0 -0
  89. package/src/providers/cursor/adapter.js +0 -0
  90. package/src/providers/cursor/adapter.js.map +0 -0
  91. package/src/providers/cursor/adapter.ts +0 -0
  92. package/src/providers/cursor/hooks.d.ts +29 -29
  93. package/src/providers/cursor/hooks.d.ts.map +0 -0
  94. package/src/providers/cursor/hooks.js +0 -0
  95. package/src/providers/cursor/hooks.js.map +0 -0
  96. package/src/providers/cursor/hooks.ts +0 -0
  97. package/src/providers/cursor/index.d.ts +1 -1
  98. package/src/providers/cursor/index.d.ts.map +0 -0
  99. package/src/providers/cursor/index.js +0 -0
  100. package/src/providers/cursor/index.js.map +0 -0
  101. package/src/providers/cursor/index.ts +0 -0
  102. package/src/providers/cursor/install.d.ts +67 -67
  103. package/src/providers/cursor/install.d.ts.map +1 -1
  104. package/src/providers/cursor/install.js +1 -4
  105. package/src/providers/cursor/install.js.map +1 -1
  106. package/src/providers/cursor/install.ts +1 -4
  107. package/src/providers/cursor/manifest.json +0 -0
  108. package/src/providers/cursor/spawn.d.ts +31 -31
  109. package/src/providers/cursor/spawn.d.ts.map +0 -0
  110. package/src/providers/cursor/spawn.js +0 -0
  111. package/src/providers/cursor/spawn.js.map +1 -1
  112. package/src/providers/cursor/spawn.ts +2 -2
  113. package/src/providers/opencode/__tests__/adapter.test.d.ts +1 -1
  114. package/src/providers/opencode/__tests__/adapter.test.d.ts.map +0 -0
  115. package/src/providers/opencode/__tests__/adapter.test.js +2 -2
  116. package/src/providers/opencode/__tests__/adapter.test.js.map +1 -1
  117. package/src/providers/opencode/__tests__/adapter.test.ts +2 -2
  118. package/src/providers/opencode/adapter.d.ts +50 -46
  119. package/src/providers/opencode/adapter.d.ts.map +0 -0
  120. package/src/providers/opencode/adapter.js +0 -0
  121. package/src/providers/opencode/adapter.js.map +0 -0
  122. package/src/providers/opencode/adapter.ts +0 -0
  123. package/src/providers/opencode/hooks.d.ts +36 -36
  124. package/src/providers/opencode/hooks.d.ts.map +0 -0
  125. package/src/providers/opencode/hooks.js +1 -1
  126. package/src/providers/opencode/hooks.js.map +1 -1
  127. package/src/providers/opencode/hooks.ts +1 -1
  128. package/src/providers/opencode/index.d.ts +2 -2
  129. package/src/providers/opencode/index.d.ts.map +1 -1
  130. package/src/providers/opencode/index.js +1 -1
  131. package/src/providers/opencode/index.js.map +1 -1
  132. package/src/providers/opencode/index.ts +1 -1
  133. package/src/providers/opencode/install.d.ts +46 -46
  134. package/src/providers/opencode/install.d.ts.map +1 -1
  135. package/src/providers/opencode/install.js +1 -4
  136. package/src/providers/opencode/install.js.map +1 -1
  137. package/src/providers/opencode/install.ts +1 -4
  138. package/src/providers/opencode/manifest.json +0 -0
  139. package/src/providers/opencode/spawn.d.ts +42 -39
  140. package/src/providers/opencode/spawn.d.ts.map +1 -1
  141. package/src/providers/opencode/spawn.js +0 -0
  142. package/src/providers/opencode/spawn.js.map +1 -1
  143. package/src/providers/opencode/spawn.ts +2 -7
  144. package/src/registry.d.ts +12 -12
  145. package/src/registry.d.ts.map +1 -1
  146. package/src/registry.js +0 -0
  147. package/src/registry.js.map +1 -1
  148. package/src/registry.ts +1 -3
  149. package/dist/index.d.ts +0 -27
  150. package/dist/index.d.ts.map +0 -1
  151. package/dist/providers/claude-code/adapter.d.ts +0 -75
  152. package/dist/providers/claude-code/adapter.d.ts.map +0 -1
  153. package/dist/providers/claude-code/adapter.js +0 -154
  154. package/dist/providers/claude-code/adapter.js.map +0 -1
  155. package/dist/providers/claude-code/context-monitor.d.ts +0 -24
  156. package/dist/providers/claude-code/context-monitor.d.ts.map +0 -1
  157. package/dist/providers/claude-code/context-monitor.js +0 -148
  158. package/dist/providers/claude-code/context-monitor.js.map +0 -1
  159. package/dist/providers/claude-code/hooks.d.ts +0 -59
  160. package/dist/providers/claude-code/hooks.d.ts.map +0 -1
  161. package/dist/providers/claude-code/hooks.js +0 -77
  162. package/dist/providers/claude-code/hooks.js.map +0 -1
  163. package/dist/providers/claude-code/index.d.ts +0 -24
  164. package/dist/providers/claude-code/index.d.ts.map +0 -1
  165. package/dist/providers/claude-code/index.js +0 -26
  166. package/dist/providers/claude-code/index.js.map +0 -1
  167. package/dist/providers/claude-code/install.d.ts +0 -75
  168. package/dist/providers/claude-code/install.d.ts.map +0 -1
  169. package/dist/providers/claude-code/install.js +0 -237
  170. package/dist/providers/claude-code/install.js.map +0 -1
  171. package/dist/providers/claude-code/paths.d.ts +0 -24
  172. package/dist/providers/claude-code/paths.d.ts.map +0 -1
  173. package/dist/providers/claude-code/paths.js +0 -33
  174. package/dist/providers/claude-code/paths.js.map +0 -1
  175. package/dist/providers/claude-code/spawn.d.ts +0 -60
  176. package/dist/providers/claude-code/spawn.d.ts.map +0 -1
  177. package/dist/providers/claude-code/spawn.js +0 -160
  178. package/dist/providers/claude-code/spawn.js.map +0 -1
  179. package/dist/providers/claude-code/statusline.d.ts +0 -24
  180. package/dist/providers/claude-code/statusline.d.ts.map +0 -1
  181. package/dist/providers/claude-code/statusline.js +0 -85
  182. package/dist/providers/claude-code/statusline.js.map +0 -1
  183. package/dist/providers/claude-code/task-sync.d.ts +0 -27
  184. package/dist/providers/claude-code/task-sync.d.ts.map +0 -1
  185. package/dist/providers/claude-code/task-sync.js +0 -124
  186. package/dist/providers/claude-code/task-sync.js.map +0 -1
  187. package/dist/providers/claude-code/transport.d.ts +0 -14
  188. package/dist/providers/claude-code/transport.d.ts.map +0 -1
  189. package/dist/providers/claude-code/transport.js +0 -18
  190. package/dist/providers/claude-code/transport.js.map +0 -1
  191. package/dist/providers/cursor/adapter.d.ts +0 -62
  192. package/dist/providers/cursor/adapter.d.ts.map +0 -1
  193. package/dist/providers/cursor/adapter.js +0 -124
  194. package/dist/providers/cursor/adapter.js.map +0 -1
  195. package/dist/providers/cursor/hooks.d.ts +0 -48
  196. package/dist/providers/cursor/hooks.d.ts.map +0 -1
  197. package/dist/providers/cursor/hooks.js +0 -55
  198. package/dist/providers/cursor/hooks.js.map +0 -1
  199. package/dist/providers/cursor/index.d.ts +0 -19
  200. package/dist/providers/cursor/index.d.ts.map +0 -1
  201. package/dist/providers/cursor/index.js +0 -21
  202. package/dist/providers/cursor/index.js.map +0 -1
  203. package/dist/providers/cursor/install.d.ts +0 -94
  204. package/dist/providers/cursor/install.d.ts.map +0 -1
  205. package/dist/providers/cursor/install.js +0 -241
  206. package/dist/providers/cursor/install.js.map +0 -1
  207. package/dist/providers/cursor/spawn.d.ts +0 -50
  208. package/dist/providers/cursor/spawn.d.ts.map +0 -1
  209. package/dist/providers/cursor/spawn.js +0 -59
  210. package/dist/providers/cursor/spawn.js.map +0 -1
  211. package/dist/providers/opencode/adapter.d.ts +0 -67
  212. package/dist/providers/opencode/adapter.d.ts.map +0 -1
  213. package/dist/providers/opencode/adapter.js +0 -144
  214. package/dist/providers/opencode/adapter.js.map +0 -1
  215. package/dist/providers/opencode/hooks.d.ts +0 -66
  216. package/dist/providers/opencode/hooks.d.ts.map +0 -1
  217. package/dist/providers/opencode/hooks.js +0 -89
  218. package/dist/providers/opencode/hooks.js.map +0 -1
  219. package/dist/providers/opencode/index.d.ts +0 -20
  220. package/dist/providers/opencode/index.d.ts.map +0 -1
  221. package/dist/providers/opencode/index.js +0 -22
  222. package/dist/providers/opencode/index.js.map +0 -1
  223. package/dist/providers/opencode/install.d.ts +0 -65
  224. package/dist/providers/opencode/install.d.ts.map +0 -1
  225. package/dist/providers/opencode/install.js +0 -183
  226. package/dist/providers/opencode/install.js.map +0 -1
  227. package/dist/providers/opencode/spawn.d.ts +0 -72
  228. package/dist/providers/opencode/spawn.d.ts.map +0 -1
  229. package/dist/providers/opencode/spawn.js +0 -219
  230. package/dist/providers/opencode/spawn.js.map +0 -1
  231. package/dist/registry.d.ts +0 -36
  232. package/dist/registry.d.ts.map +0 -1
  233. package/dist/registry.js +0 -55
  234. package/dist/registry.js.map +0 -1
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 CLEO Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,503 @@
1
+ # @cleocode/adapters
2
+
3
+ Unified provider adapters for CLEO - Claude Code, OpenCode, Cursor integration.
4
+
5
+ ## Overview
6
+
7
+ This package provides standardized adapters for integrating CLEO with various AI coding assistants and providers. Each adapter implements a common interface, allowing CLEO to work seamlessly across different environments.
8
+
9
+ ### Supported Providers
10
+
11
+ | Provider | Status | Features |
12
+ |----------|--------|----------|
13
+ | **Claude Code** | ✅ Production | Full integration with statusline sync, context monitoring |
14
+ | **OpenCode** | ✅ Production | Spawn hooks, task synchronization |
15
+ | **Cursor** | ✅ Production | Basic adapter with install hooks |
16
+
17
+ ## Installation
18
+
19
+ ```bash
20
+ npm install @cleocode/adapters
21
+ ```
22
+
23
+ ```bash
24
+ pnpm add @cleocode/adapters
25
+ ```
26
+
27
+ ```bash
28
+ yarn add @cleocode/adapters
29
+ ```
30
+
31
+ ## API Overview
32
+
33
+ ### Provider Adapters
34
+
35
+ Each provider has its own adapter class with specialized capabilities:
36
+
37
+ #### Claude Code Adapter
38
+
39
+ ```typescript
40
+ import {
41
+ ClaudeCodeAdapter,
42
+ createClaudeCodeAdapter,
43
+ ClaudeCodeContextMonitorProvider,
44
+ ClaudeCodeHookProvider,
45
+ ClaudeCodeInstallProvider,
46
+ ClaudeCodePathProvider,
47
+ ClaudeCodeSpawnProvider,
48
+ ClaudeCodeTransportProvider,
49
+ checkStatuslineIntegration,
50
+ getSetupInstructions,
51
+ getStatuslineConfig
52
+ } from '@cleocode/adapters';
53
+
54
+ // Create adapter
55
+ const adapter = createClaudeCodeAdapter({
56
+ projectPath: './my-project'
57
+ });
58
+
59
+ // Check statusline integration
60
+ const status = await checkStatuslineIntegration('./my-project');
61
+
62
+ // Get setup instructions
63
+ const instructions = getSetupInstructions();
64
+ ```
65
+
66
+ #### OpenCode Adapter
67
+
68
+ ```typescript
69
+ import {
70
+ OpenCodeAdapter,
71
+ createOpenCodeAdapter,
72
+ OpenCodeHookProvider,
73
+ OpenCodeInstallProvider,
74
+ OpenCodeSpawnProvider
75
+ } from '@cleocode/adapters';
76
+
77
+ // Create adapter
78
+ const adapter = createOpenCodeAdapter({
79
+ projectPath: './my-project'
80
+ });
81
+ ```
82
+
83
+ #### Cursor Adapter
84
+
85
+ ```typescript
86
+ import {
87
+ CursorAdapter,
88
+ createCursorAdapter,
89
+ CursorHookProvider,
90
+ CursorInstallProvider
91
+ } from '@cleocode/adapters';
92
+
93
+ // Create adapter
94
+ const adapter = createCursorAdapter({
95
+ projectPath: './my-project'
96
+ });
97
+ ```
98
+
99
+ ### Registry
100
+
101
+ Discover and manage provider manifests:
102
+
103
+ ```typescript
104
+ import {
105
+ discoverProviders,
106
+ getProviderManifests,
107
+ type AdapterManifest
108
+ } from '@cleocode/adapters';
109
+
110
+ // Discover available providers
111
+ const providers = await discoverProviders('./my-project');
112
+
113
+ // Get all manifests
114
+ const manifests = getProviderManifests();
115
+
116
+ // Check specific provider
117
+ const claudeManifest = manifests.find(m => m.name === 'claude-code');
118
+ ```
119
+
120
+ ## Adapter Capabilities
121
+
122
+ Each provider adapter implements specific capability interfaces:
123
+
124
+ ### Install Provider
125
+
126
+ Handles installation and setup:
127
+
128
+ ```typescript
129
+ import type { AdapterInstallProvider, InstallOptions, InstallResult } from '@cleocode/contracts';
130
+
131
+ const installProvider: AdapterInstallProvider = {
132
+ async install(options: InstallOptions): Promise<InstallResult> {
133
+ // Install provider-specific files
134
+ return { success: true, installed: ['file1', 'file2'] };
135
+ },
136
+
137
+ async detect(projectPath: string): Promise<boolean> {
138
+ // Check if provider is installed
139
+ return fs.existsSync(path.join(projectPath, '.claude'));
140
+ }
141
+ };
142
+ ```
143
+
144
+ ### Hook Provider
145
+
146
+ Provides lifecycle hooks:
147
+
148
+ ```typescript
149
+ import type { AdapterHookProvider } from '@cleocode/contracts';
150
+
151
+ const hookProvider: AdapterHookProvider = {
152
+ async onTaskCreate(context) {
153
+ // Called when a task is created
154
+ },
155
+
156
+ async onTaskComplete(context) {
157
+ // Called when a task is completed
158
+ },
159
+
160
+ async onSessionStart(context) {
161
+ // Called when a session starts
162
+ },
163
+
164
+ async onSessionEnd(context) {
165
+ // Called when a session ends
166
+ }
167
+ };
168
+ ```
169
+
170
+ ### Spawn Provider
171
+
172
+ Handles subagent spawning:
173
+
174
+ ```typescript
175
+ import type { AdapterSpawnProvider, SpawnContext, SpawnResult } from '@cleocode/contracts';
176
+
177
+ const spawnProvider: AdapterSpawnProvider = {
178
+ async spawn(context: SpawnContext): Promise<SpawnResult> {
179
+ // Spawn a subagent
180
+ return {
181
+ pid: 12345,
182
+ stdout: process.stdout,
183
+ stderr: process.stderr,
184
+ exitCode: 0
185
+ };
186
+ }
187
+ };
188
+ ```
189
+
190
+ ### Context Monitor Provider
191
+
192
+ Monitors provider context:
193
+
194
+ ```typescript
195
+ import type { AdapterContextMonitorProvider } from '@cleocode/contracts';
196
+
197
+ const contextProvider: AdapterContextMonitorProvider = {
198
+ async getContext(projectPath: string) {
199
+ return {
200
+ activeTask: 'T1234',
201
+ sessionId: 'session-abc',
202
+ memoryUsage: 1024000
203
+ };
204
+ }
205
+ };
206
+ ```
207
+
208
+ ### Transport Provider
209
+
210
+ Handles communication:
211
+
212
+ ```typescript
213
+ import type { AdapterTransportProvider } from '@cleocode/contracts';
214
+
215
+ const transportProvider: AdapterTransportProvider = {
216
+ async send(message) {
217
+ // Send message to provider
218
+ },
219
+
220
+ async receive() {
221
+ // Receive message from provider
222
+ return { type: 'response', data: {} };
223
+ }
224
+ };
225
+ ```
226
+
227
+ ### Path Provider
228
+
229
+ Provides provider-specific paths:
230
+
231
+ ```typescript
232
+ import type { AdapterPathProvider } from '@cleocode/contracts';
233
+
234
+ const pathProvider: AdapterPathProvider = {
235
+ getConfigPath(projectPath: string) {
236
+ return path.join(projectPath, '.claude', 'settings.json');
237
+ },
238
+
239
+ getDataPath(projectPath: string) {
240
+ return path.join(projectPath, '.claude', 'data');
241
+ }
242
+ };
243
+ ```
244
+
245
+ ### Task Sync Provider
246
+
247
+ Synchronizes tasks with provider:
248
+
249
+ ```typescript
250
+ import type { AdapterTaskSyncProvider, ReconcileOptions, ReconcileResult } from '@cleocode/contracts';
251
+
252
+ const syncProvider: AdapterTaskSyncProvider = {
253
+ async getExternalTasks(projectPath: string) {
254
+ // Get tasks from provider
255
+ return [];
256
+ },
257
+
258
+ async reconcile(options: ReconcileOptions): Promise<ReconcileResult> {
259
+ // Reconcile tasks
260
+ return {
261
+ actions: [],
262
+ conflicts: []
263
+ };
264
+ }
265
+ };
266
+ ```
267
+
268
+ ## Usage Examples
269
+
270
+ ### Detecting Available Providers
271
+
272
+ ```typescript
273
+ import { discoverProviders, getProviderManifests } from '@cleocode/adapters';
274
+
275
+ async function detectProviders() {
276
+ const projectPath = './my-project';
277
+
278
+ // Auto-detect installed providers
279
+ const available = await discoverProviders(projectPath);
280
+
281
+ console.log('Available providers:');
282
+ for (const provider of available) {
283
+ console.log(` - ${provider.name}: ${provider.version}`);
284
+ }
285
+
286
+ // Get detailed manifests
287
+ const manifests = getProviderManifests();
288
+ for (const manifest of manifests) {
289
+ console.log(`\n${manifest.name}:`);
290
+ console.log(` Capabilities: ${manifest.capabilities.join(', ')}`);
291
+ console.log(` Patterns: ${manifest.patterns.join(', ')}`);
292
+ }
293
+ }
294
+ ```
295
+
296
+ ### Setting Up Claude Code Integration
297
+
298
+ ```typescript
299
+ import {
300
+ createClaudeCodeAdapter,
301
+ checkStatuslineIntegration,
302
+ getSetupInstructions
303
+ } from '@cleocode/adapters';
304
+
305
+ async function setupClaudeCode() {
306
+ const projectPath = './my-project';
307
+
308
+ // Check if already integrated
309
+ const status = await checkStatuslineIntegration(projectPath);
310
+
311
+ if (!status.integrated) {
312
+ console.log('Claude Code not yet integrated');
313
+ console.log(getSetupInstructions());
314
+
315
+ // Create adapter and install
316
+ const adapter = createClaudeCodeAdapter({ projectPath });
317
+ const result = await adapter.install({ force: false });
318
+
319
+ if (result.success) {
320
+ console.log('Claude Code integration installed');
321
+ }
322
+ } else {
323
+ console.log('Claude Code is already integrated ✓');
324
+ }
325
+ }
326
+ ```
327
+
328
+ ### Working with Hooks
329
+
330
+ ```typescript
331
+ import { createClaudeCodeAdapter } from '@cleocode/adapters';
332
+
333
+ async function setupHooks() {
334
+ const adapter = createClaudeCodeAdapter({
335
+ projectPath: './my-project'
336
+ });
337
+
338
+ // Register task creation hook
339
+ adapter.hooks.register('onTaskCreate', async (context) => {
340
+ console.log(`Task ${context.taskId} created in Claude Code`);
341
+ // Update Claude Code statusline
342
+ await adapter.updateStatusline({ activeTask: context.taskId });
343
+ });
344
+
345
+ // Register task completion hook
346
+ adapter.hooks.register('onTaskComplete', async (context) => {
347
+ console.log(`Task ${context.taskId} completed`);
348
+ // Clear statusline
349
+ await adapter.updateStatusline({ activeTask: null });
350
+ });
351
+ }
352
+ ```
353
+
354
+ ### Spawning Subagents
355
+
356
+ ```typescript
357
+ import { createClaudeCodeAdapter } from '@cleocode/adapters';
358
+
359
+ async function spawnSubagent() {
360
+ const adapter = createClaudeCodeAdapter({
361
+ projectPath: './my-project'
362
+ });
363
+
364
+ // Spawn a Claude Code subagent
365
+ const result = await adapter.spawn({
366
+ taskId: 'T1234',
367
+ context: {
368
+ instructions: 'Implement the authentication endpoint',
369
+ files: ['src/auth.ts', 'src/routes.ts']
370
+ }
371
+ });
372
+
373
+ if (result.pid) {
374
+ console.log(`Spawned subagent with PID ${result.pid}`);
375
+
376
+ // Wait for completion
377
+ result.stdout?.on('data', (data) => {
378
+ console.log(`Output: ${data}`);
379
+ });
380
+ }
381
+ }
382
+ ```
383
+
384
+ ### Synchronizing Tasks
385
+
386
+ ```typescript
387
+ import { createClaudeCodeAdapter } from '@cleocode/adapters';
388
+
389
+ async function syncTasks() {
390
+ const adapter = createClaudeCodeAdapter({
391
+ projectPath: './my-project'
392
+ });
393
+
394
+ // Get external tasks from Claude Code
395
+ const externalTasks = await adapter.getExternalTasks();
396
+
397
+ // Reconcile with CLEO tasks
398
+ const result = await adapter.reconcile({
399
+ conflictPolicy: 'prefer-external',
400
+ dryRun: false
401
+ });
402
+
403
+ console.log(`Reconciliation complete:`);
404
+ console.log(` Created: ${result.created.length}`);
405
+ console.log(` Updated: ${result.updated.length}`);
406
+ console.log(` Conflicts: ${result.conflicts.length}`);
407
+ }
408
+ ```
409
+
410
+ ### Custom Provider Adapter
411
+
412
+ ```typescript
413
+ import type {
414
+ CLEOProviderAdapter,
415
+ AdapterCapabilities,
416
+ AdapterHealthStatus
417
+ } from '@cleocode/contracts';
418
+
419
+ class MyCustomAdapter implements CLEOProviderAdapter {
420
+ name = 'my-custom-provider';
421
+ version = '1.0.0';
422
+
423
+ getCapabilities(): AdapterCapabilities {
424
+ return {
425
+ spawn: true,
426
+ hooks: true,
427
+ install: true,
428
+ contextMonitor: false,
429
+ transport: true,
430
+ paths: true,
431
+ taskSync: false
432
+ };
433
+ }
434
+
435
+ async healthCheck(projectPath: string): Promise<AdapterHealthStatus> {
436
+ const isInstalled = await this.detect(projectPath);
437
+ return {
438
+ healthy: isInstalled,
439
+ message: isInstalled ? 'Ready' : 'Not installed'
440
+ };
441
+ }
442
+
443
+ async detect(projectPath: string): Promise<boolean> {
444
+ // Check for provider-specific files
445
+ return fs.existsSync(path.join(projectPath, '.my-provider'));
446
+ }
447
+
448
+ // Implement other provider methods...
449
+ }
450
+
451
+ // Register adapter
452
+ import { discoverProviders } from '@cleocode/adapters';
453
+ discoverProviders.register(new MyCustomAdapter());
454
+ ```
455
+
456
+ ## Provider Manifest Format
457
+
458
+ Adapters expose their capabilities through manifests:
459
+
460
+ ```typescript
461
+ interface AdapterManifest {
462
+ name: string;
463
+ version: string;
464
+ description: string;
465
+ capabilities: Array<'spawn' | 'hooks' | 'install' | 'contextMonitor' | 'transport' | 'paths' | 'taskSync'>;
466
+ patterns: DetectionPattern[];
467
+ }
468
+
469
+ interface DetectionPattern {
470
+ type: 'file' | 'directory' | 'config';
471
+ path: string;
472
+ content?: string; // Optional: check file content
473
+ }
474
+ ```
475
+
476
+ Example manifest:
477
+
478
+ ```json
479
+ {
480
+ "name": "claude-code",
481
+ "version": "1.0.0",
482
+ "description": "Claude Code integration",
483
+ "capabilities": ["spawn", "hooks", "install", "contextMonitor", "transport", "paths", "taskSync"],
484
+ "patterns": [
485
+ { "type": "directory", "path": ".claude" },
486
+ { "type": "file", "path": ".claude/CLAUDE.md" }
487
+ ]
488
+ }
489
+ ```
490
+
491
+ ## Dependencies
492
+
493
+ ### Production Dependencies
494
+
495
+ - `@cleocode/contracts` - Type definitions and interfaces
496
+
497
+ ### Development Dependencies
498
+
499
+ - `@types/node` - Node.js type definitions
500
+
501
+ ## License
502
+
503
+ MIT License - see [LICENSE](../LICENSE) for details.