@codemieai/code 0.10.1 → 0.11.0
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/agents/core/AgentCLI.d.ts.map +1 -1
- package/dist/agents/core/AgentCLI.js +11 -3
- package/dist/agents/core/AgentCLI.js.map +1 -1
- package/dist/agents/core/BaseAgentAdapter.d.ts +3 -1
- package/dist/agents/core/BaseAgentAdapter.d.ts.map +1 -1
- package/dist/agents/core/BaseAgentAdapter.js +34 -2
- package/dist/agents/core/BaseAgentAdapter.js.map +1 -1
- package/dist/agents/core/config-redaction.d.ts +7 -0
- package/dist/agents/core/config-redaction.d.ts.map +1 -0
- package/dist/agents/core/config-redaction.js +20 -0
- package/dist/agents/core/config-redaction.js.map +1 -0
- package/dist/agents/core/print-config.d.ts +8 -0
- package/dist/agents/core/print-config.d.ts.map +1 -0
- package/dist/agents/core/print-config.js +17 -0
- package/dist/agents/core/print-config.js.map +1 -0
- package/dist/agents/core/session/BaseSessionAdapter.d.ts +5 -1
- package/dist/agents/core/session/BaseSessionAdapter.d.ts.map +1 -1
- package/dist/agents/core/types.d.ts +34 -4
- package/dist/agents/core/types.d.ts.map +1 -1
- package/dist/agents/plugins/claude/claude.plugin.d.ts.map +1 -1
- package/dist/agents/plugins/claude/claude.plugin.js +73 -0
- package/dist/agents/plugins/claude/claude.plugin.js.map +1 -1
- package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.d.ts.map +1 -1
- package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.js +115 -32
- package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.js.map +1 -1
- package/dist/agents/plugins/claude/settings-conflict.d.ts +8 -0
- package/dist/agents/plugins/claude/settings-conflict.d.ts.map +1 -0
- package/dist/agents/plugins/claude/settings-conflict.js +35 -0
- package/dist/agents/plugins/claude/settings-conflict.js.map +1 -0
- package/dist/agents/plugins/codemie-code-hooks/shell-hooks-source.d.ts +14 -2
- package/dist/agents/plugins/codemie-code-hooks/shell-hooks-source.d.ts.map +1 -1
- package/dist/agents/plugins/codemie-code-hooks/shell-hooks-source.js +218 -263
- package/dist/agents/plugins/codemie-code-hooks/shell-hooks-source.js.map +1 -1
- package/dist/agents/plugins/opencode/opencode-message-types.d.ts +13 -0
- package/dist/agents/plugins/opencode/opencode-message-types.d.ts.map +1 -1
- package/dist/agents/plugins/opencode/opencode-message-types.js.map +1 -1
- package/dist/agents/plugins/opencode/opencode.incremental-sync.d.ts +38 -0
- package/dist/agents/plugins/opencode/opencode.incremental-sync.d.ts.map +1 -0
- package/dist/agents/plugins/opencode/opencode.incremental-sync.js +153 -0
- package/dist/agents/plugins/opencode/opencode.incremental-sync.js.map +1 -0
- package/dist/agents/plugins/opencode/opencode.paths.d.ts +18 -2
- package/dist/agents/plugins/opencode/opencode.paths.d.ts.map +1 -1
- package/dist/agents/plugins/opencode/opencode.paths.js +39 -6
- package/dist/agents/plugins/opencode/opencode.paths.js.map +1 -1
- package/dist/agents/plugins/opencode/opencode.plugin.d.ts.map +1 -1
- package/dist/agents/plugins/opencode/opencode.plugin.js +241 -75
- package/dist/agents/plugins/opencode/opencode.plugin.js.map +1 -1
- package/dist/agents/plugins/opencode/opencode.session.d.ts +18 -1
- package/dist/agents/plugins/opencode/opencode.session.d.ts.map +1 -1
- package/dist/agents/plugins/opencode/opencode.session.js +58 -17
- package/dist/agents/plugins/opencode/opencode.session.js.map +1 -1
- package/dist/agents/plugins/opencode/opencode.sqlite-reader.d.ts +8 -2
- package/dist/agents/plugins/opencode/opencode.sqlite-reader.d.ts.map +1 -1
- package/dist/agents/plugins/opencode/opencode.sqlite-reader.js +67 -42
- package/dist/agents/plugins/opencode/opencode.sqlite-reader.js.map +1 -1
- package/dist/agents/plugins/opencode/opencode.storage-utils.d.ts +19 -0
- package/dist/agents/plugins/opencode/opencode.storage-utils.d.ts.map +1 -1
- package/dist/agents/plugins/opencode/opencode.storage-utils.js +51 -0
- package/dist/agents/plugins/opencode/opencode.storage-utils.js.map +1 -1
- package/dist/agents/plugins/opencode/session/processors/opencode.conversations-processor.d.ts +13 -19
- package/dist/agents/plugins/opencode/session/processors/opencode.conversations-processor.d.ts.map +1 -1
- package/dist/agents/plugins/opencode/session/processors/opencode.conversations-processor.js +339 -82
- package/dist/agents/plugins/opencode/session/processors/opencode.conversations-processor.js.map +1 -1
- package/dist/agents/plugins/opencode/session/processors/opencode.metrics-processor.d.ts +37 -33
- package/dist/agents/plugins/opencode/session/processors/opencode.metrics-processor.d.ts.map +1 -1
- package/dist/agents/plugins/opencode/session/processors/opencode.metrics-processor.js +204 -246
- package/dist/agents/plugins/opencode/session/processors/opencode.metrics-processor.js.map +1 -1
- package/dist/cli/commands/proxy/connectors/desktop.d.ts.map +1 -1
- package/dist/cli/commands/proxy/connectors/desktop.js +6 -0
- package/dist/cli/commands/proxy/connectors/desktop.js.map +1 -1
- package/dist/cli/commands/proxy/connectors/vscode-models.d.ts +1 -0
- package/dist/cli/commands/proxy/connectors/vscode-models.d.ts.map +1 -1
- package/dist/cli/commands/proxy/connectors/vscode-models.js +36 -12
- package/dist/cli/commands/proxy/connectors/vscode-models.js.map +1 -1
- package/dist/cli/commands/proxy/connectors/vscode.d.ts.map +1 -1
- package/dist/cli/commands/proxy/connectors/vscode.js +3 -0
- package/dist/cli/commands/proxy/connectors/vscode.js.map +1 -1
- package/dist/cli/commands/proxy/health-check.d.ts.map +1 -1
- package/dist/cli/commands/proxy/health-check.js +9 -0
- package/dist/cli/commands/proxy/health-check.js.map +1 -1
- package/dist/cli/commands/setup.d.ts +31 -0
- package/dist/cli/commands/setup.d.ts.map +1 -1
- package/dist/cli/commands/setup.js +137 -45
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/providers/core/types.d.ts +12 -1
- package/dist/providers/core/types.d.ts.map +1 -1
- package/dist/providers/core/types.js.map +1 -1
- package/dist/providers/plugins/bedrock/bedrock.template.d.ts.map +1 -1
- package/dist/providers/plugins/bedrock/bedrock.template.js +21 -2
- package/dist/providers/plugins/bedrock/bedrock.template.js.map +1 -1
- package/dist/providers/plugins/litellm/litellm.setup-steps.d.ts.map +1 -1
- package/dist/providers/plugins/litellm/litellm.setup-steps.js +21 -5
- package/dist/providers/plugins/litellm/litellm.setup-steps.js.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/codex-encrypted-content-sanitizer.plugin.d.ts +7 -6
- package/dist/providers/plugins/sso/proxy/plugins/codex-encrypted-content-sanitizer.plugin.d.ts.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/codex-encrypted-content-sanitizer.plugin.js +13 -7
- package/dist/providers/plugins/sso/proxy/plugins/codex-encrypted-content-sanitizer.plugin.js.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/index.js +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/index.js.map +1 -1
- package/dist/providers/plugins/sso/session/processors/conversations/syncProcessor.js +3 -0
- package/dist/providers/plugins/sso/session/processors/conversations/syncProcessor.js.map +1 -1
- package/dist/utils/config.d.ts +6 -2
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +30 -8
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/extensions-scan.d.ts.map +1 -1
- package/dist/utils/extensions-scan.js +59 -22
- package/dist/utils/extensions-scan.js.map +1 -1
- package/dist/utils/mcp-config.d.ts.map +1 -1
- package/dist/utils/mcp-config.js +11 -6
- package/dist/utils/mcp-config.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,14 +1,81 @@
|
|
|
1
|
+
import { join } from 'path';
|
|
1
2
|
import { logger } from '../../../utils/logger.js';
|
|
2
3
|
import { getModelConfig, getChatCompletionsModelConfigs, getResponsesApiModelConfigs } from './opencode-model-configs.js';
|
|
3
4
|
import { fetchDynamicModelConfigs } from './opencode-dynamic-models.js';
|
|
4
5
|
import { BaseAgentAdapter } from '../../core/BaseAgentAdapter.js';
|
|
5
6
|
import { commandExists } from '../../../utils/processes.js';
|
|
6
7
|
import { OpenCodeSessionAdapter } from './opencode.session.js';
|
|
8
|
+
import { getOpenCodeConfigDir, getOpenCodeDbPath, getOpenCodeDataDir } from './opencode.paths.js';
|
|
9
|
+
import { startOpenCodeIncrementalSync, stopOpenCodeIncrementalSync, } from './opencode.incremental-sync.js';
|
|
7
10
|
import { getHooksPluginFileUrl, cleanupHooksPlugin } from '../codemie-code-hooks/index.js';
|
|
8
11
|
import { toBedrockModelId } from '../../../providers/plugins/bedrock/bedrock.utils.js';
|
|
9
12
|
import { MAX_ENV_SIZE, writeConfigToTempFile } from '../../core/temp-config.js';
|
|
10
13
|
import { ensureSessionFile } from '../../core/session/ensure-session.js';
|
|
11
14
|
const OPENCODE_SUBCOMMANDS = ['run', 'chat', 'config', 'init', 'help', 'version'];
|
|
15
|
+
const OPENCODE_CLIENT_TYPE = 'codemie-opencode';
|
|
16
|
+
/**
|
|
17
|
+
* Hooks the CodeMie CLI always registers with OpenCode, on top of anything the
|
|
18
|
+
* user's profile defines. They measure active session time:
|
|
19
|
+
* UserPromptSubmit → SessionStore.startActivityTracking
|
|
20
|
+
* Stop → SessionStore.accumulateActiveDuration + incremental sync
|
|
21
|
+
*
|
|
22
|
+
* Stop is async (detached spawn) because the plugin executes synchronous hooks
|
|
23
|
+
* with execSync, which would otherwise block OpenCode's event loop while the
|
|
24
|
+
* child re-parses SQLite and rewrites JSONL.
|
|
25
|
+
*/
|
|
26
|
+
const DEFAULT_HOOKS = {
|
|
27
|
+
UserPromptSubmit: [{ hooks: [{ type: 'command', command: 'codemie hook', timeout: 5 }] }],
|
|
28
|
+
Stop: [{ hooks: [{ type: 'command', command: 'codemie hook', timeout: 10, async: true }] }],
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Merge the CodeMie telemetry hooks with any hooks the active profile defines.
|
|
32
|
+
*
|
|
33
|
+
* Entries are appended per event name rather than spread over the object: a
|
|
34
|
+
* shallow spread lets a profile that defines its own Stop or UserPromptSubmit
|
|
35
|
+
* REPLACE the telemetry hook, which silently zeroes active_duration_ms for
|
|
36
|
+
* exactly the users who customise hooks.
|
|
37
|
+
*/
|
|
38
|
+
function buildMergedHooks(env) {
|
|
39
|
+
const mergedHooks = { ...DEFAULT_HOOKS };
|
|
40
|
+
if (!env.CODEMIE_PROFILE_CONFIG) {
|
|
41
|
+
return mergedHooks;
|
|
42
|
+
}
|
|
43
|
+
try {
|
|
44
|
+
const profileConfig = JSON.parse(env.CODEMIE_PROFILE_CONFIG);
|
|
45
|
+
if (profileConfig.hooks && typeof profileConfig.hooks === 'object') {
|
|
46
|
+
for (const [eventName, entries] of Object.entries(profileConfig.hooks)) {
|
|
47
|
+
if (!Array.isArray(entries)) {
|
|
48
|
+
logger.warn(`[opencode] Ignoring non-array profile hook entry: ${eventName}`);
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
mergedHooks[eventName] = [...(mergedHooks[eventName] ?? []), ...entries];
|
|
52
|
+
}
|
|
53
|
+
logger.debug('[opencode] Merged profile hooks with defaults');
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
// Non-critical — profile config parse failure doesn't block startup
|
|
58
|
+
}
|
|
59
|
+
return mergedHooks;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Build a hook config object from environment variables.
|
|
63
|
+
* Used by both onSessionStart and onSessionEnd lifecycle hooks.
|
|
64
|
+
*/
|
|
65
|
+
function buildHookConfig(env, sessionId) {
|
|
66
|
+
return {
|
|
67
|
+
agentName: env.CODEMIE_AGENT || 'opencode',
|
|
68
|
+
sessionId,
|
|
69
|
+
provider: env.CODEMIE_PROVIDER,
|
|
70
|
+
apiBaseUrl: env.CODEMIE_BASE_URL,
|
|
71
|
+
ssoUrl: env.CODEMIE_URL,
|
|
72
|
+
version: env.CODEMIE_CLI_VERSION,
|
|
73
|
+
profileName: env.CODEMIE_PROFILE_NAME,
|
|
74
|
+
project: env.CODEMIE_PROJECT,
|
|
75
|
+
model: env.CODEMIE_MODEL,
|
|
76
|
+
clientType: OPENCODE_CLIENT_TYPE,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
12
79
|
export const OpenCodePluginMetadata = {
|
|
13
80
|
name: 'opencode',
|
|
14
81
|
displayName: 'OpenCode CLI',
|
|
@@ -28,7 +95,52 @@ export const OpenCodePluginMetadata = {
|
|
|
28
95
|
model: []
|
|
29
96
|
},
|
|
30
97
|
supportedProviders: ['litellm', 'ai-run-sso', 'ollama', 'bedrock', 'bearer-auth'],
|
|
31
|
-
ssoConfig: { enabled: true, clientType:
|
|
98
|
+
ssoConfig: { enabled: true, clientType: OPENCODE_CLIENT_TYPE },
|
|
99
|
+
// Tool names are lower-cased before they reach the aggregator, and
|
|
100
|
+
// filterErrorTools does an exact match — the global default
|
|
101
|
+
// ['Bash','Execute','Shell'] would silently never match here.
|
|
102
|
+
metricsConfig: {
|
|
103
|
+
excludeErrorsFromTools: ['bash'],
|
|
104
|
+
},
|
|
105
|
+
// MCP servers live under a top-level `mcp` key. OpenCode accepts both the
|
|
106
|
+
// .json and .jsonc filenames, so each scope lists candidates in priority order.
|
|
107
|
+
mcpConfig: {
|
|
108
|
+
project: {
|
|
109
|
+
path: ['opencode.json', 'opencode.jsonc'],
|
|
110
|
+
jsonPath: 'mcp',
|
|
111
|
+
},
|
|
112
|
+
local: {
|
|
113
|
+
path: ['.opencode/opencode.json', '.opencode/opencode.jsonc'],
|
|
114
|
+
jsonPath: 'mcp',
|
|
115
|
+
},
|
|
116
|
+
user: {
|
|
117
|
+
path: [
|
|
118
|
+
join(getOpenCodeConfigDir(), 'opencode.json'),
|
|
119
|
+
join(getOpenCodeConfigDir(), 'opencode.jsonc'),
|
|
120
|
+
'~/.opencode/opencode.json',
|
|
121
|
+
],
|
|
122
|
+
jsonPath: 'mcp',
|
|
123
|
+
},
|
|
124
|
+
},
|
|
125
|
+
// OpenCode accepts singular and plural directory names for every category.
|
|
126
|
+
// Two deliberate mappings:
|
|
127
|
+
// hooks → plugin/ + plugins/ (OpenCode has no hooks/ directory; plugins are
|
|
128
|
+
// the closest equivalent extension point)
|
|
129
|
+
// rules → [] (OpenCode has no rules/ concept, so the
|
|
130
|
+
// rules_* metric fields stay at zero)
|
|
131
|
+
extensionsConfig: {
|
|
132
|
+
project: '.opencode',
|
|
133
|
+
global: getOpenCodeConfigDir(),
|
|
134
|
+
extraGlobalDirs: ['~/.opencode'],
|
|
135
|
+
skillsEntryFile: 'SKILL.md',
|
|
136
|
+
dirNames: {
|
|
137
|
+
agents: ['agent', 'agents'],
|
|
138
|
+
commands: ['command', 'commands'],
|
|
139
|
+
skills: ['skill', 'skills'],
|
|
140
|
+
hooks: ['plugin', 'plugins'],
|
|
141
|
+
rules: [],
|
|
142
|
+
},
|
|
143
|
+
},
|
|
32
144
|
flagMappings: {
|
|
33
145
|
'--resume': {
|
|
34
146
|
type: 'flag',
|
|
@@ -43,23 +155,96 @@ export const OpenCodePluginMetadata = {
|
|
|
43
155
|
userOverrideFlags: ['--variant'],
|
|
44
156
|
},
|
|
45
157
|
lifecycle: {
|
|
158
|
+
/**
|
|
159
|
+
* Emit the `started` codemie_cli_session_total row and scan MCP/extensions.
|
|
160
|
+
*
|
|
161
|
+
* Runs in-process rather than via a hook: OpenCode's session.created event
|
|
162
|
+
* does not correspond to CLI startup, and this must happen before
|
|
163
|
+
* ensureSessionFile in beforeRun — otherwise the placeholder record with
|
|
164
|
+
* agentSessionId 'unknown' and a fabricated startTime wins, and every
|
|
165
|
+
* downstream metric inherits it.
|
|
166
|
+
*
|
|
167
|
+
* session_id is the CodeMie session UUID: OpenCode's own ses_* id does not
|
|
168
|
+
* exist yet, and using it only at SessionEnd would leave the started and
|
|
169
|
+
* completed rows uncorrelatable.
|
|
170
|
+
*
|
|
171
|
+
* SIDE EFFECT (user-visible, accepted): routing SessionStart through
|
|
172
|
+
* processEvent means handleSessionStart's syncSkillsToClaude step now runs
|
|
173
|
+
* for codemie-opencode too, so running this agent creates
|
|
174
|
+
* `{cwd}/.claude/skills/` in the user's project and copies CodeMie-managed
|
|
175
|
+
* skills into it — the same behaviour codemie-claude has always had.
|
|
176
|
+
* OpenCode does read those skills, so this is intentional rather than
|
|
177
|
+
* incidental, but it means a project where the user only ever ran opencode
|
|
178
|
+
* will now gain a .claude/ directory. Call this out in the release notes
|
|
179
|
+
* for any version that ships this change.
|
|
180
|
+
*/
|
|
181
|
+
async onSessionStart(sessionId, env) {
|
|
182
|
+
try {
|
|
183
|
+
const { processEvent } = await import('../../../cli/commands/hook.js');
|
|
184
|
+
await processEvent({
|
|
185
|
+
hook_event_name: 'SessionStart',
|
|
186
|
+
session_id: sessionId,
|
|
187
|
+
transcript_path: '',
|
|
188
|
+
permission_mode: 'default',
|
|
189
|
+
cwd: process.cwd(),
|
|
190
|
+
source: 'startup',
|
|
191
|
+
}, buildHookConfig(env, sessionId));
|
|
192
|
+
logger.info(`[opencode] SessionStart hook completed for session ${sessionId}`);
|
|
193
|
+
}
|
|
194
|
+
catch (error) {
|
|
195
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
196
|
+
logger.error(`[opencode] SessionStart hook failed (non-blocking): ${msg}`);
|
|
197
|
+
}
|
|
198
|
+
// Failsafe path for metrics and conversations: everything it reads is
|
|
199
|
+
// already durable in opencode.db, so deltas keep flowing even if the
|
|
200
|
+
// injected plugin never loads.
|
|
201
|
+
startOpenCodeIncrementalSync({
|
|
202
|
+
sessionId,
|
|
203
|
+
startedAt: Date.now(),
|
|
204
|
+
cwd: process.cwd(),
|
|
205
|
+
metadata: OpenCodePluginMetadata,
|
|
206
|
+
buildContext: () => ({
|
|
207
|
+
sessionId,
|
|
208
|
+
apiBaseUrl: env.CODEMIE_SYNC_API_URL || env.CODEMIE_BASE_URL || '',
|
|
209
|
+
cookies: '',
|
|
210
|
+
clientType: OPENCODE_CLIENT_TYPE,
|
|
211
|
+
version: env.CODEMIE_CLI_VERSION || '0.0.0',
|
|
212
|
+
dryRun: false,
|
|
213
|
+
gitBranch: env.CODEMIE_GIT_BRANCH,
|
|
214
|
+
}),
|
|
215
|
+
ssoUrl: env.CODEMIE_URL,
|
|
216
|
+
syncApiUrl: env.CODEMIE_SYNC_API_URL || env.CODEMIE_BASE_URL,
|
|
217
|
+
cliVersion: env.CODEMIE_CLI_VERSION,
|
|
218
|
+
});
|
|
219
|
+
},
|
|
46
220
|
// NOTE: beforeRun signature is (env, config) per AgentLifecycle interface
|
|
47
221
|
// Claude plugin only uses (env), but interface supports both
|
|
48
222
|
async beforeRun(env, config) {
|
|
49
|
-
//
|
|
50
|
-
//
|
|
223
|
+
// Safety net only — onSessionStart normally created the record already,
|
|
224
|
+
// and ensureSessionFile early-returns when it exists.
|
|
51
225
|
const sessionId = env.CODEMIE_SESSION_ID;
|
|
52
226
|
if (sessionId) {
|
|
53
227
|
try {
|
|
54
|
-
logger.debug(`[opencode] Creating session metadata file before startup`);
|
|
55
228
|
await ensureSessionFile(sessionId, env, 'opencode');
|
|
56
|
-
logger.debug(`[opencode] Session metadata file ready for SessionSyncer`);
|
|
57
229
|
}
|
|
58
230
|
catch (error) {
|
|
59
231
|
logger.error('[opencode] Failed to create session file in beforeRun', { error });
|
|
60
232
|
// Don't throw - let OpenCode run even if session file creation fails
|
|
61
233
|
}
|
|
62
234
|
}
|
|
235
|
+
// Point the injected plugin at the transcript codemie hook must re-parse.
|
|
236
|
+
// performIncrementalSync skips any event without a transcript_path.
|
|
237
|
+
// getOpenCodeDbPath() gates on existsSync, and the DB is only created once
|
|
238
|
+
// opencode itself first writes it — i.e. after beforeRun. Falling back to
|
|
239
|
+
// the expected location keeps transcript_path non-empty on a first-ever
|
|
240
|
+
// run; without it validateHookEvent rejects every UserPromptSubmit and
|
|
241
|
+
// Stop with exit 2 for that entire first session.
|
|
242
|
+
env.CODEMIE_OPENCODE_TRANSCRIPT = getOpenCodeDbPath() ?? join(getOpenCodeDataDir(), 'opencode.db');
|
|
243
|
+
// Register the telemetry hooks BEFORE the base-URL early returns below.
|
|
244
|
+
// Hook registration does not depend on the proxy config, and leaving it
|
|
245
|
+
// downstream meant any run without CODEMIE_BASE_URL got no turn
|
|
246
|
+
// boundaries at all, so active_duration_ms stayed 0.
|
|
247
|
+
env.OPENCODE_HOOKS = JSON.stringify({ hooks: buildMergedHooks(env) });
|
|
63
248
|
const provider = env.CODEMIE_PROVIDER;
|
|
64
249
|
const baseUrl = env.CODEMIE_BASE_URL;
|
|
65
250
|
if (!baseUrl) {
|
|
@@ -145,27 +330,13 @@ export const OpenCodePluginMetadata = {
|
|
|
145
330
|
},
|
|
146
331
|
model: `${activeProvider}/${isBedrock ? toBedrockModelId(modelConfig.id, env.AWS_REGION || env.CODEMIE_AWS_REGION) : modelConfig.id}`
|
|
147
332
|
};
|
|
148
|
-
//
|
|
149
|
-
//
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
logger.debug('[opencode] Forwarded hooks config to opencode binary');
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
catch {
|
|
159
|
-
// Non-critical — profile config parse failure doesn't block startup
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
// 2. Inject shell-hooks plugin if hooks are configured
|
|
163
|
-
if (env.OPENCODE_HOOKS) {
|
|
164
|
-
const pluginUrl = getHooksPluginFileUrl();
|
|
165
|
-
openCodeConfig.plugin = openCodeConfig.plugin || [];
|
|
166
|
-
openCodeConfig.plugin.push(pluginUrl);
|
|
167
|
-
logger.debug(`[opencode] Injected hooks plugin: ${pluginUrl}`);
|
|
168
|
-
}
|
|
333
|
+
// Inject the shell-hooks plugin — it is what delivers OPENCODE_HOOKS
|
|
334
|
+
// (already registered above, before the base-URL early return) to
|
|
335
|
+
// `codemie hook`. Only this half genuinely depends on the proxy config.
|
|
336
|
+
const pluginUrl = getHooksPluginFileUrl();
|
|
337
|
+
openCodeConfig.plugin = openCodeConfig.plugin || [];
|
|
338
|
+
openCodeConfig.plugin.push(pluginUrl);
|
|
339
|
+
logger.debug(`[opencode] Injected hooks plugin: ${pluginUrl}`);
|
|
169
340
|
env.OPENCODE_DISABLE_SHARE = 'true';
|
|
170
341
|
const configJson = JSON.stringify(openCodeConfig);
|
|
171
342
|
// Config injection strategy:
|
|
@@ -210,69 +381,64 @@ export const OpenCodePluginMetadata = {
|
|
|
210
381
|
return args;
|
|
211
382
|
},
|
|
212
383
|
/**
|
|
213
|
-
*
|
|
214
|
-
*
|
|
215
|
-
*
|
|
216
|
-
* This hook ensures metrics are written to JSONL in time for SessionSyncer's
|
|
217
|
-
* metrics-sync processor to send them to v1/metrics API.
|
|
384
|
+
* Close out the session: flush remaining deltas and conversations, upload
|
|
385
|
+
* them, emit the `completed` codemie_cli_session_total row, and archive the
|
|
386
|
+
* spool files.
|
|
218
387
|
*
|
|
219
|
-
*
|
|
220
|
-
*
|
|
221
|
-
*
|
|
222
|
-
*
|
|
223
|
-
* 4. SessionSyncer runs (reads JSONL, sends to v1/metrics)
|
|
224
|
-
* 5. Proxy stops
|
|
225
|
-
* 6. afterRun (cleanup)
|
|
388
|
+
* Routed through processEvent rather than calling the adapter directly, so
|
|
389
|
+
* the full SessionEnd pipeline runs in the right order:
|
|
390
|
+
* accumulateActiveDuration → incremental sync → SessionSyncer upload →
|
|
391
|
+
* session-end metrics → status update → rename to completed_*
|
|
226
392
|
*
|
|
227
|
-
*
|
|
228
|
-
*
|
|
393
|
+
* The previous implementation only wrote JSONL, with an empty cookie jar
|
|
394
|
+
* and no SessionSyncer call, and relied on the proxy's shutdown timer to
|
|
395
|
+
* upload whatever happened to be on disk.
|
|
229
396
|
*/
|
|
230
397
|
async onSessionEnd(exitCode, env) {
|
|
231
398
|
const sessionId = env.CODEMIE_SESSION_ID;
|
|
232
399
|
if (!sessionId) {
|
|
233
|
-
logger.debug('[opencode] No CODEMIE_SESSION_ID in environment, skipping
|
|
400
|
+
logger.debug('[opencode] No CODEMIE_SESSION_ID in environment, skipping session end');
|
|
234
401
|
return;
|
|
235
402
|
}
|
|
403
|
+
stopOpenCodeIncrementalSync(sessionId);
|
|
236
404
|
try {
|
|
237
|
-
|
|
238
|
-
//
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
cookies: '', // Will be loaded by processors if needed
|
|
256
|
-
clientType: 'codemie-opencode',
|
|
257
|
-
version: env.CODEMIE_CLI_VERSION || '1.0.0',
|
|
258
|
-
dryRun: false
|
|
259
|
-
};
|
|
260
|
-
// 5. Process session (extracts metrics + conversations to JSONL)
|
|
261
|
-
const result = await adapter.processSession(latestSession.filePath, sessionId, context);
|
|
262
|
-
if (result.success) {
|
|
263
|
-
logger.info(`[opencode] Metrics processing complete: ${result.totalRecords} records processed`);
|
|
264
|
-
logger.info(`[opencode] Metrics written to JSONL - SessionSyncer will sync to v1/metrics next`);
|
|
405
|
+
// Discover the transcript to re-parse. Constrained to this working
|
|
406
|
+
// directory: the CLI reads the user's shared opencode.db, which holds
|
|
407
|
+
// sessions from every project they have open.
|
|
408
|
+
let transcriptPath = '';
|
|
409
|
+
try {
|
|
410
|
+
const adapter = new OpenCodeSessionAdapter(OpenCodePluginMetadata);
|
|
411
|
+
const sessions = await adapter.discoverSessions({
|
|
412
|
+
maxAgeDays: 1,
|
|
413
|
+
limit: 1,
|
|
414
|
+
cwd: process.cwd(),
|
|
415
|
+
});
|
|
416
|
+
if (sessions.length > 0) {
|
|
417
|
+
transcriptPath = sessions[0].filePath;
|
|
418
|
+
logger.debug(`[opencode] Discovered OpenCode session: ${sessions[0].sessionId}`);
|
|
419
|
+
}
|
|
420
|
+
else {
|
|
421
|
+
logger.debug('[opencode] No recent OpenCode sessions found for this directory');
|
|
422
|
+
}
|
|
265
423
|
}
|
|
266
|
-
|
|
267
|
-
|
|
424
|
+
catch (discoverError) {
|
|
425
|
+
const msg = discoverError instanceof Error ? discoverError.message : String(discoverError);
|
|
426
|
+
logger.debug(`[opencode] Session discovery failed (non-blocking): ${msg}`);
|
|
268
427
|
}
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
428
|
+
const { processEvent } = await import('../../../cli/commands/hook.js');
|
|
429
|
+
await processEvent({
|
|
430
|
+
hook_event_name: 'SessionEnd',
|
|
431
|
+
session_id: sessionId,
|
|
432
|
+
transcript_path: transcriptPath,
|
|
433
|
+
permission_mode: 'default',
|
|
434
|
+
cwd: process.cwd(),
|
|
435
|
+
reason: exitCode === 0 ? 'exit' : `exit(${exitCode})`,
|
|
436
|
+
}, buildHookConfig(env, sessionId));
|
|
437
|
+
logger.info(`[opencode] SessionEnd hook completed for session ${sessionId}`);
|
|
272
438
|
}
|
|
273
439
|
catch (error) {
|
|
274
440
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
275
|
-
logger.error(`[opencode]
|
|
441
|
+
logger.error(`[opencode] SessionEnd hook failed (non-blocking): ${errorMessage}`);
|
|
276
442
|
// Don't throw - metrics failure shouldn't block exit
|
|
277
443
|
}
|
|
278
444
|
finally {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode.plugin.js","sourceRoot":"","sources":["../../../../src/agents/plugins/opencode/opencode.plugin.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"opencode.plugin.js","sourceRoot":"","sources":["../../../../src/agents/plugins/opencode/opencode.plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,12 +27,29 @@ export declare class OpenCodeSessionAdapter implements SessionAdapter {
|
|
|
27
27
|
* UPDATED (GPT-5.9): OpenCode uses numeric timestamps (time.created/time.updated)
|
|
28
28
|
* not ISO strings. We convert to ISO for CodeMie's canonical format.
|
|
29
29
|
*/
|
|
30
|
-
parseSessionFile(filePath: string, sessionId: string): Promise<ParsedSession>;
|
|
30
|
+
parseSessionFile(filePath: string, sessionId: string, openCodeSessionId?: string): Promise<ParsedSession>;
|
|
31
31
|
/**
|
|
32
32
|
* Parse a session from SQLite database.
|
|
33
33
|
* Reads session, messages, and all parts in bulk from opencode.db.
|
|
34
|
+
*
|
|
35
|
+
* @param openCodeSessionId - OpenCode's own `ses_*` id when known. The plugin
|
|
36
|
+
* Stop hook supplies it via ProcessingContext.agentSessionId; the in-process
|
|
37
|
+
* SessionEnd path cannot (OpenCode's id does not exist when the CodeMie
|
|
38
|
+
* session record is created), so selection falls back to a cwd match.
|
|
34
39
|
*/
|
|
35
40
|
private parseSessionFromDb;
|
|
41
|
+
/**
|
|
42
|
+
* Pick which OpenCode session a set of DB rows refers to.
|
|
43
|
+
*
|
|
44
|
+
* Ordering matters: the previous implementation used
|
|
45
|
+
* `sessions.find(s => s.id === sessionId) ?? sessions[0]` where `sessionId`
|
|
46
|
+
* is a CodeMie UUID. That match can never succeed, so it always degraded to
|
|
47
|
+
* "newest session in any directory" — silently attributing another
|
|
48
|
+
* repository's session to this one.
|
|
49
|
+
*
|
|
50
|
+
* @param sessions - Rows already sorted newest-first by readSessionsFromDb
|
|
51
|
+
*/
|
|
52
|
+
private selectSessionFromDb;
|
|
36
53
|
/**
|
|
37
54
|
* Validate session path has expected structure (GPT-5.8 fix, updated GPT-5.10/5.11)
|
|
38
55
|
* Expected: .../storage/session/{projectId}/{sessionId}.json
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode.session.d.ts","sourceRoot":"","sources":["../../../../src/agents/plugins/opencode/opencode.session.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAC5J,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAC/F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAgEzD;;;;;GAKG;AACH,qBAAa,sBAAuB,YAAW,cAAc;IAI/C,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAHrC,QAAQ,CAAC,SAAS,cAAc;IAChC,OAAO,CAAC,UAAU,CAA0B;gBAEf,QAAQ,EAAE,aAAa;IAOpD;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAM5B;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI;IAMpD;;;;;OAKG;IACG,gBAAgB,
|
|
1
|
+
{"version":3,"file":"opencode.session.d.ts","sourceRoot":"","sources":["../../../../src/agents/plugins/opencode/opencode.session.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAC5J,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAC/F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAgEzD;;;;;GAKG;AACH,qBAAa,sBAAuB,YAAW,cAAc;IAI/C,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAHrC,QAAQ,CAAC,SAAS,cAAc;IAChC,OAAO,CAAC,UAAU,CAA0B;gBAEf,QAAQ,EAAE,aAAa;IAOpD;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAM5B;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI;IAMpD;;;;;OAKG;IACG,gBAAgB,CACpB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,iBAAiB,CAAC,EAAE,MAAM,GACzB,OAAO,CAAC,aAAa,CAAC;IAoEzB;;;;;;;;OAQG;YACW,kBAAkB;IAiEhC;;;;;;;;;;OAUG;IACH,OAAO,CAAC,mBAAmB;IAyB3B;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;;;;;;OAOG;IACH,OAAO,CAAC,kBAAkB;IAc1B;;;;;;;;;OASG;YACW,YAAY;IA6B1B;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAStB;;OAEG;IACG,cAAc,CAClB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,gBAAgB,CAAC;IA0E5B;;;;;OAKG;IACG,gBAAgB,CAAC,OAAO,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;CA4JxF"}
|
|
@@ -91,10 +91,10 @@ export class OpenCodeSessionAdapter {
|
|
|
91
91
|
* UPDATED (GPT-5.9): OpenCode uses numeric timestamps (time.created/time.updated)
|
|
92
92
|
* not ISO strings. We convert to ISO for CodeMie's canonical format.
|
|
93
93
|
*/
|
|
94
|
-
async parseSessionFile(filePath, sessionId) {
|
|
94
|
+
async parseSessionFile(filePath, sessionId, openCodeSessionId) {
|
|
95
95
|
// Route to SQLite parsing if filePath points to a .db file
|
|
96
96
|
if (filePath.endsWith('.db')) {
|
|
97
|
-
return this.parseSessionFromDb(filePath, sessionId);
|
|
97
|
+
return this.parseSessionFromDb(filePath, sessionId, openCodeSessionId);
|
|
98
98
|
}
|
|
99
99
|
try {
|
|
100
100
|
// Validate path shape before proceeding (GPT-5.8 fix)
|
|
@@ -152,19 +152,21 @@ export class OpenCodeSessionAdapter {
|
|
|
152
152
|
/**
|
|
153
153
|
* Parse a session from SQLite database.
|
|
154
154
|
* Reads session, messages, and all parts in bulk from opencode.db.
|
|
155
|
+
*
|
|
156
|
+
* @param openCodeSessionId - OpenCode's own `ses_*` id when known. The plugin
|
|
157
|
+
* Stop hook supplies it via ProcessingContext.agentSessionId; the in-process
|
|
158
|
+
* SessionEnd path cannot (OpenCode's id does not exist when the CodeMie
|
|
159
|
+
* session record is created), so selection falls back to a cwd match.
|
|
155
160
|
*/
|
|
156
|
-
async parseSessionFromDb(dbPath, sessionId) {
|
|
161
|
+
async parseSessionFromDb(dbPath, sessionId, openCodeSessionId) {
|
|
157
162
|
try {
|
|
158
163
|
logger.debug(`[opencode-adapter] Parsing session ${sessionId} from SQLite: ${dbPath}`);
|
|
159
|
-
// Read session data
|
|
160
|
-
// Note: sessionId may be a CodeMie UUID (not an OpenCode ses_* ID).
|
|
161
|
-
// Try exact match first, then fallback to most recent session (sorted by time_created DESC).
|
|
162
164
|
const sessions = await readSessionsFromDb(dbPath, { maxAgeDays: 1 });
|
|
163
|
-
const session =
|
|
165
|
+
const session = this.selectSessionFromDb(sessions, openCodeSessionId);
|
|
164
166
|
if (!session) {
|
|
165
167
|
throw new Error(`Session ${sessionId} not found in SQLite DB: ${dbPath}`);
|
|
166
168
|
}
|
|
167
|
-
if (session.id !==
|
|
169
|
+
if (session.id !== openCodeSessionId) {
|
|
168
170
|
logger.debug(`[opencode-adapter] Mapped CodeMie session ${sessionId} → OpenCode session ${session.id}`);
|
|
169
171
|
}
|
|
170
172
|
// Read messages using OpenCode session ID (not CodeMie UUID)
|
|
@@ -190,6 +192,9 @@ export class OpenCodeSessionAdapter {
|
|
|
190
192
|
openCodeVersion: session.version,
|
|
191
193
|
partsMap,
|
|
192
194
|
storageType: 'sqlite',
|
|
195
|
+
// gitBranch is overlaid by processSession from ProcessingContext when
|
|
196
|
+
// available; the metrics processor falls back to detecting it from
|
|
197
|
+
// projectPath.
|
|
193
198
|
};
|
|
194
199
|
return {
|
|
195
200
|
sessionId,
|
|
@@ -204,6 +209,36 @@ export class OpenCodeSessionAdapter {
|
|
|
204
209
|
throw error;
|
|
205
210
|
}
|
|
206
211
|
}
|
|
212
|
+
/**
|
|
213
|
+
* Pick which OpenCode session a set of DB rows refers to.
|
|
214
|
+
*
|
|
215
|
+
* Ordering matters: the previous implementation used
|
|
216
|
+
* `sessions.find(s => s.id === sessionId) ?? sessions[0]` where `sessionId`
|
|
217
|
+
* is a CodeMie UUID. That match can never succeed, so it always degraded to
|
|
218
|
+
* "newest session in any directory" — silently attributing another
|
|
219
|
+
* repository's session to this one.
|
|
220
|
+
*
|
|
221
|
+
* @param sessions - Rows already sorted newest-first by readSessionsFromDb
|
|
222
|
+
*/
|
|
223
|
+
selectSessionFromDb(sessions, openCodeSessionId) {
|
|
224
|
+
// 1. Exact match on OpenCode's own id (plugin Stop path).
|
|
225
|
+
if (openCodeSessionId?.startsWith('ses_')) {
|
|
226
|
+
const exact = sessions.find(s => s.id === openCodeSessionId);
|
|
227
|
+
if (exact)
|
|
228
|
+
return exact;
|
|
229
|
+
}
|
|
230
|
+
// 2. Newest session started in this working directory (in-process SessionEnd path).
|
|
231
|
+
const cwd = process.cwd().replace(/\/+$/, '');
|
|
232
|
+
const byCwd = sessions.find(s => s.directory.replace(/\/+$/, '') === cwd);
|
|
233
|
+
if (byCwd)
|
|
234
|
+
return byCwd;
|
|
235
|
+
// 3. Newest session overall — may belong to another repository.
|
|
236
|
+
if (sessions.length > 0) {
|
|
237
|
+
logger.warn(`[opencode-adapter] No OpenCode session matched id=${openCodeSessionId ?? 'n/a'} or cwd=${cwd}; ` +
|
|
238
|
+
`falling back to newest session ${sessions[0].id} (directory=${sessions[0].directory})`);
|
|
239
|
+
}
|
|
240
|
+
return sessions[0];
|
|
241
|
+
}
|
|
207
242
|
/**
|
|
208
243
|
* Validate session path has expected structure (GPT-5.8 fix, updated GPT-5.10/5.11)
|
|
209
244
|
* Expected: .../storage/session/{projectId}/{sessionId}.json
|
|
@@ -300,8 +335,16 @@ export class OpenCodeSessionAdapter {
|
|
|
300
335
|
async processSession(filePath, sessionId, context) {
|
|
301
336
|
try {
|
|
302
337
|
logger.debug(`[opencode-adapter] Processing session ${sessionId} with ${this.processors.length} processors`);
|
|
303
|
-
// 1. Parse session once
|
|
304
|
-
|
|
338
|
+
// 1. Parse session once.
|
|
339
|
+
// context.agentSessionId is OpenCode's ses_* id on the plugin Stop path
|
|
340
|
+
// and the CodeMie UUID on the in-process SessionEnd path; the adapter
|
|
341
|
+
// distinguishes them by prefix.
|
|
342
|
+
const parsedSession = await this.parseSessionFile(filePath, sessionId, context.agentSessionId);
|
|
343
|
+
// Carry the branch resolved by the CLI through to the processors so every
|
|
344
|
+
// MetricDelta is attributed to a branch (the aggregator groups on it).
|
|
345
|
+
if (context.gitBranch && parsedSession.metadata) {
|
|
346
|
+
parsedSession.metadata.gitBranch = context.gitBranch;
|
|
347
|
+
}
|
|
305
348
|
// 2. Run processors in priority order
|
|
306
349
|
const processorResults = {};
|
|
307
350
|
const failedProcessors = [];
|
|
@@ -359,9 +402,12 @@ export class OpenCodeSessionAdapter {
|
|
|
359
402
|
if (dbPath && await isSqliteAvailable()) {
|
|
360
403
|
logger.debug(`[opencode-discovery] Using SQLite storage: ${dbPath}`);
|
|
361
404
|
try {
|
|
405
|
+
// Age, directory and limit predicates are applied in SQL — this query
|
|
406
|
+
// runs on every incremental-sync tick against the user's live database.
|
|
362
407
|
const sessions = await readSessionsFromDb(dbPath, {
|
|
363
408
|
maxAgeDays: options?.maxAgeDays ?? 30,
|
|
364
409
|
cwd: options?.cwd,
|
|
410
|
+
limit: options?.limit,
|
|
365
411
|
});
|
|
366
412
|
const descriptors = sessions.map(session => ({
|
|
367
413
|
sessionId: session.id,
|
|
@@ -371,14 +417,9 @@ export class OpenCodeSessionAdapter {
|
|
|
371
417
|
updatedAt: typeof session.time?.updated === 'number' ? session.time.updated : undefined,
|
|
372
418
|
agentName: 'opencode',
|
|
373
419
|
}));
|
|
374
|
-
//
|
|
420
|
+
// Already ordered by time_created DESC in SQL; re-sort defensively for
|
|
421
|
+
// the sqlite3 CLI fallback path.
|
|
375
422
|
descriptors.sort((a, b) => b.createdAt - a.createdAt);
|
|
376
|
-
// Apply limit
|
|
377
|
-
if (options?.limit && options.limit > 0) {
|
|
378
|
-
const limited = descriptors.slice(0, options.limit);
|
|
379
|
-
logger.debug(`[opencode-discovery] Found ${descriptors.length} SQLite sessions, returning ${limited.length} (limit: ${options.limit})`);
|
|
380
|
-
return limited;
|
|
381
|
-
}
|
|
382
423
|
logger.debug(`[opencode-discovery] Found ${descriptors.length} SQLite sessions`);
|
|
383
424
|
return descriptors;
|
|
384
425
|
}
|