@arcadeai/hypotenuse 0.2.0 → 0.11.1
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 +7 -3
- package/dist/hypotenuse.js +11258 -797
- package/package.json +6 -3
- package/skills/hypotenuse.md +21 -5
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@arcadeai/hypotenuse",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Hypotenuse
|
|
3
|
+
"version": "0.11.1",
|
|
4
|
+
"description": "Hypotenuse — run coding agents on your machine for Linear agent sessions",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
7
7
|
"bin": {
|
|
@@ -38,9 +38,12 @@
|
|
|
38
38
|
"prepack": "bun run bundle"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
+
"@agentclientprotocol/sdk": "2.0.0",
|
|
42
|
+
"@modelcontextprotocol/sdk": "1.32.1",
|
|
41
43
|
"commander": "^14.0.3",
|
|
42
44
|
"nanospinner": "^1.2.2",
|
|
43
|
-
"
|
|
45
|
+
"smol-toml": "^1.9.1",
|
|
46
|
+
"upgradr": "^0.4.1",
|
|
44
47
|
"zod": "^4.3.6"
|
|
45
48
|
},
|
|
46
49
|
"devDependencies": {
|
package/skills/hypotenuse.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: hypotenuse
|
|
3
|
-
description: Operate a Hypotenuse server from the terminal with the `hypotenuse` CLI — sign in, pick a project, manage members, invites, tags, connect Linear, and read the audit log. Use when asked to administer Hypotenuse projects or check who changed what.
|
|
3
|
+
description: Operate a Hypotenuse server from the terminal with the `hypotenuse` CLI — sign in, pick a project, manage members, invites, tags, connect trigger integrations (Linear), register and manage runners, run this machine as a runner (config file, daemon, user service, doctor), edit routing rules and settings, link Linear users to members, read and stop agent sessions, and read the audit log. Use when asked to administer Hypotenuse projects, check what @hypotenuse did on an issue, or check who changed what.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# hypotenuse
|
|
@@ -28,14 +28,25 @@ server. It calls the same HTTP actions the dashboard does, as the person who sig
|
|
|
28
28
|
| `hypotenuse login [--no-browser] [--device <name>]` | Sign in through the dashboard. A person must approve in a browser; `--no-browser` prints a code to type at `/cli/activate` on any device. Never ask for a password. |
|
|
29
29
|
| `hypotenuse logout` | Revoke this CLI's sign-in on the server and forget it locally. |
|
|
30
30
|
| `hypotenuse whoami` | Who this CLI is signed in as, on which server. |
|
|
31
|
-
| `hypotenuse project list\|view\|create\|edit\|delete\|use` | The caller's projects. `delete` needs `--yes`. `use <id\|slug>` selects the project later commands act on. |
|
|
31
|
+
| `hypotenuse project list\|view\|overview\|create\|edit\|delete\|use` | The caller's projects. `delete` needs `--yes`. `use <id\|slug>` selects the project later commands act on. `overview [--window 24h\|7d]` summarizes the selected project: Linear's connection and last webhook, runners online and slots busy, sessions in the window by status and role with median acknowledgement and claim times, and the turns waiting now with their reason codes. |
|
|
32
32
|
| `hypotenuse member list\|add\|remove` | The selected project's members. `add --email`, `remove <userId>` (admin). |
|
|
33
33
|
| `hypotenuse invite list\|pending\|create\|accept\|reject` | Invitations. `create --email [--tag <id>]` (admin); `pending` lists invites addressed to you; `accept`/`reject <inviteId>`. |
|
|
34
34
|
| `hypotenuse tag list\|create\|edit\|delete\|assign\|unassign` | Permission tags. `assign <tagId> --user <userId>` (admin). The `admin` tag is reserved. |
|
|
35
35
|
| `hypotenuse audit list [--since 7d] [--until <time>] [--action tag:edit]` | Who changed what, newest first (admin). Times are ISO-8601, epoch ms, or `7d` / `12h` / `30m`. |
|
|
36
|
-
| `hypotenuse
|
|
36
|
+
| `hypotenuse integration list\|view\|connect\|disconnect` | The selected project's trigger integrations — today the only type is `linear`, its Linear workspace connection. `list` shows each type this server supports and whether the project is connected. `view <type>` shows the workspace, the `@hypotenuse` app user, scopes, and token health (never a token). `connect <type>` (admin) prints the consent URL — a **workspace admin** of that system (for `linear`, a Linear workspace admin) must approve it in a browser — and waits until the integration is active (`--no-browser`, `--timeout <seconds>`). `disconnect <type> --yes` (admin) revokes the tokens; the agent stops answering there at once. |
|
|
37
|
+
| `hypotenuse session list\|view\|cancel` | The selected project's agent sessions — each time `@hypotenuse` was delegated an issue or mentioned, in any trigger type (Linear today). `list [--status <status>] [--role manager\|worker] [--type linear] [--issue ENG-123] [--runner <id>]`, newest first; `view <id\|ENG-123>` (an issue identifier names its newest session) shows the session (issue, status, origin, role, runner, issuer, links), its turns (kind, status, runner, and for a waiting turn its reason code such as `offline` or `no_capacity`), and every activity in order, both directions, with each write's delivery status (`pending`, `sent`, `failed`, `superseded`); `--transcript` prints only the activities; `--follow [--interval <seconds>]` keeps printing new ones until interrupted (one JSON object per line under `--json`); `cancel <id>` stops its work as Stop in Linear does (work not started is cancelled; a running turn is told to stop and report). |
|
|
38
|
+
| `hypotenuse runner register\|list\|view\|edit\|revoke` | The selected project's runners — machines that run coding agents. `register [--name <name>] [--replace] [--force]` registers **this** machine as the signed-in person, saves the runner token to `credentials.json` (never printed), and sends a first heartbeat; `--replace` revokes the runner of that name first. `list [--status online\|offline\|draining\|revoked] [--all]`; `view <id\|name>` shows capabilities, subscriptions, and whether its socket is attached; `edit <id\|name> [--name] [--enable\|--disable]` renames or pauses it; `revoke <id\|name> --yes` revokes it for good (its owner or an admin). |
|
|
39
|
+
| `hypotenuse routing list\|add\|edit\|remove\|reorder\|preview\|settings` | The selected project's routing rules — the first enabled rule whose match holds decides whether a new session gets a **manager** or a **worker** (no match: worker). `list`; `add --name <name> --role manager\|worker [--label <l>] [--team <key>] [--linear-project <id>] [--prefix /manage] [--has-parent\|--no-parent] [--origin delegation\|mention] [--repository <repo>] [--disabled]` (labels and team keys are checked against the connected workspace); `edit <id>` with the same flags (any match flag replaces the whole match) plus `--enable\|--disable` and `--clear-repository`; `remove <id>`; `reorder <id...>` lists every rule id in the new order; `preview <ENG-123> [--prompt "/manage ..."] [--with-repository]` shows how the issue would route if delegated now — the matching rule, the role, every runner with whether it could take the work and its reason codes, and the repository (any member; `--with-repository` asks Linear to rank repositories, spending its API budget); `settings` shows the routing timers, `settings [--queue-timeout 30m] [--sticky-timeout 10m] [--offer-ttl 10s] [--stop-grace 30s] [--repository-confidence 0.7] [--max-review-rounds 3] [--reset <key>]` changes them. Changes are admin-only. |
|
|
40
|
+
| `hypotenuse identity list\|link\|unlink` | Links between people in the project's Linear workspace and project members; routing prefers the runners of whoever started a session. `list [--user <id>]` shows each link and how it was made (e-mail match, Linear sign-in, admin); `link --user <id> --linear-user <id> [--name] [--email]` links one (admin); `unlink <id>` removes your own link, or anyone's as an admin. |
|
|
41
|
+
| `hypotenuse config init\|validate\|schema\|path` | The daemon's TOML config (`-c <path>`, else `HYPOTENUSE_CONFIG`, else `~/.config/hypotenuse/config.toml`). `init [--repo <path>...] [--force]` writes a commented starter filled in from this machine; `validate [--online] [--offline]` checks shape, references, and this machine (git clones, prompt files, agent commands), and with `--online` the server, runner token, project, and team keys — exit 0 valid (warnings allowed), 1 errors, 2 unreadable; `--json` prints `{ valid, errors: [{ path, message, hint? }], warnings }`. `schema` prints the JSON Schema; `path` prints the config, state directory, and credentials file in use. |
|
|
42
|
+
| `hypotenuse daemon start\|stop\|restart\|status\|logs\|reload` | The runner daemon. `start` backgrounds it and waits until it is ready (`--foreground` stays attached, as a service manager runs it); `stop [--timeout 10m] [--cancel]` lets running turns finish (or stops them) and exits, `--force` signals it without its control socket; `status` exits 3 when it is not running; `logs [-f] [-n 200] [--session <id>]` (`--session` shows that session's agent log: the agent's stderr and ACP trace); `reload` re-reads the config and says what needs a restart. One daemon per machine. |
|
|
43
|
+
| `hypotenuse agents list\|kill\|login` | The coding agents this machine runs. `list [--all]` shows the agent sessions the daemon is running (session, issue, role, agent, state, how long, pid, worktree); `kill <session-id\|ENG-123> [--reason]` stops that session's running turn, which says so in Linear (with the reason); both exit 3 when the daemon is not running. `login <agent> [--method <id>]` logs a coding agent in on this machine — a terminal login runs attached, an agent-run one over ACP — then confirms it can open a session (exit 1 if not). |
|
|
44
|
+
| `hypotenuse worktrees list\|cleanup` | The git worktrees (and scratch directories) the daemon made for its sessions, one per session under `sessions.worktree_root`. `list` shows each one's repository, branch, issue, state, last use, size, and whether it is safe to remove now (not in use, no uncommitted changes, no unpushed commits, no `.hypotenuse-keep` file). `cleanup [--dry-run] [--all] [--older-than 7d] [--force]` removes what the cleanup policy allows and prints every kept one with its reason; `--all` ignores the policy, `--force` overrides every rule but "in use". Both work without a running daemon, from `state.db` and the disk. |
|
|
45
|
+
| `hypotenuse service install\|uninstall\|status` | Run the daemon as a user service (launchd on macOS, systemd user unit on Linux) with the `PATH` of the installing shell; `install --print` shows the unit without installing it. Windows: prints the foreground command and the Task Scheduler recipe. |
|
|
46
|
+
| `hypotenuse doctor [--agent <id>] [--offline]` | A checklist of this machine's runner setup — version, tools, config, credentials, server and token, daemon and service, agents, repositories, disk — exit 1 when a check fails. `--agent <id>` starts that agent, runs the ACP `initialize` handshake, and opens a session — a failure names `hypotenuse agents login <id>`. |
|
|
47
|
+
| `hypotenuse mcp --session <id> --nonce <n>` | Hidden: the stdio MCP server the daemon hands a coding agent for one turn — the Linear tools scoped to that session. Not for running by hand. |
|
|
37
48
|
| `hypotenuse check-update` | Whether a newer release exists, with its changelog. |
|
|
38
|
-
| `hypotenuse upgrade` | Upgrade in place, by however it was installed (npm, bun, or binary). |
|
|
49
|
+
| `hypotenuse upgrade [--no-restart]` | Upgrade in place, by however it was installed (npm, bun, or binary), then drain and restart a running daemon on the new version. |
|
|
39
50
|
|
|
40
51
|
## Examples
|
|
41
52
|
|
|
@@ -45,5 +56,10 @@ hypotenuse project use my-team
|
|
|
45
56
|
hypotenuse --json member list | jq '.memberships[] | {email: .user.email, tags: [.tags[].name]}'
|
|
46
57
|
hypotenuse invite create --email luigi@example.com --tag 3
|
|
47
58
|
hypotenuse --json audit list --since 1d --action membership:delete
|
|
48
|
-
hypotenuse --json linear
|
|
59
|
+
hypotenuse --json integration view linear | jq '.integration | {type, status, workspaceName, externalAppUserId}'
|
|
60
|
+
hypotenuse --json session list --issue ENG-123 | jq '.agentSessions[] | {id, status}'
|
|
61
|
+
hypotenuse --json runner list | jq '.runners[] | {name, status, owner: .owner.name}'
|
|
62
|
+
hypotenuse --json session view 42 | jq '.activities[] | {seq, direction, contentType, deliveryStatus}'
|
|
63
|
+
hypotenuse --json config validate | jq -r '.errors[] | "\(.path): \(.message)"'
|
|
64
|
+
hypotenuse daemon start && hypotenuse --json daemon status | jq '{connected: .server.connected, slots}'
|
|
49
65
|
```
|