totopo 0.7.0-rc-2 → 0.7.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 +5 -5
- package/bin/totopo.js +4 -2
- package/package.json +1 -1
- package/src/core/commands/menu.ts +7 -8
- package/src/core/commands/onboard.ts +2 -2
- package/src/core/commands/settings.ts +5 -1
- package/templates/post-start.mjs +1 -11
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@ Spin up a secure, isolated AI coding environment in any git project — in one c
|
|
|
4
4
|
|
|
5
5
|
## Status
|
|
6
6
|
|
|
7
|
-
⚠️ **Early development (
|
|
7
|
+
⚠️ **Early development (pre-1.0)** — experimental. API and behavior may change. Not yet recommended for production use.
|
|
8
8
|
|
|
9
9
|
## How It Works
|
|
10
10
|
|
|
@@ -53,7 +53,7 @@ status
|
|
|
53
53
|
|
|
54
54
|
### 4. Stop
|
|
55
55
|
|
|
56
|
-
Run `npx totopo` again and select **Stop
|
|
56
|
+
Run `npx totopo` again and select **Stop**.
|
|
57
57
|
|
|
58
58
|
---
|
|
59
59
|
|
|
@@ -94,7 +94,7 @@ status # Re-run security + readiness check
|
|
|
94
94
|
|
|
95
95
|
Remote git operations are blocked inside the container. Push from your host terminal instead.
|
|
96
96
|
|
|
97
|
-
See
|
|
97
|
+
See `docs/VISION.md` for full details on the security model.
|
|
98
98
|
|
|
99
99
|
---
|
|
100
100
|
|
|
@@ -122,6 +122,6 @@ git push / pull / fetch
|
|
|
122
122
|
|
|
123
123
|
**Container fails to start** — the startup check prints exactly which check failed and why.
|
|
124
124
|
|
|
125
|
-
**API key warnings** — check `.totopo/.env` has the correct variable names, then use **
|
|
125
|
+
**API key warnings** — check `.totopo/.env` has the correct variable names, then use **Rebuild** from the totopo menu to rebuild the container.
|
|
126
126
|
|
|
127
|
-
**AI tool not found** — use **
|
|
127
|
+
**AI tool not found** — use **Rebuild** from the totopo menu to rebuild the container image. Do not install tools manually inside a running container as changes won't persist.
|
package/bin/totopo.js
CHANGED
|
@@ -159,9 +159,11 @@ while (showMenu) {
|
|
|
159
159
|
case "doctor":
|
|
160
160
|
run("doctor.ts", ["--verbose"]);
|
|
161
161
|
break;
|
|
162
|
-
case "settings":
|
|
163
|
-
run("settings.ts");
|
|
162
|
+
case "settings": {
|
|
163
|
+
const result = run("settings.ts");
|
|
164
|
+
if (result.status === 2) showMenu = true; // Back selected
|
|
164
165
|
break;
|
|
166
|
+
}
|
|
165
167
|
default:
|
|
166
168
|
break; // quit or cancelled
|
|
167
169
|
}
|
package/package.json
CHANGED
|
@@ -6,19 +6,18 @@
|
|
|
6
6
|
|
|
7
7
|
import { box, cancel, isCancel, select } from "@clack/prompts";
|
|
8
8
|
|
|
9
|
-
// Parse CLI args passed by bin/totopo.js: project name, active container count,
|
|
10
|
-
const [projectName = "unknown", activeCountStr,
|
|
9
|
+
// Parse CLI args passed by bin/totopo.js: project name, active container count, project state
|
|
10
|
+
const [projectName = "unknown", activeCountStr, , projectRunningStr, projectImageExistsStr] = process.argv.slice(2);
|
|
11
11
|
const activeCount = Number.parseInt(activeCountStr ?? "0", 10);
|
|
12
|
-
const hasKey = hasKeyStr === "true";
|
|
13
12
|
const projectRunning = projectRunningStr === "true";
|
|
14
13
|
const projectImageExists = projectImageExistsStr === "true";
|
|
15
14
|
|
|
16
15
|
// ─── Status box ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
|
|
17
|
-
const
|
|
16
|
+
const containersLabel = activeCount === 0 ? "none" : activeCount === 1 ? "1 running" : `${activeCount} running`;
|
|
18
17
|
const lines = [];
|
|
19
|
-
lines.push(`
|
|
20
|
-
lines.push(`
|
|
21
|
-
box(lines.join("\n"),
|
|
18
|
+
lines.push(`workspace: ${projectName}`);
|
|
19
|
+
lines.push(`containers: ${containersLabel}`);
|
|
20
|
+
box(lines.join("\n"), " totopo ", {
|
|
22
21
|
contentAlign: "center",
|
|
23
22
|
titleAlign: "center",
|
|
24
23
|
width: "auto",
|
|
@@ -32,9 +31,9 @@ const action = await select({
|
|
|
32
31
|
{ value: "dev", label: "Start session" },
|
|
33
32
|
...(projectRunning ? [{ value: "stop", label: "Stop" }] : []),
|
|
34
33
|
...(projectImageExists ? [{ value: "rebuild", label: "Rebuild" }] : []),
|
|
34
|
+
{ value: "settings", label: "Settings" },
|
|
35
35
|
{ value: "manage", label: "Manage workspaces" },
|
|
36
36
|
{ value: "doctor", label: "Doctor" },
|
|
37
|
-
{ value: "settings", label: "Settings" },
|
|
38
37
|
{ value: "quit", label: "Quit" },
|
|
39
38
|
],
|
|
40
39
|
});
|
|
@@ -126,5 +126,5 @@ if (commitScope === "local") {
|
|
|
126
126
|
}
|
|
127
127
|
}
|
|
128
128
|
|
|
129
|
-
log.
|
|
130
|
-
outro("Setup complete.
|
|
129
|
+
log.info("Optionally add API keys to .totopo/.env before starting the container.");
|
|
130
|
+
outro("Setup complete.");
|
|
@@ -38,7 +38,7 @@ const fullOption =
|
|
|
38
38
|
|
|
39
39
|
const modeChoice = await select({
|
|
40
40
|
message: "Runtime mode:",
|
|
41
|
-
options: [hostMirrorOption, fullOption],
|
|
41
|
+
options: [hostMirrorOption, fullOption, { value: "back" as const, label: "← Back" }],
|
|
42
42
|
});
|
|
43
43
|
|
|
44
44
|
if (isCancel(modeChoice)) {
|
|
@@ -46,6 +46,10 @@ if (isCancel(modeChoice)) {
|
|
|
46
46
|
process.exit(0);
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
+
if (modeChoice === "back") {
|
|
50
|
+
process.exit(2); // 2 = "back" signal to bin/totopo.js
|
|
51
|
+
}
|
|
52
|
+
|
|
49
53
|
const mode = modeChoice as RuntimeMode;
|
|
50
54
|
|
|
51
55
|
if (mode === "host-mirror") {
|
package/templates/post-start.mjs
CHANGED
|
@@ -117,17 +117,7 @@ ok("yq", run("yq --version") ?? "not found");
|
|
|
117
117
|
// ─── API keys ────────────────────────────────────────────────────────────────
|
|
118
118
|
section("API keys");
|
|
119
119
|
|
|
120
|
-
|
|
121
|
-
const val = process.env[varName];
|
|
122
|
-
if (val) {
|
|
123
|
-
ok(varName, `${val.substring(0, 12)}...`);
|
|
124
|
-
} else {
|
|
125
|
-
warn(varName, "not set — add to .totopo/.env");
|
|
126
|
-
}
|
|
127
|
-
};
|
|
128
|
-
|
|
129
|
-
checkKey("ANTHROPIC_API_KEY");
|
|
130
|
-
checkKey("KILO_API_KEY");
|
|
120
|
+
console.log(`ℹ ${dim("Optionally add API keys to .totopo/.env before starting the container.")}`);
|
|
131
121
|
|
|
132
122
|
// ─── Summary ─────────────────────────────────────────────────────────────────
|
|
133
123
|
if (errors === 0) {
|