@starlove/orbit 1.0.7 → 1.1.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 (48) hide show
  1. package/README.md +22 -7
  2. package/SKILL-ORBIT.md +26 -1
  3. package/dist/full/index.html +2 -2
  4. package/dist/full/js/app.a4f045fc.js +676 -0
  5. package/dist/full/js/app.a4f045fc.js.map +7 -0
  6. package/dist/full/{styles.14e9dbbd.css → styles.836872e7.css} +836 -39
  7. package/dist/full/version.json +2 -2
  8. package/docs/AGENT_PROTOCOL.md +23 -5
  9. package/docs/MCP_SETUP.md +5 -3
  10. package/docs/ORBIT_DISPATCH.md +185 -0
  11. package/docs/setup/orbit-init-wizard.md +174 -0
  12. package/package.json +2 -2
  13. package/public/js/actor-labels.js +65 -0
  14. package/public/js/app.js +8 -1
  15. package/public/js/card-actions.js +526 -0
  16. package/public/js/config.js +2 -1
  17. package/public/js/format.js +204 -10
  18. package/public/js/kanban.js +15 -0
  19. package/public/js/local-backend.js +24 -8
  20. package/public/js/router.js +3 -2
  21. package/public/js/search.js +6 -3
  22. package/public/js/settings.js +96 -26
  23. package/public/js/state.js +50 -0
  24. package/public/js/ticket-detail.js +428 -125
  25. package/public/styles.css +836 -39
  26. package/src/cli/orbit.js +217 -32
  27. package/src/core/agent.js +1 -18
  28. package/src/core/agents-md.js +15 -10
  29. package/src/core/attachments.js +238 -0
  30. package/src/core/auth.js +36 -0
  31. package/src/core/backups.js +9 -3
  32. package/src/core/board.js +31 -0
  33. package/src/core/boards.js +1 -1
  34. package/src/core/db.js +42 -2
  35. package/src/core/delete-board.js +87 -21
  36. package/src/core/dispatch.js +532 -0
  37. package/src/core/http.js +31 -11
  38. package/src/core/migrate.js +198 -0
  39. package/src/core/paths.js +6 -0
  40. package/src/core/registry.js +12 -9
  41. package/src/core/router.js +61 -5
  42. package/src/core/search.js +3 -3
  43. package/src/core/snapshots.js +14 -2
  44. package/src/mcp/orbit-client.js +81 -38
  45. package/src/mcp-server.js +190 -6
  46. package/src/server.js +20 -0
  47. package/dist/full/js/app.f4fd5e94.js +0 -604
  48. package/dist/full/js/app.f4fd5e94.js.map +0 -7
package/README.md CHANGED
@@ -43,7 +43,7 @@ From the repo you want a board for:
43
43
 
44
44
  ```bash
45
45
  cd path/to/your-app
46
- orbit init # creates .orbit/board.db + SKILL-ORBIT.md + AGENTS.md
46
+ orbit init # creates .orbit/board.db + managed SKILL-ORBIT.md + AGENTS.md
47
47
  orbit init --example # optional: add onboarding example tickets
48
48
  orbit init --no-ai # optional: create or update the board with AI disabled
49
49
  ```
@@ -51,7 +51,7 @@ orbit init --no-ai # optional: create or update the board with AI disabled
51
51
  Start one runtime and keep using it:
52
52
 
53
53
  ```bash
54
- orbit serve # host runtime, uses ~/.orbit
54
+ orbit serve # host runtime, uses ~/.orbit, refreshes managed SKILL-ORBIT.md copies
55
55
  # or
56
56
  orbit docker # Docker runtime, uses <repo>/.orbit/docker-data
57
57
  ```
@@ -60,7 +60,7 @@ Both serve `http://localhost:3337`. Use `--port 3400` to change ports and `--cwd
60
60
 
61
61
  `orbit serve` and `orbit docker` run the same app but use different registries by default. A board registered in one mode will not appear in the other unless you share `DATA_DIR`, re-register it, or import a snapshot.
62
62
 
63
- For multiple boards, run your chosen runtime once. In another terminal, `cd` into another repo and run `orbit init`; the board joins that runtime's board picker without a restart.
63
+ For multiple boards, run your chosen runtime once. In another terminal, `cd` into another repo and run `orbit init`; the board joins that runtime's board picker without a restart. `SKILL-ORBIT.md` is Orbit-managed guidance and may be overwritten by `orbit init` or refreshed by `orbit serve`; keep repo/team-specific agent rules in `AGENTS.md` or board *Agent Instructions*.
64
64
 
65
65
  Docker options:
66
66
 
@@ -72,7 +72,7 @@ orbit docker --no-build # reuse an existing starscape-orbit:local image
72
72
 
73
73
  `orbit docker` mounts the selected project into the container. Board data still lives in `.orbit/board.db`; Docker-only registry, exports, and backups live under `<repo>/.orbit/docker-data` by default.
74
74
 
75
- Wipe a single board and start over with `orbit reset` (deletes `.orbit/`, `SKILL-ORBIT.md`, and the registry row), then `orbit init` again.
75
+ Wipe a single board and start over with `orbit reset` (deletes `.orbit/`, `SKILL-ORBIT.md`, and the registry row), then `orbit init` again. On Windows, close `orbit serve` terminals and restart any AI client using Orbit MCP before deleting or recloning a repo; those helper processes keep SQLite handles open while they are running.
76
76
 
77
77
  ## Use with AI
78
78
 
@@ -86,6 +86,20 @@ Orbit ships with everything an agent needs to claim work, read tickets, and writ
86
86
 
87
87
  If you initialized with `--example`, ticket #12 (`Try Orbit MCP on this ticket`) is a good first exercise once MCP is connected.
88
88
 
89
+ ### Dispatch a local Hermes run
90
+
91
+ For a first-class handoff to a named Hermes profile on a local board, use `orbit dispatch` instead of writing an ad-hoc prompt file:
92
+
93
+ ```bash
94
+ orbit dispatch --board my-app --ticket 12 --profile agent --worktree
95
+ orbit dispatch --board my-app --ticket 12 --dry-run # preview only; no writes or spawn
96
+ orbit dispatch --board my-app --ticket 12 --no-spawn # prepare handoff/comment; leave lane unchanged
97
+ ```
98
+
99
+ Dispatch validates the local board, ticket, blockers, and Hermes availability before mutating a ticket. Normal spawn mode writes the generated handoff into the ticket's **AI Written-Plan**, moves the ticket to **In Progress**, optionally preserves a git worktree/branch for review, starts Hermes, and comments a run record back onto the card. `--no-spawn` writes the handoff/comment but does not move the ticket to In Progress. The default `agent-safe` policy allows local inspection, edits, tests, and commits while blocking Docker, pushes, deploys, package installs, destructive git commands, and common network/cloud escape hatches.
100
+
101
+ `orbit dispatch` is intentionally not a hosted-board client yet: `--server-url` and `--remote` are refused before side effects. Use remote MCP tools for hosted/remote boards, or run dispatch on the board host. Full operator/user guide: [docs/ORBIT_DISPATCH.md](docs/ORBIT_DISPATCH.md).
102
+
89
103
  ## Vocabulary
90
104
 
91
105
  - **Board** — one repo's planning surface. Each board carries its own `agent_instructions`, lanes, tickets, and memory entries.
@@ -110,11 +124,11 @@ Bun is not used as the Orbit runtime because Orbit depends on Node's built-in `n
110
124
 
111
125
  Each repo gets its own board database. Orbit keeps a small central registry that maps repo paths to their board files; the CLI, web app, and MCP server use explicit project roots when provided, then fall back to walking upward to find `.orbit/board.db`.
112
126
 
113
- - **Per-repo board** — `.orbit/board.db` lives in the repo it tracks. `orbit init` creates it, drops `SKILL-ORBIT.md` at the repo root, and creates/updates `AGENTS.md` with a terse pointer so agents load the full Orbit protocol only when relevant. Add `--example` to create onboarding cards, or `--no-ai` to disable AI collaboration for the board.
127
+ - **Per-repo board** — `.orbit/board.db` lives in the repo it tracks. `orbit init` creates it, writes the managed `SKILL-ORBIT.md` at the repo root, and creates/updates `AGENTS.md` with a terse pointer so agents load the full Orbit protocol only when relevant. `orbit serve` refreshes managed `SKILL-ORBIT.md` copies for registered repos on startup. Add `--example` to create onboarding cards, or `--no-ai` to disable AI collaboration for the board.
114
128
  - **Central registry** — `registry.db` records each board's path, slug, and last-active timestamp. Host `orbit serve` uses `~/.orbit`; `orbit docker` uses `<repo>/.orbit/docker-data`. Keep one mode unless you intentionally share `DATA_DIR`, re-register boards, or import snapshots.
115
129
  - **Project-root discovery** — `orbit serve`, `orbit mcp`, and MCP-attached agents resolve a board from an explicit `--cwd` / `PROJECT_ROOT` first, then fall back to walking up from process cwd to find `.orbit/board.db`. Persistent MCP configs should use an explicit root so the right board attaches even when the agent launches elsewhere.
116
130
  - **Two channels for AI** — `AGENTS.md` is the auto-loaded briefing, with an Orbit-managed pointer to `SKILL-ORBIT.md`; the *MCP config* tells the agent runtime how to launch Orbit's MCP server for the right project. The briefing travels with the repo; the MCP registration is per-agent-install.
117
- - **Snapshot-portable** — Settings → Repository → Export downloads a `.orbit.json` snapshot. Import on another install (or in the browser preview at [orbit.starscape.app/app](https://orbit.starscape.app/app)) to restore the same board.
131
+ - **Snapshot-portable** — Settings → Repository → Export downloads a `.orbit.json` snapshot, with an option to embed attached images. Import on another install (or in the browser preview at [orbit.starscape.app/app](https://orbit.starscape.app/app)) to restore the same board.
118
132
 
119
133
  ## Developing Orbit
120
134
 
@@ -196,6 +210,7 @@ BOARD_NAME="My App" BOARD_SLUG=my-app REPO_URL=https://github.com/you/my-app orb
196
210
  - **UI loads but lanes are blank** — usually a cached `app.js`. Hard-refresh the page (Ctrl+Shift+R) and check the browser console.
197
211
  - **`node:sqlite` is not a known module** — you're on Node < 22. Upgrade to Node 22+.
198
212
  - **Port 3337 already in use** — run `orbit serve --port 3340` or `orbit docker --port 3340`.
213
+ - **Windows says `.orbit/board.db` is busy during cleanup** - an Orbit web server, MCP helper, editor, or terminal still has the SQLite file open. Stop `orbit serve`, close or restart AI clients with Orbit MCP enabled, then retry delete from Settings or run `orbit reset --cwd <repo>` before recloning or deleting the folder.
199
214
 
200
215
  ## Data
201
216
 
@@ -218,7 +233,7 @@ $env:DATA_DIR="C:\path\to\data"; orbit serve
218
233
 
219
234
  The UI exposes **Export** and **Import** from **Settings → Repository**.
220
235
 
221
- **Export** downloads a portable `.orbit.json` file you can move to another computer or import later.
236
+ **Export** downloads a portable `.orbit.json` file you can move to another computer or import later. By default it stores image attachment records without image bytes; enable **Include attached images** to embed the images in the snapshot.
222
237
 
223
238
  **Automatic backups** are separate from Export. Orbit quietly saves local backup copies after you make changes, waiting about two minutes after your last edit so it does not create a file for every click. Orbit also makes an immediate backup before risky actions like deleting a board, resetting Orbit, or replacing a board during import.
224
239
 
package/SKILL-ORBIT.md CHANGED
@@ -2,13 +2,15 @@
2
2
 
3
3
  Read this before repo work. This board is the repo-local memory and execution layer.
4
4
 
5
+ This file is managed by Orbit and may be overwritten by `orbit init` or refreshed by `orbit serve`. Put repo/team-specific agent rules in `AGENTS.md` or board `agent_instructions`, not here.
6
+
5
7
  ## MCP, cwd, and this file
6
8
 
7
9
  These are separate concerns; mixing them causes confusion:
8
10
 
9
11
  - **Where Orbit is installed** — Your MCP client stores an **absolute path** to Orbit's `src/mcp-server.js` (the generated snippet under **Settings → AI**). Claude Code / Codex / Cursor keep that registration. Starting your agent **from another folder** does not change that path.
10
12
 
11
- - **Which board MCP tools use** — The MCP helper uses the explicit project root passed by `orbit mcp --cwd <repo>` or `PROJECT_ROOT`; without either, it falls back to the process current working directory and walks upward until it finds a repo with `.orbit/board.db` (details in [`docs/MCP_SETUP.md`](docs/MCP_SETUP.md)). Prefer explicit `--cwd` / `PROJECT_ROOT` in persistent MCP configs so the right board attaches even when the agent launches elsewhere.
13
+ - **Which board MCP tools use** — Orbit can target either a local board discovered from a repo path or a hosted board by remote URL. For local boards, the MCP helper uses the explicit project root passed by `orbit mcp --cwd <repo>` or `PROJECT_ROOT`; without either, it falls back to the process current working directory and walks upward until it finds a repo with `.orbit/board.db` (details in [`docs/MCP_SETUP.md`](docs/MCP_SETUP.md)). For remote/hosted boards, use the explicit board/server URL from the prompt or environment, then `board_list` + `board_set_active` before mutations; repo cwd remains code context, not planning-state authority. Prefer explicit `--cwd` / `PROJECT_ROOT` or explicit remote URL in persistent MCP configs so the right board attaches even when the agent launches elsewhere.
12
14
 
13
15
  - **This file** — Coding agents resolve `SKILL-ORBIT.md` through normal **filesystem / workspace search**, not through MCP tools. Keep a copy **in each repo** where you run an agent against that board—usually the repo that contains `.orbit/board.db`. If you edit in a multi-root workspace with more than one `SKILL-ORBIT.md`, name the repo or path explicitly in your prompt.
14
16
 
@@ -20,6 +22,27 @@ These are separate concerns; mixing them causes confusion:
20
22
  - Use ticket fields for durable implementation records: `ai_plan`, `implementation_summary`, `implementation_updates`.
21
23
  - Add a project entry when the context should outlive one ticket.
22
24
 
25
+ ## Dispatching Agents
26
+
27
+ `orbit dispatch --board <slug> --ticket <number-or-id> --profile <name> --worktree` is the preferred human/orchestrator entrypoint for starting a Hermes agent on a specific card.
28
+
29
+ Dispatch responsibilities:
30
+ - Generate the handoff and store the canonical copy in the card's `ai_plan` / AI Written-Plan field.
31
+ - Move the card to In Progress.
32
+ - Preserve a git worktree/branch for human testing when `--worktree` is used.
33
+ - Add a run-record comment with profile, policy, branch, worktree, pid, and command.
34
+ - Apply the default safe PATH policy wrappers unless `--policy none` is explicit.
35
+
36
+ Agent completion responsibilities remain unchanged:
37
+ - Write final work notes to `implementation_summary`.
38
+ - Write pitfalls, remediation, and reusable future guidance to `implementation_updates`.
39
+ - Add comments for transient breadcrumbs/run events.
40
+ - Move the card to Review unless the human explicitly asked for Done.
41
+
42
+ ## Human CLI Checks
43
+
44
+ - `orbit -v` / `orbit --version`: print the installed Orbit CLI version for support, bug reports, and reproducibility notes.
45
+
23
46
  ## Historical Backfill
24
47
 
25
48
  If asked to create historical tickets from logs, docs, commit history, notes, or conversations, reconstruct planning structure instead of making a flat list.
@@ -67,6 +90,8 @@ For a full picture of cross-cutting links call `GET /api/tickets/:id/relations`.
67
90
 
68
91
  - `GET /api/boards/:board_id/context`
69
92
  - `GET /api/boards/:board_id/archive`
93
+ - `GET /api/tickets/:ticket_id`
94
+ - `GET /api/tickets/lookup?board=<slug>&number=<n>` / `GET /api/tickets/lookup?board=<slug>&title=<exact-title>`
70
95
  - `GET /api/tickets/:ticket_id/context?depth=1`
71
96
  - `GET /api/tickets/:ticket_id/relations`
72
97
  - `GET /api/tickets/:ticket_id/blockers`
@@ -15,7 +15,7 @@
15
15
  sizes="180x180"
16
16
  href="./apple-touch-icon.png"
17
17
  />
18
- <link rel="stylesheet" href="styles.14e9dbbd.css" />
18
+ <link rel="stylesheet" href="styles.836872e7.css" />
19
19
  </head>
20
20
  <body>
21
21
  <div class="grain">
@@ -309,6 +309,6 @@
309
309
  </div>
310
310
  </dialog>
311
311
 
312
- <script src="js/app.f4fd5e94.js" type="module"></script>
312
+ <script src="js/app.a4f045fc.js" type="module"></script>
313
313
  </body>
314
314
  </html>