create-aura-appliance 0.1.4 → 0.2.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/README.md +6 -1
- package/dist/cli.d.ts +3 -3
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +10 -22
- package/dist/cli.js.map +1 -1
- package/dist/config-file.d.ts.map +1 -1
- package/dist/config-file.js +3 -5
- package/dist/config-file.js.map +1 -1
- package/dist/local.d.ts +2 -2
- package/dist/local.d.ts.map +1 -1
- package/dist/local.js +2 -2
- package/dist/local.js.map +1 -1
- package/dist/messages/en.d.ts +0 -12
- package/dist/messages/en.d.ts.map +1 -1
- package/dist/messages/en.js +0 -12
- package/dist/messages/en.js.map +1 -1
- package/dist/messages/it.d.ts.map +1 -1
- package/dist/messages/it.js +0 -12
- package/dist/messages/it.js.map +1 -1
- package/dist/prompts.d.ts +1 -7
- package/dist/prompts.d.ts.map +1 -1
- package/dist/prompts.js +7 -73
- package/dist/prompts.js.map +1 -1
- package/dist/remote.d.ts +2 -3
- package/dist/remote.d.ts.map +1 -1
- package/dist/remote.js +6 -30
- package/dist/remote.js.map +1 -1
- package/dist/types.d.ts +0 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/validation.d.ts +0 -2
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +0 -28
- package/dist/validation.js.map +1 -1
- package/install-appliance.run +247 -230
- package/package.json +1 -1
- package/dist/modelroute.d.ts +0 -7
- package/dist/modelroute.d.ts.map +0 -1
- package/dist/modelroute.js +0 -33
- package/dist/modelroute.js.map +0 -1
package/README.md
CHANGED
|
@@ -10,7 +10,7 @@ npx create-aura-appliance --mode remote
|
|
|
10
10
|
|
|
11
11
|
## What it does
|
|
12
12
|
|
|
13
|
-
The wizard collects the target
|
|
13
|
+
The wizard collects the target, writes an installer config, and then
|
|
14
14
|
runs the appliance installer. The installer is **carried inside this package** as a
|
|
15
15
|
self-extracting archive: nothing is fetched from a source host at install time, so the
|
|
16
16
|
payload you run is the payload npm delivered.
|
|
@@ -25,6 +25,11 @@ Installs made from this package track the `edge` channel: the appliance images c
|
|
|
25
25
|
moving `:edge` tag, Docker is set to always re-pull them, and a systemd timer applies new
|
|
26
26
|
images as they are published — so the box keeps itself current without you returning to it.
|
|
27
27
|
|
|
28
|
+
The appliance uses `single_user_hardened` with identity isolation enabled. Reinstalling
|
|
29
|
+
or updating also repairs existing configurations that omitted these settings or selected
|
|
30
|
+
`dev` or `local_trusted`. An existing `server_production` profile is preserved. Secrets
|
|
31
|
+
and other settings are retained. Writable uv, npm and pip caches belong to each identity.
|
|
32
|
+
|
|
28
33
|
## Requirements
|
|
29
34
|
|
|
30
35
|
On the machine running this wizard: Node.js >= 22.13.
|
package/dist/cli.d.ts
CHANGED
|
@@ -6,10 +6,10 @@ import type { CommandRunner } from './process.js';
|
|
|
6
6
|
import type { InstallMode, InstallSettings, RemoteTarget } from './types.js';
|
|
7
7
|
type Writer = (message: string) => void;
|
|
8
8
|
type TargetCollector = (prompt: PromptPort, t: ReturnType<typeof createTranslator>, requestedMode?: InstallMode) => Promise<TargetSelection>;
|
|
9
|
-
type SettingsCollector = (prompt: PromptPort, t: ReturnType<typeof createTranslator>, installDir: string
|
|
9
|
+
type SettingsCollector = (prompt: PromptPort, t: ReturnType<typeof createTranslator>, installDir: string) => Promise<InstallSettings | null>;
|
|
10
10
|
type ConfigCreator = (settings: InstallSettings) => Promise<TemporaryFile>;
|
|
11
|
-
type LocalInstaller = (runner: CommandRunner, config: TemporaryFile
|
|
12
|
-
type RemoteInstaller = (runner: CommandRunner, target: RemoteTarget, config: TemporaryFile
|
|
11
|
+
type LocalInstaller = (runner: CommandRunner, config: TemporaryFile) => Promise<void>;
|
|
12
|
+
type RemoteInstaller = (runner: CommandRunner, target: RemoteTarget, config: TemporaryFile) => Promise<void>;
|
|
13
13
|
export interface CliDependencies {
|
|
14
14
|
locale?: string;
|
|
15
15
|
version?: string;
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,OAAO,EAAE,gBAAgB,EAAgB,MAAM,WAAW,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAG5C,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEhE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG7E,KAAK,MAAM,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AACxC,KAAK,eAAe,GAAG,CACrB,MAAM,EAAE,UAAU,EAClB,CAAC,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,EACtC,aAAa,CAAC,EAAE,WAAW,KACxB,OAAO,CAAC,eAAe,CAAC,CAAC;AAC9B,KAAK,iBAAiB,GAAG,CACvB,MAAM,EAAE,UAAU,EAClB,CAAC,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,EACtC,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,OAAO,EAAE,gBAAgB,EAAgB,MAAM,WAAW,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAG5C,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEhE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG7E,KAAK,MAAM,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AACxC,KAAK,eAAe,GAAG,CACrB,MAAM,EAAE,UAAU,EAClB,CAAC,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,EACtC,aAAa,CAAC,EAAE,WAAW,KACxB,OAAO,CAAC,eAAe,CAAC,CAAC;AAC9B,KAAK,iBAAiB,GAAG,CACvB,MAAM,EAAE,UAAU,EAClB,CAAC,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,EACtC,UAAU,EAAE,MAAM,KACf,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;AACrC,KAAK,aAAa,GAAG,CAAC,QAAQ,EAAE,eAAe,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;AAC3E,KAAK,cAAc,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AACtF,KAAK,eAAe,GAAG,CACrB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,aAAa,KAClB,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IAIjB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,aAAa,CAAC,EAAE,eAAe,CAAC;IAChC,eAAe,CAAC,EAAE,iBAAiB,CAAC;IACpC,YAAY,CAAC,EAAE,aAAa,CAAC;IAK7B,YAAY,CAAC,EAAE,cAAc,CAAC;IAC9B,aAAa,CAAC,EAAE,eAAe,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAYD,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAoBvE,CAAC;AA0CF,wBAAsB,MAAM,CAC1B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,YAAY,GAAE,eAAoB,GACjC,OAAO,CAAC,MAAM,CAAC,CAuHjB"}
|
package/dist/cli.js
CHANGED
|
@@ -4,7 +4,7 @@ import { createTranslator, detectLocale } from './i18n.js';
|
|
|
4
4
|
import { installLocal, preflightLocal, resolveInstallerArtifact } from './local.js';
|
|
5
5
|
import { collectSettings, collectTarget, inquirerPrompt } from './prompts.js';
|
|
6
6
|
import { ProcessRunner } from './process.js';
|
|
7
|
-
import {
|
|
7
|
+
import { installRemote, preflightRemote } from './remote.js';
|
|
8
8
|
import { ValidationError } from './validation.js';
|
|
9
9
|
// Exported so cli.test.ts can assert, in one place, that every mapped code resolves to a
|
|
10
10
|
// real message in both catalogues and that every preflight.ts error code is mapped (F3,
|
|
@@ -16,8 +16,6 @@ export const TRANSLATED_ERROR_CODES = {
|
|
|
16
16
|
invalidPort: 'invalidPort',
|
|
17
17
|
invalidUsername: 'invalidUsername',
|
|
18
18
|
invalidInstallDir: 'invalidInstallDir',
|
|
19
|
-
invalidBaseUrl: 'invalidBaseUrl',
|
|
20
|
-
invalidModelId: 'invalidModelId',
|
|
21
19
|
unsupportedArchitecture: 'unsupportedArchitecture',
|
|
22
20
|
invalidDiskAvailability: 'invalidDiskAvailability',
|
|
23
21
|
insufficientDiskSpace: 'insufficientDiskSpace',
|
|
@@ -102,20 +100,18 @@ export async function runCli(argv, dependencies = {}) {
|
|
|
102
100
|
const configCreator = dependencies.createConfig ?? createTemporaryInstallConfig;
|
|
103
101
|
// R5/R6: the real installer runs the bundled makeself artifact (Task 7 packages it beside
|
|
104
102
|
// this module); resolving it here, once, keeps local.ts/remote.ts's own exported
|
|
105
|
-
// installLocal/installRemote matching the reference's
|
|
106
|
-
|
|
107
|
-
// file already declares.
|
|
108
|
-
const localInstaller = dependencies.installLocal ?? (async (installRunner, installConfig, installSettings) => {
|
|
103
|
+
// installLocal/installRemote matching the reference's (runner, artifact, config) shape.
|
|
104
|
+
const localInstaller = dependencies.installLocal ?? (async (installRunner, installConfig) => {
|
|
109
105
|
const artifact = await resolveInstallerArtifact();
|
|
110
|
-
await installLocal(installRunner, artifact, installConfig
|
|
106
|
+
await installLocal(installRunner, artifact, installConfig);
|
|
111
107
|
});
|
|
112
|
-
const remoteInstaller = dependencies.installRemote ?? (async (installRunner, installTarget, installConfig
|
|
108
|
+
const remoteInstaller = dependencies.installRemote ?? (async (installRunner, installTarget, installConfig) => {
|
|
113
109
|
const artifact = await resolveInstallerArtifact();
|
|
114
110
|
// Matches the reference cli.ts's own default wiring: a best-effort cleanup failure is a
|
|
115
111
|
// warning, not a fatal error, and which of the two cleanup steps produced it does not
|
|
116
112
|
// change what the operator needs to do (re-run is safe either way) -- so one generic
|
|
117
113
|
// message covers both, exactly like cleanupWarning already does for the config file.
|
|
118
|
-
await installRemote(installRunner, installTarget, artifact, installConfig,
|
|
114
|
+
await installRemote(installRunner, installTarget, artifact, installConfig, undefined, () => writeError(t('cleanupWarning')));
|
|
119
115
|
});
|
|
120
116
|
let config;
|
|
121
117
|
let operationError;
|
|
@@ -124,13 +120,7 @@ export async function runCli(argv, dependencies = {}) {
|
|
|
124
120
|
const target = await targetCollector(prompt, t, parsed.mode);
|
|
125
121
|
write(t('phasePreflight'));
|
|
126
122
|
// R1: the wizard runs on the operator's laptop, but in remote mode the install lands on
|
|
127
|
-
// a different machine
|
|
128
|
-
// target. R2 (Task 6, closing this out): remote mode used to pass undefined here --
|
|
129
|
-
// probing the laptop and presenting the answer as if it were the target's would have been
|
|
130
|
-
// worse than not probing -- but now wraps the runner over SSH (createSshProbeRunner) so
|
|
131
|
-
// collectSettings's Ollama probe reaches the real target. Nothing in collectSettings or
|
|
132
|
-
// modelroute.ts needed to change: the seam was built for exactly this swap.
|
|
133
|
-
let probeRunner;
|
|
123
|
+
// a different machine, so each mode preflights the machine it actually installs onto.
|
|
134
124
|
if (target.mode === 'remote') {
|
|
135
125
|
if (!target.remote)
|
|
136
126
|
throw new Error('invalidRemoteTarget');
|
|
@@ -142,7 +132,6 @@ export async function runCli(argv, dependencies = {}) {
|
|
|
142
132
|
}));
|
|
143
133
|
if (preflight.existingInstall)
|
|
144
134
|
write(t('existingInstall'));
|
|
145
|
-
probeRunner = createSshProbeRunner(runner, target.remote);
|
|
146
135
|
}
|
|
147
136
|
else {
|
|
148
137
|
// R1 (carried Task 5 debt, closed): the hardware/command/host gate that used to live
|
|
@@ -153,9 +142,8 @@ export async function runCli(argv, dependencies = {}) {
|
|
|
153
142
|
write(t('localTargetSummary'));
|
|
154
143
|
if (preflight.existingInstall)
|
|
155
144
|
write(t('existingInstall'));
|
|
156
|
-
probeRunner = runner;
|
|
157
145
|
}
|
|
158
|
-
const settings = await settingsCollector(prompt, t, target.installDir
|
|
146
|
+
const settings = await settingsCollector(prompt, t, target.installDir);
|
|
159
147
|
if (settings === null) {
|
|
160
148
|
write(t('cancelled'));
|
|
161
149
|
return 0;
|
|
@@ -165,10 +153,10 @@ export async function runCli(argv, dependencies = {}) {
|
|
|
165
153
|
if (target.mode === 'remote') {
|
|
166
154
|
if (!target.remote)
|
|
167
155
|
throw new Error('invalidRemoteTarget');
|
|
168
|
-
await remoteInstaller(runner, target.remote, config
|
|
156
|
+
await remoteInstaller(runner, target.remote, config);
|
|
169
157
|
}
|
|
170
158
|
else {
|
|
171
|
-
await localInstaller(runner, config
|
|
159
|
+
await localInstaller(runner, config);
|
|
172
160
|
}
|
|
173
161
|
installed = true;
|
|
174
162
|
}
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGvC,OAAO,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9E,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-file.d.ts","sourceRoot":"","sources":["../src/config-file.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGlD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,sBAAuB,SAAQ,aAAa;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAaD,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"config-file.d.ts","sourceRoot":"","sources":["../src/config-file.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGlD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,sBAAuB,SAAQ,aAAa;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAaD,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,CAYxE;AAED,wBAAsB,4BAA4B,CAChD,QAAQ,EAAE,eAAe,EACzB,QAAQ,SAAW,GAClB,OAAO,CAAC,sBAAsB,CAAC,CAkBjC"}
|
package/dist/config-file.js
CHANGED
|
@@ -14,16 +14,14 @@ function encode(value) {
|
|
|
14
14
|
}
|
|
15
15
|
export function serializeInstallConfig(settings) {
|
|
16
16
|
return [
|
|
17
|
-
|
|
17
|
+
// Format 2 carries infrastructure only: the model route and the OpenRouter key are chosen
|
|
18
|
+
// in the first-run web setup, so no credential crosses to the install target.
|
|
19
|
+
'format=2',
|
|
18
20
|
`install_dir_base64=${encode(settings.installDir)}`,
|
|
19
21
|
// appliance and gvisor are the two install.sh reads RAW; base64-ing them would make
|
|
20
22
|
// its literal `= "true"` comparison false and silently produce a non-appliance install.
|
|
21
23
|
`appliance=${settings.appliance ? 'true' : 'false'}`,
|
|
22
24
|
`gvisor=${settings.gvisor ? 'true' : 'false'}`,
|
|
23
|
-
`llm_provider_base64=${encode(settings.llmProvider)}`,
|
|
24
|
-
`llm_base_url_base64=${encode(settings.llmBaseUrl)}`,
|
|
25
|
-
`llm_model_base64=${encode(settings.llmModel)}`,
|
|
26
|
-
`openrouter_api_key_base64=${encode(settings.openrouterApiKey ?? '')}`,
|
|
27
25
|
'',
|
|
28
26
|
].join('\n');
|
|
29
27
|
}
|
package/dist/config-file.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-file.js","sourceRoot":"","sources":["../src/config-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAYpD,yFAAyF;AACzF,0GAA0G;AAC1G,yFAAyF;AACzF,wFAAwF;AACxF,uFAAuF;AACvF,oFAAoF;AACpF,SAAS,MAAM,CAAC,KAAa;IAC3B,iBAAiB,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;IAC/C,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,QAAyB;IAC9D,OAAO;QACL,UAAU;QACV,sBAAsB,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;QACnD,oFAAoF;QACpF,wFAAwF;QACxF,aAAa,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE;QACpD,UAAU,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE;QAC9C,
|
|
1
|
+
{"version":3,"file":"config-file.js","sourceRoot":"","sources":["../src/config-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAYpD,yFAAyF;AACzF,0GAA0G;AAC1G,yFAAyF;AACzF,wFAAwF;AACxF,uFAAuF;AACvF,oFAAoF;AACpF,SAAS,MAAM,CAAC,KAAa;IAC3B,iBAAiB,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;IAC/C,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,QAAyB;IAC9D,OAAO;QACL,0FAA0F;QAC1F,8EAA8E;QAC9E,UAAU;QACV,sBAAsB,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;QACnD,oFAAoF;QACpF,wFAAwF;QACxF,aAAa,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE;QACpD,UAAU,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE;QAC9C,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,QAAyB,EACzB,QAAQ,GAAG,MAAM,EAAE;IAEnB,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAE7C,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC9B,MAAM,SAAS,CAAC,IAAI,EAAE,sBAAsB,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3F,MAAM,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,MAAM,KAAK,CAAC;IACd,CAAC;IAED,OAAO;QACL,IAAI;QACJ,SAAS;QACT,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;KACrE,CAAC;AACJ,CAAC"}
|
package/dist/local.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { TemporaryFile } from './config-file.js';
|
|
2
2
|
import type { CommandRunner } from './process.js';
|
|
3
|
-
import type {
|
|
3
|
+
import type { PreflightResult } from './types.js';
|
|
4
4
|
export declare function preflightLocal(runner: CommandRunner, installDir: string, platform?: NodeJS.Platform): Promise<PreflightResult>;
|
|
5
5
|
export declare function resolveInstallerArtifact(): Promise<TemporaryFile>;
|
|
6
|
-
export declare function installLocal(runner: CommandRunner, artifact: TemporaryFile, config: TemporaryFile
|
|
6
|
+
export declare function installLocal(runner: CommandRunner, artifact: TemporaryFile, config: TemporaryFile): Promise<void>;
|
|
7
7
|
//# sourceMappingURL=local.d.ts.map
|
package/dist/local.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../src/local.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAOtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../src/local.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAOtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAkDlD,wBAAsB,cAAc,CAClC,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,MAAM,EAClB,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAC3C,OAAO,CAAC,eAAe,CAAC,CA0C1B;AAQD,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,aAAa,CAAC,CAQvE;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC,CASf"}
|
package/dist/local.js
CHANGED
|
@@ -100,11 +100,11 @@ export async function resolveInstallerArtifact() {
|
|
|
100
100
|
}
|
|
101
101
|
return { path, cleanup: async () => { } };
|
|
102
102
|
}
|
|
103
|
-
export async function installLocal(runner, artifact, config
|
|
103
|
+
export async function installLocal(runner, artifact, config) {
|
|
104
104
|
// R6 (Task 6 controller ruling): makeself's runtime header parses argv against its OWN
|
|
105
105
|
// flag set before it execs the embedded script, so `artifact --config X` dies with
|
|
106
106
|
// "Unrecognized flag" and install.sh never runs. `--` tells the header to stop parsing and
|
|
107
107
|
// hand everything after it to install.sh untouched.
|
|
108
|
-
await runner.run('sudo', ['bash', artifact.path, '--', '--config', config.path]
|
|
108
|
+
await runner.run('sudo', ['bash', artifact.path, '--', '--config', config.path]);
|
|
109
109
|
}
|
|
110
110
|
//# sourceMappingURL=local.js.map
|
package/dist/local.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local.js","sourceRoot":"","sources":["../src/local.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"local.js","sourceRoot":"","sources":["../src/local.ts"],"names":[],"mappings":"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"}
|
package/dist/messages/en.d.ts
CHANGED
|
@@ -28,8 +28,6 @@ export declare const en: {
|
|
|
28
28
|
readonly invalidPort: "Enter a port between 1 and 65535.";
|
|
29
29
|
readonly invalidUsername: "Enter a valid Linux username.";
|
|
30
30
|
readonly invalidInstallDir: "Enter an absolute Linux path other than /.";
|
|
31
|
-
readonly invalidBaseUrl: "Enter a valid http or https URL.";
|
|
32
|
-
readonly invalidModelId: "Enter a valid model identifier.";
|
|
33
31
|
readonly missingCommand: "Required command not found: {command}";
|
|
34
32
|
readonly preflightFailed: "Preflight failed: {reason}";
|
|
35
33
|
readonly insufficientDiskSpace: "Not enough free disk space on the installation target.";
|
|
@@ -46,15 +44,5 @@ export declare const en: {
|
|
|
46
44
|
readonly installFailed: "Installation failed during {phase}. It is safe to run the wizard again.";
|
|
47
45
|
readonly applianceQuestion: "Install as a self-starting appliance (systemd service that starts Aura on boot)?";
|
|
48
46
|
readonly gvisorQuestion: "Enable gVisor sandboxing for stronger container isolation (Linux with a Debian/Ubuntu package manager only)?";
|
|
49
|
-
readonly modelRouteQuestion: "Which model route should Aura use?";
|
|
50
|
-
readonly modelRouteOpenrouter: "OpenRouter (cloud API)";
|
|
51
|
-
readonly modelRouteOllama: "Ollama (local or remote server)";
|
|
52
|
-
readonly openrouterBaseUrl: "OpenRouter API base URL";
|
|
53
|
-
readonly openrouterApiKey: "OpenRouter API key";
|
|
54
|
-
readonly openrouterModel: "OpenRouter model id (e.g. vendor/model-name)";
|
|
55
|
-
readonly ollamaBaseUrl: "Ollama base URL";
|
|
56
|
-
readonly ollamaModelSelect: "Choose an installed Ollama model";
|
|
57
|
-
readonly ollamaModelManualEntry: "Enter the Ollama model id to use";
|
|
58
|
-
readonly ollamaModelUnreachable: "Could not reach that Ollama endpoint from here. Enter the model id you want to use";
|
|
59
47
|
};
|
|
60
48
|
//# sourceMappingURL=en.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/messages/en.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,EAAE
|
|
1
|
+
{"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/messages/en.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8CL,CAAC"}
|
package/dist/messages/en.js
CHANGED
|
@@ -28,8 +28,6 @@ export const en = {
|
|
|
28
28
|
invalidPort: 'Enter a port between 1 and 65535.',
|
|
29
29
|
invalidUsername: 'Enter a valid Linux username.',
|
|
30
30
|
invalidInstallDir: 'Enter an absolute Linux path other than /.',
|
|
31
|
-
invalidBaseUrl: 'Enter a valid http or https URL.',
|
|
32
|
-
invalidModelId: 'Enter a valid model identifier.',
|
|
33
31
|
missingCommand: 'Required command not found: {command}',
|
|
34
32
|
preflightFailed: 'Preflight failed: {reason}',
|
|
35
33
|
insufficientDiskSpace: 'Not enough free disk space on the installation target.',
|
|
@@ -46,15 +44,5 @@ export const en = {
|
|
|
46
44
|
installFailed: 'Installation failed during {phase}. It is safe to run the wizard again.',
|
|
47
45
|
applianceQuestion: 'Install as a self-starting appliance (systemd service that starts Aura on boot)?',
|
|
48
46
|
gvisorQuestion: 'Enable gVisor sandboxing for stronger container isolation (Linux with a Debian/Ubuntu package manager only)?',
|
|
49
|
-
modelRouteQuestion: 'Which model route should Aura use?',
|
|
50
|
-
modelRouteOpenrouter: 'OpenRouter (cloud API)',
|
|
51
|
-
modelRouteOllama: 'Ollama (local or remote server)',
|
|
52
|
-
openrouterBaseUrl: 'OpenRouter API base URL',
|
|
53
|
-
openrouterApiKey: 'OpenRouter API key',
|
|
54
|
-
openrouterModel: 'OpenRouter model id (e.g. vendor/model-name)',
|
|
55
|
-
ollamaBaseUrl: 'Ollama base URL',
|
|
56
|
-
ollamaModelSelect: 'Choose an installed Ollama model',
|
|
57
|
-
ollamaModelManualEntry: 'Enter the Ollama model id to use',
|
|
58
|
-
ollamaModelUnreachable: 'Could not reach that Ollama endpoint from here. Enter the model id you want to use',
|
|
59
47
|
};
|
|
60
48
|
//# sourceMappingURL=en.js.map
|
package/dist/messages/en.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.js","sourceRoot":"","sources":["../../src/messages/en.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,EAAE,GAAG;IAChB,cAAc,EAAE,2DAA2D;IAC3E,SAAS,EAAE,+DAA+D;IAC1E,QAAQ,EAAE,iEAAiE;IAC3E,QAAQ,EAAE,uCAAuC;IACjD,WAAW,EAAE,iDAAiD;IAC9D,UAAU,EAAE,6DAA6D;IACzE,YAAY,EAAE,oCAAoC;IAClD,SAAS,EAAE,mBAAmB;IAC9B,UAAU,EAAE,gCAAgC;IAC5C,UAAU,EAAE,+BAA+B;IAC3C,UAAU,EAAE,UAAU;IACtB,cAAc,EAAE,cAAc;IAC9B,UAAU,EAAE,wBAAwB;IACpC,cAAc,EAAE,0BAA0B;IAC1C,eAAe,EAAE,2EAA2E;IAC5F,mBAAmB,EAAE,8BAA8B;IACnD,kBAAkB,EAAE,2BAA2B;IAC/C,cAAc,EAAE,kBAAkB;IAClC,aAAa,EAAE,+BAA+B;IAC9C,YAAY,EAAE,cAAc;IAC5B,YAAY,EAAE,wBAAwB;IACtC,eAAe,EAAE,mBAAmB;IACpC,SAAS,EAAE,+CAA+C;IAC1D,wBAAwB,EAAE,4EAA4E;IACtG,wBAAwB,EAAE,8DAA8D;IACxF,WAAW,EAAE,uCAAuC;IACpD,WAAW,EAAE,mCAAmC;IAChD,eAAe,EAAE,+BAA+B;IAChD,iBAAiB,EAAE,4CAA4C;IAC/D,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"en.js","sourceRoot":"","sources":["../../src/messages/en.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,EAAE,GAAG;IAChB,cAAc,EAAE,2DAA2D;IAC3E,SAAS,EAAE,+DAA+D;IAC1E,QAAQ,EAAE,iEAAiE;IAC3E,QAAQ,EAAE,uCAAuC;IACjD,WAAW,EAAE,iDAAiD;IAC9D,UAAU,EAAE,6DAA6D;IACzE,YAAY,EAAE,oCAAoC;IAClD,SAAS,EAAE,mBAAmB;IAC9B,UAAU,EAAE,gCAAgC;IAC5C,UAAU,EAAE,+BAA+B;IAC3C,UAAU,EAAE,UAAU;IACtB,cAAc,EAAE,cAAc;IAC9B,UAAU,EAAE,wBAAwB;IACpC,cAAc,EAAE,0BAA0B;IAC1C,eAAe,EAAE,2EAA2E;IAC5F,mBAAmB,EAAE,8BAA8B;IACnD,kBAAkB,EAAE,2BAA2B;IAC/C,cAAc,EAAE,kBAAkB;IAClC,aAAa,EAAE,+BAA+B;IAC9C,YAAY,EAAE,cAAc;IAC5B,YAAY,EAAE,wBAAwB;IACtC,eAAe,EAAE,mBAAmB;IACpC,SAAS,EAAE,+CAA+C;IAC1D,wBAAwB,EAAE,4EAA4E;IACtG,wBAAwB,EAAE,8DAA8D;IACxF,WAAW,EAAE,uCAAuC;IACpD,WAAW,EAAE,mCAAmC;IAChD,eAAe,EAAE,+BAA+B;IAChD,iBAAiB,EAAE,4CAA4C;IAC/D,cAAc,EAAE,uCAAuC;IACvD,eAAe,EAAE,4BAA4B;IAC7C,qBAAqB,EAAE,wDAAwD;IAC/E,uBAAuB,EAAE,iDAAiD;IAC1E,uBAAuB,EAAE,0EAA0E;IACnG,eAAe,EAAE,yEAAyE;IAC1F,oBAAoB,EAAE,kDAAkD;IACxE,yBAAyB,EAAE,sEAAsE;IACjG,kBAAkB,EAAE,+CAA+C;IACnE,cAAc,EAAE,iDAAiD;IACjE,aAAa,EAAE,gCAAgC;IAC/C,4BAA4B,EAAE,oDAAoD;IAClF,+BAA+B,EAAE,wCAAwC;IACzE,aAAa,EAAE,yEAAyE;IACxF,iBAAiB,EAAE,kFAAkF;IACrG,cAAc,EAAE,8GAA8G;CACtH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"it.d.ts","sourceRoot":"","sources":["../../src/messages/it.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAElC,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,OAAO,EAAE,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"it.d.ts","sourceRoot":"","sources":["../../src/messages/it.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAElC,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,OAAO,EAAE,EAAE,MAAM,CA8C9C,CAAC"}
|
package/dist/messages/it.js
CHANGED
|
@@ -28,8 +28,6 @@ export const it = {
|
|
|
28
28
|
invalidPort: 'Inserisci una porta compresa tra 1 e 65535.',
|
|
29
29
|
invalidUsername: 'Inserisci un nome utente Linux valido.',
|
|
30
30
|
invalidInstallDir: 'Inserisci un percorso Linux assoluto diverso da /.',
|
|
31
|
-
invalidBaseUrl: 'Inserisci un URL http o https valido.',
|
|
32
|
-
invalidModelId: 'Inserisci un identificativo di modello valido.',
|
|
33
31
|
missingCommand: 'Comando richiesto non trovato: {command}',
|
|
34
32
|
preflightFailed: 'Controlli preliminari non riusciti: {reason}',
|
|
35
33
|
insufficientDiskSpace: 'Spazio libero su disco insufficiente sulla destinazione di installazione.',
|
|
@@ -46,15 +44,5 @@ export const it = {
|
|
|
46
44
|
installFailed: 'Installazione non riuscita durante: {phase}. È possibile eseguire nuovamente il wizard in sicurezza.',
|
|
47
45
|
applianceQuestion: 'Installare come appliance auto-avviante (servizio systemd che avvia Aura all’accensione)?',
|
|
48
46
|
gvisorQuestion: 'Abilitare la sandbox gVisor per un isolamento più forte dei container (solo Linux con gestore pacchetti Debian/Ubuntu)?',
|
|
49
|
-
modelRouteQuestion: 'Quale motore per il modello deve usare Aura?',
|
|
50
|
-
modelRouteOpenrouter: 'OpenRouter (API cloud)',
|
|
51
|
-
modelRouteOllama: 'Ollama (server locale o remoto)',
|
|
52
|
-
openrouterBaseUrl: 'URL base dell’API OpenRouter',
|
|
53
|
-
openrouterApiKey: 'Chiave API OpenRouter',
|
|
54
|
-
openrouterModel: 'Identificativo del modello OpenRouter (es. fornitore/nome-modello)',
|
|
55
|
-
ollamaBaseUrl: 'URL base di Ollama',
|
|
56
|
-
ollamaModelSelect: 'Scegli un modello Ollama installato',
|
|
57
|
-
ollamaModelManualEntry: 'Inserisci l’identificativo del modello Ollama da usare',
|
|
58
|
-
ollamaModelUnreachable: 'Non è stato possibile raggiungere quell’endpoint Ollama da qui. Inserisci l’identificativo del modello che vuoi usare',
|
|
59
47
|
};
|
|
60
48
|
//# sourceMappingURL=it.js.map
|
package/dist/messages/it.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"it.js","sourceRoot":"","sources":["../../src/messages/it.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,EAAE,GAAoC;IACjD,cAAc,EAAE,2DAA2D;IAC3E,SAAS,EAAE,6DAA6D;IACxE,QAAQ,EAAE,iEAAiE;IAC3E,QAAQ,EAAE,4CAA4C;IACtD,WAAW,EAAE,yDAAyD;IACtE,UAAU,EAAE,oEAAoE;IAChF,YAAY,EAAE,4BAA4B;IAC1C,SAAS,EAAE,6BAA6B;IACxC,UAAU,EAAE,4CAA4C;IACxD,UAAU,EAAE,0CAA0C;IACtD,UAAU,EAAE,WAAW;IACvB,cAAc,EAAE,iBAAiB;IACjC,UAAU,EAAE,4BAA4B;IACxC,cAAc,EAAE,qCAAqC;IACrD,eAAe,EAAE,8EAA8E;IAC/F,mBAAmB,EAAE,oCAAoC;IACzD,kBAAkB,EAAE,wCAAwC;IAC5D,cAAc,EAAE,uBAAuB;IACvC,aAAa,EAAE,uCAAuC;IACtD,YAAY,EAAE,oBAAoB;IAClC,YAAY,EAAE,2BAA2B;IACzC,eAAe,EAAE,uBAAuB;IACxC,SAAS,EAAE,uDAAuD;IAClE,wBAAwB,EAAE,0FAA0F;IACpH,wBAAwB,EAAE,wEAAwE;IAClG,WAAW,EAAE,kDAAkD;IAC/D,WAAW,EAAE,6CAA6C;IAC1D,eAAe,EAAE,wCAAwC;IACzD,iBAAiB,EAAE,oDAAoD;IACvE,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"it.js","sourceRoot":"","sources":["../../src/messages/it.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,EAAE,GAAoC;IACjD,cAAc,EAAE,2DAA2D;IAC3E,SAAS,EAAE,6DAA6D;IACxE,QAAQ,EAAE,iEAAiE;IAC3E,QAAQ,EAAE,4CAA4C;IACtD,WAAW,EAAE,yDAAyD;IACtE,UAAU,EAAE,oEAAoE;IAChF,YAAY,EAAE,4BAA4B;IAC1C,SAAS,EAAE,6BAA6B;IACxC,UAAU,EAAE,4CAA4C;IACxD,UAAU,EAAE,0CAA0C;IACtD,UAAU,EAAE,WAAW;IACvB,cAAc,EAAE,iBAAiB;IACjC,UAAU,EAAE,4BAA4B;IACxC,cAAc,EAAE,qCAAqC;IACrD,eAAe,EAAE,8EAA8E;IAC/F,mBAAmB,EAAE,oCAAoC;IACzD,kBAAkB,EAAE,wCAAwC;IAC5D,cAAc,EAAE,uBAAuB;IACvC,aAAa,EAAE,uCAAuC;IACtD,YAAY,EAAE,oBAAoB;IAClC,YAAY,EAAE,2BAA2B;IACzC,eAAe,EAAE,uBAAuB;IACxC,SAAS,EAAE,uDAAuD;IAClE,wBAAwB,EAAE,0FAA0F;IACpH,wBAAwB,EAAE,wEAAwE;IAClG,WAAW,EAAE,kDAAkD;IAC/D,WAAW,EAAE,6CAA6C;IAC1D,eAAe,EAAE,wCAAwC;IACzD,iBAAiB,EAAE,oDAAoD;IACvE,cAAc,EAAE,0CAA0C;IAC1D,eAAe,EAAE,8CAA8C;IAC/D,qBAAqB,EAAE,2EAA2E;IAClG,uBAAuB,EAAE,8DAA8D;IACvF,uBAAuB,EAAE,6FAA6F;IACtH,eAAe,EAAE,oFAAoF;IACrG,oBAAoB,EAAE,uEAAuE;IAC7F,yBAAyB,EAAE,qFAAqF;IAChH,kBAAkB,EAAE,4DAA4D;IAChF,cAAc,EAAE,6DAA6D;IAC7E,aAAa,EAAE,6CAA6C;IAC5D,4BAA4B,EAAE,4DAA4D;IAC1F,+BAA+B,EAAE,8CAA8C;IAC/E,aAAa,EAAE,sGAAsG;IACrH,iBAAiB,EAAE,2FAA2F;IAC9G,cAAc,EAAE,yHAAyH;CAC1I,CAAC"}
|
package/dist/prompts.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { Translator } from './i18n.js';
|
|
2
|
-
import type { CommandRunner } from './process.js';
|
|
3
2
|
import type { InstallMode, InstallSettings, RemoteTarget } from './types.js';
|
|
4
3
|
export interface SelectOptions {
|
|
5
4
|
message: string;
|
|
@@ -12,10 +11,6 @@ export interface InputOptions {
|
|
|
12
11
|
message: string;
|
|
13
12
|
default?: string;
|
|
14
13
|
}
|
|
15
|
-
export interface PasswordOptions {
|
|
16
|
-
message: string;
|
|
17
|
-
mask: string;
|
|
18
|
-
}
|
|
19
14
|
export interface ConfirmOptions {
|
|
20
15
|
message: string;
|
|
21
16
|
default: boolean;
|
|
@@ -23,7 +18,6 @@ export interface ConfirmOptions {
|
|
|
23
18
|
export interface PromptPort {
|
|
24
19
|
select(options: SelectOptions): Promise<string>;
|
|
25
20
|
input(options: InputOptions): Promise<string>;
|
|
26
|
-
password(options: PasswordOptions): Promise<string>;
|
|
27
21
|
confirm(options: ConfirmOptions): Promise<boolean>;
|
|
28
22
|
}
|
|
29
23
|
export declare const inquirerPrompt: PromptPort;
|
|
@@ -33,5 +27,5 @@ export interface TargetSelection {
|
|
|
33
27
|
remote?: RemoteTarget;
|
|
34
28
|
}
|
|
35
29
|
export declare function collectTarget(prompt: PromptPort, t: Translator, requestedMode?: InstallMode): Promise<TargetSelection>;
|
|
36
|
-
export declare function collectSettings(prompt: PromptPort, t: Translator, installDir: string
|
|
30
|
+
export declare function collectSettings(prompt: PromptPort, t: Translator, installDir: string): Promise<InstallSettings | null>;
|
|
37
31
|
//# sourceMappingURL=prompts.d.ts.map
|
package/dist/prompts.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAQ7E,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACrD;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACpD;AAED,eAAO,MAAM,cAAc,EAAE,UAI5B,CAAC;AAEF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,UAAU,EAClB,CAAC,EAAE,UAAU,EACb,aAAa,CAAC,EAAE,WAAW,GAC1B,OAAO,CAAC,eAAe,CAAC,CA2B1B;AAKD,wBAAsB,eAAe,CACnC,MAAM,EAAE,UAAU,EAClB,CAAC,EAAE,UAAU,EACb,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAQjC"}
|
package/dist/prompts.js
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import { confirm, input,
|
|
2
|
-
import {
|
|
3
|
-
import { validateBaseUrl, validateHost, validateInstallDir, validateModelId, validatePort, validateUsername, } from './validation.js';
|
|
1
|
+
import { confirm, input, select } from '@inquirer/prompts';
|
|
2
|
+
import { validateHost, validateInstallDir, validatePort, validateUsername, } from './validation.js';
|
|
4
3
|
export const inquirerPrompt = {
|
|
5
4
|
select: (options) => select({ message: options.message, choices: [...options.choices] }),
|
|
6
5
|
input: (options) => input(options),
|
|
7
|
-
password: (options) => password(options),
|
|
8
6
|
confirm: (options) => confirm(options),
|
|
9
7
|
};
|
|
10
8
|
export async function collectTarget(prompt, t, requestedMode) {
|
|
@@ -32,79 +30,15 @@ export async function collectTarget(prompt, t, requestedMode) {
|
|
|
32
30
|
}));
|
|
33
31
|
return remote ? { mode, installDir, remote } : { mode, installDir };
|
|
34
32
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
message: t('ollamaModelSelect'),
|
|
40
|
-
choices: probe.models.map((model) => ({ name: model, value: model })),
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
// R2 (Task 4 review, landed here): probe.reachable is false for four different causes --
|
|
44
|
-
// the endpoint refused, docker is absent or its daemon is down, the alpine probe image
|
|
45
|
-
// could not be pulled, or the reply was not JSON. The message must not assert the
|
|
46
|
-
// endpoint is at fault, or the operator debugs a box that was fine. A probe that WAS
|
|
47
|
-
// reachable but listed no models yet (or no probe was attempted at all, when no runner was passed in)
|
|
48
|
-
// gets the plain manual-entry prompt instead.
|
|
49
|
-
const message = probe && !probe.reachable ? t('ollamaModelUnreachable') : t('ollamaModelManualEntry');
|
|
50
|
-
return validateModelId(await prompt.input({ message }));
|
|
51
|
-
}
|
|
52
|
-
export async function collectSettings(prompt, t, installDir, probeRunner) {
|
|
33
|
+
// The installer asks for infrastructure only. The model route, the model and the OpenRouter
|
|
34
|
+
// management key are chosen by an admin in the first-run web setup (management-key design,
|
|
35
|
+
// decision 3), so nothing typed here is a credential.
|
|
36
|
+
export async function collectSettings(prompt, t, installDir) {
|
|
53
37
|
const appliance = await prompt.confirm({ message: t('applianceQuestion'), default: true });
|
|
54
38
|
const gvisor = await prompt.confirm({ message: t('gvisorQuestion'), default: false });
|
|
55
|
-
// R4: exactly two model routes. A third llama.cpp route is deliberately not offered --
|
|
56
|
-
// compose.yaml's aura-llm sits behind profiles:[localllm] and needs a ~6.7 GB GGUF that
|
|
57
|
-
// install.sh never fetches, so enabling it would leave the volume empty, the healthcheck
|
|
58
|
-
// would never pass, and `docker compose up -d --wait` would abort the whole install.
|
|
59
|
-
const llmProvider = await prompt.select({
|
|
60
|
-
message: t('modelRouteQuestion'),
|
|
61
|
-
choices: [
|
|
62
|
-
{ name: t('modelRouteOpenrouter'), value: 'openrouter' },
|
|
63
|
-
{ name: t('modelRouteOllama'), value: 'ollama' },
|
|
64
|
-
],
|
|
65
|
-
});
|
|
66
|
-
let llmBaseUrl;
|
|
67
|
-
let llmModel;
|
|
68
|
-
let openrouterApiKey;
|
|
69
|
-
if (llmProvider === 'openrouter') {
|
|
70
|
-
llmBaseUrl = validateBaseUrl(await prompt.input({
|
|
71
|
-
message: t('openrouterBaseUrl'),
|
|
72
|
-
default: 'https://openrouter.ai/api/v1',
|
|
73
|
-
}));
|
|
74
|
-
openrouterApiKey = await prompt.password({ message: t('openrouterApiKey'), mask: '*' });
|
|
75
|
-
llmModel = validateModelId(await prompt.input({ message: t('openrouterModel') }));
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
llmBaseUrl = validateBaseUrl(await prompt.input({
|
|
79
|
-
message: t('ollamaBaseUrl'),
|
|
80
|
-
// C1 (review round 1): 'localhost' here is wrong twice. probeOllama's request runs
|
|
81
|
-
// INSIDE the throwaway alpine container, where 'localhost' means the container itself,
|
|
82
|
-
// not the operator's host -- modelroute.ts's own comment warns about exactly this ("an
|
|
83
|
-
// Ollama on the host is not at 127.0.0.1 as seen from there"), so the wizard's own
|
|
84
|
-
// default could never probe reachable. And the /v1 suffix is load-bearing:
|
|
85
|
-
// internal/llm/config.go:21's defaultBaseURL carries it, and every other Ollama base
|
|
86
|
-
// URL in this repo is spelled with it (scripts/install_config_test.sh:19,
|
|
87
|
-
// internal/agui/settings_api_test.go:218,
|
|
88
|
-
// internal/channels/telegram/commands_spend_test.go:157) -- without it Aura requests
|
|
89
|
-
// .../11434/chat/completions, which Ollama does not serve.
|
|
90
|
-
default: 'http://host.docker.internal:11434/v1',
|
|
91
|
-
}));
|
|
92
|
-
llmModel = await collectOllamaModel(prompt, t, probeRunner, llmBaseUrl);
|
|
93
|
-
}
|
|
94
39
|
const confirmed = await prompt.confirm({ message: t('confirmInstall'), default: true });
|
|
95
40
|
if (!confirmed)
|
|
96
41
|
return null;
|
|
97
|
-
return {
|
|
98
|
-
installDir,
|
|
99
|
-
appliance,
|
|
100
|
-
gvisor,
|
|
101
|
-
llmProvider,
|
|
102
|
-
llmBaseUrl,
|
|
103
|
-
llmModel,
|
|
104
|
-
// R5: the empty OpenRouter key is emitted, never omitted -- install.sh's
|
|
105
|
-
// parse_install_config accepts an empty openrouter_api_key_base64 and exit 2s on a
|
|
106
|
-
// MISSING key set, so the Ollama route must still produce all seven keys.
|
|
107
|
-
...(openrouterApiKey === undefined ? {} : { openrouterApiKey }),
|
|
108
|
-
};
|
|
42
|
+
return { installDir, appliance, gvisor };
|
|
109
43
|
}
|
|
110
44
|
//# sourceMappingURL=prompts.js.map
|
package/dist/prompts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"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"}
|
package/dist/remote.d.ts
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import type { TemporaryFile } from './config-file.js';
|
|
2
2
|
import type { CommandRunner } from './process.js';
|
|
3
|
-
import type {
|
|
3
|
+
import type { PreflightResult, RemoteTarget } from './types.js';
|
|
4
4
|
export declare const REMOTE_INSTALL_SCRIPT = "#!/bin/sh\nset -eu\nexec 2>&1\nINSTALLER=\"$1\"\nCONFIG=\"$2\"\nRUNNER=\"$0\"\ncleanup() { rm -f -- \"$CONFIG\" \"$INSTALLER\" \"$RUNNER\"; }\ntrap cleanup EXIT\ntrap 'exit 129' HUP\ntrap 'exit 130' INT\ntrap 'exit 143' TERM\nchmod 700 \"$INSTALLER\"\nchmod 600 \"$CONFIG\"\nsudo bash \"$INSTALLER\" -- --config \"$CONFIG\"\n";
|
|
5
5
|
export type WarningSink = (message: string) => void;
|
|
6
6
|
export declare function sshDestination(target: RemoteTarget): string;
|
|
7
7
|
export declare function preflightRemote(runner: CommandRunner, target: RemoteTarget, installDir: string, platform?: NodeJS.Platform): Promise<PreflightResult>;
|
|
8
|
-
export declare function installRemote(runner: CommandRunner, target: RemoteTarget, artifact: TemporaryFile, config: TemporaryFile,
|
|
9
|
-
export declare function createSshProbeRunner(runner: CommandRunner, target: RemoteTarget): CommandRunner;
|
|
8
|
+
export declare function installRemote(runner: CommandRunner, target: RemoteTarget, artifact: TemporaryFile, config: TemporaryFile, remoteId?: string, warn?: WarningSink, tempRoot?: string): Promise<void>;
|
|
10
9
|
//# sourceMappingURL=remote.d.ts.map
|
package/dist/remote.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../src/remote.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAOtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../src/remote.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAOtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAiFhE,eAAO,MAAM,qBAAqB,0UAcjC,CAAC;AAOF,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAiDpD,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAI3D;AAqCD,wBAAsB,eAAe,CACnC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,MAAM,EAClB,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAC3C,OAAO,CAAC,eAAe,CAAC,CA2B1B;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,aAAa,EACrB,QAAQ,GAAE,MAAqB,EAC/B,IAAI,GAAE,WAA+D,EACrE,QAAQ,SAAW,GAClB,OAAO,CAAC,IAAI,CAAC,CAgEf"}
|