aura-code 0.3.7 → 0.5.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 (109) hide show
  1. package/README.md +54 -2
  2. package/dist/agent/compactor.d.ts +26 -0
  3. package/dist/agent/compactor.js +156 -0
  4. package/dist/agent/compactor.js.map +1 -0
  5. package/dist/agent/design.d.ts +17 -0
  6. package/dist/agent/design.js +175 -0
  7. package/dist/agent/design.js.map +1 -0
  8. package/dist/agent/loop.js +8 -1
  9. package/dist/agent/loop.js.map +1 -1
  10. package/dist/agent/system-prompt.d.ts +1 -1
  11. package/dist/agent/system-prompt.js +5 -2
  12. package/dist/agent/system-prompt.js.map +1 -1
  13. package/dist/cli/display.js +40 -4
  14. package/dist/cli/display.js.map +1 -1
  15. package/dist/cli/index.js +258 -44
  16. package/dist/cli/index.js.map +1 -1
  17. package/dist/config/defaults.js +1 -1
  18. package/dist/config/defaults.js.map +1 -1
  19. package/dist/config/project-config.d.ts +6 -0
  20. package/dist/config/project-config.js +2 -0
  21. package/dist/config/project-config.js.map +1 -1
  22. package/dist/dream/dream.d.ts +48 -0
  23. package/dist/dream/dream.js +187 -0
  24. package/dist/dream/dream.js.map +1 -0
  25. package/dist/kanban/index.d.ts +5 -0
  26. package/dist/kanban/index.js +11 -0
  27. package/dist/kanban/index.js.map +1 -0
  28. package/dist/kanban/pipeline.d.ts +16 -0
  29. package/dist/kanban/pipeline.js +910 -0
  30. package/dist/kanban/pipeline.js.map +1 -0
  31. package/dist/kanban/server.d.ts +5 -0
  32. package/dist/kanban/server.js +820 -0
  33. package/dist/kanban/server.js.map +1 -0
  34. package/dist/kanban/types.d.ts +75 -0
  35. package/dist/kanban/types.js +6 -0
  36. package/dist/kanban/types.js.map +1 -0
  37. package/dist/learnlight/driven.d.ts +2 -0
  38. package/dist/learnlight/driven.js +109 -0
  39. package/dist/learnlight/driven.js.map +1 -0
  40. package/dist/learnlight/index.d.ts +4 -0
  41. package/dist/learnlight/index.js +32 -0
  42. package/dist/learnlight/index.js.map +1 -0
  43. package/dist/learnlight/lesson-prep.d.ts +36 -0
  44. package/dist/learnlight/lesson-prep.js +224 -0
  45. package/dist/learnlight/lesson-prep.js.map +1 -0
  46. package/dist/learnlight/report.d.ts +2 -0
  47. package/dist/learnlight/report.js +37 -0
  48. package/dist/learnlight/report.js.map +1 -0
  49. package/dist/learnlight/types.d.ts +72 -0
  50. package/dist/learnlight/types.js +6 -0
  51. package/dist/learnlight/types.js.map +1 -0
  52. package/dist/perception/graph-store.d.ts +11 -0
  53. package/dist/perception/graph-store.js +33 -0
  54. package/dist/perception/graph-store.js.map +1 -1
  55. package/dist/perception/index.d.ts +1 -1
  56. package/dist/perception/index.js +2 -1
  57. package/dist/perception/index.js.map +1 -1
  58. package/dist/providers/factory.d.ts +16 -0
  59. package/dist/providers/factory.js +72 -0
  60. package/dist/providers/factory.js.map +1 -1
  61. package/dist/providers/openai-compatible.js +80 -49
  62. package/dist/providers/openai-compatible.js.map +1 -1
  63. package/dist/research/council.d.ts +26 -0
  64. package/dist/research/council.js +225 -0
  65. package/dist/research/council.js.map +1 -0
  66. package/dist/research/research.d.ts +24 -0
  67. package/dist/research/research.js +116 -0
  68. package/dist/research/research.js.map +1 -0
  69. package/dist/ruby/alternator.d.ts +36 -1
  70. package/dist/ruby/alternator.js +40 -31
  71. package/dist/ruby/alternator.js.map +1 -1
  72. package/dist/ruby/stats.js +10 -11
  73. package/dist/ruby/stats.js.map +1 -1
  74. package/dist/ruby/types.js +1 -1
  75. package/dist/ruby/types.js.map +1 -1
  76. package/dist/safety/permissions.d.ts +8 -0
  77. package/dist/safety/permissions.js +12 -0
  78. package/dist/safety/permissions.js.map +1 -1
  79. package/dist/setup/provider-registry.js +14 -0
  80. package/dist/setup/provider-registry.js.map +1 -1
  81. package/dist/setup/provider-test.js +24 -2
  82. package/dist/setup/provider-test.js.map +1 -1
  83. package/dist/setup/telegram-wizard.d.ts +57 -0
  84. package/dist/setup/telegram-wizard.js +343 -0
  85. package/dist/setup/telegram-wizard.js.map +1 -0
  86. package/dist/tools/audio-transcribe.d.ts +20 -0
  87. package/dist/tools/audio-transcribe.js +39 -28
  88. package/dist/tools/audio-transcribe.js.map +1 -1
  89. package/dist/tools/gmail-tool.d.ts +11 -0
  90. package/dist/tools/gmail-tool.js +221 -0
  91. package/dist/tools/gmail-tool.js.map +1 -0
  92. package/dist/tools/read-file.js +13 -0
  93. package/dist/tools/read-file.js.map +1 -1
  94. package/dist/tools/telegram-bot.js +103 -18
  95. package/dist/tools/telegram-bot.js.map +1 -1
  96. package/dist/tools/telegram-voice.d.ts +22 -0
  97. package/dist/tools/telegram-voice.js +203 -0
  98. package/dist/tools/telegram-voice.js.map +1 -0
  99. package/dist/tools/telegram.d.ts +6 -1
  100. package/dist/tools/telegram.js +115 -5
  101. package/dist/tools/telegram.js.map +1 -1
  102. package/dist/tools/video-render.d.ts +11 -0
  103. package/dist/tools/video-render.js +189 -0
  104. package/dist/tools/video-render.js.map +1 -0
  105. package/dist/util/errors.js +6 -0
  106. package/dist/util/errors.js.map +1 -1
  107. package/dist/viz/index.js +816 -30
  108. package/dist/viz/index.js.map +1 -1
  109. package/package.json +2 -1
package/README.md CHANGED
@@ -36,7 +36,10 @@
36
36
 
37
37
  ## What is Aura Code?
38
38
 
39
- Aura Code was developed using AI-assisted engineering workflows, with multiple AI agents contributing to design, implementation, testing, and verification. Written in TypeScript — not related to the Ruby programming language.
39
+ Designed and brought to life by **Dušan Milosavljević** using opencode.
40
+ Built by agents, for agents — AI-assisted engineering workflows with multiple AI agents contributing to design, implementation, testing, and verification.
41
+ Model-agnostic: works with Claude, GPT, Gemini, MiMo, and any OpenAI-compatible endpoint.
42
+ Written in TypeScript — not related to the Ruby programming language.
40
43
 
41
44
  Built on the **Praktess** framework — from Ancient Greek: *she who acts and executes*.
42
45
 
@@ -107,12 +110,61 @@ Any OpenAI-compatible endpoint also works via `openrouter/<model>`.
107
110
 
108
111
  ---
109
112
 
113
+ ## Testing
114
+
115
+ ```bash
116
+ npm install
117
+ npm run build # compiles TypeScript, zero errors expected
118
+ npm test # runs the full suite (vitest)
119
+ ```
120
+
121
+ For local development:
122
+
123
+ ```bash
124
+ npm run test:watch # re-runs tests on file changes
125
+ npm run test:coverage # generates a coverage report
126
+ ```
127
+
128
+ The suite currently runs 1000+ tests across 60+ files, covering the agent
129
+ loop, all provider integrations, the tool registry, safety/permissions, the
130
+ orchestration and self-improvement layers, and the dashboard generator.
131
+
132
+ Contributions should keep `npm run build` and `npm test` clean before
133
+ opening a pull request.
134
+
135
+ ---
136
+
137
+ ## Known Limitations
138
+
139
+ - **Self-improvement routing (RubyAlternator) is implemented but inactive.**
140
+ Episode recording and competence scoring both work and are visible in the
141
+ dashboard's Learning tab, but the routing logic that would actually use
142
+ competence scores to pick models isn't wired into the main agent loop yet.
143
+ Today, model selection doesn't change based on what Aura has learned.
144
+
145
+ - **Provider behavior varies by model.** Tool-calling support, context
146
+ window handling, and error message quality differ across providers —
147
+ some of this is normalized (see CHANGELOG for cross-provider config
148
+ fixes), but not all of it. If a model behaves unexpectedly with tools,
149
+ check whether the provider documents function-calling support before
150
+ assuming it's a bug in Aura.
151
+
152
+ - **Large refactors still need verification.** `--verify` and `--test-command`
153
+ catch regressions Aura's own changes introduce, but they don't replace
154
+ review for changes spanning many files or with subtle behavioral intent.
155
+
156
+ - **Conversation compaction is new.** Long sessions now auto-summarize older
157
+ turns to stay within context limits; this is recently added and still
158
+ being hardened against edge cases in unusual tool-call sequences.
159
+
160
+ ---
161
+
110
162
  ## Stats
111
163
 
112
164
  | Metric | Value |
113
165
  |--------|-------|
114
166
  | Tests | 1035+ passing, 0 failures |
115
- | Version | v0.3.0 |
167
+ | Version | v0.3.7 |
116
168
  | Language | TypeScript (strict) |
117
169
  | License | MIT |
118
170
 
@@ -0,0 +1,26 @@
1
+ import type { HistoryMessage } from '../providers/types.js';
2
+ /**
3
+ * Provider-independent estimate of how many tokens the *next* prompt will
4
+ * carry, measured directly from the system prompt + current history. This is
5
+ * the signal that should drive compaction: it reflects the payload we are
6
+ * about to send, it never lags a turn, and — critically — it does not depend
7
+ * on the provider reporting streamed `usage`, which several OpenAI-compatible
8
+ * endpoints omit on tool-call turns. Do NOT substitute a running sum of
9
+ * per-turn `usage.totalTokens`: each turn's input already contains the entire
10
+ * history, so summing them N-counts the same bytes.
11
+ *
12
+ * Uses the precise tokenizer when available (see loadEncoder), otherwise a
13
+ * conservative char-ratio estimate. Result is identical in shape either way.
14
+ */
15
+ export declare function estimateContextTokens(system: string, history: HistoryMessage[]): number;
16
+ /**
17
+ * Compact conversation history when context usage crosses ~70% of the model's
18
+ * window. Keeps the first message (task) and the most recent messages
19
+ * verbatim; replaces the middle with a recap.
20
+ *
21
+ * Mutates `history` in place (clears and re-fills) so callers that hold a
22
+ * shared reference see the compacted version without reassignment.
23
+ *
24
+ * Returns `true` if compaction happened.
25
+ */
26
+ export declare function compactHistory(history: HistoryMessage[], totalTokens: number, model: string): boolean;
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.estimateContextTokens = estimateContextTokens;
4
+ exports.compactHistory = compactHistory;
5
+ const factory_js_1 = require("../providers/factory.js");
6
+ const COMPACTION_THRESHOLD = 0.7;
7
+ const PRESERVE_RECENT = 3;
8
+ const DEFAULT_WINDOW = 128_000;
9
+ /** Average characters per token used for the local size estimate. Deliberately
10
+ * conservative (real ratio is ~4 for English prose, lower for code/JSON) so we
11
+ * err toward compacting slightly early rather than overflowing. */
12
+ const CHARS_PER_TOKEN = 3.5;
13
+ /**
14
+ * Optional precise tokenizer. `gpt-tokenizer` is pure-JS (o200k/cl100k BPE),
15
+ * which matches the OpenAI-compatible families Aura routes through (DeepSeek,
16
+ * MiMo, OpenAI). Loaded lazily and defensively: if the package is absent or
17
+ * errors, we silently fall back to the char-ratio estimate so compaction never
18
+ * depends on it being installed.
19
+ */
20
+ let encodeFn;
21
+ function loadEncoder() {
22
+ if (encodeFn !== undefined)
23
+ return encodeFn;
24
+ try {
25
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
26
+ const mod = require('gpt-tokenizer');
27
+ encodeFn = typeof mod.encode === 'function' ? mod.encode : null;
28
+ }
29
+ catch {
30
+ encodeFn = null;
31
+ }
32
+ return encodeFn;
33
+ }
34
+ /** Tokens for a single string: exact via tokenizer, else char-ratio estimate. */
35
+ function countText(text) {
36
+ if (!text)
37
+ return 0;
38
+ const enc = loadEncoder();
39
+ if (enc) {
40
+ try {
41
+ return enc(text).length;
42
+ }
43
+ catch { /* fall through */ }
44
+ }
45
+ return Math.ceil(text.length / CHARS_PER_TOKEN);
46
+ }
47
+ /**
48
+ * Provider-independent estimate of how many tokens the *next* prompt will
49
+ * carry, measured directly from the system prompt + current history. This is
50
+ * the signal that should drive compaction: it reflects the payload we are
51
+ * about to send, it never lags a turn, and — critically — it does not depend
52
+ * on the provider reporting streamed `usage`, which several OpenAI-compatible
53
+ * endpoints omit on tool-call turns. Do NOT substitute a running sum of
54
+ * per-turn `usage.totalTokens`: each turn's input already contains the entire
55
+ * history, so summing them N-counts the same bytes.
56
+ *
57
+ * Uses the precise tokenizer when available (see loadEncoder), otherwise a
58
+ * conservative char-ratio estimate. Result is identical in shape either way.
59
+ */
60
+ function estimateContextTokens(system, history) {
61
+ let tokens = countText(system);
62
+ for (const msg of history) {
63
+ switch (msg.role) {
64
+ case 'user':
65
+ tokens += countText(msg.content);
66
+ break;
67
+ case 'assistant':
68
+ tokens += countText(msg.content ?? '');
69
+ for (const call of msg.toolCalls ?? []) {
70
+ tokens += countText(call.name) + countText(JSON.stringify(call.input));
71
+ }
72
+ break;
73
+ case 'tool_result':
74
+ for (const r of msg.results) {
75
+ tokens += countText(r.name) + countText(r.content ?? '');
76
+ }
77
+ break;
78
+ }
79
+ }
80
+ return tokens;
81
+ }
82
+ function summariseMessage(msg) {
83
+ switch (msg.role) {
84
+ case 'user':
85
+ return `User: ${msg.content.slice(0, 120)}${msg.content.length > 120 ? '…' : ''}`;
86
+ case 'assistant': {
87
+ const text = msg.content ? `Assistant: ${msg.content.slice(0, 120)}${msg.content.length > 120 ? '…' : ''}` : '';
88
+ const calls = msg.toolCalls?.length ? `Called: ${msg.toolCalls.map(c => c.name).join(', ')}` : '';
89
+ return [text, calls].filter(Boolean).join(' · ') || 'Assistant: (no content)';
90
+ }
91
+ case 'tool_result': {
92
+ const toolNames = msg.results.map(r => r.name).join(', ');
93
+ return `Tool results: [${toolNames}]`;
94
+ }
95
+ }
96
+ }
97
+ /**
98
+ * Compact conversation history when context usage crosses ~70% of the model's
99
+ * window. Keeps the first message (task) and the most recent messages
100
+ * verbatim; replaces the middle with a recap.
101
+ *
102
+ * Mutates `history` in place (clears and re-fills) so callers that hold a
103
+ * shared reference see the compacted version without reassignment.
104
+ *
105
+ * Returns `true` if compaction happened.
106
+ */
107
+ function compactHistory(history, totalTokens, model) {
108
+ const window = (0, factory_js_1.getContextWindow)(model) ?? DEFAULT_WINDOW;
109
+ const threshold = Math.floor(window * COMPACTION_THRESHOLD);
110
+ if (totalTokens < threshold)
111
+ return false;
112
+ const MIN_KEEP = 2 + PRESERVE_RECENT;
113
+ if (history.length <= MIN_KEEP)
114
+ return false;
115
+ // Prefer preserving the ENTIRE most recent user turn intact — search
116
+ // backward for the last 'user' message (excluding the original task at
117
+ // index 0). A forward-only search from an arbitrary message-count
118
+ // boundary can miss this entirely, since the most recent user turn may
119
+ // start well before that boundary — confirmed by testing a multi-turn
120
+ // session where a forward search found nothing and fell through to
121
+ // collapsing the whole session, discarding a real, recent instruction.
122
+ let keepFrom = -1;
123
+ for (let i = history.length - 1; i >= 1; i--) {
124
+ if (history[i].role === 'user') {
125
+ keepFrom = i;
126
+ break;
127
+ }
128
+ }
129
+ if (keepFrom === -1) {
130
+ // No later user turn exists (e.g. still mid-task, only the original
131
+ // instruction so far) — fall back to keeping roughly the last
132
+ // PRESERVE_RECENT messages, walked forward to avoid landing on an
133
+ // orphaned tool_result or directly after the assistant-role recap.
134
+ keepFrom = Math.max(1, history.length - PRESERVE_RECENT);
135
+ while (keepFrom < history.length &&
136
+ (history[keepFrom].role === 'tool_result' || history[keepFrom].role === 'assistant'))
137
+ keepFrom++;
138
+ }
139
+ const toCompact = history.slice(1, keepFrom);
140
+ if (toCompact.length === 0)
141
+ return false;
142
+ const summaries = toCompact.map(summariseMessage);
143
+ const recap = {
144
+ role: 'assistant',
145
+ content: [
146
+ `[Earlier conversation compacted: ${toCompact.length} turns removed to stay within context limits.]`,
147
+ ...summaries,
148
+ ].join('\n'),
149
+ };
150
+ const preserved = [history[0], recap, ...history.slice(keepFrom)];
151
+ history.length = 0;
152
+ for (const msg of preserved)
153
+ history.push(msg);
154
+ return true;
155
+ }
156
+ //# sourceMappingURL=compactor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compactor.js","sourceRoot":"","sources":["../../src/agent/compactor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export interface DesignSelection {
2
+ slug: string;
3
+ name: string;
4
+ skillText: string;
5
+ matchedByName: boolean;
6
+ }
7
+ /** All available slugs (folder names) in the library, sorted. */
8
+ export declare function listDesignSlugs(projectRoot: string): string[];
9
+ /** Is this task asking to build/modify a website or UI? */
10
+ export declare function isWebBuildTask(task: string): boolean;
11
+ /**
12
+ * Decide which design skill (if any) applies to this task.
13
+ * Returns null when the task is not a UI/website build or no library exists.
14
+ */
15
+ export declare function selectDesign(projectRoot: string, task: string): DesignSelection | null;
16
+ /** Render the design selection as a system-prompt section. */
17
+ export declare function designPromptSection(sel: DesignSelection): string;
@@ -0,0 +1,175 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.listDesignSlugs = listDesignSlugs;
37
+ exports.isWebBuildTask = isWebBuildTask;
38
+ exports.selectDesign = selectDesign;
39
+ exports.designPromptSection = designPromptSection;
40
+ const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
42
+ /**
43
+ * Design-system injection for UI/website builds.
44
+ *
45
+ * When a task is about building a website or UI, Aura loads a design "skill"
46
+ * (a SKILL.md from `design-systems/<slug>/`) into the system prompt so the
47
+ * generated markup follows real tokens, components, and accessibility rules
48
+ * instead of generic defaults. Library: bergside/awesome-design-skills (MIT).
49
+ *
50
+ * Selection is keyword-based and cheap (no extra LLM call):
51
+ * 1. If the task names a known slug/name ("make it brutalist", "luxury style",
52
+ * "terracotta"), that skill is used.
53
+ * 2. Otherwise the project default applies (AURA_DESIGN env or "terracotta").
54
+ * 3. If the task isn't a UI/website build at all, nothing is injected.
55
+ */
56
+ const DIRNAME = 'design-systems';
57
+ /** Resolved at call time so `:design <slug>` / `:design off` take effect live. */
58
+ function defaultSlug() {
59
+ return process.env.AURA_DESIGN || 'terracotta';
60
+ }
61
+ /** Phrases that mark a task as UI/website work. Deliberately narrow — generic
62
+ * words like "design" or "page" alone false-positive on requests that have
63
+ * nothing to do with building a UI (e.g. "make a page summarizing my Tesla
64
+ * research" should NOT pull in a design skill). Multi-word phrases here are
65
+ * much less ambiguous than single common words. */
66
+ const WEB_SIGNALS = [
67
+ 'website', 'web site', 'webpage', 'web page', 'landing page', 'homepage',
68
+ 'home page', 'frontend', 'front-end', 'front end', 'web app', 'webapp',
69
+ 'react component', 'ui component', 'ui design', 'redesign the site',
70
+ 'restyle the site', 'portfolio site', 'hero section', 'marketing page',
71
+ 'site for', 'design system', 'visual design',
72
+ ];
73
+ /** Common natural-language variants → canonical slug. Keeps "make it brutalist"
74
+ * or "minimalist look" matching the right skill without fuzzy guessing. */
75
+ const ALIASES = {
76
+ brutalist: 'brutalism',
77
+ neobrutalist: 'neobrutalism',
78
+ minimalist: 'minimal',
79
+ minimalistic: 'minimal',
80
+ luxurious: 'luxury',
81
+ glassy: 'glassmorphism',
82
+ glass: 'glassmorphism',
83
+ neumorphic: 'neumorphism',
84
+ claymorphic: 'claymorphism',
85
+ skeuomorphic: 'skeumorphism',
86
+ skeuomorphism: 'skeumorphism',
87
+ editorialstyle: 'editorial',
88
+ corporatey: 'corporate',
89
+ retrostyle: 'retro',
90
+ vintagestyle: 'vintage',
91
+ professionallooking: 'professional',
92
+ };
93
+ function designsRoot(projectRoot) {
94
+ return path.join(projectRoot, DIRNAME);
95
+ }
96
+ /** All available slugs (folder names) in the library, sorted. */
97
+ function listDesignSlugs(projectRoot) {
98
+ try {
99
+ return fs.readdirSync(designsRoot(projectRoot), { withFileTypes: true })
100
+ .filter(d => d.isDirectory())
101
+ .map(d => d.name)
102
+ .sort();
103
+ }
104
+ catch {
105
+ return [];
106
+ }
107
+ }
108
+ /** Is this task asking to build/modify a website or UI? */
109
+ function isWebBuildTask(task) {
110
+ const t = task.toLowerCase();
111
+ return WEB_SIGNALS.some(sig => t.includes(sig));
112
+ }
113
+ /** Load a skill's SKILL.md text, or null if missing. */
114
+ function loadSkill(projectRoot, slug) {
115
+ try {
116
+ return fs.readFileSync(path.join(designsRoot(projectRoot), slug, 'SKILL.md'), 'utf8');
117
+ }
118
+ catch {
119
+ return null;
120
+ }
121
+ }
122
+ function titleCase(slug) {
123
+ return slug.charAt(0).toUpperCase() + slug.slice(1);
124
+ }
125
+ /**
126
+ * Decide which design skill (if any) applies to this task.
127
+ * Returns null when the task is not a UI/website build or no library exists.
128
+ */
129
+ function selectDesign(projectRoot, task) {
130
+ const slugs = listDesignSlugs(projectRoot);
131
+ if (slugs.length === 0)
132
+ return null;
133
+ const t = task.toLowerCase();
134
+ // 1a. Alias forms ("brutalist", "minimalist") → canonical slug.
135
+ for (const [alias, slug] of Object.entries(ALIASES)) {
136
+ if (slugs.includes(slug) && new RegExp(`\\b${alias}\\b`).test(t)) {
137
+ const skillText = loadSkill(projectRoot, slug);
138
+ if (skillText)
139
+ return { slug, name: titleCase(slug), skillText, matchedByName: true };
140
+ }
141
+ }
142
+ // 1b. Explicit style named in the task wins, even if it's not obviously "web"
143
+ // (e.g. "give the page a brutalist look").
144
+ const named = slugs.find(s => {
145
+ // match the slug or its spaced/title form as a whole word
146
+ const forms = new Set([s, s.replace(/-/g, ' '), titleCase(s).toLowerCase()]);
147
+ return [...forms].some(f => new RegExp(`\\b${f.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\\b`).test(t));
148
+ });
149
+ if (named) {
150
+ const skillText = loadSkill(projectRoot, named);
151
+ if (skillText)
152
+ return { slug: named, name: titleCase(named), skillText, matchedByName: true };
153
+ }
154
+ // 2. No explicit style — only inject if this looks like a web/UI build.
155
+ if (!isWebBuildTask(task))
156
+ return null;
157
+ const def = defaultSlug();
158
+ if (def === '__none__')
159
+ return null; // auto-injection disabled via :design off
160
+ const fallback = slugs.includes(def) ? def : slugs[0];
161
+ const skillText = loadSkill(projectRoot, fallback);
162
+ if (!skillText)
163
+ return null;
164
+ return { slug: fallback, name: titleCase(fallback), skillText, matchedByName: false };
165
+ }
166
+ /** Render the design selection as a system-prompt section. */
167
+ function designPromptSection(sel) {
168
+ return (`\n\n## Active design system: ${sel.name}\n` +
169
+ `This is a UI/website task. Build the interface to match the design system below — ` +
170
+ `its colour tokens, typography, spacing, component styles, and accessibility rules are ` +
171
+ `authoritative. Do not fall back to generic defaults.` +
172
+ (sel.matchedByName ? '' : ` (Default style "${sel.slug}"; the user can name another, e.g. "make it luxury" or ":design <slug>".)`) +
173
+ `\n\n${sel.skillText}\n`);
174
+ }
175
+ //# sourceMappingURL=design.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"design.js","sourceRoot":"","sources":["../../src/agent/design.ts"],"names":[],"mappings":"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"}
@@ -42,6 +42,7 @@ const system_prompt_js_1 = require("./system-prompt.js");
42
42
  const defaults_js_1 = require("../config/defaults.js");
43
43
  const session_store_js_1 = require("./session-store.js");
44
44
  const spawner_js_1 = require("./spawner.js");
45
+ const compactor_js_1 = require("./compactor.js");
45
46
  const PRICING_USD_PER_MTOK = {
46
47
  'claude-opus-4-5-20251001': { in: 15, out: 75 },
47
48
  'claude-sonnet-4-5-20251001': { in: 3, out: 15 },
@@ -63,7 +64,7 @@ async function runAgentLoop(opts) {
63
64
  const { provider, task, context, permissions, display } = opts;
64
65
  const maxTurns = opts.maxTurns ?? defaults_js_1.DEFAULTS.maxTurns;
65
66
  const pricingModel = opts.pricingModel ?? provider.model;
66
- const system = (0, system_prompt_js_1.buildSystemPrompt)(context, provider.name);
67
+ const system = (0, system_prompt_js_1.buildSystemPrompt)(context, provider.name, task);
67
68
  const history = [
68
69
  ...(opts.initialHistory ?? []),
69
70
  { role: 'user', content: task },
@@ -88,6 +89,12 @@ async function runLoopBody(args) {
88
89
  const toolCallLog = [];
89
90
  while (turns < maxTurns) {
90
91
  turns++;
92
+ // Compact BEFORE the next provider call, using the size of the payload we
93
+ // are about to send (system + current history), measured locally. This was
94
+ // previously driven by `usage.totalTokens`, which stays 0 whenever the
95
+ // provider omits streamed usage — so compaction silently never fired and
96
+ // history grew until the provider rejected the request. See compactor.ts.
97
+ (0, compactor_js_1.compactHistory)(history, (0, compactor_js_1.estimateContextTokens)(system, history), provider.model);
91
98
  let responseText = '';
92
99
  const responseToolCalls = [];
93
100
  let finalResponse = null;
@@ -1 +1 @@
1
- {"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/agent/loop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/agent/loop.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  import type { ProjectContext } from './context.js';
2
- export declare function buildSystemPrompt(ctx: ProjectContext, providerName: string): string;
2
+ export declare function buildSystemPrompt(ctx: ProjectContext, providerName: string, task?: string): string;
3
3
  export declare function buildArchitectPrompt(task: string, projectRoot: string): string;
@@ -2,7 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.buildSystemPrompt = buildSystemPrompt;
4
4
  exports.buildArchitectPrompt = buildArchitectPrompt;
5
- function buildSystemPrompt(ctx, providerName) {
5
+ const design_js_1 = require("./design.js");
6
+ function buildSystemPrompt(ctx, providerName, task) {
7
+ const design = task ? (0, design_js_1.selectDesign)(ctx.root, task) : null;
8
+ const designSection = design ? (0, design_js_1.designPromptSection)(design) : '';
6
9
  return `You are Aura — a precise, efficient AI coding agent.
7
10
  You are working in a ${ctx.language} project called "${ctx.name}" (${ctx.framework}).
8
11
 
@@ -68,7 +71,7 @@ ${ctx.readme}
68
71
  ### Recent git history
69
72
  ${ctx.recentCommits}
70
73
 
71
- Provider: ${providerName}. Work efficiently — minimize unnecessary tool calls.`;
74
+ Provider: ${providerName}. Work efficiently — minimize unnecessary tool calls.${designSection}`;
72
75
  }
73
76
  function buildArchitectPrompt(task, projectRoot) {
74
77
  return `You are in architect mode. You are planning the implementation for: "${task}"
@@ -1 +1 @@
1
- {"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../src/agent/system-prompt.ts"],"names":[],"mappings":";;AAEA,8CAmEC;AAED,oDAmCC;AAxGD,SAAgB,iBAAiB,CAAC,GAAmB,EAAE,YAAoB;IACzE,OAAO;uBACc,GAAG,CAAC,QAAQ,oBAAoB,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YA4CtE,GAAG,CAAC,QAAQ;aACX,GAAG,CAAC,SAAS;QAClB,GAAG,CAAC,IAAI;;;;EAId,GAAG,CAAC,IAAI;;;;;EAKR,GAAG,CAAC,MAAM;;;;EAIV,GAAG,CAAC,MAAM;;;EAGV,GAAG,CAAC,aAAa;;YAEP,YAAY,uDAAuD,CAAC;AAChF,CAAC;AAED,SAAgB,oBAAoB,CAAC,IAAY,EAAE,WAAmB;IACpE,OAAO,wEAAwE,IAAI;;gBAErE,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+BzB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../src/agent/system-prompt.ts"],"names":[],"mappings":";;AAGA,8CAqEC;AAED,oDAmCC;AA5GD,2CAAgE;AAEhE,SAAgB,iBAAiB,CAAC,GAAmB,EAAE,YAAoB,EAAE,IAAa;IACxF,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,IAAA,wBAAY,EAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1D,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,IAAA,+BAAmB,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAChE,OAAO;uBACc,GAAG,CAAC,QAAQ,oBAAoB,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YA4CtE,GAAG,CAAC,QAAQ;aACX,GAAG,CAAC,SAAS;QAClB,GAAG,CAAC,IAAI;;;;EAId,GAAG,CAAC,IAAI;;;;;EAKR,GAAG,CAAC,MAAM;;;;EAIV,GAAG,CAAC,MAAM;;;EAGV,GAAG,CAAC,aAAa;;YAEP,YAAY,wDAAwD,aAAa,EAAE,CAAC;AAChG,CAAC;AAED,SAAgB,oBAAoB,CAAC,IAAY,EAAE,WAAmB;IACpE,OAAO,wEAAwE,IAAI;;gBAErE,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+BzB,CAAC;AACH,CAAC"}