acuvo-code 0.2.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 (154) hide show
  1. package/CHANGELOG.md +328 -0
  2. package/ENTERPRISE.md +927 -0
  3. package/LICENSE +120 -0
  4. package/README.md +1245 -0
  5. package/ROADMAP.md +556 -0
  6. package/bin/acuvo-mcp.mjs +208 -0
  7. package/bin/acuvo.mjs +3108 -0
  8. package/lib/acceptance-consent.mjs +168 -0
  9. package/lib/acceptance.mjs +859 -0
  10. package/lib/account.mjs +226 -0
  11. package/lib/acuvo-dir.mjs +72 -0
  12. package/lib/acuvo-models.mjs +141 -0
  13. package/lib/apply-patch.mjs +570 -0
  14. package/lib/ask-user.mjs +173 -0
  15. package/lib/audit.mjs +530 -0
  16. package/lib/auto-lease.mjs +174 -0
  17. package/lib/background.mjs +842 -0
  18. package/lib/best-of.mjs +334 -0
  19. package/lib/board.mjs +232 -0
  20. package/lib/breaker.mjs +93 -0
  21. package/lib/budget.mjs +1375 -0
  22. package/lib/builtin-skills.mjs +135 -0
  23. package/lib/cache-floor.mjs +204 -0
  24. package/lib/chain.mjs +303 -0
  25. package/lib/changed-paths.mjs +84 -0
  26. package/lib/chat.mjs +434 -0
  27. package/lib/checkpoint.mjs +637 -0
  28. package/lib/child-lifetime.mjs +71 -0
  29. package/lib/cli-args.mjs +1255 -0
  30. package/lib/code-review.mjs +1382 -0
  31. package/lib/colour.mjs +82 -0
  32. package/lib/command.mjs +2847 -0
  33. package/lib/compact.mjs +1151 -0
  34. package/lib/completion.mjs +515 -0
  35. package/lib/creative-engines.mjs +779 -0
  36. package/lib/db-inspect.mjs +1624 -0
  37. package/lib/delete.mjs +111 -0
  38. package/lib/design-loop.mjs +570 -0
  39. package/lib/diff-preview.mjs +1044 -0
  40. package/lib/doctor.mjs +2139 -0
  41. package/lib/dropped.mjs +216 -0
  42. package/lib/edit-diagnostics.mjs +277 -0
  43. package/lib/edit.mjs +460 -0
  44. package/lib/env-file.mjs +250 -0
  45. package/lib/escalate.mjs +702 -0
  46. package/lib/evaluate.mjs +284 -0
  47. package/lib/fetch-text.mjs +952 -0
  48. package/lib/fleet-budget.mjs +256 -0
  49. package/lib/gh.mjs +1536 -0
  50. package/lib/git.mjs +1341 -0
  51. package/lib/github.mjs +261 -0
  52. package/lib/h2.mjs +194 -0
  53. package/lib/handoff.mjs +417 -0
  54. package/lib/hooks.mjs +626 -0
  55. package/lib/http-probe.mjs +907 -0
  56. package/lib/image-director.mjs +322 -0
  57. package/lib/image-edit.mjs +522 -0
  58. package/lib/imagegen.mjs +998 -0
  59. package/lib/interrupt.mjs +234 -0
  60. package/lib/learned.mjs +353 -0
  61. package/lib/lease-watch.mjs +115 -0
  62. package/lib/lease.mjs +868 -0
  63. package/lib/localize.mjs +834 -0
  64. package/lib/log-tail.mjs +1052 -0
  65. package/lib/login.mjs +157 -0
  66. package/lib/lsp.mjs +1613 -0
  67. package/lib/mcp-consent.mjs +377 -0
  68. package/lib/mcp-defaults.mjs +780 -0
  69. package/lib/mcp-server.mjs +1343 -0
  70. package/lib/mcp.mjs +1263 -0
  71. package/lib/media.mjs +1283 -0
  72. package/lib/memory-workspace.mjs +179 -0
  73. package/lib/model-json.mjs +132 -0
  74. package/lib/model-tier.mjs +171 -0
  75. package/lib/model.mjs +1445 -0
  76. package/lib/parallel.mjs +144 -0
  77. package/lib/perchance.mjs +210 -0
  78. package/lib/plan-coherence.mjs +1461 -0
  79. package/lib/plan-ledger.mjs +981 -0
  80. package/lib/plan.mjs +461 -0
  81. package/lib/policy.mjs +783 -0
  82. package/lib/prefix-order.mjs +38 -0
  83. package/lib/project-memory.mjs +127 -0
  84. package/lib/prompt.mjs +109 -0
  85. package/lib/python.mjs +862 -0
  86. package/lib/rcfile.mjs +853 -0
  87. package/lib/read-window.mjs +743 -0
  88. package/lib/refute-tools.mjs +34 -0
  89. package/lib/refute.mjs +806 -0
  90. package/lib/repl-driver.mjs +264 -0
  91. package/lib/repl.mjs +324 -0
  92. package/lib/replay.mjs +1218 -0
  93. package/lib/repo-map.mjs +1101 -0
  94. package/lib/report.mjs +419 -0
  95. package/lib/search-rank.mjs +99 -0
  96. package/lib/search.mjs +659 -0
  97. package/lib/secret-paths.mjs +54 -0
  98. package/lib/session.mjs +1017 -0
  99. package/lib/skills.mjs +703 -0
  100. package/lib/slash.mjs +356 -0
  101. package/lib/spawn-argv.mjs +1151 -0
  102. package/lib/spend.mjs +250 -0
  103. package/lib/steer.mjs +280 -0
  104. package/lib/stream.mjs +253 -0
  105. package/lib/stuck.mjs +712 -0
  106. package/lib/subagent.mjs +749 -0
  107. package/lib/terminal-graphics.mjs +171 -0
  108. package/lib/tool-prefix.mjs +226 -0
  109. package/lib/tool-shortlist.mjs +162 -0
  110. package/lib/tools.mjs +2333 -0
  111. package/lib/tsserver.mjs +423 -0
  112. package/lib/turn.mjs +5672 -0
  113. package/lib/untrusted-block.mjs +271 -0
  114. package/lib/verify-claim.mjs +299 -0
  115. package/lib/vision.mjs +330 -0
  116. package/lib/voice-task.mjs +561 -0
  117. package/lib/warm-provider.mjs +255 -0
  118. package/lib/websearch.mjs +401 -0
  119. package/lib/workspace.mjs +928 -0
  120. package/lib/write-approval.mjs +235 -0
  121. package/lib/write-many.mjs +162 -0
  122. package/package.json +62 -0
  123. package/scripts/bundle.mjs +768 -0
  124. package/scripts/cache-floor.mjs +176 -0
  125. package/scripts/machine.mjs +226 -0
  126. package/scripts/test.mjs +139 -0
  127. package/skills/accessibility.md +87 -0
  128. package/skills/acuvo-design-system.md +123 -0
  129. package/skills/animation.md +84 -0
  130. package/skills/api-design.md +82 -0
  131. package/skills/auth-and-sessions.md +78 -0
  132. package/skills/build-with-a-framework.md +101 -0
  133. package/skills/colour-and-contrast.md +112 -0
  134. package/skills/creative-engines.md +81 -0
  135. package/skills/css-layout.md +85 -0
  136. package/skills/data-and-charts.md +77 -0
  137. package/skills/debugging.md +76 -0
  138. package/skills/designing-by-looking.md +84 -0
  139. package/skills/error-handling.md +78 -0
  140. package/skills/forms-and-validation.md +93 -0
  141. package/skills/nextjs-app-router.md +75 -0
  142. package/skills/page-composition.md +103 -0
  143. package/skills/performance.md +77 -0
  144. package/skills/plan-before-building.md +52 -0
  145. package/skills/planning-and-delegating.md +72 -0
  146. package/skills/refactoring.md +70 -0
  147. package/skills/security-basics.md +76 -0
  148. package/skills/state-management.md +73 -0
  149. package/skills/supabase-multitenant.md +72 -0
  150. package/skills/typescript-strict.md +90 -0
  151. package/skills/typography.md +135 -0
  152. package/skills/verify-your-own-work.md +62 -0
  153. package/skills/web-app-quality.md +62 -0
  154. package/skills/working-in-the-background.md +64 -0
package/lib/colour.mjs ADDED
@@ -0,0 +1,82 @@
1
+ /**
2
+ * ── ⭐ COLOUR, AND THE THREE WAYS TOOLS GET IT WRONG ─────────────────────────
3
+ *
4
+ * The output is monochrome today, which makes a long run hard to scan: a
5
+ * refusal, a written file and a passing command all look identical at a glance.
6
+ * Colour is the cheapest legibility win available.
7
+ *
8
+ * ⚠️ IT IS ALSO THE EASIEST THING TO BREAK SOMEONE'S PIPELINE WITH, in three
9
+ * specific ways this file exists to avoid:
10
+ *
11
+ * 1. **Escape codes in a redirected file.** `acuvo … > log.txt` must produce
12
+ * readable text, not `\\x1b[32m` everywhere. So: colour only when stdout is
13
+ * a TTY. This is also why the CLI never used colour before — getting it
14
+ * wrong is worse than going without.
15
+ * 2. **Ignoring NO_COLOR.** It is a standard (no-color.org), it is one line,
16
+ * and a tool that ignores it is a tool that cannot be scripted around.
17
+ * `FORCE_COLOR` is honoured too, for CI logs that render ANSI.
18
+ * 3. **Colour carrying meaning alone.** Roughly one in twelve men cannot
19
+ * distinguish red from green. Every glyph here is already distinct —
20
+ * `✎ ✂ · $ ✔ ✖` — so colour REINFORCES a signal that is legible without
21
+ * it. Nothing is only-colour, ever.
22
+ *
23
+ * ⭐ And the palette is deliberately small. Four colours used consistently reads
24
+ * as designed; nine used freely reads as a toy.
25
+ */
26
+
27
+ const CODES = {
28
+ reset: '\x1b[0m',
29
+ dim: '\x1b[2m',
30
+ bold: '\x1b[1m',
31
+ gold: '\x1b[33m', // the brand note: written files, headings
32
+ green: '\x1b[32m', // it worked
33
+ red: '\x1b[31m', // it failed or was refused
34
+ cyan: '\x1b[36m', // a remote thing: MCP, a service
35
+ };
36
+
37
+ /**
38
+ * Decide once, at startup, whether this stream can take colour.
39
+ *
40
+ * ⚠️ THE ORDER MATTERS. `NO_COLOR` beats `FORCE_COLOR` beats TTY detection —
41
+ * an explicit "off" from the user must never be overridden by our own
42
+ * enthusiasm, and that is the only ordering where a person can always win.
43
+ */
44
+ export function colourEnabled({ stream = process.stdout, env = process.env } = {}) {
45
+ if (env.NO_COLOR !== undefined && env.NO_COLOR !== '') return false;
46
+ if (env.FORCE_COLOR !== undefined && env.FORCE_COLOR !== '' && env.FORCE_COLOR !== '0') return true;
47
+ // ⚠️ `TERM=dumb` is emacs' shell and a few CI runners. They render escapes
48
+ // literally, which is the redirected-file problem wearing a terminal.
49
+ if (env.TERM === 'dumb') return false;
50
+ return Boolean(stream?.isTTY);
51
+ }
52
+
53
+ /**
54
+ * Build a painter. When colour is off every function is identity — so call
55
+ * sites never branch, and a missing `if` cannot leak an escape code into a file.
56
+ */
57
+ export function createPainter(enabled = colourEnabled()) {
58
+ const wrap = (code) => (enabled
59
+ ? (text) => `${code}${text}${CODES.reset}`
60
+ : (text) => text);
61
+ return {
62
+ enabled,
63
+ dim: wrap(CODES.dim),
64
+ bold: wrap(CODES.bold),
65
+ gold: wrap(CODES.gold),
66
+ green: wrap(CODES.green),
67
+ red: wrap(CODES.red),
68
+ cyan: wrap(CODES.cyan),
69
+ };
70
+ }
71
+
72
+ /**
73
+ * ⚠️ FOR TESTS AND FOR ANY OUTPUT WE PARSE. The bench scrapes numbers out of a
74
+ * transcript, and an escape code sitting between `$` and a digit turns a
75
+ * working regex into a silent zero — the exact class of bug that already
76
+ * reported a $7.50 cost for a task that cost $0.0008.
77
+ */
78
+ // eslint-disable-next-line no-control-regex
79
+ const ANSI = /\x1b\[[0-9;]*m/g;
80
+ export function stripColour(text) {
81
+ return String(text ?? '').replace(ANSI, '');
82
+ }