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 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 (v0.1)** — experimental. API and behavior may change. Not yet recommended for production use.
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 all**.
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 `.totopo/README.md` for full details on the security model.
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 **Reset** from the totopo menu to rebuild the container.
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 **Reset** from the totopo menu to rebuild the container image. Do not install tools manually inside a running container as changes won't persist.
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "totopo",
3
- "version": "0.7.0-rc-2",
3
+ "version": "0.7.0",
4
4
  "description": "Secure AI Box — isolated dev environments for AI coding assistants",
5
5
  "type": "module",
6
6
  "bin": {
@@ -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, API key presence, project state
10
- const [projectName = "unknown", activeCountStr, hasKeyStr, projectRunningStr, projectImageExistsStr] = process.argv.slice(2);
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 sessionLabel = activeCount === 1 ? "1 container running" : `${activeCount} containers running`;
16
+ const containersLabel = activeCount === 0 ? "none" : activeCount === 1 ? "1 running" : `${activeCount} running`;
18
17
  const lines = [];
19
- lines.push(`status: ${sessionLabel}`);
20
- lines.push(`api keys: ${hasKey ? "configured" : "none"} (.totopo/.env)`);
21
- box(lines.join("\n"), ` totopo · ${projectName} `, {
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.warn("Add your API keys to .totopo/.env before starting the container.");
130
- outro("Setup complete. Run totopo again to start your session.");
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") {
@@ -117,17 +117,7 @@ ok("yq", run("yq --version") ?? "not found");
117
117
  // ─── API keys ────────────────────────────────────────────────────────────────
118
118
  section("API keys");
119
119
 
120
- const checkKey = (varName) => {
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) {