@kodycodes/cli 1.18.0 → 1.19.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/help.js CHANGED
@@ -45,10 +45,16 @@ Usage:
45
45
  kody auth remove-git [--mcp-url <url>] [--api-url <url>]
46
46
  kody git-credential <get|store|erase>
47
47
  kody whoami [--org <slug>] [--mcp-url <url>] [--token <token>] [--api-url <url>] [--json]
48
- kody search [query] [--org <slug>] [--entity <ref>] [--domain <id>] [--limit <n>] [--token <token>] [--api-url <url>] [--json]
48
+ kody search [query] [--org <slug>] [--entity <ref>] [--domain <id>] [--limit <n>] [--target prod|mock] [--token <token>] [--api-url <url>] [--json]
49
49
  kody api <operationId> [--org <slug>] [--params <json>] [--token <token>] [--api-url <url>] [--json]
50
50
  kody execute [--org <slug>] [--invoke <ref> | --code <esm> | --file <path>] [--params <json>] [--conversation-id <id>] [--json]
51
- [--credential <key=name>]… [--token <token>] [--api-url <url>] [--local] [--allow-private-network]
51
+ [--credential <key=name>]… [--target prod|mock] [--token <token>] [--api-url <url>] [--local] [--allow-private-network]
52
+ kody dev [serve] [--org <slug>] [--target prod|mock] [--reset-storage] [--port <n>] [--app-base-path <path>] [--allow-private-network]
53
+ kody dev fetch <path> [--method <verb>] [--body <file>] [--target prod|mock] [--json]
54
+ kody dev job <name> [--target prod|mock] [--json]
55
+ kody dev webhook <name> --body <file.json> [--target prod|mock] [--json]
56
+ kody dev emit <event> --body <event.json> [--target prod|mock] [--json]
57
+ kody dev check [--target prod|mock] [--json]
52
58
  kody install [--mcp-url <url>] [--clients <ids>] [--yes] [--project] [--json]
53
59
  kody skill install [--project]
54
60
 
@@ -200,14 +206,42 @@ ${orgBlock}
200
206
  rejects the flag — use \`--local\` or MCP.
201
207
 
202
208
  --allow-private-network
203
- Allow execute --local code to fetch private and local network
204
- addresses. Default is public-only; this flag requires --local.
209
+ Allow execute --local / \`kody dev\` code to fetch private and
210
+ local network addresses. Default is public-only.
211
+
212
+ --target prod|mock
213
+ Where server-side calls go (storage, credentials, kody:*,
214
+ execute, invoke, search). Same meaning on \`dev\`, \`execute\`,
215
+ and \`search\`. Defaults: \`mock\` for \`kody dev\`; \`prod\` for
216
+ execute/search (unchanged). \`--target mock\` starts the
217
+ built-in CLI mock (no kody-celld); scratch storage; fake or
218
+ local credentials so unpublished packages never touch real
219
+ secrets. Unimplemented mock routes refuse with
220
+ \`not_implemented_in_mock\`.
221
+
222
+ --reset-storage
223
+ With \`--target mock\`, wipe the mock session's scratch storage
224
+ before the command.
225
+
226
+ kody dev Local testing for unpublished packages. Serves \`kody.app.entry\`
227
+ on localhost via workerd with hot reload (mount-stripped path;
228
+ packageContext.hostedUrl / appBasePath point at localhost).
229
+ Bundles with the same esbuild path as publish (\`local-bundle\`).
230
+ Four surfaces: exports (\`execute --invoke ./export\` or
231
+ \`--file\` against the local package), webhooks
232
+ (\`kody dev webhook\`), schedules (\`kody dev job\` — runs once,
233
+ never schedules locally), subscriptions
234
+ (\`kody dev emit <event> --body event.json\`). \`kody dev check\`
235
+ bundles + light publish validations without running. Share
236
+ previews are out of scope.
205
237
 
206
238
  Environment:
207
239
  KODY_MCP_URL Override the default MCP URL (${defaultMcpUrl})
208
240
  ${orgEnvVar} Default org slug for org-scoped commands (overridden by --org)
209
241
  ${apiTokenEnvVar} Scoped API token for token-auth search / whoami / api / execute
210
242
  KODY_API_URL Override the Kody API URL (${defaultApiUrl})
243
+ KODY_TARGET Default \`prod\`|\`mock\` (overridden by --target)
244
+ KODY_MOCK_SESSION_ID Scratch storage key for --target mock (default: default)
211
245
  KODY_CACHE_DIR Where execute --local caches workerd (default: user cache dir)
212
246
  KODY_WORKERD_PATH Use this workerd binary instead of the pinned download
213
247
  `;
package/dist/help.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"help.js","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC3F,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EACN,cAAc,GAId,MAAM,YAAY,CAAA;AAEnB,SAAS,mBAAmB,CAAC,IAAsB,EAAE,MAAM,GAAG,IAAI;IACjE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,MAAM,sCAAsC,CAAA;IACvD,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,iBAAiB,CAAC,CAAA;IAC1C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;QACnC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO;YAC1B,CAAC,CAAC,kDAAkD;YACpD,CAAC,CAAC,EAAE,CAAA;QACL,KAAK,CAAC,IAAI,CACT,GAAG,MAAM,KAAK,IAAI,IAAI,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,CAC3E,CAAA;IACF,CAAC;IACD,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;AAC/B,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,QAKvB,EAAE;IACL,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,aAAa,CAAA;IAC5C,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;IACrB,IAAI,CAAC,IAAI,EAAE,CAAC;QACX,IAAI,CAAC;YACJ,IAAI,GAAG,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;QAC/D,CAAC;QAAC,MAAM,CAAC;YACR,IAAI,GAAG,EAAE,CAAA;QACV,CAAC;IACF,CAAC;IACD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAA;IAE1C,OAAO,YAAY,kBAAkB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;QAyBhC,aAAa,CAAC,aAAa,CAAC;;;EAGlC,QAAQ;;;gBAGM,SAAS;;;;;;eAMV,SAAS;;;;;;;;;;;;;;;;oCAgBY,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;eAyBvC,cAAc;;;;;;;;;+DASkC,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wCAmCrC,cAAc;;;eAGvC,aAAa;;;;cAId,cAAc;;;;;eAKb,cAAc;;;;;;;;2BAQF,SAAS;;;;;;;;eAQrB,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;sDAyByB,aAAa;IAC/D,SAAS;IACT,cAAc;mDACiC,aAAa;;;CAG/D,CAAA;AACD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,KAAK,CAAC,KAAwC;IAC7D,OAAO,UAAU,CAAC,KAAK,CAAC,CAAA;AACzB,CAAC"}
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC3F,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EACN,cAAc,GAId,MAAM,YAAY,CAAA;AAEnB,SAAS,mBAAmB,CAAC,IAAsB,EAAE,MAAM,GAAG,IAAI;IACjE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,MAAM,sCAAsC,CAAA;IACvD,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,iBAAiB,CAAC,CAAA;IAC1C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;QACnC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO;YAC1B,CAAC,CAAC,kDAAkD;YACpD,CAAC,CAAC,EAAE,CAAA;QACL,KAAK,CAAC,IAAI,CACT,GAAG,MAAM,KAAK,IAAI,IAAI,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,CAC3E,CAAA;IACF,CAAC;IACD,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;AAC/B,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,QAKvB,EAAE;IACL,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,aAAa,CAAA;IAC5C,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;IACrB,IAAI,CAAC,IAAI,EAAE,CAAC;QACX,IAAI,CAAC;YACJ,IAAI,GAAG,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;QAC/D,CAAC;QAAC,MAAM,CAAC;YACR,IAAI,GAAG,EAAE,CAAA;QACV,CAAC;IACF,CAAC;IACD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAA;IAE1C,OAAO,YAAY,kBAAkB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA+BhC,aAAa,CAAC,aAAa,CAAC;;;EAGlC,QAAQ;;;gBAGM,SAAS;;;;;;eAMV,SAAS;;;;;;;;;;;;;;;;oCAgBY,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;eAyBvC,cAAc;;;;;;;;;+DASkC,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wCAmCrC,cAAc;;;eAGvC,aAAa;;;;cAId,cAAc;;;;;eAKb,cAAc;;;;;;;;2BAQF,SAAS;;;;;;;;eAQrB,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sDAmDyB,aAAa;IAC/D,SAAS;IACT,cAAc;mDACiC,aAAa;;;;;CAK/D,CAAA;AACD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,KAAK,CAAC,KAAwC;IAC7D,OAAO,UAAU,CAAC,KAAK,CAAC,CAAA;AACzB,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Run one unpublished package module (export / job / webhook / subscription)
3
+ * in local workerd against `--target prod|mock`.
4
+ */
5
+ import { type PackageLocalContext } from './package-local-runtime-source.js';
6
+ import type { KodyTarget } from './target.js';
7
+ import type { ToolCallResult } from './tool-result.js';
8
+ export type LocalPackageRunInput = {
9
+ modulePath: string;
10
+ params?: unknown;
11
+ token: string;
12
+ apiUrl: string;
13
+ target: KodyTarget;
14
+ packageContext: PackageLocalContext;
15
+ fetchFn?: typeof fetch;
16
+ workerdPath?: string;
17
+ allowPrivateNetwork?: boolean;
18
+ onStatus?: (message: string) => void;
19
+ };
20
+ export declare function runLocalPackageModule(input: LocalPackageRunInput): Promise<ToolCallResult>;
21
+ /** Build the packageContext used for local unpublished package runs. */
22
+ export declare function buildLocalPackageContext(input: {
23
+ kodyId: string;
24
+ packageId?: string;
25
+ hostedUrl: string;
26
+ appBasePath?: string;
27
+ clientModuleUrl?: string | null;
28
+ }): PackageLocalContext;
@@ -0,0 +1,299 @@
1
+ /**
2
+ * Run one unpublished package module (export / job / webhook / subscription)
3
+ * in local workerd against `--target prod|mock`.
4
+ */
5
+ import { spawn } from 'node:child_process';
6
+ import { randomBytes } from 'node:crypto';
7
+ import { rmSync } from 'node:fs';
8
+ import { mkdtemp, rm, writeFile } from 'node:fs/promises';
9
+ import { createServer, request as httpRequest, } from 'node:http';
10
+ import { tmpdir } from 'node:os';
11
+ import { join } from 'node:path';
12
+ import { setTimeout as delay } from 'node:timers/promises';
13
+ import { assertTokenSafeApiUrl, callCapabilityProxy, } from './capability-proxy.js';
14
+ import { apiTokenEnvVar } from './defaults.js';
15
+ import { bundleLocalUserModule } from './local-bundle.js';
16
+ import { createWorkerdConfig, } from './local-runtime-source.js';
17
+ import { createPackageLocalRuntimeModuleSource, createPackageModuleEntrySource, localWorkerModuleNames, runSecretEnvVar, runSecretHeader, } from './package-local-runtime-source.js';
18
+ import { redact } from './redact.js';
19
+ import { ensureWorkerdBinary } from './workerd-binary.js';
20
+ const workerdStartTimeoutMs = 30_000;
21
+ const workerdExitGraceMs = 1_000;
22
+ export async function runLocalPackageModule(input) {
23
+ assertTokenSafeApiUrl(input.apiUrl);
24
+ input.onStatus?.(`Bundling ${input.modulePath}…`);
25
+ const code = await bundleLocalUserModule(input.modulePath);
26
+ const client = { apiUrl: input.apiUrl, token: input.token, fetchFn: input.fetchFn };
27
+ const workerdPath = input.workerdPath ??
28
+ (await ensureWorkerdBinary({
29
+ onDownload: (url) => input.onStatus?.(`Downloading workerd from ${url}…`),
30
+ }));
31
+ const runSecret = randomBytes(32).toString('hex');
32
+ const workDir = await mkdtemp(join(tmpdir(), 'kody-pkg-'));
33
+ let child;
34
+ let bridge;
35
+ const stopWorkerd = () => child?.kill('SIGKILL');
36
+ const releaseSignals = cleanupOnSignal(() => {
37
+ stopWorkerd();
38
+ rmSync(workDir, { recursive: true, force: true });
39
+ });
40
+ const startedAt = new Date();
41
+ const finish = (sandbox) => {
42
+ const endedAt = new Date();
43
+ const logs = sandbox.logs ?? [];
44
+ const base = {
45
+ timing: {
46
+ startedAt: startedAt.toISOString(),
47
+ endedAt: endedAt.toISOString(),
48
+ durationMs: endedAt.getTime() - startedAt.getTime(),
49
+ },
50
+ target: input.target,
51
+ };
52
+ if (typeof sandbox.error === 'string') {
53
+ return {
54
+ content: [{ type: 'text', text: `Error: ${sandbox.error}` }],
55
+ structuredContent: { ...base, returnedBytes: 0, error: sandbox.error, logs },
56
+ isError: true,
57
+ };
58
+ }
59
+ const text = typeof sandbox.result === 'string'
60
+ ? sandbox.result
61
+ : (JSON.stringify(sandbox.result, null, 2) ?? 'undefined');
62
+ const serialized = typeof sandbox.result === 'string'
63
+ ? sandbox.result
64
+ : (JSON.stringify(sandbox.result) ?? 'undefined');
65
+ return {
66
+ content: [{ type: 'text', text }],
67
+ structuredContent: {
68
+ ...base,
69
+ returnedBytes: Buffer.byteLength(serialized),
70
+ result: sandbox.result,
71
+ logs,
72
+ },
73
+ isError: false,
74
+ };
75
+ };
76
+ try {
77
+ bridge = await startBridge({
78
+ runSecret,
79
+ forward: (call, signal) => callCapabilityProxy({
80
+ ...client,
81
+ ...call,
82
+ signal,
83
+ }),
84
+ });
85
+ const files = { entry: 'entry.js', user: 'main.js', runtime: 'runtime.js' };
86
+ await writeFile(join(workDir, files.entry), createPackageModuleEntrySource());
87
+ await writeFile(join(workDir, files.user), code);
88
+ await writeFile(join(workDir, files.runtime), createPackageLocalRuntimeModuleSource({
89
+ packageContext: input.packageContext,
90
+ mockStorage: input.target === 'mock',
91
+ }));
92
+ const packageModules = [];
93
+ const configPath = join(workDir, 'config.capnp');
94
+ await writeFile(configPath, createWorkerdConfig({
95
+ bridgePort: bridge.port,
96
+ files,
97
+ packageModules,
98
+ allowPrivateNetwork: input.allowPrivateNetwork,
99
+ }));
100
+ const env = { ...process.env, [runSecretEnvVar]: runSecret };
101
+ delete env[apiTokenEnvVar];
102
+ child = spawn(workerdPath, ['serve', configPath, '--control-fd=3'], {
103
+ cwd: workDir,
104
+ env,
105
+ stdio: ['ignore', 'pipe', 'pipe', 'pipe'],
106
+ });
107
+ const workerd = watchWorkerd(child);
108
+ const started = await workerd.listening;
109
+ if ('exitDetail' in started) {
110
+ return finish({
111
+ error: `Local package run could not load the module${started.exitDetail}`,
112
+ });
113
+ }
114
+ let response;
115
+ try {
116
+ response = await postToWorkerd({
117
+ port: started.port,
118
+ runSecret,
119
+ body: JSON.stringify({ params: input.params ?? {} }),
120
+ });
121
+ }
122
+ catch (error) {
123
+ const exitDetail = await Promise.race([workerd.exited, delay(workerdExitGraceMs, null)]);
124
+ if (exitDetail !== null)
125
+ throw new Error(`workerd exited during the run${exitDetail}`);
126
+ const reason = error instanceof Error ? error.message : String(error);
127
+ throw new Error(`Local package run failed (${reason}).${workerd.stderr()}`);
128
+ }
129
+ if (response.status !== 200) {
130
+ throw new Error(`Local package runtime returned HTTP ${response.status}.${workerd.stderr()}`);
131
+ }
132
+ return finish(JSON.parse(response.body));
133
+ }
134
+ finally {
135
+ releaseSignals();
136
+ stopWorkerd();
137
+ await bridge?.close();
138
+ await rm(workDir, { recursive: true, force: true });
139
+ }
140
+ }
141
+ /** Build the packageContext used for local unpublished package runs. */
142
+ export function buildLocalPackageContext(input) {
143
+ const appBasePath = input.appBasePath ?? '';
144
+ return {
145
+ packageId: input.packageId ?? `local:${input.kodyId}`,
146
+ kodyId: input.kodyId,
147
+ sourceId: `local:${input.kodyId}`,
148
+ publishedCommit: null,
149
+ appBasePath,
150
+ hostedUrl: input.hostedUrl.replace(/\/+$/, ''),
151
+ assetBasePath: appBasePath ? `${appBasePath}/_assets` : '/_assets',
152
+ clientModuleUrl: input.clientModuleUrl ?? null,
153
+ };
154
+ }
155
+ function cleanupOnSignal(cleanup) {
156
+ const signals = ['SIGINT', 'SIGTERM', 'SIGHUP'];
157
+ const release = () => {
158
+ for (const signal of signals)
159
+ process.off(signal, handler);
160
+ };
161
+ const handler = (signal) => {
162
+ release();
163
+ cleanup();
164
+ process.kill(process.pid, signal);
165
+ };
166
+ for (const signal of signals)
167
+ process.once(signal, handler);
168
+ return release;
169
+ }
170
+ function watchWorkerd(child) {
171
+ let stderrText = '';
172
+ child.stderr?.on('data', (chunk) => {
173
+ stderrText += chunk.toString('utf8');
174
+ });
175
+ child.stdout?.resume();
176
+ const stderr = () => {
177
+ const trimmed = redact(stderrText.trim());
178
+ return trimmed ? `\n${trimmed}` : '';
179
+ };
180
+ const exited = new Promise((resolve) => {
181
+ child.once('exit', (code, signal) => {
182
+ resolve(` (workerd exit ${signal ?? code})${stderr()}`);
183
+ });
184
+ });
185
+ const listening = new Promise((resolve, reject) => {
186
+ const control = child.stdio[3];
187
+ let buffered = '';
188
+ const timer = setTimeout(() => {
189
+ reject(new Error(`workerd did not start within ${workerdStartTimeoutMs / 1000}s.${stderr()}`));
190
+ }, workerdStartTimeoutMs);
191
+ control?.on('data', (chunk) => {
192
+ buffered += chunk.toString('utf8');
193
+ for (const line of buffered.split('\n')) {
194
+ const port = parseListenPort(line);
195
+ if (port !== null) {
196
+ clearTimeout(timer);
197
+ resolve({ port });
198
+ }
199
+ }
200
+ });
201
+ child.once('error', (error) => {
202
+ clearTimeout(timer);
203
+ reject(new Error(`Could not start workerd: ${error.message}`));
204
+ });
205
+ void exited.then((exitDetail) => {
206
+ clearTimeout(timer);
207
+ resolve({ exitDetail });
208
+ });
209
+ });
210
+ return { listening, exited, stderr };
211
+ }
212
+ function parseListenPort(line) {
213
+ if (!line.trim())
214
+ return null;
215
+ try {
216
+ const event = JSON.parse(line);
217
+ return event.event === 'listen' && event.socket === 'http' && typeof event.port === 'number'
218
+ ? event.port
219
+ : null;
220
+ }
221
+ catch {
222
+ return null;
223
+ }
224
+ }
225
+ function postToWorkerd(input) {
226
+ return new Promise((resolve, reject) => {
227
+ const request = httpRequest({
228
+ host: '127.0.0.1',
229
+ port: input.port,
230
+ method: 'POST',
231
+ path: '/',
232
+ headers: {
233
+ 'content-type': 'application/json',
234
+ 'content-length': Buffer.byteLength(input.body),
235
+ [runSecretHeader]: input.runSecret,
236
+ },
237
+ }, (response) => {
238
+ readBody(response).then((body) => resolve({ status: response.statusCode ?? 0, body }), reject);
239
+ });
240
+ request.on('error', reject);
241
+ request.end(input.body);
242
+ });
243
+ }
244
+ async function startBridge(input) {
245
+ const inFlight = new AbortController();
246
+ const server = createServer(async (request, response) => {
247
+ const reply = (status, body) => {
248
+ response.writeHead(status, { 'content-type': 'application/json' });
249
+ response.end(JSON.stringify(body));
250
+ };
251
+ if (request.method !== 'POST' ||
252
+ request.url !== '/call' ||
253
+ request.headers[runSecretHeader] !== input.runSecret) {
254
+ reply(403, { error: 'Forbidden' });
255
+ return;
256
+ }
257
+ try {
258
+ const call = parseBridgeCall(await readBody(request));
259
+ const result = await input.forward(call, inFlight.signal);
260
+ reply(200, { result });
261
+ }
262
+ catch (error) {
263
+ reply(200, { error: redact(error instanceof Error ? error.message : String(error)) });
264
+ }
265
+ });
266
+ await new Promise((resolve, reject) => {
267
+ server.once('error', reject);
268
+ server.listen(0, '127.0.0.1', () => resolve());
269
+ });
270
+ return {
271
+ port: server.address().port,
272
+ close: () => new Promise((resolve) => {
273
+ inFlight.abort();
274
+ server.closeAllConnections();
275
+ server.close(() => resolve());
276
+ }),
277
+ };
278
+ }
279
+ function parseBridgeCall(body) {
280
+ const parsed = JSON.parse(body);
281
+ if (!Array.isArray(parsed.path) ||
282
+ parsed.path.length === 0 ||
283
+ !parsed.path.every((segment) => typeof segment === 'string')) {
284
+ throw new Error('Invalid kody:runtime call path.');
285
+ }
286
+ return {
287
+ path: parsed.path,
288
+ args: Array.isArray(parsed.args) ? parsed.args : [],
289
+ };
290
+ }
291
+ async function readBody(stream) {
292
+ const chunks = [];
293
+ for await (const chunk of stream) {
294
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
295
+ }
296
+ return Buffer.concat(chunks).toString('utf8');
297
+ }
298
+ void localWorkerModuleNames;
299
+ //# sourceMappingURL=local-package-run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-package-run.js","sourceRoot":"","sources":["../src/local-package-run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Lightweight in-process mock of the Kody production API for `--target mock`.
3
+ * Does not ship or require kody-celld. Refuses unimplemented routes/ops with
4
+ * `not_implemented_in_mock` rather than faking success.
5
+ */
6
+ import { type MockSessionState } from './mock-storage.js';
7
+ export type MockServerOptions = {
8
+ sessionId?: string;
9
+ resetStorage?: boolean;
10
+ host?: string;
11
+ port?: number;
12
+ /** Fixed package id for scratch packageStorage in local package runs. */
13
+ packageId?: string;
14
+ env?: NodeJS.ProcessEnv;
15
+ };
16
+ export type MockServer = {
17
+ url: string;
18
+ port: number;
19
+ sessionId: string;
20
+ close: () => Promise<void>;
21
+ state: () => MockSessionState;
22
+ };
23
+ export declare function isMockApiToken(token: string): boolean;
24
+ /** Issue a bearer the mock accepts (never a real kody_at_…). */
25
+ export declare function mintMockApiToken(sessionId: string): string;
26
+ export declare function startMockServer(options?: MockServerOptions): Promise<MockServer>;
27
+ /** Ensure a mock is running and return its API origin + token for CLI wiring. */
28
+ export declare function ensureMockTarget(input: {
29
+ sessionId?: string;
30
+ resetStorage?: boolean;
31
+ packageId?: string;
32
+ env?: NodeJS.ProcessEnv;
33
+ /** Reuse an already-started server (e.g. long-lived `kody dev`). */
34
+ existing?: MockServer;
35
+ }): Promise<{
36
+ apiUrl: string;
37
+ token: string;
38
+ server: MockServer;
39
+ started: boolean;
40
+ }>;
41
+ /** Close helper used by tests and short-lived CLI commands. */
42
+ export declare function withMockServer<T>(options: MockServerOptions, fn: (server: MockServer) => Promise<T>): Promise<T>;