aura-code 0.6.3 → 0.10.1
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/README.md +47 -164
- package/dist/agent/affect.d.ts +13 -0
- package/dist/agent/affect.js +34 -0
- package/dist/agent/affect.js.map +1 -0
- package/dist/agent/compactor.d.ts +27 -4
- package/dist/agent/compactor.js +185 -54
- package/dist/agent/compactor.js.map +1 -1
- package/dist/agent/confess.d.ts +35 -0
- package/dist/agent/confess.js +296 -0
- package/dist/agent/confess.js.map +1 -0
- package/dist/agent/context.d.ts +0 -4
- package/dist/agent/context.js +0 -38
- package/dist/agent/context.js.map +1 -1
- package/dist/agent/domain-expertise.d.ts +22 -0
- package/dist/agent/domain-expertise.js +110 -0
- package/dist/agent/domain-expertise.js.map +1 -0
- package/dist/agent/executive-queue.d.ts +26 -0
- package/dist/agent/executive-queue.js +50 -0
- package/dist/agent/executive-queue.js.map +1 -0
- package/dist/agent/generational-flush.d.ts +28 -0
- package/dist/agent/generational-flush.js +48 -0
- package/dist/agent/generational-flush.js.map +1 -0
- package/dist/agent/loop-profile.d.ts +50 -0
- package/dist/agent/loop-profile.js +88 -0
- package/dist/agent/loop-profile.js.map +1 -0
- package/dist/agent/loop.d.ts +14 -5
- package/dist/agent/loop.js +167 -39
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/memory-consolidate.d.ts +14 -0
- package/dist/agent/memory-consolidate.js +141 -0
- package/dist/agent/memory-consolidate.js.map +1 -0
- package/dist/agent/mixture.d.ts +33 -0
- package/dist/agent/mixture.js +138 -0
- package/dist/agent/mixture.js.map +1 -0
- package/dist/agent/spawner.js +2 -2
- package/dist/agent/spawner.js.map +1 -1
- package/dist/agent/system-prompt.d.ts +1 -1
- package/dist/agent/system-prompt.js +50 -22
- package/dist/agent/system-prompt.js.map +1 -1
- package/dist/agent/unified-memory.d.ts +15 -0
- package/dist/agent/unified-memory.js +164 -0
- package/dist/agent/unified-memory.js.map +1 -0
- package/dist/checkpoints/engine.d.ts +44 -0
- package/dist/checkpoints/engine.js +324 -0
- package/dist/checkpoints/engine.js.map +1 -0
- package/dist/cli/command-palette.d.ts +26 -0
- package/dist/cli/command-palette.js +133 -0
- package/dist/cli/command-palette.js.map +1 -0
- package/dist/cli/context-health.d.ts +51 -0
- package/dist/cli/context-health.js +187 -0
- package/dist/cli/context-health.js.map +1 -0
- package/dist/cli/diamond.d.ts +67 -0
- package/dist/cli/diamond.js +222 -12
- package/dist/cli/diamond.js.map +1 -1
- package/dist/cli/dic.d.ts +2 -0
- package/dist/cli/dic.js +106 -0
- package/dist/cli/dic.js.map +1 -0
- package/dist/cli/diff-view.d.ts +18 -0
- package/dist/cli/diff-view.js +114 -0
- package/dist/cli/diff-view.js.map +1 -0
- package/dist/cli/display.d.ts +18 -4
- package/dist/cli/display.js +74 -151
- package/dist/cli/display.js.map +1 -1
- package/dist/cli/help-data.d.ts +7 -0
- package/dist/cli/help-data.js +80 -0
- package/dist/cli/help-data.js.map +1 -0
- package/dist/cli/index.js +1002 -852
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/markdown.d.ts +5 -0
- package/dist/cli/markdown.js +128 -0
- package/dist/cli/markdown.js.map +1 -0
- package/dist/cli/model-select.d.ts +39 -0
- package/dist/cli/model-select.js +65 -0
- package/dist/cli/model-select.js.map +1 -0
- package/dist/cli/tui.d.ts +34 -0
- package/dist/cli/tui.js +1176 -0
- package/dist/cli/tui.js.map +1 -0
- package/dist/config/defaults.d.ts +6 -17
- package/dist/config/defaults.js +25 -46
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/project-config.d.ts +2 -6
- package/dist/config/project-config.js +2 -2
- package/dist/config/project-config.js.map +1 -1
- package/dist/doctor/checks.d.ts +18 -0
- package/dist/doctor/checks.js +524 -0
- package/dist/doctor/checks.js.map +1 -0
- package/dist/doctor/index.d.ts +4 -0
- package/dist/doctor/index.js +229 -0
- package/dist/doctor/index.js.map +1 -0
- package/dist/doctor/repair.d.ts +19 -0
- package/dist/doctor/repair.js +126 -0
- package/dist/doctor/repair.js.map +1 -0
- package/dist/doctor/types.d.ts +38 -0
- package/dist/doctor/types.js +10 -0
- package/dist/doctor/types.js.map +1 -0
- package/dist/dream/dream.d.ts +79 -59
- package/dist/dream/dream.js +324 -144
- package/dist/dream/dream.js.map +1 -1
- package/dist/dream/episode.d.ts +17 -0
- package/dist/dream/episode.js +116 -0
- package/dist/dream/episode.js.map +1 -0
- package/dist/kanban/engine.d.ts +26 -0
- package/dist/kanban/engine.js +208 -0
- package/dist/kanban/engine.js.map +1 -0
- package/dist/kanban/types.d.ts +19 -0
- package/dist/kanban/types.js +9 -1
- package/dist/kanban/types.js.map +1 -1
- package/dist/machina/render-html.js +4 -2
- package/dist/machina/render-html.js.map +1 -1
- package/dist/machina/render-terminal.js +11 -4
- package/dist/machina/render-terminal.js.map +1 -1
- package/dist/machina/repair.d.ts +23 -0
- package/dist/machina/repair.js +98 -0
- package/dist/machina/repair.js.map +1 -0
- package/dist/machina/spec.js +12 -12
- package/dist/machina/spec.js.map +1 -1
- package/dist/machina/verify.d.ts +13 -1
- package/dist/machina/verify.js +12 -2
- package/dist/machina/verify.js.map +1 -1
- package/dist/mining/extract.d.ts +34 -0
- package/dist/mining/extract.js +229 -0
- package/dist/mining/extract.js.map +1 -0
- package/dist/mining/refine.d.ts +28 -0
- package/dist/mining/refine.js +256 -0
- package/dist/mining/refine.js.map +1 -0
- package/dist/perception/extractor.js +5 -3
- package/dist/perception/extractor.js.map +1 -1
- package/dist/perception/graph-store.d.ts +0 -11
- package/dist/perception/graph-store.js +0 -33
- package/dist/perception/graph-store.js.map +1 -1
- package/dist/perception/index.d.ts +1 -1
- package/dist/perception/index.js +1 -2
- package/dist/perception/index.js.map +1 -1
- package/dist/plugins/commands.d.ts +38 -0
- package/dist/plugins/commands.js +134 -0
- package/dist/plugins/commands.js.map +1 -0
- package/dist/plugins/frontmatter.d.ts +14 -0
- package/dist/plugins/frontmatter.js +78 -0
- package/dist/plugins/frontmatter.js.map +1 -0
- package/dist/plugins/hooks.d.ts +12 -0
- package/dist/plugins/hooks.js +148 -0
- package/dist/plugins/hooks.js.map +1 -0
- package/dist/plugins/loader.d.ts +7 -0
- package/dist/plugins/loader.js +255 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/market.d.ts +23 -0
- package/dist/plugins/market.js +281 -0
- package/dist/plugins/market.js.map +1 -0
- package/dist/plugins/types.d.ts +90 -0
- package/dist/plugins/types.js +20 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/providers/anthropic-oauth-draft.d.ts +119 -0
- package/dist/providers/anthropic-oauth-draft.js +414 -0
- package/dist/providers/anthropic-oauth-draft.js.map +1 -0
- package/dist/providers/anthropic.d.ts +4 -1
- package/dist/providers/anthropic.js +35 -7
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/factory.d.ts +43 -19
- package/dist/providers/factory.js +183 -129
- package/dist/providers/factory.js.map +1 -1
- package/dist/providers/google.js +9 -22
- package/dist/providers/google.js.map +1 -1
- package/dist/providers/live-models.d.ts +23 -0
- package/dist/providers/live-models.js +145 -0
- package/dist/providers/live-models.js.map +1 -0
- package/dist/providers/openai-compatible.d.ts +1 -12
- package/dist/providers/openai-compatible.js +71 -108
- package/dist/providers/openai-compatible.js.map +1 -1
- package/dist/providers/resilient-factory.js +1 -1
- package/dist/providers/resilient-factory.js.map +1 -1
- package/dist/repl/queue.d.ts +22 -0
- package/dist/repl/queue.js +165 -0
- package/dist/repl/queue.js.map +1 -0
- package/dist/repl/side-channel.d.ts +23 -0
- package/dist/repl/side-channel.js +63 -0
- package/dist/repl/side-channel.js.map +1 -0
- package/dist/research/council.d.ts +2 -0
- package/dist/research/council.js +29 -4
- package/dist/research/council.js.map +1 -1
- package/dist/ruby/alternator.d.ts +11 -30
- package/dist/ruby/alternator.js +59 -38
- package/dist/ruby/alternator.js.map +1 -1
- package/dist/ruby/episode-capture.d.ts +0 -10
- package/dist/ruby/episode-capture.js +0 -33
- package/dist/ruby/episode-capture.js.map +1 -1
- package/dist/ruby/types.js +1 -1
- package/dist/ruby/types.js.map +1 -1
- package/dist/safety/path-jail.d.ts +17 -0
- package/dist/safety/path-jail.js +100 -0
- package/dist/safety/path-jail.js.map +1 -0
- package/dist/safety/permissions.d.ts +12 -21
- package/dist/safety/permissions.js +81 -216
- package/dist/safety/permissions.js.map +1 -1
- package/dist/safety/ssrf.d.ts +29 -0
- package/dist/safety/ssrf.js +185 -0
- package/dist/safety/ssrf.js.map +1 -0
- package/dist/server/index.js +64 -10
- package/dist/server/index.js.map +1 -1
- package/dist/setup/first-run.d.ts +0 -24
- package/dist/setup/first-run.js +10 -344
- package/dist/setup/first-run.js.map +1 -1
- package/dist/setup/key-store.d.ts +12 -0
- package/dist/setup/key-store.js +108 -0
- package/dist/setup/key-store.js.map +1 -0
- package/dist/setup/provider-registry.js +31 -18
- package/dist/setup/provider-registry.js.map +1 -1
- package/dist/setup/provider-test.d.ts +7 -0
- package/dist/setup/provider-test.js +73 -10
- package/dist/setup/provider-test.js.map +1 -1
- package/dist/setup/provider-wizard.d.ts +4 -1
- package/dist/setup/provider-wizard.js +92 -26
- package/dist/setup/provider-wizard.js.map +1 -1
- package/dist/setup/xiaomi.d.ts +1 -1
- package/dist/setup/xiaomi.js +3 -3
- package/dist/setup/xiaomi.js.map +1 -1
- package/dist/tools/browser.js +14 -10
- package/dist/tools/browser.js.map +1 -1
- package/dist/tools/clipboard.js +7 -1
- package/dist/tools/clipboard.js.map +1 -1
- package/dist/tools/dictate.d.ts +60 -0
- package/dist/tools/dictate.js +983 -0
- package/dist/tools/dictate.js.map +1 -0
- package/dist/tools/dictate_patched.js +1057 -0
- package/dist/tools/edit-file.js +10 -2
- package/dist/tools/edit-file.js.map +1 -1
- package/dist/tools/http-request.js +14 -4
- package/dist/tools/http-request.js.map +1 -1
- package/dist/tools/image-read.js +34 -2
- package/dist/tools/image-read.js.map +1 -1
- package/dist/tools/index.d.ts +16 -1
- package/dist/tools/index.js +59 -8
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/mcp.js +12 -0
- package/dist/tools/mcp.js.map +1 -1
- package/dist/tools/read-file.js +10 -14
- package/dist/tools/read-file.js.map +1 -1
- package/dist/tools/telegram-audio-policy.d.ts +30 -0
- package/dist/tools/telegram-audio-policy.js +49 -0
- package/dist/tools/telegram-audio-policy.js.map +1 -0
- package/dist/tools/telegram-bot.js +1136 -537
- package/dist/tools/telegram-bot.js.map +1 -1
- package/dist/tools/telegram-voice.d.ts +18 -5
- package/dist/tools/telegram-voice.js +54 -12
- package/dist/tools/telegram-voice.js.map +1 -1
- package/dist/tools/telegram.d.ts +3 -3
- package/dist/tools/telegram.js +5 -84
- package/dist/tools/telegram.js.map +1 -1
- package/dist/tools/tools.d.ts +2 -14
- package/dist/tools/tools.js +79 -144
- package/dist/tools/tools.js.map +1 -1
- package/dist/tools/web-fetch.js +39 -7
- package/dist/tools/web-fetch.js.map +1 -1
- package/dist/tools/web-search.d.ts +0 -20
- package/dist/tools/web-search.js +40 -137
- package/dist/tools/web-search.js.map +1 -1
- package/dist/util/errors.js +1 -15
- package/dist/util/errors.js.map +1 -1
- package/dist/util/json-repair.d.ts +11 -0
- package/dist/util/json-repair.js +31 -0
- package/dist/util/json-repair.js.map +1 -0
- package/dist/util/rate-limiter.js +2 -8
- package/dist/util/rate-limiter.js.map +1 -1
- package/dist/viz/index.js +793 -792
- package/dist/viz/index.js.map +1 -1
- package/package.json +12 -32
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compactor.js","sourceRoot":"","sources":["../../src/agent/compactor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"compactor.js","sourceRoot":"","sources":["../../src/agent/compactor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { LLMProvider, HistoryMessage } from '../providers/types.js';
|
|
2
|
+
import type { Episode } from '../dream/episode.js';
|
|
3
|
+
export interface ConfessionResult {
|
|
4
|
+
path: string;
|
|
5
|
+
episodeId: string;
|
|
6
|
+
tokensSpent: number;
|
|
7
|
+
tokensBurned: number;
|
|
8
|
+
lesson: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Find the most recent episode that exceeded the token threshold.
|
|
12
|
+
*/
|
|
13
|
+
export declare function findEpisodeToConfess(root: string, threshold?: number): Episode | null;
|
|
14
|
+
/**
|
|
15
|
+
* Run confession on a specific episode or the most recent high-cost one.
|
|
16
|
+
* Returns the confession result with the extracted permanent lesson.
|
|
17
|
+
*/
|
|
18
|
+
export declare function runConfession(opts: {
|
|
19
|
+
projectRoot: string;
|
|
20
|
+
episodeId?: string;
|
|
21
|
+
provider: LLMProvider;
|
|
22
|
+
threshold?: number;
|
|
23
|
+
history?: HistoryMessage[];
|
|
24
|
+
}): Promise<ConfessionResult>;
|
|
25
|
+
/**
|
|
26
|
+
* Load the most recent confessions for injection into the system prompt.
|
|
27
|
+
* Only returns confessions from the last 30 days, capped at 3.
|
|
28
|
+
*/
|
|
29
|
+
export declare function loadConfessionsSection(maxChars?: number): string;
|
|
30
|
+
/** List all confessions for a project */
|
|
31
|
+
export declare function listConfessions(): {
|
|
32
|
+
file: string;
|
|
33
|
+
tokens: number;
|
|
34
|
+
lesson: string;
|
|
35
|
+
}[];
|
|
@@ -0,0 +1,296 @@
|
|
|
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.findEpisodeToConfess = findEpisodeToConfess;
|
|
37
|
+
exports.runConfession = runConfession;
|
|
38
|
+
exports.loadConfessionsSection = loadConfessionsSection;
|
|
39
|
+
exports.listConfessions = listConfessions;
|
|
40
|
+
/**
|
|
41
|
+
* :confess — post-mortem root-cause analysis for high-cost episodes.
|
|
42
|
+
*
|
|
43
|
+
* Triggered manually (REPL: :confess) or automatically when a task exceeds
|
|
44
|
+
* the token threshold. Unlike the normal memory loop (passive → dream → reconcile),
|
|
45
|
+
* confession is ACTIVE: it dedicates a separate LLM call to deep analysis of
|
|
46
|
+
* the full conversation history, extracts a permanent lesson, and injects it
|
|
47
|
+
* into the system prompt with elevated priority so the same mistake is never
|
|
48
|
+
* repeated.
|
|
49
|
+
*
|
|
50
|
+
* Inspired by Catholic confession — acknowledge the failing, examine it
|
|
51
|
+
* deeply, extract the lesson, and carry that lesson forward permanently.
|
|
52
|
+
* Yes, it costs MORE tokens. But 20K now prevents 10M later.
|
|
53
|
+
*/
|
|
54
|
+
const fs = __importStar(require("fs"));
|
|
55
|
+
const path = __importStar(require("path"));
|
|
56
|
+
const os = __importStar(require("os"));
|
|
57
|
+
const episode_js_1 = require("../dream/episode.js");
|
|
58
|
+
const CONFESSIONS_DIR = path.join(os.homedir(), '.aura', 'confessions');
|
|
59
|
+
const DEFAULT_THRESHOLD = 500_000; // 500K tokens
|
|
60
|
+
const MAX_HISTORY_MESSAGES = 80; // cap for confession context
|
|
61
|
+
function slugify(text) {
|
|
62
|
+
return text.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '').slice(0, 50) || 'episode';
|
|
63
|
+
}
|
|
64
|
+
const CONFESSOR_SYSTEM = [
|
|
65
|
+
'You are Aura\'s confessor — a forensic analyst examining a high-cost agent episode.',
|
|
66
|
+
'Your job is NOT to summarise. Your job is to find the ROOT CAUSE of the waste.',
|
|
67
|
+
'',
|
|
68
|
+
'You receive:',
|
|
69
|
+
' 1. Episode metadata (task, model, tokens burned, duration, success/fail)',
|
|
70
|
+
' 2. The FULL conversation history from that session',
|
|
71
|
+
'',
|
|
72
|
+
'Analyse and respond with EXACTLY three sections (Markdown headers):',
|
|
73
|
+
'',
|
|
74
|
+
'## Root cause',
|
|
75
|
+
'What specifically caused the token waste? Was it a logic loop? A model',
|
|
76
|
+
'that doesn\'t have a stopping condition? Repeated tool calls that kept',
|
|
77
|
+
'returning the same empty result? A prompt that was too open-ended?',
|
|
78
|
+
'Be surgically specific — name exact tools, patterns, or model behaviours.',
|
|
79
|
+
'',
|
|
80
|
+
'## The pattern',
|
|
81
|
+
'What class of mistake is this? (e.g. "model continues tool-calling after',
|
|
82
|
+
'tool returns empty results because no early-return check exists", or',
|
|
83
|
+
'"prompt ambiguity causes the agent to re-read the same file 14 times").',
|
|
84
|
+
'Name the pattern so it can be recognised in the future.',
|
|
85
|
+
'',
|
|
86
|
+
'## Permanent lesson',
|
|
87
|
+
'A SINGLE sentence (max 160 chars) that, if injected into every future',
|
|
88
|
+
'session, would prevent this exact class of waste from ever happening again.',
|
|
89
|
+
'Make it concrete, specific, and actionable. Start with "NEVER" or "ALWAYS".',
|
|
90
|
+
'',
|
|
91
|
+
'Respond with ONLY these three sections. No preamble, no meta-commentary.',
|
|
92
|
+
].join('\n');
|
|
93
|
+
function buildConfessionPrompt(ep, historySummary) {
|
|
94
|
+
const lines = [
|
|
95
|
+
`## Episode to confess`,
|
|
96
|
+
'',
|
|
97
|
+
`- **Task:** ${ep.task}`,
|
|
98
|
+
`- **Model:** ${ep.model}`,
|
|
99
|
+
`- **Tokens burned:** ${ep.tokens.toLocaleString()}`,
|
|
100
|
+
`- **Duration:** ${Math.round(ep.durationMs / 1000)}s`,
|
|
101
|
+
`- **Outcome:** ${ep.success ? 'success' : 'FAILED'}`,
|
|
102
|
+
'',
|
|
103
|
+
`## Conversation history`,
|
|
104
|
+
'',
|
|
105
|
+
historySummary,
|
|
106
|
+
'',
|
|
107
|
+
`Analyse this episode. What went wrong? What pattern is this? What permanent lesson prevents it forever?`,
|
|
108
|
+
];
|
|
109
|
+
return lines.join('\n');
|
|
110
|
+
}
|
|
111
|
+
function summariseHistory(history) {
|
|
112
|
+
const capped = history.slice(-MAX_HISTORY_MESSAGES);
|
|
113
|
+
return capped.map(m => {
|
|
114
|
+
if (m.role === 'user') {
|
|
115
|
+
return `**USER:** ${m.content.slice(0, 200)}`;
|
|
116
|
+
}
|
|
117
|
+
if (m.role === 'assistant') {
|
|
118
|
+
const text = m.content.slice(0, 300);
|
|
119
|
+
if (m.toolCalls && m.toolCalls.length > 0) {
|
|
120
|
+
const tools = m.toolCalls.map(t => t.name).join(', ');
|
|
121
|
+
return `**AURA** (calls: ${tools}): ${text}`;
|
|
122
|
+
}
|
|
123
|
+
return `**AURA:** ${text}`;
|
|
124
|
+
}
|
|
125
|
+
if (m.role === 'tool_result') {
|
|
126
|
+
const first = m.results[0];
|
|
127
|
+
if (!first)
|
|
128
|
+
return ' → tool result: (empty)';
|
|
129
|
+
const text = first.content.slice(0, 150);
|
|
130
|
+
return ` → tool result: ${text}`;
|
|
131
|
+
}
|
|
132
|
+
return `[unknown role]: ...`;
|
|
133
|
+
}).join('\n');
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Load the most recent session history for a project (the one closest to
|
|
137
|
+
* the episode's timestamp). Best-effort — if no session matches, returns [].
|
|
138
|
+
*/
|
|
139
|
+
function findRecentSessionHistory(projectRoot, sinceMs) {
|
|
140
|
+
try {
|
|
141
|
+
const safe = projectRoot.replace(/[^a-zA-Z0-9_-]/g, '_').slice(0, 80);
|
|
142
|
+
const dir = path.join(os.homedir(), '.aura', 'sessions', safe);
|
|
143
|
+
if (!fs.existsSync(dir))
|
|
144
|
+
return [];
|
|
145
|
+
const files = fs.readdirSync(dir)
|
|
146
|
+
.filter(f => f.endsWith('.json') && f !== 'latest.json')
|
|
147
|
+
.map(f => ({ name: f, mtime: fs.statSync(path.join(dir, f)).mtimeMs }))
|
|
148
|
+
.filter(f => f.mtime >= sinceMs - 3600_000) // within 1 hour before episode
|
|
149
|
+
.sort((a, b) => b.mtime - a.mtime);
|
|
150
|
+
if (files.length === 0)
|
|
151
|
+
return [];
|
|
152
|
+
const raw = fs.readFileSync(path.join(dir, files[0].name), 'utf8');
|
|
153
|
+
const parsed = JSON.parse(raw);
|
|
154
|
+
return Array.isArray(parsed.history) ? parsed.history : [];
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
return [];
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Find the most recent episode that exceeded the token threshold.
|
|
162
|
+
*/
|
|
163
|
+
function findEpisodeToConfess(root, threshold = DEFAULT_THRESHOLD) {
|
|
164
|
+
const episodes = (0, episode_js_1.listEpisodes)(root);
|
|
165
|
+
if (episodes.length === 0)
|
|
166
|
+
return null;
|
|
167
|
+
// Find the most recent episode at or above threshold
|
|
168
|
+
for (let i = episodes.length - 1; i >= 0; i--) {
|
|
169
|
+
if (episodes[i].tokens >= threshold)
|
|
170
|
+
return episodes[i];
|
|
171
|
+
}
|
|
172
|
+
return null;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Run confession on a specific episode or the most recent high-cost one.
|
|
176
|
+
* Returns the confession result with the extracted permanent lesson.
|
|
177
|
+
*/
|
|
178
|
+
async function runConfession(opts) {
|
|
179
|
+
const { projectRoot, episodeId, provider, threshold = DEFAULT_THRESHOLD } = opts;
|
|
180
|
+
// Find the episode
|
|
181
|
+
let ep = null;
|
|
182
|
+
if (episodeId) {
|
|
183
|
+
ep = (0, episode_js_1.listEpisodes)(projectRoot).find(e => e.id === episodeId) ?? null;
|
|
184
|
+
if (!ep)
|
|
185
|
+
throw new Error(`Episode not found: ${episodeId}`);
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
ep = findEpisodeToConfess(projectRoot, threshold);
|
|
189
|
+
if (!ep)
|
|
190
|
+
throw new Error(`No episode found with tokens >= ${threshold.toLocaleString()}. Use :confess <id> to confess a specific episode.`);
|
|
191
|
+
}
|
|
192
|
+
// Load history
|
|
193
|
+
const history = opts.history ?? findRecentSessionHistory(projectRoot, ep.timestamp);
|
|
194
|
+
const historySummary = history.length > 0
|
|
195
|
+
? summariseHistory(history)
|
|
196
|
+
: `_(full conversation history not available — analysing from episode metadata only. Model: ${ep.model}, tokens: ${ep.tokens}, task: "${ep.task.slice(0, 150)}")_`;
|
|
197
|
+
// Run the confessor
|
|
198
|
+
const prompt = buildConfessionPrompt(ep, historySummary);
|
|
199
|
+
const response = await provider.complete(CONFESSOR_SYSTEM, [{ role: 'user', content: prompt }], []);
|
|
200
|
+
const body = (response.text ?? '').trim() || '_Confession produced no output._';
|
|
201
|
+
// Extract the permanent lesson line
|
|
202
|
+
const lessonMatch = body.match(/## Permanent lesson\n\n?(.+?)(?:\n|$)/s);
|
|
203
|
+
const lesson = lessonMatch?.[1]?.trim() || '_No lesson extracted._';
|
|
204
|
+
// Save
|
|
205
|
+
fs.mkdirSync(CONFESSIONS_DIR, { recursive: true });
|
|
206
|
+
const date = new Date().toISOString().slice(0, 10);
|
|
207
|
+
const slug = slugify(ep.task);
|
|
208
|
+
const fileName = `${date}-${slug}.md`;
|
|
209
|
+
const filePath = path.join(CONFESSIONS_DIR, fileName);
|
|
210
|
+
const md = [
|
|
211
|
+
`# Confession: ${ep.task.slice(0, 80)}`,
|
|
212
|
+
'',
|
|
213
|
+
`- **Episode:** ${ep.id}`,
|
|
214
|
+
`- **Model:** ${ep.model}`,
|
|
215
|
+
`- **Tokens burned:** ${ep.tokens.toLocaleString()}`,
|
|
216
|
+
`- **Duration:** ${Math.round(ep.durationMs / 1000)}s`,
|
|
217
|
+
`- **Outcome:** ${ep.success ? 'success' : 'FAILED'}`,
|
|
218
|
+
`- **Confessed:** ${new Date().toISOString()}`,
|
|
219
|
+
'',
|
|
220
|
+
body,
|
|
221
|
+
].join('\n');
|
|
222
|
+
fs.writeFileSync(filePath, md);
|
|
223
|
+
return {
|
|
224
|
+
path: filePath,
|
|
225
|
+
episodeId: ep.id,
|
|
226
|
+
tokensSpent: response.usage ? (response.usage.inputTokens + response.usage.outputTokens) : 0,
|
|
227
|
+
tokensBurned: ep.tokens,
|
|
228
|
+
lesson,
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Load the most recent confessions for injection into the system prompt.
|
|
233
|
+
* Only returns confessions from the last 30 days, capped at 3.
|
|
234
|
+
*/
|
|
235
|
+
function loadConfessionsSection(maxChars = 2000) {
|
|
236
|
+
try {
|
|
237
|
+
if (!fs.existsSync(CONFESSIONS_DIR))
|
|
238
|
+
return '';
|
|
239
|
+
const thirtyDaysAgo = Date.now() - 30 * 24 * 60 * 60 * 1000;
|
|
240
|
+
const files = fs.readdirSync(CONFESSIONS_DIR)
|
|
241
|
+
.filter(f => f.endsWith('.md'))
|
|
242
|
+
.map(f => ({
|
|
243
|
+
name: f,
|
|
244
|
+
path: path.join(CONFESSIONS_DIR, f),
|
|
245
|
+
mtime: fs.statSync(path.join(CONFESSIONS_DIR, f)).mtimeMs,
|
|
246
|
+
}))
|
|
247
|
+
.filter(f => f.mtime > thirtyDaysAgo)
|
|
248
|
+
.sort((a, b) => b.mtime - a.mtime)
|
|
249
|
+
.slice(0, 3);
|
|
250
|
+
if (files.length === 0)
|
|
251
|
+
return '';
|
|
252
|
+
const lessons = [];
|
|
253
|
+
let used = 0;
|
|
254
|
+
for (const f of files) {
|
|
255
|
+
const content = fs.readFileSync(f.path, 'utf8');
|
|
256
|
+
const lessonMatch = content.match(/## Permanent lesson\n\n?(.+?)(?:\n|$)/);
|
|
257
|
+
if (lessonMatch) {
|
|
258
|
+
const lesson = lessonMatch[1].trim();
|
|
259
|
+
if (used + lesson.length > maxChars)
|
|
260
|
+
break;
|
|
261
|
+
lessons.push(`- **[CONFESSED]** ${lesson}`);
|
|
262
|
+
used += lesson.length;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
return lessons.length > 0
|
|
266
|
+
? `\n### Confessions (lessons extracted from high-cost failures)\n${lessons.join('\n')}\n`
|
|
267
|
+
: '';
|
|
268
|
+
}
|
|
269
|
+
catch {
|
|
270
|
+
return '';
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
/** List all confessions for a project */
|
|
274
|
+
function listConfessions() {
|
|
275
|
+
try {
|
|
276
|
+
if (!fs.existsSync(CONFESSIONS_DIR))
|
|
277
|
+
return [];
|
|
278
|
+
return fs.readdirSync(CONFESSIONS_DIR)
|
|
279
|
+
.filter(f => f.endsWith('.md'))
|
|
280
|
+
.map(f => {
|
|
281
|
+
const content = fs.readFileSync(path.join(CONFESSIONS_DIR, f), 'utf8');
|
|
282
|
+
const tokMatch = content.match(/- \*\*Tokens burned:\*\* ([\d,]+)/);
|
|
283
|
+
const lessonMatch = content.match(/## Permanent lesson\n\n?(.+?)(?:\n|$)/);
|
|
284
|
+
return {
|
|
285
|
+
file: f,
|
|
286
|
+
tokens: tokMatch ? parseInt(tokMatch[1].replace(/,/g, ''), 10) : 0,
|
|
287
|
+
lesson: lessonMatch?.[1]?.trim() || '_no lesson_',
|
|
288
|
+
};
|
|
289
|
+
})
|
|
290
|
+
.sort((a, b) => b.tokens - a.tokens);
|
|
291
|
+
}
|
|
292
|
+
catch {
|
|
293
|
+
return [];
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
//# sourceMappingURL=confess.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confess.js","sourceRoot":"","sources":["../../src/agent/confess.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/context.d.ts
CHANGED
|
@@ -8,10 +8,6 @@ export interface ProjectContext {
|
|
|
8
8
|
config: string;
|
|
9
9
|
recentCommits: string;
|
|
10
10
|
graphSummary?: string;
|
|
11
|
-
/** Reconciled memory from dreams/.reconciled.md — the agent's current
|
|
12
|
-
* beliefs about this project, distilled from past work sessions.
|
|
13
|
-
* Truncated to ~2000 chars to stay within token budget. */
|
|
14
|
-
reconciledMemory?: string;
|
|
15
11
|
}
|
|
16
12
|
export declare function loadProjectContext(cwd: string): Promise<ProjectContext>;
|
|
17
13
|
export declare function loadGraphSummary(root: string): string | undefined;
|
package/dist/agent/context.js
CHANGED
|
@@ -53,7 +53,6 @@ async function loadProjectContext(cwd) {
|
|
|
53
53
|
config: readConfig(root),
|
|
54
54
|
recentCommits: readGitLog(root),
|
|
55
55
|
graphSummary: loadGraphSummary(root),
|
|
56
|
-
reconciledMemory: loadReconciledMemory(root),
|
|
57
56
|
};
|
|
58
57
|
}
|
|
59
58
|
function loadGraphSummary(root) {
|
|
@@ -77,43 +76,6 @@ function loadGraphSummary(root) {
|
|
|
77
76
|
return undefined;
|
|
78
77
|
}
|
|
79
78
|
}
|
|
80
|
-
/**
|
|
81
|
-
* Load the reconciled memory projection from `dreams/.reconciled.md`.
|
|
82
|
-
*
|
|
83
|
-
* This file is written by the dream reconciliation system (reconcile.ts)
|
|
84
|
-
* after ≥3 dreams exist. It contains the agent's current distilled beliefs
|
|
85
|
-
* about the project — lessons, patterns, open threads — with annotations
|
|
86
|
-
* showing where each belief came from and how it evolved.
|
|
87
|
-
*
|
|
88
|
-
* Returns undefined if the file doesn't exist (no dreams yet, or <3 dreams).
|
|
89
|
-
* Truncates at 2000 chars to keep the system prompt within token budget.
|
|
90
|
-
*/
|
|
91
|
-
function loadReconciledMemory(root) {
|
|
92
|
-
const reconciledPath = path.join(root, 'dreams', '.reconciled.md');
|
|
93
|
-
if (!fs.existsSync(reconciledPath))
|
|
94
|
-
return undefined;
|
|
95
|
-
try {
|
|
96
|
-
const raw = fs.readFileSync(reconciledPath, 'utf8');
|
|
97
|
-
if (!raw.trim())
|
|
98
|
-
return undefined;
|
|
99
|
-
// Strip YAML frontmatter for the prompt (metadata is useful for :rem
|
|
100
|
-
// display but wastes tokens in the system prompt).
|
|
101
|
-
let content = raw;
|
|
102
|
-
if (content.startsWith('---')) {
|
|
103
|
-
const endIdx = content.indexOf('---', 3);
|
|
104
|
-
if (endIdx > 0) {
|
|
105
|
-
content = content.slice(endIdx + 3).trim();
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
if (content.length > 2000) {
|
|
109
|
-
content = content.slice(0, 2000) + '\n\n[...truncated]';
|
|
110
|
-
}
|
|
111
|
-
return content;
|
|
112
|
-
}
|
|
113
|
-
catch {
|
|
114
|
-
return undefined;
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
79
|
function detectProjectName(root) {
|
|
118
80
|
// Try package.json
|
|
119
81
|
const pkg = path.join(root, 'package.json');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/agent/context.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/agent/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Domain expertise injection.
|
|
3
|
+
*
|
|
4
|
+
* Cheap keyword classification (same philosophy as loop-profile.ts —
|
|
5
|
+
* no LLM call spent deciding this) that appends a concrete, domain-specific
|
|
6
|
+
* checklist to the system prompt. This is Phase 1 of mixture-of-agents:
|
|
7
|
+
* single-agent, prompt-level expertise. Phase 2 (parallel domain sub-agents
|
|
8
|
+
* via spawn_task, for exploratory-shaped tasks) builds on top of this.
|
|
9
|
+
*/
|
|
10
|
+
export type Domain = 'frontend' | 'backend' | 'database' | 'security' | 'devops' | 'testing' | 'algorithms';
|
|
11
|
+
/**
|
|
12
|
+
* Score each domain by keyword hits and return the top matches (max 2,
|
|
13
|
+
* to keep the prompt lean). Returns [] when nothing matches — most tasks
|
|
14
|
+
* don't need domain framing beyond the base system prompt.
|
|
15
|
+
*/
|
|
16
|
+
export declare function classifyDomains(task: string): Domain[];
|
|
17
|
+
/**
|
|
18
|
+
* Build the domain-expertise prompt block for a task. Empty string if
|
|
19
|
+
* no domain matched — callers should skip the section entirely rather
|
|
20
|
+
* than inject an empty heading.
|
|
21
|
+
*/
|
|
22
|
+
export declare function getDomainPromptBlock(task: string): string;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Domain expertise injection.
|
|
4
|
+
*
|
|
5
|
+
* Cheap keyword classification (same philosophy as loop-profile.ts —
|
|
6
|
+
* no LLM call spent deciding this) that appends a concrete, domain-specific
|
|
7
|
+
* checklist to the system prompt. This is Phase 1 of mixture-of-agents:
|
|
8
|
+
* single-agent, prompt-level expertise. Phase 2 (parallel domain sub-agents
|
|
9
|
+
* via spawn_task, for exploratory-shaped tasks) builds on top of this.
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.classifyDomains = classifyDomains;
|
|
13
|
+
exports.getDomainPromptBlock = getDomainPromptBlock;
|
|
14
|
+
const DOMAIN_SIGNALS = {
|
|
15
|
+
frontend: [
|
|
16
|
+
'component', 'react', 'vue', 'svelte', 'css', 'ui', 'button', 'style',
|
|
17
|
+
'layout', 'responsive', 'dom', 'render', 'accessibility', 'a11y',
|
|
18
|
+
],
|
|
19
|
+
backend: [
|
|
20
|
+
'api', 'endpoint', 'route', 'server', 'controller', 'middleware',
|
|
21
|
+
'request', 'response', 'rest', 'graphql', 'webhook',
|
|
22
|
+
],
|
|
23
|
+
database: [
|
|
24
|
+
'database', 'query', 'migration', 'schema', 'sql', 'index', 'table',
|
|
25
|
+
'orm', 'transaction', 'postgres', 'mysql', 'sqlite', 'nosql',
|
|
26
|
+
],
|
|
27
|
+
security: [
|
|
28
|
+
'auth', 'security', 'vulnerability', 'sanitize', 'injection', 'xss',
|
|
29
|
+
'csrf', 'password', 'token', 'encrypt', 'permission', 'oauth',
|
|
30
|
+
'credential', 'secret',
|
|
31
|
+
],
|
|
32
|
+
devops: [
|
|
33
|
+
'deploy', 'ci/cd', 'docker', 'pipeline', 'kubernetes', 'infra',
|
|
34
|
+
'terraform', 'systemd', 'container', 'github actions', 'workflow file',
|
|
35
|
+
],
|
|
36
|
+
testing: [
|
|
37
|
+
'test', 'spec', 'coverage', 'mock', 'assertion', 'e2e',
|
|
38
|
+
'unit test', 'integration test', 'fixture',
|
|
39
|
+
],
|
|
40
|
+
algorithms: [
|
|
41
|
+
'algorithm', 'performance', 'optimize', 'complexity', 'big o',
|
|
42
|
+
'sort', 'search', 'cache', 'memoize', 'time limit', 'benchmark',
|
|
43
|
+
],
|
|
44
|
+
};
|
|
45
|
+
const DOMAIN_EXPERTISE = {
|
|
46
|
+
frontend: `**Frontend expertise:**
|
|
47
|
+
- Match existing component patterns (class vs functional, prop conventions) before introducing new ones.
|
|
48
|
+
- Check for accessibility basics: semantic elements, alt text, keyboard navigation, focus management.
|
|
49
|
+
- Verify responsive behavior isn't broken by hardcoded pixel values where the codebase uses relative units elsewhere.
|
|
50
|
+
- Don't introduce a new state-management pattern when one already exists in the project.`,
|
|
51
|
+
backend: `**Backend expertise:**
|
|
52
|
+
- Validate and sanitize all external input at the boundary — never trust request bodies, query params, or headers.
|
|
53
|
+
- Match existing error-response shape and status-code conventions; don't invent a new error format.
|
|
54
|
+
- Check for N+1 query patterns when adding data fetching inside a loop.
|
|
55
|
+
- Idempotency matters for anything that can be retried (webhooks, payment endpoints, queue consumers).`,
|
|
56
|
+
database: `**Database expertise:**
|
|
57
|
+
- Every migration must be reversible — write the down migration, don't skip it.
|
|
58
|
+
- Check whether a new query needs an index before it ships, not after a slow-query report.
|
|
59
|
+
- Wrap multi-step writes in a transaction; a partial write is a data-integrity bug.
|
|
60
|
+
- Never generate a migration that silently drops or truncates a column with existing data without flagging it explicitly.`,
|
|
61
|
+
security: `**Security expertise:**
|
|
62
|
+
- Never log secrets, tokens, or passwords, even at debug level.
|
|
63
|
+
- Parameterize all queries — string-concatenated SQL is an injection vector regardless of "trusted" input.
|
|
64
|
+
- Check auth/permission boundaries on every new endpoint or route, not just the ones the task explicitly mentions.
|
|
65
|
+
- Treat any credential found in code, commits, or chat as compromised — flag it once, recommend rotation, don't just fix the immediate leak.`,
|
|
66
|
+
devops: `**DevOps expertise:**
|
|
67
|
+
- Pin dependency and base-image versions explicitly; don't introduce floating tags (":latest") into pipeline or container configs.
|
|
68
|
+
- Any change to a CI/CD workflow file should be validated against what actually breaks the build, not just syntax-checked.
|
|
69
|
+
- Secrets belong in the secrets manager / env injection, never hardcoded into a workflow or Dockerfile.
|
|
70
|
+
- Changes to deploy scripts should be idempotent — running twice shouldn't double-apply anything.`,
|
|
71
|
+
testing: `**Testing expertise:**
|
|
72
|
+
- A test that can't fail (no real assertion, or asserts on a mock's own return value) is worse than no test.
|
|
73
|
+
- Match the existing test framework and assertion style already used in the file/project — don't mix frameworks.
|
|
74
|
+
- Cover the actual bug/edge case the task describes, not just the happy path.
|
|
75
|
+
- Flaky-looking tests (timing-dependent, order-dependent) should be flagged, not silently retried into passing.`,
|
|
76
|
+
algorithms: `**Algorithms/performance expertise:**
|
|
77
|
+
- State the actual time/space complexity of a proposed change if it touches a hot path or large input.
|
|
78
|
+
- Don't optimize prematurely — profile or reason about the actual bottleneck before restructuring.
|
|
79
|
+
- Watch for accidental O(n²) from nested iteration over the same collection (e.g. .includes() inside a .map()).
|
|
80
|
+
- Memoization/caching needs an explicit invalidation story, not just an add.`,
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* Score each domain by keyword hits and return the top matches (max 2,
|
|
84
|
+
* to keep the prompt lean). Returns [] when nothing matches — most tasks
|
|
85
|
+
* don't need domain framing beyond the base system prompt.
|
|
86
|
+
*/
|
|
87
|
+
function classifyDomains(task) {
|
|
88
|
+
const lower = task.toLowerCase();
|
|
89
|
+
const scored = Object.keys(DOMAIN_SIGNALS)
|
|
90
|
+
.map((domain) => ({
|
|
91
|
+
domain,
|
|
92
|
+
score: DOMAIN_SIGNALS[domain].filter((signal) => lower.includes(signal)).length,
|
|
93
|
+
}))
|
|
94
|
+
.filter((d) => d.score > 0)
|
|
95
|
+
.sort((a, b) => b.score - a.score);
|
|
96
|
+
return scored.slice(0, 2).map((d) => d.domain);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Build the domain-expertise prompt block for a task. Empty string if
|
|
100
|
+
* no domain matched — callers should skip the section entirely rather
|
|
101
|
+
* than inject an empty heading.
|
|
102
|
+
*/
|
|
103
|
+
function getDomainPromptBlock(task) {
|
|
104
|
+
const domains = classifyDomains(task);
|
|
105
|
+
if (domains.length === 0)
|
|
106
|
+
return '';
|
|
107
|
+
const blocks = domains.map((d) => DOMAIN_EXPERTISE[d]).join('\n\n');
|
|
108
|
+
return `\n## Domain expertise (applies to this task)\n\n${blocks}\n`;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=domain-expertise.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain-expertise.js","sourceRoot":"","sources":["../../src/agent/domain-expertise.ts"],"names":[],"mappings":"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"}
|