@cleocode/adapters 2026.3.37 → 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.
- package/LICENSE +21 -0
- package/README.md +503 -0
- package/dist/index.js +621 -496
- package/dist/index.js.map +4 -4
- package/package.json +12 -7
- package/src/__tests__/claude-code-adapter.test.d.ts +10 -0
- package/src/__tests__/claude-code-adapter.test.d.ts.map +1 -0
- package/src/__tests__/claude-code-adapter.test.js +192 -0
- package/src/__tests__/claude-code-adapter.test.js.map +1 -0
- package/src/__tests__/claude-code-adapter.test.ts +235 -0
- package/src/__tests__/cursor-adapter.test.d.ts +10 -0
- package/src/__tests__/cursor-adapter.test.d.ts.map +1 -0
- package/src/__tests__/cursor-adapter.test.js +196 -0
- package/src/__tests__/cursor-adapter.test.js.map +1 -0
- package/src/__tests__/cursor-adapter.test.ts +246 -0
- package/src/__tests__/opencode-adapter.test.d.ts +10 -0
- package/src/__tests__/opencode-adapter.test.d.ts.map +1 -0
- package/src/__tests__/opencode-adapter.test.js +204 -0
- package/src/__tests__/opencode-adapter.test.js.map +1 -0
- package/src/__tests__/opencode-adapter.test.ts +250 -0
- package/src/index.d.ts +28 -20
- package/src/index.d.ts.map +1 -1
- package/src/index.js +4 -19
- package/src/index.js.map +1 -1
- package/src/index.ts +25 -25
- package/src/providers/claude-code/__tests__/adapter.test.d.ts +1 -1
- package/src/providers/claude-code/__tests__/adapter.test.d.ts.map +0 -0
- package/src/providers/claude-code/__tests__/adapter.test.js +2 -2
- package/src/providers/claude-code/__tests__/adapter.test.js.map +1 -1
- package/src/providers/claude-code/__tests__/adapter.test.ts +2 -2
- package/src/providers/claude-code/adapter.d.ts +54 -50
- package/src/providers/claude-code/adapter.d.ts.map +0 -0
- package/src/providers/claude-code/adapter.js +1 -1
- package/src/providers/claude-code/adapter.js.map +1 -1
- package/src/providers/claude-code/adapter.ts +1 -1
- package/src/providers/claude-code/context-monitor.d.ts +6 -6
- package/src/providers/claude-code/context-monitor.d.ts.map +0 -0
- package/src/providers/claude-code/context-monitor.js +0 -0
- package/src/providers/claude-code/context-monitor.js.map +0 -0
- package/src/providers/claude-code/context-monitor.ts +0 -0
- package/src/providers/claude-code/hooks.d.ts +36 -36
- package/src/providers/claude-code/hooks.d.ts.map +0 -0
- package/src/providers/claude-code/hooks.js +0 -0
- package/src/providers/claude-code/hooks.js.map +0 -0
- package/src/providers/claude-code/hooks.ts +0 -0
- package/src/providers/claude-code/index.d.ts +6 -2
- package/src/providers/claude-code/index.d.ts.map +1 -1
- package/src/providers/claude-code/index.js +1 -1
- package/src/providers/claude-code/index.js.map +1 -1
- package/src/providers/claude-code/index.ts +2 -2
- package/src/providers/claude-code/install.d.ts +52 -52
- package/src/providers/claude-code/install.d.ts.map +1 -1
- package/src/providers/claude-code/install.js +1 -4
- package/src/providers/claude-code/install.js.map +1 -1
- package/src/providers/claude-code/install.ts +1 -4
- package/src/providers/claude-code/manifest.json +0 -0
- package/src/providers/claude-code/paths.d.ts +5 -5
- package/src/providers/claude-code/paths.d.ts.map +0 -0
- package/src/providers/claude-code/paths.js +0 -0
- package/src/providers/claude-code/paths.js.map +0 -0
- package/src/providers/claude-code/paths.ts +0 -0
- package/src/providers/claude-code/spawn.d.ts +37 -37
- package/src/providers/claude-code/spawn.d.ts.map +1 -1
- package/src/providers/claude-code/spawn.js +4 -0
- package/src/providers/claude-code/spawn.js.map +1 -1
- package/src/providers/claude-code/spawn.ts +5 -0
- package/src/providers/claude-code/statusline.d.ts +1 -2
- package/src/providers/claude-code/statusline.d.ts.map +0 -0
- package/src/providers/claude-code/statusline.js +2 -1
- package/src/providers/claude-code/statusline.js.map +1 -1
- package/src/providers/claude-code/statusline.ts +3 -3
- package/src/providers/claude-code/task-sync.d.ts +7 -7
- package/src/providers/claude-code/task-sync.d.ts.map +1 -1
- package/src/providers/claude-code/task-sync.js +1 -3
- package/src/providers/claude-code/task-sync.js.map +1 -1
- package/src/providers/claude-code/task-sync.ts +1 -3
- package/src/providers/claude-code/transport.d.ts +3 -3
- package/src/providers/claude-code/transport.d.ts.map +0 -0
- package/src/providers/claude-code/transport.js +0 -0
- package/src/providers/claude-code/transport.js.map +0 -0
- package/src/providers/claude-code/transport.ts +0 -0
- package/src/providers/cursor/__tests__/adapter.test.d.ts +1 -1
- package/src/providers/cursor/__tests__/adapter.test.d.ts.map +0 -0
- package/src/providers/cursor/__tests__/adapter.test.js +2 -2
- package/src/providers/cursor/__tests__/adapter.test.js.map +1 -1
- package/src/providers/cursor/__tests__/adapter.test.ts +2 -2
- package/src/providers/cursor/adapter.d.ts +44 -40
- package/src/providers/cursor/adapter.d.ts.map +0 -0
- package/src/providers/cursor/adapter.js +0 -0
- package/src/providers/cursor/adapter.js.map +0 -0
- package/src/providers/cursor/adapter.ts +0 -0
- package/src/providers/cursor/hooks.d.ts +29 -29
- package/src/providers/cursor/hooks.d.ts.map +0 -0
- package/src/providers/cursor/hooks.js +0 -0
- package/src/providers/cursor/hooks.js.map +0 -0
- package/src/providers/cursor/hooks.ts +0 -0
- package/src/providers/cursor/index.d.ts +1 -1
- package/src/providers/cursor/index.d.ts.map +0 -0
- package/src/providers/cursor/index.js +0 -0
- package/src/providers/cursor/index.js.map +0 -0
- package/src/providers/cursor/index.ts +0 -0
- package/src/providers/cursor/install.d.ts +67 -67
- package/src/providers/cursor/install.d.ts.map +1 -1
- package/src/providers/cursor/install.js +1 -4
- package/src/providers/cursor/install.js.map +1 -1
- package/src/providers/cursor/install.ts +1 -4
- package/src/providers/cursor/manifest.json +0 -0
- package/src/providers/cursor/spawn.d.ts +31 -31
- package/src/providers/cursor/spawn.d.ts.map +0 -0
- package/src/providers/cursor/spawn.js +0 -0
- package/src/providers/cursor/spawn.js.map +1 -1
- package/src/providers/cursor/spawn.ts +2 -2
- package/src/providers/opencode/__tests__/adapter.test.d.ts +1 -1
- package/src/providers/opencode/__tests__/adapter.test.d.ts.map +0 -0
- package/src/providers/opencode/__tests__/adapter.test.js +2 -2
- package/src/providers/opencode/__tests__/adapter.test.js.map +1 -1
- package/src/providers/opencode/__tests__/adapter.test.ts +2 -2
- package/src/providers/opencode/adapter.d.ts +50 -46
- package/src/providers/opencode/adapter.d.ts.map +0 -0
- package/src/providers/opencode/adapter.js +0 -0
- package/src/providers/opencode/adapter.js.map +0 -0
- package/src/providers/opencode/adapter.ts +0 -0
- package/src/providers/opencode/hooks.d.ts +36 -36
- package/src/providers/opencode/hooks.d.ts.map +0 -0
- package/src/providers/opencode/hooks.js +1 -1
- package/src/providers/opencode/hooks.js.map +1 -1
- package/src/providers/opencode/hooks.ts +1 -1
- package/src/providers/opencode/index.d.ts +2 -2
- package/src/providers/opencode/index.d.ts.map +1 -1
- package/src/providers/opencode/index.js +1 -1
- package/src/providers/opencode/index.js.map +1 -1
- package/src/providers/opencode/index.ts +1 -1
- package/src/providers/opencode/install.d.ts +46 -46
- package/src/providers/opencode/install.d.ts.map +1 -1
- package/src/providers/opencode/install.js +1 -4
- package/src/providers/opencode/install.js.map +1 -1
- package/src/providers/opencode/install.ts +1 -4
- package/src/providers/opencode/manifest.json +0 -0
- package/src/providers/opencode/spawn.d.ts +42 -39
- package/src/providers/opencode/spawn.d.ts.map +1 -1
- package/src/providers/opencode/spawn.js +0 -0
- package/src/providers/opencode/spawn.js.map +1 -1
- package/src/providers/opencode/spawn.ts +2 -7
- package/src/registry.d.ts +12 -12
- package/src/registry.d.ts.map +1 -1
- package/src/registry.js +0 -0
- package/src/registry.js.map +1 -1
- package/src/registry.ts +1 -3
- package/dist/index.d.ts +0 -27
- package/dist/index.d.ts.map +0 -1
- package/dist/providers/claude-code/adapter.d.ts +0 -75
- package/dist/providers/claude-code/adapter.d.ts.map +0 -1
- package/dist/providers/claude-code/adapter.js +0 -154
- package/dist/providers/claude-code/adapter.js.map +0 -1
- package/dist/providers/claude-code/context-monitor.d.ts +0 -24
- package/dist/providers/claude-code/context-monitor.d.ts.map +0 -1
- package/dist/providers/claude-code/context-monitor.js +0 -148
- package/dist/providers/claude-code/context-monitor.js.map +0 -1
- package/dist/providers/claude-code/hooks.d.ts +0 -59
- package/dist/providers/claude-code/hooks.d.ts.map +0 -1
- package/dist/providers/claude-code/hooks.js +0 -77
- package/dist/providers/claude-code/hooks.js.map +0 -1
- package/dist/providers/claude-code/index.d.ts +0 -24
- package/dist/providers/claude-code/index.d.ts.map +0 -1
- package/dist/providers/claude-code/index.js +0 -26
- package/dist/providers/claude-code/index.js.map +0 -1
- package/dist/providers/claude-code/install.d.ts +0 -75
- package/dist/providers/claude-code/install.d.ts.map +0 -1
- package/dist/providers/claude-code/install.js +0 -237
- package/dist/providers/claude-code/install.js.map +0 -1
- package/dist/providers/claude-code/paths.d.ts +0 -24
- package/dist/providers/claude-code/paths.d.ts.map +0 -1
- package/dist/providers/claude-code/paths.js +0 -33
- package/dist/providers/claude-code/paths.js.map +0 -1
- package/dist/providers/claude-code/spawn.d.ts +0 -60
- package/dist/providers/claude-code/spawn.d.ts.map +0 -1
- package/dist/providers/claude-code/spawn.js +0 -160
- package/dist/providers/claude-code/spawn.js.map +0 -1
- package/dist/providers/claude-code/statusline.d.ts +0 -24
- package/dist/providers/claude-code/statusline.d.ts.map +0 -1
- package/dist/providers/claude-code/statusline.js +0 -85
- package/dist/providers/claude-code/statusline.js.map +0 -1
- package/dist/providers/claude-code/task-sync.d.ts +0 -27
- package/dist/providers/claude-code/task-sync.d.ts.map +0 -1
- package/dist/providers/claude-code/task-sync.js +0 -124
- package/dist/providers/claude-code/task-sync.js.map +0 -1
- package/dist/providers/claude-code/transport.d.ts +0 -14
- package/dist/providers/claude-code/transport.d.ts.map +0 -1
- package/dist/providers/claude-code/transport.js +0 -18
- package/dist/providers/claude-code/transport.js.map +0 -1
- package/dist/providers/cursor/adapter.d.ts +0 -62
- package/dist/providers/cursor/adapter.d.ts.map +0 -1
- package/dist/providers/cursor/adapter.js +0 -124
- package/dist/providers/cursor/adapter.js.map +0 -1
- package/dist/providers/cursor/hooks.d.ts +0 -48
- package/dist/providers/cursor/hooks.d.ts.map +0 -1
- package/dist/providers/cursor/hooks.js +0 -55
- package/dist/providers/cursor/hooks.js.map +0 -1
- package/dist/providers/cursor/index.d.ts +0 -19
- package/dist/providers/cursor/index.d.ts.map +0 -1
- package/dist/providers/cursor/index.js +0 -21
- package/dist/providers/cursor/index.js.map +0 -1
- package/dist/providers/cursor/install.d.ts +0 -94
- package/dist/providers/cursor/install.d.ts.map +0 -1
- package/dist/providers/cursor/install.js +0 -241
- package/dist/providers/cursor/install.js.map +0 -1
- package/dist/providers/cursor/spawn.d.ts +0 -50
- package/dist/providers/cursor/spawn.d.ts.map +0 -1
- package/dist/providers/cursor/spawn.js +0 -59
- package/dist/providers/cursor/spawn.js.map +0 -1
- package/dist/providers/opencode/adapter.d.ts +0 -67
- package/dist/providers/opencode/adapter.d.ts.map +0 -1
- package/dist/providers/opencode/adapter.js +0 -144
- package/dist/providers/opencode/adapter.js.map +0 -1
- package/dist/providers/opencode/hooks.d.ts +0 -66
- package/dist/providers/opencode/hooks.d.ts.map +0 -1
- package/dist/providers/opencode/hooks.js +0 -89
- package/dist/providers/opencode/hooks.js.map +0 -1
- package/dist/providers/opencode/index.d.ts +0 -20
- package/dist/providers/opencode/index.d.ts.map +0 -1
- package/dist/providers/opencode/index.js +0 -22
- package/dist/providers/opencode/index.js.map +0 -1
- package/dist/providers/opencode/install.d.ts +0 -65
- package/dist/providers/opencode/install.d.ts.map +0 -1
- package/dist/providers/opencode/install.js +0 -183
- package/dist/providers/opencode/install.js.map +0 -1
- package/dist/providers/opencode/spawn.d.ts +0 -72
- package/dist/providers/opencode/spawn.d.ts.map +0 -1
- package/dist/providers/opencode/spawn.js +0 -219
- package/dist/providers/opencode/spawn.js.map +0 -1
- package/dist/registry.d.ts +0 -36
- package/dist/registry.d.ts.map +0 -1
- package/dist/registry.js +0 -55
- 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.
|