koppler 0.0.0-stage → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +101 -2
- package/bin/run-logged +16 -0
- package/bin/secret-list +7 -0
- package/bin/secret-psql +41 -0
- package/bin/secret-set +17 -0
- package/bin/secret-store +82 -0
- package/bin/secret-test +10 -0
- package/bin/with-secrets +25 -0
- package/dist/.built +1 -0
- package/dist/cli/agent.js +144 -0
- package/dist/cli/agent.js.map +1 -0
- package/dist/cli/doctor.js +173 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/mcp.js +204 -0
- package/dist/cli/mcp.js.map +1 -0
- package/dist/cli/output.js +37 -0
- package/dist/cli/output.js.map +1 -0
- package/dist/cli/records.js +121 -0
- package/dist/cli/records.js.map +1 -0
- package/dist/cli/running.js +270 -0
- package/dist/cli/running.js.map +1 -0
- package/dist/cli/shell.js +43 -0
- package/dist/cli/shell.js.map +1 -0
- package/dist/cli/wait.js +59 -0
- package/dist/cli/wait.js.map +1 -0
- package/dist/core/addresses.js +55 -0
- package/dist/core/addresses.js.map +1 -0
- package/dist/core/arrange.js +329 -0
- package/dist/core/arrange.js.map +1 -0
- package/dist/core/cables.js +158 -0
- package/dist/core/cables.js.map +1 -0
- package/dist/core/expressions.js +72 -0
- package/dist/core/expressions.js.map +1 -0
- package/dist/core/frameworks.js +13 -0
- package/dist/core/frameworks.js.map +1 -0
- package/dist/core/kinds.js +244 -0
- package/dist/core/kinds.js.map +1 -0
- package/dist/core/launch.js +181 -0
- package/dist/core/launch.js.map +1 -0
- package/dist/core/logfmt.js +144 -0
- package/dist/core/logfmt.js.map +1 -0
- package/dist/core/mock.js +27 -0
- package/dist/core/mock.js.map +1 -0
- package/dist/core/plan.js +147 -0
- package/dist/core/plan.js.map +1 -0
- package/dist/core/ports.js +155 -0
- package/dist/core/ports.js.map +1 -0
- package/dist/core/presets.js +186 -0
- package/dist/core/presets.js.map +1 -0
- package/dist/core/secret-types.js +3 -0
- package/dist/core/secret-types.js.map +1 -0
- package/dist/core/sign-in.js +30 -0
- package/dist/core/sign-in.js.map +1 -0
- package/dist/core/stack-path.js +64 -0
- package/dist/core/stack-path.js.map +1 -0
- package/dist/core/stack.js +509 -0
- package/dist/core/stack.js.map +1 -0
- package/dist/core/terraform.js +393 -0
- package/dist/core/terraform.js.map +1 -0
- package/dist/data.js +37 -0
- package/dist/data.js.map +1 -0
- package/dist/engine/actions.js +99 -0
- package/dist/engine/actions.js.map +1 -0
- package/dist/engine/app-commands.js +106 -0
- package/dist/engine/app-commands.js.map +1 -0
- package/dist/engine/app-start.js +167 -0
- package/dist/engine/app-start.js.map +1 -0
- package/dist/engine/app-state.js +43 -0
- package/dist/engine/app-state.js.map +1 -0
- package/dist/engine/boards.js +219 -0
- package/dist/engine/boards.js.map +1 -0
- package/dist/engine/branch.js +194 -0
- package/dist/engine/branch.js.map +1 -0
- package/dist/engine/browser-console.js +45 -0
- package/dist/engine/browser-console.js.map +1 -0
- package/dist/engine/calls.js +97 -0
- package/dist/engine/calls.js.map +1 -0
- package/dist/engine/checks.js +270 -0
- package/dist/engine/checks.js.map +1 -0
- package/dist/engine/clones.js +67 -0
- package/dist/engine/clones.js.map +1 -0
- package/dist/engine/config.js +26 -0
- package/dist/engine/config.js.map +1 -0
- package/dist/engine/deployed.js +488 -0
- package/dist/engine/deployed.js.map +1 -0
- package/dist/engine/devices.js +81 -0
- package/dist/engine/devices.js.map +1 -0
- package/dist/engine/discover.js +236 -0
- package/dist/engine/discover.js.map +1 -0
- package/dist/engine/down.js +253 -0
- package/dist/engine/down.js.map +1 -0
- package/dist/engine/history.js +215 -0
- package/dist/engine/history.js.map +1 -0
- package/dist/engine/investigate.js +278 -0
- package/dist/engine/investigate.js.map +1 -0
- package/dist/engine/libraries.js +129 -0
- package/dist/engine/libraries.js.map +1 -0
- package/dist/engine/linked.js +146 -0
- package/dist/engine/linked.js.map +1 -0
- package/dist/engine/listen.js +223 -0
- package/dist/engine/listen.js.map +1 -0
- package/dist/engine/locks.js +38 -0
- package/dist/engine/locks.js.map +1 -0
- package/dist/engine/messages.js +177 -0
- package/dist/engine/messages.js.map +1 -0
- package/dist/engine/needs.js +363 -0
- package/dist/engine/needs.js.map +1 -0
- package/dist/engine/processes.js +350 -0
- package/dist/engine/processes.js.map +1 -0
- package/dist/engine/query.js +241 -0
- package/dist/engine/query.js.map +1 -0
- package/dist/engine/queues.js +100 -0
- package/dist/engine/queues.js.map +1 -0
- package/dist/engine/recipes.js +248 -0
- package/dist/engine/recipes.js.map +1 -0
- package/dist/engine/reload.js +32 -0
- package/dist/engine/reload.js.map +1 -0
- package/dist/engine/repos.js +214 -0
- package/dist/engine/repos.js.map +1 -0
- package/dist/engine/research.js +134 -0
- package/dist/engine/research.js.map +1 -0
- package/dist/engine/run-logs.js +79 -0
- package/dist/engine/run-logs.js.map +1 -0
- package/dist/engine/run.js +54 -0
- package/dist/engine/run.js.map +1 -0
- package/dist/engine/runs.js +223 -0
- package/dist/engine/runs.js.map +1 -0
- package/dist/engine/session.js +130 -0
- package/dist/engine/session.js.map +1 -0
- package/dist/engine/share.js +124 -0
- package/dist/engine/share.js.map +1 -0
- package/dist/engine/stack-file.js +206 -0
- package/dist/engine/stack-file.js.map +1 -0
- package/dist/engine/stack-share.js +86 -0
- package/dist/engine/stack-share.js.map +1 -0
- package/dist/engine/stacks.js +143 -0
- package/dist/engine/stacks.js.map +1 -0
- package/dist/engine/sync.js +214 -0
- package/dist/engine/sync.js.map +1 -0
- package/dist/engine/traces.js +65 -0
- package/dist/engine/traces.js.map +1 -0
- package/dist/engine/up.js +621 -0
- package/dist/engine/up.js.map +1 -0
- package/dist/engine/watch.js +71 -0
- package/dist/engine/watch.js.map +1 -0
- package/dist/engine/wire.js +120 -0
- package/dist/engine/wire.js.map +1 -0
- package/dist/failure.js +16 -0
- package/dist/failure.js.map +1 -0
- package/dist/github.js +95 -0
- package/dist/github.js.map +1 -0
- package/dist/ids.js +6 -0
- package/dist/ids.js.map +1 -0
- package/dist/json-files.js +36 -0
- package/dist/json-files.js.map +1 -0
- package/dist/koppler.mjs +840 -0
- package/dist/koppler.mjs.map +1 -0
- package/dist/lambda-local.mjs +250 -0
- package/dist/lambda-local.mjs.map +1 -0
- package/dist/lambda-secrets-proxy.go +31 -0
- package/dist/mock-server.mjs +23 -0
- package/dist/mock-server.mjs.map +1 -0
- package/dist/page/assets/JetBrainsMono-cyrillic-D2jMJ_bk.woff2 +0 -0
- package/dist/page/assets/JetBrainsMono-greek-D2nYnAec.woff2 +0 -0
- package/dist/page/assets/JetBrainsMono-latin-Db4Uuiha.woff2 +0 -0
- package/dist/page/assets/JetBrainsMono-latin-ext-Bnd2h4Br.woff2 +0 -0
- package/dist/page/assets/JetBrainsMono-vietnamese-CNlsqbWb.woff2 +0 -0
- package/dist/page/assets/SchibstedGrotesk-latin-DxefFeRw.woff2 +0 -0
- package/dist/page/assets/SchibstedGrotesk-latin-ext-CnpJE18X.woff2 +0 -0
- package/dist/page/assets/index-Bkj_pX35.js +42 -0
- package/dist/page/assets/index-Dq45jswH.css +1 -0
- package/dist/page/index.html +14 -0
- package/dist/page/theme.js +8 -0
- package/dist/paths.js +19 -0
- package/dist/paths.js.map +1 -0
- package/dist/safe-env.js +73 -0
- package/dist/safe-env.js.map +1 -0
- package/dist/sam-local.mjs +135 -0
- package/dist/sam-local.mjs.map +1 -0
- package/dist/scrub.js +87 -0
- package/dist/scrub.js.map +1 -0
- package/dist/secret-check.mjs +262 -0
- package/dist/secret-check.mjs.map +1 -0
- package/dist/server/browser-console.js +117 -0
- package/dist/server/browser-console.js.map +1 -0
- package/dist/server/cable-test.js +365 -0
- package/dist/server/cable-test.js.map +1 -0
- package/dist/server/choices.js +51 -0
- package/dist/server/choices.js.map +1 -0
- package/dist/server/files.js +107 -0
- package/dist/server/files.js.map +1 -0
- package/dist/server/gate.js +128 -0
- package/dist/server/gate.js.map +1 -0
- package/dist/server/logs.js +76 -0
- package/dist/server/logs.js.map +1 -0
- package/dist/server/mobile.js +113 -0
- package/dist/server/mobile.js.map +1 -0
- package/dist/server/routes.js +326 -0
- package/dist/server/routes.js.map +1 -0
- package/dist/server/runs.js +111 -0
- package/dist/server/runs.js.map +1 -0
- package/dist/server/sanitize.js +242 -0
- package/dist/server/sanitize.js.map +1 -0
- package/dist/server/secrets.js +111 -0
- package/dist/server/secrets.js.map +1 -0
- package/dist/server/status.js +321 -0
- package/dist/server/status.js.map +1 -0
- package/dist/server/token.js +38 -0
- package/dist/server/token.js.map +1 -0
- package/dist/server/waiting.js +79 -0
- package/dist/server/waiting.js.map +1 -0
- package/dist/status-watch.mjs +63 -0
- package/dist/status-watch.mjs.map +1 -0
- package/package.json +74 -4
- package/skills/koppler-run/SKILL.md +169 -0
- package/skills/koppler-run/VERSION +1 -0
- package/skills/koppler-run/references/action-log.md +50 -0
- package/skills/koppler-run/references/permissions.md +25 -0
- package/skills/koppler-run/references/preparing-nodes.md +62 -0
- package/skills/koppler-run/references/reporting-bugs.md +76 -0
- package/skills/koppler-run/references/research.md +40 -0
- package/skills/koppler-run/references/secrets.md +56 -0
- package/skills/koppler-run/references/stack.md +197 -0
- package/skills/koppler-run/references/status.md +92 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"up.js","sourceRoot":"","sources":["../../src/engine/up.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
// `koppler watch <app>`: started by a run beside an app whose card asks for it, and stopped with it. When a file in the
|
|
2
|
+
// app's clone changes, the app starts again exactly as it was started, its wiring included.
|
|
3
|
+
import fs from 'node:fs';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { positional } from "../cli/output.js";
|
|
6
|
+
import { readClones, readStack } from "../data.js";
|
|
7
|
+
import { fail } from "../failure.js";
|
|
8
|
+
import { NAME, readRecord, startProcess, stopOne } from "./processes.js";
|
|
9
|
+
/** What changes all the time without being a change to the app: its tools' and builds' own folders. */
|
|
10
|
+
const NOISE = [
|
|
11
|
+
'.git',
|
|
12
|
+
'node_modules',
|
|
13
|
+
'bin',
|
|
14
|
+
'obj',
|
|
15
|
+
'build',
|
|
16
|
+
'dist',
|
|
17
|
+
'.dart_tool',
|
|
18
|
+
'.next',
|
|
19
|
+
'.idea',
|
|
20
|
+
'.vs',
|
|
21
|
+
'coverage',
|
|
22
|
+
];
|
|
23
|
+
/** The watcher of an app, as a process of its own. */
|
|
24
|
+
export const watcherOf = (id) => `${id.slice(0, 58)}-watch`;
|
|
25
|
+
/** Whether a changed path, relative to the clone, is one that never restarts the app. */
|
|
26
|
+
export function ignored(file, ignore) {
|
|
27
|
+
const parts = file.split(/[\\/]/);
|
|
28
|
+
return (parts.some(part => NOISE.includes(part)) ||
|
|
29
|
+
ignore.some(one => {
|
|
30
|
+
const at = one.replace(/^\.\/|\/$/g, '');
|
|
31
|
+
return file === at || file.startsWith(`${at}/`) || parts.includes(at);
|
|
32
|
+
}));
|
|
33
|
+
}
|
|
34
|
+
export function watchCommand(args) {
|
|
35
|
+
const [id = ''] = positional(args);
|
|
36
|
+
if (!NAME.test(id))
|
|
37
|
+
fail('usage: koppler watch <app>');
|
|
38
|
+
const repo = readClones()[id]?.path ?? fail(`${id} is not cloned`);
|
|
39
|
+
const ignore = readStack()?.apps[id]?.watch?.ignore ?? [];
|
|
40
|
+
let timer;
|
|
41
|
+
let busy = false;
|
|
42
|
+
let changed = '';
|
|
43
|
+
const restart = async () => {
|
|
44
|
+
if (busy)
|
|
45
|
+
return;
|
|
46
|
+
const record = readRecord(id);
|
|
47
|
+
if (!record?.start) {
|
|
48
|
+
console.log(`${id} no longer runs: the watch ends`);
|
|
49
|
+
process.exit(0);
|
|
50
|
+
}
|
|
51
|
+
busy = true;
|
|
52
|
+
console.log(`${new Date().toLocaleTimeString()} ${changed} changed: restarting ${id}`);
|
|
53
|
+
try {
|
|
54
|
+
console.log(await stopOne(record));
|
|
55
|
+
await startProcess(record.start);
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
console.log(`${id} did not start again: ${error.message}`);
|
|
59
|
+
}
|
|
60
|
+
busy = false;
|
|
61
|
+
};
|
|
62
|
+
fs.watch(repo, { recursive: true }, (_, file) => {
|
|
63
|
+
if (!file || ignored(file, ignore))
|
|
64
|
+
return;
|
|
65
|
+
changed = path.normalize(file);
|
|
66
|
+
clearTimeout(timer);
|
|
67
|
+
timer = setTimeout(() => void restart(), 800);
|
|
68
|
+
});
|
|
69
|
+
console.log(`watching ${repo} for ${id}`);
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=watch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/engine/watch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
// A cable from one app to another: where the caller must point to reach the local callee, and how it picks that
|
|
2
|
+
// address (a setting, a line in an env file, an edit).
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { flagValue } from "../cli/output.js";
|
|
5
|
+
import { fail } from "../failure.js";
|
|
6
|
+
import { browserChecks, envFileChange, localAddress } from "../core/addresses.js";
|
|
7
|
+
import { frameworkOf } from "../core/frameworks.js";
|
|
8
|
+
import { of as kindOf } from "../core/kinds.js";
|
|
9
|
+
import { launchProfile } from "../core/launch.js";
|
|
10
|
+
import { readClones, readStack } from "../data.js";
|
|
11
|
+
import { readJson } from "../json-files.js";
|
|
12
|
+
import { httpUrlOf, profilesOf } from "./app-start.js";
|
|
13
|
+
import { lanIp, resolveDevice } from "./devices.js";
|
|
14
|
+
const deviceWords = (device) => `${device.name} (${device.physical ? 'phone' : device.platform === 'ios' ? 'iOS simulator' : 'Android emulator'})`;
|
|
15
|
+
/** Where a browser front end is served, when the stack does not say: its framework's usual port. */
|
|
16
|
+
function browserUrl(caller, clone) {
|
|
17
|
+
if (caller.url)
|
|
18
|
+
return caller.url;
|
|
19
|
+
if (!kindOf(caller).browser || !clone)
|
|
20
|
+
return null;
|
|
21
|
+
const pkg = readJson(path.join(clone.path, 'package.json'));
|
|
22
|
+
return `http://localhost:${String(frameworkOf(pkg)?.port ?? 3000)}`;
|
|
23
|
+
}
|
|
24
|
+
/** Where `from` must point to reach the local `to`, and how it picks that address; an error when it cannot be told. */
|
|
25
|
+
export function wireInfo(stack, clones, from, to, env, deviceSpec) {
|
|
26
|
+
const caller = stack.apps[from];
|
|
27
|
+
const callee = stack.apps[to];
|
|
28
|
+
if (!caller)
|
|
29
|
+
return { error: `${from} is not an app in the stack` };
|
|
30
|
+
if (!callee)
|
|
31
|
+
return { error: `${to} is not an app in the stack` };
|
|
32
|
+
const found = stack.found?.[from]?.[to];
|
|
33
|
+
const call = caller.consumes?.[to] ?? (found ? { how: 'unknown', found } : undefined);
|
|
34
|
+
if (!call)
|
|
35
|
+
return { error: `${from} does not call ${to} as far as the stack knows (koppler sync finds unrecorded calls)` };
|
|
36
|
+
const device = kindOf(caller).platforms ? resolveDevice(deviceSpec, caller) : null;
|
|
37
|
+
const phone = !!device?.physical;
|
|
38
|
+
const httpUrl = phone && clones[to] ? httpUrlOf(callee, clones[to].path, env) : null;
|
|
39
|
+
const address = localAddress(callee, device, { lanIp: phone ? lanIp() : null, httpUrl, like: call.deployed });
|
|
40
|
+
if (address.error !== undefined)
|
|
41
|
+
return { error: `${from} -> ${to}: ${address.error}` };
|
|
42
|
+
// A stack may pin an address per simulator or emulator; a phone always gets the worked-out one.
|
|
43
|
+
const pinned = typeof call.value === 'string' ? call.value : phone || !device ? undefined : call.value?.[device.platform];
|
|
44
|
+
const value = pinned ?? (call.path ? address.url.replace(/\/$/, '') + call.path : address.url);
|
|
45
|
+
// A browser front end also needs the API to allow its origin (CORS), and no https page calling an http API. Each
|
|
46
|
+
// browser caller of the same API gets a number, for settings written as `Origins__{n}`.
|
|
47
|
+
const browserCallers = Object.entries(stack.apps).filter(([, app]) => kindOf(app).browser && app.consumes?.[to]);
|
|
48
|
+
const slot = browserCallers
|
|
49
|
+
.map(([id]) => id)
|
|
50
|
+
.sort()
|
|
51
|
+
.indexOf(from);
|
|
52
|
+
const browser = kindOf(caller).browser
|
|
53
|
+
? browserChecks(callee, browserUrl(caller, clones[from]), Math.max(slot, 0))
|
|
54
|
+
: { settings: [], warnings: [] };
|
|
55
|
+
const profileFor = (app, id) => launchProfile(app, profilesOf(app, clones[id]?.path), env).local;
|
|
56
|
+
return {
|
|
57
|
+
from,
|
|
58
|
+
to,
|
|
59
|
+
how: call.how,
|
|
60
|
+
device: device ? deviceWords(device) : null,
|
|
61
|
+
...(call.how === 'env' && { env: call.env, profile: profileFor(caller, from) }),
|
|
62
|
+
...(call.file && { file: call.file, key: call.key }),
|
|
63
|
+
...(call.how === 'env-file' && envFileChange(call, value)),
|
|
64
|
+
value,
|
|
65
|
+
needsLan: address.needsLan,
|
|
66
|
+
found: call.found,
|
|
67
|
+
cors: browser.settings.map(setting => ({ ...setting, profile: profileFor(callee, to) })),
|
|
68
|
+
warnings: browser.warnings,
|
|
69
|
+
note: [address.note, call.note].filter(Boolean).join(' ') || undefined,
|
|
70
|
+
call,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
function print(caller, callee, wiring) {
|
|
74
|
+
const { call, value } = wiring;
|
|
75
|
+
console.log(`${caller.name} -> local ${callee.name}${wiring.device ? ` on ${wiring.device}` : ''}: ${value}`);
|
|
76
|
+
const settings = [call.env ?? []]
|
|
77
|
+
.flat()
|
|
78
|
+
.map(name => `${name}=${value}`)
|
|
79
|
+
.join(', ');
|
|
80
|
+
if (call.how === 'env')
|
|
81
|
+
console.log(` set in ${wiring.profile ?? ''}: ${settings}`);
|
|
82
|
+
else if (call.how === 'edit')
|
|
83
|
+
console.log(` edit ${call.file ?? ''}: ${call.key ?? ''} (mark it "koppler: do not commit")`);
|
|
84
|
+
else if (call.how === 'secret')
|
|
85
|
+
console.log(` set over its secret when it starts: ${call.key ?? ''}=${value} (Stop takes it back)`);
|
|
86
|
+
else if (call.how === 'env-file')
|
|
87
|
+
console.log(` write to ${wiring.file ?? ''} (git-ignored, read on top of .env): ${(wiring.lines ?? []).join(', ')}`);
|
|
88
|
+
else {
|
|
89
|
+
const where = call.found ? `; found at ${call.found}` : '';
|
|
90
|
+
console.log(` how ${caller.name} picks this address is not recorded yet${where}: confirm in its repo, then record it with koppler stack set apps.<caller>.consumes.<callee>.how <how>`);
|
|
91
|
+
}
|
|
92
|
+
if (wiring.needsLan)
|
|
93
|
+
console.log(` ${callee.name} must listen on the network: koppler run ${wiring.to} --lan`);
|
|
94
|
+
for (const setting of wiring.cors)
|
|
95
|
+
console.log(` allow the browser origin in ${callee.name}'s ${setting.profile}: ${setting.env}=${setting.value}`);
|
|
96
|
+
for (const warning of wiring.warnings)
|
|
97
|
+
console.log(` warning: ${warning}`);
|
|
98
|
+
if (wiring.note)
|
|
99
|
+
console.log(` note: ${wiring.note}`);
|
|
100
|
+
}
|
|
101
|
+
const USAGE = 'usage: koppler plan --wire <caller> <callee> [--device ios|android|phone|<id>] [--json]';
|
|
102
|
+
/** `koppler plan --wire <caller> <callee>`: what one cable changes, in words or as JSON. */
|
|
103
|
+
export function wire(args) {
|
|
104
|
+
const stack = readStack() ?? fail('no stack loaded (koppler init)');
|
|
105
|
+
const [from, to] = args.filter((arg, at) => !arg.startsWith('--') && !['--device', '--env'].includes(args[at - 1] ?? ''));
|
|
106
|
+
const caller = from ? stack.apps[from] : undefined;
|
|
107
|
+
if (!from || !to || !caller)
|
|
108
|
+
fail(USAGE);
|
|
109
|
+
const wired = wireInfo(stack, readClones(), from, to, flagValue(args, '--env') ?? stack.envs[0] ?? '', flagValue(args, '--device'));
|
|
110
|
+
if (wired.error !== undefined)
|
|
111
|
+
fail(wired.error);
|
|
112
|
+
const callee = stack.apps[to];
|
|
113
|
+
if (!callee)
|
|
114
|
+
fail(USAGE);
|
|
115
|
+
if (args.includes('--json'))
|
|
116
|
+
console.log(JSON.stringify({ ...wired, call: undefined }, null, 2));
|
|
117
|
+
else
|
|
118
|
+
print(caller, callee, wired);
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=wire.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wire.js","sourceRoot":"","sources":["../../src/engine/wire.ts"],"names":[],"mappings":"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"}
|
package/dist/failure.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// How a command ends early: the engine throws, and the entry file says why in one line and sets the exit code.
|
|
2
|
+
/** A command cannot go on. */
|
|
3
|
+
export class Failure extends Error {
|
|
4
|
+
/** The exit code: 2 for a usage mistake, 3 when something is left for the agent, else 1. */
|
|
5
|
+
code;
|
|
6
|
+
/** `message` empty when everything has been said already. */
|
|
7
|
+
constructor(message, code = message.startsWith('usage:') ? 2 : 1) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.code = code;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
/** Ends the command with one line saying why. A usage mistake exits 2, a failure 1, as most command line tools do. */
|
|
13
|
+
export function fail(message) {
|
|
14
|
+
throw new Failure(message);
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=failure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"failure.js","sourceRoot":"","sources":["../src/failure.ts"],"names":[],"mappings":"AAAA,+GAA+G;AAE/G,8BAA8B;AAC9B,MAAM,OAAO,OAAQ,SAAQ,KAAK;IAChC,4FAA4F;IACnF,IAAI,CAAS;IACtB,6DAA6D;IAC7D,YAAY,OAAe,EAAE,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,sHAAsH;AACtH,MAAM,UAAU,IAAI,CAAC,OAAe;IAClC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC"}
|
package/dist/github.js
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
// Files on GitHub, read and proposed through the user's own `gh` login. Only https links to a file on github.com are accepted.
|
|
2
|
+
import { execFile } from 'node:child_process';
|
|
3
|
+
export function githubFile(link) {
|
|
4
|
+
let url;
|
|
5
|
+
let parts;
|
|
6
|
+
try {
|
|
7
|
+
url = new URL(link);
|
|
8
|
+
parts = url.pathname.split('/').filter(Boolean).map(decodeURIComponent);
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
if (url.protocol !== 'https:' || url.username || url.password)
|
|
14
|
+
return null;
|
|
15
|
+
if (!parts.every(part => /^[\w.@+-]+$/.test(part) && part !== '..'))
|
|
16
|
+
return null;
|
|
17
|
+
const [owner = '', repo = '', third, fourth = ''] = parts;
|
|
18
|
+
// ponytail: a branch name containing "/" is read as ref + path; link to a commit or a plain branch instead
|
|
19
|
+
if (url.hostname === 'github.com' && third === 'blob' && parts.length > 4)
|
|
20
|
+
return { owner, repo, ref: fourth, path: parts.slice(4).join('/') };
|
|
21
|
+
if (url.hostname === 'raw.githubusercontent.com' && parts.length > 3) {
|
|
22
|
+
const [ref = '', ...rest] = parts
|
|
23
|
+
.slice(2)
|
|
24
|
+
.join('/')
|
|
25
|
+
.replace(/^refs\/heads\//, '')
|
|
26
|
+
.split('/');
|
|
27
|
+
return { owner, repo, ref, path: rest.join('/') };
|
|
28
|
+
}
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
export const fileUrl = (file) => `https://github.com/${file.owner}/${file.repo}/blob/${file.ref}/${file.path}`;
|
|
32
|
+
const MAX_BYTES = 1024 * 1024;
|
|
33
|
+
/** `gh api`, with an optional JSON body on stdin. */
|
|
34
|
+
export function gh(args, body) {
|
|
35
|
+
return new Promise(resolve => {
|
|
36
|
+
const child = execFile('gh', ['api', ...args, ...(body ? ['--input', '-'] : [])], { timeout: 30000, maxBuffer: MAX_BYTES }, (error, stdout, stderr) => {
|
|
37
|
+
resolve({ ok: !error, out: stdout, err: stderr });
|
|
38
|
+
});
|
|
39
|
+
child.stdin?.end(body ? JSON.stringify(body) : undefined);
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
/** The file's text through gh (private repos), else as a public file. */
|
|
43
|
+
export async function readFile(file) {
|
|
44
|
+
const { owner, repo, ref, path } = file;
|
|
45
|
+
const viaGh = await gh([
|
|
46
|
+
`repos/${owner}/${repo}/contents/${path}?ref=${encodeURIComponent(ref)}`,
|
|
47
|
+
'-H',
|
|
48
|
+
'Accept: application/vnd.github.raw',
|
|
49
|
+
]);
|
|
50
|
+
if (viaGh.ok)
|
|
51
|
+
return viaGh.out;
|
|
52
|
+
try {
|
|
53
|
+
const response = await fetch(`https://raw.githubusercontent.com/${owner}/${repo}/${ref}/${path}`, {
|
|
54
|
+
signal: AbortSignal.timeout(15000),
|
|
55
|
+
redirect: 'error',
|
|
56
|
+
});
|
|
57
|
+
const fits = Number(response.headers.get('content-length') ?? 0) <= MAX_BYTES;
|
|
58
|
+
return response.ok && fits ? (await response.text()).slice(0, MAX_BYTES) : null;
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/** A pull request that replaces the file with `text` on a new branch off the linked ref. */
|
|
65
|
+
export async function proposeFile(file, text, { branch, title, body }) {
|
|
66
|
+
const repo = `repos/${file.owner}/${file.repo}`;
|
|
67
|
+
const base = await gh([`${repo}/commits/${encodeURIComponent(file.ref)}`, '--jq', '.sha']);
|
|
68
|
+
if (!base.ok)
|
|
69
|
+
return { error: "Could not read the shared stack's repo. Check that gh is signed in with access to it." };
|
|
70
|
+
const made = await gh(['-X', 'POST', `${repo}/git/refs`], { ref: `refs/heads/${branch}`, sha: base.out.trim() });
|
|
71
|
+
if (!made.ok)
|
|
72
|
+
return { error: 'Could not create a branch. You may not be allowed to push to that repo.' };
|
|
73
|
+
const blob = await gh([`${repo}/contents/${file.path}?ref=${encodeURIComponent(branch)}`, '--jq', '.sha']);
|
|
74
|
+
const put = await gh(['-X', 'PUT', `${repo}/contents/${file.path}`], {
|
|
75
|
+
message: title,
|
|
76
|
+
content: Buffer.from(text).toString('base64'),
|
|
77
|
+
branch,
|
|
78
|
+
...(blob.ok && { sha: blob.out.trim() }),
|
|
79
|
+
});
|
|
80
|
+
if (!put.ok)
|
|
81
|
+
return { error: 'Could not commit the stack to the new branch.' };
|
|
82
|
+
// A link to a commit has no branch to merge into; the repo's default branch is used then.
|
|
83
|
+
const isBranch = !/^[0-9a-f]{7,40}$/.test(file.ref);
|
|
84
|
+
const into = isBranch ? file.ref : (await gh([repo, '--jq', '.default_branch'])).out.trim();
|
|
85
|
+
const opened = await gh(['-X', 'POST', `${repo}/pulls`, '--jq', '.html_url'], {
|
|
86
|
+
title,
|
|
87
|
+
head: branch,
|
|
88
|
+
base: into,
|
|
89
|
+
body,
|
|
90
|
+
});
|
|
91
|
+
return opened.ok
|
|
92
|
+
? { url: opened.out.trim() }
|
|
93
|
+
: { error: 'The branch was pushed, but the pull request could not be opened.' };
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=github.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github.js","sourceRoot":"","sources":["../src/github.ts"],"names":[],"mappings":"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"}
|
package/dist/ids.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// The shapes of the ids Koppler passes between its page, its files and its commands: one place, so each is checked alike.
|
|
2
|
+
/** An app, a process or a queue. Never starts with a dash: given to `koppler` as an argument, it must not read as a flag. */
|
|
3
|
+
export const APP_ID = /^[a-z0-9][a-z0-9-]{0,63}$/;
|
|
4
|
+
/** A run or a Stop. */
|
|
5
|
+
export const RUN_ID = /^[a-z0-9]{6,40}$/;
|
|
6
|
+
//# sourceMappingURL=ids.js.map
|
package/dist/ids.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ids.js","sourceRoot":"","sources":["../src/ids.ts"],"names":[],"mappings":"AAAA,0HAA0H;AAE1H,6HAA6H;AAC7H,MAAM,CAAC,MAAM,MAAM,GAAG,2BAA2B,CAAC;AAClD,uBAAuB;AACvB,MAAM,CAAC,MAAM,MAAM,GAAG,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// JSON files on disk: read without throwing, written whole or not at all, readable by the user alone.
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
export function readJson(file, fallback = null) {
|
|
5
|
+
try {
|
|
6
|
+
return JSON.parse(fs.readFileSync(file, 'utf8').replace(/^\uFEFF/, ''));
|
|
7
|
+
}
|
|
8
|
+
catch {
|
|
9
|
+
return fallback;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
/** Written beside the file and moved into place, so a reader never sees half of it. */
|
|
13
|
+
export function writeJson(file, value) {
|
|
14
|
+
fs.mkdirSync(path.dirname(file), { recursive: true, mode: 0o700 });
|
|
15
|
+
const beside = `${file}.${String(process.pid)}.tmp`;
|
|
16
|
+
fs.writeFileSync(beside, `${JSON.stringify(value, null, 2)}\n`, { mode: 0o600 });
|
|
17
|
+
fs.renameSync(beside, file);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* `read(file)` again only once the file changed (written anew, or moved into place), else what it gave last time: for a
|
|
21
|
+
* file read over and over, such as the stack while the canvas runs. What it gives is shared, so it is never changed.
|
|
22
|
+
*/
|
|
23
|
+
export function whenChanged(read) {
|
|
24
|
+
const seen = new Map();
|
|
25
|
+
return file => {
|
|
26
|
+
const at = fs.statSync(file, { throwIfNoEntry: false });
|
|
27
|
+
const key = at ? `${String(at.ino)}:${String(at.mtimeMs)}:${String(at.size)}` : 'none';
|
|
28
|
+
const last = seen.get(file);
|
|
29
|
+
if (last?.key === key)
|
|
30
|
+
return last.value;
|
|
31
|
+
const value = read(file);
|
|
32
|
+
seen.set(file, { key, value });
|
|
33
|
+
return value;
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=json-files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-files.js","sourceRoot":"","sources":["../src/json-files.ts"],"names":[],"mappings":"AAAA,sGAAsG;AACtG,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAK7B,MAAM,UAAU,QAAQ,CAAI,IAAY,EAAE,WAAqB,IAAI;IACjE,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAM,CAAC;IAC/E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,KAAc;IACpD,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,GAAG,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;IACpD,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACjF,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAI,IAAyB;IACtD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAqC,CAAC;IAC1D,OAAO,IAAI,CAAC,EAAE;QACZ,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC;QACxD,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;QACvF,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,IAAI,EAAE,GAAG,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/B,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;AACJ,CAAC"}
|