@phyzess/pappra 0.0.0-stage → 0.1.0-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +99 -2
- package/THIRD_PARTY_NOTICES.md +16 -0
- package/assets/integrations/skills/pappra/SKILL.md +71 -0
- package/assets/integrations/skills/pappra/references/hosts.md +40 -0
- package/assets/integrations/skills/pappra/references/lifecycle.md +41 -0
- package/assets/integrations/skills/pappra/references/operations.md +27 -0
- package/assets/manifest.json +4 -0
- package/dist/app/collaboration.d.ts +170 -0
- package/dist/app/collaboration.js +1643 -0
- package/dist/app/doctor.d.ts +9 -0
- package/dist/app/doctor.js +1030 -0
- package/dist/app/init.d.ts +171 -0
- package/dist/app/init.js +1442 -0
- package/dist/cli/commands/code.d.ts +16 -0
- package/dist/cli/commands/code.js +127 -0
- package/dist/cli/commands/collaboration.d.ts +13 -0
- package/dist/cli/commands/collaboration.js +186 -0
- package/dist/cli/commands/continuity.d.ts +29 -0
- package/dist/cli/commands/continuity.js +133 -0
- package/dist/cli/commands/docs.d.ts +12 -0
- package/dist/cli/commands/docs.js +234 -0
- package/dist/cli/commands/doctor.d.ts +14 -0
- package/dist/cli/commands/doctor.js +57 -0
- package/dist/cli/commands/host.d.ts +17 -0
- package/dist/cli/commands/host.js +199 -0
- package/dist/cli/commands/init.d.ts +59 -0
- package/dist/cli/commands/init.js +845 -0
- package/dist/cli/commands/runtime.d.ts +14 -0
- package/dist/cli/commands/runtime.js +263 -0
- package/dist/cli/main.d.ts +2 -0
- package/dist/cli/main.js +10 -0
- package/dist/cli/output.d.ts +4 -0
- package/dist/cli/output.js +1 -0
- package/dist/cli/run.d.ts +2 -0
- package/dist/cli/run.js +749 -0
- package/dist/code/budget.d.ts +14 -0
- package/dist/code/budget.js +39 -0
- package/dist/code/exec.d.ts +23 -0
- package/dist/code/exec.js +133 -0
- package/dist/code/identity.d.ts +13 -0
- package/dist/code/identity.js +214 -0
- package/dist/code/index.d.ts +6 -0
- package/dist/code/index.js +3 -0
- package/dist/code/providers/codegraph.d.ts +59 -0
- package/dist/code/providers/codegraph.js +567 -0
- package/dist/code/registration.d.ts +9 -0
- package/dist/code/registration.js +293 -0
- package/dist/code/service.d.ts +53 -0
- package/dist/code/service.js +633 -0
- package/dist/code/text.d.ts +3 -0
- package/dist/code/text.js +202 -0
- package/dist/collab/admission.d.ts +450 -0
- package/dist/collab/admission.js +797 -0
- package/dist/collab/canonical.d.ts +26 -0
- package/dist/collab/canonical.js +136 -0
- package/dist/collab/contracts.d.ts +73 -0
- package/dist/collab/contracts.js +76 -0
- package/dist/collab/envelope.d.ts +52 -0
- package/dist/collab/envelope.js +241 -0
- package/dist/collab/fingerprint.d.ts +7 -0
- package/dist/collab/fingerprint.js +58 -0
- package/dist/collab/handoff.d.ts +350 -0
- package/dist/collab/handoff.js +513 -0
- package/dist/collab/index.d.ts +9 -0
- package/dist/collab/index.js +8 -0
- package/dist/collab/lifecycle.d.ts +449 -0
- package/dist/collab/lifecycle.js +534 -0
- package/dist/collab/messages.d.ts +148 -0
- package/dist/collab/messages.js +583 -0
- package/dist/collab/notify.d.ts +47 -0
- package/dist/collab/notify.js +140 -0
- package/dist/collab/preflight.d.ts +31 -0
- package/dist/collab/preflight.js +271 -0
- package/dist/collab/resources.d.ts +119 -0
- package/dist/collab/resources.js +451 -0
- package/dist/collab/store.d.ts +143 -0
- package/dist/collab/store.js +606 -0
- package/dist/collab/types.d.ts +354 -0
- package/dist/collab/types.js +1 -0
- package/dist/collab/validation.d.ts +10 -0
- package/dist/collab/validation.js +303 -0
- package/dist/continuity/context.d.ts +24 -0
- package/dist/continuity/context.js +179 -0
- package/dist/continuity/index.d.ts +3 -0
- package/dist/continuity/index.js +1 -0
- package/dist/continuity/paths.d.ts +37 -0
- package/dist/continuity/paths.js +258 -0
- package/dist/continuity/service.d.ts +59 -0
- package/dist/continuity/service.js +1258 -0
- package/dist/hosts/claude/native.d.ts +79 -0
- package/dist/hosts/claude/native.js +853 -0
- package/dist/hosts/codex/native.d.ts +345 -0
- package/dist/hosts/codex/native.js +1528 -0
- package/dist/hosts/codex/protocol.d.ts +51 -0
- package/dist/hosts/codex/protocol.js +42 -0
- package/dist/hosts/detect.d.ts +29 -0
- package/dist/hosts/detect.js +73 -0
- package/dist/hosts/index.d.ts +10 -0
- package/dist/hosts/index.js +10 -0
- package/dist/hosts/integration/bundle-export.d.ts +24 -0
- package/dist/hosts/integration/bundle-export.js +128 -0
- package/dist/hosts/integration/bundle.d.ts +19 -0
- package/dist/hosts/integration/bundle.js +99 -0
- package/dist/hosts/integration/hook-entry.d.ts +1 -0
- package/dist/hosts/integration/hook-entry.js +68 -0
- package/dist/hosts/integration/hook.d.ts +32 -0
- package/dist/hosts/integration/hook.js +781 -0
- package/dist/hosts/integration/pappra-extension-runtime.mjs +24610 -0
- package/dist/hosts/integration/pappra-hook.mjs +24728 -0
- package/dist/hosts/integration/pi-extension-runtime.d.ts +18 -0
- package/dist/hosts/integration/pi-extension-runtime.js +89 -0
- package/dist/hosts/integration/pi-template.d.ts +3 -0
- package/dist/hosts/integration/pi-template.js +5 -0
- package/dist/hosts/integration/service.d.ts +49 -0
- package/dist/hosts/integration/service.js +1421 -0
- package/dist/hosts/integration/support.d.ts +59 -0
- package/dist/hosts/integration/support.js +66 -0
- package/dist/hosts/integration/templates.d.ts +22 -0
- package/dist/hosts/integration/templates.js +75 -0
- package/dist/hosts/pi/protocol.d.ts +22 -0
- package/dist/hosts/pi/protocol.js +28 -0
- package/dist/hosts/pi/query-result.d.ts +22 -0
- package/dist/hosts/pi/query-result.js +710 -0
- package/dist/hosts/pi/rpc.d.ts +939 -0
- package/dist/hosts/pi/rpc.js +1659 -0
- package/dist/hosts/pilot.d.ts +485 -0
- package/dist/hosts/pilot.js +593 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +4 -0
- package/dist/infra/fs.d.ts +27 -0
- package/dist/infra/fs.js +130 -0
- package/dist/infra/git.d.ts +60 -0
- package/dist/infra/git.js +358 -0
- package/dist/infra/owned-process-group.d.ts +173 -0
- package/dist/infra/owned-process-group.js +571 -0
- package/dist/install/apply.d.ts +65 -0
- package/dist/install/apply.js +663 -0
- package/dist/install/index.d.ts +5 -0
- package/dist/install/index.js +5 -0
- package/dist/install/ownership.d.ts +85 -0
- package/dist/install/ownership.js +430 -0
- package/dist/install/plan.d.ts +39 -0
- package/dist/install/plan.js +97 -0
- package/dist/install/rollback.d.ts +18 -0
- package/dist/install/rollback.js +544 -0
- package/dist/install/runtime.d.ts +76 -0
- package/dist/install/runtime.js +1252 -0
- package/dist/knowledge/catalog.d.ts +47 -0
- package/dist/knowledge/catalog.js +308 -0
- package/dist/knowledge/context.d.ts +28 -0
- package/dist/knowledge/context.js +61 -0
- package/dist/knowledge/index.d.ts +3 -0
- package/dist/knowledge/index.js +1 -0
- package/dist/knowledge/journal.d.ts +16 -0
- package/dist/knowledge/journal.js +109 -0
- package/dist/knowledge/lifecycle.d.ts +8 -0
- package/dist/knowledge/lifecycle.js +1001 -0
- package/dist/knowledge/paths.d.ts +37 -0
- package/dist/knowledge/paths.js +236 -0
- package/dist/knowledge/refs.d.ts +36 -0
- package/dist/knowledge/refs.js +267 -0
- package/dist/knowledge/service.d.ts +21 -0
- package/dist/knowledge/service.js +393 -0
- package/dist/knowledge/types.d.ts +171 -0
- package/dist/knowledge/types.js +1 -0
- package/dist/knowledge/write.d.ts +8 -0
- package/dist/knowledge/write.js +1223 -0
- package/dist/package-info.d.ts +8 -0
- package/dist/package-info.js +25 -0
- package/dist/schemas/code.d.ts +377 -0
- package/dist/schemas/code.js +145 -0
- package/dist/schemas/collaboration.d.ts +115 -0
- package/dist/schemas/collaboration.js +106 -0
- package/dist/schemas/continuity.d.ts +315 -0
- package/dist/schemas/continuity.js +199 -0
- package/dist/schemas/diagnostics.d.ts +28 -0
- package/dist/schemas/diagnostics.js +27 -0
- package/dist/schemas/doctor.d.ts +157 -0
- package/dist/schemas/doctor.js +75 -0
- package/dist/schemas/document.d.ts +644 -0
- package/dist/schemas/document.js +296 -0
- package/dist/schemas/errors.d.ts +177 -0
- package/dist/schemas/errors.js +176 -0
- package/dist/schemas/evidence.d.ts +24 -0
- package/dist/schemas/evidence.js +16 -0
- package/dist/schemas/host.d.ts +436 -0
- package/dist/schemas/host.js +203 -0
- package/dist/schemas/index.d.ts +15 -0
- package/dist/schemas/index.js +15 -0
- package/dist/schemas/init.d.ts +121 -0
- package/dist/schemas/init.js +94 -0
- package/dist/schemas/install.d.ts +227 -0
- package/dist/schemas/install.js +147 -0
- package/dist/schemas/machine.d.ts +43 -0
- package/dist/schemas/machine.js +96 -0
- package/dist/schemas/outcome.d.ts +23 -0
- package/dist/schemas/outcome.js +17 -0
- package/dist/schemas/paths.d.ts +19 -0
- package/dist/schemas/paths.js +63 -0
- package/dist/schemas/workspace.d.ts +120 -0
- package/dist/schemas/workspace.js +201 -0
- package/dist/workspace/config-file.d.ts +36 -0
- package/dist/workspace/config-file.js +237 -0
- package/dist/workspace/config.d.ts +28 -0
- package/dist/workspace/config.js +79 -0
- package/dist/workspace/discover.d.ts +34 -0
- package/dist/workspace/discover.js +195 -0
- package/dist/workspace/documents.d.ts +21 -0
- package/dist/workspace/documents.js +395 -0
- package/dist/workspace/ignore.d.ts +10 -0
- package/dist/workspace/ignore.js +48 -0
- package/dist/workspace/index.d.ts +7 -0
- package/dist/workspace/index.js +3 -0
- package/dist/workspace/repositories.d.ts +24 -0
- package/dist/workspace/repositories.js +411 -0
- package/dist/workspace/resolve.d.ts +24 -0
- package/dist/workspace/resolve.js +268 -0
- package/dist/workspace/types.d.ts +71 -0
- package/dist/workspace/types.js +1 -0
- package/dist/workspace/validation.d.ts +18 -0
- package/dist/workspace/validation.js +197 -0
- package/package.json +111 -4
- package/skills/pappra/SKILL.md +71 -0
- package/skills/pappra/references/hosts.md +40 -0
- package/skills/pappra/references/lifecycle.md +41 -0
- package/skills/pappra/references/operations.md +27 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { CliOutput } from '../output.js';
|
|
2
|
+
export declare const runtimeUsage: string;
|
|
3
|
+
export interface RuntimeCommandOptions {
|
|
4
|
+
readonly cwd: string;
|
|
5
|
+
readonly action: 'install' | 'status' | 'verify' | 'remove' | null;
|
|
6
|
+
readonly json: boolean;
|
|
7
|
+
readonly from: 'self' | 'tarball' | 'registry' | null;
|
|
8
|
+
readonly tarball: string | null;
|
|
9
|
+
readonly version: string | null;
|
|
10
|
+
readonly apply: boolean;
|
|
11
|
+
readonly bind: boolean;
|
|
12
|
+
readonly force: boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare function runRuntimeCommand(options: RuntimeCommandOptions, output: CliOutput): Promise<number>;
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import { resolve } from 'node:path';
|
|
2
|
+
import { getPackageInfo, getPackageRoot } from '../../package-info.js';
|
|
3
|
+
import { inspectRuntimeState, inspectRuntimeStatePassive, installRuntime, removeRuntime, resolveUserDataDir, runtimePaths, } from '../../install/runtime.js';
|
|
4
|
+
import { updateMachineRuntime } from '../../install/apply.js';
|
|
5
|
+
import { inspectMachineConfig } from '../../workspace/config.js';
|
|
6
|
+
import { resolveWorkspaceRoot } from '../../workspace/resolve.js';
|
|
7
|
+
export const runtimeUsage = 'pappra runtime <install|status|verify|remove> [options] [--json]\n' +
|
|
8
|
+
' install [--from self|tarball|registry] [--tarball <file>] [--runtime-version <v>]\n' +
|
|
9
|
+
' [--apply] [--bind]\n' +
|
|
10
|
+
' status\n' +
|
|
11
|
+
' verify [--runtime-version <v>]\n' +
|
|
12
|
+
' remove [--runtime-version <v>] --apply [--force]\n\n' +
|
|
13
|
+
'Install keeps a durable copy of the package outside the checkout. --from self packs the\n' +
|
|
14
|
+
'package that is currently executing, which is what makes an npx/dlx bootstrap survive\n' +
|
|
15
|
+
'cache eviction. Writes require --apply; --bind records the copy in machine.json.\n';
|
|
16
|
+
async function inspectBinding(cwd) {
|
|
17
|
+
const resolution = await resolveWorkspaceRoot({ startPath: cwd });
|
|
18
|
+
if (resolution.root === null)
|
|
19
|
+
return null;
|
|
20
|
+
const machine = await inspectMachineConfig(resolution.root);
|
|
21
|
+
return {
|
|
22
|
+
root: resolution.root,
|
|
23
|
+
machinePath: machine.path,
|
|
24
|
+
runtime: machine.value?.runtime === null || machine.value?.runtime === undefined
|
|
25
|
+
? null
|
|
26
|
+
: {
|
|
27
|
+
version: machine.value.runtime.version,
|
|
28
|
+
executable: machine.value.runtime.executable,
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function printDiagnostics(output, diagnostics) {
|
|
33
|
+
for (const diagnostic of diagnostics) {
|
|
34
|
+
output.stderr(` ${diagnostic.severity} ${diagnostic.code}: ${diagnostic.message}\n`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function sourceFor(options) {
|
|
38
|
+
const from = options.from ?? (options.tarball === null ? 'self' : 'tarball');
|
|
39
|
+
if (from === 'self')
|
|
40
|
+
return { kind: 'self' };
|
|
41
|
+
if (from === 'tarball') {
|
|
42
|
+
if (options.tarball === null)
|
|
43
|
+
return null;
|
|
44
|
+
return { kind: 'tarball', path: resolve(options.cwd, options.tarball) };
|
|
45
|
+
}
|
|
46
|
+
return { kind: 'version' };
|
|
47
|
+
}
|
|
48
|
+
async function runInstall(options, output, binding) {
|
|
49
|
+
const packageInfo = getPackageInfo();
|
|
50
|
+
const version = options.version ?? packageInfo.version;
|
|
51
|
+
const source = sourceFor(options);
|
|
52
|
+
if (source === null) {
|
|
53
|
+
output.stderr('pappra runtime install: --from tarball requires --tarball.\n');
|
|
54
|
+
return 2;
|
|
55
|
+
}
|
|
56
|
+
const dataDir = resolveUserDataDir();
|
|
57
|
+
const paths = runtimePaths(version, dataDir);
|
|
58
|
+
if (!options.apply) {
|
|
59
|
+
if (options.json) {
|
|
60
|
+
output.stdout(`${JSON.stringify({
|
|
61
|
+
ok: true,
|
|
62
|
+
command: 'runtime',
|
|
63
|
+
action: 'install',
|
|
64
|
+
mode: 'plan',
|
|
65
|
+
version,
|
|
66
|
+
source: source.kind,
|
|
67
|
+
dataDir,
|
|
68
|
+
runtimeRoot: paths.runtimeRoot,
|
|
69
|
+
bind: options.bind,
|
|
70
|
+
workspaceRoot: binding?.root ?? null,
|
|
71
|
+
nextActions: ['Rerun with --apply to install this exact runtime.'],
|
|
72
|
+
})}\n`);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
output.stdout(`Runtime plan: ${packageInfo.name}@${version}\n`);
|
|
76
|
+
output.stdout(`Source: ${source.kind}\n`);
|
|
77
|
+
output.stdout(`Target: ${paths.runtimeRoot}\n`);
|
|
78
|
+
output.stdout('Plan only; rerun with --apply to install it.\n');
|
|
79
|
+
}
|
|
80
|
+
return 0;
|
|
81
|
+
}
|
|
82
|
+
const installed = await installRuntime({
|
|
83
|
+
version,
|
|
84
|
+
source: source.kind === 'tarball'
|
|
85
|
+
? { kind: 'tarball', path: source.path }
|
|
86
|
+
: source.kind === 'self'
|
|
87
|
+
? { kind: 'self', path: getPackageRoot() }
|
|
88
|
+
: { kind: 'version' },
|
|
89
|
+
packageName: packageInfo.name,
|
|
90
|
+
});
|
|
91
|
+
let bindingResult = null;
|
|
92
|
+
if (installed.ok && installed.manifest !== null && options.bind) {
|
|
93
|
+
if (binding === null) {
|
|
94
|
+
output.stderr('pappra runtime install: --bind requires a registered workspace root.\n');
|
|
95
|
+
return 1;
|
|
96
|
+
}
|
|
97
|
+
const updated = await updateMachineRuntime(binding.root, installed.manifest);
|
|
98
|
+
bindingResult = { ok: updated.ok, diagnostics: updated.diagnostics };
|
|
99
|
+
if (!updated.ok) {
|
|
100
|
+
if (options.json) {
|
|
101
|
+
output.stdout(`${JSON.stringify({
|
|
102
|
+
ok: false,
|
|
103
|
+
command: 'runtime',
|
|
104
|
+
action: 'install',
|
|
105
|
+
version,
|
|
106
|
+
runtime: installed,
|
|
107
|
+
bind: { ok: false, diagnostics: updated.diagnostics },
|
|
108
|
+
})}\n`);
|
|
109
|
+
}
|
|
110
|
+
printDiagnostics(output, updated.diagnostics);
|
|
111
|
+
return 1;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (options.json) {
|
|
115
|
+
output.stdout(`${JSON.stringify({
|
|
116
|
+
ok: installed.ok,
|
|
117
|
+
command: 'runtime',
|
|
118
|
+
action: 'install',
|
|
119
|
+
version,
|
|
120
|
+
source: source.kind,
|
|
121
|
+
runtime: installed,
|
|
122
|
+
bind: bindingResult,
|
|
123
|
+
diagnostics: installed.diagnostics,
|
|
124
|
+
})}\n`);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
output.stdout(`Runtime: ${installed.status} ${version}\n`);
|
|
128
|
+
if (installed.runtimeRoot !== null) {
|
|
129
|
+
output.stdout(`Location: ${installed.runtimeRoot}\n`);
|
|
130
|
+
}
|
|
131
|
+
if (bindingResult?.ok === true) {
|
|
132
|
+
output.stdout('Machine binding updated.\n');
|
|
133
|
+
}
|
|
134
|
+
printDiagnostics(output, installed.diagnostics);
|
|
135
|
+
}
|
|
136
|
+
return installed.ok ? 0 : 1;
|
|
137
|
+
}
|
|
138
|
+
async function runStatus(options, output, binding) {
|
|
139
|
+
const packageInfo = getPackageInfo();
|
|
140
|
+
const version = options.version ?? binding?.runtime?.version ?? packageInfo.version;
|
|
141
|
+
const dataDir = resolveUserDataDir();
|
|
142
|
+
const state = await inspectRuntimeStatePassive(version, dataDir);
|
|
143
|
+
if (options.json) {
|
|
144
|
+
output.stdout(`${JSON.stringify({
|
|
145
|
+
ok: true,
|
|
146
|
+
command: 'runtime',
|
|
147
|
+
action: 'status',
|
|
148
|
+
version,
|
|
149
|
+
dataDir,
|
|
150
|
+
workspaceRoot: binding?.root ?? null,
|
|
151
|
+
machineRuntime: binding?.runtime ?? null,
|
|
152
|
+
runtime: {
|
|
153
|
+
status: state.status,
|
|
154
|
+
runtimeRoot: state.runtimeRoot,
|
|
155
|
+
packageDigestMatch: state.packageDigestMatch,
|
|
156
|
+
executableExists: state.executableExists,
|
|
157
|
+
verifiedAt: state.manifest?.verifiedAt ?? null,
|
|
158
|
+
source: state.manifest?.source.kind ?? null,
|
|
159
|
+
},
|
|
160
|
+
diagnostics: state.diagnostics,
|
|
161
|
+
})}\n`);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
output.stdout(`Runtime ${version}: ${state.status}\n`);
|
|
165
|
+
output.stdout(`Location: ${state.runtimeRoot}\n`);
|
|
166
|
+
if (state.manifest !== null) {
|
|
167
|
+
output.stdout(`Verified at: ${state.manifest.verifiedAt}\n`);
|
|
168
|
+
}
|
|
169
|
+
output.stdout(`Bound in machine.json: ${binding?.runtime?.version === version ? 'yes' : 'no'}\n`);
|
|
170
|
+
printDiagnostics(output, state.diagnostics);
|
|
171
|
+
}
|
|
172
|
+
return 0;
|
|
173
|
+
}
|
|
174
|
+
async function runVerify(options, output, binding) {
|
|
175
|
+
const packageInfo = getPackageInfo();
|
|
176
|
+
const version = options.version ?? binding?.runtime?.version ?? packageInfo.version;
|
|
177
|
+
const state = await inspectRuntimeState(version, resolveUserDataDir());
|
|
178
|
+
const ok = state.status === 'complete';
|
|
179
|
+
if (options.json) {
|
|
180
|
+
output.stdout(`${JSON.stringify({
|
|
181
|
+
ok,
|
|
182
|
+
command: 'runtime',
|
|
183
|
+
action: 'verify',
|
|
184
|
+
version,
|
|
185
|
+
status: state.status,
|
|
186
|
+
runtimeRoot: state.runtimeRoot,
|
|
187
|
+
manifest: state.manifest,
|
|
188
|
+
diagnostics: state.diagnostics,
|
|
189
|
+
})}\n`);
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
output.stdout(`Runtime ${version}: ${state.status}\n`);
|
|
193
|
+
printDiagnostics(output, state.diagnostics);
|
|
194
|
+
}
|
|
195
|
+
return ok ? 0 : 1;
|
|
196
|
+
}
|
|
197
|
+
async function runRemove(options, output, binding) {
|
|
198
|
+
const version = options.version ?? binding?.runtime?.version ?? null;
|
|
199
|
+
if (version === null) {
|
|
200
|
+
output.stderr('pappra runtime remove: --version is required.\n');
|
|
201
|
+
return 2;
|
|
202
|
+
}
|
|
203
|
+
if (!options.apply) {
|
|
204
|
+
output.stderr('pappra runtime remove: rerun with --apply to remove it.\n');
|
|
205
|
+
return 2;
|
|
206
|
+
}
|
|
207
|
+
const boundHere = binding?.runtime?.version === version;
|
|
208
|
+
if (boundHere && !options.force) {
|
|
209
|
+
const message = 'machine.json still binds this runtime; pass --force to remove it anyway.';
|
|
210
|
+
if (options.json) {
|
|
211
|
+
output.stdout(`${JSON.stringify({
|
|
212
|
+
ok: false,
|
|
213
|
+
command: 'runtime',
|
|
214
|
+
action: 'remove',
|
|
215
|
+
version,
|
|
216
|
+
message,
|
|
217
|
+
})}\n`);
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
output.stderr(`pappra runtime remove: ${message}\n`);
|
|
221
|
+
}
|
|
222
|
+
return 1;
|
|
223
|
+
}
|
|
224
|
+
const removed = await removeRuntime({
|
|
225
|
+
version,
|
|
226
|
+
dataDir: resolveUserDataDir(),
|
|
227
|
+
// The current workspace was already checked above; callers that need to
|
|
228
|
+
// protect other checkouts pass --force only after checking them.
|
|
229
|
+
activeReferences: [],
|
|
230
|
+
});
|
|
231
|
+
if (options.json) {
|
|
232
|
+
output.stdout(`${JSON.stringify({
|
|
233
|
+
ok: removed.ok,
|
|
234
|
+
command: 'runtime',
|
|
235
|
+
action: 'remove',
|
|
236
|
+
version,
|
|
237
|
+
removed,
|
|
238
|
+
machineBindingRetained: boundHere,
|
|
239
|
+
})}\n`);
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
output.stdout(`Runtime ${version}: ${removed.status}\n`);
|
|
243
|
+
printDiagnostics(output, removed.diagnostics);
|
|
244
|
+
}
|
|
245
|
+
return removed.ok ? 0 : 1;
|
|
246
|
+
}
|
|
247
|
+
export async function runRuntimeCommand(options, output) {
|
|
248
|
+
if (options.action === null) {
|
|
249
|
+
output.stderr(`${runtimeUsage}`);
|
|
250
|
+
return 2;
|
|
251
|
+
}
|
|
252
|
+
const binding = await inspectBinding(options.cwd);
|
|
253
|
+
switch (options.action) {
|
|
254
|
+
case 'install':
|
|
255
|
+
return runInstall(options, output, binding);
|
|
256
|
+
case 'status':
|
|
257
|
+
return runStatus(options, output, binding);
|
|
258
|
+
case 'verify':
|
|
259
|
+
return runVerify(options, output, binding);
|
|
260
|
+
case 'remove':
|
|
261
|
+
return runRemove(options, output, binding);
|
|
262
|
+
}
|
|
263
|
+
}
|
package/dist/cli/main.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|