kvman 0.3.2 → 0.4.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.
@@ -8,6 +8,7 @@ export type RunArguments = {
8
8
  yes: boolean;
9
9
  open: boolean;
10
10
  logLevel: LogLevel;
11
+ pipe: boolean;
11
12
  };
12
13
  export type UninstallArguments = {
13
14
  kind: 'uninstall';
@@ -20,7 +21,7 @@ export type CliArguments = {
20
21
  } | {
21
22
  kind: 'version';
22
23
  } | RunArguments | UninstallArguments;
23
- export declare const usage = "Usage:\n kvman [--mode web] [--preset coder] [--home <dir>] [--port <n>] [--yes] [--no-open] [--log-level <level>]\n kvman uninstall [--home <dir>] [--yes] [--keep-data | --delete-data]\n kvman --help | --version\n\nOptions:\n --mode <mode> How kvman runs: web (the default).\n --preset <preset> A bundled preset, <home>/presets/<name>.json, or a preset file such as ./app.json. Default: coder.\n --home <dir> kvman's home folder. Default: KVMAN_HOME, else ~/.kvman.\n --port <n> The port to listen on (0 picks a free one). Default: the kernel.port setting (3737).\n --yes Accept new extension versions without asking.\n --no-open Don't open the browser.\n --log-level <level> debug, info (the default), warn, or error.\n --help Show this help.\n --version Show kvman's version.\n\nUninstall options:\n --home <dir> The home folder whose data and running kvman are meant.\n --yes Remove kvman without asking; its data is kept unless --delete-data is given.\n --keep-data Keep kvman's data without asking.\n --delete-data Delete kvman's data without asking.\n";
24
+ export declare const usage = "Usage:\n kvman [--mode web] [--preset coder] [--home <dir>] [--port <n>] [--yes] [--no-open] [--log-level <level>] [--pipe]\n kvman uninstall [--home <dir>] [--yes] [--keep-data | --delete-data]\n kvman --help | --version\n\nOptions:\n --mode <mode> How kvman runs: web (the default).\n --preset <preset> A bundled preset, <home>/presets/<name>.json, or a preset file such as ./app.json. Default: coder.\n --home <dir> kvman's home folder. Default: KVMAN_HOME, else ~/.kvman.\n --port <n> The port to listen on (0 picks a free one). Default: the kernel.port setting (3737).\n --yes Accept new extension versions without asking.\n --no-open Don't open the browser.\n --log-level <level> debug, info (the default), warn, or error.\n --pipe For a program that starts kvman: JSON lines on stdout, the trust answer on stdin, and a stop when stdin closes.\n --help Show this help.\n --version Show kvman's version.\n\nUninstall options:\n --home <dir> The home folder whose data and running kvman are meant.\n --yes Remove kvman without asking; its data is kept unless --delete-data is given.\n --keep-data Keep kvman's data without asking.\n --delete-data Delete kvman's data without asking.\n";
24
25
  export declare function parseArguments(argv: readonly string[]): CliArguments;
25
26
  export declare function kvmanHome(flag: string | undefined, environment: NodeJS.ProcessEnv, userFolder?: string): string;
26
27
  //# sourceMappingURL=arguments.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"arguments.d.ts","sourceRoot":"","sources":["../src/arguments.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAM9C,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,KAAK,CAAC;IACZ,IAAI,EAAE,KAAK,GAAG,SAAS,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,GAAG,EAAE,OAAO,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,QAAQ,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,GAAG,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAA;CAAE,CAAC;AAEhI,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GAAG,YAAY,GAAG,kBAAkB,CAAC;AAEtG,eAAO,MAAM,KAAK,2rCAqBjB,CAAC;AAiEF,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,YAAY,CAepE;AAGD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC,UAAU,EAAE,UAAU,GAAE,MAAqB,GAAG,MAAM,CAG7H"}
1
+ {"version":3,"file":"arguments.d.ts","sourceRoot":"","sources":["../src/arguments.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAO9C,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,KAAK,CAAC;IACZ,IAAI,EAAE,KAAK,GAAG,SAAS,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,GAAG,EAAE,OAAO,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,GAAG,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAA;CAAE,CAAC;AAEhI,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GAAG,YAAY,GAAG,kBAAkB,CAAC;AAEtG,eAAO,MAAM,KAAK,60CAsBjB,CAAC;AAkEF,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,YAAY,CAgBpE;AAGD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC,UAAU,EAAE,UAAU,GAAE,MAAqB,GAAG,MAAM,CAG7H"}
package/dist/arguments.js CHANGED
@@ -3,7 +3,7 @@ import path from 'node:path';
3
3
  import { parseArgs } from 'node:util';
4
4
  import { ProblemError, z } from '@kvman/sdk';
5
5
  export const usage = `Usage:
6
- kvman [--mode web] [--preset coder] [--home <dir>] [--port <n>] [--yes] [--no-open] [--log-level <level>]
6
+ kvman [--mode web] [--preset coder] [--home <dir>] [--port <n>] [--yes] [--no-open] [--log-level <level>] [--pipe]
7
7
  kvman uninstall [--home <dir>] [--yes] [--keep-data | --delete-data]
8
8
  kvman --help | --version
9
9
 
@@ -15,6 +15,7 @@ Options:
15
15
  --yes Accept new extension versions without asking.
16
16
  --no-open Don't open the browser.
17
17
  --log-level <level> debug, info (the default), warn, or error.
18
+ --pipe For a program that starts kvman: JSON lines on stdout, the trust answer on stdin, and a stop when stdin closes.
18
19
  --help Show this help.
19
20
  --version Show kvman's version.
20
21
 
@@ -32,6 +33,7 @@ const flags = {
32
33
  yes: { type: 'boolean' },
33
34
  'no-open': { type: 'boolean' },
34
35
  'log-level': { type: 'string' },
36
+ pipe: { type: 'boolean' },
35
37
  help: { type: 'boolean' },
36
38
  version: { type: 'boolean' },
37
39
  };
@@ -102,6 +104,7 @@ export function parseArguments(argv) {
102
104
  yes: values.yes === true,
103
105
  open: values['no-open'] !== true,
104
106
  logLevel: parsed(logLevelSchema, values['log-level']),
107
+ pipe: values.pipe === true,
105
108
  };
106
109
  }
107
110
  // `--home`, else `KVMAN_HOME`, else `~/.kvman` (plan 01 §1.3).
@@ -1 +1 @@
1
- {"version":3,"file":"arguments.js","sourceRoot":"","sources":["../src/arguments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,YAAY,CAAC;AAsB7C,MAAM,CAAC,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;;;;;CAqBpB,CAAC;AAEF,MAAM,KAAK,GAAG;IACZ,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;IACxB,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;IAC1B,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;IACxB,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;IACxB,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;IACxB,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;IAC9B,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;IAC/B,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;IACzB,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;CACpB,CAAC;AAEX,MAAM,cAAc,GAAG;IACrB,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;IACxB,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;IACxB,WAAW,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;IAChC,aAAa,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;CAC1B,CAAC;AAEX,MAAM,UAAU,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;AACnF,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,oDAAoD,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACnJ,MAAM,UAAU,GAAG,CAAC;KACjB,MAAM,EAAE;KACR,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,kDAAkD,EAAE,CAAC;KAC7E,SAAS,CAAC,MAAM,CAAC;KACjB,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,kDAAkD,EAAE,CAAC,CAAC;KAC3F,QAAQ,EAAE,CAAC;AAEd,SAAS,OAAO,CAAC,OAAe;IAC9B,OAAO,IAAI,YAAY,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,MAAM,CAAS,MAAyB,EAAE,KAAc;IAC/D,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,MAAM,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAChG,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,SAAS,SAAS,CAAC,IAAuB;IACxC,IAAI,CAAC;QACH,OAAO,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/F,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,SAAS;YAAE,MAAM,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7D,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAuB;IACjD,IAAI,CAAC;QACH,OAAO,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,CAAC;IACxG,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,SAAS;YAAE,MAAM,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7D,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,IAAuB;IAC7C,MAAM,EAAE,MAAM,EAAE,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,MAAM,CAAC,WAAW,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,IAAI;QAAE,MAAM,OAAO,CAAC,8CAA8C,CAAC,CAAC;IAClI,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;IACvG,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,KAAK,IAAI,EAAE,IAAI,EAAE,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAuB;IACpD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,WAAW;QAAE,OAAO,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAClD,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IACxD,OAAO;QACL,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC;QACrC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC;QACrC,GAAG,EAAE,MAAM,CAAC,GAAG,KAAK,IAAI;QACxB,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,KAAK,IAAI;QAChC,QAAQ,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;KACtD,CAAC;AACJ,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,SAAS,CAAC,IAAwB,EAAE,WAA8B,EAAE,aAAqB,EAAE,CAAC,OAAO,EAAE;IACnH,MAAM,MAAM,GAAG,IAAI,IAAI,WAAW,CAAC,YAAY,CAAC,CAAC;IACjD,OAAO,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACxG,CAAC"}
1
+ {"version":3,"file":"arguments.js","sourceRoot":"","sources":["../src/arguments.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { ExtensionVersion } from '@kvman/kernel';
2
+ import { type Problem } from '@kvman/sdk';
3
+ export type PipeLine = {
4
+ kind: 'trust';
5
+ language: string;
6
+ versions: ExtensionVersion[];
7
+ } | {
8
+ kind: 'running';
9
+ url: string;
10
+ port: number;
11
+ } | {
12
+ kind: 'joined';
13
+ url: string;
14
+ port: number;
15
+ } | {
16
+ kind: 'restarting';
17
+ } | {
18
+ kind: 'failed';
19
+ language?: string;
20
+ problem: Problem;
21
+ };
22
+ export declare function encodeLine(line: PipeLine): string;
23
+ export declare function trustLine(language: string, versions: readonly ExtensionVersion[]): PipeLine;
24
+ export declare function failedLine(problem: Problem, language: string | undefined): PipeLine;
25
+ export declare function acceptsTrust(line: string): boolean;
26
+ //# sourceMappingURL=pipe-lines.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipe-lines.d.ts","sourceRoot":"","sources":["../../src/pipe/pipe-lines.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAK,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAI7C,MAAM,MAAM,QAAQ,GAChB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,gBAAgB,EAAE,CAAA;CAAE,GACjE;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GACtB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC;AAE5D,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAEjD;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,gBAAgB,EAAE,GAAG,QAAQ,CAE3F;AAGD,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,CAEnF;AAKD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAOlD"}
@@ -0,0 +1,24 @@
1
+ import { z } from '@kvman/sdk';
2
+ export function encodeLine(line) {
3
+ return `${JSON.stringify(line)}\n`;
4
+ }
5
+ export function trustLine(language, versions) {
6
+ return { kind: 'trust', language, versions: versions.map(({ name, version, source }) => ({ name, version, source })) };
7
+ }
8
+ // A start that fails before its preset is found has no language (ADR 0038, 18).
9
+ export function failedLine(problem, language) {
10
+ return language === undefined ? { kind: 'failed', problem } : { kind: 'failed', language, problem };
11
+ }
12
+ const answerSchema = z.strictObject({ trust: z.literal(true) });
13
+ // Only `{ "trust": true }` accepts; any other line declines (ADR 0038, 20).
14
+ export function acceptsTrust(line) {
15
+ try {
16
+ return answerSchema.safeParse(JSON.parse(line)).success;
17
+ }
18
+ catch (error) {
19
+ if (error instanceof SyntaxError)
20
+ return false;
21
+ throw error;
22
+ }
23
+ }
24
+ //# sourceMappingURL=pipe-lines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipe-lines.js","sourceRoot":"","sources":["../../src/pipe/pipe-lines.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAgB,MAAM,YAAY,CAAC;AAW7C,MAAM,UAAU,UAAU,CAAC,IAAc;IACvC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,QAAgB,EAAE,QAAqC;IAC/E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC;AACzH,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,UAAU,CAAC,OAAgB,EAAE,QAA4B;IACvE,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AACtG,CAAC;AAED,MAAM,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAEhE,4EAA4E;AAC5E,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;IAC1D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,WAAW;YAAE,OAAO,KAAK,CAAC;QAC/C,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { TrustDecision } from '@kvman/kernel';
2
+ import type { Pipe } from './pipe.ts';
3
+ export declare function pipeTrustDecision(yes: boolean, pipe: Pipe, language: () => string): TrustDecision;
4
+ //# sourceMappingURL=pipe-trust.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipe-trust.d.ts","sourceRoot":"","sources":["../../src/pipe/pipe-trust.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAMtC,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,MAAM,GAAG,aAAa,CAOjG"}
@@ -0,0 +1,13 @@
1
+ import { acceptsTrust, trustLine } from "./pipe-lines.js";
2
+ // The trust question of a piped run (plan 02 §2.9, plan 14 §14.2): a `trust` line, then the next line of the input as
3
+ // the answer. It is asked with or without a terminal, and an input that ends declines.
4
+ export function pipeTrustDecision(yes, pipe, language) {
5
+ return async (versions) => {
6
+ if (yes)
7
+ return true;
8
+ pipe.write(trustLine(language(), versions));
9
+ const answer = await pipe.nextLine();
10
+ return answer !== undefined && acceptsTrust(answer);
11
+ };
12
+ }
13
+ //# sourceMappingURL=pipe-trust.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipe-trust.js","sourceRoot":"","sources":["../../src/pipe/pipe-trust.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE1D,sHAAsH;AACtH,uFAAuF;AAEvF,MAAM,UAAU,iBAAiB,CAAC,GAAY,EAAE,IAAU,EAAE,QAAsB;IAChF,OAAO,KAAK,EAAE,QAAQ,EAAE,EAAE;QACxB,IAAI,GAAG;YAAE,OAAO,IAAI,CAAC;QACrB,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACrC,OAAO,MAAM,KAAK,SAAS,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;IACtD,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { Terminal } from '../trust-prompt.ts';
2
+ import { type PipeLine } from './pipe-lines.ts';
3
+ export type Pipe = {
4
+ write(line: PipeLine): void;
5
+ nextLine(): Promise<string | undefined>;
6
+ ended: Promise<void>;
7
+ hasEnded(): boolean;
8
+ dispose(): void;
9
+ };
10
+ export declare function openPipe(terminal: Terminal): Pipe;
11
+ //# sourceMappingURL=pipe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipe.d.ts","sourceRoot":"","sources":["../../src/pipe/pipe.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAK5D,MAAM,MAAM,IAAI,GAAG;IACjB,KAAK,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;IAE5B,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAExC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACrB,QAAQ,IAAI,OAAO,CAAC;IAEpB,OAAO,IAAI,IAAI,CAAC;CACjB,CAAC;AAEF,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAsCjD"}
@@ -0,0 +1,42 @@
1
+ import { createInterface } from 'node:readline';
2
+ import { encodeLine } from "./pipe-lines.js";
3
+ export function openPipe(terminal) {
4
+ const lines = createInterface({ input: terminal.input });
5
+ let ended = false;
6
+ let disposed = false;
7
+ let waiting;
8
+ let end = () => undefined;
9
+ const whenEnded = new Promise((resolve) => {
10
+ end = resolve;
11
+ });
12
+ const answer = (line) => {
13
+ const waiter = waiting;
14
+ waiting = undefined;
15
+ waiter?.(line);
16
+ };
17
+ lines.on('line', answer);
18
+ lines.once('close', () => {
19
+ if (disposed)
20
+ return;
21
+ ended = true;
22
+ answer(undefined);
23
+ end();
24
+ });
25
+ return {
26
+ write: (line) => {
27
+ terminal.output.write(encodeLine(line));
28
+ },
29
+ nextLine: () => ended
30
+ ? Promise.resolve(undefined)
31
+ : new Promise((resolve) => {
32
+ waiting = resolve;
33
+ }),
34
+ ended: whenEnded,
35
+ hasEnded: () => ended,
36
+ dispose: () => {
37
+ disposed = true;
38
+ lines.close();
39
+ },
40
+ };
41
+ }
42
+ //# sourceMappingURL=pipe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipe.js","sourceRoot":"","sources":["../../src/pipe/pipe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,UAAU,EAAiB,MAAM,iBAAiB,CAAC;AAgB5D,MAAM,UAAU,QAAQ,CAAC,QAAkB;IACzC,MAAM,KAAK,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IACzD,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,OAAyD,CAAC;IAC9D,IAAI,GAAG,GAAe,GAAG,EAAE,CAAC,SAAS,CAAC;IACtC,MAAM,SAAS,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAC9C,GAAG,GAAG,OAAO,CAAC;IAChB,CAAC,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,CAAC,IAAwB,EAAQ,EAAE;QAChD,MAAM,MAAM,GAAG,OAAO,CAAC;QACvB,OAAO,GAAG,SAAS,CAAC;QACpB,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC,CAAC;IACF,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzB,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;QACvB,IAAI,QAAQ;YAAE,OAAO;QACrB,KAAK,GAAG,IAAI,CAAC;QACb,MAAM,CAAC,SAAS,CAAC,CAAC;QAClB,GAAG,EAAE,CAAC;IACR,CAAC,CAAC,CAAC;IACH,OAAO;QACL,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE;YACd,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1C,CAAC;QACD,QAAQ,EAAE,GAAG,EAAE,CACb,KAAK;YACH,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;YAC5B,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBACtB,OAAO,GAAG,OAAO,CAAC;YACpB,CAAC,CAAC;QACR,KAAK,EAAE,SAAS;QAChB,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK;QACrB,OAAO,EAAE,GAAG,EAAE;YACZ,QAAQ,GAAG,IAAI,CAAC;YAChB,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { type RunArguments } from './arguments.ts';
2
- import type { Terminal } from './trust-prompt.ts';
2
+ import { type Terminal } from './trust-prompt.ts';
3
3
  export type CliEnvironment = {
4
4
  variables: NodeJS.ProcessEnv;
5
5
  startFolder: string;
@@ -1 +1 @@
1
- {"version":3,"file":"run-kvman.d.ts","sourceRoot":"","sources":["../src/run-kvman.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAQ9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAMlD,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC1B,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC;CACrC,CAAC;AA2CF,wBAAsB,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAiB/F"}
1
+ {"version":3,"file":"run-kvman.d.ts","sourceRoot":"","sources":["../src/run-kvman.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAY9D,OAAO,EAAiB,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAOjE,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC1B,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC;CACrC,CAAC;AAkFF,wBAAsB,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ/F"}
package/dist/run-kvman.js CHANGED
@@ -1,26 +1,33 @@
1
- import { discardPresetBackup, startHttp } from '@kvman/kernel';
1
+ import { discardPresetBackup, startHttp, storedLanguage } from '@kvman/kernel';
2
+ import { ProblemError } from '@kvman/sdk';
2
3
  import { kvmanHome } from "./arguments.js";
3
4
  import { openBrowser } from "./browser.js";
4
5
  import { bundledPresetsFolder } from "./bundled.js";
5
6
  import { handOver } from "./hand-over.js";
6
7
  import { takeLock } from "./lock-file.js";
8
+ import { failedLine } from "./pipe/pipe-lines.js";
9
+ import { pipeTrustDecision } from "./pipe/pipe-trust.js";
10
+ import { openPipe } from "./pipe/pipe.js";
7
11
  import { defaultPreset, editableFile, findPreset } from "./preset-lookup.js";
12
+ import { pipeReport, terminalReport } from "./run-report.js";
8
13
  import { startOrUndo } from "./start-kernel.js";
9
14
  import { listenForStop } from "./stop-signals.js";
15
+ import { trustDecision } from "./trust-prompt.js";
10
16
  function workspaceUrl(port, workspaceId) {
11
17
  return `http://127.0.0.1:${String(port)}/?workspace=${encodeURIComponent(workspaceId)}`;
12
18
  }
13
- async function joinRunning(args, lock, folders, environment) {
19
+ async function joinRunning(args, lock, folders, environment, report) {
14
20
  const preset = args.preset === undefined ? undefined : findPreset(args.preset, folders).preset.name;
15
21
  const { port, workspace } = await handOver(lock, environment.startFolder, { preset, mode: args.mode });
16
22
  const url = workspaceUrl(port, workspace.id);
17
- environment.terminal.output.write(`kvman is already running; this folder is open at ${url}\n`);
23
+ report.joined(url, port);
18
24
  if (args.open)
19
25
  openBrowser(environment.platform, url, (reason) => environment.errors.write(`The browser could not be opened (${reason}).\n`));
20
26
  return 0;
21
27
  }
22
28
  // A good start (the port is listening) deletes the backup of the last edit (ADR 0024, 4).
23
29
  async function serve(args, kernel, lock, environment, run) {
30
+ const { report, pipe } = run.talk;
24
31
  const stop = listenForStop(() => {
25
32
  lock.release();
26
33
  environment.exitAtOnce(130);
@@ -33,38 +40,68 @@ async function serve(args, kernel, lock, environment, run) {
33
40
  lock.setPort(http.port);
34
41
  discardPresetBackup(run.presetFile);
35
42
  const url = workspaceUrl(http.port, kernel.startWorkspace.id);
36
- environment.terminal.output.write(`kvman is running at ${url}\n`);
43
+ report.running(url, http.port);
37
44
  if (run.open)
38
45
  openBrowser(environment.platform, url, (reason) => kernel.web.logger.warn('The browser could not be opened.', { reason }));
39
- const requested = await Promise.race([stop.stopRequested.then(() => 'stopped'), kernel.restartRequested.then(() => 'restart')]);
46
+ const stopped = () => 'stopped';
47
+ const requested = await Promise.race([
48
+ stop.stopRequested.then(stopped),
49
+ ...(pipe === undefined ? [] : [pipe.ended.then(stopped)]),
50
+ kernel.restartRequested.then(() => 'restart'),
51
+ ]);
40
52
  const closing = http.close();
41
53
  await kernel.close();
42
54
  await closing;
43
- return stop.isRequested() ? 'stopped' : requested;
55
+ return stop.isRequested() || pipe?.hasEnded() === true ? 'stopped' : requested;
44
56
  }
45
57
  finally {
46
58
  stop.dispose();
47
59
  }
48
60
  }
49
- export async function runKvman(args, environment) {
61
+ async function runWith(args, environment, talk) {
50
62
  const home = kvmanHome(args.home, environment.variables, environment.userFolder);
51
63
  const folders = { bundled: bundledPresetsFolder, home, start: environment.startFolder };
52
- const lock = takeLock(home);
53
- if (lock.kind === 'held')
54
- return joinRunning(args, lock.lock, folders, environment);
55
- // A program kvman runs (kvbuilder's `kvman-docs`) finds this kvman through `<home>/kvman.lock` (plan 01 §1.2).
56
- process.env['KVMAN_HOME'] = home;
57
- const presetFile = editableFile(args.preset ?? defaultPreset, folders);
64
+ // Known once a start has found its preset; a `failed` line before that has no language (ADR 0038, 18).
65
+ let language;
66
+ const trustFor = (presetSettings) => {
67
+ const stored = () => storedLanguage(home, presetSettings);
68
+ language = stored;
69
+ return talk.pipe === undefined ? trustDecision(args.yes, environment.terminal) : pipeTrustDecision(args.yes, talk.pipe, stored);
70
+ };
58
71
  try {
59
- for (let open = args.open;; open = false) {
60
- const kernel = await startOrUndo(args, folders, environment);
61
- if ((await serve(args, kernel, lock, environment, { open, presetFile })) === 'stopped')
62
- return 0;
63
- environment.terminal.output.write('kvman is restarting…\n');
72
+ const lock = takeLock(home);
73
+ if (lock.kind === 'held')
74
+ return await joinRunning(args, lock.lock, folders, environment, talk.report);
75
+ // A program kvman runs (kvbuilder's `kvman-docs`) finds this kvman through `<home>/kvman.lock` (plan 01 §1.2).
76
+ process.env['KVMAN_HOME'] = home;
77
+ const presetFile = editableFile(args.preset ?? defaultPreset, folders);
78
+ try {
79
+ for (let open = args.open;; open = false) {
80
+ const kernel = await startOrUndo(args, folders, environment, trustFor);
81
+ if ((await serve(args, kernel, lock, environment, { open, presetFile, talk })) === 'stopped')
82
+ return 0;
83
+ talk.report.restarting();
84
+ }
85
+ }
86
+ finally {
87
+ lock.release();
64
88
  }
65
89
  }
90
+ catch (error) {
91
+ if (talk.pipe !== undefined && error instanceof ProblemError)
92
+ talk.pipe.write(failedLine(error.problem, language?.()));
93
+ throw error;
94
+ }
95
+ }
96
+ export async function runKvman(args, environment) {
97
+ if (!args.pipe)
98
+ return runWith(args, environment, { report: terminalReport(environment.terminal.output), pipe: undefined });
99
+ const pipe = openPipe(environment.terminal);
100
+ try {
101
+ return await runWith(args, environment, { report: pipeReport(pipe), pipe });
102
+ }
66
103
  finally {
67
- lock.release();
104
+ pipe.dispose();
68
105
  }
69
106
  }
70
107
  //# sourceMappingURL=run-kvman.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-kvman.js","sourceRoot":"","sources":["../src/run-kvman.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-kvman.js","sourceRoot":"","sources":["../src/run-kvman.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { Pipe } from './pipe/pipe.ts';
2
+ export type RunReport = {
3
+ running(url: string, port: number): void;
4
+ joined(url: string, port: number): void;
5
+ restarting(): void;
6
+ };
7
+ export declare function terminalReport(output: NodeJS.WritableStream): RunReport;
8
+ export declare function pipeReport(pipe: Pipe): RunReport;
9
+ //# sourceMappingURL=run-report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-report.d.ts","sourceRoot":"","sources":["../src/run-report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAK3C,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,UAAU,IAAI,IAAI,CAAC;CACpB,CAAC;AAEF,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,GAAG,SAAS,CAYvE;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,CAMhD"}
@@ -0,0 +1,21 @@
1
+ export function terminalReport(output) {
2
+ return {
3
+ running: (url) => {
4
+ output.write(`kvman is running at ${url}\n`);
5
+ },
6
+ joined: (url) => {
7
+ output.write(`kvman is already running; this folder is open at ${url}\n`);
8
+ },
9
+ restarting: () => {
10
+ output.write('kvman is restarting…\n');
11
+ },
12
+ };
13
+ }
14
+ export function pipeReport(pipe) {
15
+ return {
16
+ running: (url, port) => pipe.write({ kind: 'running', url, port }),
17
+ joined: (url, port) => pipe.write({ kind: 'joined', url, port }),
18
+ restarting: () => pipe.write({ kind: 'restarting' }),
19
+ };
20
+ }
21
+ //# sourceMappingURL=run-report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-report.js","sourceRoot":"","sources":["../src/run-report.ts"],"names":[],"mappings":"AAWA,MAAM,UAAU,cAAc,CAAC,MAA6B;IAC1D,OAAO;QACL,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACf,MAAM,CAAC,KAAK,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAAC;QAC/C,CAAC;QACD,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE;YACd,MAAM,CAAC,KAAK,CAAC,oDAAoD,GAAG,IAAI,CAAC,CAAC;QAC5E,CAAC;QACD,UAAU,EAAE,GAAG,EAAE;YACf,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACzC,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAU;IACnC,OAAO;QACL,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;QAClE,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;QAChE,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;KACrD,CAAC;AACJ,CAAC"}
@@ -1,6 +1,8 @@
1
- import { type Kernel } from '@kvman/kernel';
1
+ import { type Kernel, type TrustDecision } from '@kvman/kernel';
2
+ import { type Json } from '@kvman/sdk';
2
3
  import type { RunArguments } from './arguments.ts';
3
4
  import type { CliEnvironment } from './run-kvman.ts';
4
5
  import { type PresetFolders } from './preset-lookup.ts';
5
- export declare function startOrUndo(args: RunArguments, folders: PresetFolders, environment: CliEnvironment): Promise<Kernel>;
6
+ export type TrustFor = (presetSettings: Readonly<Record<string, Json>>) => TrustDecision;
7
+ export declare function startOrUndo(args: RunArguments, folders: PresetFolders, environment: CliEnvironment, trustFor: TrustFor): Promise<Kernel>;
6
8
  //# sourceMappingURL=start-kernel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"start-kernel.d.ts","sourceRoot":"","sources":["../src/start-kernel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,MAAM,EAAE,MAAM,eAAe,CAAC;AAE9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAA2C,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AA4BjG,wBAAsB,WAAW,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAS1H"}
1
+ {"version":3,"file":"start-kernel.d.ts","sourceRoot":"","sources":["../src/start-kernel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAClG,OAAO,EAAgB,KAAK,IAAI,EAAgB,MAAM,YAAY,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAA2C,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AASjG,MAAM,MAAM,QAAQ,GAAG,CAAC,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,KAAK,aAAa,CAAC;AAsBzF,wBAAsB,WAAW,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAS9I"}
@@ -3,12 +3,8 @@ import { ProblemError } from '@kvman/sdk';
3
3
  import { bundledExtensions } from "./bundled.js";
4
4
  import { defaultPreset, editableFile, findPreset } from "./preset-lookup.js";
5
5
  import { failureLines } from "./terminal.js";
6
- import { trustDecision } from "./trust-prompt.js";
7
- // Starting the kernel for a run (plan 02 §2.14, ADR 0024, 5): a start that fails because of the preset, while the
8
- // backup of the last edit exists, restores the preset and starts once more.
9
- // The failures that a preset edit can cause; `PORT_IN_USE` and the like are not undone by restoring a file.
10
6
  const undoable = new Set(['EXTENSION_INVALID', 'VALIDATION_FAILED']);
11
- function startOnce(args, folders, environment, rolledBack) {
7
+ function startOnce(args, folders, environment, trustFor, rolledBack) {
12
8
  const found = findPreset(args.preset ?? defaultPreset, folders);
13
9
  return startKernel({
14
10
  home: folders.home,
@@ -21,13 +17,13 @@ function startOnce(args, folders, environment, rolledBack) {
21
17
  logLevel: args.logLevel,
22
18
  terminalLog: true,
23
19
  startFolder: environment.startFolder,
24
- trust: trustDecision(args.yes, environment.terminal),
20
+ trust: trustFor(found.preset.settings ?? {}),
25
21
  ...(rolledBack === undefined ? {} : { rolledBack }),
26
22
  });
27
23
  }
28
- export async function startOrUndo(args, folders, environment) {
24
+ export async function startOrUndo(args, folders, environment, trustFor) {
29
25
  try {
30
- return await startOnce(args, folders, environment, undefined);
26
+ return await startOnce(args, folders, environment, trustFor, undefined);
31
27
  }
32
28
  catch (error) {
33
29
  if (!(error instanceof ProblemError) || !undoable.has(error.problem.code))
@@ -35,7 +31,7 @@ export async function startOrUndo(args, folders, environment) {
35
31
  if (!restorePresetBackup(editableFile(args.preset ?? defaultPreset, folders)))
36
32
  throw error;
37
33
  environment.errors.write(`${failureLines(error.problem)}The last change to the preset was undone.\n`);
38
- return startOnce(args, folders, environment, error.problem);
34
+ return startOnce(args, folders, environment, trustFor, error.problem);
39
35
  }
40
36
  }
41
37
  //# sourceMappingURL=start-kernel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"start-kernel.js","sourceRoot":"","sources":["../src/start-kernel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAe,MAAM,eAAe,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAgB,MAAM,YAAY,CAAC;AAExD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAsB,MAAM,oBAAoB,CAAC;AACjG,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,kHAAkH;AAClH,4EAA4E;AAE5E,4GAA4G;AAC5G,MAAM,QAAQ,GAAwB,IAAI,GAAG,CAAC,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,CAAC,CAAC;AAE1F,SAAS,SAAS,CAAC,IAAkB,EAAE,OAAsB,EAAE,WAA2B,EAAE,UAA+B;IACzH,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,IAAI,aAAa,EAAE,OAAO,CAAC,CAAC;IAChE,OAAO,WAAW,CAAC;QACjB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,UAAU,EAAE,WAAW,CAAC,UAAU;QAClC,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,YAAY,EAAE,KAAK,CAAC,MAAM;QAC1B,OAAO,EAAE,iBAAiB,EAAE;QAC5B,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,KAAK;QACxB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,WAAW,EAAE,IAAI;QACjB,WAAW,EAAE,WAAW,CAAC,WAAW;QACpC,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,QAAQ,CAAC;QACpD,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC;KACpD,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAkB,EAAE,OAAsB,EAAE,WAA2B;IACvG,IAAI,CAAC;QACH,OAAO,MAAM,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IAChE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,KAAK,YAAY,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,MAAM,KAAK,CAAC;QACvF,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,IAAI,aAAa,EAAE,OAAO,CAAC,CAAC;YAAE,MAAM,KAAK,CAAC;QAC3F,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAAC;QACtG,OAAO,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"start-kernel.js","sourceRoot":"","sources":["../src/start-kernel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAmC,MAAM,eAAe,CAAC;AAClG,OAAO,EAAE,YAAY,EAA2B,MAAM,YAAY,CAAC;AAEnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAsB,MAAM,oBAAoB,CAAC;AACjG,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAU7C,MAAM,QAAQ,GAAwB,IAAI,GAAG,CAAC,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,CAAC,CAAC;AAE1F,SAAS,SAAS,CAAC,IAAkB,EAAE,OAAsB,EAAE,WAA2B,EAAE,QAAkB,EAAE,UAA+B;IAC7I,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,IAAI,aAAa,EAAE,OAAO,CAAC,CAAC;IAChE,OAAO,WAAW,CAAC;QACjB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,UAAU,EAAE,WAAW,CAAC,UAAU;QAClC,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,YAAY,EAAE,KAAK,CAAC,MAAM;QAC1B,OAAO,EAAE,iBAAiB,EAAE;QAC5B,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,KAAK;QACxB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,WAAW,EAAE,IAAI;QACjB,WAAW,EAAE,WAAW,CAAC,WAAW;QACpC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;QAC5C,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC;KACpD,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAkB,EAAE,OAAsB,EAAE,WAA2B,EAAE,QAAkB;IAC3H,IAAI,CAAC;QACH,OAAO,MAAM,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC1E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,KAAK,YAAY,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,MAAM,KAAK,CAAC;QACvF,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,IAAI,aAAa,EAAE,OAAO,CAAC,CAAC;YAAE,MAAM,KAAK,CAAC;QAC3F,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAAC;QACtG,OAAO,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACxE,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kvman",
3
- "version": "0.3.2",
3
+ "version": "0.4.0",
4
4
  "description": "kvman, an app that works like a small operating system: a kernel runs extensions, and a preset shapes them.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -21,12 +21,12 @@
21
21
  "kvman": "./dist/main.js"
22
22
  },
23
23
  "dependencies": {
24
- "@kvman/kernel": "0.3.2",
25
- "@kvman/kvai": "0.1.1",
26
- "@kvman/kvcoder": "0.1.5",
27
- "@kvman/kvbuilder": "0.3.0",
28
- "@kvman/kvwebui": "0.1.1",
29
- "@kvman/sdk": "0.1.1"
24
+ "@kvman/kernel": "0.4.0",
25
+ "@kvman/kvai": "0.1.2",
26
+ "@kvman/kvcoder": "0.1.7",
27
+ "@kvman/kvbuilder": "0.3.1",
28
+ "@kvman/kvwebui": "0.1.3",
29
+ "@kvman/sdk": "0.1.2"
30
30
  },
31
31
  "scripts": {
32
32
  "build": "tsc -p tsconfig.build.json",