@cleocode/adapters 2026.4.139 → 2026.4.141

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.
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Claude SDK provider adapter.
3
+ *
4
+ * Wraps {@link ClaudeSDKSpawnProvider} in the standard
5
+ * {@link CLEOProviderAdapter} contract so registry and sovereignty probes can
6
+ * treat the SDK-backed Claude provider like every other CLEO provider.
7
+ *
8
+ * @task T933
9
+ * @packageDocumentation
10
+ */
11
+ import type { AdapterCapabilities, AdapterHealthStatus, CLEOProviderAdapter } from '@cleocode/contracts';
12
+ import { ClaudeSDKInstallProvider } from './install.js';
13
+ import { ClaudeSDKSpawnProvider } from './spawn.js';
14
+ /**
15
+ * CLEO provider adapter for Anthropic Claude via the Vercel AI SDK.
16
+ *
17
+ * @remarks
18
+ * This adapter intentionally exposes spawn only. Hooks, instruction files, and
19
+ * provider-native paths belong to CLI providers such as `claude-code`; the SDK
20
+ * provider is the programmatic LLM bridge used when `provider.claude.mode` is
21
+ * configured as `sdk`.
22
+ */
23
+ export declare class ClaudeSDKAdapter implements CLEOProviderAdapter {
24
+ /** Unique provider identifier. */
25
+ readonly id = "claude-sdk";
26
+ /** Human-readable provider name. */
27
+ readonly name = "Claude SDK (Vercel AI SDK)";
28
+ /** Adapter version string. */
29
+ readonly version = "2.0.0";
30
+ /** Declared capabilities for this provider. */
31
+ capabilities: AdapterCapabilities;
32
+ /** Spawn provider for SDK-backed Claude runs. */
33
+ spawn: ClaudeSDKSpawnProvider;
34
+ /** No-op install provider required by the adapter contract. */
35
+ install: ClaudeSDKInstallProvider;
36
+ private projectDir;
37
+ private initialized;
38
+ constructor();
39
+ /**
40
+ * Initialize the adapter for a project directory.
41
+ *
42
+ * @param projectDir - Root directory of the project using this adapter.
43
+ */
44
+ initialize(projectDir: string): Promise<void>;
45
+ /**
46
+ * Dispose the adapter and clear tracked project state.
47
+ */
48
+ dispose(): Promise<void>;
49
+ /**
50
+ * Check whether SDK-backed spawning can run in the current environment.
51
+ *
52
+ * @returns Adapter health with credential availability and initialization
53
+ * state.
54
+ */
55
+ healthCheck(): Promise<AdapterHealthStatus>;
56
+ }
57
+ //# sourceMappingURL=adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/providers/claude-sdk/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEpD;;;;;;;;GAQG;AACH,qBAAa,gBAAiB,YAAW,mBAAmB;IAC1D,kCAAkC;IAClC,QAAQ,CAAC,EAAE,gBAAgB;IAC3B,oCAAoC;IACpC,QAAQ,CAAC,IAAI,gCAAgC;IAC7C,8BAA8B;IAC9B,QAAQ,CAAC,OAAO,WAAW;IAE3B,+CAA+C;IAC/C,YAAY,EAAE,mBAAmB,CAW/B;IAEF,iDAAiD;IACjD,KAAK,EAAE,sBAAsB,CAAC;IAC9B,+DAA+D;IAC/D,OAAO,EAAE,wBAAwB,CAAC;IAElC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,WAAW,CAAS;;IAO5B;;;;OAIG;IACG,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKnD;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9B;;;;;OAKG;IACG,WAAW,IAAI,OAAO,CAAC,mBAAmB,CAAC;CAalD"}
@@ -15,10 +15,20 @@
15
15
  * @task T933 (SDK consolidation — Vercel AI SDK migration)
16
16
  * @see ADR-052 — SDK consolidation decision
17
17
  */
18
+ import { ClaudeSDKAdapter } from './adapter.js';
19
+ export { ClaudeSDKAdapter } from './adapter.js';
20
+ export { ClaudeSDKInstallProvider } from './install.js';
18
21
  export type { McpServerMap, McpStdioConfig } from './mcp-registry.js';
19
22
  export { getServers } from './mcp-registry.js';
20
23
  export type { SessionEntry } from './session-store.js';
21
24
  export { SessionStore } from './session-store.js';
22
25
  export { ClaudeSDKSpawnProvider } from './spawn.js';
23
26
  export { DEFAULT_TOOLS, resolveTools } from './tool-bridge.js';
27
+ export default ClaudeSDKAdapter;
28
+ /**
29
+ * Create a Claude SDK adapter instance for dynamic adapter loading.
30
+ *
31
+ * @returns A fresh {@link ClaudeSDKAdapter}.
32
+ */
33
+ export declare function createAdapter(): ClaudeSDKAdapter;
24
34
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/claude-sdk/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/claude-sdk/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE/D,eAAe,gBAAgB,CAAC;AAEhC;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,gBAAgB,CAEhD"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Claude SDK install provider.
3
+ *
4
+ * The Claude SDK adapter is a programmatic LLM bridge, not a native CLI
5
+ * integration surface. CLEO installation is therefore a no-op: project
6
+ * instruction files are managed by the active CLI provider (for example
7
+ * `claude-code`) while this provider supplies SDK-backed spawning.
8
+ *
9
+ * @task T933
10
+ * @packageDocumentation
11
+ */
12
+ import type { AdapterInstallProvider, InstallOptions, InstallResult } from '@cleocode/contracts';
13
+ /**
14
+ * No-op install provider for the SDK-backed Claude provider.
15
+ *
16
+ * @remarks
17
+ * `CLEOProviderAdapter` requires an install provider. This implementation
18
+ * preserves that contract without pretending the Anthropic SDK has a native
19
+ * instruction-file or hook installation target.
20
+ */
21
+ export declare class ClaudeSDKInstallProvider implements AdapterInstallProvider {
22
+ /**
23
+ * Report a successful no-op installation.
24
+ *
25
+ * @param options - Installation options. Currently accepted for contract
26
+ * parity and not mutated.
27
+ * @returns A successful install result with `instructionFileUpdated=false`.
28
+ */
29
+ install(options: InstallOptions): Promise<InstallResult>;
30
+ /**
31
+ * No-op uninstall for the SDK provider.
32
+ */
33
+ uninstall(): Promise<void>;
34
+ /**
35
+ * Return true because the SDK provider requires no filesystem installation.
36
+ *
37
+ * @returns Always `true`.
38
+ */
39
+ isInstalled(): Promise<boolean>;
40
+ /**
41
+ * No-op instruction-file reference hook.
42
+ *
43
+ * @param projectDir - Project directory accepted for interface parity.
44
+ */
45
+ ensureInstructionReferences(projectDir: string): Promise<void>;
46
+ }
47
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/providers/claude-sdk/install.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEjG;;;;;;;GAOG;AACH,qBAAa,wBAAyB,YAAW,sBAAsB;IACrE;;;;;;OAMG;IACG,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IAa9D;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAEhC;;;;OAIG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAIrC;;;;OAIG;IACG,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGrE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cleocode/adapters",
3
- "version": "2026.4.139",
3
+ "version": "2026.4.141",
4
4
  "description": "Unified provider adapters for CLEO (Claude Code, OpenCode, Cursor)",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -15,8 +15,8 @@
15
15
  "@ai-sdk/anthropic": "^3.0.69",
16
16
  "@ai-sdk/openai": "^2.0.53",
17
17
  "ai": "^6.0.168",
18
- "@cleocode/caamp": "2026.4.139",
19
- "@cleocode/contracts": "2026.4.139"
18
+ "@cleocode/caamp": "2026.4.141",
19
+ "@cleocode/contracts": "2026.4.141"
20
20
  },
21
21
  "license": "MIT",
22
22
  "engines": {
@@ -29,7 +29,7 @@
29
29
  "devDependencies": {
30
30
  "@types/node": "^22.19.15",
31
31
  "vitest": "^4.1.4",
32
- "@cleocode/playbooks": "2026.4.139"
32
+ "@cleocode/playbooks": "2026.4.141"
33
33
  },
34
34
  "repository": {
35
35
  "type": "git",
package/src/index.ts CHANGED
@@ -47,7 +47,10 @@ export {
47
47
  } from './providers/claude-code/index.js';
48
48
  export type { McpServerMap, McpStdioConfig, SessionEntry } from './providers/claude-sdk/index.js';
49
49
  export {
50
+ ClaudeSDKAdapter,
51
+ ClaudeSDKInstallProvider,
50
52
  ClaudeSDKSpawnProvider,
53
+ createAdapter as createClaudeSDKAdapter,
51
54
  DEFAULT_TOOLS,
52
55
  getServers,
53
56
  resolveTools,
@@ -267,6 +267,19 @@ describe('ClaudeSDKSpawnProvider', () => {
267
267
  });
268
268
  });
269
269
 
270
+ describe('ClaudeSDKAdapter', () => {
271
+ it('exports a default CLEOProviderAdapter-compatible class', async () => {
272
+ const mod = await import('../index.js');
273
+ const adapter = new mod.default();
274
+
275
+ expect(adapter.id).toBe('claude-sdk');
276
+ expect(adapter.name).toBe('Claude SDK (Vercel AI SDK)');
277
+ expect(adapter.version).toBe('2.0.0');
278
+ expect(adapter.capabilities.supportsSpawn).toBe(true);
279
+ expect(adapter.spawn).toBeInstanceOf(mod.ClaudeSDKSpawnProvider);
280
+ });
281
+ });
282
+
270
283
  // ---------------------------------------------------------------------------
271
284
  // SessionStore unit tests
272
285
  // ---------------------------------------------------------------------------
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Claude SDK provider adapter.
3
+ *
4
+ * Wraps {@link ClaudeSDKSpawnProvider} in the standard
5
+ * {@link CLEOProviderAdapter} contract so registry and sovereignty probes can
6
+ * treat the SDK-backed Claude provider like every other CLEO provider.
7
+ *
8
+ * @task T933
9
+ * @packageDocumentation
10
+ */
11
+
12
+ import type {
13
+ AdapterCapabilities,
14
+ AdapterHealthStatus,
15
+ CLEOProviderAdapter,
16
+ } from '@cleocode/contracts';
17
+ import { ClaudeSDKInstallProvider } from './install.js';
18
+ import { ClaudeSDKSpawnProvider } from './spawn.js';
19
+
20
+ /**
21
+ * CLEO provider adapter for Anthropic Claude via the Vercel AI SDK.
22
+ *
23
+ * @remarks
24
+ * This adapter intentionally exposes spawn only. Hooks, instruction files, and
25
+ * provider-native paths belong to CLI providers such as `claude-code`; the SDK
26
+ * provider is the programmatic LLM bridge used when `provider.claude.mode` is
27
+ * configured as `sdk`.
28
+ */
29
+ export class ClaudeSDKAdapter implements CLEOProviderAdapter {
30
+ /** Unique provider identifier. */
31
+ readonly id = 'claude-sdk';
32
+ /** Human-readable provider name. */
33
+ readonly name = 'Claude SDK (Vercel AI SDK)';
34
+ /** Adapter version string. */
35
+ readonly version = '2.0.0';
36
+
37
+ /** Declared capabilities for this provider. */
38
+ capabilities: AdapterCapabilities = {
39
+ supportsHooks: false,
40
+ supportedHookEvents: [],
41
+ supportsSpawn: true,
42
+ supportsInstall: false,
43
+ supportsInstructionFiles: false,
44
+ supportsContextMonitor: false,
45
+ supportsStatusline: false,
46
+ supportsProviderPaths: false,
47
+ supportsTransport: false,
48
+ supportsTaskSync: false,
49
+ };
50
+
51
+ /** Spawn provider for SDK-backed Claude runs. */
52
+ spawn: ClaudeSDKSpawnProvider;
53
+ /** No-op install provider required by the adapter contract. */
54
+ install: ClaudeSDKInstallProvider;
55
+
56
+ private projectDir: string | null = null;
57
+ private initialized = false;
58
+
59
+ constructor() {
60
+ this.spawn = new ClaudeSDKSpawnProvider();
61
+ this.install = new ClaudeSDKInstallProvider();
62
+ }
63
+
64
+ /**
65
+ * Initialize the adapter for a project directory.
66
+ *
67
+ * @param projectDir - Root directory of the project using this adapter.
68
+ */
69
+ async initialize(projectDir: string): Promise<void> {
70
+ this.projectDir = projectDir;
71
+ this.initialized = true;
72
+ }
73
+
74
+ /**
75
+ * Dispose the adapter and clear tracked project state.
76
+ */
77
+ async dispose(): Promise<void> {
78
+ this.projectDir = null;
79
+ this.initialized = false;
80
+ }
81
+
82
+ /**
83
+ * Check whether SDK-backed spawning can run in the current environment.
84
+ *
85
+ * @returns Adapter health with credential availability and initialization
86
+ * state.
87
+ */
88
+ async healthCheck(): Promise<AdapterHealthStatus> {
89
+ const credentialsAvailable = await this.spawn.canSpawn();
90
+ return {
91
+ healthy: this.initialized && credentialsAvailable,
92
+ provider: this.id,
93
+ details: {
94
+ initialized: this.initialized,
95
+ credentialsAvailable,
96
+ projectDir: this.projectDir,
97
+ sdkVersion: 'ai@6 + @ai-sdk/anthropic',
98
+ },
99
+ };
100
+ }
101
+ }
@@ -16,9 +16,24 @@
16
16
  * @see ADR-052 — SDK consolidation decision
17
17
  */
18
18
 
19
+ import { ClaudeSDKAdapter } from './adapter.js';
20
+
21
+ export { ClaudeSDKAdapter } from './adapter.js';
22
+ export { ClaudeSDKInstallProvider } from './install.js';
19
23
  export type { McpServerMap, McpStdioConfig } from './mcp-registry.js';
20
24
  export { getServers } from './mcp-registry.js';
21
25
  export type { SessionEntry } from './session-store.js';
22
26
  export { SessionStore } from './session-store.js';
23
27
  export { ClaudeSDKSpawnProvider } from './spawn.js';
24
28
  export { DEFAULT_TOOLS, resolveTools } from './tool-bridge.js';
29
+
30
+ export default ClaudeSDKAdapter;
31
+
32
+ /**
33
+ * Create a Claude SDK adapter instance for dynamic adapter loading.
34
+ *
35
+ * @returns A fresh {@link ClaudeSDKAdapter}.
36
+ */
37
+ export function createAdapter(): ClaudeSDKAdapter {
38
+ return new ClaudeSDKAdapter();
39
+ }
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Claude SDK install provider.
3
+ *
4
+ * The Claude SDK adapter is a programmatic LLM bridge, not a native CLI
5
+ * integration surface. CLEO installation is therefore a no-op: project
6
+ * instruction files are managed by the active CLI provider (for example
7
+ * `claude-code`) while this provider supplies SDK-backed spawning.
8
+ *
9
+ * @task T933
10
+ * @packageDocumentation
11
+ */
12
+
13
+ import type { AdapterInstallProvider, InstallOptions, InstallResult } from '@cleocode/contracts';
14
+
15
+ /**
16
+ * No-op install provider for the SDK-backed Claude provider.
17
+ *
18
+ * @remarks
19
+ * `CLEOProviderAdapter` requires an install provider. This implementation
20
+ * preserves that contract without pretending the Anthropic SDK has a native
21
+ * instruction-file or hook installation target.
22
+ */
23
+ export class ClaudeSDKInstallProvider implements AdapterInstallProvider {
24
+ /**
25
+ * Report a successful no-op installation.
26
+ *
27
+ * @param options - Installation options. Currently accepted for contract
28
+ * parity and not mutated.
29
+ * @returns A successful install result with `instructionFileUpdated=false`.
30
+ */
31
+ async install(options: InstallOptions): Promise<InstallResult> {
32
+ return {
33
+ success: true,
34
+ installedAt: new Date().toISOString(),
35
+ instructionFileUpdated: false,
36
+ details: {
37
+ provider: 'claude-sdk',
38
+ projectDir: options.projectDir,
39
+ mode: 'programmatic-sdk',
40
+ },
41
+ };
42
+ }
43
+
44
+ /**
45
+ * No-op uninstall for the SDK provider.
46
+ */
47
+ async uninstall(): Promise<void> {}
48
+
49
+ /**
50
+ * Return true because the SDK provider requires no filesystem installation.
51
+ *
52
+ * @returns Always `true`.
53
+ */
54
+ async isInstalled(): Promise<boolean> {
55
+ return true;
56
+ }
57
+
58
+ /**
59
+ * No-op instruction-file reference hook.
60
+ *
61
+ * @param projectDir - Project directory accepted for interface parity.
62
+ */
63
+ async ensureInstructionReferences(projectDir: string): Promise<void> {
64
+ void projectDir;
65
+ }
66
+ }