@tokenfactory/acc-runner 0.41.6 → 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 (58) 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/config.d.ts +60 -0
  15. package/dist/config.d.ts.map +1 -1
  16. package/dist/config.js +56 -0
  17. package/dist/config.js.map +1 -1
  18. package/dist/keychain.d.ts +17 -0
  19. package/dist/keychain.d.ts.map +1 -1
  20. package/dist/keychain.js +36 -0
  21. package/dist/keychain.js.map +1 -1
  22. package/dist/login.d.ts +45 -1
  23. package/dist/login.d.ts.map +1 -1
  24. package/dist/login.js +91 -4
  25. package/dist/login.js.map +1 -1
  26. package/dist/program.d.ts +16 -0
  27. package/dist/program.d.ts.map +1 -0
  28. package/dist/program.js +342 -0
  29. package/dist/program.js.map +1 -0
  30. package/dist/task-runner.d.ts +1 -1
  31. package/dist/task-runner.d.ts.map +1 -1
  32. package/dist/task-runner.js +40 -3
  33. package/dist/task-runner.js.map +1 -1
  34. package/dist/user-auth/device-login.d.ts +47 -0
  35. package/dist/user-auth/device-login.d.ts.map +1 -0
  36. package/dist/user-auth/device-login.js +189 -0
  37. package/dist/user-auth/device-login.js.map +1 -0
  38. package/dist/user-auth/liveness.d.ts +27 -0
  39. package/dist/user-auth/liveness.d.ts.map +1 -0
  40. package/dist/user-auth/liveness.js +128 -0
  41. package/dist/user-auth/liveness.js.map +1 -0
  42. package/dist/user-auth/session.d.ts +82 -0
  43. package/dist/user-auth/session.d.ts.map +1 -0
  44. package/dist/user-auth/session.js +172 -0
  45. package/dist/user-auth/session.js.map +1 -0
  46. package/dist/user-cli/chat.d.ts +44 -0
  47. package/dist/user-cli/chat.d.ts.map +1 -0
  48. package/dist/user-cli/chat.js +199 -0
  49. package/dist/user-cli/chat.js.map +1 -0
  50. package/dist/user-cli/client.d.ts +20 -0
  51. package/dist/user-cli/client.d.ts.map +1 -0
  52. package/dist/user-cli/client.js +60 -0
  53. package/dist/user-cli/client.js.map +1 -0
  54. package/dist/user-cli/tasks.d.ts +37 -0
  55. package/dist/user-cli/tasks.d.ts.map +1 -0
  56. package/dist/user-cli/tasks.js +131 -0
  57. package/dist/user-cli/tasks.js.map +1 -0
  58. package/package.json +3 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/user-cli/chat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAoB,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAYzC;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,IAAI,IAAI,GAAG,MAAM,CAAC;IAClB,SAAS,CAAC;QACR,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,QAAQ,KAAK,CAAC,CAAC;YAAE,MAAM;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QACtC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QAChC,IAAI,KAAK,GAAG,SAAS,CAAC;QACtB,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;gBAAE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;iBACvD,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;gBAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACrC,IAAI,IAAI,GAAY,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,4DAA4D;QAC9D,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAC1B,CAAC;AASD,SAAS,QAAQ,CAAC,IAAa;IAC7B,OAAO,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAE,IAAgC,CAAC,CAAC,CAAC,EAAE,CAAC;AACnF,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,OAAe,EACf,IAAiB,EACjB,OAA0D,EAAE;IAE5D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7E,MAAM,GAAG,GAAG,MAAM,SAAS,CACzB,kBAAkB,EAClB,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,EACzD,IAAI,CACL,CAAC;IACF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,yEAAyE;QACzE,yEAAyE;QACzE,6CAA6C;QAC7C,IAAI,MAAM,GAAG,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YACxC,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ;gBAAE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,UAAU,GAAG,CAAC,MAAM,GAAG,CAAC;QACpF,CAAC;QAAC,MAAM,CAAC;YACP,iCAAiC;QACnC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,wBAAwB,MAAM,EAAE,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAEnE,IAAI,cAAc,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC;IAC/C,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,aAAa,GAAG,KAAK,CAAC;IAE1B,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,MAAM,MAAM,GAAI,GAAG,CAAC,IAAmC,CAAC,SAAS,EAAE,CAAC;IACpE,SAAS,CAAC;QACR,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QAC5C,IAAI,IAAI;YAAE,MAAM;QAChB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;QACtB,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC/B,QAAQ,KAAK,EAAE,CAAC;gBACd,KAAK,cAAc;oBACjB,IAAI,OAAO,OAAO,CAAC,EAAE,KAAK,QAAQ;wBAAE,cAAc,GAAG,OAAO,CAAC,EAAE,CAAC;oBAChE,MAAM;gBACR,KAAK,OAAO,CAAC,CAAC,CAAC;oBACb,MAAM,KAAK,GAAG,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;oBACnE,IAAI,IAAI,KAAK,CAAC;oBACd,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;wBACf,KAAK,CAAC,KAAK,CAAC,CAAC;wBACb,aAAa,GAAG,aAAa,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;oBACpD,CAAC;oBACD,MAAM;gBACR,CAAC;gBACD,KAAK,WAAW;oBACd,IAAI,CAAC,IAAI,CAAC,IAAI;wBAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC5E,MAAM;gBACR,KAAK,QAAQ,CAAC;gBACd,KAAK,MAAM;oBACT,MAAM,GAAG,IAAI,CAAC;oBACd,MAAM;gBACR,KAAK,OAAO;oBACV,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,oBAAoB,CAAC,CAAC,CAAC;gBACnE,KAAK,MAAM;oBACT,IAAI,OAAO,OAAO,CAAC,eAAe,KAAK,QAAQ;wBAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;oBAC1F,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI;wBAAE,MAAM,GAAG,IAAI,CAAC;oBAC3C,MAAM;gBACR;oBACE,MAAM;YACV,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,aAAa;QAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAE/B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,eAAe,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAClF,CAAC;SAAM,IAAI,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC3B,GAAG,CACD,KAAK,CAAC,MAAM,CACV,oGAAoG,CACrG,CACF,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC1C,CAAC;AAED,mEAAmE;AACnE,KAAK,UAAU,SAAS;IACtB,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK;QAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACzE,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;AACvD,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,KAAe,EACf,OAAoB,EAAE,EACtB,OAA0D,EAAE;IAE5D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAEtC,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YACxC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,OAAO,EAAE,wBAAwB,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;QAC3F,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;QACzF,MAAM,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACpC,OAAO;IACT,CAAC;IAED,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC,CAAC;IAC1D,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,+EAA+E;IAC/E,4EAA4E;IAC5E,+CAA+C;IAC/C,MAAM,MAAM,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACrF,IAAI,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;IACrC,IAAI,CAAC;QACH,SAAS,CAAC;YACR,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;YAC7E,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI;gBAAE,MAAM;YACjB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,YAAY,EAAE,EAAE,IAAI,CAAC,CAAC;YACvE,YAAY,GAAG,MAAM,CAAC,cAAc,IAAI,YAAY,CAAC;QACvD,CAAC;IACH,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC"}
@@ -0,0 +1,20 @@
1
+ /** Injectable so the command tests never touch a network or a keychain. */
2
+ export interface UserApiDeps {
3
+ fetch?: typeof fetch;
4
+ now?: () => number;
5
+ log?: (line: string) => void;
6
+ }
7
+ /**
8
+ * A PostgREST client on the `acc` schema, authenticated as the signed-in human.
9
+ * Realtime is not configured: these commands are request/response, and pulling
10
+ * in the ws transport would make every `acc task list` pay for a socket it never
11
+ * opens.
12
+ */
13
+ export declare function userClient(deps?: UserApiDeps): Promise<import("@supabase/supabase-js").SupabaseClient<any, "public", "acc", any, any>>;
14
+ /** POST to an ACC API route as the signed-in human. Relative path, e.g. `/api/chat/stream`. */
15
+ export declare function userFetch(path: string, init?: {
16
+ method?: string;
17
+ body?: unknown;
18
+ headers?: Record<string, string>;
19
+ }, deps?: UserApiDeps): Promise<Response>;
20
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/user-cli/client.ts"],"names":[],"mappings":"AA8BA,2EAA2E;AAC3E,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,IAAI,GAAE,WAAgB,2FAWtD;AAED,+FAA+F;AAC/F,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAO,EAChF,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,QAAQ,CAAC,CAenB"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * The two seams every person-lane command talks to the control plane through.
3
+ *
4
+ * Both are built from the SAME credential the generalized device flow stored —
5
+ * the operator's own Supabase session — so a command run here sees exactly what
6
+ * that human sees in the browser, no more. There is no service-role path and no
7
+ * runner impersonation JWT anywhere in this lane:
8
+ *
9
+ * * `userClient()` is a PostgREST client scoped to the `acc` schema and
10
+ * carrying the user's access token, so RLS (acc.is_member, the repo-scoping
11
+ * predicates) does the authorization. A command cannot read a task the
12
+ * operator could not open in the UI.
13
+ * * `userFetch()` is for the Vercel endpoints, which authenticate the same
14
+ * bearer through requireUser.
15
+ *
16
+ * Both route through getUserAccessToken(), which refreshes-and-repersists when
17
+ * the access token is close to expiry and raises SignedOutError when the session
18
+ * was revoked — so a long-running `chat` session cannot half-expire mid-turn,
19
+ * and a revoked one fails with an instruction rather than a 401 body.
20
+ */
21
+ import { createClient } from "@supabase/supabase-js";
22
+ import { loadConfig } from "../config.js";
23
+ import { signInCommand } from "../cli-name.js";
24
+ import { cliUserAgent, getUserAccessToken, loadUserSession, SignedOutError, } from "../user-auth/session.js";
25
+ /**
26
+ * A PostgREST client on the `acc` schema, authenticated as the signed-in human.
27
+ * Realtime is not configured: these commands are request/response, and pulling
28
+ * in the ws transport would make every `acc task list` pay for a socket it never
29
+ * opens.
30
+ */
31
+ export async function userClient(deps = {}) {
32
+ const session = await loadUserSession();
33
+ if (!session) {
34
+ throw new SignedOutError(`Not signed in. Run \`${signInCommand()}\`.`);
35
+ }
36
+ const token = await getUserAccessToken(deps);
37
+ return createClient(session.supabase_url, session.anon_key, {
38
+ db: { schema: "acc" },
39
+ auth: { persistSession: false, autoRefreshToken: false, detectSessionInUrl: false },
40
+ global: { headers: { Authorization: `Bearer ${token}` } },
41
+ });
42
+ }
43
+ /** POST to an ACC API route as the signed-in human. Relative path, e.g. `/api/chat/stream`. */
44
+ export async function userFetch(path, init = {}, deps = {}) {
45
+ const token = await getUserAccessToken(deps);
46
+ const doFetch = deps.fetch ?? fetch;
47
+ const base = loadConfig().publicUrl.replace(/\/+$/, "");
48
+ return doFetch(`${base}${path}`, {
49
+ method: init.method ?? "POST",
50
+ headers: {
51
+ "Content-Type": "application/json",
52
+ Accept: "text/event-stream",
53
+ Authorization: `Bearer ${token}`,
54
+ "User-Agent": cliUserAgent(),
55
+ ...(init.headers ?? {}),
56
+ },
57
+ body: init.body === undefined ? undefined : JSON.stringify(init.body),
58
+ });
59
+ }
60
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/user-cli/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,cAAc,GACf,MAAM,yBAAyB,CAAC;AASjC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAoB,EAAE;IACrD,MAAM,OAAO,GAAG,MAAM,eAAe,EAAE,CAAC;IACxC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,cAAc,CAAC,wBAAwB,aAAa,EAAE,KAAK,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC7C,OAAO,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,QAAQ,EAAE;QAC1D,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;QACrB,IAAI,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE;QACnF,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,EAAE;KAC1D,CAAC,CAAC;AACL,CAAC;AAED,+FAA+F;AAC/F,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,IAAY,EACZ,OAA8E,EAAE,EAChF,OAAoB,EAAE;IAEtB,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC;IACpC,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACxD,OAAO,OAAO,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,EAAE;QAC/B,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,MAAM;QAC7B,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,MAAM,EAAE,mBAAmB;YAC3B,aAAa,EAAE,UAAU,KAAK,EAAE;YAChC,YAAY,EAAE,YAAY,EAAE;YAC5B,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;SACxB;QACD,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;KACtE,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { type UserApiDeps } from "./client.js";
2
+ export interface TaskListOptions {
3
+ status?: string;
4
+ repo?: string;
5
+ limit?: string | number;
6
+ json?: boolean;
7
+ }
8
+ interface TaskRow {
9
+ id: string;
10
+ title: string | null;
11
+ status: string | null;
12
+ priority: string | null;
13
+ risk: string | null;
14
+ repo: string | null;
15
+ branch: string | null;
16
+ pr_number: number | null;
17
+ agent_id: string | null;
18
+ runner_id: string | null;
19
+ updated_at: string | null;
20
+ [key: string]: unknown;
21
+ }
22
+ /** 1..100, defaulting to 25 — the same clamp the MCP read tools use. */
23
+ export declare function clampLimit(raw: string | number | undefined, fallback?: number): number;
24
+ /** Colour a status the way the board does: terminal states cool, active states warm. */
25
+ export declare function statusColour(status: string | null): (s: string) => string;
26
+ /**
27
+ * One task per line, padded to the widest id/status in THIS result set rather
28
+ * than to a fixed width — a board of short ids should not be indented for the
29
+ * sake of a long one that is not on screen.
30
+ */
31
+ export declare function formatTaskRows(rows: TaskRow[]): string[];
32
+ export declare function taskListCommand(opts?: TaskListOptions, deps?: UserApiDeps): Promise<void>;
33
+ export declare function taskShowCommand(taskId: string, opts?: {
34
+ json?: boolean;
35
+ }, deps?: UserApiDeps): Promise<void>;
36
+ export {};
37
+ //# sourceMappingURL=tasks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/user-cli/tasks.ts"],"names":[],"mappings":"AAWA,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAM3D,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,UAAU,OAAO;IACf,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,wEAAwE;AACxE,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,EAAE,QAAQ,SAAK,GAAG,MAAM,CAIlF;AAED,wFAAwF;AACxF,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAczE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,CASxD;AAED,wBAAsB,eAAe,CACnC,IAAI,GAAE,eAAoB,EAC1B,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,IAAI,CAAC,CA0Bf;AAoBD,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,EAC7B,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,IAAI,CAAC,CA8Bf"}
@@ -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.6",
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": [