@uplift-beyond/upgo 0.0.0-stage → 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.
- package/LICENSE +21 -0
- package/README.md +111 -2
- package/dist/cli.js +668 -0
- package/dist/server.js +267 -0
- package/dist/src/core/check.js +60 -0
- package/dist/src/core/import.js +515 -0
- package/dist/src/core/mutate.js +164 -0
- package/dist/src/core/ops.js +69 -0
- package/dist/src/core/registry.js +92 -0
- package/dist/src/core/render.js +40 -0
- package/dist/src/core/rules.js +35 -0
- package/dist/src/core/schema.js +68 -0
- package/dist/src/core/store.js +122 -0
- package/dist/src/core/suggestions.js +60 -0
- package/dist/src/core/summary.js +27 -0
- package/dist/src/core/util.js +36 -0
- package/dist/src/core/vocab.js +14 -0
- package/package.json +65 -4
- package/skill/SKILL.md +33 -0
- package/web/dist/assets/index-DqysoOG2.css +1 -0
- package/web/dist/assets/index-uUyiGXev.js +17 -0
- package/web/dist/fonts/OFL.txt +93 -0
- package/web/dist/fonts/outfit-variable.woff2 +0 -0
- package/web/dist/index.html +14 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Uplift Beyond
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,112 @@
|
|
|
1
|
-
#
|
|
1
|
+
# upgo
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Structured goals for every project. Each project keeps a `goals.json` that agents only touch through the validating `upgo` CLI, a slim generated `goals.md` for agent context, and a local dashboard over every registered project.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
npm i -g @uplift-beyond/upgo
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Then `upgo help`. The agent skill ships in the package: copy `$(npm root -g)/@uplift-beyond/upgo/skill/SKILL.md` to `~/.claude/skills/upgo/SKILL.md`.
|
|
12
|
+
|
|
13
|
+
## Setup from source
|
|
14
|
+
|
|
15
|
+
- Node 22.18+ (it runs the `.ts` files directly). `npm install` in this folder.
|
|
16
|
+
- Put this folder on your PATH: `upgo.cmd` serves cmd/PowerShell, `upgo` serves Git Bash and other shells. Without PATH: `node <upgo folder>/cli.ts`.
|
|
17
|
+
- `npm run build` builds the dashboard into `web/dist` (`start.bat` does it when missing).
|
|
18
|
+
- The agent skill is `skill/SKILL.md`. Link it into `~/.claude/skills/upgo` (a symlink or junction), so editing it here is what Claude loads.
|
|
19
|
+
|
|
20
|
+
## The dashboard
|
|
21
|
+
|
|
22
|
+
`upgo ui` serves `http://127.0.0.1:4141` and opens it. It only listens on this machine.
|
|
23
|
+
|
|
24
|
+
- **Projects**: pick one in the left sidebar. Every registered project shows with its open count.
|
|
25
|
+
- **Filters** (inside the project): search (id, title, body, pointers), Phase, Status, Section, Size, Scope. Done and dropped items stay hidden until **Show done/dropped** is on. **Clear filters** resets.
|
|
26
|
+
- **Read**: click an item's title to expand its body, pointers and related refs; a button loads its detail file.
|
|
27
|
+
- **Change**: right-click a row or use its ⋮ menu: edit, phase, status, done (optional note), drop (asks a reason), reopen, move up/down, copy, delete.
|
|
28
|
+
- **Reorder**: drag a row by its handle, also into another section; dropping on a section header puts it at the end. Keyboard: Alt+Up / Alt+Down.
|
|
29
|
+
- **Sections**: **Add section** in the header; a section's ⋮ menu renames, moves, adds an item to it or deletes it (only when it holds no items at all). A section with no open items shows as closed.
|
|
30
|
+
- **Copy for an agent**: tick items (shift-click for a range), press **Copy** in the bar at the bottom, paste into Claude. It gets `id: title` plus the body and reads the rest itself with `upgo show <id>`.
|
|
31
|
+
- **Suggestions**: ask an agent for ideas and it adds them with `upgo suggestion add`. They show in the project's **Suggestions** tab (next to **Goals**), as rows like goal rows: click to expand, **Add to goals** on each row (opens a filled-in Add item form, saved ones disappear), ⋮ or right-click for copy and dismiss. Tick several for **Copy** (for an agent, they stay), **Add to goals** (one form after another) or **Dismiss** in the bottom bar.
|
|
32
|
+
- **Live**: when an agent changes a `goals.json` or `suggestions.json`, the page updates by itself.
|
|
33
|
+
|
|
34
|
+
## Working with agents
|
|
35
|
+
|
|
36
|
+
Agents follow the `upgo` skill. In practice:
|
|
37
|
+
|
|
38
|
+
- "work on `random-logouts`": the agent runs `upgo show`, does the work, then `upgo done <id> --note "..."`.
|
|
39
|
+
- "what's in way later?": `upgo list --phase wayLater`. Done work: `upgo list --status done --section 5`.
|
|
40
|
+
- Bugs or gaps they find are added with `upgo add`; things everyone must know before touching an area become traps (`upgo trap add`).
|
|
41
|
+
- They cannot hand-edit `goals.json` or `goals.md`: a Claude hook blocks it.
|
|
42
|
+
|
|
43
|
+
## Adding a project
|
|
44
|
+
|
|
45
|
+
- **New repo**: `/init` in Claude runs `upgo init --purpose "..."`, seeds sections and items, and puts `@goals.md` at the top of CLAUDE.md. By hand: `upgo init --purpose "one line"` in the folder.
|
|
46
|
+
- **Repo with an old hand-written goals.md**: tell Claude "migrate goals". It does a dry run first (`upgo import goals.md --out <scratch>`), asks about anything unclear, then imports, runs `upgo init`, deletes `goals-completed.md` and rewrites the repo's roadmap rules.
|
|
47
|
+
- Any folder can be a project, git or not. Only `upgo init` registers one; nothing is scanned.
|
|
48
|
+
|
|
49
|
+
## CLI
|
|
50
|
+
|
|
51
|
+
`upgo help` lists everything. The common ones:
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
upgo projects registered projects, open counts
|
|
55
|
+
upgo list [--phase later,wayLater] [--status done] [--section 5] [--search text] [--all]
|
|
56
|
+
upgo show <id> one item in full (also project:id)
|
|
57
|
+
upgo add "Title" --section 5 --phase next --body "why" --files src/x.ts --size S
|
|
58
|
+
upgo edit <id> --phase later --status partial same fields as add; --clear body,size,...
|
|
59
|
+
upgo done <id> --note "what shipped" upgo drop <id> --reason "why not"
|
|
60
|
+
upgo reopen <id> upgo delete <id> (mistakes and duplicates only)
|
|
61
|
+
upgo move <id> --section 3 | --before <id> | --after <id> | --up | --down
|
|
62
|
+
upgo section list | add "Title" | rename 3 "Title" | move 3 --before 1 | delete 3
|
|
63
|
+
upgo trap list | add "Title" --body "..." | edit <id> | delete <id>
|
|
64
|
+
upgo suggestion list | add "Title" --body "..." | delete <id...>
|
|
65
|
+
upgo suggestion promote <id> --section 1 [--phase next] add it as a goal, remove the suggestion
|
|
66
|
+
upgo check [--all] validate one or every project
|
|
67
|
+
upgo render rewrite goals.md from goals.json
|
|
68
|
+
upgo ui [--port 4141] [--no-open]
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Every command works from inside the project folder, or anywhere with `--dir <path>` / `--project <id>`.
|
|
72
|
+
|
|
73
|
+
## What a project holds
|
|
74
|
+
|
|
75
|
+
- **`goals.json`** (committed with the repo): the source of truth. Sections (`n` is the § number, array order is display order), traps, and items. An item has an `id` (slug, unique per project), `section`, `title`, optional `body`, `phase` (`now`, `next`, `later`, `wayLater`, `maybe`), `status` (`planned`, `partial`, `done`, `dropped`), `size` (`S`/`M`/`L`), `scope`, `pointers` (`files`, `seam`, `depends`, `trap`, `how`, `check`, `options`, `where`), `detail` (a `.md` file in the repo), `related` (`project:id` refs, also across projects), dates, and `note` (done note or drop reason). Done and dropped items stay in the file: that is the archive.
|
|
76
|
+
- **`goals.md`** (committed, generated): what CLAUDE.md auto-loads with `@goals.md`. Traps, then the open now/next/later items one line each; way later and maybe show as counts; done and dropped never appear.
|
|
77
|
+
- **`suggestions.json`** (gitignored by `upgo init` in a git repo): ideas an agent left for the user, managed with `upgo suggestion`, never in `goals.md`.
|
|
78
|
+
- **`docs/goalsDetails/*.md`**: long-form detail for an open item, linked through `detail`.
|
|
79
|
+
- **Hooks** installed by `upgo init`: a git pre-commit that runs `upgo check` (a broken `goals.json` or `suggestions.json`, or a stale `goals.md`, blocks the commit), and a PreToolUse hook in the repo's `.claude/settings.json` that stops agents from editing `goals.json`, `goals.md` and `suggestions.json` by hand.
|
|
80
|
+
|
|
81
|
+
Outside the projects: `~/.upgo/registry.json` (which projects exist; `UPGO_REGISTRY` overrides the path, tests use it). An older `registry.json` in the upgo folder is copied there once.
|
|
82
|
+
|
|
83
|
+
## When something goes wrong
|
|
84
|
+
|
|
85
|
+
- **Commit blocked by the pre-commit hook**: run `upgo check` to see why. "goals.md is out of date" is fixed by `upgo render`.
|
|
86
|
+
- **"goals.json was saved, but goals.md could not be written"**: the change is in; run `upgo render`. Do not repeat the command.
|
|
87
|
+
- **A write waits or says the file is locked**: another write holds `goals.json.lock`. A lock older than 10s is taken over automatically.
|
|
88
|
+
- **Dashboard says it is not built**: `npm run build` here.
|
|
89
|
+
- **This folder moved, or upgo was reinstalled somewhere else**: the installed hooks point at the old path and fail. Run `upgo init` again in each project.
|
|
90
|
+
- **Remove a project from the dashboard**: its Remove button, or `upgo forget <id>`. Its files stay where they are.
|
|
91
|
+
|
|
92
|
+
## Pieces
|
|
93
|
+
|
|
94
|
+
- `src/core/`: zod schema, store (lock + atomic writes), mutations, ops, rules, checks, md renderer, importer.
|
|
95
|
+
- `cli.ts`: the CLI. `server.ts`: REST + SSE for the dashboard, 127.0.0.1 only.
|
|
96
|
+
- `web/`: React dashboard (Velora design system), virtualized item list.
|
|
97
|
+
- `goals.schema.json`: generated by `npm run schema`, gives VS Code autocomplete through `$schema`.
|
|
98
|
+
- `skill/SKILL.md`: the agent skill.
|
|
99
|
+
|
|
100
|
+
## License
|
|
101
|
+
|
|
102
|
+
MIT, see `LICENSE`.
|
|
103
|
+
|
|
104
|
+
## Develop
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
npm test # everything (vitest)
|
|
108
|
+
npm run typecheck
|
|
109
|
+
npm run lint
|
|
110
|
+
npm run build # dashboard into web/dist
|
|
111
|
+
npm run dev # dashboard dev server, with `UPGO_DEV=1 upgo ui --no-open` running for the API
|
|
112
|
+
```
|