@tokenfactory/acc-runner 0.41.7 → 0.42.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 (50) hide show
  1. package/README.md +87 -4
  2. package/dist/acc.d.ts +3 -0
  3. package/dist/acc.d.ts.map +1 -0
  4. package/dist/acc.js +21 -0
  5. package/dist/acc.js.map +1 -0
  6. package/dist/cli-name.d.ts +29 -0
  7. package/dist/cli-name.d.ts.map +1 -0
  8. package/dist/cli-name.js +17 -0
  9. package/dist/cli-name.js.map +1 -0
  10. package/dist/cli.d.ts +20 -2
  11. package/dist/cli.d.ts.map +1 -1
  12. package/dist/cli.js +45 -289
  13. package/dist/cli.js.map +1 -1
  14. package/dist/keychain.d.ts +17 -0
  15. package/dist/keychain.d.ts.map +1 -1
  16. package/dist/keychain.js +36 -0
  17. package/dist/keychain.js.map +1 -1
  18. package/dist/login.d.ts +45 -1
  19. package/dist/login.d.ts.map +1 -1
  20. package/dist/login.js +91 -4
  21. package/dist/login.js.map +1 -1
  22. package/dist/program.d.ts +16 -0
  23. package/dist/program.d.ts.map +1 -0
  24. package/dist/program.js +342 -0
  25. package/dist/program.js.map +1 -0
  26. package/dist/user-auth/device-login.d.ts +47 -0
  27. package/dist/user-auth/device-login.d.ts.map +1 -0
  28. package/dist/user-auth/device-login.js +189 -0
  29. package/dist/user-auth/device-login.js.map +1 -0
  30. package/dist/user-auth/liveness.d.ts +27 -0
  31. package/dist/user-auth/liveness.d.ts.map +1 -0
  32. package/dist/user-auth/liveness.js +128 -0
  33. package/dist/user-auth/liveness.js.map +1 -0
  34. package/dist/user-auth/session.d.ts +82 -0
  35. package/dist/user-auth/session.d.ts.map +1 -0
  36. package/dist/user-auth/session.js +172 -0
  37. package/dist/user-auth/session.js.map +1 -0
  38. package/dist/user-cli/chat.d.ts +44 -0
  39. package/dist/user-cli/chat.d.ts.map +1 -0
  40. package/dist/user-cli/chat.js +199 -0
  41. package/dist/user-cli/chat.js.map +1 -0
  42. package/dist/user-cli/client.d.ts +20 -0
  43. package/dist/user-cli/client.d.ts.map +1 -0
  44. package/dist/user-cli/client.js +60 -0
  45. package/dist/user-cli/client.js.map +1 -0
  46. package/dist/user-cli/tasks.d.ts +37 -0
  47. package/dist/user-cli/tasks.d.ts.map +1 -0
  48. package/dist/user-cli/tasks.js +131 -0
  49. package/dist/user-cli/tasks.js.map +1 -0
  50. package/package.json +3 -2
@@ -0,0 +1,131 @@
1
+ /**
2
+ * `acc task list` / `acc task show` — the board, from the terminal.
3
+ *
4
+ * Read-only, and deliberately so. Every mutating path in ACC (transition, spawn,
5
+ * approve) goes through an RPC with its own approval and audit story; wiring
6
+ * those into the CLI is a separate decision from "can I see the board without
7
+ * opening a browser". So this reads `acc.tasks` under the operator's own token
8
+ * and prints it. RLS is the only filter that matters: a task outside the
9
+ * operator's org — or outside their repo grants — simply is not in the result.
10
+ */
11
+ import chalk from "chalk";
12
+ import { userClient } from "./client.js";
13
+ /** Columns worth a terminal row. Mirrors the read-only MCP task query. */
14
+ const LIST_COLUMNS = "id, title, status, priority, risk, repo, branch, pr_number, agent_id, runner_id, updated_at";
15
+ /** 1..100, defaulting to 25 — the same clamp the MCP read tools use. */
16
+ export function clampLimit(raw, fallback = 25) {
17
+ const n = typeof raw === "string" ? Number.parseInt(raw, 10) : raw;
18
+ if (typeof n !== "number" || !Number.isFinite(n))
19
+ return fallback;
20
+ return Math.min(100, Math.max(1, Math.trunc(n)));
21
+ }
22
+ /** Colour a status the way the board does: terminal states cool, active states warm. */
23
+ export function statusColour(status) {
24
+ switch (status) {
25
+ case "done":
26
+ case "merged":
27
+ return chalk.green;
28
+ case "failed":
29
+ case "blocked":
30
+ return chalk.red;
31
+ case "in_progress":
32
+ case "in_review":
33
+ return chalk.yellow;
34
+ default:
35
+ return chalk.gray;
36
+ }
37
+ }
38
+ /**
39
+ * One task per line, padded to the widest id/status in THIS result set rather
40
+ * than to a fixed width — a board of short ids should not be indented for the
41
+ * sake of a long one that is not on screen.
42
+ */
43
+ export function formatTaskRows(rows) {
44
+ const idWidth = Math.max(2, ...rows.map((r) => r.id.length));
45
+ const statusWidth = Math.max(6, ...rows.map((r) => (r.status ?? "").length));
46
+ return rows.map((r) => {
47
+ const status = (r.status ?? "").padEnd(statusWidth);
48
+ const pr = r.pr_number ? chalk.cyan(`#${r.pr_number}`) : "";
49
+ const title = (r.title ?? "(untitled)").slice(0, 72);
50
+ return `${chalk.bold(r.id.padEnd(idWidth))} ${statusColour(r.status)(status)} ${title}${pr ? ` ${pr}` : ""}`;
51
+ });
52
+ }
53
+ export async function taskListCommand(opts = {}, deps = {}) {
54
+ const say = deps.log ?? ((line) => console.log(line));
55
+ const sb = await userClient(deps);
56
+ let query = sb
57
+ .from("tasks")
58
+ .select(LIST_COLUMNS)
59
+ .order("updated_at", { ascending: false })
60
+ .limit(clampLimit(opts.limit));
61
+ if (opts.status)
62
+ query = query.eq("status", opts.status);
63
+ if (opts.repo)
64
+ query = query.eq("repo", opts.repo);
65
+ const { data, error } = await query;
66
+ if (error)
67
+ throw new Error(`Could not read tasks: ${error.message}`);
68
+ const rows = (data ?? []);
69
+ if (opts.json) {
70
+ say(JSON.stringify(rows, null, 2));
71
+ return;
72
+ }
73
+ if (rows.length === 0) {
74
+ say(chalk.gray("No tasks match that filter (or none are visible to you)."));
75
+ return;
76
+ }
77
+ for (const line of formatTaskRows(rows))
78
+ say(line);
79
+ say("");
80
+ say(chalk.gray(`${rows.length} task(s). \`acc task show <id>\` for one in full.`));
81
+ }
82
+ /** Field order for `show` — identity first, then routing, then timestamps. */
83
+ const SHOW_FIELDS = [
84
+ "id",
85
+ "title",
86
+ "status",
87
+ "priority",
88
+ "risk",
89
+ "repo",
90
+ "branch",
91
+ "integration_branch",
92
+ "pr_number",
93
+ "agent_id",
94
+ "runner_id",
95
+ "parent_task_id",
96
+ "created_at",
97
+ "updated_at",
98
+ ];
99
+ export async function taskShowCommand(taskId, opts = {}, deps = {}) {
100
+ const say = deps.log ?? ((line) => console.log(line));
101
+ const sb = await userClient(deps);
102
+ const { data, error } = await sb
103
+ .from("tasks")
104
+ .select(`${SHOW_FIELDS.join(", ")}, description`)
105
+ .eq("id", taskId)
106
+ .maybeSingle();
107
+ if (error)
108
+ throw new Error(`Could not read task ${taskId}: ${error.message}`);
109
+ if (!data) {
110
+ // Indistinguishable from "exists but you cannot see it", and that is the
111
+ // point — the CLI must not become an existence oracle for another org's ids.
112
+ throw new Error(`No task ${taskId} is visible to you.`);
113
+ }
114
+ const row = data;
115
+ if (opts.json) {
116
+ say(JSON.stringify(row, null, 2));
117
+ return;
118
+ }
119
+ const width = Math.max(...SHOW_FIELDS.map((f) => f.length));
120
+ for (const field of SHOW_FIELDS) {
121
+ const value = row[field];
122
+ if (value === null || value === undefined || value === "")
123
+ continue;
124
+ say(`${chalk.gray(field.padEnd(width))} ${String(value)}`);
125
+ }
126
+ if (typeof row.description === "string" && row.description.trim()) {
127
+ say("");
128
+ say(String(row.description).trim());
129
+ }
130
+ }
131
+ //# sourceMappingURL=tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/user-cli/tasks.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tokenfactory/acc-runner",
3
- "version": "0.41.7",
4
- "description": "Agent Control Center local runner. Spawns Claude Code sessions assigned via ACC.",
3
+ "version": "0.42.0",
4
+ "description": "Agent Control Center CLI (`acc`). Sign in, read the task board, ask ACC, and run agents on this machine. `acc-runner` is retained as a deprecated alias.",
5
5
  "license": "UNLICENSED",
6
6
  "private": false,
7
7
  "type": "module",
@@ -11,6 +11,7 @@
11
11
  "directory": "packages/acc-runner"
12
12
  },
13
13
  "bin": {
14
+ "acc": "dist/acc.js",
14
15
  "acc-runner": "dist/cli.js"
15
16
  },
16
17
  "files": [