augustus-ai-editor 1.0.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/README.md +84 -0
- package/dist/Augustus.d.ts +42 -0
- package/dist/Augustus.d.ts.map +1 -0
- package/dist/Augustus.js +174 -0
- package/dist/Augustus.js.map +1 -0
- package/dist/context/SenateContext.d.ts +31 -0
- package/dist/context/SenateContext.d.ts.map +1 -0
- package/dist/context/SenateContext.js +209 -0
- package/dist/context/SenateContext.js.map +1 -0
- package/dist/core/ImperialLegion.d.ts +27 -0
- package/dist/core/ImperialLegion.d.ts.map +1 -0
- package/dist/core/ImperialLegion.js +205 -0
- package/dist/core/ImperialLegion.js.map +1 -0
- package/dist/core/SoftBuffer.d.ts +15 -0
- package/dist/core/SoftBuffer.d.ts.map +1 -0
- package/dist/core/SoftBuffer.js +74 -0
- package/dist/core/SoftBuffer.js.map +1 -0
- package/dist/diff/VelvetDiff.d.ts +24 -0
- package/dist/diff/VelvetDiff.d.ts.map +1 -0
- package/dist/diff/VelvetDiff.js +238 -0
- package/dist/diff/VelvetDiff.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/stream/CaesarStream.d.ts +45 -0
- package/dist/stream/CaesarStream.d.ts.map +1 -0
- package/dist/stream/CaesarStream.js +209 -0
- package/dist/stream/CaesarStream.js.map +1 -0
- package/dist/types/core.types.d.ts +87 -0
- package/dist/types/core.types.d.ts.map +1 -0
- package/dist/types/core.types.js +2 -0
- package/dist/types/core.types.js.map +1 -0
- package/dist/ui/TogaStyler.d.ts +31 -0
- package/dist/ui/TogaStyler.d.ts.map +1 -0
- package/dist/ui/TogaStyler.js +342 -0
- package/dist/ui/TogaStyler.js.map +1 -0
- package/package.json +48 -0
package/README.md
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# Augustus
|
|
2
|
+
|
|
3
|
+
An AI code editor that blends a plush, soft aesthetic with Roman engineering discipline.
|
|
4
|
+
|
|
5
|
+
## Architecture
|
|
6
|
+
|
|
7
|
+
### Core Components
|
|
8
|
+
|
|
9
|
+
- **ImperialLegion** - Manages ModelTacticians and routes commands to AI providers (Anthropic, OpenAI)
|
|
10
|
+
- **SoftBuffer** - Wraps requests to ensure output remains helpful and "plushy" in tone
|
|
11
|
+
- **SenateContext** - Indexes the codebase as "Provinces" and gathers relevant context as a "ConsolidatedScroll"
|
|
12
|
+
- **VelvetDiff** - Generates structural plans where code blocks are "MarbleBricks"
|
|
13
|
+
- **CaesarStream** - Handles streaming data flow for real-time output
|
|
14
|
+
- **TogaStyler** - UI styling with velvet, gold, and marble aesthetics
|
|
15
|
+
|
|
16
|
+
### Output Format
|
|
17
|
+
|
|
18
|
+
The VelvetDiff engine produces JSON streams containing:
|
|
19
|
+
- **The Oracle's Vision** - Reasoning, approach, confidence, and risks
|
|
20
|
+
- **The Edification** - MarbleBricks with specific line changes
|
|
21
|
+
|
|
22
|
+
## Installation
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
cd augustus
|
|
26
|
+
npm install
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Usage
|
|
30
|
+
|
|
31
|
+
```typescript
|
|
32
|
+
import { createAugustus } from 'augustus';
|
|
33
|
+
|
|
34
|
+
const augustus = createAugustus(
|
|
35
|
+
'./my-project',
|
|
36
|
+
process.env.ANTHROPIC_API_KEY,
|
|
37
|
+
process.env.OPENAI_API_KEY
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
await augustus.initialize();
|
|
41
|
+
|
|
42
|
+
const response = await augustus.consult('How can I improve this function?');
|
|
43
|
+
console.log(response.raw);
|
|
44
|
+
|
|
45
|
+
const edits = await augustus.proposeEdits('src/utils.ts', 'Add error handling');
|
|
46
|
+
console.log(JSON.stringify(edits, null, 2));
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Model Tacticians
|
|
50
|
+
|
|
51
|
+
Pre-configured tacticians:
|
|
52
|
+
- **ClaudiusSonnet** - Claude Sonnet (default)
|
|
53
|
+
- **ClaudiusOpus** - Claude Opus
|
|
54
|
+
- **GPTCenturion** - GPT-4o
|
|
55
|
+
- **GPTLegionnaire** - GPT-4o-mini
|
|
56
|
+
|
|
57
|
+
## Configuration
|
|
58
|
+
|
|
59
|
+
```typescript
|
|
60
|
+
const config: AugustusConfig = {
|
|
61
|
+
providers: {
|
|
62
|
+
anthropic: { apiKey: 'your-key' },
|
|
63
|
+
openai: { apiKey: 'your-key' }
|
|
64
|
+
},
|
|
65
|
+
softBuffer: {
|
|
66
|
+
warmthLevel: 0.8,
|
|
67
|
+
gentleCorrection: true,
|
|
68
|
+
encouragementMode: true,
|
|
69
|
+
velvetTone: true
|
|
70
|
+
},
|
|
71
|
+
togaStyle: {
|
|
72
|
+
fontFamily: '"Cormorant Garamond", serif',
|
|
73
|
+
velvetShade: '#4a0e2e',
|
|
74
|
+
goldAccent: '#d4af37',
|
|
75
|
+
marbleBackground: '#f5f5f0'
|
|
76
|
+
},
|
|
77
|
+
provinceIndexPath: './src',
|
|
78
|
+
maxProvincesInScroll: 5
|
|
79
|
+
};
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## License
|
|
83
|
+
|
|
84
|
+
MIT
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { AugustusConfig, VelvetDiffOutput, CaesarStreamChunk, ConsolidatedScroll, Province } from './types/core.types.js';
|
|
2
|
+
interface AugustusResponse {
|
|
3
|
+
raw: string;
|
|
4
|
+
scroll: ConsolidatedScroll;
|
|
5
|
+
styled?: {
|
|
6
|
+
vision: string;
|
|
7
|
+
edification: string;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export declare class Augustus {
|
|
11
|
+
private legion;
|
|
12
|
+
private senate;
|
|
13
|
+
private velvetDiff;
|
|
14
|
+
private togaStyler;
|
|
15
|
+
private config;
|
|
16
|
+
private isIndexed;
|
|
17
|
+
constructor(config: AugustusConfig);
|
|
18
|
+
initialize(): Promise<void>;
|
|
19
|
+
consult(query: string, tacticianName?: string): Promise<AugustusResponse>;
|
|
20
|
+
consultStream(query: string, tacticianName?: string): AsyncGenerator<CaesarStreamChunk>;
|
|
21
|
+
proposeEdits(filePath: string, instruction: string): Promise<VelvetDiffOutput>;
|
|
22
|
+
proposeEditsStream(filePath: string, instruction: string): AsyncGenerator<CaesarStreamChunk>;
|
|
23
|
+
private extractCodeFromResponse;
|
|
24
|
+
styleOutput(output: VelvetDiffOutput): {
|
|
25
|
+
vision: string;
|
|
26
|
+
edification: string;
|
|
27
|
+
css: string;
|
|
28
|
+
};
|
|
29
|
+
getProvince(path: string): Province | undefined;
|
|
30
|
+
getAllProvinces(): Province[];
|
|
31
|
+
reindexProvinces(): Promise<number>;
|
|
32
|
+
selectTactician(name: string): boolean;
|
|
33
|
+
getAvailableTacticians(): string[];
|
|
34
|
+
getStats(): {
|
|
35
|
+
provinceCount: number;
|
|
36
|
+
lastIndexed: Date;
|
|
37
|
+
activeTactician: string | null;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export declare function createAugustus(rootPath: string, anthropicKey?: string, openaiKey?: string): Augustus;
|
|
41
|
+
export {};
|
|
42
|
+
//# sourceMappingURL=Augustus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Augustus.d.ts","sourceRoot":"","sources":["../src/Augustus.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,QAAQ,EACT,MAAM,uBAAuB,CAAC;AAE/B,UAAU,gBAAgB;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;CAClD;AAED,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,SAAS,CAAkB;gBAEvB,MAAM,EAAE,cAAc;IAkB5B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAcxE,aAAa,CAClB,KAAK,EAAE,MAAM,EACb,aAAa,CAAC,EAAE,MAAM,GACrB,cAAc,CAAC,iBAAiB,CAAC;IAe9B,YAAY,CAChB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,gBAAgB,CAAC;IAyCrB,kBAAkB,CACvB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,cAAc,CAAC,iBAAiB,CAAC;IAqCpC,OAAO,CAAC,uBAAuB;IAK/B,WAAW,CAAC,MAAM,EAAE,gBAAgB,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE;IAW3F,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAI/C,eAAe,IAAI,QAAQ,EAAE;IAIvB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAMzC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAItC,sBAAsB,IAAI,MAAM,EAAE;IAIlC,QAAQ,IAAI;QACV,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,IAAI,CAAC;QAClB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;KAChC;CAUF;AAED,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,YAAY,CAAC,EAAE,MAAM,EACrB,SAAS,CAAC,EAAE,MAAM,GACjB,QAAQ,CAgCV"}
|
package/dist/Augustus.js
ADDED
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { ImperialLegion } from './core/ImperialLegion.js';
|
|
2
|
+
import { SenateContext } from './context/SenateContext.js';
|
|
3
|
+
import { VelvetDiff } from './diff/VelvetDiff.js';
|
|
4
|
+
import { CaesarStream } from './stream/CaesarStream.js';
|
|
5
|
+
import { TogaStyler } from './ui/TogaStyler.js';
|
|
6
|
+
export class Augustus {
|
|
7
|
+
legion;
|
|
8
|
+
senate;
|
|
9
|
+
velvetDiff;
|
|
10
|
+
togaStyler;
|
|
11
|
+
config;
|
|
12
|
+
isIndexed = false;
|
|
13
|
+
constructor(config) {
|
|
14
|
+
this.config = config;
|
|
15
|
+
this.legion = new ImperialLegion(config.providers, config.softBuffer);
|
|
16
|
+
this.senate = new SenateContext(config.provinceIndexPath, config.maxProvincesInScroll);
|
|
17
|
+
this.velvetDiff = new VelvetDiff();
|
|
18
|
+
this.togaStyler = new TogaStyler(config.togaStyle);
|
|
19
|
+
if (config.defaultTactician) {
|
|
20
|
+
this.legion.selectTactician(config.defaultTactician.name);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
async initialize() {
|
|
24
|
+
const provinceCount = await this.senate.indexCodebase();
|
|
25
|
+
this.isIndexed = true;
|
|
26
|
+
console.log(`Augustus awakens. ${provinceCount} provinces mapped.`);
|
|
27
|
+
}
|
|
28
|
+
async consult(query, tacticianName) {
|
|
29
|
+
if (!this.isIndexed) {
|
|
30
|
+
await this.initialize();
|
|
31
|
+
}
|
|
32
|
+
const scroll = await this.senate.gatherScroll(query);
|
|
33
|
+
const response = await this.legion.dispatchCommand(query, tacticianName, scroll);
|
|
34
|
+
return {
|
|
35
|
+
raw: response,
|
|
36
|
+
scroll
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
async *consultStream(query, tacticianName) {
|
|
40
|
+
if (!this.isIndexed) {
|
|
41
|
+
await this.initialize();
|
|
42
|
+
}
|
|
43
|
+
const scroll = await this.senate.gatherScroll(query);
|
|
44
|
+
const stream = new CaesarStream();
|
|
45
|
+
const source = this.legion.dispatchCommandStream(query, tacticianName, scroll);
|
|
46
|
+
for await (const chunk of stream.consume(source)) {
|
|
47
|
+
yield chunk;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
async proposeEdits(filePath, instruction) {
|
|
51
|
+
const province = this.senate.getProvinceByPath(filePath);
|
|
52
|
+
if (!province) {
|
|
53
|
+
throw new Error(`Province not found: ${filePath}`);
|
|
54
|
+
}
|
|
55
|
+
const prompt = `Given the following code from ${province.name}:
|
|
56
|
+
|
|
57
|
+
\`\`\`${province.language}
|
|
58
|
+
${province.content}
|
|
59
|
+
\`\`\`
|
|
60
|
+
|
|
61
|
+
Please suggest improvements based on this instruction: ${instruction}
|
|
62
|
+
|
|
63
|
+
Provide the modified code in a code block.`;
|
|
64
|
+
const response = await this.legion.dispatchCommand(prompt);
|
|
65
|
+
const modifiedContent = this.extractCodeFromResponse(response);
|
|
66
|
+
this.velvetDiff.reset();
|
|
67
|
+
const vision = this.velvetDiff.buildOracleVision([
|
|
68
|
+
`Analyzing ${province.name} for potential refinements`,
|
|
69
|
+
instruction,
|
|
70
|
+
'Applying gentle transformations while preserving structure'
|
|
71
|
+
], 'Methodical enhancement with velvet precision');
|
|
72
|
+
const bricks = this.velvetDiff.analyzeChanges(province.content, modifiedContent, filePath);
|
|
73
|
+
const edification = this.velvetDiff.buildEdification(bricks);
|
|
74
|
+
return this.velvetDiff.composeOutput(vision, edification);
|
|
75
|
+
}
|
|
76
|
+
async *proposeEditsStream(filePath, instruction) {
|
|
77
|
+
const province = this.senate.getProvinceByPath(filePath);
|
|
78
|
+
if (!province) {
|
|
79
|
+
throw new Error(`Province not found: ${filePath}`);
|
|
80
|
+
}
|
|
81
|
+
const prompt = `Given the following code from ${province.name}:
|
|
82
|
+
|
|
83
|
+
\`\`\`${province.language}
|
|
84
|
+
${province.content}
|
|
85
|
+
\`\`\`
|
|
86
|
+
|
|
87
|
+
Please suggest improvements based on this instruction: ${instruction}
|
|
88
|
+
|
|
89
|
+
Provide the modified code in a code block.`;
|
|
90
|
+
const response = await this.legion.dispatchCommand(prompt);
|
|
91
|
+
const modifiedContent = this.extractCodeFromResponse(response);
|
|
92
|
+
this.velvetDiff.reset();
|
|
93
|
+
const reasoning = [
|
|
94
|
+
`Analyzing ${province.name} for potential refinements`,
|
|
95
|
+
instruction,
|
|
96
|
+
'Applying gentle transformations while preserving structure'
|
|
97
|
+
];
|
|
98
|
+
for await (const chunk of this.velvetDiff.streamOutput(province.content, modifiedContent, filePath, reasoning)) {
|
|
99
|
+
yield chunk;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
extractCodeFromResponse(response) {
|
|
103
|
+
const codeBlockMatch = response.match(/```[\w]*\n([\s\S]*?)```/);
|
|
104
|
+
return codeBlockMatch ? codeBlockMatch[1].trim() : response;
|
|
105
|
+
}
|
|
106
|
+
styleOutput(output) {
|
|
107
|
+
const visionStyled = this.togaStyler.styleOracleVision(output.oracleVision);
|
|
108
|
+
const edificationStyled = this.togaStyler.styleEdification(output.edification);
|
|
109
|
+
return {
|
|
110
|
+
vision: visionStyled.html,
|
|
111
|
+
edification: edificationStyled.html,
|
|
112
|
+
css: this.togaStyler.generateFullStylesheet()
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
getProvince(path) {
|
|
116
|
+
return this.senate.getProvinceByPath(path);
|
|
117
|
+
}
|
|
118
|
+
getAllProvinces() {
|
|
119
|
+
return this.senate.getAllProvinces();
|
|
120
|
+
}
|
|
121
|
+
async reindexProvinces() {
|
|
122
|
+
const count = await this.senate.indexCodebase();
|
|
123
|
+
this.isIndexed = true;
|
|
124
|
+
return count;
|
|
125
|
+
}
|
|
126
|
+
selectTactician(name) {
|
|
127
|
+
return this.legion.selectTactician(name) !== null;
|
|
128
|
+
}
|
|
129
|
+
getAvailableTacticians() {
|
|
130
|
+
return this.legion.getTacticians().map((t) => t.name);
|
|
131
|
+
}
|
|
132
|
+
getStats() {
|
|
133
|
+
const indexStats = this.senate.getIndexStats();
|
|
134
|
+
const activeTactician = this.legion.getActiveTactician();
|
|
135
|
+
return {
|
|
136
|
+
provinceCount: indexStats.provinceCount,
|
|
137
|
+
lastIndexed: indexStats.lastIndexed,
|
|
138
|
+
activeTactician: activeTactician?.name ?? null
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
export function createAugustus(rootPath, anthropicKey, openaiKey) {
|
|
143
|
+
const config = {
|
|
144
|
+
providers: {
|
|
145
|
+
anthropic: { apiKey: anthropicKey ?? '' },
|
|
146
|
+
openai: { apiKey: openaiKey ?? '' }
|
|
147
|
+
},
|
|
148
|
+
defaultTactician: {
|
|
149
|
+
name: 'ClaudiusSonnet',
|
|
150
|
+
provider: 'anthropic',
|
|
151
|
+
modelId: 'claude-sonnet-4-20250514',
|
|
152
|
+
maxTokens: 8192,
|
|
153
|
+
temperature: 0.7
|
|
154
|
+
},
|
|
155
|
+
softBuffer: {
|
|
156
|
+
warmthLevel: 0.8,
|
|
157
|
+
gentleCorrection: true,
|
|
158
|
+
encouragementMode: true,
|
|
159
|
+
velvetTone: true
|
|
160
|
+
},
|
|
161
|
+
togaStyle: {
|
|
162
|
+
fontFamily: '"Cormorant Garamond", serif',
|
|
163
|
+
primaryHue: 45,
|
|
164
|
+
velvetShade: '#4a0e2e',
|
|
165
|
+
goldAccent: '#d4af37',
|
|
166
|
+
marbleBackground: '#f5f5f0',
|
|
167
|
+
softShadowIntensity: 0.15
|
|
168
|
+
},
|
|
169
|
+
provinceIndexPath: rootPath,
|
|
170
|
+
maxProvincesInScroll: 5
|
|
171
|
+
};
|
|
172
|
+
return new Augustus(config);
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=Augustus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Augustus.js","sourceRoot":"","sources":["../src/Augustus.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Province, ConsolidatedScroll } from '../types/core.types.js';
|
|
2
|
+
export declare class SenateContext {
|
|
3
|
+
private index;
|
|
4
|
+
private rootPath;
|
|
5
|
+
private maxProvincesInScroll;
|
|
6
|
+
private ignoredPatterns;
|
|
7
|
+
constructor(rootPath: string, maxProvinces?: number);
|
|
8
|
+
indexCodebase(): Promise<number>;
|
|
9
|
+
private traverseAndIndex;
|
|
10
|
+
private shouldIgnore;
|
|
11
|
+
private isCodeFile;
|
|
12
|
+
private indexProvince;
|
|
13
|
+
private generateProvinceId;
|
|
14
|
+
private deriveProvinceName;
|
|
15
|
+
private detectLanguage;
|
|
16
|
+
private generateSimpleEmbedding;
|
|
17
|
+
private simpleHash;
|
|
18
|
+
gatherScroll(query: string): Promise<ConsolidatedScroll>;
|
|
19
|
+
private cosineSimilarity;
|
|
20
|
+
private calculateKeywordBoost;
|
|
21
|
+
getProvince(id: string): Province | undefined;
|
|
22
|
+
getProvinceByPath(relativePath: string): Province | undefined;
|
|
23
|
+
getAllProvinces(): Province[];
|
|
24
|
+
getIndexStats(): {
|
|
25
|
+
provinceCount: number;
|
|
26
|
+
lastIndexed: Date;
|
|
27
|
+
};
|
|
28
|
+
addIgnorePattern(pattern: RegExp): void;
|
|
29
|
+
setMaxProvincesInScroll(max: number): void;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=SenateContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SenateContext.d.ts","sourceRoot":"","sources":["../../src/context/SenateContext.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAQ3E,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,eAAe,CAAW;gBAEtB,QAAQ,EAAE,MAAM,EAAE,YAAY,GAAE,MAAU;IAoBhD,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;YAUxB,gBAAgB;IAmB9B,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,UAAU;YAUJ,aAAa;IAwB3B,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,cAAc;IA8BtB,OAAO,CAAC,uBAAuB;IAa/B,OAAO,CAAC,UAAU;IAUZ,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAyB9D,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,qBAAqB;IAc7B,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAI7C,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAK7D,eAAe,IAAI,QAAQ,EAAE;IAI7B,aAAa,IAAI;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,IAAI,CAAA;KAAE;IAO7D,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIvC,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;CAG3C"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import * as fs from 'fs/promises';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
export class SenateContext {
|
|
4
|
+
index;
|
|
5
|
+
rootPath;
|
|
6
|
+
maxProvincesInScroll;
|
|
7
|
+
ignoredPatterns;
|
|
8
|
+
constructor(rootPath, maxProvinces = 5) {
|
|
9
|
+
this.rootPath = rootPath;
|
|
10
|
+
this.maxProvincesInScroll = maxProvinces;
|
|
11
|
+
this.index = {
|
|
12
|
+
provinces: new Map(),
|
|
13
|
+
embeddings: new Map(),
|
|
14
|
+
lastIndexed: new Date(0)
|
|
15
|
+
};
|
|
16
|
+
this.ignoredPatterns = [
|
|
17
|
+
/node_modules/,
|
|
18
|
+
/\.git/,
|
|
19
|
+
/dist/,
|
|
20
|
+
/build/,
|
|
21
|
+
/\.next/,
|
|
22
|
+
/\.cache/,
|
|
23
|
+
/coverage/,
|
|
24
|
+
/\.env/
|
|
25
|
+
];
|
|
26
|
+
}
|
|
27
|
+
async indexCodebase() {
|
|
28
|
+
this.index.provinces.clear();
|
|
29
|
+
this.index.embeddings.clear();
|
|
30
|
+
await this.traverseAndIndex(this.rootPath);
|
|
31
|
+
this.index.lastIndexed = new Date();
|
|
32
|
+
return this.index.provinces.size;
|
|
33
|
+
}
|
|
34
|
+
async traverseAndIndex(dirPath) {
|
|
35
|
+
const entries = await fs.readdir(dirPath, { withFileTypes: true });
|
|
36
|
+
for (const entry of entries) {
|
|
37
|
+
const fullPath = path.join(dirPath, entry.name);
|
|
38
|
+
const relativePath = path.relative(this.rootPath, fullPath);
|
|
39
|
+
if (this.shouldIgnore(relativePath)) {
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
if (entry.isDirectory()) {
|
|
43
|
+
await this.traverseAndIndex(fullPath);
|
|
44
|
+
}
|
|
45
|
+
else if (entry.isFile() && this.isCodeFile(entry.name)) {
|
|
46
|
+
await this.indexProvince(fullPath, relativePath);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
shouldIgnore(filePath) {
|
|
51
|
+
return this.ignoredPatterns.some((pattern) => pattern.test(filePath));
|
|
52
|
+
}
|
|
53
|
+
isCodeFile(fileName) {
|
|
54
|
+
const codeExtensions = [
|
|
55
|
+
'.ts', '.tsx', '.js', '.jsx', '.py', '.rs', '.go',
|
|
56
|
+
'.java', '.kt', '.swift', '.c', '.cpp', '.h', '.hpp',
|
|
57
|
+
'.cs', '.rb', '.php', '.vue', '.svelte', '.astro',
|
|
58
|
+
'.json', '.yaml', '.yml', '.toml', '.md', '.sql'
|
|
59
|
+
];
|
|
60
|
+
return codeExtensions.some((ext) => fileName.endsWith(ext));
|
|
61
|
+
}
|
|
62
|
+
async indexProvince(fullPath, relativePath) {
|
|
63
|
+
try {
|
|
64
|
+
const content = await fs.readFile(fullPath, 'utf-8');
|
|
65
|
+
const stats = await fs.stat(fullPath);
|
|
66
|
+
const lines = content.split('\n');
|
|
67
|
+
const province = {
|
|
68
|
+
id: this.generateProvinceId(relativePath),
|
|
69
|
+
path: relativePath,
|
|
70
|
+
name: this.deriveProvinceName(relativePath),
|
|
71
|
+
content,
|
|
72
|
+
relevanceScore: 0,
|
|
73
|
+
lastModified: stats.mtime,
|
|
74
|
+
language: this.detectLanguage(relativePath),
|
|
75
|
+
lineCount: lines.length
|
|
76
|
+
};
|
|
77
|
+
this.index.provinces.set(province.id, province);
|
|
78
|
+
this.index.embeddings.set(province.id, this.generateSimpleEmbedding(content));
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
// Skip files that cannot be read
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
generateProvinceId(relativePath) {
|
|
85
|
+
return `province_${relativePath.replace(/[^a-zA-Z0-9]/g, '_')}`;
|
|
86
|
+
}
|
|
87
|
+
deriveProvinceName(relativePath) {
|
|
88
|
+
const parts = relativePath.split(path.sep);
|
|
89
|
+
const fileName = parts[parts.length - 1];
|
|
90
|
+
const dirContext = parts.length > 1 ? parts[parts.length - 2] : '';
|
|
91
|
+
return dirContext ? `${dirContext}/${fileName}` : fileName;
|
|
92
|
+
}
|
|
93
|
+
detectLanguage(filePath) {
|
|
94
|
+
const extensionMap = {
|
|
95
|
+
'.ts': 'typescript',
|
|
96
|
+
'.tsx': 'typescript-react',
|
|
97
|
+
'.js': 'javascript',
|
|
98
|
+
'.jsx': 'javascript-react',
|
|
99
|
+
'.py': 'python',
|
|
100
|
+
'.rs': 'rust',
|
|
101
|
+
'.go': 'go',
|
|
102
|
+
'.java': 'java',
|
|
103
|
+
'.kt': 'kotlin',
|
|
104
|
+
'.swift': 'swift',
|
|
105
|
+
'.c': 'c',
|
|
106
|
+
'.cpp': 'cpp',
|
|
107
|
+
'.cs': 'csharp',
|
|
108
|
+
'.rb': 'ruby',
|
|
109
|
+
'.php': 'php',
|
|
110
|
+
'.vue': 'vue',
|
|
111
|
+
'.svelte': 'svelte',
|
|
112
|
+
'.json': 'json',
|
|
113
|
+
'.yaml': 'yaml',
|
|
114
|
+
'.yml': 'yaml',
|
|
115
|
+
'.md': 'markdown',
|
|
116
|
+
'.sql': 'sql'
|
|
117
|
+
};
|
|
118
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
119
|
+
return extensionMap[ext] ?? 'plaintext';
|
|
120
|
+
}
|
|
121
|
+
generateSimpleEmbedding(content) {
|
|
122
|
+
const tokens = content.toLowerCase().split(/\W+/).filter(Boolean);
|
|
123
|
+
const embedding = new Array(128).fill(0);
|
|
124
|
+
for (const token of tokens) {
|
|
125
|
+
const hash = this.simpleHash(token);
|
|
126
|
+
embedding[hash % 128] += 1;
|
|
127
|
+
}
|
|
128
|
+
const magnitude = Math.sqrt(embedding.reduce((sum, val) => sum + val * val, 0));
|
|
129
|
+
return magnitude > 0 ? embedding.map((v) => v / magnitude) : embedding;
|
|
130
|
+
}
|
|
131
|
+
simpleHash(str) {
|
|
132
|
+
let hash = 0;
|
|
133
|
+
for (let i = 0; i < str.length; i++) {
|
|
134
|
+
const char = str.charCodeAt(i);
|
|
135
|
+
hash = (hash << 5) - hash + char;
|
|
136
|
+
hash = hash & hash;
|
|
137
|
+
}
|
|
138
|
+
return Math.abs(hash);
|
|
139
|
+
}
|
|
140
|
+
async gatherScroll(query) {
|
|
141
|
+
const queryEmbedding = this.generateSimpleEmbedding(query);
|
|
142
|
+
const scoredProvinces = [];
|
|
143
|
+
for (const [id, province] of this.index.provinces) {
|
|
144
|
+
const embedding = this.index.embeddings.get(id);
|
|
145
|
+
if (embedding) {
|
|
146
|
+
const similarity = this.cosineSimilarity(queryEmbedding, embedding);
|
|
147
|
+
const keywordBoost = this.calculateKeywordBoost(query, province);
|
|
148
|
+
province.relevanceScore = similarity * 0.6 + keywordBoost * 0.4;
|
|
149
|
+
scoredProvinces.push({ ...province });
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
scoredProvinces.sort((a, b) => b.relevanceScore - a.relevanceScore);
|
|
153
|
+
const topProvinces = scoredProvinces.slice(0, this.maxProvincesInScroll);
|
|
154
|
+
return {
|
|
155
|
+
provinces: topProvinces,
|
|
156
|
+
totalRelevance: topProvinces.reduce((sum, p) => sum + p.relevanceScore, 0),
|
|
157
|
+
queryEmbedding,
|
|
158
|
+
timestamp: new Date()
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
cosineSimilarity(a, b) {
|
|
162
|
+
let dotProduct = 0;
|
|
163
|
+
let magnitudeA = 0;
|
|
164
|
+
let magnitudeB = 0;
|
|
165
|
+
for (let i = 0; i < a.length; i++) {
|
|
166
|
+
dotProduct += a[i] * b[i];
|
|
167
|
+
magnitudeA += a[i] * a[i];
|
|
168
|
+
magnitudeB += b[i] * b[i];
|
|
169
|
+
}
|
|
170
|
+
const magnitude = Math.sqrt(magnitudeA) * Math.sqrt(magnitudeB);
|
|
171
|
+
return magnitude > 0 ? dotProduct / magnitude : 0;
|
|
172
|
+
}
|
|
173
|
+
calculateKeywordBoost(query, province) {
|
|
174
|
+
const queryTerms = query.toLowerCase().split(/\W+/).filter(Boolean);
|
|
175
|
+
const contentLower = province.content.toLowerCase();
|
|
176
|
+
const pathLower = province.path.toLowerCase();
|
|
177
|
+
let matches = 0;
|
|
178
|
+
for (const term of queryTerms) {
|
|
179
|
+
if (contentLower.includes(term))
|
|
180
|
+
matches += 1;
|
|
181
|
+
if (pathLower.includes(term))
|
|
182
|
+
matches += 2;
|
|
183
|
+
}
|
|
184
|
+
return Math.min(matches / (queryTerms.length * 3), 1);
|
|
185
|
+
}
|
|
186
|
+
getProvince(id) {
|
|
187
|
+
return this.index.provinces.get(id);
|
|
188
|
+
}
|
|
189
|
+
getProvinceByPath(relativePath) {
|
|
190
|
+
const id = this.generateProvinceId(relativePath);
|
|
191
|
+
return this.index.provinces.get(id);
|
|
192
|
+
}
|
|
193
|
+
getAllProvinces() {
|
|
194
|
+
return Array.from(this.index.provinces.values());
|
|
195
|
+
}
|
|
196
|
+
getIndexStats() {
|
|
197
|
+
return {
|
|
198
|
+
provinceCount: this.index.provinces.size,
|
|
199
|
+
lastIndexed: this.index.lastIndexed
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
addIgnorePattern(pattern) {
|
|
203
|
+
this.ignoredPatterns.push(pattern);
|
|
204
|
+
}
|
|
205
|
+
setMaxProvincesInScroll(max) {
|
|
206
|
+
this.maxProvincesInScroll = max;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=SenateContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SenateContext.js","sourceRoot":"","sources":["../../src/context/SenateContext.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ModelTactician, ProviderName, SoftBufferConfig, ConsolidatedScroll, CaesarStreamChunk } from '../types/core.types.js';
|
|
2
|
+
export declare class ImperialLegion {
|
|
3
|
+
private tacticians;
|
|
4
|
+
private clients;
|
|
5
|
+
private softBuffer;
|
|
6
|
+
private activeTactician;
|
|
7
|
+
constructor(providerConfigs: Record<ProviderName, {
|
|
8
|
+
apiKey: string;
|
|
9
|
+
baseUrl?: string;
|
|
10
|
+
}>, bufferConfig: SoftBufferConfig);
|
|
11
|
+
private initializeProviders;
|
|
12
|
+
private registerDefaultTacticians;
|
|
13
|
+
registerTactician(tactician: ModelTactician): void;
|
|
14
|
+
selectTactician(name: string): ModelTactician | null;
|
|
15
|
+
dispatchCommand(prompt: string, tacticianName?: string, context?: ConsolidatedScroll): Promise<string>;
|
|
16
|
+
dispatchCommandStream(prompt: string, tacticianName?: string, context?: ConsolidatedScroll): AsyncGenerator<CaesarStreamChunk>;
|
|
17
|
+
private weaveScrollIntoPrompt;
|
|
18
|
+
private executeCommand;
|
|
19
|
+
private executeAnthropicCommand;
|
|
20
|
+
private executeOpenAICommand;
|
|
21
|
+
private executeStreamingCommand;
|
|
22
|
+
private generateStreamId;
|
|
23
|
+
getTacticians(): ModelTactician[];
|
|
24
|
+
getActiveTactician(): ModelTactician | null;
|
|
25
|
+
updateSoftBuffer(config: Partial<SoftBufferConfig>): void;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=ImperialLegion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImperialLegion.d.ts","sourceRoot":"","sources":["../../src/core/ImperialLegion.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,gBAAgB,EAEhB,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,wBAAwB,CAAC;AAOhC,qBAAa,cAAc;IACzB,OAAO,CAAC,UAAU,CAA0C;IAC5D,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,eAAe,CAA+B;gBAGpD,eAAe,EAAE,MAAM,CAAC,YAAY,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,EAC3E,YAAY,EAAE,gBAAgB;IAOhC,OAAO,CAAC,mBAAmB;IAiB3B,OAAO,CAAC,yBAAyB;IAqCjC,iBAAiB,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAIlD,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAQ9C,eAAe,CACnB,MAAM,EAAE,MAAM,EACd,aAAa,CAAC,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,MAAM,CAAC;IAyBX,qBAAqB,CAC1B,MAAM,EAAE,MAAM,EACd,aAAa,CAAC,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,cAAc,CAAC,iBAAiB,CAAC;IAuDpC,OAAO,CAAC,qBAAqB;YAiBf,cAAc;YAad,uBAAuB;YAqBvB,oBAAoB;YAkBpB,uBAAuB;IASrC,OAAO,CAAC,gBAAgB;IAIxB,aAAa,IAAI,cAAc,EAAE;IAIjC,kBAAkB,IAAI,cAAc,GAAG,IAAI;IAI3C,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI;CAG1D"}
|