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.
Files changed (225) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +101 -2
  3. package/bin/run-logged +16 -0
  4. package/bin/secret-list +7 -0
  5. package/bin/secret-psql +41 -0
  6. package/bin/secret-set +17 -0
  7. package/bin/secret-store +82 -0
  8. package/bin/secret-test +10 -0
  9. package/bin/with-secrets +25 -0
  10. package/dist/.built +1 -0
  11. package/dist/cli/agent.js +144 -0
  12. package/dist/cli/agent.js.map +1 -0
  13. package/dist/cli/doctor.js +173 -0
  14. package/dist/cli/doctor.js.map +1 -0
  15. package/dist/cli/mcp.js +204 -0
  16. package/dist/cli/mcp.js.map +1 -0
  17. package/dist/cli/output.js +37 -0
  18. package/dist/cli/output.js.map +1 -0
  19. package/dist/cli/records.js +121 -0
  20. package/dist/cli/records.js.map +1 -0
  21. package/dist/cli/running.js +270 -0
  22. package/dist/cli/running.js.map +1 -0
  23. package/dist/cli/shell.js +43 -0
  24. package/dist/cli/shell.js.map +1 -0
  25. package/dist/cli/wait.js +59 -0
  26. package/dist/cli/wait.js.map +1 -0
  27. package/dist/core/addresses.js +55 -0
  28. package/dist/core/addresses.js.map +1 -0
  29. package/dist/core/arrange.js +329 -0
  30. package/dist/core/arrange.js.map +1 -0
  31. package/dist/core/cables.js +158 -0
  32. package/dist/core/cables.js.map +1 -0
  33. package/dist/core/expressions.js +72 -0
  34. package/dist/core/expressions.js.map +1 -0
  35. package/dist/core/frameworks.js +13 -0
  36. package/dist/core/frameworks.js.map +1 -0
  37. package/dist/core/kinds.js +244 -0
  38. package/dist/core/kinds.js.map +1 -0
  39. package/dist/core/launch.js +181 -0
  40. package/dist/core/launch.js.map +1 -0
  41. package/dist/core/logfmt.js +144 -0
  42. package/dist/core/logfmt.js.map +1 -0
  43. package/dist/core/mock.js +27 -0
  44. package/dist/core/mock.js.map +1 -0
  45. package/dist/core/plan.js +147 -0
  46. package/dist/core/plan.js.map +1 -0
  47. package/dist/core/ports.js +155 -0
  48. package/dist/core/ports.js.map +1 -0
  49. package/dist/core/presets.js +186 -0
  50. package/dist/core/presets.js.map +1 -0
  51. package/dist/core/secret-types.js +3 -0
  52. package/dist/core/secret-types.js.map +1 -0
  53. package/dist/core/sign-in.js +30 -0
  54. package/dist/core/sign-in.js.map +1 -0
  55. package/dist/core/stack-path.js +64 -0
  56. package/dist/core/stack-path.js.map +1 -0
  57. package/dist/core/stack.js +509 -0
  58. package/dist/core/stack.js.map +1 -0
  59. package/dist/core/terraform.js +393 -0
  60. package/dist/core/terraform.js.map +1 -0
  61. package/dist/data.js +37 -0
  62. package/dist/data.js.map +1 -0
  63. package/dist/engine/actions.js +99 -0
  64. package/dist/engine/actions.js.map +1 -0
  65. package/dist/engine/app-commands.js +106 -0
  66. package/dist/engine/app-commands.js.map +1 -0
  67. package/dist/engine/app-start.js +167 -0
  68. package/dist/engine/app-start.js.map +1 -0
  69. package/dist/engine/app-state.js +43 -0
  70. package/dist/engine/app-state.js.map +1 -0
  71. package/dist/engine/boards.js +219 -0
  72. package/dist/engine/boards.js.map +1 -0
  73. package/dist/engine/branch.js +194 -0
  74. package/dist/engine/branch.js.map +1 -0
  75. package/dist/engine/browser-console.js +45 -0
  76. package/dist/engine/browser-console.js.map +1 -0
  77. package/dist/engine/calls.js +97 -0
  78. package/dist/engine/calls.js.map +1 -0
  79. package/dist/engine/checks.js +270 -0
  80. package/dist/engine/checks.js.map +1 -0
  81. package/dist/engine/clones.js +67 -0
  82. package/dist/engine/clones.js.map +1 -0
  83. package/dist/engine/config.js +26 -0
  84. package/dist/engine/config.js.map +1 -0
  85. package/dist/engine/deployed.js +488 -0
  86. package/dist/engine/deployed.js.map +1 -0
  87. package/dist/engine/devices.js +81 -0
  88. package/dist/engine/devices.js.map +1 -0
  89. package/dist/engine/discover.js +236 -0
  90. package/dist/engine/discover.js.map +1 -0
  91. package/dist/engine/down.js +253 -0
  92. package/dist/engine/down.js.map +1 -0
  93. package/dist/engine/history.js +215 -0
  94. package/dist/engine/history.js.map +1 -0
  95. package/dist/engine/investigate.js +278 -0
  96. package/dist/engine/investigate.js.map +1 -0
  97. package/dist/engine/libraries.js +129 -0
  98. package/dist/engine/libraries.js.map +1 -0
  99. package/dist/engine/linked.js +146 -0
  100. package/dist/engine/linked.js.map +1 -0
  101. package/dist/engine/listen.js +223 -0
  102. package/dist/engine/listen.js.map +1 -0
  103. package/dist/engine/locks.js +38 -0
  104. package/dist/engine/locks.js.map +1 -0
  105. package/dist/engine/messages.js +177 -0
  106. package/dist/engine/messages.js.map +1 -0
  107. package/dist/engine/needs.js +363 -0
  108. package/dist/engine/needs.js.map +1 -0
  109. package/dist/engine/processes.js +350 -0
  110. package/dist/engine/processes.js.map +1 -0
  111. package/dist/engine/query.js +241 -0
  112. package/dist/engine/query.js.map +1 -0
  113. package/dist/engine/queues.js +100 -0
  114. package/dist/engine/queues.js.map +1 -0
  115. package/dist/engine/recipes.js +248 -0
  116. package/dist/engine/recipes.js.map +1 -0
  117. package/dist/engine/reload.js +32 -0
  118. package/dist/engine/reload.js.map +1 -0
  119. package/dist/engine/repos.js +214 -0
  120. package/dist/engine/repos.js.map +1 -0
  121. package/dist/engine/research.js +134 -0
  122. package/dist/engine/research.js.map +1 -0
  123. package/dist/engine/run-logs.js +79 -0
  124. package/dist/engine/run-logs.js.map +1 -0
  125. package/dist/engine/run.js +54 -0
  126. package/dist/engine/run.js.map +1 -0
  127. package/dist/engine/runs.js +223 -0
  128. package/dist/engine/runs.js.map +1 -0
  129. package/dist/engine/session.js +130 -0
  130. package/dist/engine/session.js.map +1 -0
  131. package/dist/engine/share.js +124 -0
  132. package/dist/engine/share.js.map +1 -0
  133. package/dist/engine/stack-file.js +206 -0
  134. package/dist/engine/stack-file.js.map +1 -0
  135. package/dist/engine/stack-share.js +86 -0
  136. package/dist/engine/stack-share.js.map +1 -0
  137. package/dist/engine/stacks.js +143 -0
  138. package/dist/engine/stacks.js.map +1 -0
  139. package/dist/engine/sync.js +214 -0
  140. package/dist/engine/sync.js.map +1 -0
  141. package/dist/engine/traces.js +65 -0
  142. package/dist/engine/traces.js.map +1 -0
  143. package/dist/engine/up.js +621 -0
  144. package/dist/engine/up.js.map +1 -0
  145. package/dist/engine/watch.js +71 -0
  146. package/dist/engine/watch.js.map +1 -0
  147. package/dist/engine/wire.js +120 -0
  148. package/dist/engine/wire.js.map +1 -0
  149. package/dist/failure.js +16 -0
  150. package/dist/failure.js.map +1 -0
  151. package/dist/github.js +95 -0
  152. package/dist/github.js.map +1 -0
  153. package/dist/ids.js +6 -0
  154. package/dist/ids.js.map +1 -0
  155. package/dist/json-files.js +36 -0
  156. package/dist/json-files.js.map +1 -0
  157. package/dist/koppler.mjs +840 -0
  158. package/dist/koppler.mjs.map +1 -0
  159. package/dist/lambda-local.mjs +250 -0
  160. package/dist/lambda-local.mjs.map +1 -0
  161. package/dist/lambda-secrets-proxy.go +31 -0
  162. package/dist/mock-server.mjs +23 -0
  163. package/dist/mock-server.mjs.map +1 -0
  164. package/dist/page/assets/JetBrainsMono-cyrillic-D2jMJ_bk.woff2 +0 -0
  165. package/dist/page/assets/JetBrainsMono-greek-D2nYnAec.woff2 +0 -0
  166. package/dist/page/assets/JetBrainsMono-latin-Db4Uuiha.woff2 +0 -0
  167. package/dist/page/assets/JetBrainsMono-latin-ext-Bnd2h4Br.woff2 +0 -0
  168. package/dist/page/assets/JetBrainsMono-vietnamese-CNlsqbWb.woff2 +0 -0
  169. package/dist/page/assets/SchibstedGrotesk-latin-DxefFeRw.woff2 +0 -0
  170. package/dist/page/assets/SchibstedGrotesk-latin-ext-CnpJE18X.woff2 +0 -0
  171. package/dist/page/assets/index-Bkj_pX35.js +42 -0
  172. package/dist/page/assets/index-Dq45jswH.css +1 -0
  173. package/dist/page/index.html +14 -0
  174. package/dist/page/theme.js +8 -0
  175. package/dist/paths.js +19 -0
  176. package/dist/paths.js.map +1 -0
  177. package/dist/safe-env.js +73 -0
  178. package/dist/safe-env.js.map +1 -0
  179. package/dist/sam-local.mjs +135 -0
  180. package/dist/sam-local.mjs.map +1 -0
  181. package/dist/scrub.js +87 -0
  182. package/dist/scrub.js.map +1 -0
  183. package/dist/secret-check.mjs +262 -0
  184. package/dist/secret-check.mjs.map +1 -0
  185. package/dist/server/browser-console.js +117 -0
  186. package/dist/server/browser-console.js.map +1 -0
  187. package/dist/server/cable-test.js +365 -0
  188. package/dist/server/cable-test.js.map +1 -0
  189. package/dist/server/choices.js +51 -0
  190. package/dist/server/choices.js.map +1 -0
  191. package/dist/server/files.js +107 -0
  192. package/dist/server/files.js.map +1 -0
  193. package/dist/server/gate.js +128 -0
  194. package/dist/server/gate.js.map +1 -0
  195. package/dist/server/logs.js +76 -0
  196. package/dist/server/logs.js.map +1 -0
  197. package/dist/server/mobile.js +113 -0
  198. package/dist/server/mobile.js.map +1 -0
  199. package/dist/server/routes.js +326 -0
  200. package/dist/server/routes.js.map +1 -0
  201. package/dist/server/runs.js +111 -0
  202. package/dist/server/runs.js.map +1 -0
  203. package/dist/server/sanitize.js +242 -0
  204. package/dist/server/sanitize.js.map +1 -0
  205. package/dist/server/secrets.js +111 -0
  206. package/dist/server/secrets.js.map +1 -0
  207. package/dist/server/status.js +321 -0
  208. package/dist/server/status.js.map +1 -0
  209. package/dist/server/token.js +38 -0
  210. package/dist/server/token.js.map +1 -0
  211. package/dist/server/waiting.js +79 -0
  212. package/dist/server/waiting.js.map +1 -0
  213. package/dist/status-watch.mjs +63 -0
  214. package/dist/status-watch.mjs.map +1 -0
  215. package/package.json +74 -4
  216. package/skills/koppler-run/SKILL.md +169 -0
  217. package/skills/koppler-run/VERSION +1 -0
  218. package/skills/koppler-run/references/action-log.md +50 -0
  219. package/skills/koppler-run/references/permissions.md +25 -0
  220. package/skills/koppler-run/references/preparing-nodes.md +62 -0
  221. package/skills/koppler-run/references/reporting-bugs.md +76 -0
  222. package/skills/koppler-run/references/research.md +40 -0
  223. package/skills/koppler-run/references/secrets.md +56 -0
  224. package/skills/koppler-run/references/stack.md +197 -0
  225. 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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"}
@@ -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":"AAAA,+HAA+H;AAC/H,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAU9C,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,IAAI,GAAQ,CAAC;IACb,IAAI,KAAe,CAAC;IACpB,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;QACpB,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAC1E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3E,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACjF,MAAM,CAAC,KAAK,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC;IAC1D,2GAA2G;IAC3G,IAAI,GAAG,CAAC,QAAQ,KAAK,YAAY,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QACvE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACtE,IAAI,GAAG,CAAC,QAAQ,KAAK,2BAA2B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrE,MAAM,CAAC,GAAG,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,KAAK;aAC9B,KAAK,CAAC,CAAC,CAAC;aACR,IAAI,CAAC,GAAG,CAAC;aACT,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC;aAC7B,KAAK,CAAC,GAAG,CAAC,CAAC;QACd,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACpD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AACD,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAgB,EAAU,EAAE,CAClD,sBAAsB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAEhF,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC;AAC9B,qDAAqD;AACrD,MAAM,UAAU,EAAE,CAAC,IAAc,EAAE,IAAa;IAC9C,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,MAAM,KAAK,GAAG,QAAQ,CACpB,IAAI,EACJ,CAAC,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,EACxC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YACxB,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;QACpD,CAAC,CACF,CAAC;QACF,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC;AAED,yEAAyE;AACzE,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAgB;IAC7C,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IACxC,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC;QACrB,SAAS,KAAK,IAAI,IAAI,aAAa,IAAI,QAAQ,kBAAkB,CAAC,GAAG,CAAC,EAAE;QACxE,IAAI;QACJ,oCAAoC;KACrC,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,EAAE;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC;IAC/B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,qCAAqC,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,EAAE,EAAE;YAChG,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;YAClC,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,IAAI,SAAS,CAAC;QAC9E,OAAO,QAAQ,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAClF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,4FAA4F;AAC5F,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAAgB,EAChB,IAAY,EACZ,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAmD;IAExE,MAAM,IAAI,GAAG,SAAS,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;IAChD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,CAAC,GAAG,IAAI,YAAY,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3F,IAAI,CAAC,IAAI,CAAC,EAAE;QACV,OAAO,EAAE,KAAK,EAAE,uFAAuF,EAAE,CAAC;IAC5G,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,WAAW,CAAC,EAAE,EAAE,GAAG,EAAE,cAAc,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACjH,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,KAAK,EAAE,yEAAyE,EAAE,CAAC;IAC1G,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,CAAC,GAAG,IAAI,aAAa,IAAI,CAAC,IAAI,QAAQ,kBAAkB,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3G,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,aAAa,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE;QACnE,OAAO,EAAE,KAAK;QACd,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC7C,MAAM;QACN,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;KACzC,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,EAAE,KAAK,EAAE,+CAA+C,EAAE,CAAC;IAC/E,0FAA0F;IAC1F,MAAM,QAAQ,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IAC5F,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE;QAC5E,KAAK;QACL,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,IAAI;QACV,IAAI;KACL,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,EAAE;QACd,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE;QAC5B,CAAC,CAAC,EAAE,KAAK,EAAE,kEAAkE,EAAE,CAAC;AACpF,CAAC"}
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
@@ -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"}