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.
- package/CHANGELOG.md +328 -0
- package/ENTERPRISE.md +927 -0
- package/LICENSE +120 -0
- package/README.md +1245 -0
- package/ROADMAP.md +556 -0
- package/bin/acuvo-mcp.mjs +208 -0
- package/bin/acuvo.mjs +3108 -0
- package/lib/acceptance-consent.mjs +168 -0
- package/lib/acceptance.mjs +859 -0
- package/lib/account.mjs +226 -0
- package/lib/acuvo-dir.mjs +72 -0
- package/lib/acuvo-models.mjs +141 -0
- package/lib/apply-patch.mjs +570 -0
- package/lib/ask-user.mjs +173 -0
- package/lib/audit.mjs +530 -0
- package/lib/auto-lease.mjs +174 -0
- package/lib/background.mjs +842 -0
- package/lib/best-of.mjs +334 -0
- package/lib/board.mjs +232 -0
- package/lib/breaker.mjs +93 -0
- package/lib/budget.mjs +1375 -0
- package/lib/builtin-skills.mjs +135 -0
- package/lib/cache-floor.mjs +204 -0
- package/lib/chain.mjs +303 -0
- package/lib/changed-paths.mjs +84 -0
- package/lib/chat.mjs +434 -0
- package/lib/checkpoint.mjs +637 -0
- package/lib/child-lifetime.mjs +71 -0
- package/lib/cli-args.mjs +1255 -0
- package/lib/code-review.mjs +1382 -0
- package/lib/colour.mjs +82 -0
- package/lib/command.mjs +2847 -0
- package/lib/compact.mjs +1151 -0
- package/lib/completion.mjs +515 -0
- package/lib/creative-engines.mjs +779 -0
- package/lib/db-inspect.mjs +1624 -0
- package/lib/delete.mjs +111 -0
- package/lib/design-loop.mjs +570 -0
- package/lib/diff-preview.mjs +1044 -0
- package/lib/doctor.mjs +2139 -0
- package/lib/dropped.mjs +216 -0
- package/lib/edit-diagnostics.mjs +277 -0
- package/lib/edit.mjs +460 -0
- package/lib/env-file.mjs +250 -0
- package/lib/escalate.mjs +702 -0
- package/lib/evaluate.mjs +284 -0
- package/lib/fetch-text.mjs +952 -0
- package/lib/fleet-budget.mjs +256 -0
- package/lib/gh.mjs +1536 -0
- package/lib/git.mjs +1341 -0
- package/lib/github.mjs +261 -0
- package/lib/h2.mjs +194 -0
- package/lib/handoff.mjs +417 -0
- package/lib/hooks.mjs +626 -0
- package/lib/http-probe.mjs +907 -0
- package/lib/image-director.mjs +322 -0
- package/lib/image-edit.mjs +522 -0
- package/lib/imagegen.mjs +998 -0
- package/lib/interrupt.mjs +234 -0
- package/lib/learned.mjs +353 -0
- package/lib/lease-watch.mjs +115 -0
- package/lib/lease.mjs +868 -0
- package/lib/localize.mjs +834 -0
- package/lib/log-tail.mjs +1052 -0
- package/lib/login.mjs +157 -0
- package/lib/lsp.mjs +1613 -0
- package/lib/mcp-consent.mjs +377 -0
- package/lib/mcp-defaults.mjs +780 -0
- package/lib/mcp-server.mjs +1343 -0
- package/lib/mcp.mjs +1263 -0
- package/lib/media.mjs +1283 -0
- package/lib/memory-workspace.mjs +179 -0
- package/lib/model-json.mjs +132 -0
- package/lib/model-tier.mjs +171 -0
- package/lib/model.mjs +1445 -0
- package/lib/parallel.mjs +144 -0
- package/lib/perchance.mjs +210 -0
- package/lib/plan-coherence.mjs +1461 -0
- package/lib/plan-ledger.mjs +981 -0
- package/lib/plan.mjs +461 -0
- package/lib/policy.mjs +783 -0
- package/lib/prefix-order.mjs +38 -0
- package/lib/project-memory.mjs +127 -0
- package/lib/prompt.mjs +109 -0
- package/lib/python.mjs +862 -0
- package/lib/rcfile.mjs +853 -0
- package/lib/read-window.mjs +743 -0
- package/lib/refute-tools.mjs +34 -0
- package/lib/refute.mjs +806 -0
- package/lib/repl-driver.mjs +264 -0
- package/lib/repl.mjs +324 -0
- package/lib/replay.mjs +1218 -0
- package/lib/repo-map.mjs +1101 -0
- package/lib/report.mjs +419 -0
- package/lib/search-rank.mjs +99 -0
- package/lib/search.mjs +659 -0
- package/lib/secret-paths.mjs +54 -0
- package/lib/session.mjs +1017 -0
- package/lib/skills.mjs +703 -0
- package/lib/slash.mjs +356 -0
- package/lib/spawn-argv.mjs +1151 -0
- package/lib/spend.mjs +250 -0
- package/lib/steer.mjs +280 -0
- package/lib/stream.mjs +253 -0
- package/lib/stuck.mjs +712 -0
- package/lib/subagent.mjs +749 -0
- package/lib/terminal-graphics.mjs +171 -0
- package/lib/tool-prefix.mjs +226 -0
- package/lib/tool-shortlist.mjs +162 -0
- package/lib/tools.mjs +2333 -0
- package/lib/tsserver.mjs +423 -0
- package/lib/turn.mjs +5672 -0
- package/lib/untrusted-block.mjs +271 -0
- package/lib/verify-claim.mjs +299 -0
- package/lib/vision.mjs +330 -0
- package/lib/voice-task.mjs +561 -0
- package/lib/warm-provider.mjs +255 -0
- package/lib/websearch.mjs +401 -0
- package/lib/workspace.mjs +928 -0
- package/lib/write-approval.mjs +235 -0
- package/lib/write-many.mjs +162 -0
- package/package.json +62 -0
- package/scripts/bundle.mjs +768 -0
- package/scripts/cache-floor.mjs +176 -0
- package/scripts/machine.mjs +226 -0
- package/scripts/test.mjs +139 -0
- package/skills/accessibility.md +87 -0
- package/skills/acuvo-design-system.md +123 -0
- package/skills/animation.md +84 -0
- package/skills/api-design.md +82 -0
- package/skills/auth-and-sessions.md +78 -0
- package/skills/build-with-a-framework.md +101 -0
- package/skills/colour-and-contrast.md +112 -0
- package/skills/creative-engines.md +81 -0
- package/skills/css-layout.md +85 -0
- package/skills/data-and-charts.md +77 -0
- package/skills/debugging.md +76 -0
- package/skills/designing-by-looking.md +84 -0
- package/skills/error-handling.md +78 -0
- package/skills/forms-and-validation.md +93 -0
- package/skills/nextjs-app-router.md +75 -0
- package/skills/page-composition.md +103 -0
- package/skills/performance.md +77 -0
- package/skills/plan-before-building.md +52 -0
- package/skills/planning-and-delegating.md +72 -0
- package/skills/refactoring.md +70 -0
- package/skills/security-basics.md +76 -0
- package/skills/state-management.md +73 -0
- package/skills/supabase-multitenant.md +72 -0
- package/skills/typescript-strict.md +90 -0
- package/skills/typography.md +135 -0
- package/skills/verify-your-own-work.md +62 -0
- package/skills/web-app-quality.md +62 -0
- 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
|
+
}
|