@wringer/core 0.0.0 → 0.1.1
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 +1 -1
- package/README.md +71 -2
- package/dist/answer-supervisor-connection.d.ts +8 -0
- package/dist/app-machine.d.ts +76 -0
- package/dist/append-run-event.d.ts +16 -0
- package/dist/bind-drivers.d.ts +9 -0
- package/dist/build-commands.d.ts +5 -0
- package/dist/build-envelope-json-schema.d.ts +1 -0
- package/dist/build-envelope.d.ts +16 -0
- package/dist/build-launch-guard.d.ts +1 -0
- package/dist/build-manifest-write.d.ts +6 -0
- package/dist/build-promised-object-reads.d.ts +7 -0
- package/dist/build-report.d.ts +10 -0
- package/dist/build-run-handle.d.ts +2 -0
- package/dist/build-run-view.d.ts +29 -0
- package/dist/build-service-key.d.ts +1 -0
- package/dist/build-shut-down-steps.d.ts +14 -0
- package/dist/build-skip-worktree-marks.d.ts +7 -0
- package/dist/build-spawn-error.d.ts +2 -0
- package/dist/build-state-paths.d.ts +21 -0
- package/dist/build-submodule-adds.d.ts +7 -0
- package/dist/builtins/build-doctor-command.d.ts +2 -0
- package/dist/builtins/build-exec-command.d.ts +2 -0
- package/dist/builtins/build-lifecycle-commands.d.ts +3 -0
- package/dist/builtins/build-state-commands.d.ts +2 -0
- package/dist/builtins/build-use-pointers.d.ts +9 -0
- package/dist/builtins/build-verdict-commands.d.ts +2 -0
- package/dist/builtins/call-run-supervisor.d.ts +5 -0
- package/dist/builtins/pick-doctor-outcome.d.ts +13 -0
- package/dist/builtins/pick-start-action.d.ts +10 -0
- package/dist/builtins/pick-stop-plan.d.ts +14 -0
- package/dist/builtins/start-run.d.ts +22 -0
- package/dist/builtins/stop-data-schema.d.ts +6 -0
- package/dist/builtins/stop-run.d.ts +3 -0
- package/dist/call-supervisor.d.ts +10 -0
- package/dist/cap-data.d.ts +17 -0
- package/dist/collect-driver-configs.d.ts +7 -0
- package/dist/create-directory.d.ts +1 -0
- package/dist/create-evidence-writer.d.ts +13 -0
- package/dist/create-file-state.d.ts +36 -0
- package/dist/create-log-writer.d.ts +5 -0
- package/dist/create-node-repo-host.d.ts +2 -0
- package/dist/create-node-state-file-system.d.ts +10 -0
- package/dist/create-repo-state.d.ts +2 -0
- package/dist/create-socket-folder.d.ts +1 -0
- package/dist/create-wringer.d.ts +17 -0
- package/dist/decide-guard.d.ts +12 -0
- package/dist/define-driver.d.ts +13 -0
- package/dist/dispatch.d.ts +10 -0
- package/dist/envelope.d.ts +63 -0
- package/dist/error-codes.d.ts +25 -0
- package/dist/find-cancel-failure.d.ts +2 -0
- package/dist/find-colliding-service-key.d.ts +5 -0
- package/dist/find-own-value.d.ts +1 -0
- package/dist/find-remote-stop-failure.d.ts +2 -0
- package/dist/find-verdict-refusal.d.ts +3 -0
- package/dist/follow-process.d.ts +10 -0
- package/dist/get-lock-value.d.ts +2 -0
- package/dist/get-target.d.ts +2 -0
- package/dist/host.d.ts +19 -0
- package/dist/index.d.ts +58 -0
- package/dist/is-error-code.d.ts +1 -0
- package/dist/keep-cancelled-call.d.ts +1 -0
- package/dist/kill-process-group.d.ts +1 -0
- package/dist/launch-line-schema.d.ts +3 -0
- package/dist/listen-supervisor-socket.d.ts +8 -0
- package/dist/local.d.ts +2 -0
- package/dist/make-fence.d.ts +8 -0
- package/dist/make-fenced-exec.d.ts +10 -0
- package/dist/make-process-supervisor-port.d.ts +7 -0
- package/dist/open-drive.d.ts +23 -0
- package/dist/open-runless-drive.d.ts +17 -0
- package/dist/parse-launch-line.d.ts +2 -0
- package/dist/parse-patch-id.d.ts +2 -0
- package/dist/parse-report-block.d.ts +9 -0
- package/dist/parse-run-log.d.ts +2 -0
- package/dist/pick-access-refusal.d.ts +12 -0
- package/dist/pick-command-needs.d.ts +15 -0
- package/dist/pick-command-plan.d.ts +23 -0
- package/dist/pick-context-target.d.ts +7 -0
- package/dist/pick-drive-kind.d.ts +8 -0
- package/dist/pick-envelope-context.d.ts +1 -0
- package/dist/pick-envelope-payload.d.ts +12 -0
- package/dist/pick-envelope-run.d.ts +6 -0
- package/dist/pick-envelope-target.d.ts +4 -0
- package/dist/pick-late-failure-write.d.ts +13 -0
- package/dist/pick-log-refusal.d.ts +4 -0
- package/dist/pick-merge-base-failure.d.ts +2 -0
- package/dist/pick-merge-base-steps.d.ts +13 -0
- package/dist/pick-pending-cleanups.d.ts +10 -0
- package/dist/pick-submodule-refusal.d.ts +2 -0
- package/dist/pick-supervisor-operation.d.ts +16 -0
- package/dist/prepare-args.d.ts +3 -0
- package/dist/probe-process.d.ts +1 -0
- package/dist/quote-shell-word.d.ts +1 -0
- package/dist/race-deadline.d.ts +1 -0
- package/dist/read-changed-paths.d.ts +7 -0
- package/dist/read-default-base.d.ts +2 -0
- package/dist/read-fingerprint.d.ts +13 -0
- package/dist/read-head-sha.d.ts +2 -0
- package/dist/read-launch-host.d.ts +26 -0
- package/dist/read-pid-namespace.d.ts +1 -0
- package/dist/read-stream-line-batches.d.ts +2 -0
- package/dist/read-stream-lines.d.ts +2 -0
- package/dist/read-text.d.ts +1 -0
- package/dist/read-verdicts.d.ts +5 -0
- package/dist/remove-directory.d.ts +1 -0
- package/dist/remove-file.d.ts +1 -0
- package/dist/render-report-markdown.d.ts +4 -0
- package/dist/report-schema.d.ts +51 -0
- package/dist/run-events.d.ts +129 -0
- package/dist/run-git.d.ts +9 -0
- package/dist/run-process.d.ts +19 -0
- package/dist/run-supervisor-process.d.ts +2 -0
- package/dist/run-supervisor.d.ts +16 -0
- package/dist/settle-dispatch-answer.d.ts +9 -0
- package/dist/settle-envelope.d.ts +16 -0
- package/dist/ssh.d.ts +12 -0
- package/dist/start-launch.d.ts +20 -0
- package/dist/start-services.d.ts +16 -0
- package/dist/supervisor-machine.d.ts +78 -0
- package/dist/supervisor-protocol.d.ts +43 -0
- package/dist/to-wringer-error.d.ts +2 -0
- package/dist/types.d.ts +353 -0
- package/dist/wait-for-cancelled-calls.d.ts +2 -0
- package/dist/wringer-error.d.ts +12 -0
- package/dist/write-envelope-log.d.ts +11 -0
- package/dist/write-late-failure.d.ts +11 -0
- package/dist/write-new-file.d.ts +1 -0
- package/envelope.schema.json +175 -0
- package/package.json +21 -5
- package/src/answer-supervisor-connection.ts +117 -0
- package/src/app-machine.ts +174 -0
- package/src/append-run-event.ts +131 -0
- package/src/bind-drivers.ts +33 -0
- package/src/build-commands.ts +104 -0
- package/src/build-envelope-json-schema.ts +34 -0
- package/src/build-envelope.ts +40 -0
- package/src/build-launch-guard.ts +5 -0
- package/src/build-manifest-write.ts +26 -0
- package/src/build-promised-object-reads.ts +48 -0
- package/src/build-report.ts +55 -0
- package/src/build-run-handle.ts +13 -0
- package/src/build-run-view.ts +120 -0
- package/src/build-service-key.ts +4 -0
- package/src/build-shut-down-steps.ts +54 -0
- package/src/build-skip-worktree-marks.ts +36 -0
- package/src/build-spawn-error.ts +12 -0
- package/src/build-state-paths.ts +53 -0
- package/src/build-submodule-adds.ts +64 -0
- package/src/builtins/build-doctor-command.ts +163 -0
- package/src/builtins/build-exec-command.ts +41 -0
- package/src/builtins/build-lifecycle-commands.ts +115 -0
- package/src/builtins/build-state-commands.ts +152 -0
- package/src/builtins/build-use-pointers.ts +26 -0
- package/src/builtins/build-verdict-commands.ts +265 -0
- package/src/builtins/call-run-supervisor.ts +40 -0
- package/src/builtins/pick-doctor-outcome.ts +32 -0
- package/src/builtins/pick-start-action.ts +35 -0
- package/src/builtins/pick-stop-plan.ts +32 -0
- package/src/builtins/start-run.ts +281 -0
- package/src/builtins/stop-data-schema.ts +8 -0
- package/src/builtins/stop-run.ts +49 -0
- package/src/call-supervisor.ts +109 -0
- package/src/cap-data.ts +43 -0
- package/src/collect-driver-configs.ts +36 -0
- package/src/create-directory.ts +6 -0
- package/src/create-evidence-writer.ts +82 -0
- package/src/create-file-state.ts +193 -0
- package/src/create-log-writer.ts +38 -0
- package/src/create-node-repo-host.ts +20 -0
- package/src/create-node-state-file-system.ts +52 -0
- package/src/create-repo-state.ts +15 -0
- package/src/create-socket-folder.ts +24 -0
- package/src/create-wringer.ts +169 -0
- package/src/decide-guard.ts +47 -0
- package/src/define-driver.ts +165 -0
- package/src/dispatch.ts +589 -0
- package/src/envelope.ts +57 -0
- package/src/error-codes.ts +39 -0
- package/src/find-cancel-failure.ts +7 -0
- package/src/find-colliding-service-key.ts +16 -0
- package/src/find-own-value.ts +8 -0
- package/src/find-remote-stop-failure.ts +19 -0
- package/src/find-verdict-refusal.ts +26 -0
- package/src/follow-process.ts +147 -0
- package/src/get-lock-value.ts +17 -0
- package/src/get-target.ts +15 -0
- package/src/host.ts +26 -0
- package/src/index.ts +73 -0
- package/src/is-error-code.ts +3 -0
- package/src/keep-cancelled-call.ts +21 -0
- package/src/kill-process-group.ts +13 -0
- package/src/launch-line-schema.ts +6 -0
- package/src/listen-supervisor-socket.ts +75 -0
- package/src/local.ts +20 -0
- package/src/make-fence.ts +27 -0
- package/src/make-fenced-exec.ts +52 -0
- package/src/make-process-supervisor-port.ts +65 -0
- package/src/open-drive.ts +151 -0
- package/src/open-runless-drive.ts +71 -0
- package/src/parse-launch-line.ts +19 -0
- package/src/parse-patch-id.ts +8 -0
- package/src/parse-report-block.ts +39 -0
- package/src/parse-run-log.ts +34 -0
- package/src/pick-access-refusal.ts +32 -0
- package/src/pick-command-needs.ts +29 -0
- package/src/pick-command-plan.ts +51 -0
- package/src/pick-context-target.ts +22 -0
- package/src/pick-drive-kind.ts +23 -0
- package/src/pick-envelope-context.ts +10 -0
- package/src/pick-envelope-payload.ts +28 -0
- package/src/pick-envelope-run.ts +25 -0
- package/src/pick-envelope-target.ts +10 -0
- package/src/pick-late-failure-write.ts +44 -0
- package/src/pick-log-refusal.ts +18 -0
- package/src/pick-merge-base-failure.ts +15 -0
- package/src/pick-merge-base-steps.ts +37 -0
- package/src/pick-pending-cleanups.ts +23 -0
- package/src/pick-submodule-refusal.ts +46 -0
- package/src/pick-supervisor-operation.ts +52 -0
- package/src/prepare-args.ts +22 -0
- package/src/probe-process.ts +16 -0
- package/src/quote-shell-word.ts +9 -0
- package/src/race-deadline.ts +23 -0
- package/src/read-changed-paths.ts +39 -0
- package/src/read-default-base.ts +21 -0
- package/src/read-fingerprint.ts +271 -0
- package/src/read-head-sha.ts +23 -0
- package/src/read-launch-host.ts +64 -0
- package/src/read-pid-namespace.ts +18 -0
- package/src/read-stream-line-batches.ts +28 -0
- package/src/read-stream-lines.ts +11 -0
- package/src/read-text.ts +5 -0
- package/src/read-verdicts.ts +57 -0
- package/src/remove-directory.ts +6 -0
- package/src/remove-file.ts +6 -0
- package/src/render-report-markdown.ts +53 -0
- package/src/report-schema.ts +37 -0
- package/src/run-events.ts +71 -0
- package/src/run-git.ts +49 -0
- package/src/run-process.ts +168 -0
- package/src/run-supervisor-process.ts +51 -0
- package/src/run-supervisor.ts +327 -0
- package/src/settle-dispatch-answer.ts +26 -0
- package/src/settle-envelope.ts +34 -0
- package/src/ssh.ts +211 -0
- package/src/start-launch.ts +327 -0
- package/src/start-services.ts +108 -0
- package/src/supervisor-machine.ts +169 -0
- package/src/supervisor-protocol.ts +42 -0
- package/src/to-wringer-error.ts +20 -0
- package/src/types.ts +476 -0
- package/src/wait-for-cancelled-calls.ts +37 -0
- package/src/wringer-error.ts +25 -0
- package/src/write-envelope-log.ts +72 -0
- package/src/write-late-failure.ts +40 -0
- package/src/write-new-file.ts +17 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { RunView } from './build-run-view.ts';
|
|
2
|
+
import type { Mode } from './run-events.ts';
|
|
3
|
+
import { WringerError } from './wringer-error.ts';
|
|
4
|
+
export interface GuardInput {
|
|
5
|
+
readonly needsRun: boolean;
|
|
6
|
+
readonly needsDoctor: boolean;
|
|
7
|
+
readonly run: RunView | undefined;
|
|
8
|
+
readonly targetName: string;
|
|
9
|
+
readonly mode: Mode;
|
|
10
|
+
readonly fingerprintChanged: boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare function decideGuard(input: GuardInput): WringerError | null;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { z } from 'zod';
|
|
2
|
+
import type { Driver, DriverCheckDefinition, DriverCommand, DriverCommandHelper, DriverSession, Fence, ServiceDefinition } from './types.ts';
|
|
3
|
+
export interface DriverDefinition<Name extends string, Options, OptionsInput, TargetConfig, ConfigInput, Client> {
|
|
4
|
+
readonly name: Name;
|
|
5
|
+
readonly options: z.ZodType<Options, OptionsInput>;
|
|
6
|
+
readonly targetConfig: z.ZodType<TargetConfig, ConfigInput>;
|
|
7
|
+
readonly services?: Readonly<Record<string, ServiceDefinition<Options, TargetConfig>>>;
|
|
8
|
+
readonly client: (session: DriverSession<Options, TargetConfig>, fence: Fence) => Client;
|
|
9
|
+
readonly commands?: (command: DriverCommandHelper<Options, TargetConfig, Client>) => readonly DriverCommand<Options, TargetConfig, Client>[];
|
|
10
|
+
readonly checks?: readonly DriverCheckDefinition<Options, TargetConfig, Client>[];
|
|
11
|
+
}
|
|
12
|
+
export type DriverFactory<Name extends string, OptionsInput, ConfigInput, Client> = (options: OptionsInput) => Driver<Name, Client, ConfigInput>;
|
|
13
|
+
export declare function defineDriver<Name extends string, Options, OptionsInput, TargetConfig, ConfigInput, Client>(definition: DriverDefinition<Name, Options, OptionsInput, TargetConfig, ConfigInput, Client>): DriverFactory<Name, OptionsInput, ConfigInput, Client>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Envelope } from './envelope.ts';
|
|
2
|
+
import type { ExitCode } from './error-codes.ts';
|
|
3
|
+
import type { Session, Wringer } from './types.ts';
|
|
4
|
+
export interface DispatchResult {
|
|
5
|
+
readonly envelope: Envelope;
|
|
6
|
+
readonly exitCode: ExitCode;
|
|
7
|
+
readonly late: Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
export declare const defaultTimeoutMs = 120000;
|
|
10
|
+
export declare function dispatch(wringer: Wringer, path: readonly string[], rawArgs: unknown, session: Session): Promise<DispatchResult>;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const evidenceSchema: z.ZodObject<{
|
|
3
|
+
kind: z.ZodString;
|
|
4
|
+
path: z.ZodString;
|
|
5
|
+
sha256: z.ZodString;
|
|
6
|
+
}, z.core.$strict>;
|
|
7
|
+
export type Evidence = z.infer<typeof evidenceSchema>;
|
|
8
|
+
export declare const envelopeErrorSchema: z.ZodObject<{
|
|
9
|
+
code: z.ZodEnum<{
|
|
10
|
+
"check-failed": "check-failed";
|
|
11
|
+
"doctor-required": "doctor-required";
|
|
12
|
+
environment: "environment";
|
|
13
|
+
internal: "internal";
|
|
14
|
+
"not-running": "not-running";
|
|
15
|
+
"read-only": "read-only";
|
|
16
|
+
"target-not-allowed": "target-not-allowed";
|
|
17
|
+
timeout: "timeout";
|
|
18
|
+
usage: "usage";
|
|
19
|
+
}>;
|
|
20
|
+
message: z.ZodString;
|
|
21
|
+
hint: z.ZodNullable<z.ZodString>;
|
|
22
|
+
}, z.core.$strict>;
|
|
23
|
+
export declare const envelopeSchema: z.ZodObject<{
|
|
24
|
+
wringer: z.ZodLiteral<1>;
|
|
25
|
+
ok: z.ZodBoolean;
|
|
26
|
+
command: z.ZodString;
|
|
27
|
+
target: z.ZodNullable<z.ZodString>;
|
|
28
|
+
instance: z.ZodNullable<z.ZodString>;
|
|
29
|
+
feature: z.ZodNullable<z.ZodString>;
|
|
30
|
+
sha: z.ZodNullable<z.ZodString>;
|
|
31
|
+
durationMs: z.ZodNumber;
|
|
32
|
+
data: z.ZodUnknown & z.ZodType<{} | null, unknown, z.core.$ZodTypeInternals<{} | null, unknown>>;
|
|
33
|
+
evidence: z.ZodArray<z.ZodObject<{
|
|
34
|
+
kind: z.ZodString;
|
|
35
|
+
path: z.ZodString;
|
|
36
|
+
sha256: z.ZodString;
|
|
37
|
+
}, z.core.$strict>>;
|
|
38
|
+
cursors: z.ZodRecord<z.ZodString, z.ZodNumber>;
|
|
39
|
+
truncated: z.ZodOptional<z.ZodLiteral<true>>;
|
|
40
|
+
truncatedPath: z.ZodOptional<z.ZodString>;
|
|
41
|
+
error: z.ZodNullable<z.ZodObject<{
|
|
42
|
+
code: z.ZodEnum<{
|
|
43
|
+
"check-failed": "check-failed";
|
|
44
|
+
"doctor-required": "doctor-required";
|
|
45
|
+
environment: "environment";
|
|
46
|
+
internal: "internal";
|
|
47
|
+
"not-running": "not-running";
|
|
48
|
+
"read-only": "read-only";
|
|
49
|
+
"target-not-allowed": "target-not-allowed";
|
|
50
|
+
timeout: "timeout";
|
|
51
|
+
usage: "usage";
|
|
52
|
+
}>;
|
|
53
|
+
message: z.ZodString;
|
|
54
|
+
hint: z.ZodNullable<z.ZodString>;
|
|
55
|
+
}, z.core.$strict>>;
|
|
56
|
+
}, z.core.$strict>;
|
|
57
|
+
export type Envelope = z.infer<typeof envelopeSchema>;
|
|
58
|
+
export declare const streamEventSchema: z.ZodObject<{
|
|
59
|
+
wringer: z.ZodLiteral<1>;
|
|
60
|
+
event: z.ZodString;
|
|
61
|
+
data: z.ZodUnknown;
|
|
62
|
+
}, z.core.$strict>;
|
|
63
|
+
export type StreamEvent = z.infer<typeof streamEventSchema>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export declare const errorCodes: readonly ['check-failed', 'usage', 'read-only', 'doctor-required', 'not-running', 'target-not-allowed', 'environment', 'internal', 'timeout'];
|
|
2
|
+
export type ErrorCode = (typeof errorCodes)[number];
|
|
3
|
+
export type ExitCode = 0 | 1 | 2 | 3 | 4 | 5;
|
|
4
|
+
export declare const exitCodeFor: {
|
|
5
|
+
readonly 'check-failed': 1;
|
|
6
|
+
readonly usage: 2;
|
|
7
|
+
readonly 'read-only': 3;
|
|
8
|
+
readonly 'doctor-required': 3;
|
|
9
|
+
readonly 'not-running': 3;
|
|
10
|
+
readonly 'target-not-allowed': 3;
|
|
11
|
+
readonly environment: 4;
|
|
12
|
+
readonly internal: 4;
|
|
13
|
+
readonly timeout: 5;
|
|
14
|
+
};
|
|
15
|
+
export declare const defaultMessageFor: {
|
|
16
|
+
readonly 'check-failed': 'A check failed.';
|
|
17
|
+
readonly usage: 'The command or its arguments are not valid.';
|
|
18
|
+
readonly 'read-only': 'The target refused a write.';
|
|
19
|
+
readonly 'doctor-required': 'The doctor has not passed on this run.';
|
|
20
|
+
readonly 'not-running': 'The target has no running run.';
|
|
21
|
+
readonly 'target-not-allowed': 'The command does not run on this target.';
|
|
22
|
+
readonly environment: 'The environment failed.';
|
|
23
|
+
readonly internal: 'wringer failed with an internal error.';
|
|
24
|
+
readonly timeout: 'The command ran past its deadline.';
|
|
25
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function findOwnValue<Value>(record: Readonly<Record<string, Value>>, key: string): Value | undefined;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface FollowProcessRequest {
|
|
2
|
+
readonly argv: readonly string[];
|
|
3
|
+
readonly signal: AbortSignal;
|
|
4
|
+
readonly onLine: (line: string) => void;
|
|
5
|
+
}
|
|
6
|
+
export interface FollowResult {
|
|
7
|
+
readonly exitCode: number;
|
|
8
|
+
readonly stderr: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function followProcess(request: FollowProcessRequest): Promise<FollowResult>;
|
package/dist/host.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ProcessResult } from './run-process.ts';
|
|
2
|
+
export type Access = 'read-write' | 'read-only';
|
|
3
|
+
export interface HostRequest {
|
|
4
|
+
readonly argv: readonly string[];
|
|
5
|
+
readonly access: Access;
|
|
6
|
+
readonly stdin?: string | undefined;
|
|
7
|
+
readonly signal?: AbortSignal | undefined;
|
|
8
|
+
}
|
|
9
|
+
export interface FollowRequest {
|
|
10
|
+
readonly argv: readonly string[];
|
|
11
|
+
readonly access: Access;
|
|
12
|
+
readonly signal: AbortSignal;
|
|
13
|
+
readonly onLine: (line: string) => void;
|
|
14
|
+
}
|
|
15
|
+
export interface Host {
|
|
16
|
+
readonly kind: 'local' | 'ssh';
|
|
17
|
+
readonly run: (request: HostRequest) => Promise<ProcessResult>;
|
|
18
|
+
readonly follow: (request: FollowRequest) => Promise<number>;
|
|
19
|
+
}
|
package/dist/index.d.ts
CHANGED
|
@@ -1 +1,59 @@
|
|
|
1
|
+
export { bindDrivers } from './bind-drivers.ts';
|
|
2
|
+
export type { BoundHelpers } from './bind-drivers.ts';
|
|
3
|
+
export { buildEnvelope } from './build-envelope.ts';
|
|
4
|
+
export type { EnvelopeInput } from './build-envelope.ts';
|
|
5
|
+
export { buildEnvelopeJSONSchema } from './build-envelope-json-schema.ts';
|
|
6
|
+
export { buildRunView } from './build-run-view.ts';
|
|
7
|
+
export type { DoctorState, RunView, SupervisorInfo } from './build-run-view.ts';
|
|
8
|
+
export { buildRunPaths, buildStatePaths } from './build-state-paths.ts';
|
|
9
|
+
export type { RunPaths, StatePaths } from './build-state-paths.ts';
|
|
10
|
+
export { createDirectory } from './create-directory.ts';
|
|
11
|
+
export { createFileState, eventSizeCapBytes, pointersSchema } from './create-file-state.ts';
|
|
12
|
+
export type { FileStateOptions, Pointers, StatePort } from './create-file-state.ts';
|
|
13
|
+
export { createNodeStateFileSystem } from './create-node-state-file-system.ts';
|
|
14
|
+
export { createRepoState } from './create-repo-state.ts';
|
|
15
|
+
export type { StateFileSystem } from './create-node-state-file-system.ts';
|
|
16
|
+
export { createWringer, defaultStateDir } from './create-wringer.ts';
|
|
17
|
+
export type { WringerBuilder, WringerOptions } from './create-wringer.ts';
|
|
18
|
+
export { defineDriver } from './define-driver.ts';
|
|
19
|
+
export { findOwnValue } from './find-own-value.ts';
|
|
20
|
+
export type { DriverDefinition, DriverFactory } from './define-driver.ts';
|
|
21
|
+
export { dataCapBytes } from './cap-data.ts';
|
|
22
|
+
export { defaultTimeoutMs, dispatch } from './dispatch.ts';
|
|
23
|
+
export type { DispatchResult } from './dispatch.ts';
|
|
24
|
+
export { envelopeErrorSchema, envelopeSchema, evidenceSchema, streamEventSchema, } from './envelope.ts';
|
|
25
|
+
export type { Envelope, Evidence, StreamEvent } from './envelope.ts';
|
|
1
26
|
export { envelopeVersion } from './envelope-version.ts';
|
|
27
|
+
export { defaultMessageFor, errorCodes, exitCodeFor } from './error-codes.ts';
|
|
28
|
+
export type { ErrorCode, ExitCode } from './error-codes.ts';
|
|
29
|
+
export type { Access, FollowRequest, Host, HostRequest } from './host.ts';
|
|
30
|
+
export { isErrorCode } from './is-error-code.ts';
|
|
31
|
+
export { launchLineSchema } from './launch-line-schema.ts';
|
|
32
|
+
export type { LaunchLine } from './launch-line-schema.ts';
|
|
33
|
+
export { local } from './local.ts';
|
|
34
|
+
export { defaultRefusalHint } from './make-fence.ts';
|
|
35
|
+
export { makeProcessSupervisorPort } from './make-process-supervisor-port.ts';
|
|
36
|
+
export type { ProcessSupervisorOptions } from './make-process-supervisor-port.ts';
|
|
37
|
+
export { emptyFingerprint } from './parse-patch-id.ts';
|
|
38
|
+
export { parseReportBlock } from './parse-report-block.ts';
|
|
39
|
+
export type { ReportBlockResult } from './parse-report-block.ts';
|
|
40
|
+
export { readFingerprint } from './read-fingerprint.ts';
|
|
41
|
+
export type { FingerprintHost, FingerprintRequest } from './read-fingerprint.ts';
|
|
42
|
+
export { readStreamLines } from './read-stream-lines.ts';
|
|
43
|
+
export { readText } from './read-text.ts';
|
|
44
|
+
export { renderReportMarkdown } from './render-report-markdown.ts';
|
|
45
|
+
export { reportSchema, verdictSchema } from './report-schema.ts';
|
|
46
|
+
export type { FeatureStatus, Report, Verdict } from './report-schema.ts';
|
|
47
|
+
export { checkResultSchema, endpointsSchema, modeSchema, runEventSchema, runIDSchema, } from './run-events.ts';
|
|
48
|
+
export type { CheckResult, Endpoints, Mode, RunEvent, RunID } from './run-events.ts';
|
|
49
|
+
export { runProcess } from './run-process.ts';
|
|
50
|
+
export type { ProcessRequest, ProcessResult } from './run-process.ts';
|
|
51
|
+
export type { RunStatus } from './append-run-event.ts';
|
|
52
|
+
export { runSupervisorProcess } from './run-supervisor-process.ts';
|
|
53
|
+
export { ssh } from './ssh.ts';
|
|
54
|
+
export type { PrefixLayer, SSHOptions } from './ssh.ts';
|
|
55
|
+
export { supervisorCommandName } from './supervisor-protocol.ts';
|
|
56
|
+
export type * from './types.ts';
|
|
57
|
+
export { createNodeRepoHost } from './create-node-repo-host.ts';
|
|
58
|
+
export { WringerError } from './wringer-error.ts';
|
|
59
|
+
export type { WringerErrorDetails } from './wringer-error.ts';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function isErrorCode(error: unknown, code: string): boolean;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function keepCancelledCall(cancelled: Promise<unknown>[], calling: Promise<unknown>, signal: AbortSignal): void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function killProcessGroup(pid: number, signal?: NodeJS.Signals): void;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { SupervisorConnectionOptions } from './answer-supervisor-connection.ts';
|
|
2
|
+
export interface SupervisorSocketOptions extends SupervisorConnectionOptions {
|
|
3
|
+
readonly path: string;
|
|
4
|
+
}
|
|
5
|
+
export interface SupervisorSocket {
|
|
6
|
+
readonly close: (graceMs: number) => Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
export declare function listenSupervisorSocket(options: SupervisorSocketOptions): Promise<SupervisorSocket>;
|
package/dist/local.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Access } from './host.ts';
|
|
2
|
+
import type { Fence } from './types.ts';
|
|
3
|
+
export declare const defaultRefusalHint = "This target is read-only. Stop and report the write you needed.";
|
|
4
|
+
export interface FenceOptions {
|
|
5
|
+
readonly access: Access;
|
|
6
|
+
readonly hint: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function makeFence(options: FenceOptions): Fence;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Access, Host } from './host.ts';
|
|
2
|
+
import type { DriverExec, RepoExec } from './types.ts';
|
|
3
|
+
export interface FencedExecOptions {
|
|
4
|
+
readonly host: Host;
|
|
5
|
+
readonly access: Access;
|
|
6
|
+
readonly hint: string;
|
|
7
|
+
readonly signal: AbortSignal;
|
|
8
|
+
}
|
|
9
|
+
export declare function makeRepoExec(options: FencedExecOptions): RepoExec;
|
|
10
|
+
export declare function makeDriverExec(options: FencedExecOptions): DriverExec;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SupervisorPort } from './types.ts';
|
|
2
|
+
export interface ProcessSupervisorOptions {
|
|
3
|
+
readonly selfCommand: readonly string[];
|
|
4
|
+
readonly root: string;
|
|
5
|
+
readonly stateDir: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function makeProcessSupervisorPort(options: ProcessSupervisorOptions): SupervisorPort;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { RunView } from './build-run-view.ts';
|
|
2
|
+
import type { Access } from './host.ts';
|
|
3
|
+
import type { Drive, Emit, EvidenceFiles, SupervisorPort, TargetDefinition, Wringer } from './types.ts';
|
|
4
|
+
export interface DriveRequest {
|
|
5
|
+
readonly wringer: Wringer;
|
|
6
|
+
readonly root: string;
|
|
7
|
+
readonly stateDir: string;
|
|
8
|
+
readonly targetName: string;
|
|
9
|
+
readonly target: TargetDefinition;
|
|
10
|
+
readonly access: Access;
|
|
11
|
+
readonly hint: string;
|
|
12
|
+
readonly run: RunView;
|
|
13
|
+
readonly feature: string | null;
|
|
14
|
+
readonly cursors: Readonly<Record<string, number>>;
|
|
15
|
+
readonly signal: AbortSignal;
|
|
16
|
+
readonly deadlineAt: number;
|
|
17
|
+
readonly now: () => Date;
|
|
18
|
+
readonly emit: Emit;
|
|
19
|
+
readonly files: EvidenceFiles;
|
|
20
|
+
readonly callSupervisor: SupervisorPort['call'];
|
|
21
|
+
}
|
|
22
|
+
export declare const unassignedFeature = "unassigned";
|
|
23
|
+
export declare function openDrive(request: DriveRequest): Drive;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Access } from './host.ts';
|
|
2
|
+
import type { Drive, Emit, EvidenceFiles, TargetDefinition, Wringer } from './types.ts';
|
|
3
|
+
export interface RunlessDriveRequest {
|
|
4
|
+
readonly wringer: Wringer;
|
|
5
|
+
readonly root: string;
|
|
6
|
+
readonly stateDir: string;
|
|
7
|
+
readonly targetName: string;
|
|
8
|
+
readonly target: TargetDefinition;
|
|
9
|
+
readonly access: Access;
|
|
10
|
+
readonly hint: string;
|
|
11
|
+
readonly feature: string | null;
|
|
12
|
+
readonly signal: AbortSignal;
|
|
13
|
+
readonly now: () => Date;
|
|
14
|
+
readonly emit: Emit;
|
|
15
|
+
readonly files: EvidenceFiles;
|
|
16
|
+
}
|
|
17
|
+
export declare function openRunlessDrive(request: RunlessDriveRequest): Drive;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Report } from './report-schema.ts';
|
|
2
|
+
export type ReportBlockResult = {
|
|
3
|
+
readonly ok: true;
|
|
4
|
+
readonly report: Report;
|
|
5
|
+
} | {
|
|
6
|
+
readonly ok: false;
|
|
7
|
+
readonly reason: string;
|
|
8
|
+
};
|
|
9
|
+
export declare function parseReportBlock(body: string): ReportBlockResult;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Access } from './host.ts';
|
|
2
|
+
import type { Effect } from './types.ts';
|
|
3
|
+
import { WringerError } from './wringer-error.ts';
|
|
4
|
+
export interface AccessInput {
|
|
5
|
+
readonly path: readonly string[];
|
|
6
|
+
readonly allowedTargets: readonly string[] | undefined;
|
|
7
|
+
readonly targetName: string;
|
|
8
|
+
readonly access: Access;
|
|
9
|
+
readonly effect: Effect;
|
|
10
|
+
readonly hint: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function pickAccessRefusal(input: AccessInput): WringerError | null;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { DoctorState } from './build-run-view.ts';
|
|
2
|
+
import type { Mode } from './run-events.ts';
|
|
3
|
+
export interface CommandNeedsFacts {
|
|
4
|
+
readonly isBuiltin: boolean;
|
|
5
|
+
readonly needsRun: boolean | undefined;
|
|
6
|
+
readonly needsDoctor: boolean | undefined;
|
|
7
|
+
readonly mode: Mode;
|
|
8
|
+
readonly doctor: DoctorState | undefined;
|
|
9
|
+
}
|
|
10
|
+
export interface CommandNeeds {
|
|
11
|
+
readonly needsRun: boolean;
|
|
12
|
+
readonly needsDoctor: boolean;
|
|
13
|
+
readonly readsFingerprint: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function pickCommandNeeds(facts: CommandNeedsFacts): CommandNeeds;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { RunView } from './build-run-view.ts';
|
|
2
|
+
import type { DriveKind } from './pick-drive-kind.ts';
|
|
3
|
+
import type { Mode } from './run-events.ts';
|
|
4
|
+
import { WringerError } from './wringer-error.ts';
|
|
5
|
+
export interface CommandFacts {
|
|
6
|
+
readonly needsRun: boolean;
|
|
7
|
+
readonly needsDoctor: boolean;
|
|
8
|
+
readonly isRepoCommand: boolean;
|
|
9
|
+
readonly run: RunView | undefined;
|
|
10
|
+
readonly targetName: string;
|
|
11
|
+
readonly mode: Mode;
|
|
12
|
+
readonly fingerprintChanged: boolean;
|
|
13
|
+
readonly deadlinePassed: boolean;
|
|
14
|
+
}
|
|
15
|
+
export type CommandPlan = {
|
|
16
|
+
readonly kind: 'refuse';
|
|
17
|
+
readonly failure: WringerError;
|
|
18
|
+
} | {
|
|
19
|
+
readonly kind: 'run';
|
|
20
|
+
readonly driveKind: DriveKind;
|
|
21
|
+
readonly drive: boolean;
|
|
22
|
+
};
|
|
23
|
+
export declare function pickCommandPlan(facts: CommandFacts): CommandPlan;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface ContextTargetInput {
|
|
2
|
+
readonly targetNames: readonly string[];
|
|
3
|
+
readonly sessionTarget: string | undefined;
|
|
4
|
+
readonly savedTarget: string | undefined;
|
|
5
|
+
readonly commandKey: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function pickContextTarget(input: ContextTargetInput): string;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { RunStatus } from './append-run-event.ts';
|
|
2
|
+
export interface DriveFacts {
|
|
3
|
+
readonly runStatus: RunStatus | null;
|
|
4
|
+
readonly needsRun: boolean;
|
|
5
|
+
readonly isRepoCommand: boolean;
|
|
6
|
+
}
|
|
7
|
+
export type DriveKind = 'run' | 'runless' | 'none';
|
|
8
|
+
export declare function pickDriveKind(facts: DriveFacts): DriveKind;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function pickEnvelopeContext<Context>(before: Context | null, after: Context | null, ranOnRun: boolean): Context | null;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { WringerError } from './wringer-error.ts';
|
|
2
|
+
export interface PayloadInput {
|
|
3
|
+
readonly data: unknown;
|
|
4
|
+
readonly commandFailure: WringerError | null;
|
|
5
|
+
readonly cursors: Readonly<Record<string, number>> | WringerError;
|
|
6
|
+
}
|
|
7
|
+
export interface EnvelopePayload {
|
|
8
|
+
readonly data: unknown;
|
|
9
|
+
readonly failure: WringerError | null;
|
|
10
|
+
readonly cursors: Readonly<Record<string, number>>;
|
|
11
|
+
}
|
|
12
|
+
export declare function pickEnvelopePayload(input: PayloadInput): EnvelopePayload;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { RunView } from './build-run-view.ts';
|
|
2
|
+
export interface EnvelopeRunContext {
|
|
3
|
+
readonly targetName: string;
|
|
4
|
+
readonly run: RunView | undefined;
|
|
5
|
+
}
|
|
6
|
+
export declare function pickEnvelopeRun(before: EnvelopeRunContext | null, settled: EnvelopeRunContext | null, bound: RunView | null): RunView | undefined;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { LateFailureEvent, RunID } from './run-events.ts';
|
|
2
|
+
import type { WringerError } from './wringer-error.ts';
|
|
3
|
+
export interface LateFailureFacts {
|
|
4
|
+
readonly runID: RunID | null;
|
|
5
|
+
readonly command: string;
|
|
6
|
+
readonly answered: WringerError | null;
|
|
7
|
+
readonly at: Date;
|
|
8
|
+
}
|
|
9
|
+
export interface LateFailureWrite {
|
|
10
|
+
readonly runID: RunID | null;
|
|
11
|
+
readonly event: LateFailureEvent;
|
|
12
|
+
}
|
|
13
|
+
export declare function pickLateFailureWrite(settled: PromiseSettledResult<unknown>, facts: LateFailureFacts): LateFailureWrite | null;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { RunView } from './build-run-view.ts';
|
|
2
|
+
import type { RunViewRefusal } from './create-file-state.ts';
|
|
3
|
+
import type { Envelope } from './envelope.ts';
|
|
4
|
+
export declare function pickLogRefusal(envelope: Envelope, read: RunView | undefined): RunViewRefusal | null;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { GitRequest } from './run-git.ts';
|
|
2
|
+
import { WringerError } from './wringer-error.ts';
|
|
3
|
+
export interface MergeBaseStepInput {
|
|
4
|
+
readonly root: string;
|
|
5
|
+
readonly base: string;
|
|
6
|
+
readonly newestCommit: string;
|
|
7
|
+
}
|
|
8
|
+
export interface MergeBaseSteps {
|
|
9
|
+
readonly verifyBase: GitRequest;
|
|
10
|
+
readonly mergeBase: GitRequest;
|
|
11
|
+
readonly noSharedCommit: WringerError;
|
|
12
|
+
}
|
|
13
|
+
export declare function pickMergeBaseSteps(input: MergeBaseStepInput): MergeBaseSteps | WringerError;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface CleanupFacts {
|
|
2
|
+
readonly launched: boolean;
|
|
3
|
+
readonly serviceKeys: readonly string[];
|
|
4
|
+
readonly stopping: ReadonlySet<string>;
|
|
5
|
+
}
|
|
6
|
+
export interface PendingCleanups {
|
|
7
|
+
readonly app: readonly string[];
|
|
8
|
+
readonly services: readonly string[];
|
|
9
|
+
}
|
|
10
|
+
export declare function pickPendingCleanups(facts: CleanupFacts): PendingCleanups;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { SupervisorRequest } from './supervisor-protocol.ts';
|
|
2
|
+
import type { ServiceInstance } from './types.ts';
|
|
3
|
+
import { WringerError } from './wringer-error.ts';
|
|
4
|
+
export type SupervisorOperation = {
|
|
5
|
+
readonly kind: 'stop';
|
|
6
|
+
} | {
|
|
7
|
+
readonly kind: 'status';
|
|
8
|
+
} | {
|
|
9
|
+
readonly kind: 'call';
|
|
10
|
+
readonly cancelAfterMs: readonly number[];
|
|
11
|
+
readonly call: (signal: AbortSignal) => Promise<unknown>;
|
|
12
|
+
} | {
|
|
13
|
+
readonly kind: 'refuse';
|
|
14
|
+
readonly error: WringerError;
|
|
15
|
+
};
|
|
16
|
+
export declare function pickSupervisorOperation(request: SupervisorRequest, services: ReadonlyMap<string, Pick<ServiceInstance, 'methods'>>, nowMs: number): SupervisorOperation;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function probeProcess(pid: number): boolean;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function quoteShellWord(word: string): string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function raceDeadline<T>(work: Promise<T>, deadline: AbortSignal): Promise<T>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { FingerprintHost } from './read-fingerprint.ts';
|
|
2
|
+
export interface ChangedPathsRequest {
|
|
3
|
+
readonly cwd: string;
|
|
4
|
+
readonly base: string;
|
|
5
|
+
readonly exclude: readonly string[];
|
|
6
|
+
}
|
|
7
|
+
export declare function readChangedPaths(host: Pick<FingerprintHost, 'runGit'>, request: ChangedPathsRequest): Promise<readonly string[]>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { GitRequest } from './run-git.ts';
|
|
2
|
+
import type { ProcessResult } from './run-process.ts';
|
|
3
|
+
export interface FingerprintHost {
|
|
4
|
+
readonly runGit: (request: GitRequest) => Promise<ProcessResult>;
|
|
5
|
+
readonly runGitBytes: (request: GitRequest) => Promise<Uint8Array>;
|
|
6
|
+
readonly removeDirectory: (path: string) => Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
export interface FingerprintRequest {
|
|
9
|
+
readonly cwd: string;
|
|
10
|
+
readonly base: string;
|
|
11
|
+
readonly exclude: readonly string[];
|
|
12
|
+
}
|
|
13
|
+
export declare function readFingerprint(host: FingerprintHost, request: FingerprintRequest): Promise<string>;
|