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.
Files changed (38) hide show
  1. package/README.md +84 -0
  2. package/dist/Augustus.d.ts +42 -0
  3. package/dist/Augustus.d.ts.map +1 -0
  4. package/dist/Augustus.js +174 -0
  5. package/dist/Augustus.js.map +1 -0
  6. package/dist/context/SenateContext.d.ts +31 -0
  7. package/dist/context/SenateContext.d.ts.map +1 -0
  8. package/dist/context/SenateContext.js +209 -0
  9. package/dist/context/SenateContext.js.map +1 -0
  10. package/dist/core/ImperialLegion.d.ts +27 -0
  11. package/dist/core/ImperialLegion.d.ts.map +1 -0
  12. package/dist/core/ImperialLegion.js +205 -0
  13. package/dist/core/ImperialLegion.js.map +1 -0
  14. package/dist/core/SoftBuffer.d.ts +15 -0
  15. package/dist/core/SoftBuffer.d.ts.map +1 -0
  16. package/dist/core/SoftBuffer.js +74 -0
  17. package/dist/core/SoftBuffer.js.map +1 -0
  18. package/dist/diff/VelvetDiff.d.ts +24 -0
  19. package/dist/diff/VelvetDiff.d.ts.map +1 -0
  20. package/dist/diff/VelvetDiff.js +238 -0
  21. package/dist/diff/VelvetDiff.js.map +1 -0
  22. package/dist/index.d.ts +9 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +8 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/stream/CaesarStream.d.ts +45 -0
  27. package/dist/stream/CaesarStream.d.ts.map +1 -0
  28. package/dist/stream/CaesarStream.js +209 -0
  29. package/dist/stream/CaesarStream.js.map +1 -0
  30. package/dist/types/core.types.d.ts +87 -0
  31. package/dist/types/core.types.d.ts.map +1 -0
  32. package/dist/types/core.types.js +2 -0
  33. package/dist/types/core.types.js.map +1 -0
  34. package/dist/ui/TogaStyler.d.ts +31 -0
  35. package/dist/ui/TogaStyler.d.ts.map +1 -0
  36. package/dist/ui/TogaStyler.js +342 -0
  37. package/dist/ui/TogaStyler.js.map +1 -0
  38. 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"}
@@ -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":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAuB,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAehD,MAAM,OAAO,QAAQ;IACX,MAAM,CAAiB;IACvB,MAAM,CAAgB;IACtB,UAAU,CAAa;IACvB,UAAU,CAAa;IACvB,MAAM,CAAiB;IACvB,SAAS,GAAY,KAAK,CAAC;IAEnC,YAAY,MAAsB;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,CAAC,MAAM,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;QAEtE,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,CAC7B,MAAM,CAAC,iBAAiB,EACxB,MAAM,CAAC,oBAAoB,CAC5B,CAAC;QAEF,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAEnD,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;QACxD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,qBAAqB,aAAa,oBAAoB,CAAC,CAAC;IACtE,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAAa,EAAE,aAAsB;QACjD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;QAEjF,OAAO;YACL,GAAG,EAAE,QAAQ;YACb,MAAM;SACP,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,CAAC,aAAa,CAClB,KAAa,EACb,aAAsB;QAEtB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAElC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;QAE/E,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACjD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,QAAgB,EAChB,WAAmB;QAEnB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QACzD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,MAAM,GAAG,iCAAiC,QAAQ,CAAC,IAAI;;QAEzD,QAAQ,CAAC,QAAQ;EACvB,QAAQ,CAAC,OAAO;;;yDAGuC,WAAW;;2CAEzB,CAAC;QAExC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAC3D,MAAM,eAAe,GAAG,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAE/D,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAExB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAC9C;YACE,aAAa,QAAQ,CAAC,IAAI,4BAA4B;YACtD,WAAW;YACX,4DAA4D;SAC7D,EACD,8CAA8C,CAC/C,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAC3C,QAAQ,CAAC,OAAO,EAChB,eAAe,EACf,QAAQ,CACT,CAAC;QAEF,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAE7D,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,CAAC,kBAAkB,CACvB,QAAgB,EAChB,WAAmB;QAEnB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QACzD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,MAAM,GAAG,iCAAiC,QAAQ,CAAC,IAAI;;QAEzD,QAAQ,CAAC,QAAQ;EACvB,QAAQ,CAAC,OAAO;;;yDAGuC,WAAW;;2CAEzB,CAAC;QAExC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAC3D,MAAM,eAAe,GAAG,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAE/D,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAExB,MAAM,SAAS,GAAG;YAChB,aAAa,QAAQ,CAAC,IAAI,4BAA4B;YACtD,WAAW;YACX,4DAA4D;SAC7D,CAAC;QAEF,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CACpD,QAAQ,CAAC,OAAO,EAChB,eAAe,EACf,QAAQ,EACR,SAAS,CACV,EAAE,CAAC;YACF,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,uBAAuB,CAAC,QAAgB;QAC9C,MAAM,cAAc,GAAG,QAAQ,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACjE,OAAO,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC9D,CAAC;IAED,WAAW,CAAC,MAAwB;QAClC,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC5E,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAE/E,OAAO;YACL,MAAM,EAAE,YAAY,CAAC,IAAI;YACzB,WAAW,EAAE,iBAAiB,CAAC,IAAI;YACnC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,sBAAsB,EAAE;SAC9C,CAAC;IACJ,CAAC;IAED,WAAW,CAAC,IAAY;QACtB,OAAO,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;QAChD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,eAAe,CAAC,IAAY;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IACpD,CAAC;IAED,sBAAsB;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACxD,CAAC;IAED,QAAQ;QAKN,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;QAC/C,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;QAEzD,OAAO;YACL,aAAa,EAAE,UAAU,CAAC,aAAa;YACvC,WAAW,EAAE,UAAU,CAAC,WAAW;YACnC,eAAe,EAAE,eAAe,EAAE,IAAI,IAAI,IAAI;SAC/C,CAAC;IACJ,CAAC;CACF;AAED,MAAM,UAAU,cAAc,CAC5B,QAAgB,EAChB,YAAqB,EACrB,SAAkB;IAElB,MAAM,MAAM,GAAmB;QAC7B,SAAS,EAAE;YACT,SAAS,EAAE,EAAE,MAAM,EAAE,YAAY,IAAI,EAAE,EAAE;YACzC,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,IAAI,EAAE,EAAE;SACpC;QACD,gBAAgB,EAAE;YAChB,IAAI,EAAE,gBAAgB;YACtB,QAAQ,EAAE,WAAW;YACrB,OAAO,EAAE,0BAA0B;YACnC,SAAS,EAAE,IAAI;YACf,WAAW,EAAE,GAAG;SACjB;QACD,UAAU,EAAE;YACV,WAAW,EAAE,GAAG;YAChB,gBAAgB,EAAE,IAAI;YACtB,iBAAiB,EAAE,IAAI;YACvB,UAAU,EAAE,IAAI;SACjB;QACD,SAAS,EAAE;YACT,UAAU,EAAE,6BAA6B;YACzC,UAAU,EAAE,EAAE;YACd,WAAW,EAAE,SAAS;YACtB,UAAU,EAAE,SAAS;YACrB,gBAAgB,EAAE,SAAS;YAC3B,mBAAmB,EAAE,IAAI;SAC1B;QACD,iBAAiB,EAAE,QAAQ;QAC3B,oBAAoB,EAAE,CAAC;KACxB,CAAC;IAEF,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC9B,CAAC"}
@@ -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"}