@skaile/workspaces 6.13.1 → 6.15.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/CHANGELOG.md +24 -0
- package/dist/app-sdk/index.js +1 -1
- package/dist/{asset-feeds-HS4IUMUN.js → asset-feeds-PM7FKHJP.js} +6 -6
- package/dist/{asset-feeds-HS4IUMUN.js.map → asset-feeds-PM7FKHJP.js.map} +1 -1
- package/dist/asset-manager/index.js +1 -1
- package/dist/bridge/harnesses/claude-sdk.js +15 -17
- package/dist/bridge/harnesses/claude-sdk.js.map +1 -1
- package/dist/bridge/harnesses/codex.js +4 -4
- package/dist/bridge/harnesses/continue.js +5 -5
- package/dist/bridge/harnesses/echo.js +4 -4
- package/dist/bridge/harnesses/gemini.js +7 -7
- package/dist/bridge/harnesses/goose.js +5 -5
- package/dist/bridge/harnesses/omp.js +9 -8
- package/dist/bridge/harnesses/omp.js.map +1 -1
- package/dist/bridge/harnesses/opencode.js +7 -88
- package/dist/bridge/harnesses/opencode.js.map +1 -1
- package/dist/bridge/harnesses/qwen.js +7 -7
- package/dist/bridge/index.js +13 -11
- package/dist/bridge/src/harness-binaries.d.ts +52 -5
- package/dist/bridge/src/harness-binaries.d.ts.map +1 -1
- package/dist/bridge/src/harness-detect.d.ts +73 -0
- package/dist/bridge/src/harness-detect.d.ts.map +1 -0
- package/dist/bridge/src/harness-model-check.d.ts.map +1 -1
- package/dist/bridge/src/harness-model-discovery.d.ts +66 -0
- package/dist/bridge/src/harness-model-discovery.d.ts.map +1 -0
- package/dist/bridge/src/harnesses/_subprocess-cli.d.ts.map +1 -1
- package/dist/bridge/src/harnesses/claude-sdk.d.ts +4 -2
- package/dist/bridge/src/harnesses/claude-sdk.d.ts.map +1 -1
- package/dist/bridge/src/harnesses/omp.d.ts.map +1 -1
- package/dist/bridge/src/index.d.ts +3 -1
- package/dist/bridge/src/index.d.ts.map +1 -1
- package/dist/bridge/src/models.d.ts +9 -0
- package/dist/bridge/src/models.d.ts.map +1 -1
- package/dist/{chunk-GFBKUX3J.js → chunk-2RVEYDQK.js} +7 -21
- package/dist/chunk-2RVEYDQK.js.map +1 -0
- package/dist/{chunk-MVUXBWNW.js → chunk-6HTN2UIJ.js} +3 -3
- package/dist/{chunk-MVUXBWNW.js.map → chunk-6HTN2UIJ.js.map} +1 -1
- package/dist/{chunk-4KALKIWP.js → chunk-6VQW2X2F.js} +7 -7
- package/dist/{chunk-4KALKIWP.js.map → chunk-6VQW2X2F.js.map} +1 -1
- package/dist/{chunk-4OAUOH3A.js → chunk-6WIZC6GM.js} +5 -5
- package/dist/{chunk-4OAUOH3A.js.map → chunk-6WIZC6GM.js.map} +1 -1
- package/dist/{chunk-6EPNTAF3.js → chunk-72PPC4SC.js} +4 -4
- package/dist/{chunk-6EPNTAF3.js.map → chunk-72PPC4SC.js.map} +1 -1
- package/dist/{chunk-3NKXGAP4.js → chunk-A3G3FHGB.js} +2 -2
- package/dist/{chunk-3NKXGAP4.js.map → chunk-A3G3FHGB.js.map} +1 -1
- package/dist/{chunk-Z56QSYGJ.js → chunk-A4VKIVGB.js} +4 -4
- package/dist/{chunk-Z56QSYGJ.js.map → chunk-A4VKIVGB.js.map} +1 -1
- package/dist/chunk-AEFDFCS2.js +88 -0
- package/dist/chunk-AEFDFCS2.js.map +1 -0
- package/dist/{chunk-HTJPDSAC.js → chunk-C5ZCREBI.js} +3 -3
- package/dist/{chunk-HTJPDSAC.js.map → chunk-C5ZCREBI.js.map} +1 -1
- package/dist/{chunk-TBH6UXYN.js → chunk-CWUHUL6W.js} +3 -3
- package/dist/{chunk-TBH6UXYN.js.map → chunk-CWUHUL6W.js.map} +1 -1
- package/dist/{chunk-G2ZWIYZR.js → chunk-DFFJKGCW.js} +3 -3
- package/dist/{chunk-G2ZWIYZR.js.map → chunk-DFFJKGCW.js.map} +1 -1
- package/dist/{chunk-EISPUJ7D.js → chunk-EMIOFJQJ.js} +3 -3
- package/dist/{chunk-EISPUJ7D.js.map → chunk-EMIOFJQJ.js.map} +1 -1
- package/dist/{chunk-2O4QWC5S.js → chunk-FJJEC6O2.js} +4 -4
- package/dist/{chunk-2O4QWC5S.js.map → chunk-FJJEC6O2.js.map} +1 -1
- package/dist/{chunk-HP62IELJ.js → chunk-HCIXCCUH.js} +3 -3
- package/dist/{chunk-HP62IELJ.js.map → chunk-HCIXCCUH.js.map} +1 -1
- package/dist/{chunk-GJT2Q5XD.js → chunk-HXST2IYJ.js} +3 -3
- package/dist/{chunk-GJT2Q5XD.js.map → chunk-HXST2IYJ.js.map} +1 -1
- package/dist/{chunk-YYQDSC7I.js → chunk-IRIWNKQS.js} +3 -3
- package/dist/{chunk-YYQDSC7I.js.map → chunk-IRIWNKQS.js.map} +1 -1
- package/dist/{chunk-GIMFNRNR.js → chunk-IYXOSBQ4.js} +419 -15
- package/dist/chunk-IYXOSBQ4.js.map +1 -0
- package/dist/{chunk-MECT5Z5D.js → chunk-J7FEWDRQ.js} +5 -5
- package/dist/{chunk-MECT5Z5D.js.map → chunk-J7FEWDRQ.js.map} +1 -1
- package/dist/{chunk-E6BXLB5Z.js → chunk-JIZ35OOU.js} +3 -3
- package/dist/{chunk-E6BXLB5Z.js.map → chunk-JIZ35OOU.js.map} +1 -1
- package/dist/{chunk-DWPQBMCY.js → chunk-JPV4WE5L.js} +2 -2
- package/dist/{chunk-DWPQBMCY.js.map → chunk-JPV4WE5L.js.map} +1 -1
- package/dist/{chunk-AONNQPPS.js → chunk-KIFAU62K.js} +3 -3
- package/dist/{chunk-AONNQPPS.js.map → chunk-KIFAU62K.js.map} +1 -1
- package/dist/{chunk-JXKT2QGT.js → chunk-LBJCOEXH.js} +10 -4
- package/dist/chunk-LBJCOEXH.js.map +1 -0
- package/dist/{chunk-HG2PDB3T.js → chunk-MUQBP2BK.js} +2 -2
- package/dist/{chunk-HG2PDB3T.js.map → chunk-MUQBP2BK.js.map} +1 -1
- package/dist/{chunk-DUIZB6JM.js → chunk-O74SRQ3W.js} +3 -3
- package/dist/{chunk-DUIZB6JM.js.map → chunk-O74SRQ3W.js.map} +1 -1
- package/dist/{chunk-7YGOEJRD.js → chunk-OIWFXUZB.js} +4 -4
- package/dist/{chunk-7YGOEJRD.js.map → chunk-OIWFXUZB.js.map} +1 -1
- package/dist/{chunk-P6VNPRLD.js → chunk-PFBPESW7.js} +8 -8
- package/dist/{chunk-P6VNPRLD.js.map → chunk-PFBPESW7.js.map} +1 -1
- package/dist/{chunk-ZJMSX2T6.js → chunk-R7422XD4.js} +7 -7
- package/dist/{chunk-ZJMSX2T6.js.map → chunk-R7422XD4.js.map} +1 -1
- package/dist/{chunk-R2P77YRM.js → chunk-RKTEHX2S.js} +3 -3
- package/dist/{chunk-R2P77YRM.js.map → chunk-RKTEHX2S.js.map} +1 -1
- package/dist/{chunk-7MO23JPX.js → chunk-SXRN27TU.js} +5 -5
- package/dist/{chunk-7MO23JPX.js.map → chunk-SXRN27TU.js.map} +1 -1
- package/dist/{chunk-BALPY67W.js → chunk-TYRAEMWE.js} +3 -3
- package/dist/{chunk-BALPY67W.js.map → chunk-TYRAEMWE.js.map} +1 -1
- package/dist/{chunk-MNED5ZCW.js → chunk-U7EJB6LY.js} +2 -2
- package/dist/{chunk-MNED5ZCW.js.map → chunk-U7EJB6LY.js.map} +1 -1
- package/dist/{chunk-ESUF2ZYT.js → chunk-U7EZ2WSC.js} +2 -2
- package/dist/{chunk-ESUF2ZYT.js.map → chunk-U7EZ2WSC.js.map} +1 -1
- package/dist/{chunk-UZCAULGU.js → chunk-XPSZIBPU.js} +8 -8
- package/dist/{chunk-UZCAULGU.js.map → chunk-XPSZIBPU.js.map} +1 -1
- package/dist/{chunk-UBN7HI4S.js → chunk-YDMZWVZN.js} +3 -3
- package/dist/{chunk-UBN7HI4S.js.map → chunk-YDMZWVZN.js.map} +1 -1
- package/dist/chunk-YKD2MYLU.js +210 -0
- package/dist/chunk-YKD2MYLU.js.map +1 -0
- package/dist/{chunk-F6IEGYOI.js → chunk-YLKOCMU7.js} +101 -55
- package/dist/chunk-YLKOCMU7.js.map +1 -0
- package/dist/{claude-code-G52B7TRB.js → claude-code-5QYXWC5H.js} +4 -4
- package/dist/{claude-code-G52B7TRB.js.map → claude-code-5QYXWC5H.js.map} +1 -1
- package/dist/cli/index.js +95 -57
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/src/commands/harness-preflight.d.ts.map +1 -1
- package/dist/cli/src/commands/harness.d.ts +14 -0
- package/dist/cli/src/commands/harness.d.ts.map +1 -1
- package/dist/cli/src/commands/serve-preflight.d.ts +1 -6
- package/dist/cli/src/commands/serve-preflight.d.ts.map +1 -1
- package/dist/connectors/index.js +15 -13
- package/dist/{connectors-TT6HTFH6.js → connectors-DLXW27NQ.js} +18 -16
- package/dist/{connectors-TT6HTFH6.js.map → connectors-DLXW27NQ.js.map} +1 -1
- package/dist/connectors-shared/index.js +2 -2
- package/dist/{ensure-sources-XZ3MUJOM.js → ensure-sources-I7GCXPXK.js} +17 -15
- package/dist/ensure-sources-I7GCXPXK.js.map +1 -0
- package/dist/factory-assets/connectors/box.js +15 -13
- package/dist/factory-assets/connectors/deploy.js +15 -13
- package/dist/factory-assets/connectors/devserver.js +15 -13
- package/dist/factory-assets/connectors/flow/adapter.js +15 -13
- package/dist/factory-assets/connectors/flow/run-flow.js +16 -14
- package/dist/factory-assets/connectors/flow.js +15 -13
- package/dist/factory-assets/connectors/git.js +15 -13
- package/dist/factory-assets/connectors/gmail.js +15 -13
- package/dist/factory-assets/connectors/googledrive.js +15 -13
- package/dist/factory-assets/connectors/local.js +15 -13
- package/dist/factory-assets/connectors/mattermost.js +15 -13
- package/dist/factory-assets/connectors/memory.js +15 -13
- package/dist/factory-assets/connectors/minio.js +15 -13
- package/dist/factory-assets/connectors/postgres.js +15 -13
- package/dist/factory-assets/connectors/s3.js +15 -13
- package/dist/factory-assets/connectors/sharepoint.js +15 -13
- package/dist/factory-assets/connectors/sqlite.js +15 -13
- package/dist/factory-assets/connectors/static-server.js +15 -13
- package/dist/factory-assets/connectors/tunnel.js +15 -13
- package/dist/factory-assets/connectors/webdav.js +15 -13
- package/dist/factory-assets/connectors/xstate-store.js +15 -13
- package/dist/factory-assets/connectors/xstate.js +15 -13
- package/dist/{helpers-Q6LFWGYT.js → helpers-U75UGGH5.js} +17 -15
- package/dist/{helpers-Q6LFWGYT.js.map → helpers-U75UGGH5.js.map} +1 -1
- package/dist/{library-publish-OADODIMW.js → library-publish-57422ULT.js} +30 -28
- package/dist/library-publish-57422ULT.js.map +1 -0
- package/dist/model-endpoint/index.js +3 -3
- package/dist/{open-library-MNCHOTAF.js → open-library-EVUKLOV7.js} +18 -16
- package/dist/{open-library-MNCHOTAF.js.map → open-library-EVUKLOV7.js.map} +1 -1
- package/dist/{project-PHO6JOVL.js → project-HB7OYPEF.js} +26 -24
- package/dist/{project-PHO6JOVL.js.map → project-HB7OYPEF.js.map} +1 -1
- package/dist/runner/index.js +21 -19
- package/dist/runner/src/compaction/prompt.d.ts.map +1 -1
- package/dist/runner/src/context-usage/compose.d.ts.map +1 -1
- package/dist/runner/src/session-builder.d.ts.map +1 -1
- package/dist/runner/src/work-practices.d.ts +9 -0
- package/dist/runner/src/work-practices.d.ts.map +1 -0
- package/dist/sdk/asset-manager.js +1 -1
- package/dist/sdk/bridge.js +13 -11
- package/dist/sdk/index.js +21 -19
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/runner.js +21 -19
- package/dist/sdk/session.js +2 -2
- package/dist/sdk/types.js +1 -1
- package/dist/{serve-preflight-GLE2LPGT.js → serve-preflight-YY3YC6GH.js} +19 -17
- package/dist/{serve-preflight-GLE2LPGT.js.map → serve-preflight-YY3YC6GH.js.map} +1 -1
- package/dist/session/index.js +2 -2
- package/dist/{setup-EPNOIKDM.js → setup-2XV6T53V.js} +18 -16
- package/dist/setup-2XV6T53V.js.map +1 -0
- package/dist/{source-CUSCY3KR.js → source-VXE3RSSA.js} +28 -26
- package/dist/{source-CUSCY3KR.js.map → source-VXE3RSSA.js.map} +1 -1
- package/dist/{source-manifest-publish-AHLDG4XS.js → source-manifest-publish-IIVQLM67.js} +30 -28
- package/dist/source-manifest-publish-IIVQLM67.js.map +1 -0
- package/dist/tui/index.js +21 -19
- package/dist/tui/index.js.map +1 -1
- package/dist/types/index.js +1 -1
- package/dist/types/src/context-usage.d.ts +1 -1
- package/dist/types/src/events.d.ts +3 -2
- package/dist/types/src/events.d.ts.map +1 -1
- package/dist/workspace-plugin/adapters/mcp.js +17 -15
- package/dist/workspace-plugin/adapters/omp.js +7 -7
- package/dist/workspace-plugin/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-F6IEGYOI.js.map +0 -1
- package/dist/chunk-GFBKUX3J.js.map +0 -1
- package/dist/chunk-GIMFNRNR.js.map +0 -1
- package/dist/chunk-JXKT2QGT.js.map +0 -1
- package/dist/chunk-WWSRIT3J.js +0 -59
- package/dist/chunk-WWSRIT3J.js.map +0 -1
- package/dist/ensure-sources-XZ3MUJOM.js.map +0 -1
- package/dist/library-publish-OADODIMW.js.map +0 -1
- package/dist/setup-EPNOIKDM.js.map +0 -1
- package/dist/source-manifest-publish-AHLDG4XS.js.map +0 -1
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import { resolveEnvHarnessSession, resolveRegistryBinding, harnessModelSelector, credentialsForEveryProvider, registryModelEntries
|
|
1
|
+
import { SubprocessCliHarness, extractText } from '../../chunk-LBJCOEXH.js';
|
|
2
|
+
import { materializeOpenCodeConfig } from '../../chunk-AEFDFCS2.js';
|
|
3
|
+
import '../../chunk-NBAGV6L2.js';
|
|
4
|
+
import { resolveEnvHarnessSession, resolveRegistryBinding, harnessModelSelector, credentialsForEveryProvider, registryModelEntries } from '../../chunk-O74SRQ3W.js';
|
|
5
|
+
import { HARNESS_BINARIES } from '../../chunk-YKD2MYLU.js';
|
|
5
6
|
import '../../chunk-5DE3DGVR.js';
|
|
6
7
|
import '../../chunk-7DN6JKP2.js';
|
|
7
|
-
import { getBridgeLogger, registryHarnessConfig } from '../../chunk-
|
|
8
|
-
import { BUILTIN_HARNESS_CATALOG
|
|
8
|
+
import { getBridgeLogger, registryHarnessConfig } from '../../chunk-CWUHUL6W.js';
|
|
9
|
+
import { BUILTIN_HARNESS_CATALOG } from '../../chunk-U7EJB6LY.js';
|
|
9
10
|
import '../../chunk-G5SUWZEU.js';
|
|
10
11
|
import '../../chunk-6UP2EDFN.js';
|
|
11
12
|
import '../../chunk-MEU2HHGV.js';
|
|
@@ -28,89 +29,7 @@ import '../../chunk-C3CAXQMA.js';
|
|
|
28
29
|
import '../../chunk-BOFL7GIF.js';
|
|
29
30
|
import '../../chunk-NSBPE2FW.js';
|
|
30
31
|
import * as z from 'zod';
|
|
31
|
-
import { join } from 'path';
|
|
32
32
|
|
|
33
|
-
var OPENCODE_NPM_PACKAGE = {
|
|
34
|
-
"anthropic-messages": "@ai-sdk/anthropic",
|
|
35
|
-
"openai-completions": "@ai-sdk/openai-compatible",
|
|
36
|
-
"openai-responses": "@ai-sdk/openai",
|
|
37
|
-
"google-generative-ai": "@ai-sdk/google"
|
|
38
|
-
};
|
|
39
|
-
var ENV_DELIVERED_CREDENTIALS = {
|
|
40
|
-
api_key_header: true,
|
|
41
|
-
bearer: true,
|
|
42
|
-
command: true
|
|
43
|
-
};
|
|
44
|
-
var OPENCODE_CONFIG_DIRNAME = "opencode";
|
|
45
|
-
var OPENCODE_CONFIG_FILENAME = "opencode.json";
|
|
46
|
-
function renderOpenCodeProvider(providerId, entry) {
|
|
47
|
-
const surface = entrySurface(entry);
|
|
48
|
-
const npm = surface ? OPENCODE_NPM_PACKAGE[surface] : void 0;
|
|
49
|
-
if (!npm)
|
|
50
|
-
return {
|
|
51
|
-
skipped: surface ? `OpenCode has no AI SDK package for surface '${surface}'` : "entry declares no surface"
|
|
52
|
-
};
|
|
53
|
-
const baseUrl = entryBaseUrl(entry);
|
|
54
|
-
if (!baseUrl)
|
|
55
|
-
return { skipped: "entry states no base_url, and OpenCode does not know this provider" };
|
|
56
|
-
const models = {};
|
|
57
|
-
for (const [logicalId, providerModelId] of entryModelIds(entry)) {
|
|
58
|
-
models[providerModelId] = { name: `${entry.label ?? providerId} ${logicalId}` };
|
|
59
|
-
}
|
|
60
|
-
const block = {
|
|
61
|
-
npm,
|
|
62
|
-
name: entry.label ?? providerId,
|
|
63
|
-
// `@ai-sdk/anthropic` posts to `<baseURL>/messages`.
|
|
64
|
-
options: { baseURL: versionedAnthropicBaseUrl(baseUrl, surface) },
|
|
65
|
-
models
|
|
66
|
-
};
|
|
67
|
-
const credentialKind = entry.credential?.kind;
|
|
68
|
-
if (credentialKind && ENV_DELIVERED_CREDENTIALS[credentialKind])
|
|
69
|
-
block.options.apiKey = `{env:${providerCredentialEnvName(providerId)}}`;
|
|
70
|
-
if (entry.headers && Object.keys(entry.headers).length > 0)
|
|
71
|
-
block.options.headers = { ...entry.headers };
|
|
72
|
-
return { block };
|
|
73
|
-
}
|
|
74
|
-
function buildOpenCodeConfigDocument(session) {
|
|
75
|
-
const document = {
|
|
76
|
-
$schema: "https://opencode.ai/config.json",
|
|
77
|
-
provider: {}
|
|
78
|
-
};
|
|
79
|
-
const skipped = [];
|
|
80
|
-
for (const [providerId, entry] of selectableEntries(session.registry)) {
|
|
81
|
-
if (isStockCatalogEndpoint(entry)) continue;
|
|
82
|
-
const rendered = renderOpenCodeProvider(providerId, entry);
|
|
83
|
-
if ("skipped" in rendered) skipped.push({ id: providerId, reason: rendered.skipped });
|
|
84
|
-
else document.provider[providerId] = rendered.block;
|
|
85
|
-
}
|
|
86
|
-
const binding = resolveRegistryBinding(session);
|
|
87
|
-
const selector = binding ? harnessModelSelector(binding) : void 0;
|
|
88
|
-
if (binding && selector) {
|
|
89
|
-
document.model = selector;
|
|
90
|
-
const block = document.provider[binding.providerId];
|
|
91
|
-
if (block && binding.providerModelId && !block.models[binding.providerModelId])
|
|
92
|
-
block.models[binding.providerModelId] = { name: binding.providerModelId };
|
|
93
|
-
}
|
|
94
|
-
return { document, skipped };
|
|
95
|
-
}
|
|
96
|
-
function materializeOpenCodeConfig(session, config) {
|
|
97
|
-
const build = buildOpenCodeConfigDocument(session);
|
|
98
|
-
const home = harnessSessionConfigHome("opencode", config);
|
|
99
|
-
const dir = join(home, OPENCODE_CONFIG_DIRNAME);
|
|
100
|
-
if (Object.keys(build.document.provider).length === 0) {
|
|
101
|
-
removeSessionConfigFile(dir, OPENCODE_CONFIG_FILENAME);
|
|
102
|
-
return { ...build, env: {} };
|
|
103
|
-
}
|
|
104
|
-
const path = writeSessionConfigFile(
|
|
105
|
-
dir,
|
|
106
|
-
OPENCODE_CONFIG_FILENAME,
|
|
107
|
-
`${JSON.stringify(build.document, null, 2)}
|
|
108
|
-
`
|
|
109
|
-
);
|
|
110
|
-
return { ...build, env: { XDG_CONFIG_HOME: home }, path };
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
// bridge/src/harnesses/opencode.ts
|
|
114
33
|
var OpenCodeEvent = z.object({
|
|
115
34
|
type: z.string(),
|
|
116
35
|
sessionID: z.string().optional(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../bridge/src/provider-materialize/opencode-config.ts","../../../bridge/src/harnesses/opencode.ts"],"names":[],"mappings":"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","file":"opencode.js","sourcesContent":["/**\n * OpenCode's `opencode.json` adapter — the file half of the OpenCode row\n * (§2.3).\n *\n * OpenCode names providers out of [models.dev](https://models.dev): a stock\n * endpoint is already in that list, so the env half's `-m <preset>/<model>`\n * reaches it with nothing written. An endpoint models.dev has never heard of —\n * a self-hosted gateway, a LiteLLM proxy, an Ollama box — exists for OpenCode\n * only if a `provider` block in `opencode.json` describes it:\n *\n * ```jsonc\n * {\n * \"provider\": {\n * \"corp-gateway\": {\n * \"npm\": \"@ai-sdk/openai-compatible\",\n * \"name\": \"Corp Gateway\",\n * \"options\": {\n * \"baseURL\": \"https://llm.corp.example/v1\",\n * \"apiKey\": \"{env:SKAILE_AIP_CORP_GATEWAY_KEY}\"\n * },\n * \"models\": { \"corp-fast-1\": { \"name\": \"corp-fast-1\" } }\n * }\n * }\n * }\n * ```\n *\n * The block is keyed by {@link harnessProviderName}, so the name in the file\n * is the name the env half already puts on `-m`. `npm` is the Vercel AI SDK\n * package for the entry's wire `surface`; OpenCode instantiates the provider\n * from it, which is why an entry on a surface with no package is left out\n * rather than guessed at.\n *\n * **Credentials never enter the file.** `options.apiKey` holds OpenCode's own\n * `{env:VAR}` indirection naming the per-entry variable\n * `SKAILE_AIP_<ID>_KEY`; the value rides in the child environment.\n *\n * The document is written to `<home>/opencode/opencode.json` and the child's\n * `XDG_CONFIG_HOME` is pointed at `<home>` — see\n * {@link harnessSessionConfigHome} for why that, and not the developer's\n * `~/.config/opencode`.\n *\n * @docLink packages/bridge/harnesses#one-shot-cli-harnesses-gemini-qwen-opencode-goose-continue\n */\n\nimport { join } from \"node:path\";\nimport type {\n AIProviderLlmEntry,\n AIProviderSurface,\n} from \"@skaile/workspaces/core/provider-registry\";\nimport { providerCredentialEnvName } from \"./credential-env.js\";\nimport {\n harnessModelSelector,\n entryBaseUrl,\n entryModelIds,\n entrySurface,\n type EnvHarnessSession,\n isStockCatalogEndpoint,\n resolveRegistryBinding,\n selectableEntries,\n versionedAnthropicBaseUrl,\n} from \"./env-harnesses.js\";\nimport {\n harnessSessionConfigHome,\n removeSessionConfigFile,\n writeSessionConfigFile,\n} from \"./session-config-home.js\";\n\n/**\n * `surface` → the Vercel AI SDK package OpenCode loads for it. These are the\n * four surfaces `BUILTIN_HARNESS_CATALOG.opencode.surfaces` declares; a surface\n * with no package here cannot be instantiated, so the entry is skipped.\n */\nconst OPENCODE_NPM_PACKAGE: Partial<Record<AIProviderSurface, string>> = {\n \"anthropic-messages\": \"@ai-sdk/anthropic\",\n \"openai-completions\": \"@ai-sdk/openai-compatible\",\n \"openai-responses\": \"@ai-sdk/openai\",\n \"google-generative-ai\": \"@ai-sdk/google\",\n};\n\n/** Credential kinds whose value the adapter hands over in an env var. */\nconst ENV_DELIVERED_CREDENTIALS: Record<string, true> = {\n api_key_header: true,\n bearer: true,\n command: true,\n};\n\n/** Subdirectory OpenCode reads its global config from, under the config home. */\nexport const OPENCODE_CONFIG_DIRNAME = \"opencode\";\n\n/** Filename OpenCode reads its global config from. */\nexport const OPENCODE_CONFIG_FILENAME = \"opencode.json\";\n\n/** One `provider.<id>` block, in OpenCode's own vocabulary. */\nexport interface OpenCodeProviderBlock {\n /** AI SDK package OpenCode instantiates the provider from. */\n npm: string;\n /** Display name in the `/models` picker. */\n name: string;\n options: {\n baseURL?: string;\n /** OpenCode's `{env:VAR}` indirection — never a secret. */\n apiKey?: string;\n headers?: Record<string, string>;\n };\n /** Provider-side model id → its display entry. */\n models: Record<string, { name: string }>;\n}\n\n/** The subset of `opencode.json` this adapter owns. */\nexport interface OpenCodeConfigDocument {\n $schema: string;\n /** `<provider>/<model>` the session selected, when it selected one. */\n model?: string;\n provider: Record<string, OpenCodeProviderBlock>;\n}\n\n/** An entry OpenCode cannot be taught, and why. */\nexport interface OpenCodeSkippedEntry {\n id: string;\n reason: string;\n}\n\n/** Result of {@link buildOpenCodeConfigDocument}. */\nexport interface OpenCodeConfigBuild {\n document: OpenCodeConfigDocument;\n /** Entries left out of the document — non-fatal, logged by the harness. */\n skipped: OpenCodeSkippedEntry[];\n}\n\n/**\n * Render one entry as a provider block, or explain why OpenCode cannot load\n * it.\n */\nexport function renderOpenCodeProvider(\n providerId: string,\n entry: AIProviderLlmEntry,\n): { block: OpenCodeProviderBlock } | { skipped: string } {\n const surface = entrySurface(entry);\n const npm = surface ? OPENCODE_NPM_PACKAGE[surface] : undefined;\n if (!npm)\n return {\n skipped: surface\n ? `OpenCode has no AI SDK package for surface '${surface}'`\n : \"entry declares no surface\",\n };\n const baseUrl = entryBaseUrl(entry);\n if (!baseUrl)\n return { skipped: \"entry states no base_url, and OpenCode does not know this provider\" };\n\n const models: Record<string, { name: string }> = {};\n for (const [logicalId, providerModelId] of entryModelIds(entry)) {\n models[providerModelId] = { name: `${entry.label ?? providerId} ${logicalId}` };\n }\n\n const block: OpenCodeProviderBlock = {\n npm,\n name: entry.label ?? providerId,\n // `@ai-sdk/anthropic` posts to `<baseURL>/messages`.\n options: { baseURL: versionedAnthropicBaseUrl(baseUrl, surface) },\n models,\n };\n const credentialKind = entry.credential?.kind;\n if (credentialKind && ENV_DELIVERED_CREDENTIALS[credentialKind])\n block.options.apiKey = `{env:${providerCredentialEnvName(providerId)}}`;\n if (entry.headers && Object.keys(entry.headers).length > 0)\n block.options.headers = { ...entry.headers };\n return { block };\n}\n\n/**\n * Build the document for a session: one block per entry OpenCode cannot name\n * on its own, plus the selected `<provider>/<model>`.\n *\n * The selected model is added to its provider's `models` map even when no\n * `model_map` declared it — a selector naming a model the registry did not\n * enumerate still has to resolve, and `-m` would otherwise name a model the\n * provider block does not list.\n *\n * An empty registry renders nothing — there is no endpoint of the session's\n * own to tell OpenCode about, and models.dev already covers the stock ones.\n */\nexport function buildOpenCodeConfigDocument(session: EnvHarnessSession): OpenCodeConfigBuild {\n const document: OpenCodeConfigDocument = {\n $schema: \"https://opencode.ai/config.json\",\n provider: {},\n };\n const skipped: OpenCodeSkippedEntry[] = [];\n\n for (const [providerId, entry] of selectableEntries(session.registry)) {\n // OpenCode already knows every catalog endpoint through models.dev, under\n // the same name `harnessProviderName` gives `-m`. What it cannot know is\n // an endpoint of the session's own, and that is exactly what this file is\n // for — one rule, read by both halves.\n if (isStockCatalogEndpoint(entry)) continue;\n const rendered = renderOpenCodeProvider(providerId, entry);\n if (\"skipped\" in rendered) skipped.push({ id: providerId, reason: rendered.skipped });\n else document.provider[providerId] = rendered.block;\n }\n\n const binding = resolveRegistryBinding(session);\n const selector = binding ? harnessModelSelector(binding) : undefined;\n if (binding && selector) {\n document.model = selector;\n const block = document.provider[binding.providerId];\n if (block && binding.providerModelId && !block.models[binding.providerModelId])\n block.models[binding.providerModelId] = { name: binding.providerModelId };\n }\n\n return { document, skipped };\n}\n\n/** What {@link materializeOpenCodeConfig} handed the harness. */\nexport interface OpenCodeMaterialization extends OpenCodeConfigBuild {\n /** Child env fragment: `XDG_CONFIG_HOME`, or empty when nothing was written. */\n env: Record<string, string>;\n /** Absolute path of the rendered file, when one was written. */\n path?: string;\n}\n\n/**\n * Render the session's custom endpoints and point the child at them.\n *\n * A session whose every endpoint is already a models.dev provider writes\n * nothing and leaves `XDG_CONFIG_HOME` alone: relocating it would hide the\n * developer's own `~/.config/opencode` for no gain. A file left by an earlier\n * render of the same session is removed in that case, so a session that drops\n * its custom endpoint stops answering to it.\n */\nexport function materializeOpenCodeConfig(\n session: EnvHarnessSession,\n config: { cwd: string; sessionId?: string },\n): OpenCodeMaterialization {\n const build = buildOpenCodeConfigDocument(session);\n const home = harnessSessionConfigHome(\"opencode\", config);\n const dir = join(home, OPENCODE_CONFIG_DIRNAME);\n if (Object.keys(build.document.provider).length === 0) {\n removeSessionConfigFile(dir, OPENCODE_CONFIG_FILENAME);\n return { ...build, env: {} };\n }\n const path = writeSessionConfigFile(\n dir,\n OPENCODE_CONFIG_FILENAME,\n `${JSON.stringify(build.document, null, 2)}\\n`,\n );\n return { ...build, env: { XDG_CONFIG_HOME: home }, path };\n}\n","import type { HarnessTarget } from \"@skaile/workspaces/plugin-registry\";\nimport type { Logger, TokenUsage } from \"@skaile/workspaces/types\";\nimport * as z from \"zod\";\nimport { HARNESS_BINARIES } from \"../harness-binaries.js\";\nimport { getBridgeLogger } from \"../logger.js\";\nimport type { ModelEntry } from \"../models.js\";\nimport {\n harnessModelSelector,\n credentialsForEveryProvider,\n type EnvHarnessSession,\n registryModelEntries,\n resolveEnvHarnessSession,\n resolveRegistryBinding,\n} from \"../provider-materialize/env-harnesses.js\";\nimport { materializeOpenCodeConfig } from \"../provider-materialize/opencode-config.js\";\nimport { registryHarnessConfig } from \"../provider-registry-derive.js\";\nimport { BUILTIN_HARNESS_CATALOG } from \"../registry.js\";\nimport type { AgentConfig, HarnessInfo, ReconfigureApplied } from \"../types.js\";\nimport { extractText, SubprocessCliHarness } from \"./_subprocess-cli.js\";\n\n/**\n * One `opencode run --format json` event, as emitted by opencode-ai 1.18.31:\n * `{type, timestamp, sessionID, part}` with the payload nested under `part`.\n * Only the fields the harness reads are pinned; other keys are stripped.\n */\nconst OpenCodeEvent = z.object({\n type: z.string(),\n sessionID: z.string().optional(),\n part: z\n .object({\n text: z.string().optional(),\n reason: z.string().optional(),\n cost: z.number().optional(),\n tokens: z\n .object({\n input: z.number().optional(),\n output: z.number().optional(),\n total: z.number().optional(),\n reasoning: z.number().optional(),\n cache: z.object({ read: z.number().optional(), write: z.number().optional() }).optional(),\n })\n .optional(),\n })\n .default({}),\n});\ntype OpenCodeTokens = NonNullable<z.infer<typeof OpenCodeEvent>[\"part\"][\"tokens\"]>;\n\n/** Map `step_finish.part.tokens` onto {@link TokenUsage}; zero cache/reasoning counts are omitted. */\nfunction opencodeTokens(t: OpenCodeTokens | undefined): TokenUsage | null {\n if (!t) return null;\n const usage: TokenUsage = {};\n if (t.input !== undefined) usage.inputTokens = t.input;\n if (t.output !== undefined) usage.outputTokens = t.output;\n if (t.total !== undefined) usage.totalTokens = t.total;\n if (t.reasoning) usage.reasoningTokens = t.reasoning;\n if (t.cache?.read) usage.cacheReadTokens = t.cache.read;\n if (t.cache?.write) usage.cacheCreationTokens = t.cache.write;\n return Object.keys(usage).length > 0 ? usage : null;\n}\n\n/** Sum two usages field by field (a turn can span several opencode steps). */\nfunction addTokens(a: TokenUsage | null, b: TokenUsage): TokenUsage {\n if (!a) return b;\n const out: TokenUsage = { ...a };\n for (const key of Object.keys(b) as (keyof TokenUsage)[])\n out[key] = (a[key] ?? 0) + (b[key] ?? 0);\n return out;\n}\n\n/**\n * Agent harness for **OpenCode** (`opencode`), the model-agnostic open-source\n * coding agent.\n *\n * Spawns `opencode run \"<prompt>\" --format json` per turn and maps OpenCode's\n * JSON event stream to the unified {@link AgentEvent} stream. A\n * `credentials-n` harness (§2.3): every enabled AI provider entry's\n * credential reaches the child environment, and the active model is selected\n * as `-m <provider>/<model>`. An endpoint models.dev does not know is\n * additionally rendered into a session-private `opencode.json`\n * (`provider-materialize/opencode-config.ts`) that `XDG_CONFIG_HOME` points\n * the child at.\n *\n * @remarks\n * - The prompt is a **positional argument** — OpenCode's `-p` flag is a\n * basic-auth password, not the prompt.\n * - Session resume via `-s <id>`; the session id is read from `sessionID`,\n * present on every event, and emitted once as `session_info`.\n * - The event schema is pinned against opencode-ai 1.18.31 by a recorded\n * fixture (`tests/fixtures/opencode-1.18-events.jsonl`).\n *\n * @see https://github.com/sst/opencode\n * @docLink packages/bridge/harnesses#opencode-harness\n */\nexport class OpenCodeHarness extends SubprocessCliHarness {\n readonly harnessInfo: HarnessInfo = {\n id: \"opencode\",\n name: \"OpenCode\",\n modelAgnostic: true,\n supportsInBandAbort: false,\n };\n\n protected readonly log: Logger = getBridgeLogger(\"opencode\");\n protected readonly defaultBin = \"opencode\";\n protected readonly productName = \"OpenCode\";\n protected readonly envPrefix = \"OPENCODE\";\n\n private providers?: EnvHarnessSession;\n\n /** This session's AI providers, resolved once from the config. */\n private providerSession(): EnvHarnessSession {\n this.providers ??= resolveEnvHarnessSession(this.config);\n return this.providers;\n }\n\n protected override onReconfigured(applied: ReconfigureApplied): void {\n if (applied.model !== undefined) this.providers = undefined;\n }\n\n override getModel(): string | undefined {\n return resolveRegistryBinding(this.providerSession())?.providerModelId ?? this.config.model;\n }\n\n protected buildArgs(message: string, resumeId: string | undefined): string[] {\n const args = [\"run\", message, \"--format\", \"json\"];\n const binding = resolveRegistryBinding(this.providerSession());\n const model = binding ? harnessModelSelector(binding) : this.config.model;\n if (model) args.push(\"-m\", model);\n if (resumeId) args.push(\"-s\", resumeId);\n return args;\n }\n\n /**\n * Base env plus one credential variable per enabled registry entry — the\n * canonical `SKAILE_AIP_<ID>_KEY` and, for a stock catalog endpoint, the\n * vendor carrier OpenCode reads on its own (`ANTHROPIC_API_KEY`, …). There\n * is no per-harness key allowlist: what reaches the child is exactly what\n * the registry can authenticate.\n *\n * This is also where the session's custom endpoints are rendered. It runs\n * once per spawn, so a `reconfigure()` between turns re-renders rather than\n * leaving the child pointed at the previous selection.\n */\n protected buildEnv(): Record<string, string> {\n const session = this.providerSession();\n const materialized = materializeOpenCodeConfig(session, this.config);\n for (const entry of materialized.skipped)\n this.log.warn(\"OpenCode cannot address an AI provider entry\", {\n providerId: entry.id,\n reason: entry.reason,\n });\n if (materialized.path)\n this.log.debug(\"rendered OpenCode provider config\", { path: materialized.path });\n return {\n ...this.baseEnv(),\n ...credentialsForEveryProvider(session),\n ...materialized.env,\n };\n }\n\n protected installHint(): string {\n return HARNESS_BINARIES.opencode.hint;\n }\n\n override async prompt(message: string): Promise<void> {\n this.turnText = \"\";\n this.turnTokens = null;\n this.turnCost = undefined;\n return super.prompt(message);\n }\n\n /** Assistant text of the current turn, joined across `text` parts and steps. */\n private turnText = \"\";\n /** Usage summed across the turn's `step_finish` events. */\n private turnTokens: TokenUsage | null = null;\n private turnCost: number | undefined;\n\n /**\n * Map `opencode run --format json` (pinned against opencode-ai 1.18.31,\n * fixture `tests/fixtures/opencode-1.18-events.jsonl`). Every event is\n * `{type, timestamp, sessionID, part}` with the payload under `part`;\n * observed types are `step_start`, `text` and `step_finish`. Anything else\n * is ignored rather than guessed at.\n */\n protected handleJson(json: unknown): void {\n const parsed = OpenCodeEvent.safeParse(json);\n if (!parsed.success) return;\n const { type, sessionID, part } = parsed.data;\n this.captureSession(sessionID);\n switch (type) {\n case \"text\": {\n const text = extractText(parsed.data);\n if (!text) break;\n this.turnText += text;\n this.pushAssistantDelta(this.turnText);\n break;\n }\n\n case \"step_finish\": {\n const tokens = opencodeTokens(part.tokens);\n if (tokens) this.turnTokens = addTokens(this.turnTokens, tokens);\n if (part.cost !== undefined) this.turnCost = (this.turnCost ?? 0) + part.cost;\n // [INFERENCE] a step ending in tool calls is followed by another step\n // in the same turn; only the observed terminal reason ends the turn.\n if (part.reason === \"tool-calls\") break;\n this.pushResult({\n tokens: this.turnTokens,\n costUsd: this.turnCost,\n summary: this.turnText || \"Task completed\",\n });\n this.turnText = \"\";\n this.turnTokens = null;\n this.turnCost = undefined;\n break;\n }\n }\n }\n\n /**\n * OpenCode has no model-list endpoint of its own (it reads models.dev), so\n * the session's registry is the list: every enabled entry's mapped ids,\n * namespaced exactly as `-m` takes them.\n */\n override async listModels(): Promise<ModelEntry[]> {\n return registryModelEntries(this.providerSession());\n }\n}\n\n/**\n * `HarnessTarget` wrapper for the opencode harness. Registered into the plugin\n * registry by `registerBuiltinHarnesses()`.\n */\nexport const opencodeHarnessTarget: HarnessTarget<AgentConfig> = {\n id: \"opencode\",\n displayName: BUILTIN_HARNESS_CATALOG.opencode?.name ?? \"OpenCode\",\n apiVersion: 1,\n configSchema: z.custom<AgentConfig>(() => true),\n create: async (config, _ctx) => new OpenCodeHarness(config),\n listModels: async (registry, options) =>\n new OpenCodeHarness({\n cwd: process.cwd(),\n sessionId: \"model-list\",\n ...registryHarnessConfig(registry, options),\n }).listModels(),\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../bridge/src/harnesses/opencode.ts"],"names":[],"mappings":"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","file":"opencode.js","sourcesContent":["import type { HarnessTarget } from \"@skaile/workspaces/plugin-registry\";\nimport type { Logger, TokenUsage } from \"@skaile/workspaces/types\";\nimport * as z from \"zod\";\nimport { HARNESS_BINARIES } from \"../harness-binaries.js\";\nimport { getBridgeLogger } from \"../logger.js\";\nimport type { ModelEntry } from \"../models.js\";\nimport {\n harnessModelSelector,\n credentialsForEveryProvider,\n type EnvHarnessSession,\n registryModelEntries,\n resolveEnvHarnessSession,\n resolveRegistryBinding,\n} from \"../provider-materialize/env-harnesses.js\";\nimport { materializeOpenCodeConfig } from \"../provider-materialize/opencode-config.js\";\nimport { registryHarnessConfig } from \"../provider-registry-derive.js\";\nimport { BUILTIN_HARNESS_CATALOG } from \"../registry.js\";\nimport type { AgentConfig, HarnessInfo, ReconfigureApplied } from \"../types.js\";\nimport { extractText, SubprocessCliHarness } from \"./_subprocess-cli.js\";\n\n/**\n * One `opencode run --format json` event, as emitted by opencode-ai 1.18.31:\n * `{type, timestamp, sessionID, part}` with the payload nested under `part`.\n * Only the fields the harness reads are pinned; other keys are stripped.\n */\nconst OpenCodeEvent = z.object({\n type: z.string(),\n sessionID: z.string().optional(),\n part: z\n .object({\n text: z.string().optional(),\n reason: z.string().optional(),\n cost: z.number().optional(),\n tokens: z\n .object({\n input: z.number().optional(),\n output: z.number().optional(),\n total: z.number().optional(),\n reasoning: z.number().optional(),\n cache: z.object({ read: z.number().optional(), write: z.number().optional() }).optional(),\n })\n .optional(),\n })\n .default({}),\n});\ntype OpenCodeTokens = NonNullable<z.infer<typeof OpenCodeEvent>[\"part\"][\"tokens\"]>;\n\n/** Map `step_finish.part.tokens` onto {@link TokenUsage}; zero cache/reasoning counts are omitted. */\nfunction opencodeTokens(t: OpenCodeTokens | undefined): TokenUsage | null {\n if (!t) return null;\n const usage: TokenUsage = {};\n if (t.input !== undefined) usage.inputTokens = t.input;\n if (t.output !== undefined) usage.outputTokens = t.output;\n if (t.total !== undefined) usage.totalTokens = t.total;\n if (t.reasoning) usage.reasoningTokens = t.reasoning;\n if (t.cache?.read) usage.cacheReadTokens = t.cache.read;\n if (t.cache?.write) usage.cacheCreationTokens = t.cache.write;\n return Object.keys(usage).length > 0 ? usage : null;\n}\n\n/** Sum two usages field by field (a turn can span several opencode steps). */\nfunction addTokens(a: TokenUsage | null, b: TokenUsage): TokenUsage {\n if (!a) return b;\n const out: TokenUsage = { ...a };\n for (const key of Object.keys(b) as (keyof TokenUsage)[])\n out[key] = (a[key] ?? 0) + (b[key] ?? 0);\n return out;\n}\n\n/**\n * Agent harness for **OpenCode** (`opencode`), the model-agnostic open-source\n * coding agent.\n *\n * Spawns `opencode run \"<prompt>\" --format json` per turn and maps OpenCode's\n * JSON event stream to the unified {@link AgentEvent} stream. A\n * `credentials-n` harness (§2.3): every enabled AI provider entry's\n * credential reaches the child environment, and the active model is selected\n * as `-m <provider>/<model>`. An endpoint models.dev does not know is\n * additionally rendered into a session-private `opencode.json`\n * (`provider-materialize/opencode-config.ts`) that `XDG_CONFIG_HOME` points\n * the child at.\n *\n * @remarks\n * - The prompt is a **positional argument** — OpenCode's `-p` flag is a\n * basic-auth password, not the prompt.\n * - Session resume via `-s <id>`; the session id is read from `sessionID`,\n * present on every event, and emitted once as `session_info`.\n * - The event schema is pinned against opencode-ai 1.18.31 by a recorded\n * fixture (`tests/fixtures/opencode-1.18-events.jsonl`).\n *\n * @see https://github.com/sst/opencode\n * @docLink packages/bridge/harnesses#opencode-harness\n */\nexport class OpenCodeHarness extends SubprocessCliHarness {\n readonly harnessInfo: HarnessInfo = {\n id: \"opencode\",\n name: \"OpenCode\",\n modelAgnostic: true,\n supportsInBandAbort: false,\n };\n\n protected readonly log: Logger = getBridgeLogger(\"opencode\");\n protected readonly defaultBin = \"opencode\";\n protected readonly productName = \"OpenCode\";\n protected readonly envPrefix = \"OPENCODE\";\n\n private providers?: EnvHarnessSession;\n\n /** This session's AI providers, resolved once from the config. */\n private providerSession(): EnvHarnessSession {\n this.providers ??= resolveEnvHarnessSession(this.config);\n return this.providers;\n }\n\n protected override onReconfigured(applied: ReconfigureApplied): void {\n if (applied.model !== undefined) this.providers = undefined;\n }\n\n override getModel(): string | undefined {\n return resolveRegistryBinding(this.providerSession())?.providerModelId ?? this.config.model;\n }\n\n protected buildArgs(message: string, resumeId: string | undefined): string[] {\n const args = [\"run\", message, \"--format\", \"json\"];\n const binding = resolveRegistryBinding(this.providerSession());\n const model = binding ? harnessModelSelector(binding) : this.config.model;\n if (model) args.push(\"-m\", model);\n if (resumeId) args.push(\"-s\", resumeId);\n return args;\n }\n\n /**\n * Base env plus one credential variable per enabled registry entry — the\n * canonical `SKAILE_AIP_<ID>_KEY` and, for a stock catalog endpoint, the\n * vendor carrier OpenCode reads on its own (`ANTHROPIC_API_KEY`, …). There\n * is no per-harness key allowlist: what reaches the child is exactly what\n * the registry can authenticate.\n *\n * This is also where the session's custom endpoints are rendered. It runs\n * once per spawn, so a `reconfigure()` between turns re-renders rather than\n * leaving the child pointed at the previous selection.\n */\n protected buildEnv(): Record<string, string> {\n const session = this.providerSession();\n const materialized = materializeOpenCodeConfig(session, this.config);\n for (const entry of materialized.skipped)\n this.log.warn(\"OpenCode cannot address an AI provider entry\", {\n providerId: entry.id,\n reason: entry.reason,\n });\n if (materialized.path)\n this.log.debug(\"rendered OpenCode provider config\", { path: materialized.path });\n return {\n ...this.baseEnv(),\n ...credentialsForEveryProvider(session),\n ...materialized.env,\n };\n }\n\n protected installHint(): string {\n return HARNESS_BINARIES.opencode.hint;\n }\n\n override async prompt(message: string): Promise<void> {\n this.turnText = \"\";\n this.turnTokens = null;\n this.turnCost = undefined;\n return super.prompt(message);\n }\n\n /** Assistant text of the current turn, joined across `text` parts and steps. */\n private turnText = \"\";\n /** Usage summed across the turn's `step_finish` events. */\n private turnTokens: TokenUsage | null = null;\n private turnCost: number | undefined;\n\n /**\n * Map `opencode run --format json` (pinned against opencode-ai 1.18.31,\n * fixture `tests/fixtures/opencode-1.18-events.jsonl`). Every event is\n * `{type, timestamp, sessionID, part}` with the payload under `part`;\n * observed types are `step_start`, `text` and `step_finish`. Anything else\n * is ignored rather than guessed at.\n */\n protected handleJson(json: unknown): void {\n const parsed = OpenCodeEvent.safeParse(json);\n if (!parsed.success) return;\n const { type, sessionID, part } = parsed.data;\n this.captureSession(sessionID);\n switch (type) {\n case \"text\": {\n const text = extractText(parsed.data);\n if (!text) break;\n this.turnText += text;\n this.pushAssistantDelta(this.turnText);\n break;\n }\n\n case \"step_finish\": {\n const tokens = opencodeTokens(part.tokens);\n if (tokens) this.turnTokens = addTokens(this.turnTokens, tokens);\n if (part.cost !== undefined) this.turnCost = (this.turnCost ?? 0) + part.cost;\n // [INFERENCE] a step ending in tool calls is followed by another step\n // in the same turn; only the observed terminal reason ends the turn.\n if (part.reason === \"tool-calls\") break;\n this.pushResult({\n tokens: this.turnTokens,\n costUsd: this.turnCost,\n summary: this.turnText || \"Task completed\",\n });\n this.turnText = \"\";\n this.turnTokens = null;\n this.turnCost = undefined;\n break;\n }\n }\n }\n\n /**\n * OpenCode has no model-list endpoint of its own (it reads models.dev), so\n * the session's registry is the list: every enabled entry's mapped ids,\n * namespaced exactly as `-m` takes them.\n */\n override async listModels(): Promise<ModelEntry[]> {\n return registryModelEntries(this.providerSession());\n }\n}\n\n/**\n * `HarnessTarget` wrapper for the opencode harness. Registered into the plugin\n * registry by `registerBuiltinHarnesses()`.\n */\nexport const opencodeHarnessTarget: HarnessTarget<AgentConfig> = {\n id: \"opencode\",\n displayName: BUILTIN_HARNESS_CATALOG.opencode?.name ?? \"OpenCode\",\n apiVersion: 1,\n configSchema: z.custom<AgentConfig>(() => true),\n create: async (config, _ctx) => new OpenCodeHarness(config),\n listModels: async (registry, options) =>\n new OpenCodeHarness({\n cwd: process.cwd(),\n sessionId: \"model-list\",\n ...registryHarnessConfig(registry, options),\n }).listModels(),\n};\n"]}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { GeminiFamilyHarness } from '../../chunk-
|
|
2
|
-
import '../../chunk-
|
|
3
|
-
import { fetchProviderModels } from '../../chunk-
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
1
|
+
import { GeminiFamilyHarness } from '../../chunk-PFBPESW7.js';
|
|
2
|
+
import '../../chunk-LBJCOEXH.js';
|
|
3
|
+
import { fetchProviderModels } from '../../chunk-U7EZ2WSC.js';
|
|
4
|
+
import { resolveRegistryBinding } from '../../chunk-O74SRQ3W.js';
|
|
5
|
+
import { HARNESS_BINARIES } from '../../chunk-YKD2MYLU.js';
|
|
6
6
|
import '../../chunk-5DE3DGVR.js';
|
|
7
7
|
import '../../chunk-7DN6JKP2.js';
|
|
8
|
-
import { getBridgeLogger, registryHarnessConfig } from '../../chunk-
|
|
9
|
-
import { BUILTIN_HARNESS_CATALOG, entryCredentialValue } from '../../chunk-
|
|
8
|
+
import { getBridgeLogger, registryHarnessConfig } from '../../chunk-CWUHUL6W.js';
|
|
9
|
+
import { BUILTIN_HARNESS_CATALOG, entryCredentialValue } from '../../chunk-U7EJB6LY.js';
|
|
10
10
|
import '../../chunk-G5SUWZEU.js';
|
|
11
11
|
import '../../chunk-6UP2EDFN.js';
|
|
12
12
|
import '../../chunk-LCXQ4LVP.js';
|
package/dist/bridge/index.js
CHANGED
|
@@ -1,21 +1,23 @@
|
|
|
1
|
-
export { BridgeRuntime, EventNormalizer, checkHarnessModel, checkModelProvider, checkModelSurface, checkOmpListedModel, checkOmpServeModel, createRuntime, detectFileChange, detectFileChanges, isUnlistedModel, labelToolCall, summarizeToolCall, summarizeToolResult, validateApiKey } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
export { ANTHROPIC_DEFAULT_BASE_URL, APPROVE_ONCE, DENY, agentTranscriptStore, approvalCardOf, buildClaudeEndpointEnv, claudeEndpointMode, localTranscriptStore, probeResumeTranscript, resolveClaudeConfigDir, sessionSurfaceNotice, transcriptStoreForRuntime, unsupportedSurfaceNotice } from '../chunk-
|
|
4
|
-
export { checkCodexCredential, codexLoginFallbackNotice } from '../chunk-
|
|
1
|
+
export { BridgeRuntime, EventNormalizer, HARNESS_SDKS, checkHarnessModel, checkModelProvider, checkModelSurface, checkOmpListedModel, checkOmpServeModel, createRuntime, detectFileChange, detectFileChanges, detectHarness, detectHarnesses, discoverHarnessModels, isUnlistedModel, labelToolCall, sdkMissingProblem, summarizeToolCall, summarizeToolResult, validateApiKey } from '../chunk-IYXOSBQ4.js';
|
|
2
|
+
import '../chunk-J7FEWDRQ.js';
|
|
3
|
+
export { ANTHROPIC_DEFAULT_BASE_URL, APPROVE_ONCE, DENY, agentTranscriptStore, approvalCardOf, buildClaudeEndpointEnv, claudeEndpointMode, localTranscriptStore, probeResumeTranscript, resolveClaudeConfigDir, sessionSurfaceNotice, transcriptStoreForRuntime, unsupportedSurfaceNotice } from '../chunk-TYRAEMWE.js';
|
|
4
|
+
export { checkCodexCredential, codexLoginFallbackNotice } from '../chunk-SXRN27TU.js';
|
|
5
5
|
export { CODEX_NATIVE_STATE_FORMAT, CodexNativeStateUnavailable } from '../chunk-5KSGZP3E.js';
|
|
6
6
|
import '../chunk-7EKQDY2T.js';
|
|
7
|
-
export { dispatchCapability, filterRenderCapabilities, renderFallback } from '../chunk-
|
|
8
|
-
export { ModelTierResolutionError, PROVIDER_MODEL_TIERS, STATIC_MODELS, fetchProviderModels, getModels, getStaticModels, modelIdTargetForEntry, resolveManifestModel, resolveModelCapabilities, resolveModelTier } from '../chunk-
|
|
9
|
-
|
|
10
|
-
import '../chunk-
|
|
7
|
+
export { dispatchCapability, filterRenderCapabilities, renderFallback } from '../chunk-HXST2IYJ.js';
|
|
8
|
+
export { ModelTierResolutionError, PROVIDER_MODEL_TIERS, STATIC_MODELS, fetchProviderModels, getModels, getStaticModels, modelIdTargetForEntry, resolveManifestModel, resolveModelCapabilities, resolveModelTier } from '../chunk-U7EZ2WSC.js';
|
|
9
|
+
import '../chunk-AEFDFCS2.js';
|
|
10
|
+
import '../chunk-NBAGV6L2.js';
|
|
11
|
+
import '../chunk-O74SRQ3W.js';
|
|
12
|
+
export { HARNESS_BINARIES, SDK_CLI_BINARIES, findHarnessBinary, harnessSearchDirs, harnessSpawnPath, resolveHarnessBinary, toolchainBinDirs } from '../chunk-YKD2MYLU.js';
|
|
11
13
|
export { AccountUnavailableError, AuthError, RUNNER_AGENT_ENV_KEYS, RUNNER_PRIVATE_ENV_KEYS, ReconfigureLedger, classifyClaudeSdkError, reclassifyAuthAsAccountUnavailable, scopeReconfigureModel, stripRunnerPrivateEnv } from '../chunk-5DE3DGVR.js';
|
|
12
14
|
export { AGENT_EXEC_ENV, agentExecRequested, resolveAgentExec, wrapAgentCommand } from '../chunk-7DN6JKP2.js';
|
|
13
|
-
export { AGENT_EFFORT_LEVELS, AgentHarness, TOOL_ALLOWLIST_UNSUPPORTED, getBridgeLogger, registryHarnessConfig, toAgentEffort, toMergedRegistry } from '../chunk-
|
|
14
|
-
export { BUILTIN_HARNESS_CATALOG, PROVIDER_CREDENTIAL_ENV_PREFIX, PROVIDER_CREDENTIAL_ENV_SUFFIX, conventionalCredentialEnvName, createHarness, entryCredentialEnv, entryCredentialValue, harnessCapabilities, listHarnesses, listModelsForHarness, providerCredentialEnvName, registerBuiltinHarnesses, registryCredentialEnv, resolveEntryCredential, supportsLiveToolUpdates, unresolvedProviderCredentials } from '../chunk-
|
|
15
|
+
export { AGENT_EFFORT_LEVELS, AgentHarness, TOOL_ALLOWLIST_UNSUPPORTED, getBridgeLogger, registryHarnessConfig, toAgentEffort, toMergedRegistry } from '../chunk-CWUHUL6W.js';
|
|
16
|
+
export { BUILTIN_HARNESS_CATALOG, PROVIDER_CREDENTIAL_ENV_PREFIX, PROVIDER_CREDENTIAL_ENV_SUFFIX, conventionalCredentialEnvName, createHarness, entryCredentialEnv, entryCredentialValue, harnessCapabilities, listHarnesses, listModelsForHarness, providerCredentialEnvName, registerBuiltinHarnesses, registryCredentialEnv, resolveEntryCredential, supportsLiveToolUpdates, unresolvedProviderCredentials } from '../chunk-U7EJB6LY.js';
|
|
15
17
|
import '../chunk-G5SUWZEU.js';
|
|
16
18
|
export { loadMergedProviderRegistry } from '../chunk-CG63XGVV.js';
|
|
17
19
|
export { AI_PROVIDER_PRESETS, buildCredentialHeaders, catalogLayer, expandPreset, getProviderPreset, listProviderPresets, presetBaseUrl, probeProviderEntry, resolvePresetBaseUrl, resolveProbeUrl } from '../chunk-6UP2EDFN.js';
|
|
18
|
-
import '../chunk-
|
|
20
|
+
import '../chunk-JPV4WE5L.js';
|
|
19
21
|
import '../chunk-LCXQ4LVP.js';
|
|
20
22
|
import '../chunk-MEU2HHGV.js';
|
|
21
23
|
import '../chunk-4GY63JU6.js';
|
|
@@ -6,16 +6,63 @@ export interface HarnessBinary {
|
|
|
6
6
|
envPrefix: string;
|
|
7
7
|
/** The install line. */
|
|
8
8
|
hint: string;
|
|
9
|
+
/** Env var naming the program instead of `<envPrefix>_BRIDGE_BIN` (e.g. `CLAUDE_CODE_PATH`). */
|
|
10
|
+
overrideEnv?: string;
|
|
11
|
+
/** Lowest supported version (semver). Detection reports an older program as outdated. */
|
|
12
|
+
minVersion?: string;
|
|
13
|
+
/**
|
|
14
|
+
* The override path may be a script without the exec bit (the SDK runs it through `node`); a
|
|
15
|
+
* missing override path then falls back to looking up `bin`. Only for programs that are not
|
|
16
|
+
* spawned directly.
|
|
17
|
+
*/
|
|
18
|
+
overrideMayBeScript?: boolean;
|
|
9
19
|
}
|
|
10
20
|
/** The CLI harnesses that spawn a program, by harness id. */
|
|
11
21
|
export declare const HARNESS_BINARIES: Readonly<Record<string, HarnessBinary>>;
|
|
12
22
|
/**
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
|
|
23
|
+
* The CLIs next to the SDK harnesses. The SDKs run without them (they bundle a binary); the
|
|
24
|
+
* CLI is only looked up to report its version and the account login.
|
|
25
|
+
*/
|
|
26
|
+
export declare const SDK_CLI_BINARIES: Readonly<Record<"claude-sdk" | "codex", HarnessBinary>>;
|
|
27
|
+
/** Whether `file` is a regular file the process may execute (existence only on Windows). */
|
|
28
|
+
export declare function isExecutableFile(file: string): boolean;
|
|
29
|
+
type Env = Record<string, string | undefined>;
|
|
30
|
+
/**
|
|
31
|
+
* Well-known install dirs of the user's toolchains, in lookup order. Dirs need not exist except
|
|
32
|
+
* the per-version node roots, which are listed from disk (newest version first). The result is
|
|
33
|
+
* cached for 5 s per `home` (and per the env values it reads).
|
|
16
34
|
*
|
|
17
|
-
* @param
|
|
35
|
+
* @param env - Environment read for `NPM_CONFIG_PREFIX`, `MISE_DATA_DIR`, `NVM_DIR`, `FNM_DIR`, `APPDATA`, `LOCALAPPDATA` (default `process.env`).
|
|
36
|
+
* @param home - The home dir the per-user dirs hang off (default `os.homedir()`).
|
|
37
|
+
*/
|
|
38
|
+
export declare function toolchainBinDirs(env?: Env, home?: string): string[];
|
|
39
|
+
/**
|
|
40
|
+
* `PATH` entries, then {@link toolchainBinDirs} (rooted at `env.HOME`, else `os.homedir()`);
|
|
41
|
+
* empty entries dropped, duplicates removed in order.
|
|
42
|
+
*/
|
|
43
|
+
export declare function harnessSearchDirs(env?: Env): string[];
|
|
44
|
+
/** The `PATH` a harness child runs with: {@link harnessSearchDirs} joined. */
|
|
45
|
+
export declare function harnessSpawnPath(env?: Env): string;
|
|
46
|
+
/**
|
|
47
|
+
* The absolute path of the program a harness spawns, or `undefined` when it cannot be found.
|
|
48
|
+
* The override env var (`<PREFIX>_BRIDGE_BIN`, or the row's `overrideEnv`) replaces `bin`. A name
|
|
49
|
+
* with a path separator is checked as a path; any other name is searched in `PATH`, then the
|
|
50
|
+
* toolchain dirs. The project's `node_modules/.bin` is never searched: it is repo-controlled.
|
|
51
|
+
*
|
|
52
|
+
* A row with `overrideMayBeScript` accepts an override path that is a regular file without the
|
|
53
|
+
* exec bit (a `cli.js`), and falls back to the normal lookup of `bin` when that path is missing.
|
|
54
|
+
*
|
|
55
|
+
* @param harness - The harness's {@link HARNESS_BINARIES} (or {@link SDK_CLI_BINARIES}) row.
|
|
18
56
|
* @param env - Environment to read `PATH` and the override from (default `process.env`).
|
|
19
57
|
*/
|
|
20
|
-
export declare function
|
|
58
|
+
export declare function resolveHarnessBinary(harness: HarnessBinary, env?: Env): string | undefined;
|
|
59
|
+
/** The env var that overrides `harness`'s program. */
|
|
60
|
+
export declare function overrideVar(harness: HarnessBinary): string;
|
|
61
|
+
/**
|
|
62
|
+
* Whether the harness's program is found (now also in the toolchain dirs).
|
|
63
|
+
*
|
|
64
|
+
* @deprecated Use `resolveHarnessBinary(row, env) !== undefined`. Kept for hosts that still call it.
|
|
65
|
+
*/
|
|
66
|
+
export declare function findHarnessBinary(harness: HarnessBinary, env?: Env): boolean;
|
|
67
|
+
export {};
|
|
21
68
|
//# sourceMappingURL=harness-binaries.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harness-binaries.d.ts","sourceRoot":"","sources":["../../../bridge/src/harness-binaries.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"harness-binaries.d.ts","sourceRoot":"","sources":["../../../bridge/src/harness-binaries.ts"],"names":[],"mappings":"AAgBA,iCAAiC;AACjC,MAAM,WAAW,aAAa;IAC5B,wCAAwC;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,iGAAiG;IACjG,SAAS,EAAE,MAAM,CAAC;IAClB,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,gGAAgG;IAChG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yFAAyF;IACzF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,6DAA6D;AAC7D,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAgCpE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,YAAY,GAAG,OAAO,EAAE,aAAa,CAAC,CAcpF,CAAC;AAEF,4FAA4F;AAC5F,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAQtD;AAUD,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AA8F9C;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,GAAiB,EAAE,IAAI,GAAE,MAAqB,GAAG,MAAM,EAAE,CAsB9F;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,GAAiB,GAAG,MAAM,EAAE,CAUlE;AAED,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,GAAiB,GAAG,MAAM,CAE/D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,aAAa,EACtB,GAAG,GAAE,GAAiB,GACrB,MAAM,GAAG,SAAS,CAqBpB;AAED,sDAAsD;AACtD,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAE1D;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,GAAE,GAAiB,GAAG,OAAO,CAEzF"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/** `ok`: can start; `missing`: program or SDK not found; `outdated`: below the minimum version; `unknown`: no rule for this harness. */
|
|
2
|
+
export type HarnessDetectStatus = "ok" | "missing" | "outdated" | "unknown";
|
|
3
|
+
/** The harness's own account login. */
|
|
4
|
+
export interface HarnessLoginState {
|
|
5
|
+
status: "ok" | "missing" | "unknown";
|
|
6
|
+
detail?: string;
|
|
7
|
+
}
|
|
8
|
+
/** What {@link detectHarness} found for one harness. */
|
|
9
|
+
export interface HarnessDetection {
|
|
10
|
+
id: string;
|
|
11
|
+
/** ok: can start; missing: program or SDK not found; outdated: below minVersion; unknown: no rule (plugin harness). */
|
|
12
|
+
status: HarnessDetectStatus;
|
|
13
|
+
/** Absolute program path when one was found (CLI harnesses; the `claude` / `codex` CLI for the SDK harnesses). */
|
|
14
|
+
path?: string;
|
|
15
|
+
/** Version string parsed from `<bin> --version` (first `\d+\.\d+\.\d+[-+\w.]*` token). */
|
|
16
|
+
version?: string;
|
|
17
|
+
minVersion?: string;
|
|
18
|
+
/** SDK harnesses: whether the npm SDK loads from `projectDir` (then next to skaile). */
|
|
19
|
+
sdk?: {
|
|
20
|
+
pkg: string;
|
|
21
|
+
loaded: boolean;
|
|
22
|
+
};
|
|
23
|
+
/** The harness's own account login, where it has one (claude-sdk, codex). */
|
|
24
|
+
login?: HarnessLoginState;
|
|
25
|
+
/** One actionable line when status is not ok. */
|
|
26
|
+
problem?: string;
|
|
27
|
+
/** Directories searched when nothing was found. */
|
|
28
|
+
searched?: string[];
|
|
29
|
+
}
|
|
30
|
+
/** Options of {@link detectHarness} and {@link detectHarnesses}. */
|
|
31
|
+
export interface DetectHarnessOptions {
|
|
32
|
+
/** Environment to resolve programs and run probes in (default `process.env`). */
|
|
33
|
+
env?: NodeJS.ProcessEnv;
|
|
34
|
+
/** Project the SDK probe loads the npm SDK from first (default cwd). */
|
|
35
|
+
projectDir?: string;
|
|
36
|
+
/** Timeout of each probe process in ms (default 5000). */
|
|
37
|
+
timeoutMs?: number;
|
|
38
|
+
/** Skip the {@link detectHarnesses} cache. */
|
|
39
|
+
fresh?: boolean;
|
|
40
|
+
}
|
|
41
|
+
/** How long {@link detectHarnesses} keeps its answer. */
|
|
42
|
+
export declare const DETECT_CACHE_TTL_MS = 15000;
|
|
43
|
+
/** Optional SDK a harness needs at run time, and how to probe that it loads from a project. */
|
|
44
|
+
export declare const HARNESS_SDKS: Record<string, {
|
|
45
|
+
pkg: string;
|
|
46
|
+
load: (projectDir: string) => Promise<unknown>;
|
|
47
|
+
}>;
|
|
48
|
+
/**
|
|
49
|
+
* The one line for a harness whose SDK does not load: where it was looked for and the install
|
|
50
|
+
* command. `skaile serve` and `skaile run` preflight print it, and detection reports it.
|
|
51
|
+
*
|
|
52
|
+
* @param harness - Harness id.
|
|
53
|
+
* @param pkg - The npm package the harness needs.
|
|
54
|
+
* @param projectDir - Project the SDK was looked up from.
|
|
55
|
+
*/
|
|
56
|
+
export declare function sdkMissingProblem(harness: string, pkg: string, projectDir: string): string;
|
|
57
|
+
/**
|
|
58
|
+
* Detect one harness: install, version, SDK and login, as far as the harness has them. Never
|
|
59
|
+
* rejects; a probe that throws gives `{ status: "unknown", problem }`.
|
|
60
|
+
*
|
|
61
|
+
* @param id - Harness id.
|
|
62
|
+
* @param options - See {@link DetectHarnessOptions}; `fresh` has no effect here (no cache).
|
|
63
|
+
*/
|
|
64
|
+
export declare function detectHarness(id: string, options?: DetectHarnessOptions): Promise<HarnessDetection>;
|
|
65
|
+
/**
|
|
66
|
+
* Detect every registered harness, in {@link listHarnesses} order, one guarded probe each in
|
|
67
|
+
* parallel. The answer is cached for 15 s per project directory, `PATH`, `HOME`, timeout and
|
|
68
|
+
* override variable; `fresh: true` probes again.
|
|
69
|
+
*
|
|
70
|
+
* @param options - See {@link DetectHarnessOptions}.
|
|
71
|
+
*/
|
|
72
|
+
export declare function detectHarnesses(options?: DetectHarnessOptions): Promise<HarnessDetection[]>;
|
|
73
|
+
//# sourceMappingURL=harness-detect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"harness-detect.d.ts","sourceRoot":"","sources":["../../../bridge/src/harness-detect.ts"],"names":[],"mappings":"AAyBA,wIAAwI;AACxI,MAAM,MAAM,mBAAmB,GAAG,IAAI,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;AAE5E,uCAAuC;AACvC,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,IAAI,GAAG,SAAS,GAAG,SAAS,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wDAAwD;AACxD,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,uHAAuH;IACvH,MAAM,EAAE,mBAAmB,CAAC;IAC5B,kHAAkH;IAClH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0FAA0F;IAC1F,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wFAAwF;IACxF,GAAG,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC;IACvC,6EAA6E;IAC7E,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,oEAAoE;AACpE,MAAM,WAAW,oBAAoB;IACnC,iFAAiF;IACjF,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,wEAAwE;IACxE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,yDAAyD;AACzD,eAAO,MAAM,mBAAmB,QAAS,CAAC;AAG1C,+FAA+F;AAC/F,eAAO,MAAM,YAAY,EAAE,MAAM,CAC/B,MAAM,EACN;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE,CAgBhE,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAE1F;AAgND;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,EAAE,EAAE,MAAM,EACV,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,gBAAgB,CAAC,CAc3B;AA4BD;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAe7B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harness-model-check.d.ts","sourceRoot":"","sources":["../../../bridge/src/harness-model-check.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,KAAK,kBAAkB,EAEvB,KAAK,wBAAwB,EAG9B,MAAM,2CAA2C,CAAC;
|
|
1
|
+
{"version":3,"file":"harness-model-check.d.ts","sourceRoot":"","sources":["../../../bridge/src/harness-model-check.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,KAAK,kBAAkB,EAEvB,KAAK,wBAAwB,EAG9B,MAAM,2CAA2C,CAAC;AAWnD,4CAA4C;AAC5C,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,kBAAkB,GAAG,wBAAwB,CAAC;IACzD,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AA6DD;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,sBAAsB,GAC5B,MAAM,GAAG,SAAS,CAuBpB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,sBAAsB,GAC5B,MAAM,GAAG,SAAS,CA6BpB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,sBAAsB,GAC5B,MAAM,GAAG,SAAS,CAiBpB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,sBAAsB,GAAG,MAAM,GAAG,SAAS,CAapF;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAKtE;AAuCD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,SAAS,SAAS,GACjB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAyB7B"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ask a harness which models it can serve with the configuration a session would give it.
|
|
3
|
+
*
|
|
4
|
+
* {@link listModelsForHarness} answers from the registry alone: it is hermetic, never starts
|
|
5
|
+
* a program, and lists every enabled entry's `model_map`. That is the right contract for a
|
|
6
|
+
* session, but a picker cannot tell from it what the harness will actually serve — an entry with
|
|
7
|
+
* a `discovery:` block, or one whose provider the harness resolves itself, only shows up when the
|
|
8
|
+
* harness is asked. {@link discoverHarnessModels} is the explicit, opt-in call that asks: it
|
|
9
|
+
* renders the registry the way the harness's own start would (omp's `models.yml`, opencode's
|
|
10
|
+
* `opencode.json`, the credential env), runs the harness's model-listing command with closed
|
|
11
|
+
* stdin and a timeout, and removes whatever it rendered.
|
|
12
|
+
*
|
|
13
|
+
* Any failure (program missing, timeout, unparsable output) and every harness without an
|
|
14
|
+
* enumerator fall back to the registry list, tagged `source: "registry"` with the reason.
|
|
15
|
+
*/
|
|
16
|
+
import { type AIProviderRegistry, type MergedAIProviderRegistry } from "@skaile/workspaces/core/provider-registry";
|
|
17
|
+
import type { ModelEntry } from "./models.js";
|
|
18
|
+
import type { RegistryCredentialOptions } from "./provider-materialize/credential-env.js";
|
|
19
|
+
/** What {@link discoverHarnessModels} found. */
|
|
20
|
+
export interface HarnessModelDiscovery {
|
|
21
|
+
/** The models, in the order the harness (or the registry) listed them. */
|
|
22
|
+
models: ModelEntry[];
|
|
23
|
+
/** `harness`: the harness itself listed them. `registry`: derived from the registry. */
|
|
24
|
+
source: "harness" | "registry";
|
|
25
|
+
/** Why the harness was not asked or did not answer, when `source` is `registry` for that reason. */
|
|
26
|
+
error?: string;
|
|
27
|
+
}
|
|
28
|
+
/** Options of {@link discoverHarnessModels}. */
|
|
29
|
+
export type DiscoverHarnessModelsOptions = RegistryCredentialOptions & {
|
|
30
|
+
/** Working directory the program runs in (default `process.cwd()`). */
|
|
31
|
+
cwd?: string;
|
|
32
|
+
/** Time the harness gets to answer, in milliseconds (default per harness: omp 20 s, opencode 15 s). */
|
|
33
|
+
timeoutMs?: number;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* The chat models of `omp models --json`'s answer, as `<provider>/<id>` selectors. Exported for
|
|
37
|
+
* tests; `undefined` when the text is not that answer or lists no chat model.
|
|
38
|
+
*/
|
|
39
|
+
export declare function parseOmpModelsJson(stdout: string): ModelEntry[] | undefined;
|
|
40
|
+
/**
|
|
41
|
+
* The `<provider>/<model>` lines of `opencode models`. A model id may itself contain `/`
|
|
42
|
+
* (`openrouter/anthropic/claude-sonnet-4`): the provider is the head up to the first `/`. Lines
|
|
43
|
+
* that are not that shape (banners, the JSON of `--verbose`) are skipped; repeats are dropped.
|
|
44
|
+
*/
|
|
45
|
+
export declare function parseOpenCodeModelLines(stdout: string): {
|
|
46
|
+
provider: string;
|
|
47
|
+
model: string;
|
|
48
|
+
}[];
|
|
49
|
+
/**
|
|
50
|
+
* The models `harnessId` serves with the configuration a session over `registry` would get.
|
|
51
|
+
*
|
|
52
|
+
* Only omp (`omp models --json`) and opencode (`opencode models`) are asked; the other harnesses
|
|
53
|
+
* run on the provider the registry hands them, so the registry list is already their catalog.
|
|
54
|
+
* The answer is the registry list, `source: "registry"`, when the harness has no enumerator and
|
|
55
|
+
* also when asking fails; then `error` carries the reason (the install hint, a timeout line, a
|
|
56
|
+
* parse failure).
|
|
57
|
+
*
|
|
58
|
+
* @param harnessId - Registered harness id.
|
|
59
|
+
* @param registry - The AI provider registry the session would carry.
|
|
60
|
+
* @param options - Credential resolution (`env`, `providerId`), the working directory and the
|
|
61
|
+
* time budget.
|
|
62
|
+
* @throws {Error} When the registry fallback is needed and `harnessId` is unknown or not bundled
|
|
63
|
+
* (same contract as {@link listModelsForHarness}).
|
|
64
|
+
*/
|
|
65
|
+
export declare function discoverHarnessModels(harnessId: string, registry: AIProviderRegistry | MergedAIProviderRegistry, options?: DiscoverHarnessModelsOptions): Promise<HarnessModelDiscovery>;
|
|
66
|
+
//# sourceMappingURL=harness-model-discovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"harness-model-discovery.d.ts","sourceRoot":"","sources":["../../../bridge/src/harness-model-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,OAAO,EACL,KAAK,kBAAkB,EAEvB,KAAK,wBAAwB,EAE9B,MAAM,2CAA2C,CAAC;AAGnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AAa1F,gDAAgD;AAChD,MAAM,WAAW,qBAAqB;IACpC,0EAA0E;IAC1E,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,wFAAwF;IACxF,MAAM,EAAE,SAAS,GAAG,UAAU,CAAC;IAC/B,oGAAoG;IACpG,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,gDAAgD;AAChD,MAAM,MAAM,4BAA4B,GAAG,yBAAyB,GAAG;IACrE,uEAAuE;IACvE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,uGAAuG;IACvG,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAwEF;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,EAAE,GAAG,SAAS,CAmC3E;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,CAU7F;AAqFD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,kBAAkB,GAAG,wBAAwB,EACvD,OAAO,GAAE,4BAAiC,GACzC,OAAO,CAAC,qBAAqB,CAAC,CAwBhC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_subprocess-cli.d.ts","sourceRoot":"","sources":["../../../../bridge/src/harnesses/_subprocess-cli.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"_subprocess-cli.d.ts","sourceRoot":"","sources":["../../../../bridge/src/harnesses/_subprocess-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -968,8 +968,10 @@ export declare class ClaudeSdkHarness extends AgentHarness {
|
|
|
968
968
|
* Resolution order:
|
|
969
969
|
* 1. CLAUDE_CODE_PATH env var (set in Docker containers where cli.js is
|
|
970
970
|
* extracted from the SDK during build — bun-compiled binaries can't
|
|
971
|
-
* access the SDK's bundled cli.js via $bunfs)
|
|
972
|
-
* 2. `
|
|
971
|
+
* access the SDK's bundled cli.js via $bunfs); it need not be executable
|
|
972
|
+
* 2. `claude` on PATH or in a toolchain install dir (nvm, volta, bun, Homebrew, …;
|
|
973
|
+
* dev machines with claude installed globally). The project's `node_modules/.bin`
|
|
974
|
+
* is not searched: it is repo-controlled.
|
|
973
975
|
* 3. undefined — let the SDK resolve its own bundled cli.js (works when
|
|
974
976
|
* not running inside a bun-compiled binary)
|
|
975
977
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-sdk.d.ts","sourceRoot":"","sources":["../../../../bridge/src/harnesses/claude-sdk.ts"],"names":[],"mappings":"AAeA,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EAEzB,KAAK,eAAe,EACpB,KAAK,UAAU,EAEhB,MAAM,0BAA0B,CAAC;AAmBlC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"claude-sdk.d.ts","sourceRoot":"","sources":["../../../../bridge/src/harnesses/claude-sdk.ts"],"names":[],"mappings":"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"}
|