@interf/compiler 0.9.5 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +96 -92
- package/TRADEMARKS.md +2 -13
- package/agent-skills/interf-actions/SKILL.md +95 -36
- package/agent-skills/interf-actions/references/cli.md +118 -51
- package/builtin-methods/interf-default/README.md +3 -4
- package/builtin-methods/interf-default/compile/stages/shape/SKILL.md +2 -2
- package/builtin-methods/interf-default/compile/stages/summarize/SKILL.md +2 -1
- package/builtin-methods/interf-default/improve/SKILL.md +1 -1
- package/builtin-methods/interf-default/method.json +10 -4
- package/builtin-methods/interf-default/method.schema.json +0 -9
- package/builtin-methods/interf-default/use/query/SKILL.md +5 -5
- package/dist/cli/commands/compile.d.ts +8 -25
- package/dist/cli/commands/compile.js +75 -360
- package/dist/cli/commands/doctor.js +1 -1
- package/dist/cli/commands/login.d.ts +7 -0
- package/dist/cli/commands/login.js +39 -0
- package/dist/cli/commands/logout.d.ts +2 -0
- package/dist/cli/commands/logout.js +16 -0
- package/dist/cli/commands/method.d.ts +2 -0
- package/dist/cli/commands/method.js +113 -0
- package/dist/cli/commands/prep.d.ts +2 -0
- package/dist/cli/commands/prep.js +134 -0
- package/dist/cli/commands/reset.d.ts +8 -1
- package/dist/cli/commands/reset.js +47 -26
- package/dist/cli/commands/runs.d.ts +2 -0
- package/dist/cli/commands/runs.js +120 -0
- package/dist/cli/commands/status.d.ts +6 -1
- package/dist/cli/commands/status.js +68 -111
- package/dist/cli/commands/test.d.ts +6 -14
- package/dist/cli/commands/test.js +65 -181
- package/dist/cli/commands/web.d.ts +0 -9
- package/dist/cli/commands/web.js +147 -120
- package/dist/cli/commands/wizard.d.ts +9 -0
- package/dist/cli/commands/wizard.js +442 -0
- package/dist/cli/index.d.ts +7 -6
- package/dist/cli/index.js +13 -10
- package/dist/compiler-ui/404.html +1 -1
- package/dist/compiler-ui/__next.__PAGE__.txt +2 -2
- package/dist/compiler-ui/__next._full.txt +3 -3
- package/dist/compiler-ui/__next._head.txt +1 -1
- package/dist/compiler-ui/__next._index.txt +2 -2
- package/dist/compiler-ui/__next._tree.txt +2 -2
- package/dist/compiler-ui/_next/static/chunks/{18a8f2jkv3z.c.css → 045gole2ojo3g.css} +1 -1
- package/dist/compiler-ui/_next/static/chunks/{177mvn4rse235.js → 17t-lulmyawg5.js} +9 -9
- package/dist/compiler-ui/_not-found/__next._full.txt +2 -2
- package/dist/compiler-ui/_not-found/__next._head.txt +1 -1
- package/dist/compiler-ui/_not-found/__next._index.txt +2 -2
- package/dist/compiler-ui/_not-found/__next._not-found.__PAGE__.txt +1 -1
- package/dist/compiler-ui/_not-found/__next._not-found.txt +1 -1
- package/dist/compiler-ui/_not-found/__next._tree.txt +2 -2
- package/dist/compiler-ui/_not-found.html +1 -1
- package/dist/compiler-ui/_not-found.txt +2 -2
- package/dist/compiler-ui/index.html +1 -1
- package/dist/compiler-ui/index.txt +3 -3
- package/dist/packages/agents/lib/shells.d.ts +1 -1
- package/dist/packages/agents/lib/shells.js +111 -52
- package/dist/packages/agents/lib/user-config.d.ts +4 -2
- package/dist/packages/agents/lib/user-config.js +15 -7
- package/dist/packages/compiler/compiled-paths.d.ts +9 -2
- package/dist/packages/compiler/compiled-paths.js +30 -15
- package/dist/packages/compiler/compiled-pipeline.js +23 -3
- package/dist/packages/compiler/compiled-stage-plan.js +4 -0
- package/dist/packages/compiler/compiled-target.d.ts +1 -1
- package/dist/packages/compiler/compiled-target.js +1 -1
- package/dist/packages/compiler/index.d.ts +1 -0
- package/dist/packages/compiler/index.js +1 -0
- package/dist/packages/compiler/lib/schema.d.ts +26 -31
- package/dist/packages/compiler/lib/schema.js +1 -12
- package/dist/packages/compiler/method-runs.d.ts +2 -3
- package/dist/packages/compiler/method-runs.js +2 -3
- package/dist/packages/compiler/reset.js +3 -1
- package/dist/packages/compiler/runtime-contracts.js +0 -3
- package/dist/packages/compiler/runtime-prompt.js +1 -1
- package/dist/packages/compiler/source-files.d.ts +46 -0
- package/dist/packages/compiler/source-files.js +149 -0
- package/dist/packages/compiler/state-artifacts.d.ts +3 -2
- package/dist/packages/compiler/state-artifacts.js +4 -3
- package/dist/packages/compiler/state-io.d.ts +3 -2
- package/dist/packages/compiler/state-io.js +11 -5
- package/dist/packages/compiler/state-paths.d.ts +2 -1
- package/dist/packages/compiler/state-paths.js +6 -3
- package/dist/packages/compiler/state-view.d.ts +3 -2
- package/dist/packages/compiler/state-view.js +18 -28
- package/dist/packages/compiler/state.d.ts +4 -4
- package/dist/packages/compiler/state.js +3 -3
- package/dist/packages/contracts/index.d.ts +1 -1
- package/dist/packages/contracts/lib/preparation-paths.d.ts +117 -0
- package/dist/packages/contracts/lib/preparation-paths.js +177 -0
- package/dist/packages/contracts/lib/schema.d.ts +85 -5
- package/dist/packages/contracts/lib/schema.js +46 -1
- package/dist/packages/execution/lib/schema.d.ts +50 -50
- package/dist/packages/execution/lib/schema.js +1 -1
- package/dist/packages/local-service/action-definitions.d.ts +14 -14
- package/dist/packages/local-service/action-definitions.js +27 -28
- package/dist/packages/local-service/action-planner.js +2 -1
- package/dist/packages/local-service/client.d.ts +51 -52
- package/dist/packages/local-service/client.js +132 -140
- package/dist/packages/local-service/connection-config.d.ts +38 -0
- package/dist/packages/local-service/connection-config.js +75 -0
- package/dist/packages/local-service/index.d.ts +11 -7
- package/dist/packages/local-service/index.js +6 -4
- package/dist/packages/local-service/instance-paths.d.ts +100 -0
- package/dist/packages/local-service/instance-paths.js +165 -0
- package/dist/packages/local-service/lib/schema.d.ts +405 -2297
- package/dist/packages/local-service/lib/schema.js +146 -62
- package/dist/packages/local-service/native-run-handlers.js +3 -3
- package/dist/packages/local-service/preparation-store.d.ts +92 -0
- package/dist/packages/local-service/preparation-store.js +171 -0
- package/dist/packages/local-service/routes.d.ts +33 -16
- package/dist/packages/local-service/routes.js +44 -20
- package/dist/packages/local-service/run-observability.js +11 -11
- package/dist/packages/local-service/runtime-caches.d.ts +76 -0
- package/dist/packages/local-service/runtime-caches.js +191 -0
- package/dist/packages/local-service/runtime-event-applier.d.ts +12 -0
- package/dist/packages/local-service/runtime-event-applier.js +177 -0
- package/dist/packages/local-service/runtime-persistence.d.ts +47 -0
- package/dist/packages/local-service/runtime-persistence.js +137 -0
- package/dist/packages/local-service/runtime-proposal-helpers.d.ts +35 -0
- package/dist/packages/local-service/runtime-proposal-helpers.js +251 -0
- package/dist/packages/local-service/runtime-resource-builders.d.ts +52 -0
- package/dist/packages/local-service/runtime-resource-builders.js +149 -0
- package/dist/packages/local-service/runtime.d.ts +197 -43
- package/dist/packages/local-service/runtime.js +800 -974
- package/dist/packages/local-service/server.d.ts +15 -0
- package/dist/packages/local-service/server.js +641 -273
- package/dist/packages/local-service/service-registry.d.ts +47 -0
- package/dist/packages/local-service/service-registry.js +137 -0
- package/dist/packages/method-authoring/method-authoring.d.ts +1 -1
- package/dist/packages/method-authoring/method-authoring.js +2 -2
- package/dist/packages/method-authoring/method-improvement.js +1 -1
- package/dist/packages/method-package/builtin-compiled-method.d.ts +4 -5
- package/dist/packages/method-package/builtin-compiled-method.js +8 -14
- package/dist/packages/method-package/context-interface.d.ts +4 -40
- package/dist/packages/method-package/context-interface.js +1 -23
- package/dist/packages/method-package/interf-method-package.d.ts +4 -4
- package/dist/packages/method-package/interf-method-package.js +21 -33
- package/dist/packages/method-package/local-methods.d.ts +10 -6
- package/dist/packages/method-package/local-methods.js +57 -39
- package/dist/packages/method-package/method-definitions.d.ts +8 -34
- package/dist/packages/method-package/method-definitions.js +49 -37
- package/dist/packages/method-package/method-helpers.d.ts +1 -13
- package/dist/packages/method-package/method-helpers.js +8 -42
- package/dist/packages/method-package/method-stage-runner.js +2 -2
- package/dist/packages/method-package/user-methods.d.ts +17 -0
- package/dist/packages/method-package/user-methods.js +77 -0
- package/dist/packages/project-model/index.d.ts +0 -1
- package/dist/packages/project-model/index.js +0 -1
- package/dist/packages/project-model/interf-detect.d.ts +8 -3
- package/dist/packages/project-model/interf-detect.js +34 -34
- package/dist/packages/project-model/interf-scaffold.d.ts +3 -3
- package/dist/packages/project-model/interf-scaffold.js +23 -32
- package/dist/packages/project-model/lib/schema.js +38 -1
- package/dist/packages/project-model/preparation-entries.d.ts +5 -5
- package/dist/packages/project-model/preparation-entries.js +14 -14
- package/dist/packages/project-model/source-config.d.ts +11 -11
- package/dist/packages/project-model/source-config.js +74 -46
- package/dist/packages/project-model/source-folders.d.ts +5 -5
- package/dist/packages/project-model/source-folders.js +14 -14
- package/dist/packages/shared/filesystem.d.ts +7 -0
- package/dist/packages/shared/filesystem.js +97 -10
- package/dist/packages/testing/lib/schema.d.ts +10 -10
- package/dist/packages/testing/lib/schema.js +2 -2
- package/dist/packages/testing/readiness-check-run.d.ts +4 -4
- package/dist/packages/testing/readiness-check-run.js +36 -36
- package/dist/packages/testing/test-execution.js +6 -6
- package/dist/packages/testing/test-paths.js +4 -3
- package/dist/packages/testing/test-sandbox.d.ts +0 -1
- package/dist/packages/testing/test-sandbox.js +14 -30
- package/dist/packages/testing/test-targets.d.ts +1 -1
- package/dist/packages/testing/test-targets.js +6 -6
- package/dist/packages/testing/test.d.ts +1 -1
- package/dist/packages/testing/test.js +1 -1
- package/package.json +3 -4
- package/CHANGELOG.md +0 -93
- package/LICENSE +0 -183
- package/dist/cli/commands/action-input-cli.d.ts +0 -25
- package/dist/cli/commands/action-input-cli.js +0 -73
- package/dist/cli/commands/control-path.d.ts +0 -11
- package/dist/cli/commands/control-path.js +0 -72
- package/dist/cli/commands/create-method-wizard.d.ts +0 -64
- package/dist/cli/commands/create-method-wizard.js +0 -434
- package/dist/cli/commands/create.d.ts +0 -6
- package/dist/cli/commands/create.js +0 -183
- package/dist/cli/commands/default.d.ts +0 -2
- package/dist/cli/commands/default.js +0 -39
- package/dist/cli/commands/executor-flow.d.ts +0 -29
- package/dist/cli/commands/executor-flow.js +0 -163
- package/dist/cli/commands/init.d.ts +0 -26
- package/dist/cli/commands/init.js +0 -771
- package/dist/cli/commands/list.d.ts +0 -2
- package/dist/cli/commands/list.js +0 -30
- package/dist/cli/commands/preparation-action.d.ts +0 -8
- package/dist/cli/commands/preparation-action.js +0 -29
- package/dist/cli/commands/preparation-picker.d.ts +0 -5
- package/dist/cli/commands/preparation-picker.js +0 -36
- package/dist/cli/commands/preparation-selection.d.ts +0 -6
- package/dist/cli/commands/preparation-selection.js +0 -11
- package/dist/cli/commands/service-action-flow.d.ts +0 -9
- package/dist/cli/commands/service-action-flow.js +0 -19
- package/dist/cli/commands/source-config-wizard.d.ts +0 -51
- package/dist/cli/commands/source-config-wizard.js +0 -670
- package/dist/cli/commands/verify.d.ts +0 -2
- package/dist/cli/commands/verify.js +0 -94
- package/dist/packages/compiler/raw-snapshot.d.ts +0 -49
- package/dist/packages/compiler/raw-snapshot.js +0 -101
- package/dist/packages/method-package/index.d.ts +0 -11
- package/dist/packages/method-package/index.js +0 -11
- package/dist/packages/method-package/method-stage-policy.d.ts +0 -5
- package/dist/packages/method-package/method-stage-policy.js +0 -31
- package/dist/packages/project-model/project-paths.d.ts +0 -12
- package/dist/packages/project-model/project-paths.js +0 -33
- /package/dist/compiler-ui/_next/static/{84FaeF3EzBF9kKTMjSEVN → C6vVfy3aeYuIO3d2AoNvC}/_buildManifest.js +0 -0
- /package/dist/compiler-ui/_next/static/{84FaeF3EzBF9kKTMjSEVN → C6vVfy3aeYuIO3d2AoNvC}/_clientMiddlewareManifest.js +0 -0
- /package/dist/compiler-ui/_next/static/{84FaeF3EzBF9kKTMjSEVN → C6vVfy3aeYuIO3d2AoNvC}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,442 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `interf` (no subcommand) and `interf init` — the wizard.
|
|
3
|
+
*
|
|
4
|
+
* Casual-user entry point. End-to-end onboarding:
|
|
5
|
+
* - If no connection → offer to start a local engine inline (or connect remote, or quit).
|
|
6
|
+
* - Once connected → action menu (list / create / compile / test / open UI / stop engine / quit).
|
|
7
|
+
* - Each action loops back to the menu instead of exiting.
|
|
8
|
+
*
|
|
9
|
+
* Agents bypass the wizard entirely. They use `interf prep`, `interf compile`,
|
|
10
|
+
* etc. directly. The wizard is purely a UX wrapper around those CLI commands.
|
|
11
|
+
*/
|
|
12
|
+
import chalk from "chalk";
|
|
13
|
+
import * as p from "@clack/prompts";
|
|
14
|
+
import { existsSync, statSync } from "node:fs";
|
|
15
|
+
import { homedir } from "node:os";
|
|
16
|
+
import { basename, resolve } from "node:path";
|
|
17
|
+
import { spawn } from "node:child_process";
|
|
18
|
+
import { CONNECT_OR_ERROR_HINT, readActiveConnection, writeConnection, } from "../../packages/local-service/connection-config.js";
|
|
19
|
+
import { LOCAL_SERVICE_DEFAULT_HOST, LOCAL_SERVICE_DEFAULT_PORT } from "../../packages/local-service/routes.js";
|
|
20
|
+
async function callJson(url, token) {
|
|
21
|
+
const headers = new Headers();
|
|
22
|
+
if (token)
|
|
23
|
+
headers.set("authorization", `Bearer ${token}`);
|
|
24
|
+
try {
|
|
25
|
+
const response = await fetch(url, { headers });
|
|
26
|
+
const raw = await response.text();
|
|
27
|
+
let body = null;
|
|
28
|
+
if (raw) {
|
|
29
|
+
try {
|
|
30
|
+
body = JSON.parse(raw);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
body = null;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return { status: response.status, body };
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return { status: 0, body: null };
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function spawnInterf(args) {
|
|
43
|
+
return new Promise((resolveSpawn) => {
|
|
44
|
+
const child = spawn(process.argv[1] ?? "interf", args, { stdio: "inherit" });
|
|
45
|
+
child.on("exit", (code) => resolveSpawn(code ?? 0));
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
const DEFAULT_ENGINE_URL = `http://${LOCAL_SERVICE_DEFAULT_HOST}:${LOCAL_SERVICE_DEFAULT_PORT}`;
|
|
49
|
+
/**
|
|
50
|
+
* Probe a URL's `/health` endpoint and return whether the engine is up.
|
|
51
|
+
* Used as a fallback when `connection.json` may be missing (e.g. older
|
|
52
|
+
* `interf web` binaries that don't write the 0.13 record).
|
|
53
|
+
*/
|
|
54
|
+
async function probeHealth(url) {
|
|
55
|
+
try {
|
|
56
|
+
const response = await fetch(`${url.replace(/\/+$/, "")}/health`);
|
|
57
|
+
return response.status === 200;
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Spawn `interf web` detached and wait until it's reachable. Tries two
|
|
65
|
+
* signals in parallel: the new `~/.interf/connection.json` record AND a
|
|
66
|
+
* direct probe of the default engine URL — so we can connect even when
|
|
67
|
+
* the running engine is an older binary that didn't write the record.
|
|
68
|
+
*/
|
|
69
|
+
async function startLocalEngineInBackground() {
|
|
70
|
+
const spinner = p.spinner();
|
|
71
|
+
spinner.start("Starting local Interf engine…");
|
|
72
|
+
const child = spawn(process.argv[1] ?? "interf", ["web"], {
|
|
73
|
+
detached: true,
|
|
74
|
+
stdio: "ignore",
|
|
75
|
+
});
|
|
76
|
+
child.unref();
|
|
77
|
+
const startedAt = Date.now();
|
|
78
|
+
const timeoutMs = 30_000;
|
|
79
|
+
while (Date.now() - startedAt < timeoutMs) {
|
|
80
|
+
await new Promise((r) => setTimeout(r, 250));
|
|
81
|
+
// Path A: connection.json written by 0.13 server.
|
|
82
|
+
const conn = readActiveConnection();
|
|
83
|
+
if (conn) {
|
|
84
|
+
const url = conn.url.replace(/\/+$/, "");
|
|
85
|
+
if (await probeHealth(url)) {
|
|
86
|
+
spinner.stop(chalk.green(`Engine ready at ${url}`));
|
|
87
|
+
return { url, token: conn.auth_token };
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// Path B: direct probe of the default engine URL. Works for any
|
|
91
|
+
// engine version, including older `interf` binaries that don't
|
|
92
|
+
// write connection.json.
|
|
93
|
+
if (await probeHealth(DEFAULT_ENGINE_URL)) {
|
|
94
|
+
// Recover the connection record so subsequent commands work.
|
|
95
|
+
try {
|
|
96
|
+
writeConnection({ url: DEFAULT_ENGINE_URL, auth_token: null });
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
// best effort — wizard can still proceed using the URL inline
|
|
100
|
+
}
|
|
101
|
+
spinner.stop(chalk.green(`Engine ready at ${DEFAULT_ENGINE_URL}`));
|
|
102
|
+
return { url: DEFAULT_ENGINE_URL, token: null };
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
spinner.stop(chalk.red("Timed out waiting for engine to start."));
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
/** Prompt the user to either start a local engine, log in to a remote one, or quit. */
|
|
109
|
+
async function offerEngineSetup() {
|
|
110
|
+
console.log();
|
|
111
|
+
console.log(chalk.yellow(" No Interf engine is connected."));
|
|
112
|
+
console.log();
|
|
113
|
+
const choice = await p.select({
|
|
114
|
+
message: "How do you want to connect?",
|
|
115
|
+
options: [
|
|
116
|
+
{ value: "start", label: "Start a local engine now" },
|
|
117
|
+
{ value: "remote", label: "Connect to a remote engine" },
|
|
118
|
+
{ value: "quit", label: "Quit" },
|
|
119
|
+
],
|
|
120
|
+
});
|
|
121
|
+
if (p.isCancel(choice) || choice === "quit") {
|
|
122
|
+
p.outro("Bye.");
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
if (choice === "start") {
|
|
126
|
+
const started = await startLocalEngineInBackground();
|
|
127
|
+
if (started)
|
|
128
|
+
return started;
|
|
129
|
+
// Fall through to retry / custom URL fallback.
|
|
130
|
+
const retry = await p.select({
|
|
131
|
+
message: "Engine didn't come up. What now?",
|
|
132
|
+
options: [
|
|
133
|
+
{ value: "probe", label: `Try connecting to ${DEFAULT_ENGINE_URL} (maybe an older engine is already running)` },
|
|
134
|
+
{ value: "remote", label: "Connect to a different URL" },
|
|
135
|
+
{ value: "quit", label: "Quit" },
|
|
136
|
+
],
|
|
137
|
+
});
|
|
138
|
+
if (p.isCancel(retry) || retry === "quit")
|
|
139
|
+
return null;
|
|
140
|
+
if (retry === "probe") {
|
|
141
|
+
if (await probeHealth(DEFAULT_ENGINE_URL)) {
|
|
142
|
+
try {
|
|
143
|
+
writeConnection({ url: DEFAULT_ENGINE_URL, auth_token: null });
|
|
144
|
+
}
|
|
145
|
+
catch { /* best effort */ }
|
|
146
|
+
return { url: DEFAULT_ENGINE_URL, token: null };
|
|
147
|
+
}
|
|
148
|
+
console.log(chalk.red(` No engine reachable at ${DEFAULT_ENGINE_URL}.`));
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
// retry === "remote" falls through to the remote-URL block below
|
|
152
|
+
}
|
|
153
|
+
if (choice === "remote" || choice === "start") {
|
|
154
|
+
const remoteUrl = await p.text({
|
|
155
|
+
message: "Remote engine URL",
|
|
156
|
+
placeholder: "https://your-instance.example.com",
|
|
157
|
+
validate: (v) => (v.startsWith("http://") || v.startsWith("https://") ? undefined : "Must start with http:// or https://"),
|
|
158
|
+
});
|
|
159
|
+
if (p.isCancel(remoteUrl))
|
|
160
|
+
return null;
|
|
161
|
+
const remoteToken = await p.password({
|
|
162
|
+
message: "Bearer token (leave blank if none)",
|
|
163
|
+
});
|
|
164
|
+
if (p.isCancel(remoteToken))
|
|
165
|
+
return null;
|
|
166
|
+
const exitCode = await spawnInterf([
|
|
167
|
+
"login",
|
|
168
|
+
"--url",
|
|
169
|
+
String(remoteUrl),
|
|
170
|
+
...(remoteToken ? ["--token", String(remoteToken)] : []),
|
|
171
|
+
]);
|
|
172
|
+
if (exitCode !== 0)
|
|
173
|
+
return null;
|
|
174
|
+
const conn = readActiveConnection();
|
|
175
|
+
if (!conn)
|
|
176
|
+
return null;
|
|
177
|
+
return { url: conn.url.replace(/\/+$/, ""), token: conn.auth_token };
|
|
178
|
+
}
|
|
179
|
+
return null;
|
|
180
|
+
}
|
|
181
|
+
/** Validate that a path exists and is a directory. */
|
|
182
|
+
function validateSourcePath(value) {
|
|
183
|
+
const abs = resolve(value);
|
|
184
|
+
if (!existsSync(abs))
|
|
185
|
+
return `Source folder does not exist: ${abs}`;
|
|
186
|
+
if (!statSync(abs).isDirectory())
|
|
187
|
+
return `Source folder is not a directory: ${abs}`;
|
|
188
|
+
return undefined;
|
|
189
|
+
}
|
|
190
|
+
/** Offer the user a curated source-path picker before falling back to free-form input. */
|
|
191
|
+
async function promptSourcePath() {
|
|
192
|
+
const cwd = process.cwd();
|
|
193
|
+
const home = homedir();
|
|
194
|
+
const commonCandidates = [
|
|
195
|
+
cwd,
|
|
196
|
+
`${home}/Documents`,
|
|
197
|
+
`${home}/Downloads`,
|
|
198
|
+
`${home}/Desktop`,
|
|
199
|
+
home,
|
|
200
|
+
];
|
|
201
|
+
const seen = new Set();
|
|
202
|
+
const options = [];
|
|
203
|
+
for (const candidate of commonCandidates) {
|
|
204
|
+
const abs = resolve(candidate);
|
|
205
|
+
if (seen.has(abs))
|
|
206
|
+
continue;
|
|
207
|
+
if (!existsSync(abs))
|
|
208
|
+
continue;
|
|
209
|
+
if (!statSync(abs).isDirectory())
|
|
210
|
+
continue;
|
|
211
|
+
seen.add(abs);
|
|
212
|
+
const isCwd = abs === resolve(cwd);
|
|
213
|
+
const label = `${basename(abs) || abs} ${chalk.dim(`— ${abs}${isCwd ? " (current dir)" : ""}`)}`;
|
|
214
|
+
options.push({ value: abs, label });
|
|
215
|
+
}
|
|
216
|
+
options.push({ value: "__custom__", label: chalk.dim("Type a custom path…") });
|
|
217
|
+
const choice = await p.select({
|
|
218
|
+
message: "Where's the source folder?",
|
|
219
|
+
options,
|
|
220
|
+
initialValue: resolve(cwd),
|
|
221
|
+
});
|
|
222
|
+
if (p.isCancel(choice))
|
|
223
|
+
return null;
|
|
224
|
+
if (choice === "__custom__") {
|
|
225
|
+
const typed = await p.text({
|
|
226
|
+
message: "Custom source folder path",
|
|
227
|
+
placeholder: cwd,
|
|
228
|
+
initialValue: cwd,
|
|
229
|
+
validate: validateSourcePath,
|
|
230
|
+
});
|
|
231
|
+
if (p.isCancel(typed))
|
|
232
|
+
return null;
|
|
233
|
+
return resolve(String(typed));
|
|
234
|
+
}
|
|
235
|
+
return String(choice);
|
|
236
|
+
}
|
|
237
|
+
async function flowCreatePreparation(conn) {
|
|
238
|
+
const prepId = await p.text({
|
|
239
|
+
message: "Preparation id (a short name for this unit of agent work)",
|
|
240
|
+
placeholder: "my-prep",
|
|
241
|
+
validate: (value) => (/^[a-z0-9][a-z0-9-]*$/.test(value) ? undefined : "Lowercase letters, numbers, and dashes only."),
|
|
242
|
+
});
|
|
243
|
+
if (p.isCancel(prepId))
|
|
244
|
+
return null;
|
|
245
|
+
const sourcePath = await promptSourcePath();
|
|
246
|
+
if (!sourcePath)
|
|
247
|
+
return null;
|
|
248
|
+
// Offer the methods that the connected instance knows about.
|
|
249
|
+
const methodsResp = await callJson(`${conn.url}/v1/methods`, conn.token);
|
|
250
|
+
const methods = methodsResp.body?.methods ?? [];
|
|
251
|
+
const methodOptions = methods
|
|
252
|
+
.map((m) => ({ value: m.method_id ?? m.id ?? "", label: `${m.method_id ?? m.id ?? "(?)"}${m.label ? ` — ${m.label}` : ""}` }))
|
|
253
|
+
.filter((opt) => opt.value !== "");
|
|
254
|
+
let methodId;
|
|
255
|
+
if (methodOptions.length > 0) {
|
|
256
|
+
const chosen = await p.select({
|
|
257
|
+
message: "Which method?",
|
|
258
|
+
options: [...methodOptions, { value: "__custom__", label: "Other (type a method id)" }],
|
|
259
|
+
initialValue: methodOptions.find((o) => o.value === "interf-default")?.value ?? methodOptions[0]?.value,
|
|
260
|
+
});
|
|
261
|
+
if (p.isCancel(chosen))
|
|
262
|
+
return null;
|
|
263
|
+
if (chosen === "__custom__") {
|
|
264
|
+
const typed = await p.text({
|
|
265
|
+
message: "Method id",
|
|
266
|
+
placeholder: "interf-default",
|
|
267
|
+
});
|
|
268
|
+
if (p.isCancel(typed))
|
|
269
|
+
return null;
|
|
270
|
+
methodId = String(typed);
|
|
271
|
+
}
|
|
272
|
+
else {
|
|
273
|
+
methodId = String(chosen);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
const typed = await p.text({
|
|
278
|
+
message: "Method id (no methods registered yet)",
|
|
279
|
+
initialValue: "interf-default",
|
|
280
|
+
});
|
|
281
|
+
if (p.isCancel(typed))
|
|
282
|
+
return null;
|
|
283
|
+
methodId = String(typed);
|
|
284
|
+
}
|
|
285
|
+
const exitCode = await spawnInterf([
|
|
286
|
+
"prep",
|
|
287
|
+
"create",
|
|
288
|
+
String(prepId),
|
|
289
|
+
"--source",
|
|
290
|
+
resolve(String(sourcePath)),
|
|
291
|
+
"--method",
|
|
292
|
+
methodId,
|
|
293
|
+
]);
|
|
294
|
+
if (exitCode !== 0)
|
|
295
|
+
return null;
|
|
296
|
+
return String(prepId);
|
|
297
|
+
}
|
|
298
|
+
async function pickPreparation(conn, message) {
|
|
299
|
+
const preps = await callJson(`${conn.url}/v1/preparations`, conn.token);
|
|
300
|
+
const list = preps.body?.preparations ?? [];
|
|
301
|
+
if (list.length === 0) {
|
|
302
|
+
console.log(chalk.dim(" No preparations yet. Create one first."));
|
|
303
|
+
return null;
|
|
304
|
+
}
|
|
305
|
+
const choice = await p.select({
|
|
306
|
+
message,
|
|
307
|
+
options: list.map((prep) => ({
|
|
308
|
+
value: prep.id,
|
|
309
|
+
label: `${prep.id} ${chalk.dim(`(${prep.method_id} · ${prep.readiness?.status ?? "—"})`)}`,
|
|
310
|
+
})),
|
|
311
|
+
});
|
|
312
|
+
if (p.isCancel(choice))
|
|
313
|
+
return null;
|
|
314
|
+
return String(choice);
|
|
315
|
+
}
|
|
316
|
+
async function showActionMenu(conn) {
|
|
317
|
+
const action = await p.select({
|
|
318
|
+
message: "What do you want to do?",
|
|
319
|
+
options: [
|
|
320
|
+
{ value: "ls", label: "List preparations" },
|
|
321
|
+
{ value: "create", label: "Create a new preparation" },
|
|
322
|
+
{ value: "compile", label: "Compile a preparation" },
|
|
323
|
+
{ value: "test", label: "Run readiness checks (test) for a preparation" },
|
|
324
|
+
{ value: "ui", label: "Open Compiler UI" },
|
|
325
|
+
{ value: "stop", label: "Stop the local engine" },
|
|
326
|
+
{ value: "quit", label: "Quit" },
|
|
327
|
+
],
|
|
328
|
+
});
|
|
329
|
+
if (p.isCancel(action) || action === "quit")
|
|
330
|
+
return "exit";
|
|
331
|
+
if (action === "ls") {
|
|
332
|
+
await spawnInterf(["prep", "ls"]);
|
|
333
|
+
return "continue";
|
|
334
|
+
}
|
|
335
|
+
if (action === "create") {
|
|
336
|
+
const newId = await flowCreatePreparation(conn);
|
|
337
|
+
if (newId) {
|
|
338
|
+
const compileNow = await p.confirm({ message: `Compile ${newId} now?`, initialValue: true });
|
|
339
|
+
if (!p.isCancel(compileNow) && compileNow) {
|
|
340
|
+
await spawnInterf(["compile", newId]);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
return "continue";
|
|
344
|
+
}
|
|
345
|
+
if (action === "compile") {
|
|
346
|
+
const id = await pickPreparation(conn, "Which preparation to compile?");
|
|
347
|
+
if (id)
|
|
348
|
+
await spawnInterf(["compile", id]);
|
|
349
|
+
return "continue";
|
|
350
|
+
}
|
|
351
|
+
if (action === "test") {
|
|
352
|
+
const id = await pickPreparation(conn, "Which preparation to test?");
|
|
353
|
+
if (id)
|
|
354
|
+
await spawnInterf(["test", id]);
|
|
355
|
+
return "continue";
|
|
356
|
+
}
|
|
357
|
+
if (action === "ui") {
|
|
358
|
+
const target = `${conn.url}/`;
|
|
359
|
+
console.log();
|
|
360
|
+
console.log(` Opening ${chalk.bold(target)} in your browser…`);
|
|
361
|
+
const command = process.platform === "darwin" ? "open" : process.platform === "win32" ? "start" : "xdg-open";
|
|
362
|
+
try {
|
|
363
|
+
const child = spawn(command, [target], { detached: true, stdio: "ignore" });
|
|
364
|
+
child.on("error", () => {
|
|
365
|
+
console.log(chalk.dim(` (Could not open browser; visit ${target} manually.)`));
|
|
366
|
+
});
|
|
367
|
+
child.unref();
|
|
368
|
+
}
|
|
369
|
+
catch {
|
|
370
|
+
console.log(chalk.dim(` (Could not open browser; visit ${target} manually.)`));
|
|
371
|
+
}
|
|
372
|
+
console.log();
|
|
373
|
+
return "continue";
|
|
374
|
+
}
|
|
375
|
+
if (action === "stop") {
|
|
376
|
+
const ok = await p.confirm({ message: "Stop the connected engine?", initialValue: false });
|
|
377
|
+
if (!p.isCancel(ok) && ok) {
|
|
378
|
+
await spawnInterf(["web", "stop"]);
|
|
379
|
+
return "exit";
|
|
380
|
+
}
|
|
381
|
+
return "continue";
|
|
382
|
+
}
|
|
383
|
+
return "continue";
|
|
384
|
+
}
|
|
385
|
+
async function runWizard(args) {
|
|
386
|
+
let conn;
|
|
387
|
+
const initial = readActiveConnection({
|
|
388
|
+
urlOverride: args.url,
|
|
389
|
+
authTokenOverride: args.token,
|
|
390
|
+
});
|
|
391
|
+
if (!initial) {
|
|
392
|
+
conn = await offerEngineSetup();
|
|
393
|
+
if (!conn) {
|
|
394
|
+
console.log();
|
|
395
|
+
console.log(CONNECT_OR_ERROR_HINT);
|
|
396
|
+
process.exit(1);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
else {
|
|
400
|
+
const url = initial.url.replace(/\/+$/, "");
|
|
401
|
+
const probe = await callJson(`${url}/health`, initial.auth_token);
|
|
402
|
+
if (probe.status === 0) {
|
|
403
|
+
console.log(chalk.yellow(` Connection ${url} is unreachable.`));
|
|
404
|
+
conn = await offerEngineSetup();
|
|
405
|
+
if (!conn)
|
|
406
|
+
process.exit(1);
|
|
407
|
+
}
|
|
408
|
+
else {
|
|
409
|
+
conn = { url, token: initial.auth_token };
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
const instance = await callJson(`${conn.url}/v1/instance`, conn.token);
|
|
413
|
+
console.log();
|
|
414
|
+
console.log(chalk.bold(` Connected to ${conn.url}`));
|
|
415
|
+
if (instance.body?.package_version) {
|
|
416
|
+
console.log(chalk.dim(` v${instance.body.package_version} · ${instance.body.preparation_count ?? 0} preparation(s)`));
|
|
417
|
+
}
|
|
418
|
+
for (;;) {
|
|
419
|
+
console.log();
|
|
420
|
+
const next = await showActionMenu(conn);
|
|
421
|
+
if (next === "exit")
|
|
422
|
+
break;
|
|
423
|
+
}
|
|
424
|
+
p.outro("Bye.");
|
|
425
|
+
}
|
|
426
|
+
export const wizardCommand = {
|
|
427
|
+
command: "$0",
|
|
428
|
+
describe: "Open the interactive wizard (default when no subcommand is given)",
|
|
429
|
+
builder: (yargs) => yargs
|
|
430
|
+
.option("url", { type: "string", describe: "Override the active connection URL" })
|
|
431
|
+
.option("token", { type: "string", describe: "Override the active bearer token" }),
|
|
432
|
+
handler: runWizard,
|
|
433
|
+
};
|
|
434
|
+
/** Alias: `interf init` runs the same wizard. */
|
|
435
|
+
export const initCommand = {
|
|
436
|
+
command: "init",
|
|
437
|
+
describe: "Open the interactive wizard",
|
|
438
|
+
builder: (yargs) => yargs
|
|
439
|
+
.option("url", { type: "string", describe: "Override the active connection URL" })
|
|
440
|
+
.option("token", { type: "string", describe: "Override the active bearer token" }),
|
|
441
|
+
handler: runWizard,
|
|
442
|
+
};
|
package/dist/cli/index.d.ts
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
import { initCommand } from "./commands/init.js";
|
|
2
|
-
import { createCommand } from "./commands/create.js";
|
|
3
1
|
import { compileCommand } from "./commands/compile.js";
|
|
4
2
|
import { testCommand } from "./commands/test.js";
|
|
5
3
|
import { doctorCommand } from "./commands/doctor.js";
|
|
6
|
-
import {
|
|
4
|
+
import { methodCommand } from "./commands/method.js";
|
|
5
|
+
import { runsCommand } from "./commands/runs.js";
|
|
7
6
|
import { statusCommand } from "./commands/status.js";
|
|
8
7
|
import { resetCommand } from "./commands/reset.js";
|
|
9
|
-
import { defaultCommand } from "./commands/default.js";
|
|
10
|
-
import { verifyCommand } from "./commands/verify.js";
|
|
11
8
|
import { webCommand } from "./commands/web.js";
|
|
9
|
+
import { prepCommand } from "./commands/prep.js";
|
|
10
|
+
import { loginCommand } from "./commands/login.js";
|
|
11
|
+
import { logoutCommand } from "./commands/logout.js";
|
|
12
|
+
import { wizardCommand, initCommand } from "./commands/wizard.js";
|
|
12
13
|
export declare function buildCli(argv?: string[]): import("yargs").Argv<{}>;
|
|
13
14
|
export declare function runCli(argv?: string[]): {
|
|
14
15
|
[x: string]: unknown;
|
|
@@ -19,4 +20,4 @@ export declare function runCli(argv?: string[]): {
|
|
|
19
20
|
_: (string | number)[];
|
|
20
21
|
$0: string;
|
|
21
22
|
}>;
|
|
22
|
-
export { initCommand,
|
|
23
|
+
export { initCommand, compileCommand, testCommand, doctorCommand, methodCommand, runsCommand, statusCommand, resetCommand, webCommand, prepCommand, loginCommand, logoutCommand, wizardCommand, };
|
package/dist/cli/index.js
CHANGED
|
@@ -1,30 +1,33 @@
|
|
|
1
1
|
import yargs from "yargs";
|
|
2
2
|
import { hideBin } from "yargs/helpers";
|
|
3
|
-
import { initCommand } from "./commands/init.js";
|
|
4
|
-
import { createCommand } from "./commands/create.js";
|
|
5
3
|
import { compileCommand } from "./commands/compile.js";
|
|
6
4
|
import { testCommand } from "./commands/test.js";
|
|
7
5
|
import { doctorCommand } from "./commands/doctor.js";
|
|
8
|
-
import {
|
|
6
|
+
import { methodCommand } from "./commands/method.js";
|
|
7
|
+
import { runsCommand } from "./commands/runs.js";
|
|
9
8
|
import { statusCommand } from "./commands/status.js";
|
|
10
9
|
import { resetCommand } from "./commands/reset.js";
|
|
11
|
-
import { defaultCommand } from "./commands/default.js";
|
|
12
|
-
import { verifyCommand } from "./commands/verify.js";
|
|
13
10
|
import { webCommand } from "./commands/web.js";
|
|
11
|
+
import { prepCommand } from "./commands/prep.js";
|
|
12
|
+
import { loginCommand } from "./commands/login.js";
|
|
13
|
+
import { logoutCommand } from "./commands/logout.js";
|
|
14
|
+
import { wizardCommand, initCommand } from "./commands/wizard.js";
|
|
14
15
|
export function buildCli(argv = hideBin(process.argv)) {
|
|
15
16
|
return yargs(argv)
|
|
16
17
|
.scriptName("interf")
|
|
17
|
-
.command(
|
|
18
|
+
.command(wizardCommand)
|
|
18
19
|
.command(initCommand)
|
|
19
20
|
.command(compileCommand)
|
|
20
21
|
.command(testCommand)
|
|
21
|
-
.command(createCommand)
|
|
22
22
|
.command(doctorCommand)
|
|
23
|
-
.command(
|
|
23
|
+
.command(methodCommand)
|
|
24
|
+
.command(runsCommand)
|
|
24
25
|
.command(statusCommand)
|
|
25
|
-
.command(verifyCommand)
|
|
26
26
|
.command(webCommand)
|
|
27
27
|
.command(resetCommand)
|
|
28
|
+
.command(prepCommand)
|
|
29
|
+
.command(loginCommand)
|
|
30
|
+
.command(logoutCommand)
|
|
28
31
|
.strict()
|
|
29
32
|
.help()
|
|
30
33
|
.version();
|
|
@@ -32,4 +35,4 @@ export function buildCli(argv = hideBin(process.argv)) {
|
|
|
32
35
|
export function runCli(argv = hideBin(process.argv)) {
|
|
33
36
|
return buildCli(argv).parse();
|
|
34
37
|
}
|
|
35
|
-
export { initCommand,
|
|
38
|
+
export { initCommand, compileCommand, testCommand, doctorCommand, methodCommand, runsCommand, statusCommand, resetCommand, webCommand, prepCommand, loginCommand, logoutCommand, wizardCommand, };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html class="dark geistsans_d5a4f12f-module__iZqIaq__variable geistmono_157ca88a-module__uNhmwG__variable" lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/
|
|
1
|
+
<!DOCTYPE html><html class="dark geistsans_d5a4f12f-module__iZqIaq__variable geistmono_157ca88a-module__uNhmwG__variable" lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/045gole2ojo3g.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/0gpzgsv0w.q~m.js"/><script src="/_next/static/chunks/06yhdspx~ca5-.js" async=""></script><script src="/_next/static/chunks/0ilwfezfvu6~-.js" async=""></script><script src="/_next/static/chunks/turbopack-0.uq1k8c0j4s..js" async=""></script><script src="/_next/static/chunks/06z~l3kwb891e.js" async=""></script><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><title>Interf Compiler</title><meta name="description" content="Local Interf workspace for Preparations, Methods, runs, readiness checks, and portable context."/><script src="/_next/static/chunks/03~yq9q893hmn.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/0gpzgsv0w.q~m.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[26439,[\"/_next/static/chunks/06z~l3kwb891e.js\"],\"default\"]\n3:I[99569,[\"/_next/static/chunks/06z~l3kwb891e.js\"],\"default\"]\n4:I[26890,[\"/_next/static/chunks/06z~l3kwb891e.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[26890,[\"/_next/static/chunks/06z~l3kwb891e.js\"],\"ViewportBoundary\"]\na:I[26890,[\"/_next/static/chunks/06z~l3kwb891e.js\"],\"MetadataBoundary\"]\nc:I[28946,[\"/_next/static/chunks/06z~l3kwb891e.js\"],\"default\",1]\n:HL[\"/_next/static/chunks/045gole2ojo3g.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/045gole2ojo3g.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/06z~l3kwb891e.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"className\":\"dark geistsans_d5a4f12f-module__iZqIaq__variable geistmono_157ca88a-module__uNhmwG__variable\",\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/045gole2ojo3g.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"C6vVfy3aeYuIO3d2AoNvC\"}\n"])</script><script>self.__next_f.push([1,"d:[]\n7:\"$Wd\"\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\nb:[[\"$\",\"title\",\"0\",{\"children\":\"Interf Compiler\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Local Interf workspace for Preparations, Methods, runs, readiness checks, and portable context.\"}]]\n"])</script></body></html>
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
1:"$Sreact.fragment"
|
|
2
2
|
2:I[419,["/_next/static/chunks/06z~l3kwb891e.js"],"ClientPageRoot"]
|
|
3
|
-
3:I[12562,["/_next/static/chunks/06z~l3kwb891e.js","/_next/static/chunks/0b-ywny_j0g~0.js","/_next/static/chunks/0_i-3_5l9t2qe.js","/_next/static/chunks/
|
|
3
|
+
3:I[12562,["/_next/static/chunks/06z~l3kwb891e.js","/_next/static/chunks/0b-ywny_j0g~0.js","/_next/static/chunks/0_i-3_5l9t2qe.js","/_next/static/chunks/17t-lulmyawg5.js","/_next/static/chunks/08m7vf5asqlsm.js"],"default"]
|
|
4
4
|
6:I[26890,["/_next/static/chunks/06z~l3kwb891e.js"],"OutletBoundary"]
|
|
5
5
|
7:"$Sreact.suspense"
|
|
6
6
|
:HL["/_next/static/chunks/0xxmf45eskdt~.css","style"]
|
|
7
|
-
0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0xxmf45eskdt~.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/0b-ywny_j0g~0.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/0_i-3_5l9t2qe.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/
|
|
7
|
+
0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0xxmf45eskdt~.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/0b-ywny_j0g~0.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/0_i-3_5l9t2qe.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/17t-lulmyawg5.js","async":true}],["$","script","script-3",{"src":"/_next/static/chunks/08m7vf5asqlsm.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"C6vVfy3aeYuIO3d2AoNvC"}
|
|
8
8
|
4:{}
|
|
9
9
|
5:"$0:rsc:props:children:0:props:serverProvidedParams:params"
|
|
10
10
|
8:null
|
|
@@ -2,17 +2,17 @@
|
|
|
2
2
|
2:I[26439,["/_next/static/chunks/06z~l3kwb891e.js"],"default"]
|
|
3
3
|
3:I[99569,["/_next/static/chunks/06z~l3kwb891e.js"],"default"]
|
|
4
4
|
4:I[419,["/_next/static/chunks/06z~l3kwb891e.js"],"ClientPageRoot"]
|
|
5
|
-
5:I[12562,["/_next/static/chunks/06z~l3kwb891e.js","/_next/static/chunks/0b-ywny_j0g~0.js","/_next/static/chunks/0_i-3_5l9t2qe.js","/_next/static/chunks/
|
|
5
|
+
5:I[12562,["/_next/static/chunks/06z~l3kwb891e.js","/_next/static/chunks/0b-ywny_j0g~0.js","/_next/static/chunks/0_i-3_5l9t2qe.js","/_next/static/chunks/17t-lulmyawg5.js","/_next/static/chunks/08m7vf5asqlsm.js"],"default"]
|
|
6
6
|
8:I[26890,["/_next/static/chunks/06z~l3kwb891e.js"],"OutletBoundary"]
|
|
7
7
|
9:"$Sreact.suspense"
|
|
8
8
|
b:I[26890,["/_next/static/chunks/06z~l3kwb891e.js"],"ViewportBoundary"]
|
|
9
9
|
d:I[26890,["/_next/static/chunks/06z~l3kwb891e.js"],"MetadataBoundary"]
|
|
10
10
|
f:I[28946,["/_next/static/chunks/06z~l3kwb891e.js"],"default",1]
|
|
11
|
-
:HL["/_next/static/chunks/
|
|
11
|
+
:HL["/_next/static/chunks/045gole2ojo3g.css","style"]
|
|
12
12
|
:HL["/_next/static/media/GeistMono_Variable.p.17jn9btb_52pq.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
|
|
13
13
|
:HL["/_next/static/media/Geist_Variable-s.p.0-te~ja_gpvcf.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
|
|
14
14
|
:HL["/_next/static/chunks/0xxmf45eskdt~.css","style"]
|
|
15
|
-
0:{"P":null,"c":["",""],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/
|
|
15
|
+
0:{"P":null,"c":["",""],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/045gole2ojo3g.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/06z~l3kwb891e.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"className":"dark geistsans_d5a4f12f-module__iZqIaq__variable geistmono_157ca88a-module__uNhmwG__variable","lang":"en","children":["$","body",null,{"children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]]}],{"children":[["$","$1","c",{"children":[["$","$L4",null,{"Component":"$5","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@6","$@7"]}}],[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0xxmf45eskdt~.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/0b-ywny_j0g~0.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/0_i-3_5l9t2qe.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/17t-lulmyawg5.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/_next/static/chunks/08m7vf5asqlsm.js","async":true,"nonce":"$undefined"}]],["$","$L8",null,{"children":["$","$9",null,{"name":"Next.MetadataOutlet","children":"$@a"}]}]]}],{},null,false,null]},null,false,null],["$","$1","h",{"children":[null,["$","$Lb",null,{"children":"$Lc"}],["$","div",null,{"hidden":true,"children":["$","$Ld",null,{"children":["$","$9",null,{"name":"Next.Metadata","children":"$Le"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$f",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/045gole2ojo3g.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"C6vVfy3aeYuIO3d2AoNvC"}
|
|
16
16
|
6:{}
|
|
17
17
|
7:"$0:f:0:1:1:children:0:props:children:0:props:serverProvidedParams:params"
|
|
18
18
|
c:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
2:I[26890,["/_next/static/chunks/06z~l3kwb891e.js"],"ViewportBoundary"]
|
|
3
3
|
3:I[26890,["/_next/static/chunks/06z~l3kwb891e.js"],"MetadataBoundary"]
|
|
4
4
|
4:"$Sreact.suspense"
|
|
5
|
-
0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Interf Compiler"}],["$","meta","1",{"name":"description","content":"Local Interf workspace for Preparations, Methods, runs, readiness checks, and portable context."}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"
|
|
5
|
+
0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Interf Compiler"}],["$","meta","1",{"name":"description","content":"Local Interf workspace for Preparations, Methods, runs, readiness checks, and portable context."}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"C6vVfy3aeYuIO3d2AoNvC"}
|