codeden 0.3.0 → 0.4.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.
Files changed (35) hide show
  1. package/README.md +8 -2
  2. package/dist/cli.js +1 -1
  3. package/dist/{main-DgpYK_Si.js → main-B7VuaduN.js} +2 -2
  4. package/dist/{main-DgpYK_Si.js.map → main-B7VuaduN.js.map} +1 -1
  5. package/dist/{main-BAX1sPiD.js → main-sEg3GS7X.js} +1196 -198
  6. package/dist/main-sEg3GS7X.js.map +1 -0
  7. package/dist/{runner-DGomZl80.js → runner-QPAnitMx.js} +198 -3
  8. package/dist/runner-QPAnitMx.js.map +1 -0
  9. package/dist/runner.js +1 -1
  10. package/dist/web/apple-touch-icon.png +0 -0
  11. package/dist/web/assets/{core-D2h_xdbh.js → core-1ZGcgEnc.js} +1 -1
  12. package/dist/web/assets/engine-oniguruma-S10PniCp.js +1 -0
  13. package/dist/web/assets/{highlighted-body-JLMTFACH-DpId3Lg2.js → highlighted-body-JLMTFACH-Gb9WrOV2.js} +1 -1
  14. package/dist/web/assets/{highlights-C1SeynWZ.js → highlights-BbG82Nvt.js} +1 -1
  15. package/dist/web/assets/index-CW3M7yYL.css +1 -0
  16. package/dist/web/assets/index-Capj1YIA.js +914 -0
  17. package/dist/web/assets/langs-92p-7kXy.js +1 -0
  18. package/dist/web/assets/mermaid-WFAXDIZX-D5w0oM_l.js +1 -0
  19. package/dist/web/assets/{shiki-h6vxFpD2.js → shiki-DvdkI_wn.js} +2 -2
  20. package/dist/web/assets/{stream-tokenizer-D8Euixi9.js → stream-tokenizer-hzLEdzf1.js} +1 -1
  21. package/dist/web/assets/{themes-Bi1mPEwQ.js → themes-o5fWh38V.js} +2 -2
  22. package/dist/web/icons/icon-192.png +0 -0
  23. package/dist/web/icons/icon-512.png +0 -0
  24. package/dist/web/icons/maskable-192.png +0 -0
  25. package/dist/web/icons/maskable-512.png +0 -0
  26. package/dist/web/index.html +10 -2
  27. package/dist/web/manifest.webmanifest +28 -0
  28. package/package.json +1 -1
  29. package/dist/main-BAX1sPiD.js.map +0 -1
  30. package/dist/runner-DGomZl80.js.map +0 -1
  31. package/dist/web/assets/engine-oniguruma-CG0oBFVI.js +0 -1
  32. package/dist/web/assets/index-BPuGYbOr.css +0 -1
  33. package/dist/web/assets/index-BXhyz2mO.js +0 -914
  34. package/dist/web/assets/langs-NwkcQ-R2.js +0 -1
  35. package/dist/web/assets/mermaid-WFAXDIZX-jqhY_qSL.js +0 -1
package/README.md CHANGED
@@ -165,8 +165,8 @@ More in [Architecture](https://github.com/leonvanzyl/codeden/blob/main/docs/arch
165
165
 
166
166
  ## Security model
167
167
 
168
- - The server and runner listen on **127.0.0.1 only**. Remote or LAN access is not part of v1.
169
- - Every HTTP, WebSocket and MCP request needs a **per-install random token**. The browser gets it once through the launch URL, then holds it in an HttpOnly, `SameSite=Strict` cookie.
168
+ - The server and runner listen on **127.0.0.1 only** by default. **Network access** for your phone or tablet is opt-in, needs a password (stored only as a salted hash), and never exposes the runner or the agents' MCP endpoint. See [Phones, tablets and network access](https://github.com/leonvanzyl/codeden/blob/main/docs/remote-access.md).
169
+ - Every local HTTP, WebSocket and MCP request needs a **per-install random token**. The browser gets it once through the launch URL, then holds it in an HttpOnly, `SameSite=Strict` cookie.
170
170
  - `Host` and `Origin` headers are checked, which blocks other websites and DNS rebinding from reaching the local API.
171
171
  - Agent MCP tokens are **per session and role-scoped**, stored only as hashes, and revoked when the session ends.
172
172
  - The default autonomy level, **Auto, risky actions ask**, lets agents edit and run normal commands inside their worktree, and sends risky actions to your inbox: writes outside the worktree, force pushes, branch deletion, global installs, piping downloads into a shell, and secrets access.
@@ -224,6 +224,8 @@ codeden [options] Start CodeDen and open it in the browser
224
224
  codeden doctor Check the installation (--install: add Claude Code support now)
225
225
  codeden update Install the latest version and switch to it (--rollback: go back)
226
226
  codeden stop Stop the server and the runner
227
+ codeden password Set the network access password (--generate: make one up)
228
+ codeden network on|off Let phones on your network open CodeDen, or stop it
227
229
 
228
230
  Options:
229
231
  --port <n> Port to listen on (default 4317)
@@ -277,6 +279,9 @@ The server stops; the runner, and any agent mid-turn, keeps going. The next `cod
277
279
  **Which platforms?**
278
280
  Windows, macOS and Linux. Windows is tested first.
279
281
 
282
+ **Can I use it from my phone?**
283
+ Yes. Turn on **Settings › Network access**, set a password, and scan the QR code with your phone on the same Wi-Fi (or over your own VPN such as Tailscale). The UI adapts to phones and tablets, and **Add to Home Screen** opens it full screen. Plain http addresses mean no notifications or microphone on the phone. See [Phones, tablets and network access](https://github.com/leonvanzyl/codeden/blob/main/docs/remote-access.md).
284
+
280
285
  **Is the dark factory safe to leave running?**
281
286
  It's experimental. Read [Autonomy and the dark factory](https://github.com/leonvanzyl/codeden/blob/main/docs/autonomy-and-dark-factory.md) first, start with Autopilot on a sandbox repository, set a budget and protected areas, and keep the kill switch in reach.
282
287
 
@@ -294,6 +299,7 @@ It's experimental. Read [Autonomy and the dark factory](https://github.com/leonv
294
299
  | [Agent configuration](https://github.com/leonvanzyl/codeden/blob/main/docs/agent-config.md) | Memory, skills, subagents and MCP servers |
295
300
  | [Voice and images](https://github.com/leonvanzyl/codeden/blob/main/docs/voice-and-images.md) | Dictation, read-aloud and image generation |
296
301
  | [Usage and costs](https://github.com/leonvanzyl/codeden/blob/main/docs/usage-and-costs.md) | The ledger, reports, budgets and rate limits |
302
+ | [Phones, tablets and network access](https://github.com/leonvanzyl/codeden/blob/main/docs/remote-access.md) | Opening CodeDen from your phone, the QR code, Add to Home Screen and VPNs |
297
303
  | [Security](https://github.com/leonvanzyl/codeden/blob/main/docs/security.md) | The security model in detail |
298
304
  | [Troubleshooting](https://github.com/leonvanzyl/codeden/blob/main/docs/troubleshooting.md) | `doctor`, logs and common issues |
299
305
  | [Architecture](https://github.com/leonvanzyl/codeden/blob/main/docs/architecture.md) | How the pieces fit, with a link to the full design |
package/dist/cli.js CHANGED
@@ -242,7 +242,7 @@ async function run() {
242
242
  console.log(selfVersion);
243
243
  process.exit(0);
244
244
  }
245
- await import("./main-BAX1sPiD.js");
245
+ await import("./main-sEg3GS7X.js");
246
246
  }
247
247
  /** Settles once this copy's CLI has loaded (an older launcher that switched here awaits it). */
248
248
  const started = run();
@@ -1,4 +1,4 @@
1
- import { t as startRunner } from "./runner-DGomZl80.js";
1
+ import { t as startRunner } from "./runner-QPAnitMx.js";
2
2
  import { parseArgs } from "node:util";
3
3
  // ../runner/src/main.ts
4
4
  /**
@@ -56,4 +56,4 @@ try {
56
56
  }
57
57
  export {};
58
58
 
59
- //# sourceMappingURL=main-DgpYK_Si.js.map
59
+ //# sourceMappingURL=main-B7VuaduN.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"main-DgpYK_Si.js","names":[],"sources":["../../runner/src/main.ts"],"sourcesContent":["/**\n * Runner process entry. Started detached by the server:\n * node main.js --home <dir> [--fake] [--no-builtin] [--replay <fixture.json>] [--mcp-upstream <url>]\n */\nimport { parseArgs } from \"node:util\";\nimport { startRunner } from \"./runner\";\n\nconst { values } = parseArgs({\n options: {\n home: { type: \"string\" },\n fake: { type: \"boolean\", default: false },\n /** Skip the real Claude Code / Codex adapters (tests that only use Fake or Replay). */\n \"no-builtin\": { type: \"boolean\", default: false },\n /** Serve a recorded fixture as the `replay` provider (repeatable). */\n replay: { type: \"string\", multiple: true },\n \"mcp-upstream\": { type: \"string\" },\n },\n allowPositionals: false,\n});\n\nconst home = values.home ?? process.env.CODEDEN_HOME;\nif (!home) {\n console.error(\"codeden runner: --home or CODEDEN_HOME is required\");\n process.exit(2);\n}\n\nconst log = (m: string) => console.log(`[${new Date().toISOString()}] ${m}`);\n\ntry {\n const runner = await startRunner({\n home,\n enableFakeProvider: values.fake,\n builtinProviders: !values[\"no-builtin\"],\n replayFixtures: values.replay,\n mcpUpstreamUrl: values[\"mcp-upstream\"],\n sweepDescendants: true,\n log,\n onShutdown: () => process.exit(0),\n });\n const stop = () => void runner.close().then(() => process.exit(0));\n for (const signal of [\"SIGINT\", \"SIGTERM\", \"SIGHUP\", \"SIGBREAK\"] as const) {\n process.on(signal, stop);\n }\n} catch (error) {\n log(`failed to start: ${error instanceof Error ? error.message : String(error)}`);\n process.exit(1);\n}\n"],"mappings":";;;;;;;AAOA,MAAM,EAAE,WAAW,UAAU;CAC3B,SAAS;EACP,MAAM,EAAE,MAAM,SAAS;EACvB,MAAM;GAAE,MAAM;GAAW,SAAS;EAAM;;EAExC,cAAc;GAAE,MAAM;GAAW,SAAS;EAAM;;EAEhD,QAAQ;GAAE,MAAM;GAAU,UAAU;EAAK;EACzC,gBAAgB,EAAE,MAAM,SAAS;CACnC;CACA,kBAAkB;AACpB,CAAC;AAED,MAAM,OAAO,OAAO,QAAQ,QAAQ,IAAI;AACxC,IAAI,CAAC,MAAM;CACT,QAAQ,MAAM,oDAAoD;CAClE,QAAQ,KAAK,CAAC;AAChB;AAEA,MAAM,OAAO,MAAc,QAAQ,IAAI,qBAAI,IAAI,KAAK,EAAA,CAAE,YAAY,EAAE,IAAI,GAAG;AAE3E,IAAI;CACF,MAAM,SAAS,MAAM,YAAY;EAC/B;EACA,oBAAoB,OAAO;EAC3B,kBAAkB,CAAC,OAAO;EAC1B,gBAAgB,OAAO;EACvB,gBAAgB,OAAO;EACvB,kBAAkB;EAClB;EACA,kBAAkB,QAAQ,KAAK,CAAC;CAClC,CAAC;CACD,MAAM,aAAa,KAAK,OAAO,MAAM,CAAC,CAAC,WAAW,QAAQ,KAAK,CAAC,CAAC;CACjE,KAAK,MAAM,UAAU;EAAC;EAAU;EAAW;EAAU;CAAU,GAC7D,QAAQ,GAAG,QAAQ,IAAI;AAE3B,SAAS,OAAO;CACd,IAAI,oBAAoB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG;CAChF,QAAQ,KAAK,CAAC;AAChB"}
1
+ {"version":3,"file":"main-B7VuaduN.js","names":[],"sources":["../../runner/src/main.ts"],"sourcesContent":["/**\n * Runner process entry. Started detached by the server:\n * node main.js --home <dir> [--fake] [--no-builtin] [--replay <fixture.json>] [--mcp-upstream <url>]\n */\nimport { parseArgs } from \"node:util\";\nimport { startRunner } from \"./runner\";\n\nconst { values } = parseArgs({\n options: {\n home: { type: \"string\" },\n fake: { type: \"boolean\", default: false },\n /** Skip the real Claude Code / Codex adapters (tests that only use Fake or Replay). */\n \"no-builtin\": { type: \"boolean\", default: false },\n /** Serve a recorded fixture as the `replay` provider (repeatable). */\n replay: { type: \"string\", multiple: true },\n \"mcp-upstream\": { type: \"string\" },\n },\n allowPositionals: false,\n});\n\nconst home = values.home ?? process.env.CODEDEN_HOME;\nif (!home) {\n console.error(\"codeden runner: --home or CODEDEN_HOME is required\");\n process.exit(2);\n}\n\nconst log = (m: string) => console.log(`[${new Date().toISOString()}] ${m}`);\n\ntry {\n const runner = await startRunner({\n home,\n enableFakeProvider: values.fake,\n builtinProviders: !values[\"no-builtin\"],\n replayFixtures: values.replay,\n mcpUpstreamUrl: values[\"mcp-upstream\"],\n sweepDescendants: true,\n log,\n onShutdown: () => process.exit(0),\n });\n const stop = () => void runner.close().then(() => process.exit(0));\n for (const signal of [\"SIGINT\", \"SIGTERM\", \"SIGHUP\", \"SIGBREAK\"] as const) {\n process.on(signal, stop);\n }\n} catch (error) {\n log(`failed to start: ${error instanceof Error ? error.message : String(error)}`);\n process.exit(1);\n}\n"],"mappings":";;;;;;;AAOA,MAAM,EAAE,WAAW,UAAU;CAC3B,SAAS;EACP,MAAM,EAAE,MAAM,SAAS;EACvB,MAAM;GAAE,MAAM;GAAW,SAAS;EAAM;;EAExC,cAAc;GAAE,MAAM;GAAW,SAAS;EAAM;;EAEhD,QAAQ;GAAE,MAAM;GAAU,UAAU;EAAK;EACzC,gBAAgB,EAAE,MAAM,SAAS;CACnC;CACA,kBAAkB;AACpB,CAAC;AAED,MAAM,OAAO,OAAO,QAAQ,QAAQ,IAAI;AACxC,IAAI,CAAC,MAAM;CACT,QAAQ,MAAM,oDAAoD;CAClE,QAAQ,KAAK,CAAC;AAChB;AAEA,MAAM,OAAO,MAAc,QAAQ,IAAI,qBAAI,IAAI,KAAK,EAAA,CAAE,YAAY,EAAE,IAAI,GAAG;AAE3E,IAAI;CACF,MAAM,SAAS,MAAM,YAAY;EAC/B;EACA,oBAAoB,OAAO;EAC3B,kBAAkB,CAAC,OAAO;EAC1B,gBAAgB,OAAO;EACvB,gBAAgB,OAAO;EACvB,kBAAkB;EAClB;EACA,kBAAkB,QAAQ,KAAK,CAAC;CAClC,CAAC;CACD,MAAM,aAAa,KAAK,OAAO,MAAM,CAAC,CAAC,WAAW,QAAQ,KAAK,CAAC,CAAC;CACjE,KAAK,MAAM,UAAU;EAAC;EAAU;EAAW;EAAU;CAAU,GAC7D,QAAQ,GAAG,QAAQ,IAAI;AAE3B,SAAS,OAAO;CACd,IAAI,oBAAoB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG;CAChF,QAAQ,KAAK,CAAC;AAChB"}