@ucsandman/legcli 0.7.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 (184) hide show
  1. package/CHANGELOG.md +560 -0
  2. package/LICENSE +58 -0
  3. package/NOTICE +4 -0
  4. package/README.md +558 -0
  5. package/bin/fake-agent.mjs +143 -0
  6. package/bin/leg.mjs +449 -0
  7. package/docs/DECISIONS.md +119 -0
  8. package/docs/DEMO.md +214 -0
  9. package/docs/DEVIATIONS.md +182 -0
  10. package/docs/ERRORS.md +326 -0
  11. package/docs/README.md +40 -0
  12. package/docs/REUSE.md +289 -0
  13. package/docs/ROADMAP-v2.md +55 -0
  14. package/docs/VOCABULARY.md +243 -0
  15. package/docs/adapters.md +300 -0
  16. package/docs/board-guide.md +579 -0
  17. package/docs/cli-contracts.md +401 -0
  18. package/docs/concepts.md +426 -0
  19. package/docs/configuration.md +220 -0
  20. package/docs/faq.md +206 -0
  21. package/docs/getting-started.md +251 -0
  22. package/docs/real-run.md +80 -0
  23. package/docs/review-2026-09-14.md +72 -0
  24. package/docs/screenshots/board-400px.png +0 -0
  25. package/docs/screenshots/board-details-open.png +0 -0
  26. package/docs/screenshots/board-done.png +0 -0
  27. package/docs/screenshots/board-drawer.png +0 -0
  28. package/docs/screenshots/board-empty.png +0 -0
  29. package/docs/screenshots/board-handoff.png +0 -0
  30. package/docs/screenshots/board-running.png +0 -0
  31. package/docs/screenshots/demo-1-claude-running.png +0 -0
  32. package/docs/screenshots/demo-2-limit-hit.png +0 -0
  33. package/docs/screenshots/demo-3-handoff-bundle.png +0 -0
  34. package/docs/screenshots/demo-4-codex-running.png +0 -0
  35. package/docs/screenshots/demo-5-done.png +0 -0
  36. package/docs/screenshots/floor-final-1280.png +0 -0
  37. package/docs/screenshots/floor-final-400.png +0 -0
  38. package/docs/screenshots/floor-landing.png +0 -0
  39. package/docs/screenshots/floor.png +0 -0
  40. package/docs/screenshots/share-guest-1280.png +0 -0
  41. package/docs/screenshots/share-owner-1280.png +0 -0
  42. package/docs/screenshots/terminals-1280.png +0 -0
  43. package/docs/screenshots/thumb-done.jpg +0 -0
  44. package/docs/screenshots/thumb-handoff-details.jpg +0 -0
  45. package/docs/screenshots/thumb-limit-hit.jpg +0 -0
  46. package/docs/screenshots/youtube-thumbnail.jpg +0 -0
  47. package/fixtures/limits/agy/agy-resource-exhausted.json +11 -0
  48. package/fixtures/limits/claude/claude-budget-limit.json +11 -0
  49. package/fixtures/limits/claude/claude-max-turns.json +11 -0
  50. package/fixtures/limits/claude/claude-model-limit.json +11 -0
  51. package/fixtures/limits/claude/claude-session-limit.json +11 -0
  52. package/fixtures/limits/claude/claude-weekly-limit.json +11 -0
  53. package/fixtures/limits/codex/codex-quota-exceeded.json +11 -0
  54. package/fixtures/limits/codex/codex-rate-limit-exceeded.json +11 -0
  55. package/fixtures/limits/codex/codex-skills-notice.json +11 -0
  56. package/fixtures/limits/codex/codex-usage-limit-reached.json +11 -0
  57. package/fixtures/limits/codex/codex-usage-limit.json +11 -0
  58. package/fixtures/limits/generic/generic-429.json +11 -0
  59. package/fixtures/limits/generic/generic-overloaded.json +11 -0
  60. package/fixtures/limits/generic/generic-quota.json +11 -0
  61. package/fixtures/limits/generic/generic-rate-limit.json +11 -0
  62. package/fixtures/limits/generic/generic-resource-exhausted.json +11 -0
  63. package/fixtures/limits/generic/generic-usage-limit.json +11 -0
  64. package/fixtures/limits/grok/grok-not-logged-in.json +11 -0
  65. package/fixtures/limits/negative/auth-source-set.json +11 -0
  66. package/fixtures/limits/negative/compile-error.json +11 -0
  67. package/fixtures/limits/negative/empty-stdout-exit-0.json +11 -0
  68. package/fixtures/live/agy/attempt-1-scratch-workspace.out.log +1 -0
  69. package/fixtures/live/agy/cmd.txt +1 -0
  70. package/fixtures/live/agy/err.log +0 -0
  71. package/fixtures/live/agy/out.log +1 -0
  72. package/fixtures/live/agy/parsed.json +5 -0
  73. package/fixtures/live/agy/run.json +18 -0
  74. package/fixtures/live/agy/supervisor.log +2 -0
  75. package/fixtures/live/claude/cmd.txt +1 -0
  76. package/fixtures/live/claude/err.log +0 -0
  77. package/fixtures/live/claude/limit-rate_limit.json +21 -0
  78. package/fixtures/live/claude/out.log +1 -0
  79. package/fixtures/live/claude/parsed.json +11 -0
  80. package/fixtures/live/claude/run.json +18 -0
  81. package/fixtures/live/claude/supervisor.log +2 -0
  82. package/fixtures/live/codex/cmd.txt +1 -0
  83. package/fixtures/live/codex/err.log +1 -0
  84. package/fixtures/live/codex/last.md +2 -0
  85. package/fixtures/live/codex/limit-usage_limit_exceeded.json +25 -0
  86. package/fixtures/live/codex/out.log +8 -0
  87. package/fixtures/live/codex/parsed.json +15 -0
  88. package/fixtures/live/codex/run.json +18 -0
  89. package/fixtures/live/codex/supervisor.log +2 -0
  90. package/fixtures/live/grok/cmd.txt +1 -0
  91. package/fixtures/live/grok/err.log +32 -0
  92. package/fixtures/live/grok/out.log +7 -0
  93. package/fixtures/live/grok/parsed.json +5 -0
  94. package/fixtures/live/grok/run.json +18 -0
  95. package/fixtures/live/grok/supervisor.log +2 -0
  96. package/fixtures/verified.json +34 -0
  97. package/package.json +68 -0
  98. package/scripts/board-shots.mjs +69 -0
  99. package/scripts/build-docs-site.mjs +308 -0
  100. package/scripts/check-claims.mjs +150 -0
  101. package/scripts/clean-clone-check.sh +42 -0
  102. package/scripts/license-sign.mjs +23 -0
  103. package/scripts/limits-table.mjs +38 -0
  104. package/scripts/live-limits.mjs +36 -0
  105. package/scripts/privacy-check.mjs +63 -0
  106. package/scripts/probe.mjs +92 -0
  107. package/scripts/seed-fake-cards.mjs +34 -0
  108. package/scripts/seed-floor-board.mjs +69 -0
  109. package/scripts/seed-wes-board.mjs +91 -0
  110. package/scripts/stripe-setup.mjs +99 -0
  111. package/scripts/vercel-env.mjs +40 -0
  112. package/src/accounts.mjs +119 -0
  113. package/src/adapters/agy.mjs +56 -0
  114. package/src/adapters/claude.mjs +54 -0
  115. package/src/adapters/codex.mjs +73 -0
  116. package/src/adapters/common.mjs +32 -0
  117. package/src/adapters/fake.mjs +48 -0
  118. package/src/adapters/grok.mjs +51 -0
  119. package/src/adapters/index.mjs +27 -0
  120. package/src/adapters/resolve.mjs +40 -0
  121. package/src/attach.mjs +592 -0
  122. package/src/auth.mjs +85 -0
  123. package/src/board/board.css +543 -0
  124. package/src/board/board.js +1307 -0
  125. package/src/board/favicon.svg +1 -0
  126. package/src/board/floor.html +127 -0
  127. package/src/board/floor.js +670 -0
  128. package/src/board/fonts/OFL-atkinson-hyperlegible-next.txt +93 -0
  129. package/src/board/fonts/OFL-azeret-mono.txt +94 -0
  130. package/src/board/fonts/atkinson-board.woff2 +0 -0
  131. package/src/board/fonts/azeret-board.woff2 +0 -0
  132. package/src/board/index.html +251 -0
  133. package/src/board/sessions.js +1451 -0
  134. package/src/bundle.mjs +103 -0
  135. package/src/cards.mjs +114 -0
  136. package/src/chain.mjs +264 -0
  137. package/src/commands.mjs +79 -0
  138. package/src/contract.mjs +73 -0
  139. package/src/env.mjs +19 -0
  140. package/src/fsx.mjs +72 -0
  141. package/src/git-snapshot.mjs +152 -0
  142. package/src/handoff.mjs +171 -0
  143. package/src/hook.mjs +49 -0
  144. package/src/land.mjs +106 -0
  145. package/src/launcher.mjs +272 -0
  146. package/src/leases.mjs +86 -0
  147. package/src/ledger.mjs +369 -0
  148. package/src/license.mjs +168 -0
  149. package/src/limits.mjs +97 -0
  150. package/src/live-capture.mjs +69 -0
  151. package/src/mergequeue.mjs +225 -0
  152. package/src/orchestrator.mjs +365 -0
  153. package/src/pipeline.mjs +100 -0
  154. package/src/preferences.mjs +47 -0
  155. package/src/presets.mjs +23 -0
  156. package/src/ratelimit.mjs +49 -0
  157. package/src/redact.mjs +47 -0
  158. package/src/resume.mjs +354 -0
  159. package/src/runner.mjs +438 -0
  160. package/src/scheduler.mjs +118 -0
  161. package/src/server.mjs +845 -0
  162. package/src/session-detail.mjs +129 -0
  163. package/src/sessions.mjs +202 -0
  164. package/src/share.mjs +163 -0
  165. package/src/stations/agent.mjs +42 -0
  166. package/src/stations/build.mjs +9 -0
  167. package/src/stations/human.mjs +5 -0
  168. package/src/stations/land.mjs +6 -0
  169. package/src/stations/plan.mjs +8 -0
  170. package/src/stations/pr.mjs +31 -0
  171. package/src/stations/review.mjs +8 -0
  172. package/src/stations/test.mjs +27 -0
  173. package/src/store.mjs +90 -0
  174. package/src/sync/dashclaw.mjs +70 -0
  175. package/src/sync/index.mjs +54 -0
  176. package/src/sync/workboard.mjs +54 -0
  177. package/src/taps/agy.mjs +64 -0
  178. package/src/taps/claude-usage.mjs +67 -0
  179. package/src/taps/claude.mjs +170 -0
  180. package/src/taps/codex.mjs +286 -0
  181. package/src/trust.mjs +323 -0
  182. package/src/usage.mjs +179 -0
  183. package/src/wait.mjs +30 -0
  184. package/src/worktree.mjs +207 -0
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><text y=".9em" font-size="90">🦿</text></svg>
@@ -0,0 +1,127 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
6
+ <title>Leg floor</title>
7
+ <link rel="icon" href="/favicon.svg" type="image/svg+xml">
8
+ <link rel="stylesheet" href="board.css">
9
+ </head>
10
+ <body>
11
+
12
+ <header class="masthead wrap">
13
+ <div class="masthead-left">
14
+ <h1 class="brand"><span class="brand-glyph" aria-hidden="true">🦿</span> Leg floor</h1>
15
+ <!-- the connection state sits second, immediately after the brand, the same
16
+ place it sits on the board: the two bars are read as one bar. -->
17
+ <div class="sse-status" role="status">
18
+ <span class="sse-word" id="sse-text">connecting</span>
19
+ <span class="sse-rule is-connecting" id="sse-dot" aria-hidden="true"></span>
20
+ </div>
21
+ <div class="sched-status" id="sched-status"></div>
22
+ </div>
23
+ <div class="masthead-right">
24
+ <div class="repos-status">repos: <span id="repos-list">-</span></div>
25
+ <div class="counts-status">
26
+ running <span id="count-running">0</span>
27
+ queued <span id="count-queued">0</span>
28
+ waiting <span id="count-waiting">0</span>
29
+ done <span id="count-done">0</span>
30
+ </div>
31
+ <a class="floor-link" href="/">Board</a>
32
+ </div>
33
+ </header>
34
+
35
+ <!-- floor.js rewrites this line from the live bind address. The markup is
36
+ static and cannot know the port, so it names none: a sentence that says
37
+ 4747 on a floor bound to 4863 sends a disconnected reader to the wrong
38
+ address. -->
39
+ <div class="banner" id="banner" role="status" hidden>Connecting to Leg.</div>
40
+
41
+ <main class="wrap">
42
+
43
+ <section class="logins" id="floor-accounts" aria-label="Logins"></section>
44
+ <p class="head-caption">Times are local.</p>
45
+
46
+ <section class="region-floor" aria-labelledby="running-head">
47
+ <div class="section-head">
48
+ <h2 id="running-head">Running</h2>
49
+ <p class="region-meta"></p>
50
+ </div>
51
+ <table class="ftable">
52
+ <colgroup><col class="c-card"><col class="c-station"><col class="c-agent"><col class="c-leases"><col class="c-event"><col class="c-elapsed"><col class="c-actions"></colgroup>
53
+ <thead><tr>
54
+ <th scope="col">Card</th><th scope="col">Station</th><th scope="col">Agent / leg</th>
55
+ <th scope="col">Leases</th><th scope="col">Last event</th><th scope="col">Elapsed</th>
56
+ <th scope="col">Actions</th>
57
+ </tr></thead>
58
+ <tbody id="running-body"></tbody>
59
+ </table>
60
+ </section>
61
+
62
+ <section class="region-floor" aria-labelledby="waiting-head">
63
+ <div class="section-head">
64
+ <h2 id="waiting-head">Waiting on humans</h2>
65
+ <p class="region-meta"></p>
66
+ </div>
67
+ <table class="ftable">
68
+ <colgroup><col class="c-card"><col class="c-station"><col class="c-status"><col class="c-since"><col class="c-actions"></colgroup>
69
+ <thead><tr>
70
+ <th scope="col">Card</th><th scope="col">Station</th><th scope="col">Status</th>
71
+ <th scope="col">Since</th><th scope="col">Actions</th>
72
+ </tr></thead>
73
+ <tbody id="waiting-body"></tbody>
74
+ </table>
75
+ </section>
76
+
77
+ <section class="region-floor" aria-labelledby="queued-head">
78
+ <div class="section-head">
79
+ <h2 id="queued-head">Queued</h2>
80
+ <p class="region-meta"></p>
81
+ </div>
82
+ <table class="ftable">
83
+ <colgroup><col class="c-card"><col class="c-station"><col class="c-leases"><col class="c-blocked"></colgroup>
84
+ <thead><tr>
85
+ <th scope="col">Card</th><th scope="col">Station</th><th scope="col">Leases</th>
86
+ <th scope="col">Blocked by</th>
87
+ </tr></thead>
88
+ <tbody id="queued-body"></tbody>
89
+ </table>
90
+ </section>
91
+
92
+ <section class="region-floor" aria-labelledby="leases-head">
93
+ <div class="section-head">
94
+ <h2 id="leases-head">Leases</h2>
95
+ <p class="region-meta"></p>
96
+ </div>
97
+ <table class="ftable">
98
+ <colgroup><col class="c-lease"><col class="c-card"><col class="c-station"><col class="c-since"></colgroup>
99
+ <thead><tr>
100
+ <th scope="col">Lease</th><th scope="col">Card</th><th scope="col">Station</th>
101
+ <th scope="col">Since</th>
102
+ </tr></thead>
103
+ <tbody id="leases-body"></tbody>
104
+ </table>
105
+ </section>
106
+
107
+ <section class="region-floor" aria-labelledby="trunk-lane-head">
108
+ <div class="section-head">
109
+ <h2 id="trunk-lane-head">Trunk lane</h2>
110
+ <p class="region-meta"></p>
111
+ </div>
112
+ <table class="ftable">
113
+ <colgroup><col class="c-time"><col class="c-card"><col class="c-summary"></colgroup>
114
+ <thead><tr>
115
+ <th scope="col">Time</th><th scope="col">Card</th><th scope="col">Summary</th>
116
+ </tr></thead>
117
+ <tbody id="trunk-body"></tbody>
118
+ </table>
119
+ </section>
120
+
121
+ </main><!-- /.wrap -->
122
+
123
+ <div class="sysmsg" id="toast" aria-live="polite"></div>
124
+
125
+ <script src="floor.js" defer></script>
126
+ </body>
127
+ </html>