@cleocode/adapters 2026.4.0 → 2026.4.2
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/dist/index.d.ts +9 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +724 -630
- package/dist/index.js.map +3 -3
- package/dist/providers/claude-code/adapter.d.ts +21 -1
- package/dist/providers/claude-code/adapter.d.ts.map +1 -1
- package/dist/providers/claude-code/context-monitor.d.ts +11 -0
- package/dist/providers/claude-code/context-monitor.d.ts.map +1 -1
- package/dist/providers/claude-code/hooks.d.ts +7 -0
- package/dist/providers/claude-code/hooks.d.ts.map +1 -1
- package/dist/providers/claude-code/index.d.ts +16 -1
- package/dist/providers/claude-code/index.d.ts.map +1 -1
- package/dist/providers/claude-code/install.d.ts +10 -18
- package/dist/providers/claude-code/install.d.ts.map +1 -1
- package/dist/providers/claude-code/paths.d.ts +8 -0
- package/dist/providers/claude-code/paths.d.ts.map +1 -1
- package/dist/providers/claude-code/spawn.d.ts +7 -0
- package/dist/providers/claude-code/spawn.d.ts.map +1 -1
- package/dist/providers/claude-code/statusline.d.ts +44 -0
- package/dist/providers/claude-code/statusline.d.ts.map +1 -1
- package/dist/providers/claude-code/task-sync.d.ts +8 -0
- package/dist/providers/claude-code/task-sync.d.ts.map +1 -1
- package/dist/providers/claude-code/transport.d.ts +11 -0
- package/dist/providers/claude-code/transport.d.ts.map +1 -1
- package/dist/providers/codex/adapter.d.ts +14 -1
- package/dist/providers/codex/adapter.d.ts.map +1 -1
- package/dist/providers/codex/hooks.d.ts +6 -0
- package/dist/providers/codex/hooks.d.ts.map +1 -1
- package/dist/providers/codex/index.d.ts +16 -1
- package/dist/providers/codex/index.d.ts.map +1 -1
- package/dist/providers/codex/install.d.ts +8 -17
- package/dist/providers/codex/install.d.ts.map +1 -1
- package/dist/providers/cursor/adapter.d.ts +15 -1
- package/dist/providers/cursor/adapter.d.ts.map +1 -1
- package/dist/providers/cursor/hooks.d.ts +7 -0
- package/dist/providers/cursor/hooks.d.ts.map +1 -1
- package/dist/providers/cursor/index.d.ts +16 -1
- package/dist/providers/cursor/index.d.ts.map +1 -1
- package/dist/providers/cursor/install.d.ts +10 -17
- package/dist/providers/cursor/install.d.ts.map +1 -1
- package/dist/providers/gemini-cli/adapter.d.ts +15 -1
- package/dist/providers/gemini-cli/adapter.d.ts.map +1 -1
- package/dist/providers/gemini-cli/hooks.d.ts +7 -0
- package/dist/providers/gemini-cli/hooks.d.ts.map +1 -1
- package/dist/providers/gemini-cli/index.d.ts +16 -1
- package/dist/providers/gemini-cli/index.d.ts.map +1 -1
- package/dist/providers/gemini-cli/install.d.ts +8 -17
- package/dist/providers/gemini-cli/install.d.ts.map +1 -1
- package/dist/providers/kimi/adapter.d.ts +15 -2
- package/dist/providers/kimi/adapter.d.ts.map +1 -1
- package/dist/providers/kimi/hooks.d.ts +6 -0
- package/dist/providers/kimi/hooks.d.ts.map +1 -1
- package/dist/providers/kimi/index.d.ts +16 -1
- package/dist/providers/kimi/index.d.ts.map +1 -1
- package/dist/providers/kimi/install.d.ts +7 -22
- package/dist/providers/kimi/install.d.ts.map +1 -1
- package/dist/providers/opencode/adapter.d.ts +17 -1
- package/dist/providers/opencode/adapter.d.ts.map +1 -1
- package/dist/providers/opencode/hooks.d.ts +9 -0
- package/dist/providers/opencode/hooks.d.ts.map +1 -1
- package/dist/providers/opencode/index.d.ts +16 -1
- package/dist/providers/opencode/index.d.ts.map +1 -1
- package/dist/providers/opencode/install.d.ts +8 -17
- package/dist/providers/opencode/install.d.ts.map +1 -1
- package/dist/providers/opencode/spawn.d.ts +23 -1
- package/dist/providers/opencode/spawn.d.ts.map +1 -1
- package/dist/providers/shared/transcript-reader.d.ts +15 -0
- package/dist/providers/shared/transcript-reader.d.ts.map +1 -1
- package/dist/registry.d.ts +54 -2
- package/dist/registry.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/__tests__/claude-code-adapter.test.js +21 -30
- package/src/__tests__/claude-code-adapter.test.js.map +1 -1
- package/src/__tests__/claude-code-adapter.test.ts +21 -32
- package/src/__tests__/cursor-adapter.test.js +25 -29
- package/src/__tests__/cursor-adapter.test.js.map +1 -1
- package/src/__tests__/cursor-adapter.test.ts +26 -33
- package/src/__tests__/opencode-adapter.test.js +47 -46
- package/src/__tests__/opencode-adapter.test.js.map +1 -1
- package/src/__tests__/opencode-adapter.test.ts +51 -49
- package/src/index.ts +9 -1
- package/src/providers/claude-code/__tests__/adapter.test.js +50 -23
- package/src/providers/claude-code/__tests__/adapter.test.js.map +1 -1
- package/src/providers/claude-code/__tests__/adapter.test.ts +52 -23
- package/src/providers/claude-code/adapter.ts +22 -2
- package/src/providers/claude-code/context-monitor.ts +11 -0
- package/src/providers/claude-code/hooks.ts +7 -0
- package/src/providers/claude-code/index.ts +16 -1
- package/src/providers/claude-code/install.ts +15 -96
- package/src/providers/claude-code/manifest.json +1 -1
- package/src/providers/claude-code/paths.ts +8 -0
- package/src/providers/claude-code/spawn.ts +7 -0
- package/src/providers/claude-code/statusline.ts +44 -0
- package/src/providers/claude-code/task-sync.ts +8 -0
- package/src/providers/claude-code/transport.ts +11 -0
- package/src/providers/codex/adapter.ts +15 -2
- package/src/providers/codex/hooks.ts +6 -0
- package/src/providers/codex/index.ts +16 -1
- package/src/providers/codex/install.ts +17 -81
- package/src/providers/codex/manifest.json +1 -1
- package/src/providers/cursor/__tests__/adapter.test.js +37 -12
- package/src/providers/cursor/__tests__/adapter.test.js.map +1 -1
- package/src/providers/cursor/__tests__/adapter.test.ts +43 -12
- package/src/providers/cursor/adapter.ts +16 -2
- package/src/providers/cursor/hooks.ts +7 -0
- package/src/providers/cursor/index.ts +16 -1
- package/src/providers/cursor/install.ts +23 -88
- package/src/providers/cursor/manifest.json +1 -1
- package/src/providers/gemini-cli/adapter.ts +16 -2
- package/src/providers/gemini-cli/hooks.ts +7 -0
- package/src/providers/gemini-cli/index.ts +16 -1
- package/src/providers/gemini-cli/install.ts +17 -81
- package/src/providers/gemini-cli/manifest.json +1 -1
- package/src/providers/kimi/adapter.ts +16 -3
- package/src/providers/kimi/hooks.ts +6 -0
- package/src/providers/kimi/index.ts +16 -1
- package/src/providers/kimi/install.ts +16 -86
- package/src/providers/kimi/manifest.json +1 -1
- package/src/providers/opencode/__tests__/adapter.test.js +48 -35
- package/src/providers/opencode/__tests__/adapter.test.js.map +1 -1
- package/src/providers/opencode/__tests__/adapter.test.ts +49 -34
- package/src/providers/opencode/adapter.ts +18 -2
- package/src/providers/opencode/hooks.ts +9 -0
- package/src/providers/opencode/index.ts +16 -1
- package/src/providers/opencode/install.ts +17 -90
- package/src/providers/opencode/manifest.json +1 -1
- package/src/providers/opencode/spawn.ts +23 -1
- package/src/providers/shared/transcript-reader.ts +15 -0
- package/src/registry.ts +54 -2
- package/dist/providers/claude-code/adapter.js +0 -165
- package/dist/providers/claude-code/adapter.js.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.js +0 -279
- package/dist/providers/claude-code/hooks.js.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.js +0 -234
- package/dist/providers/claude-code/install.js.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.js +0 -164
- package/dist/providers/claude-code/spawn.js.map +0 -1
- package/dist/providers/claude-code/statusline.js +0 -86
- package/dist/providers/claude-code/statusline.js.map +0 -1
- package/dist/providers/claude-code/task-sync.js +0 -111
- package/dist/providers/claude-code/task-sync.js.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/codex/adapter.js +0 -134
- package/dist/providers/codex/adapter.js.map +0 -1
- package/dist/providers/codex/hooks.js +0 -107
- package/dist/providers/codex/hooks.js.map +0 -1
- package/dist/providers/codex/index.js +0 -24
- package/dist/providers/codex/index.js.map +0 -1
- package/dist/providers/codex/install.js +0 -183
- package/dist/providers/codex/install.js.map +0 -1
- package/dist/providers/cursor/adapter.js +0 -138
- package/dist/providers/cursor/adapter.js.map +0 -1
- package/dist/providers/cursor/hooks.js +0 -201
- package/dist/providers/cursor/hooks.js.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.js +0 -238
- package/dist/providers/cursor/install.js.map +0 -1
- package/dist/providers/cursor/spawn.js +0 -59
- package/dist/providers/cursor/spawn.js.map +0 -1
- package/dist/providers/gemini-cli/adapter.js +0 -145
- package/dist/providers/gemini-cli/adapter.js.map +0 -1
- package/dist/providers/gemini-cli/hooks.js +0 -121
- package/dist/providers/gemini-cli/hooks.js.map +0 -1
- package/dist/providers/gemini-cli/index.js +0 -24
- package/dist/providers/gemini-cli/index.js.map +0 -1
- package/dist/providers/gemini-cli/install.js +0 -183
- package/dist/providers/gemini-cli/install.js.map +0 -1
- package/dist/providers/kimi/adapter.js +0 -133
- package/dist/providers/kimi/adapter.js.map +0 -1
- package/dist/providers/kimi/hooks.js +0 -73
- package/dist/providers/kimi/hooks.js.map +0 -1
- package/dist/providers/kimi/index.js +0 -24
- package/dist/providers/kimi/index.js.map +0 -1
- package/dist/providers/kimi/install.js +0 -189
- package/dist/providers/kimi/install.js.map +0 -1
- package/dist/providers/opencode/adapter.js +0 -151
- package/dist/providers/opencode/adapter.js.map +0 -1
- package/dist/providers/opencode/hooks.js +0 -197
- package/dist/providers/opencode/hooks.js.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.js +0 -180
- package/dist/providers/opencode/install.js.map +0 -1
- package/dist/providers/opencode/spawn.js +0 -219
- package/dist/providers/opencode/spawn.js.map +0 -1
- package/dist/providers/shared/transcript-reader.js +0 -109
- package/dist/providers/shared/transcript-reader.js.map +0 -1
- package/dist/registry.js +0 -55
- package/dist/registry.js.map +0 -1
- package/src/__tests__/claude-code-adapter.test.d.ts +0 -10
- package/src/__tests__/cursor-adapter.test.d.ts +0 -10
- package/src/__tests__/opencode-adapter.test.d.ts +0 -10
- package/src/index.d.ts +0 -35
- package/src/index.d.ts.map +0 -1
- package/src/index.js +0 -13
- package/src/index.js.map +0 -1
- package/src/providers/claude-code/__tests__/adapter.test.d.ts +0 -7
- package/src/providers/claude-code/adapter.d.ts +0 -79
- package/src/providers/claude-code/adapter.d.ts.map +0 -1
- package/src/providers/claude-code/adapter.js +0 -154
- package/src/providers/claude-code/adapter.js.map +0 -1
- package/src/providers/claude-code/context-monitor.d.ts +0 -24
- package/src/providers/claude-code/context-monitor.d.ts.map +0 -1
- package/src/providers/claude-code/context-monitor.js +0 -148
- package/src/providers/claude-code/context-monitor.js.map +0 -1
- package/src/providers/claude-code/hooks.d.ts +0 -59
- package/src/providers/claude-code/hooks.d.ts.map +0 -1
- package/src/providers/claude-code/hooks.js +0 -77
- package/src/providers/claude-code/hooks.js.map +0 -1
- package/src/providers/claude-code/index.d.ts +0 -28
- package/src/providers/claude-code/index.d.ts.map +0 -1
- package/src/providers/claude-code/index.js +0 -26
- package/src/providers/claude-code/index.js.map +0 -1
- package/src/providers/claude-code/install.d.ts +0 -75
- package/src/providers/claude-code/install.d.ts.map +0 -1
- package/src/providers/claude-code/install.js +0 -234
- package/src/providers/claude-code/install.js.map +0 -1
- package/src/providers/claude-code/paths.d.ts +0 -24
- package/src/providers/claude-code/paths.d.ts.map +0 -1
- package/src/providers/claude-code/paths.js +0 -33
- package/src/providers/claude-code/paths.js.map +0 -1
- package/src/providers/claude-code/spawn.d.ts +0 -60
- package/src/providers/claude-code/spawn.d.ts.map +0 -1
- package/src/providers/claude-code/spawn.js +0 -164
- package/src/providers/claude-code/spawn.js.map +0 -1
- package/src/providers/claude-code/statusline.d.ts +0 -23
- package/src/providers/claude-code/statusline.d.ts.map +0 -1
- package/src/providers/claude-code/statusline.js +0 -86
- package/src/providers/claude-code/statusline.js.map +0 -1
- package/src/providers/claude-code/task-sync.js +0 -122
- package/src/providers/claude-code/task-sync.js.map +0 -1
- package/src/providers/claude-code/transport.d.ts +0 -14
- package/src/providers/claude-code/transport.d.ts.map +0 -1
- package/src/providers/claude-code/transport.js +0 -18
- package/src/providers/claude-code/transport.js.map +0 -1
- package/src/providers/cursor/__tests__/adapter.test.d.ts +0 -7
- package/src/providers/cursor/adapter.d.ts +0 -66
- package/src/providers/cursor/adapter.d.ts.map +0 -1
- package/src/providers/cursor/adapter.js +0 -124
- package/src/providers/cursor/adapter.js.map +0 -1
- package/src/providers/cursor/hooks.d.ts +0 -48
- package/src/providers/cursor/hooks.d.ts.map +0 -1
- package/src/providers/cursor/hooks.js +0 -55
- package/src/providers/cursor/hooks.js.map +0 -1
- package/src/providers/cursor/index.d.ts +0 -19
- package/src/providers/cursor/index.d.ts.map +0 -1
- package/src/providers/cursor/index.js +0 -21
- package/src/providers/cursor/index.js.map +0 -1
- package/src/providers/cursor/install.d.ts +0 -94
- package/src/providers/cursor/install.d.ts.map +0 -1
- package/src/providers/cursor/install.js +0 -238
- package/src/providers/cursor/install.js.map +0 -1
- package/src/providers/cursor/spawn.d.ts +0 -50
- package/src/providers/cursor/spawn.d.ts.map +0 -1
- package/src/providers/cursor/spawn.js +0 -59
- package/src/providers/cursor/spawn.js.map +0 -1
- package/src/providers/opencode/__tests__/adapter.test.d.ts +0 -7
- package/src/providers/opencode/adapter.d.ts +0 -71
- package/src/providers/opencode/adapter.d.ts.map +0 -1
- package/src/providers/opencode/adapter.js +0 -144
- package/src/providers/opencode/adapter.js.map +0 -1
- package/src/providers/opencode/hooks.d.ts +0 -66
- package/src/providers/opencode/hooks.d.ts.map +0 -1
- package/src/providers/opencode/hooks.js +0 -89
- package/src/providers/opencode/hooks.js.map +0 -1
- package/src/providers/opencode/index.d.ts +0 -20
- package/src/providers/opencode/index.d.ts.map +0 -1
- package/src/providers/opencode/index.js +0 -22
- package/src/providers/opencode/index.js.map +0 -1
- package/src/providers/opencode/install.d.ts +0 -65
- package/src/providers/opencode/install.d.ts.map +0 -1
- package/src/providers/opencode/install.js +0 -180
- package/src/providers/opencode/install.js.map +0 -1
- package/src/providers/opencode/spawn.d.ts +0 -75
- package/src/providers/opencode/spawn.d.ts.map +0 -1
- package/src/providers/opencode/spawn.js +0 -219
- package/src/providers/opencode/spawn.js.map +0 -1
- package/src/registry.d.ts +0 -36
- package/src/registry.d.ts.map +0 -1
- package/src/registry.js +0 -55
- package/src/registry.js.map +0 -1
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
* OpenCode Install Provider
|
|
3
3
|
*
|
|
4
4
|
* Handles CLEO installation into OpenCode environments:
|
|
5
|
-
* - Registers CLEO MCP server in .opencode/config.json
|
|
6
5
|
* - Ensures AGENTS.md has CLEO @-references
|
|
7
6
|
*
|
|
8
7
|
* @task T5240
|
|
@@ -12,30 +11,31 @@ import type { AdapterInstallProvider, InstallOptions, InstallResult } from '@cle
|
|
|
12
11
|
* Install provider for OpenCode.
|
|
13
12
|
*
|
|
14
13
|
* Manages CLEO's integration with OpenCode by:
|
|
15
|
-
* 1.
|
|
16
|
-
*
|
|
14
|
+
* 1. Ensuring AGENTS.md contains @-references to CLEO instruction files
|
|
15
|
+
*
|
|
16
|
+
* @remarks
|
|
17
|
+
* Installation is idempotent -- running install multiple times on the same
|
|
18
|
+
* project produces the same result. Only AGENTS.md is managed; OpenCode's
|
|
19
|
+
* plugin system is handled separately by the hook provider.
|
|
17
20
|
*/
|
|
18
21
|
export declare class OpenCodeInstallProvider implements AdapterInstallProvider {
|
|
19
|
-
private installedProjectDir;
|
|
20
22
|
/**
|
|
21
23
|
* Install CLEO into an OpenCode project.
|
|
22
24
|
*
|
|
23
|
-
* @param options - Installation options including project directory
|
|
25
|
+
* @param options - Installation options including project directory
|
|
24
26
|
* @returns Result describing what was installed
|
|
25
27
|
*/
|
|
26
28
|
install(options: InstallOptions): Promise<InstallResult>;
|
|
27
29
|
/**
|
|
28
30
|
* Uninstall CLEO from the current OpenCode project.
|
|
29
31
|
*
|
|
30
|
-
* Removes the MCP server registration from .opencode/config.json.
|
|
31
32
|
* Does not remove AGENTS.md references (they are harmless if CLEO is not present).
|
|
32
33
|
*/
|
|
33
34
|
uninstall(): Promise<void>;
|
|
34
35
|
/**
|
|
35
36
|
* Check whether CLEO is installed in the current environment.
|
|
36
37
|
*
|
|
37
|
-
* Checks for
|
|
38
|
-
* Returns true if the CLEO MCP server entry is found.
|
|
38
|
+
* Checks for CLEO references in AGENTS.md.
|
|
39
39
|
*/
|
|
40
40
|
isInstalled(): Promise<boolean>;
|
|
41
41
|
/**
|
|
@@ -46,15 +46,6 @@ export declare class OpenCodeInstallProvider implements AdapterInstallProvider {
|
|
|
46
46
|
* @param projectDir - Project root directory
|
|
47
47
|
*/
|
|
48
48
|
ensureInstructionReferences(projectDir: string): Promise<void>;
|
|
49
|
-
/**
|
|
50
|
-
* Register the CLEO MCP server in .opencode/config.json.
|
|
51
|
-
*
|
|
52
|
-
* OpenCode stores its MCP server configuration in .opencode/config.json
|
|
53
|
-
* under the mcpServers key.
|
|
54
|
-
*
|
|
55
|
-
* @returns true if registration was performed or updated
|
|
56
|
-
*/
|
|
57
|
-
private registerMcpServer;
|
|
58
49
|
/**
|
|
59
50
|
* Update AGENTS.md with CLEO @-references.
|
|
60
51
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/providers/opencode/install.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/providers/opencode/install.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,sBAAsB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAKjG;;;;;;;;;;GAUG;AACH,qBAAa,uBAAwB,YAAW,sBAAsB;IACpE;;;;;OAKG;IACG,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IAqB9D;;;;OAIG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAEhC;;;;OAIG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAgBrC;;;;;;OAMG;IACG,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpE;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;CA8B9B"}
|
|
@@ -17,9 +17,24 @@ import type { AdapterSpawnProvider, SpawnContext, SpawnResult } from '@cleocode/
|
|
|
17
17
|
* OpenCode agents are defined as markdown files with YAML frontmatter
|
|
18
18
|
* in the .opencode/agent/ directory.
|
|
19
19
|
*
|
|
20
|
+
* @remarks
|
|
21
|
+
* The generated markdown uses YAML frontmatter with `mode: subagent`
|
|
22
|
+
* and `hidden: true` so the agent does not appear in OpenCode's
|
|
23
|
+
* interactive agent selection menu.
|
|
24
|
+
*
|
|
20
25
|
* @param description - Agent description for frontmatter
|
|
21
26
|
* @param instructions - Markdown instructions body
|
|
22
|
-
* @returns Complete agent definition markdown
|
|
27
|
+
* @returns Complete agent definition markdown with YAML frontmatter
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* import { buildOpenCodeAgentMarkdown } from '@cleocode/adapters/providers/opencode/spawn';
|
|
32
|
+
*
|
|
33
|
+
* const md = buildOpenCodeAgentMarkdown(
|
|
34
|
+
* 'CLEO task executor',
|
|
35
|
+
* '# Subagent\n\nExecute the delegated task.',
|
|
36
|
+
* );
|
|
37
|
+
* ```
|
|
23
38
|
*/
|
|
24
39
|
export declare function buildOpenCodeAgentMarkdown(description: string, instructions: string): string;
|
|
25
40
|
/**
|
|
@@ -29,6 +44,13 @@ export declare function buildOpenCodeAgentMarkdown(description: string, instruct
|
|
|
29
44
|
* Each spawn ensures a CLEO subagent definition exists, then runs
|
|
30
45
|
* `opencode run --format json --agent <name> --title <title> <prompt>`
|
|
31
46
|
* as a detached, unref'd child process.
|
|
47
|
+
*
|
|
48
|
+
* @remarks
|
|
49
|
+
* Before spawning, the provider ensures a `cleo-subagent` agent definition
|
|
50
|
+
* exists in `.opencode/agent/`. If the definition cannot be created, it
|
|
51
|
+
* falls back to the built-in `general` agent. Processes are tracked by
|
|
52
|
+
* instance ID in an in-memory map and verified via `kill(pid, 0)` liveness
|
|
53
|
+
* checks.
|
|
32
54
|
*/
|
|
33
55
|
export declare class OpenCodeSpawnProvider implements AdapterSpawnProvider {
|
|
34
56
|
/** Map of instance IDs to tracked process info. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../../../src/providers/opencode/spawn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAiB3F
|
|
1
|
+
{"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../../../src/providers/opencode/spawn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAiB3F;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAY5F;AA0CD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,qBAAsB,YAAW,oBAAoB;IAChE,mDAAmD;IACnD,OAAO,CAAC,UAAU,CAAqC;IAEvD;;;;OAIG;IACG,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;IASlC;;;;;;;;;OASG;IACG,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;IAiExD;;;;;;;OAOG;IACG,WAAW,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAqB3C;;;;;;;OAOG;IACG,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAWnD"}
|
|
@@ -31,11 +31,26 @@
|
|
|
31
31
|
* - No JSON/JSONL files are present
|
|
32
32
|
* - The most recent file contains no parseable turns
|
|
33
33
|
*
|
|
34
|
+
* @remarks
|
|
35
|
+
* This utility is shared by Gemini CLI and Codex CLI hook providers which
|
|
36
|
+
* both store session data in the same flat JSON/JSONL format. Only the
|
|
37
|
+
* most recent file is read to keep memory usage bounded.
|
|
38
|
+
*
|
|
34
39
|
* @param providerDir - Absolute path to the provider's session directory
|
|
35
40
|
* (e.g. `~/.gemini` or `~/.codex`).
|
|
36
41
|
* @returns A plain-text transcript with lines of the form `role: content`,
|
|
37
42
|
* or `null` if no transcript could be extracted.
|
|
38
43
|
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```typescript
|
|
46
|
+
* import { readLatestTranscript } from '../shared/transcript-reader.js';
|
|
47
|
+
*
|
|
48
|
+
* const transcript = await readLatestTranscript('/home/user/.gemini');
|
|
49
|
+
* if (transcript) {
|
|
50
|
+
* console.log(transcript);
|
|
51
|
+
* }
|
|
52
|
+
* ```
|
|
53
|
+
*
|
|
39
54
|
* @task T161
|
|
40
55
|
* @epic T134
|
|
41
56
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transcript-reader.d.ts","sourceRoot":"","sources":["../../../src/providers/shared/transcript-reader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAoDH
|
|
1
|
+
{"version":3,"file":"transcript-reader.d.ts","sourceRoot":"","sources":["../../../src/providers/shared/transcript-reader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAoDH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA8BtF"}
|
package/dist/registry.d.ts
CHANGED
|
@@ -6,31 +6,83 @@
|
|
|
6
6
|
*
|
|
7
7
|
* @task T5240
|
|
8
8
|
*/
|
|
9
|
-
/**
|
|
9
|
+
/**
|
|
10
|
+
* Minimal manifest shape for provider discovery.
|
|
11
|
+
*
|
|
12
|
+
* @remarks
|
|
13
|
+
* Each provider adapter ships a `manifest.json` in its directory under
|
|
14
|
+
* `providers/`. The registry reads these at startup to populate the
|
|
15
|
+
* adapter discovery surface. The shape is intentionally minimal -- only
|
|
16
|
+
* the fields needed for dynamic loading and detection are required.
|
|
17
|
+
*/
|
|
10
18
|
export interface AdapterManifest {
|
|
19
|
+
/** Unique provider identifier (e.g. "claude-code", "cursor"). */
|
|
11
20
|
id: string;
|
|
21
|
+
/** Human-readable display name for the provider. */
|
|
12
22
|
name: string;
|
|
23
|
+
/** Semantic version of the adapter. */
|
|
13
24
|
version: string;
|
|
25
|
+
/** Short description of what the provider integrates with. */
|
|
14
26
|
description: string;
|
|
27
|
+
/** Provider slug used for directory lookups. */
|
|
15
28
|
provider: string;
|
|
29
|
+
/** Relative path to the adapter's entry point module. */
|
|
16
30
|
entryPoint: string;
|
|
31
|
+
/** Capability flags declared by the adapter. */
|
|
17
32
|
capabilities: Record<string, unknown>;
|
|
33
|
+
/** Patterns used to auto-detect the provider in a project. */
|
|
18
34
|
detectionPatterns: Array<{
|
|
35
|
+
/** Detection strategy type (e.g. "file", "env"). */
|
|
19
36
|
type: string;
|
|
37
|
+
/** Glob or regex pattern to match. */
|
|
20
38
|
pattern: string;
|
|
39
|
+
/** Human-readable explanation of this detection rule. */
|
|
21
40
|
description: string;
|
|
22
41
|
}>;
|
|
23
42
|
}
|
|
24
43
|
/**
|
|
25
44
|
* Get the manifests for all bundled provider adapters.
|
|
26
45
|
*
|
|
27
|
-
* @
|
|
46
|
+
* @remarks
|
|
47
|
+
* Scans the known provider directories for `manifest.json` files.
|
|
48
|
+
* Providers whose manifests cannot be loaded (missing or malformed)
|
|
49
|
+
* are silently skipped.
|
|
50
|
+
*
|
|
51
|
+
* @returns Array of adapter manifests for successfully loaded providers
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```typescript
|
|
55
|
+
* import { getProviderManifests } from '@cleocode/adapters';
|
|
56
|
+
*
|
|
57
|
+
* const manifests = getProviderManifests();
|
|
58
|
+
* for (const m of manifests) {
|
|
59
|
+
* console.log(`${m.id}: ${m.name} v${m.version}`);
|
|
60
|
+
* }
|
|
61
|
+
* ```
|
|
28
62
|
*/
|
|
29
63
|
export declare function getProviderManifests(): AdapterManifest[];
|
|
30
64
|
/**
|
|
31
65
|
* Discover all available provider adapters.
|
|
32
66
|
*
|
|
33
67
|
* Returns a map of provider ID to adapter factory function.
|
|
68
|
+
*
|
|
69
|
+
* @remarks
|
|
70
|
+
* Each factory lazily imports the provider module and constructs a new
|
|
71
|
+
* adapter instance. This avoids loading all provider code upfront and
|
|
72
|
+
* keeps startup fast.
|
|
73
|
+
*
|
|
74
|
+
* @returns Map of provider ID to async factory function that creates an adapter instance
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* ```typescript
|
|
78
|
+
* import { discoverProviders } from '@cleocode/adapters';
|
|
79
|
+
*
|
|
80
|
+
* const providers = await discoverProviders();
|
|
81
|
+
* const factory = providers.get('claude-code');
|
|
82
|
+
* if (factory) {
|
|
83
|
+
* const adapter = await factory();
|
|
84
|
+
* }
|
|
85
|
+
* ```
|
|
34
86
|
*/
|
|
35
87
|
export declare function discoverProviders(): Promise<Map<string, () => Promise<unknown>>>;
|
|
36
88
|
//# sourceMappingURL=registry.d.ts.map
|
package/dist/registry.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH;;;;;;;;GAQG;AACH,MAAM,WAAW,eAAe;IAC9B,iEAAiE;IACjE,EAAE,EAAE,MAAM,CAAC;IACX,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,WAAW,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,UAAU,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,8DAA8D;IAC9D,iBAAiB,EAAE,KAAK,CAAC;QACvB,oDAAoD;QACpD,IAAI,EAAE,MAAM,CAAC;QACb,sCAAsC;QACtC,OAAO,EAAE,MAAM,CAAC;QAChB,yDAAyD;QACzD,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;CACJ;AAKD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,oBAAoB,IAAI,eAAe,EAAE,CAexD;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAmBtF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cleocode/adapters",
|
|
3
|
-
"version": "2026.4.
|
|
3
|
+
"version": "2026.4.2",
|
|
4
4
|
"description": "Unified provider adapters for CLEO (Claude Code, OpenCode, Cursor)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
}
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@cleocode/caamp": "2026.4.
|
|
16
|
-
"@cleocode/contracts": "2026.4.
|
|
15
|
+
"@cleocode/caamp": "2026.4.2",
|
|
16
|
+
"@cleocode/contracts": "2026.4.2"
|
|
17
17
|
},
|
|
18
18
|
"license": "MIT",
|
|
19
19
|
"engines": {
|
|
@@ -25,12 +25,12 @@ describe('ClaudeCodeAdapter', () => {
|
|
|
25
25
|
expect(adapter.capabilities.supportsHooks).toBe(true);
|
|
26
26
|
expect(adapter.capabilities.supportsSpawn).toBe(true);
|
|
27
27
|
expect(adapter.capabilities.supportsInstall).toBe(true);
|
|
28
|
-
expect(adapter.capabilities.supportsMcp).toBe(
|
|
28
|
+
expect(adapter.capabilities.supportsMcp).toBe(false);
|
|
29
29
|
expect(adapter.capabilities.supportsInstructionFiles).toBe(true);
|
|
30
30
|
expect(adapter.capabilities.instructionFilePattern).toBe('CLAUDE.md');
|
|
31
|
-
expect(adapter.capabilities.supportedHookEvents).toContain('
|
|
32
|
-
expect(adapter.capabilities.supportedHookEvents).toContain('
|
|
33
|
-
expect(adapter.capabilities.supportedHookEvents).toContain('
|
|
31
|
+
expect(adapter.capabilities.supportedHookEvents).toContain('SessionStart');
|
|
32
|
+
expect(adapter.capabilities.supportedHookEvents).toContain('SessionEnd');
|
|
33
|
+
expect(adapter.capabilities.supportedHookEvents).toContain('PostToolUse');
|
|
34
34
|
});
|
|
35
35
|
it('exposes hooks, spawn, and install providers', () => {
|
|
36
36
|
expect(adapter.hooks).toBeInstanceOf(ClaudeCodeHookProvider);
|
|
@@ -68,17 +68,17 @@ describe('ClaudeCodeHookProvider', () => {
|
|
|
68
68
|
beforeEach(() => {
|
|
69
69
|
hooks = new ClaudeCodeHookProvider();
|
|
70
70
|
});
|
|
71
|
-
it('maps SessionStart to
|
|
72
|
-
expect(hooks.mapProviderEvent('SessionStart')).toBe('
|
|
71
|
+
it('maps SessionStart to SessionStart', () => {
|
|
72
|
+
expect(hooks.mapProviderEvent('SessionStart')).toBe('SessionStart');
|
|
73
73
|
});
|
|
74
|
-
it('maps PostToolUse to
|
|
75
|
-
expect(hooks.mapProviderEvent('PostToolUse')).toBe('
|
|
74
|
+
it('maps PostToolUse to PostToolUse', () => {
|
|
75
|
+
expect(hooks.mapProviderEvent('PostToolUse')).toBe('PostToolUse');
|
|
76
76
|
});
|
|
77
|
-
it('maps UserPromptSubmit to
|
|
78
|
-
expect(hooks.mapProviderEvent('UserPromptSubmit')).toBe('
|
|
77
|
+
it('maps UserPromptSubmit to PromptSubmit', () => {
|
|
78
|
+
expect(hooks.mapProviderEvent('UserPromptSubmit')).toBe('PromptSubmit');
|
|
79
79
|
});
|
|
80
|
-
it('maps Stop to
|
|
81
|
-
expect(hooks.mapProviderEvent('Stop')).toBe('
|
|
80
|
+
it('maps Stop to ResponseComplete', () => {
|
|
81
|
+
expect(hooks.mapProviderEvent('Stop')).toBe('ResponseComplete');
|
|
82
82
|
});
|
|
83
83
|
it('returns null for unknown events', () => {
|
|
84
84
|
expect(hooks.mapProviderEvent('UnknownEvent')).toBeNull();
|
|
@@ -93,11 +93,11 @@ describe('ClaudeCodeHookProvider', () => {
|
|
|
93
93
|
});
|
|
94
94
|
it('exposes event map for introspection', () => {
|
|
95
95
|
const map = hooks.getEventMap();
|
|
96
|
-
expect(map).toHaveProperty('SessionStart', '
|
|
97
|
-
expect(map).toHaveProperty('PostToolUse', '
|
|
98
|
-
expect(map).toHaveProperty('UserPromptSubmit', '
|
|
99
|
-
expect(map).toHaveProperty('Stop', '
|
|
100
|
-
expect(Object.keys(map)).toHaveLength(
|
|
96
|
+
expect(map).toHaveProperty('SessionStart', 'SessionStart');
|
|
97
|
+
expect(map).toHaveProperty('PostToolUse', 'PostToolUse');
|
|
98
|
+
expect(map).toHaveProperty('UserPromptSubmit', 'PromptSubmit');
|
|
99
|
+
expect(map).toHaveProperty('Stop', 'ResponseComplete');
|
|
100
|
+
expect(Object.keys(map)).toHaveLength(14);
|
|
101
101
|
});
|
|
102
102
|
});
|
|
103
103
|
describe('ClaudeCodeSpawnProvider', () => {
|
|
@@ -158,28 +158,19 @@ describe('ClaudeCodeInstallProvider', () => {
|
|
|
158
158
|
const injectionCount = content.split('@~/.cleo/templates/CLEO-INJECTION.md').length - 1;
|
|
159
159
|
expect(injectionCount).toBe(1);
|
|
160
160
|
});
|
|
161
|
-
it('
|
|
161
|
+
it('install returns mcpRegistered false', async () => {
|
|
162
162
|
const result = await install.install({
|
|
163
163
|
projectDir: testDir,
|
|
164
|
-
mcpServerPath: '/path/to/cleo-mcp.js',
|
|
165
164
|
});
|
|
166
165
|
expect(result.success).toBe(true);
|
|
167
|
-
expect(result.mcpRegistered).toBe(
|
|
166
|
+
expect(result.mcpRegistered).toBe(false);
|
|
168
167
|
expect(result.instructionFileUpdated).toBe(true);
|
|
169
|
-
const mcpConfig = JSON.parse(readFileSync(join(testDir, '.mcp.json'), 'utf-8'));
|
|
170
|
-
expect(mcpConfig.mcpServers.cleo).toEqual({
|
|
171
|
-
command: 'node',
|
|
172
|
-
args: ['/path/to/cleo-mcp.js'],
|
|
173
|
-
});
|
|
174
168
|
});
|
|
175
|
-
it('uninstall
|
|
169
|
+
it('uninstall is a no-op', async () => {
|
|
176
170
|
await install.install({
|
|
177
171
|
projectDir: testDir,
|
|
178
|
-
mcpServerPath: '/path/to/cleo-mcp.js',
|
|
179
172
|
});
|
|
180
|
-
await install.uninstall();
|
|
181
|
-
const mcpConfig = JSON.parse(readFileSync(join(testDir, '.mcp.json'), 'utf-8'));
|
|
182
|
-
expect(mcpConfig.mcpServers.cleo).toBeUndefined();
|
|
173
|
+
await expect(install.uninstall()).resolves.toBeUndefined();
|
|
183
174
|
});
|
|
184
175
|
});
|
|
185
176
|
describe('createAdapter factory', () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code-adapter.test.js","sourceRoot":"","sources":["claude-code-adapter.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,yBAAyB,EACzB,uBAAuB,EACvB,uBAAuB,IAAI,aAAa,GACzC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAErE,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,IAAI,OAA0B,CAAC;IAE/B,UAAU,CAAC,GAAG,EAAE;QACd,OAAO,GAAG,IAAI,iBAAiB,EAAE,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACvC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACzC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtD,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtD,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxD,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"claude-code-adapter.test.js","sourceRoot":"","sources":["claude-code-adapter.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,12 +36,12 @@ describe('ClaudeCodeAdapter', () => {
|
|
|
36
36
|
expect(adapter.capabilities.supportsHooks).toBe(true);
|
|
37
37
|
expect(adapter.capabilities.supportsSpawn).toBe(true);
|
|
38
38
|
expect(adapter.capabilities.supportsInstall).toBe(true);
|
|
39
|
-
expect(adapter.capabilities.supportsMcp).toBe(
|
|
39
|
+
expect(adapter.capabilities.supportsMcp).toBe(false);
|
|
40
40
|
expect(adapter.capabilities.supportsInstructionFiles).toBe(true);
|
|
41
41
|
expect(adapter.capabilities.instructionFilePattern).toBe('CLAUDE.md');
|
|
42
|
-
expect(adapter.capabilities.supportedHookEvents).toContain('
|
|
43
|
-
expect(adapter.capabilities.supportedHookEvents).toContain('
|
|
44
|
-
expect(adapter.capabilities.supportedHookEvents).toContain('
|
|
42
|
+
expect(adapter.capabilities.supportedHookEvents).toContain('SessionStart');
|
|
43
|
+
expect(adapter.capabilities.supportedHookEvents).toContain('SessionEnd');
|
|
44
|
+
expect(adapter.capabilities.supportedHookEvents).toContain('PostToolUse');
|
|
45
45
|
});
|
|
46
46
|
|
|
47
47
|
it('exposes hooks, spawn, and install providers', () => {
|
|
@@ -87,20 +87,20 @@ describe('ClaudeCodeHookProvider', () => {
|
|
|
87
87
|
hooks = new ClaudeCodeHookProvider();
|
|
88
88
|
});
|
|
89
89
|
|
|
90
|
-
it('maps SessionStart to
|
|
91
|
-
expect(hooks.mapProviderEvent('SessionStart')).toBe('
|
|
90
|
+
it('maps SessionStart to SessionStart', () => {
|
|
91
|
+
expect(hooks.mapProviderEvent('SessionStart')).toBe('SessionStart');
|
|
92
92
|
});
|
|
93
93
|
|
|
94
|
-
it('maps PostToolUse to
|
|
95
|
-
expect(hooks.mapProviderEvent('PostToolUse')).toBe('
|
|
94
|
+
it('maps PostToolUse to PostToolUse', () => {
|
|
95
|
+
expect(hooks.mapProviderEvent('PostToolUse')).toBe('PostToolUse');
|
|
96
96
|
});
|
|
97
97
|
|
|
98
|
-
it('maps UserPromptSubmit to
|
|
99
|
-
expect(hooks.mapProviderEvent('UserPromptSubmit')).toBe('
|
|
98
|
+
it('maps UserPromptSubmit to PromptSubmit', () => {
|
|
99
|
+
expect(hooks.mapProviderEvent('UserPromptSubmit')).toBe('PromptSubmit');
|
|
100
100
|
});
|
|
101
101
|
|
|
102
|
-
it('maps Stop to
|
|
103
|
-
expect(hooks.mapProviderEvent('Stop')).toBe('
|
|
102
|
+
it('maps Stop to ResponseComplete', () => {
|
|
103
|
+
expect(hooks.mapProviderEvent('Stop')).toBe('ResponseComplete');
|
|
104
104
|
});
|
|
105
105
|
|
|
106
106
|
it('returns null for unknown events', () => {
|
|
@@ -118,11 +118,11 @@ describe('ClaudeCodeHookProvider', () => {
|
|
|
118
118
|
|
|
119
119
|
it('exposes event map for introspection', () => {
|
|
120
120
|
const map = hooks.getEventMap();
|
|
121
|
-
expect(map).toHaveProperty('SessionStart', '
|
|
122
|
-
expect(map).toHaveProperty('PostToolUse', '
|
|
123
|
-
expect(map).toHaveProperty('UserPromptSubmit', '
|
|
124
|
-
expect(map).toHaveProperty('Stop', '
|
|
125
|
-
expect(Object.keys(map)).toHaveLength(
|
|
121
|
+
expect(map).toHaveProperty('SessionStart', 'SessionStart');
|
|
122
|
+
expect(map).toHaveProperty('PostToolUse', 'PostToolUse');
|
|
123
|
+
expect(map).toHaveProperty('UserPromptSubmit', 'PromptSubmit');
|
|
124
|
+
expect(map).toHaveProperty('Stop', 'ResponseComplete');
|
|
125
|
+
expect(Object.keys(map)).toHaveLength(14);
|
|
126
126
|
});
|
|
127
127
|
});
|
|
128
128
|
|
|
@@ -196,33 +196,22 @@ describe('ClaudeCodeInstallProvider', () => {
|
|
|
196
196
|
expect(injectionCount).toBe(1);
|
|
197
197
|
});
|
|
198
198
|
|
|
199
|
-
it('
|
|
199
|
+
it('install returns mcpRegistered false', async () => {
|
|
200
200
|
const result = await install.install({
|
|
201
201
|
projectDir: testDir,
|
|
202
|
-
mcpServerPath: '/path/to/cleo-mcp.js',
|
|
203
202
|
});
|
|
204
203
|
|
|
205
204
|
expect(result.success).toBe(true);
|
|
206
|
-
expect(result.mcpRegistered).toBe(
|
|
205
|
+
expect(result.mcpRegistered).toBe(false);
|
|
207
206
|
expect(result.instructionFileUpdated).toBe(true);
|
|
208
|
-
|
|
209
|
-
const mcpConfig = JSON.parse(readFileSync(join(testDir, '.mcp.json'), 'utf-8'));
|
|
210
|
-
expect(mcpConfig.mcpServers.cleo).toEqual({
|
|
211
|
-
command: 'node',
|
|
212
|
-
args: ['/path/to/cleo-mcp.js'],
|
|
213
|
-
});
|
|
214
207
|
});
|
|
215
208
|
|
|
216
|
-
it('uninstall
|
|
209
|
+
it('uninstall is a no-op', async () => {
|
|
217
210
|
await install.install({
|
|
218
211
|
projectDir: testDir,
|
|
219
|
-
mcpServerPath: '/path/to/cleo-mcp.js',
|
|
220
212
|
});
|
|
221
213
|
|
|
222
|
-
await install.uninstall();
|
|
223
|
-
|
|
224
|
-
const mcpConfig = JSON.parse(readFileSync(join(testDir, '.mcp.json'), 'utf-8'));
|
|
225
|
-
expect(mcpConfig.mcpServers.cleo).toBeUndefined();
|
|
214
|
+
await expect(install.uninstall()).resolves.toBeUndefined();
|
|
226
215
|
});
|
|
227
216
|
});
|
|
228
217
|
|
|
@@ -21,16 +21,20 @@ describe('CursorAdapter', () => {
|
|
|
21
21
|
expect(adapter.name).toBe('Cursor');
|
|
22
22
|
expect(adapter.version).toBe('1.0.0');
|
|
23
23
|
});
|
|
24
|
-
it('
|
|
25
|
-
expect(adapter.capabilities.supportsHooks).toBe(
|
|
26
|
-
expect(adapter.capabilities.supportedHookEvents).toHaveLength(
|
|
24
|
+
it('supports hooks with 10 CAAMP events', () => {
|
|
25
|
+
expect(adapter.capabilities.supportsHooks).toBe(true);
|
|
26
|
+
expect(adapter.capabilities.supportedHookEvents).toHaveLength(10);
|
|
27
|
+
expect(adapter.capabilities.supportedHookEvents).toContain('SessionStart');
|
|
28
|
+
expect(adapter.capabilities.supportedHookEvents).toContain('SessionEnd');
|
|
29
|
+
expect(adapter.capabilities.supportedHookEvents).toContain('PreToolUse');
|
|
30
|
+
expect(adapter.capabilities.supportedHookEvents).toContain('PostToolUse');
|
|
27
31
|
});
|
|
28
32
|
it('does not support spawn', () => {
|
|
29
33
|
expect(adapter.capabilities.supportsSpawn).toBe(false);
|
|
30
34
|
});
|
|
31
|
-
it('supports install
|
|
35
|
+
it('supports install and instruction files', () => {
|
|
32
36
|
expect(adapter.capabilities.supportsInstall).toBe(true);
|
|
33
|
-
expect(adapter.capabilities.supportsMcp).toBe(
|
|
37
|
+
expect(adapter.capabilities.supportsMcp).toBe(false);
|
|
34
38
|
expect(adapter.capabilities.supportsInstructionFiles).toBe(true);
|
|
35
39
|
expect(adapter.capabilities.instructionFilePattern).toBe('.cursor/rules/*.mdc');
|
|
36
40
|
});
|
|
@@ -78,10 +82,20 @@ describe('CursorHookProvider', () => {
|
|
|
78
82
|
beforeEach(() => {
|
|
79
83
|
hooks = new CursorHookProvider();
|
|
80
84
|
});
|
|
81
|
-
it('
|
|
85
|
+
it('maps Cursor native events to CAAMP canonical names', () => {
|
|
86
|
+
expect(hooks.mapProviderEvent('sessionStart')).toBe('SessionStart');
|
|
87
|
+
expect(hooks.mapProviderEvent('sessionEnd')).toBe('SessionEnd');
|
|
88
|
+
expect(hooks.mapProviderEvent('beforeSubmitPrompt')).toBe('PromptSubmit');
|
|
89
|
+
expect(hooks.mapProviderEvent('stop')).toBe('ResponseComplete');
|
|
90
|
+
expect(hooks.mapProviderEvent('preToolUse')).toBe('PreToolUse');
|
|
91
|
+
expect(hooks.mapProviderEvent('postToolUse')).toBe('PostToolUse');
|
|
92
|
+
expect(hooks.mapProviderEvent('postToolUseFailure')).toBe('PostToolUseFailure');
|
|
93
|
+
expect(hooks.mapProviderEvent('subagentStart')).toBe('SubagentStart');
|
|
94
|
+
expect(hooks.mapProviderEvent('subagentStop')).toBe('SubagentStop');
|
|
95
|
+
expect(hooks.mapProviderEvent('preCompact')).toBe('PreCompact');
|
|
96
|
+
});
|
|
97
|
+
it('returns null for unsupported or unknown events', () => {
|
|
82
98
|
expect(hooks.mapProviderEvent('SessionStart')).toBeNull();
|
|
83
|
-
expect(hooks.mapProviderEvent('PostToolUse')).toBeNull();
|
|
84
|
-
expect(hooks.mapProviderEvent('Stop')).toBeNull();
|
|
85
99
|
expect(hooks.mapProviderEvent('')).toBeNull();
|
|
86
100
|
expect(hooks.mapProviderEvent('anything')).toBeNull();
|
|
87
101
|
});
|
|
@@ -156,33 +170,15 @@ describe('CursorInstallProvider', () => {
|
|
|
156
170
|
const injectionCount = content.split('@~/.cleo/templates/CLEO-INJECTION.md').length - 1;
|
|
157
171
|
expect(injectionCount).toBe(1);
|
|
158
172
|
});
|
|
159
|
-
it('
|
|
173
|
+
it('install returns mcpRegistered false', async () => {
|
|
160
174
|
const result = await install.install({
|
|
161
175
|
projectDir: testDir,
|
|
162
|
-
mcpServerPath: '/path/to/cleo-mcp.js',
|
|
163
176
|
});
|
|
164
177
|
expect(result.success).toBe(true);
|
|
165
|
-
expect(result.mcpRegistered).toBe(
|
|
178
|
+
expect(result.mcpRegistered).toBe(false);
|
|
166
179
|
expect(result.instructionFileUpdated).toBe(true);
|
|
167
|
-
const mcpPath = join(testDir, '.cursor', 'mcp.json');
|
|
168
|
-
expect(existsSync(mcpPath)).toBe(true);
|
|
169
|
-
const config = JSON.parse(readFileSync(mcpPath, 'utf-8'));
|
|
170
|
-
expect(config.mcpServers.cleo).toEqual({
|
|
171
|
-
command: 'node',
|
|
172
|
-
args: ['/path/to/cleo-mcp.js'],
|
|
173
|
-
});
|
|
174
|
-
});
|
|
175
|
-
it('uninstall removes MCP server from .cursor/mcp.json', async () => {
|
|
176
|
-
await install.install({
|
|
177
|
-
projectDir: testDir,
|
|
178
|
-
mcpServerPath: '/path/to/cleo-mcp.js',
|
|
179
|
-
});
|
|
180
|
-
await install.uninstall();
|
|
181
|
-
const mcpPath = join(testDir, '.cursor', 'mcp.json');
|
|
182
|
-
const config = JSON.parse(readFileSync(mcpPath, 'utf-8'));
|
|
183
|
-
expect(config.mcpServers.cleo).toBeUndefined();
|
|
184
180
|
});
|
|
185
|
-
it('uninstall is no-op
|
|
181
|
+
it('uninstall is a no-op', async () => {
|
|
186
182
|
await expect(install.uninstall()).resolves.toBeUndefined();
|
|
187
183
|
});
|
|
188
184
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor-adapter.test.js","sourceRoot":"","sources":["cursor-adapter.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,IAAI,aAAa,GACrC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAErE,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,IAAI,OAAsB,CAAC;IAE3B,UAAU,CAAC,GAAG,EAAE;QACd,OAAO,GAAG,IAAI,aAAa,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"cursor-adapter.test.js","sourceRoot":"","sources":["cursor-adapter.test.ts"],"names":[],"mappings":"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"}
|