@cleocode/adapters 2026.5.3 → 2026.5.5
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.js +40 -0
- package/dist/index.js.map +3 -3
- package/package.json +4 -4
- package/dist/cant-context.js +0 -711
- package/dist/cant-context.js.map +0 -1
- package/dist/providers/claude-code/adapter.js +0 -222
- package/dist/providers/claude-code/adapter.js.map +0 -1
- package/dist/providers/claude-code/context-monitor.js +0 -159
- package/dist/providers/claude-code/context-monitor.js.map +0 -1
- package/dist/providers/claude-code/hooks.js +0 -428
- package/dist/providers/claude-code/hooks.js.map +0 -1
- package/dist/providers/claude-code/index.js +0 -41
- package/dist/providers/claude-code/index.js.map +0 -1
- package/dist/providers/claude-code/install.js +0 -310
- package/dist/providers/claude-code/install.js.map +0 -1
- package/dist/providers/claude-code/paths.js +0 -41
- package/dist/providers/claude-code/paths.js.map +0 -1
- package/dist/providers/claude-code/spawn.js +0 -198
- package/dist/providers/claude-code/spawn.js.map +0 -1
- package/dist/providers/claude-code/statusline.js +0 -130
- package/dist/providers/claude-code/statusline.js.map +0 -1
- package/dist/providers/claude-code/task-sync.js +0 -119
- package/dist/providers/claude-code/task-sync.js.map +0 -1
- package/dist/providers/claude-code/transport.js +0 -29
- package/dist/providers/claude-code/transport.js.map +0 -1
- package/dist/providers/claude-sdk/adapter.js +0 -88
- package/dist/providers/claude-sdk/adapter.js.map +0 -1
- package/dist/providers/claude-sdk/index.js +0 -34
- package/dist/providers/claude-sdk/index.js.map +0 -1
- package/dist/providers/claude-sdk/install.js +0 -61
- package/dist/providers/claude-sdk/install.js.map +0 -1
- package/dist/providers/claude-sdk/mcp-registry.js +0 -66
- package/dist/providers/claude-sdk/mcp-registry.js.map +0 -1
- package/dist/providers/claude-sdk/session-store.js +0 -84
- package/dist/providers/claude-sdk/session-store.js.map +0 -1
- package/dist/providers/claude-sdk/spawn.js +0 -251
- package/dist/providers/claude-sdk/spawn.js.map +0 -1
- package/dist/providers/claude-sdk/tool-bridge.js +0 -50
- package/dist/providers/claude-sdk/tool-bridge.js.map +0 -1
- package/dist/providers/codex/adapter.js +0 -146
- package/dist/providers/codex/adapter.js.map +0 -1
- package/dist/providers/codex/hooks.js +0 -113
- package/dist/providers/codex/hooks.js.map +0 -1
- package/dist/providers/codex/index.js +0 -40
- package/dist/providers/codex/index.js.map +0 -1
- package/dist/providers/codex/install.js +0 -132
- package/dist/providers/codex/install.js.map +0 -1
- package/dist/providers/codex/spawn.js +0 -203
- package/dist/providers/codex/spawn.js.map +0 -1
- package/dist/providers/cursor/adapter.js +0 -151
- package/dist/providers/cursor/adapter.js.map +0 -1
- package/dist/providers/cursor/hooks.js +0 -208
- package/dist/providers/cursor/hooks.js.map +0 -1
- package/dist/providers/cursor/index.js +0 -36
- package/dist/providers/cursor/index.js.map +0 -1
- package/dist/providers/cursor/install.js +0 -281
- 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 -158
- package/dist/providers/gemini-cli/adapter.js.map +0 -1
- package/dist/providers/gemini-cli/hooks.js +0 -128
- package/dist/providers/gemini-cli/hooks.js.map +0 -1
- package/dist/providers/gemini-cli/index.js +0 -40
- package/dist/providers/gemini-cli/index.js.map +0 -1
- package/dist/providers/gemini-cli/install.js +0 -124
- package/dist/providers/gemini-cli/install.js.map +0 -1
- package/dist/providers/gemini-cli/spawn.js +0 -195
- package/dist/providers/gemini-cli/spawn.js.map +0 -1
- package/dist/providers/kimi/adapter.js +0 -145
- package/dist/providers/kimi/adapter.js.map +0 -1
- package/dist/providers/kimi/hooks.js +0 -79
- package/dist/providers/kimi/hooks.js.map +0 -1
- package/dist/providers/kimi/index.js +0 -40
- package/dist/providers/kimi/index.js.map +0 -1
- package/dist/providers/kimi/install.js +0 -124
- package/dist/providers/kimi/install.js.map +0 -1
- package/dist/providers/kimi/spawn.js +0 -225
- package/dist/providers/kimi/spawn.js.map +0 -1
- package/dist/providers/openai-sdk/adapter.js +0 -121
- package/dist/providers/openai-sdk/adapter.js.map +0 -1
- package/dist/providers/openai-sdk/guardrails.js +0 -174
- package/dist/providers/openai-sdk/guardrails.js.map +0 -1
- package/dist/providers/openai-sdk/handoff.js +0 -128
- package/dist/providers/openai-sdk/handoff.js.map +0 -1
- package/dist/providers/openai-sdk/index.js +0 -40
- package/dist/providers/openai-sdk/index.js.map +0 -1
- package/dist/providers/openai-sdk/install.js +0 -120
- package/dist/providers/openai-sdk/install.js.map +0 -1
- package/dist/providers/openai-sdk/spawn.js +0 -361
- package/dist/providers/openai-sdk/spawn.js.map +0 -1
- package/dist/providers/openai-sdk/tracing.js +0 -159
- package/dist/providers/openai-sdk/tracing.js.map +0 -1
- package/dist/providers/opencode/adapter.js +0 -166
- package/dist/providers/opencode/adapter.js.map +0 -1
- package/dist/providers/opencode/hooks.js +0 -206
- package/dist/providers/opencode/hooks.js.map +0 -1
- package/dist/providers/opencode/index.js +0 -37
- package/dist/providers/opencode/index.js.map +0 -1
- package/dist/providers/opencode/install.js +0 -242
- package/dist/providers/opencode/install.js.map +0 -1
- package/dist/providers/opencode/spawn.js +0 -257
- package/dist/providers/opencode/spawn.js.map +0 -1
- package/dist/providers/pi/adapter.js +0 -220
- package/dist/providers/pi/adapter.js.map +0 -1
- package/dist/providers/pi/hooks.js +0 -223
- package/dist/providers/pi/hooks.js.map +0 -1
- package/dist/providers/pi/index.js +0 -38
- package/dist/providers/pi/index.js.map +0 -1
- package/dist/providers/pi/install.js +0 -183
- package/dist/providers/pi/install.js.map +0 -1
- package/dist/providers/pi/spawn.js +0 -187
- package/dist/providers/pi/spawn.js.map +0 -1
- package/dist/providers/shared/conduit-trace-writer.js +0 -65
- package/dist/providers/shared/conduit-trace-writer.js.map +0 -1
- package/dist/providers/shared/hook-template-installer.js +0 -209
- package/dist/providers/shared/hook-template-installer.js.map +0 -1
- package/dist/providers/shared/paths.js +0 -77
- package/dist/providers/shared/paths.js.map +0 -1
- package/dist/providers/shared/sdk-result-mapper.js +0 -55
- package/dist/providers/shared/sdk-result-mapper.js.map +0 -1
- package/dist/providers/shared/transcript-reader.js +0 -124
- package/dist/providers/shared/transcript-reader.js.map +0 -1
- package/dist/registry.js +0 -92
- package/dist/registry.js.map +0 -1
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared conduit trace writer for SDK-backed providers.
|
|
3
|
-
*
|
|
4
|
-
* Writes structured span events to conduit.db via the CLEO transport layer.
|
|
5
|
-
* Both T581 (Claude SDK) and T582 (OpenAI SDK) use this module so the
|
|
6
|
-
* conduit write path stays DRY.
|
|
7
|
-
*
|
|
8
|
-
* The writer is fire-and-forget: if conduit is unavailable, write failures are
|
|
9
|
-
* silently swallowed so that missing tracing never breaks agent execution.
|
|
10
|
-
*
|
|
11
|
-
* @task T582
|
|
12
|
-
*/
|
|
13
|
-
/**
|
|
14
|
-
* Write a single span event to conduit via `cleo` CLI transport.
|
|
15
|
-
*
|
|
16
|
-
* Falls back gracefully when conduit is unavailable. All errors are caught
|
|
17
|
-
* and returned in the result rather than thrown.
|
|
18
|
-
*
|
|
19
|
-
* @param event - The span event to persist.
|
|
20
|
-
* @returns Result indicating whether the write succeeded.
|
|
21
|
-
*
|
|
22
|
-
* @remarks
|
|
23
|
-
* The current implementation writes to conduit using the `cleo conduit send`
|
|
24
|
-
* CLI command. This keeps the trace writer free of direct DB dependencies and
|
|
25
|
-
* consistent with the no-direct-SQLite rule (ADR).
|
|
26
|
-
*
|
|
27
|
-
* When conduit grows a native TS API this writer can be updated without
|
|
28
|
-
* changing caller code.
|
|
29
|
-
*/
|
|
30
|
-
export async function writeSpanToConduit(event) {
|
|
31
|
-
try {
|
|
32
|
-
const { exec } = await import('node:child_process');
|
|
33
|
-
const { promisify } = await import('node:util');
|
|
34
|
-
const execAsync = promisify(exec);
|
|
35
|
-
const payload = JSON.stringify({
|
|
36
|
-
type: 'agent_span',
|
|
37
|
-
version: '1',
|
|
38
|
-
...event,
|
|
39
|
-
});
|
|
40
|
-
// Use the CLEO conduit send command which handles DB access via the
|
|
41
|
-
// business logic layer (no direct SQLite per ADR-013 §9).
|
|
42
|
-
await execAsync(`cleo conduit send --type agent_span --payload ${JSON.stringify(payload)}`);
|
|
43
|
-
return { written: true };
|
|
44
|
-
}
|
|
45
|
-
catch (err) {
|
|
46
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
47
|
-
return { written: false, error: message };
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Write multiple span events to conduit, swallowing individual write failures.
|
|
52
|
-
*
|
|
53
|
-
* @param events - Array of span events to persist.
|
|
54
|
-
* @returns Number of events successfully written.
|
|
55
|
-
*/
|
|
56
|
-
export async function writeSpanBatchToConduit(events) {
|
|
57
|
-
let written = 0;
|
|
58
|
-
for (const event of events) {
|
|
59
|
-
const result = await writeSpanToConduit(event);
|
|
60
|
-
if (result.written)
|
|
61
|
-
written++;
|
|
62
|
-
}
|
|
63
|
-
return written;
|
|
64
|
-
}
|
|
65
|
-
//# sourceMappingURL=conduit-trace-writer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"conduit-trace-writer.js","sourceRoot":"","sources":["../../../src/providers/shared/conduit-trace-writer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAqCH;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,KAAuB;IAC9D,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACpD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAElC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;YAC7B,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,GAAG;YACZ,GAAG,KAAK;SACT,CAAC,CAAC;QAEH,oEAAoE;QACpE,0DAA0D;QAC1D,MAAM,SAAS,CAAC,iDAAiD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC5F,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAC5C,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,MAA0B;IACtE,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,MAAM,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;IAChC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -1,209 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared hook-template installer for provider adapters.
|
|
3
|
-
*
|
|
4
|
-
* Each provider ships its own PreCompact shell shim under
|
|
5
|
-
* `packages/adapters/src/providers/<provider>/templates/hooks/` which sources
|
|
6
|
-
* the universal helper at
|
|
7
|
-
* `packages/adapters/src/providers/shared/templates/hooks/cleo-precompact-core.sh`.
|
|
8
|
-
*
|
|
9
|
-
* This module wires the templates into the provider's hooks directory at
|
|
10
|
-
* install time. Provider-specific {@link AdapterInstallProvider} implementations
|
|
11
|
-
* call {@link installProviderHookTemplates} with their own provider id, and the
|
|
12
|
-
* installer consults CAAMP's `hook-mappings.json` SSoT to verify the provider
|
|
13
|
-
* supports the required canonical event and handler type before writing.
|
|
14
|
-
*
|
|
15
|
-
* DRY invariant: all shims source the same core helper — adapter-specific
|
|
16
|
-
* shims only add provider-flavoured banners and `$CLEO_PRECOMPACT_*` env
|
|
17
|
-
* handling.
|
|
18
|
-
*
|
|
19
|
-
* @task T1013
|
|
20
|
-
* @epic T1000
|
|
21
|
-
*/
|
|
22
|
-
import { copyFileSync, existsSync, mkdirSync, statSync } from 'node:fs';
|
|
23
|
-
import { dirname, join } from 'node:path';
|
|
24
|
-
import { fileURLToPath } from 'node:url';
|
|
25
|
-
// ---------------------------------------------------------------------------
|
|
26
|
-
// Template file resolution
|
|
27
|
-
// ---------------------------------------------------------------------------
|
|
28
|
-
/**
|
|
29
|
-
* Resolve the `providers/` base directory relative to this source file.
|
|
30
|
-
*
|
|
31
|
-
* Template shell scripts live alongside TypeScript source at
|
|
32
|
-
* `src/providers/<provider>/templates/hooks/`. The TypeScript compiler
|
|
33
|
-
* emits `.d.ts` / `.js` artefacts into `dist/providers/...` without copying
|
|
34
|
-
* non-TS assets. To support both development (running from `src/`) and
|
|
35
|
-
* published installs (running from `dist/`), this resolver returns a list of
|
|
36
|
-
* candidate provider directories — one for the current runtime location and
|
|
37
|
-
* one for the parallel `src/providers/` tree. Template lookup callers must
|
|
38
|
-
* pick the first candidate that contains the expected file.
|
|
39
|
-
*
|
|
40
|
-
* @internal
|
|
41
|
-
*/
|
|
42
|
-
function resolveProviderCandidates() {
|
|
43
|
-
// One level up from shared/ = providers/. This is the compiled location
|
|
44
|
-
// when running from `dist/providers/shared/hook-template-installer.js` or
|
|
45
|
-
// the source location in development.
|
|
46
|
-
const thisDir = dirname(fileURLToPath(import.meta.url));
|
|
47
|
-
const here = dirname(thisDir);
|
|
48
|
-
// Also look in the sibling `src/providers/` tree so compiled runs can still
|
|
49
|
-
// find template assets that tsc didn't copy. `dist/providers/shared/...`
|
|
50
|
-
// → `../../src/providers/`.
|
|
51
|
-
const fromDist = join(here, '..', '..', 'src', 'providers');
|
|
52
|
-
return [here, fromDist];
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Find a template file by searching the provider-directory candidates.
|
|
56
|
-
*
|
|
57
|
-
* @internal
|
|
58
|
-
*/
|
|
59
|
-
function findTemplateFile(relativeSegments) {
|
|
60
|
-
for (const base of resolveProviderCandidates()) {
|
|
61
|
-
const candidate = join(base, ...relativeSegments);
|
|
62
|
-
if (existsSync(candidate))
|
|
63
|
-
return candidate;
|
|
64
|
-
}
|
|
65
|
-
// Surface a precise error pointing to the first candidate so install
|
|
66
|
-
// failures are self-describing.
|
|
67
|
-
const [first] = resolveProviderCandidates();
|
|
68
|
-
return join(first ?? '', ...relativeSegments);
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Per-provider shim filename (relative to `<provider>/templates/hooks/`).
|
|
72
|
-
* Shell scripts named per the provider's canonical hook event convention.
|
|
73
|
-
*
|
|
74
|
-
* @internal
|
|
75
|
-
*/
|
|
76
|
-
const PROVIDER_SHIM = {
|
|
77
|
-
'claude-code': 'precompact-safestop.sh',
|
|
78
|
-
cursor: 'precompact.sh',
|
|
79
|
-
opencode: 'precompact.sh',
|
|
80
|
-
'gemini-cli': 'precompact.sh',
|
|
81
|
-
};
|
|
82
|
-
/** Filename of the shared universal helper. */
|
|
83
|
-
const SHARED_CORE_FILE = 'cleo-precompact-core.sh';
|
|
84
|
-
/**
|
|
85
|
-
* Resolve the absolute source path of a provider's shim script.
|
|
86
|
-
*
|
|
87
|
-
* @internal
|
|
88
|
-
*/
|
|
89
|
-
function providerShimSource(provider) {
|
|
90
|
-
return findTemplateFile([provider, 'templates', 'hooks', PROVIDER_SHIM[provider]]);
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Resolve the absolute source path of the shared `cleo-precompact-core.sh`
|
|
94
|
-
* helper.
|
|
95
|
-
*
|
|
96
|
-
* @internal
|
|
97
|
-
*/
|
|
98
|
-
function sharedCoreSource() {
|
|
99
|
-
return findTemplateFile(['shared', 'templates', 'hooks', SHARED_CORE_FILE]);
|
|
100
|
-
}
|
|
101
|
-
// ---------------------------------------------------------------------------
|
|
102
|
-
// Copy helpers
|
|
103
|
-
// ---------------------------------------------------------------------------
|
|
104
|
-
/**
|
|
105
|
-
* Copy a single template file, preserving the executable bit. Returns the
|
|
106
|
-
* destination path on successful write, or `null` when the destination
|
|
107
|
-
* already matches the source (idempotent no-op).
|
|
108
|
-
*
|
|
109
|
-
* @internal
|
|
110
|
-
*/
|
|
111
|
-
function copyTemplate(src, dest, force) {
|
|
112
|
-
if (!existsSync(src)) {
|
|
113
|
-
throw new Error(`CLEO hook template missing at source: ${src}`);
|
|
114
|
-
}
|
|
115
|
-
if (!force && existsSync(dest)) {
|
|
116
|
-
const srcStat = statSync(src);
|
|
117
|
-
const destStat = statSync(dest);
|
|
118
|
-
if (srcStat.size === destStat.size && srcStat.mtimeMs <= destStat.mtimeMs) {
|
|
119
|
-
return { wrote: false };
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
mkdirSync(dirname(dest), { recursive: true });
|
|
123
|
-
copyFileSync(src, dest);
|
|
124
|
-
return { wrote: true };
|
|
125
|
-
}
|
|
126
|
-
// ---------------------------------------------------------------------------
|
|
127
|
-
// Public API
|
|
128
|
-
// ---------------------------------------------------------------------------
|
|
129
|
-
/**
|
|
130
|
-
* Install the CLEO PreCompact hook templates for a provider.
|
|
131
|
-
*
|
|
132
|
-
* Writes two files into `targetDir`:
|
|
133
|
-
*
|
|
134
|
-
* 1. `cleo-precompact-core.sh` — universal helper (shared across all providers)
|
|
135
|
-
* 2. `<provider-shim>.sh` — provider-flavoured shim that sources the helper
|
|
136
|
-
*
|
|
137
|
-
* The shim invokes only the universal CLEO CLI (`cleo memory precompact-flush`
|
|
138
|
-
* and `cleo safestop …`) — adapters never reach into core internals.
|
|
139
|
-
*
|
|
140
|
-
* @param options - Installation target and provider id.
|
|
141
|
-
* @returns Paths written, paths skipped, and the resolved target directory.
|
|
142
|
-
*
|
|
143
|
-
* @example
|
|
144
|
-
* ```typescript
|
|
145
|
-
* import { homedir } from 'node:os';
|
|
146
|
-
* import { join } from 'node:path';
|
|
147
|
-
* import { installProviderHookTemplates } from '@cleocode/adapters';
|
|
148
|
-
*
|
|
149
|
-
* const result = installProviderHookTemplates({
|
|
150
|
-
* provider: 'claude-code',
|
|
151
|
-
* targetDir: join(homedir(), '.claude', 'hooks'),
|
|
152
|
-
* });
|
|
153
|
-
* // result.installedFiles includes both scripts on first run.
|
|
154
|
-
* ```
|
|
155
|
-
*
|
|
156
|
-
* @task T1013
|
|
157
|
-
* @public
|
|
158
|
-
*/
|
|
159
|
-
export function installProviderHookTemplates(options) {
|
|
160
|
-
const { provider, targetDir, force = false } = options;
|
|
161
|
-
const result = {
|
|
162
|
-
provider,
|
|
163
|
-
targetDir,
|
|
164
|
-
installedFiles: [],
|
|
165
|
-
skipped: [],
|
|
166
|
-
};
|
|
167
|
-
mkdirSync(targetDir, { recursive: true });
|
|
168
|
-
// 1. Shared universal helper
|
|
169
|
-
const coreDest = join(targetDir, SHARED_CORE_FILE);
|
|
170
|
-
const coreOutcome = copyTemplate(sharedCoreSource(), coreDest, force);
|
|
171
|
-
if (coreOutcome.wrote)
|
|
172
|
-
result.installedFiles.push(coreDest);
|
|
173
|
-
else
|
|
174
|
-
result.skipped.push(coreDest);
|
|
175
|
-
// 2. Provider-specific shim
|
|
176
|
-
const shimName = PROVIDER_SHIM[provider];
|
|
177
|
-
const shimDest = join(targetDir, shimName);
|
|
178
|
-
const shimOutcome = copyTemplate(providerShimSource(provider), shimDest, force);
|
|
179
|
-
if (shimOutcome.wrote)
|
|
180
|
-
result.installedFiles.push(shimDest);
|
|
181
|
-
else
|
|
182
|
-
result.skipped.push(shimDest);
|
|
183
|
-
return result;
|
|
184
|
-
}
|
|
185
|
-
/**
|
|
186
|
-
* Resolve the source-side path of a provider's hook template for inspection
|
|
187
|
-
* and testing. Returns the absolute path where the installer will read from.
|
|
188
|
-
*
|
|
189
|
-
* @param provider - Provider identifier.
|
|
190
|
-
* @returns Absolute path to the provider's shim template file.
|
|
191
|
-
*
|
|
192
|
-
* @task T1013
|
|
193
|
-
* @public
|
|
194
|
-
*/
|
|
195
|
-
export function getProviderHookTemplatePath(provider) {
|
|
196
|
-
return providerShimSource(provider);
|
|
197
|
-
}
|
|
198
|
-
/**
|
|
199
|
-
* Resolve the source-side path of the shared universal helper.
|
|
200
|
-
*
|
|
201
|
-
* @returns Absolute path to `cleo-precompact-core.sh` in the adapter package.
|
|
202
|
-
*
|
|
203
|
-
* @task T1013
|
|
204
|
-
* @public
|
|
205
|
-
*/
|
|
206
|
-
export function getSharedHookCorePath() {
|
|
207
|
-
return sharedCoreSource();
|
|
208
|
-
}
|
|
209
|
-
//# sourceMappingURL=hook-template-installer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hook-template-installer.js","sourceRoot":"","sources":["../../../src/providers/shared/hook-template-installer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Path utilities for adapter install providers.
|
|
3
|
-
*
|
|
4
|
-
* These helpers mirror the equivalent functions in `@cleocode/core/paths`
|
|
5
|
-
* but are duplicated here to avoid a circular dependency
|
|
6
|
-
* (`@cleocode/core` → `@cleocode/adapters` → `@cleocode/core`).
|
|
7
|
-
*
|
|
8
|
-
* @remarks
|
|
9
|
-
* Keep the implementation in sync with `getCleoTemplatesTildePath` in
|
|
10
|
-
* `packages/core/src/paths.ts` if the logic ever changes.
|
|
11
|
-
*
|
|
12
|
-
* @task T916
|
|
13
|
-
*/
|
|
14
|
-
import { homedir } from 'node:os';
|
|
15
|
-
import { join } from 'node:path';
|
|
16
|
-
/**
|
|
17
|
-
* Resolve the XDG / OS-appropriate global CLEO data directory.
|
|
18
|
-
*
|
|
19
|
-
* Respects `CLEO_HOME` env var; otherwise uses the platform default:
|
|
20
|
-
* - Linux: `~/.local/share/cleo`
|
|
21
|
-
* - macOS: `~/Library/Application Support/cleo`
|
|
22
|
-
* - Windows: `%LOCALAPPDATA%\cleo\Data` (approximate)
|
|
23
|
-
*
|
|
24
|
-
* @returns Absolute path to the CLEO data directory
|
|
25
|
-
*
|
|
26
|
-
* @internal
|
|
27
|
-
*/
|
|
28
|
-
function getAdapterCleoHome() {
|
|
29
|
-
if (process.env['CLEO_HOME']) {
|
|
30
|
-
return process.env['CLEO_HOME'];
|
|
31
|
-
}
|
|
32
|
-
const home = homedir();
|
|
33
|
-
if (process.platform === 'darwin') {
|
|
34
|
-
return join(home, 'Library', 'Application Support', 'cleo');
|
|
35
|
-
}
|
|
36
|
-
if (process.platform === 'win32') {
|
|
37
|
-
const localAppData = process.env['LOCALAPPDATA'];
|
|
38
|
-
if (localAppData) {
|
|
39
|
-
return join(localAppData, 'cleo', 'Data');
|
|
40
|
-
}
|
|
41
|
-
return join(home, 'AppData', 'Local', 'cleo', 'Data');
|
|
42
|
-
}
|
|
43
|
-
// Linux / XDG
|
|
44
|
-
const xdgData = process.env['XDG_DATA_HOME'];
|
|
45
|
-
if (xdgData) {
|
|
46
|
-
return join(xdgData, 'cleo');
|
|
47
|
-
}
|
|
48
|
-
return join(home, '.local', 'share', 'cleo');
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Get the CLEO templates directory as a tilde-prefixed path for use in
|
|
52
|
-
* `@` references (AGENTS.md, CLAUDE.md, etc.). Cross-platform: replaces
|
|
53
|
-
* the user's home directory with `~` so the reference works when loaded
|
|
54
|
-
* by LLM providers that resolve `~` at runtime.
|
|
55
|
-
*
|
|
56
|
-
* @returns Tilde-prefixed path like `"~/.local/share/cleo/templates"` on Linux,
|
|
57
|
-
* `"~/Library/Application Support/cleo/templates"` on macOS, etc.
|
|
58
|
-
*
|
|
59
|
-
* @example
|
|
60
|
-
* ```typescript
|
|
61
|
-
* const ref = `@${getCleoTemplatesTildePath()}/CLEO-INJECTION.md`;
|
|
62
|
-
* // "@~/.local/share/cleo/templates/CLEO-INJECTION.md" (Linux)
|
|
63
|
-
* ```
|
|
64
|
-
*
|
|
65
|
-
* @task T916
|
|
66
|
-
*/
|
|
67
|
-
export function getCleoTemplatesTildePath() {
|
|
68
|
-
const absPath = join(getAdapterCleoHome(), 'templates');
|
|
69
|
-
const home = homedir();
|
|
70
|
-
if (absPath.startsWith(home)) {
|
|
71
|
-
// Always use forward slash after tilde for cross-platform @-reference resolution
|
|
72
|
-
const relative = absPath.slice(home.length).replace(/\\/g, '/');
|
|
73
|
-
return `~${relative}`;
|
|
74
|
-
}
|
|
75
|
-
return absPath;
|
|
76
|
-
}
|
|
77
|
-
//# sourceMappingURL=paths.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/providers/shared/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;;;;;;;;;;GAWG;AACH,SAAS,kBAAkB;IACzB,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAClC,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACjD,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACxD,CAAC;IACD,cAAc;IACd,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC7C,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,yBAAyB;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,EAAE,WAAW,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,iFAAiF;QACjF,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAChE,OAAO,IAAI,QAAQ,EAAE,CAAC;IACxB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared SDK result mapper for CLEO spawn providers.
|
|
3
|
-
*
|
|
4
|
-
* Normalises provider-specific run results from the Vercel AI SDK bridge
|
|
5
|
-
* into the canonical {@link SpawnResult} contract used by CLEO orchestration.
|
|
6
|
-
*
|
|
7
|
-
* Both the Claude SDK provider (T581) and the OpenAI SDK provider (T582)
|
|
8
|
-
* import from this module so the mapping logic stays DRY.
|
|
9
|
-
*
|
|
10
|
-
* @task T582 (original)
|
|
11
|
-
* @task T933 (SDK consolidation — Vercel AI SDK migration)
|
|
12
|
-
*/
|
|
13
|
-
/**
|
|
14
|
-
* Map a raw SDK run outcome to the canonical CLEO {@link SpawnResult}.
|
|
15
|
-
*
|
|
16
|
-
* @param instanceId - Unique identifier for this spawn instance.
|
|
17
|
-
* @param taskId - CLEO task ID associated with the run.
|
|
18
|
-
* @param providerId - Identifier of the provider that performed the run (e.g. `'openai-sdk'`).
|
|
19
|
-
* @param startTime - ISO timestamp captured just before the run was started.
|
|
20
|
-
* @param outcome - Normalised run outcome from the SDK provider.
|
|
21
|
-
* @returns A fully-populated {@link SpawnResult} ready for return from `spawn()`.
|
|
22
|
-
*
|
|
23
|
-
* @example
|
|
24
|
-
* ```typescript
|
|
25
|
-
* const result = mapSdkRunOutcome('openai-sdk-123', 'T582', 'openai-sdk', start, {
|
|
26
|
-
* finalOutput: 'Done',
|
|
27
|
-
* succeeded: true,
|
|
28
|
-
* });
|
|
29
|
-
* // result.status === 'completed'
|
|
30
|
-
* ```
|
|
31
|
-
*/
|
|
32
|
-
export function mapSdkRunOutcome(instanceId, taskId, providerId, startTime, outcome) {
|
|
33
|
-
const endTime = new Date().toISOString();
|
|
34
|
-
if (outcome.succeeded) {
|
|
35
|
-
return {
|
|
36
|
-
instanceId,
|
|
37
|
-
taskId,
|
|
38
|
-
providerId,
|
|
39
|
-
status: 'completed',
|
|
40
|
-
output: outcome.finalOutput,
|
|
41
|
-
startTime,
|
|
42
|
-
endTime,
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
return {
|
|
46
|
-
instanceId,
|
|
47
|
-
taskId,
|
|
48
|
-
providerId,
|
|
49
|
-
status: 'failed',
|
|
50
|
-
startTime,
|
|
51
|
-
endTime,
|
|
52
|
-
error: outcome.errorMessage ?? 'SDK run failed without a message',
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
//# sourceMappingURL=sdk-result-mapper.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-result-mapper.js","sourceRoot":"","sources":["../../../src/providers/shared/sdk-result-mapper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAwBH;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,gBAAgB,CAC9B,UAAkB,EAClB,MAAc,EACd,UAAkB,EAClB,SAAiB,EACjB,OAAyB;IAEzB,MAAM,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAEzC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,OAAO;YACL,UAAU;YACV,MAAM;YACN,UAAU;YACV,MAAM,EAAE,WAAW;YACnB,MAAM,EAAE,OAAO,CAAC,WAAW;YAC3B,SAAS;YACT,OAAO;SACR,CAAC;IACJ,CAAC;IAED,OAAO;QACL,UAAU;QACV,MAAM;QACN,UAAU;QACV,MAAM,EAAE,QAAQ;QAChB,SAAS;QACT,OAAO;QACP,KAAK,EAAE,OAAO,CAAC,YAAY,IAAI,kCAAkC;KAClE,CAAC;AACJ,CAAC"}
|
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared transcript-reading utility for provider hook adapters.
|
|
3
|
-
*
|
|
4
|
-
* Several providers (Gemini CLI, Codex CLI) store session data in a
|
|
5
|
-
* flat directory of JSON/JSONL files using the same role/content schema.
|
|
6
|
-
* This module centralises the "find most-recent file, parse turns"
|
|
7
|
-
* logic to avoid duplicating it in each hook provider.
|
|
8
|
-
*
|
|
9
|
-
* Usage:
|
|
10
|
-
* ```ts
|
|
11
|
-
* import { readLatestTranscript } from '../shared/transcript-reader.js';
|
|
12
|
-
*
|
|
13
|
-
* async getTranscript(_sessionId: string, _projectDir: string) {
|
|
14
|
-
* return readLatestTranscript(join(homedir(), '.gemini'));
|
|
15
|
-
* }
|
|
16
|
-
* ```
|
|
17
|
-
*
|
|
18
|
-
* @task T161
|
|
19
|
-
* @epic T134
|
|
20
|
-
*/
|
|
21
|
-
import { readdir, readFile } from 'node:fs/promises';
|
|
22
|
-
import { join } from 'node:path';
|
|
23
|
-
// ---------------------------------------------------------------------------
|
|
24
|
-
// Helpers
|
|
25
|
-
// ---------------------------------------------------------------------------
|
|
26
|
-
/**
|
|
27
|
-
* Parse a raw JSONL or JSON session file into an array of transcript turns.
|
|
28
|
-
*
|
|
29
|
-
* Lines that are not valid JSON, or that lack a string `role` and string
|
|
30
|
-
* `content`, are silently skipped.
|
|
31
|
-
*
|
|
32
|
-
* @param raw - Raw file contents (UTF-8 string).
|
|
33
|
-
* @returns Array of `{ role, content }` pairs, in file order.
|
|
34
|
-
*/
|
|
35
|
-
function parseTranscriptLines(raw) {
|
|
36
|
-
const turns = [];
|
|
37
|
-
const lines = raw.split('\n').filter((l) => l.trim());
|
|
38
|
-
for (const line of lines) {
|
|
39
|
-
try {
|
|
40
|
-
const entry = JSON.parse(line);
|
|
41
|
-
const role = entry.role;
|
|
42
|
-
const content = entry.content;
|
|
43
|
-
if (typeof role === 'string' && typeof content === 'string') {
|
|
44
|
-
turns.push({ role, content });
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
catch {
|
|
48
|
-
// Skip malformed lines
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
return turns;
|
|
52
|
-
}
|
|
53
|
-
// ---------------------------------------------------------------------------
|
|
54
|
-
// Public API
|
|
55
|
-
// ---------------------------------------------------------------------------
|
|
56
|
-
/**
|
|
57
|
-
* Read the most recent JSON or JSONL session file from `providerDir` and
|
|
58
|
-
* return its contents as a flat transcript string.
|
|
59
|
-
*
|
|
60
|
-
* Files are sorted in descending order by filename — this works naturally
|
|
61
|
-
* for providers that embed timestamps in filenames. The most recently named
|
|
62
|
-
* file is read first.
|
|
63
|
-
*
|
|
64
|
-
* Returns `null` when:
|
|
65
|
-
* - `providerDir` does not exist or cannot be read
|
|
66
|
-
* - No JSON/JSONL files are present
|
|
67
|
-
* - The most recent file contains no parseable turns
|
|
68
|
-
*
|
|
69
|
-
* @remarks
|
|
70
|
-
* This utility is shared by Gemini CLI and Codex CLI hook providers which
|
|
71
|
-
* both store session data in the same flat JSON/JSONL format. Only the
|
|
72
|
-
* most recent file is read to keep memory usage bounded.
|
|
73
|
-
*
|
|
74
|
-
* @param providerDir - Absolute path to the provider's session directory
|
|
75
|
-
* (e.g. `~/.gemini` or `~/.codex`).
|
|
76
|
-
* @returns A plain-text transcript with lines of the form `role: content`,
|
|
77
|
-
* or `null` if no transcript could be extracted.
|
|
78
|
-
*
|
|
79
|
-
* @example
|
|
80
|
-
* ```typescript
|
|
81
|
-
* import { readLatestTranscript } from '../shared/transcript-reader.js';
|
|
82
|
-
*
|
|
83
|
-
* const transcript = await readLatestTranscript('/home/user/.gemini');
|
|
84
|
-
* if (transcript) {
|
|
85
|
-
* console.log(transcript);
|
|
86
|
-
* }
|
|
87
|
-
* ```
|
|
88
|
-
*
|
|
89
|
-
* @task T161
|
|
90
|
-
* @epic T134
|
|
91
|
-
*/
|
|
92
|
-
export async function readLatestTranscript(providerDir) {
|
|
93
|
-
let allFiles = [];
|
|
94
|
-
try {
|
|
95
|
-
const entries = await readdir(providerDir, { withFileTypes: true });
|
|
96
|
-
for (const entry of entries) {
|
|
97
|
-
if (!entry.isFile())
|
|
98
|
-
continue;
|
|
99
|
-
const name = entry.name;
|
|
100
|
-
if (name.endsWith('.json') || name.endsWith('.jsonl')) {
|
|
101
|
-
allFiles.push(join(providerDir, name));
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
catch {
|
|
106
|
-
return null;
|
|
107
|
-
}
|
|
108
|
-
if (allFiles.length === 0)
|
|
109
|
-
return null;
|
|
110
|
-
// Sort descending — timestamps in filenames sort naturally
|
|
111
|
-
allFiles = allFiles.sort((a, b) => b.localeCompare(a));
|
|
112
|
-
const mostRecent = allFiles[0];
|
|
113
|
-
if (!mostRecent)
|
|
114
|
-
return null;
|
|
115
|
-
try {
|
|
116
|
-
const raw = await readFile(mostRecent, 'utf-8');
|
|
117
|
-
const turns = parseTranscriptLines(raw);
|
|
118
|
-
return turns.length > 0 ? turns.map((t) => `${t.role}: ${t.content}`).join('\n') : null;
|
|
119
|
-
}
|
|
120
|
-
catch {
|
|
121
|
-
return null;
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
//# sourceMappingURL=transcript-reader.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transcript-reader.js","sourceRoot":"","sources":["../../../src/providers/shared/transcript-reader.ts"],"names":[],"mappings":"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"}
|
package/dist/registry.js
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Adapter registry — discovers and provides access to provider manifests.
|
|
3
|
-
*
|
|
4
|
-
* Scans the providers/ directory for manifest.json files and returns
|
|
5
|
-
* the discovered adapter manifests for use by AdapterManager.
|
|
6
|
-
*
|
|
7
|
-
* @task T5240
|
|
8
|
-
*/
|
|
9
|
-
import { readFileSync } from 'node:fs';
|
|
10
|
-
import { dirname, join, resolve } from 'node:path';
|
|
11
|
-
import { fileURLToPath } from 'node:url';
|
|
12
|
-
/** Known provider IDs bundled with @cleocode/adapters. */
|
|
13
|
-
const PROVIDER_IDS = ['claude-code', 'opencode', 'cursor', 'pi'];
|
|
14
|
-
/**
|
|
15
|
-
* Get the manifests for all bundled provider adapters.
|
|
16
|
-
*
|
|
17
|
-
* @remarks
|
|
18
|
-
* Scans the known provider directories for `manifest.json` files.
|
|
19
|
-
* Providers whose manifests cannot be loaded (missing or malformed)
|
|
20
|
-
* are silently skipped.
|
|
21
|
-
*
|
|
22
|
-
* @returns Array of adapter manifests for successfully loaded providers
|
|
23
|
-
*
|
|
24
|
-
* @example
|
|
25
|
-
* ```typescript
|
|
26
|
-
* import { getProviderManifests } from '@cleocode/adapters';
|
|
27
|
-
*
|
|
28
|
-
* const manifests = getProviderManifests();
|
|
29
|
-
* for (const m of manifests) {
|
|
30
|
-
* console.log(`${m.id}: ${m.name} v${m.version}`);
|
|
31
|
-
* }
|
|
32
|
-
* ```
|
|
33
|
-
*/
|
|
34
|
-
export function getProviderManifests() {
|
|
35
|
-
const manifests = [];
|
|
36
|
-
const baseDir = resolve(dirname(fileURLToPath(import.meta.url)), 'providers');
|
|
37
|
-
for (const providerId of PROVIDER_IDS) {
|
|
38
|
-
try {
|
|
39
|
-
const manifestPath = join(baseDir, providerId, 'manifest.json');
|
|
40
|
-
const raw = readFileSync(manifestPath, 'utf-8');
|
|
41
|
-
manifests.push(JSON.parse(raw));
|
|
42
|
-
}
|
|
43
|
-
catch {
|
|
44
|
-
// Skip providers whose manifests cannot be loaded
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
return manifests;
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Discover all available provider adapters.
|
|
51
|
-
*
|
|
52
|
-
* Returns a map of provider ID to adapter factory function.
|
|
53
|
-
*
|
|
54
|
-
* @remarks
|
|
55
|
-
* Each factory lazily imports the provider module and constructs a new
|
|
56
|
-
* adapter instance. This avoids loading all provider code upfront and
|
|
57
|
-
* keeps startup fast.
|
|
58
|
-
*
|
|
59
|
-
* @returns Map of provider ID to async factory function that creates an adapter instance
|
|
60
|
-
*
|
|
61
|
-
* @example
|
|
62
|
-
* ```typescript
|
|
63
|
-
* import { discoverProviders } from '@cleocode/adapters';
|
|
64
|
-
*
|
|
65
|
-
* const providers = await discoverProviders();
|
|
66
|
-
* const factory = providers.get('claude-code');
|
|
67
|
-
* if (factory) {
|
|
68
|
-
* const adapter = await factory();
|
|
69
|
-
* }
|
|
70
|
-
* ```
|
|
71
|
-
*/
|
|
72
|
-
export async function discoverProviders() {
|
|
73
|
-
const providers = new Map();
|
|
74
|
-
providers.set('claude-code', async () => {
|
|
75
|
-
const { ClaudeCodeAdapter } = await import('./providers/claude-code/index.js');
|
|
76
|
-
return new ClaudeCodeAdapter();
|
|
77
|
-
});
|
|
78
|
-
providers.set('opencode', async () => {
|
|
79
|
-
const { OpenCodeAdapter } = await import('./providers/opencode/index.js');
|
|
80
|
-
return new OpenCodeAdapter();
|
|
81
|
-
});
|
|
82
|
-
providers.set('cursor', async () => {
|
|
83
|
-
const { CursorAdapter } = await import('./providers/cursor/index.js');
|
|
84
|
-
return new CursorAdapter();
|
|
85
|
-
});
|
|
86
|
-
providers.set('pi', async () => {
|
|
87
|
-
const { PiAdapter } = await import('./providers/pi/index.js');
|
|
88
|
-
return new PiAdapter();
|
|
89
|
-
});
|
|
90
|
-
return providers;
|
|
91
|
-
}
|
|
92
|
-
//# sourceMappingURL=registry.js.map
|
package/dist/registry.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAqCzC,0DAA0D;AAC1D,MAAM,YAAY,GAAG,CAAC,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAU,CAAC;AAE1E;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,oBAAoB;IAClC,MAAM,SAAS,GAAsB,EAAE,CAAC;IACxC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IAE9E,KAAK,MAAM,UAAU,IAAI,YAAY,EAAE,CAAC;QACtC,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;YAChE,MAAM,GAAG,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YAChD,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAoB,CAAC,CAAC;QACrD,CAAC;QAAC,MAAM,CAAC;YACP,kDAAkD;QACpD,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkC,CAAC;IAE5D,SAAS,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE;QACtC,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,kCAAkC,CAAC,CAAC;QAC/E,OAAO,IAAI,iBAAiB,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;QACnC,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAAC;QAC1E,OAAO,IAAI,eAAe,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QACjC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;QACtE,OAAO,IAAI,aAAa,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;QAC7B,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;QAC9D,OAAO,IAAI,SAAS,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,OAAO,SAAS,CAAC;AACnB,CAAC"}
|