@auxiora/personality 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 (149) hide show
  1. package/LICENSE +191 -0
  2. package/dist/__tests__/builder.test.d.ts +2 -0
  3. package/dist/__tests__/builder.test.d.ts.map +1 -0
  4. package/dist/__tests__/builder.test.js +67 -0
  5. package/dist/__tests__/builder.test.js.map +1 -0
  6. package/dist/__tests__/conversation-builder.test.d.ts +2 -0
  7. package/dist/__tests__/conversation-builder.test.d.ts.map +1 -0
  8. package/dist/__tests__/conversation-builder.test.js +324 -0
  9. package/dist/__tests__/conversation-builder.test.js.map +1 -0
  10. package/dist/__tests__/escalation.test.d.ts +2 -0
  11. package/dist/__tests__/escalation.test.d.ts.map +1 -0
  12. package/dist/__tests__/escalation.test.js +143 -0
  13. package/dist/__tests__/escalation.test.js.map +1 -0
  14. package/dist/__tests__/manager.test.d.ts +2 -0
  15. package/dist/__tests__/manager.test.d.ts.map +1 -0
  16. package/dist/__tests__/manager.test.js +96 -0
  17. package/dist/__tests__/manager.test.js.map +1 -0
  18. package/dist/__tests__/parser.test.d.ts +2 -0
  19. package/dist/__tests__/parser.test.d.ts.map +1 -0
  20. package/dist/__tests__/parser.test.js +89 -0
  21. package/dist/__tests__/parser.test.js.map +1 -0
  22. package/dist/__tests__/security-floor.test.d.ts +2 -0
  23. package/dist/__tests__/security-floor.test.d.ts.map +1 -0
  24. package/dist/__tests__/security-floor.test.js +183 -0
  25. package/dist/__tests__/security-floor.test.js.map +1 -0
  26. package/dist/builder.d.ts +6 -0
  27. package/dist/builder.d.ts.map +1 -0
  28. package/dist/builder.js +65 -0
  29. package/dist/builder.js.map +1 -0
  30. package/dist/conversation-builder.d.ts +30 -0
  31. package/dist/conversation-builder.d.ts.map +1 -0
  32. package/dist/conversation-builder.js +232 -0
  33. package/dist/conversation-builder.js.map +1 -0
  34. package/dist/escalation.d.ts +35 -0
  35. package/dist/escalation.d.ts.map +1 -0
  36. package/dist/escalation.js +134 -0
  37. package/dist/escalation.js.map +1 -0
  38. package/dist/index.d.ts +21 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +20 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/manager.d.ts +28 -0
  43. package/dist/manager.d.ts.map +1 -0
  44. package/dist/manager.js +114 -0
  45. package/dist/manager.js.map +1 -0
  46. package/dist/marketplace/__tests__/scanner.test.d.ts +2 -0
  47. package/dist/marketplace/__tests__/scanner.test.d.ts.map +1 -0
  48. package/dist/marketplace/__tests__/scanner.test.js +134 -0
  49. package/dist/marketplace/__tests__/scanner.test.js.map +1 -0
  50. package/dist/marketplace/__tests__/schema.test.d.ts +2 -0
  51. package/dist/marketplace/__tests__/schema.test.d.ts.map +1 -0
  52. package/dist/marketplace/__tests__/schema.test.js +243 -0
  53. package/dist/marketplace/__tests__/schema.test.js.map +1 -0
  54. package/dist/marketplace/scanner.d.ts +19 -0
  55. package/dist/marketplace/scanner.d.ts.map +1 -0
  56. package/dist/marketplace/scanner.js +62 -0
  57. package/dist/marketplace/scanner.js.map +1 -0
  58. package/dist/marketplace/schema.d.ts +150 -0
  59. package/dist/marketplace/schema.d.ts.map +1 -0
  60. package/dist/marketplace/schema.js +122 -0
  61. package/dist/marketplace/schema.js.map +1 -0
  62. package/dist/modes/__tests__/mode-detector.test.d.ts +2 -0
  63. package/dist/modes/__tests__/mode-detector.test.d.ts.map +1 -0
  64. package/dist/modes/__tests__/mode-detector.test.js +130 -0
  65. package/dist/modes/__tests__/mode-detector.test.js.map +1 -0
  66. package/dist/modes/__tests__/mode-loader.test.d.ts +2 -0
  67. package/dist/modes/__tests__/mode-loader.test.d.ts.map +1 -0
  68. package/dist/modes/__tests__/mode-loader.test.js +91 -0
  69. package/dist/modes/__tests__/mode-loader.test.js.map +1 -0
  70. package/dist/modes/__tests__/prompt-assembler.test.d.ts +2 -0
  71. package/dist/modes/__tests__/prompt-assembler.test.d.ts.map +1 -0
  72. package/dist/modes/__tests__/prompt-assembler.test.js +241 -0
  73. package/dist/modes/__tests__/prompt-assembler.test.js.map +1 -0
  74. package/dist/modes/mode-detector.d.ts +10 -0
  75. package/dist/modes/mode-detector.d.ts.map +1 -0
  76. package/dist/modes/mode-detector.js +70 -0
  77. package/dist/modes/mode-detector.js.map +1 -0
  78. package/dist/modes/mode-loader.d.ts +14 -0
  79. package/dist/modes/mode-loader.d.ts.map +1 -0
  80. package/dist/modes/mode-loader.js +94 -0
  81. package/dist/modes/mode-loader.js.map +1 -0
  82. package/dist/modes/prompt-assembler.d.ts +27 -0
  83. package/dist/modes/prompt-assembler.d.ts.map +1 -0
  84. package/dist/modes/prompt-assembler.js +224 -0
  85. package/dist/modes/prompt-assembler.js.map +1 -0
  86. package/dist/modes/types.d.ts +42 -0
  87. package/dist/modes/types.d.ts.map +1 -0
  88. package/dist/modes/types.js +24 -0
  89. package/dist/modes/types.js.map +1 -0
  90. package/dist/parser.d.ts +6 -0
  91. package/dist/parser.d.ts.map +1 -0
  92. package/dist/parser.js +122 -0
  93. package/dist/parser.js.map +1 -0
  94. package/dist/security-floor.d.ts +31 -0
  95. package/dist/security-floor.d.ts.map +1 -0
  96. package/dist/security-floor.js +113 -0
  97. package/dist/security-floor.js.map +1 -0
  98. package/dist/types.d.ts +26 -0
  99. package/dist/types.d.ts.map +1 -0
  100. package/dist/types.js +2 -0
  101. package/dist/types.js.map +1 -0
  102. package/dist/voice-profiles.d.ts +23 -0
  103. package/dist/voice-profiles.d.ts.map +1 -0
  104. package/dist/voice-profiles.js +72 -0
  105. package/dist/voice-profiles.js.map +1 -0
  106. package/modes/advisor.md +24 -0
  107. package/modes/analyst.md +25 -0
  108. package/modes/companion.md +24 -0
  109. package/modes/legal.md +1188 -0
  110. package/modes/operator.md +24 -0
  111. package/modes/roast.md +24 -0
  112. package/modes/socratic.md +24 -0
  113. package/modes/writer.md +23 -0
  114. package/package.json +27 -0
  115. package/src/__tests__/builder.test.ts +78 -0
  116. package/src/__tests__/conversation-builder.test.ts +386 -0
  117. package/src/__tests__/escalation.test.ts +172 -0
  118. package/src/__tests__/manager.test.ts +141 -0
  119. package/src/__tests__/parser.test.ts +101 -0
  120. package/src/__tests__/security-floor.test.ts +212 -0
  121. package/src/builder.ts +75 -0
  122. package/src/conversation-builder.ts +279 -0
  123. package/src/escalation.ts +162 -0
  124. package/src/index.ts +55 -0
  125. package/src/manager.ts +119 -0
  126. package/src/marketplace/__tests__/scanner.test.ts +159 -0
  127. package/src/marketplace/__tests__/schema.test.ts +269 -0
  128. package/src/marketplace/scanner.ts +85 -0
  129. package/src/marketplace/schema.ts +141 -0
  130. package/src/modes/__tests__/mode-detector.test.ts +149 -0
  131. package/src/modes/__tests__/mode-loader.test.ts +143 -0
  132. package/src/modes/__tests__/prompt-assembler.test.ts +291 -0
  133. package/src/modes/mode-detector.ts +84 -0
  134. package/src/modes/mode-loader.ts +105 -0
  135. package/src/modes/prompt-assembler.ts +278 -0
  136. package/src/modes/types.ts +67 -0
  137. package/src/parser.ts +132 -0
  138. package/src/security-floor.ts +147 -0
  139. package/src/types.ts +27 -0
  140. package/src/voice-profiles.ts +88 -0
  141. package/templates/chill.md +30 -0
  142. package/templates/creative.md +29 -0
  143. package/templates/friendly.md +28 -0
  144. package/templates/mentor.md +31 -0
  145. package/templates/minimal.md +24 -0
  146. package/templates/professional.md +28 -0
  147. package/templates/technical.md +30 -0
  148. package/tsconfig.json +12 -0
  149. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,241 @@
1
+ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
2
+ import * as fs from 'node:fs/promises';
3
+ import * as path from 'node:path';
4
+ import * as os from 'node:os';
5
+ import { PromptAssembler } from '../prompt-assembler.js';
6
+ import { ModeLoader } from '../mode-loader.js';
7
+ import { DEFAULT_PREFERENCES } from '../types.js';
8
+ import { SecurityFloor } from '../../security-floor.js';
9
+ // Mock @auxiora/core path getters to use temp dirs
10
+ let workspaceDir;
11
+ vi.mock('@auxiora/core', () => ({
12
+ getSoulPath: () => path.join(workspaceDir, 'SOUL.md'),
13
+ getAgentsPath: () => path.join(workspaceDir, 'AGENTS.md'),
14
+ getIdentityPath: () => path.join(workspaceDir, 'IDENTITY.md'),
15
+ getUserPath: () => path.join(workspaceDir, 'USER.md'),
16
+ }));
17
+ const defaultAgent = {
18
+ name: 'TestBot',
19
+ pronouns: 'they/them',
20
+ personality: 'professional',
21
+ tone: { warmth: 0.6, directness: 0.5, humor: 0.3, formality: 0.5 },
22
+ expertise: [],
23
+ errorStyle: 'professional',
24
+ catchphrases: {},
25
+ boundaries: { neverJokeAbout: [], neverAdviseOn: [] },
26
+ };
27
+ describe('PromptAssembler', () => {
28
+ let tmpDir;
29
+ let modesDir;
30
+ beforeEach(async () => {
31
+ tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), 'prompt-assembler-test-'));
32
+ workspaceDir = path.join(tmpDir, 'workspace');
33
+ modesDir = path.join(tmpDir, 'modes');
34
+ await fs.mkdir(workspaceDir, { recursive: true });
35
+ await fs.mkdir(modesDir, { recursive: true });
36
+ });
37
+ afterEach(async () => {
38
+ await fs.rm(tmpDir, { recursive: true, force: true });
39
+ });
40
+ async function createAssembler(modeFiles) {
41
+ if (modeFiles) {
42
+ for (const [name, content] of Object.entries(modeFiles)) {
43
+ await fs.writeFile(path.join(modesDir, name), content);
44
+ }
45
+ }
46
+ const loader = new ModeLoader(modesDir, path.join(tmpDir, 'user-modes'));
47
+ await loader.loadAll();
48
+ return new PromptAssembler(defaultAgent, loader);
49
+ }
50
+ it('should build base prompt with identity preamble when SOUL.md exists', async () => {
51
+ await fs.writeFile(path.join(workspaceDir, 'SOUL.md'), '# Soul');
52
+ const assembler = await createAssembler();
53
+ const base = await assembler.buildBase();
54
+ expect(base).toContain('# Agent Identity');
55
+ expect(base).toContain('TestBot');
56
+ expect(base).toContain('they/them');
57
+ });
58
+ it('should include SOUL.md when present', async () => {
59
+ await fs.writeFile(path.join(workspaceDir, 'SOUL.md'), '# My Soul\nI am helpful.');
60
+ const assembler = await createAssembler();
61
+ const base = await assembler.buildBase();
62
+ expect(base).toContain('# My Soul');
63
+ expect(base).toContain('I am helpful.');
64
+ });
65
+ it('should handle missing optional files gracefully', async () => {
66
+ // No SOUL.md, AGENTS.md, IDENTITY.md, or USER.md
67
+ const assembler = await createAssembler();
68
+ const base = await assembler.buildBase();
69
+ // Should fall through to default prompt
70
+ expect(base).toContain('TestBot');
71
+ expect(base).toContain('helpful AI assistant');
72
+ });
73
+ it('should include all context files when present', async () => {
74
+ await fs.writeFile(path.join(workspaceDir, 'SOUL.md'), '# Soul content');
75
+ await fs.writeFile(path.join(workspaceDir, 'AGENTS.md'), '# Agent definitions');
76
+ await fs.writeFile(path.join(workspaceDir, 'IDENTITY.md'), '# Custom identity');
77
+ await fs.writeFile(path.join(workspaceDir, 'USER.md'), 'User profile info');
78
+ const assembler = await createAssembler();
79
+ const base = await assembler.buildBase();
80
+ expect(base).toContain('# Soul content');
81
+ expect(base).toContain('# Agent definitions');
82
+ expect(base).toContain('# Custom identity');
83
+ expect(base).toContain('About the User');
84
+ expect(base).toContain('User profile info');
85
+ });
86
+ it('should inject mode instructions when mode is active', async () => {
87
+ const assembler = await createAssembler({
88
+ 'operator.md': `<!-- mode: operator\n name: Operator\n description: Fast exec\n signals: run:0.8 -->\nBe fast and direct.`,
89
+ });
90
+ await assembler.buildBase();
91
+ const state = { activeMode: 'operator', autoDetected: false };
92
+ const enriched = assembler.enrichForMessage(state, null);
93
+ expect(enriched).toContain('Active Mode: Operator');
94
+ expect(enriched).toContain('Be fast and direct.');
95
+ });
96
+ it('should not inject mode when mode is "auto"', async () => {
97
+ const assembler = await createAssembler({
98
+ 'operator.md': `<!-- mode: operator\n name: Operator\n description: test\n signals: run:0.8 -->\nOperator content`,
99
+ });
100
+ await assembler.buildBase();
101
+ const state = { activeMode: 'auto', autoDetected: false };
102
+ const enriched = assembler.enrichForMessage(state, null);
103
+ expect(enriched).not.toContain('Active Mode');
104
+ });
105
+ it('should not inject mode when mode is "off"', async () => {
106
+ const assembler = await createAssembler({
107
+ 'operator.md': `<!-- mode: operator\n name: Operator\n description: test\n signals: run:0.8 -->\nOperator content`,
108
+ });
109
+ await assembler.buildBase();
110
+ const state = { activeMode: 'off', autoDetected: false };
111
+ const enriched = assembler.enrichForMessage(state, null);
112
+ expect(enriched).not.toContain('Active Mode');
113
+ });
114
+ it('should append memory section to enriched prompt', async () => {
115
+ const assembler = await createAssembler();
116
+ await assembler.buildBase();
117
+ const state = { activeMode: 'auto', autoDetected: false };
118
+ const enriched = assembler.enrichForMessage(state, '\n\n## Memories\nUser likes TypeScript.');
119
+ expect(enriched).toContain('## Memories');
120
+ expect(enriched).toContain('User likes TypeScript.');
121
+ });
122
+ it('should render extreme preference values', async () => {
123
+ const assembler = await createAssembler();
124
+ const extreme = {
125
+ verbosity: 0.0,
126
+ formality: 1.0,
127
+ proactiveness: 0.0,
128
+ riskTolerance: 1.0,
129
+ humor: 0.0,
130
+ feedbackStyle: 'sandwich',
131
+ expertiseAssumption: 'expert',
132
+ };
133
+ const rendered = assembler.renderPreferences(extreme);
134
+ expect(rendered).toContain('concise');
135
+ expect(rendered).toContain('formal');
136
+ expect(rendered).toContain('Only answer what is directly asked');
137
+ expect(rendered).toContain('bold');
138
+ expect(rendered).toContain('serious');
139
+ expect(rendered).toContain('sandwich');
140
+ expect(rendered).toContain('deep technical knowledge');
141
+ });
142
+ it('should not render preferences at default values', async () => {
143
+ const assembler = await createAssembler();
144
+ const rendered = assembler.renderPreferences(DEFAULT_PREFERENCES);
145
+ // At 0.5 values, no extreme language should appear
146
+ expect(rendered).not.toContain('concise');
147
+ expect(rendered).not.toContain('thorough');
148
+ expect(rendered).not.toContain('casual');
149
+ expect(rendered).not.toContain('formal');
150
+ });
151
+ it('should produce backward-compatible prompt when no modes active', async () => {
152
+ await fs.writeFile(path.join(workspaceDir, 'SOUL.md'), '# Soul');
153
+ const assembler = await createAssembler();
154
+ const base = await assembler.buildBase();
155
+ // With no mode state, enrichment should just be base + memory
156
+ const enriched = assembler.enrichForMessage(undefined, '\n\nmemory');
157
+ expect(enriched).toBe(base + '\n\nmemory');
158
+ });
159
+ // --- Security context and escalation tests ---
160
+ it('should produce security floor section without mode instructions', async () => {
161
+ const assembler = await createAssembler({
162
+ 'operator.md': `<!-- mode: operator\n name: Operator\n description: test\n signals: run:0.8 -->\nOperator content`,
163
+ });
164
+ await assembler.buildBase();
165
+ const sf = new SecurityFloor();
166
+ const ctx = sf.detectSecurityContext({ userMessage: 'rotate my API key' });
167
+ const enriched = assembler.enrichForSecurityContext(ctx, sf, null);
168
+ expect(enriched).toContain('Security Floor Active');
169
+ expect(enriched).not.toContain('Active Mode');
170
+ expect(enriched).not.toContain('User Preferences');
171
+ });
172
+ it('should include memories in security context prompt', async () => {
173
+ const assembler = await createAssembler();
174
+ await assembler.buildBase();
175
+ const sf = new SecurityFloor();
176
+ const ctx = sf.detectSecurityContext({ userMessage: 'revoke access' });
177
+ const enriched = assembler.enrichForSecurityContext(ctx, sf, '\n\n## Memories\nUser prefers verbose.');
178
+ expect(enriched).toContain('Security Floor Active');
179
+ expect(enriched).toContain('## Memories');
180
+ expect(enriched).toContain('User prefers verbose.');
181
+ });
182
+ it('should dampen tone for caution escalation', async () => {
183
+ await fs.writeFile(path.join(workspaceDir, 'SOUL.md'), '# Soul');
184
+ const assembler = await createAssembler();
185
+ await assembler.buildBase();
186
+ const escalation = { level: 'caution', lastEvent: 'uncertainty' };
187
+ const enriched = assembler.enrichForMessage(undefined, null, undefined, escalation);
188
+ // Humor should be halved: 0.3 * 0.5 = 0.15
189
+ expect(enriched).toContain('Humor: 0.15/1.0');
190
+ });
191
+ it('should zero humor for serious escalation', async () => {
192
+ await fs.writeFile(path.join(workspaceDir, 'SOUL.md'), '# Soul');
193
+ const assembler = await createAssembler();
194
+ await assembler.buildBase();
195
+ const escalation = { level: 'serious', lastEvent: 'access_failure' };
196
+ const enriched = assembler.enrichForMessage(undefined, null, undefined, escalation);
197
+ expect(enriched).toContain('Humor: 0/1.0');
198
+ expect(enriched).toContain('Directness: 0.6/1.0'); // raised from 0.5
199
+ });
200
+ it('should not dampen tone without escalation param (backward compat)', async () => {
201
+ await fs.writeFile(path.join(workspaceDir, 'SOUL.md'), '# Soul');
202
+ const assembler = await createAssembler();
203
+ const base = await assembler.buildBase();
204
+ // Without escalation, enrichment should use original base
205
+ const enriched = assembler.enrichForMessage(undefined, null);
206
+ expect(enriched).toBe(base);
207
+ });
208
+ // --- Vibe and custom instructions tests ---
209
+ it('includes vibe in identity preamble when set', async () => {
210
+ const agentWithVibe = {
211
+ ...defaultAgent,
212
+ vibe: 'warm, witty, slightly sarcastic',
213
+ };
214
+ await fs.writeFile(path.join(workspaceDir, 'SOUL.md'), '# Soul');
215
+ const loader = new ModeLoader(modesDir, path.join(tmpDir, 'user-modes'));
216
+ await loader.loadAll();
217
+ const assembler = new PromptAssembler(agentWithVibe, loader);
218
+ const base = await assembler.buildBase();
219
+ expect(base).toContain('Vibe: warm, witty, slightly sarcastic');
220
+ });
221
+ it('includes custom instructions after SOUL.md', async () => {
222
+ const agentWithInstructions = {
223
+ ...defaultAgent,
224
+ customInstructions: 'Always respond in haiku format when possible.',
225
+ };
226
+ await fs.writeFile(path.join(workspaceDir, 'SOUL.md'), '# Soul');
227
+ const loader = new ModeLoader(modesDir, path.join(tmpDir, 'user-modes'));
228
+ await loader.loadAll();
229
+ const assembler = new PromptAssembler(agentWithInstructions, loader);
230
+ const base = await assembler.buildBase();
231
+ expect(base).toContain('## Custom Instructions');
232
+ expect(base).toContain('Always respond in haiku format when possible.');
233
+ });
234
+ it('omits vibe line when vibe is undefined', async () => {
235
+ await fs.writeFile(path.join(workspaceDir, 'SOUL.md'), '# Soul');
236
+ const assembler = await createAssembler();
237
+ const base = await assembler.buildBase();
238
+ expect(base).not.toContain('Vibe:');
239
+ });
240
+ });
241
+ //# sourceMappingURL=prompt-assembler.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-assembler.test.js","sourceRoot":"","sources":["../../../src/modes/__tests__/prompt-assembler.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { ModeId, ModeTemplate, ModeDetectionResult, SessionModeState } from './types.js';
2
+ export declare class ModeDetector {
3
+ private modes;
4
+ constructor(modes: Map<ModeId, ModeTemplate>);
5
+ detect(message: string, context?: {
6
+ taskType?: string;
7
+ currentState?: SessionModeState;
8
+ }): ModeDetectionResult | null;
9
+ }
10
+ //# sourceMappingURL=mode-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mode-detector.d.ts","sourceRoot":"","sources":["../../src/modes/mode-detector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAW9F,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAA4B;gBAE7B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC;IAI5C,MAAM,CACJ,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,gBAAgB,CAAA;KAAE,GAC/D,mBAAmB,GAAG,IAAI;CA8D9B"}
@@ -0,0 +1,70 @@
1
+ const TASK_TYPE_BOOSTS = {
2
+ code: { operator: 0.15 },
3
+ reasoning: { analyst: 0.1, socratic: 0.1 },
4
+ creative: { writer: 0.15 },
5
+ fast: { operator: 0.1 },
6
+ };
7
+ const HYSTERESIS_BONUS = 0.05;
8
+ export class ModeDetector {
9
+ modes;
10
+ constructor(modes) {
11
+ this.modes = modes;
12
+ }
13
+ detect(message, context) {
14
+ if (!message || message.length < 3)
15
+ return null;
16
+ const lowerMessage = message.toLowerCase();
17
+ const scores = new Map();
18
+ for (const [id, mode] of this.modes) {
19
+ let score = 0;
20
+ for (const signal of mode.signals) {
21
+ if (lowerMessage.includes(signal.phrase)) {
22
+ score += signal.weight;
23
+ }
24
+ }
25
+ if (score > 0) {
26
+ scores.set(id, score);
27
+ }
28
+ }
29
+ if (scores.size === 0)
30
+ return null;
31
+ // Apply task-type boosts
32
+ if (context?.taskType) {
33
+ const boosts = TASK_TYPE_BOOSTS[context.taskType];
34
+ if (boosts) {
35
+ for (const [modeId, boost] of Object.entries(boosts)) {
36
+ const current = scores.get(modeId) ?? 0;
37
+ if (current > 0) {
38
+ scores.set(modeId, current + boost);
39
+ }
40
+ }
41
+ }
42
+ }
43
+ // Apply hysteresis for current mode
44
+ if (context?.currentState?.activeMode && context.currentState.activeMode !== 'auto' && context.currentState.activeMode !== 'off') {
45
+ const currentMode = context.currentState.activeMode;
46
+ const current = scores.get(currentMode);
47
+ if (current !== undefined) {
48
+ scores.set(currentMode, current + HYSTERESIS_BONUS);
49
+ }
50
+ }
51
+ // Normalize scores
52
+ const maxScore = Math.max(...scores.values());
53
+ const candidates = [];
54
+ for (const [mode, score] of scores) {
55
+ candidates.push({ mode, score: score / maxScore });
56
+ }
57
+ candidates.sort((a, b) => b.score - a.score);
58
+ const best = candidates[0];
59
+ // Confidence is based on the raw normalized score
60
+ const confidence = best.score;
61
+ if (confidence < 0.4)
62
+ return null;
63
+ return {
64
+ mode: best.mode,
65
+ confidence,
66
+ candidates,
67
+ };
68
+ }
69
+ }
70
+ //# sourceMappingURL=mode-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mode-detector.js","sourceRoot":"","sources":["../../src/modes/mode-detector.ts"],"names":[],"mappings":"AAEA,MAAM,gBAAgB,GAAoD;IACxE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;IACxB,SAAS,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE;IAC1C,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;IAC1B,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE;CACxB,CAAC;AAEF,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAE9B,MAAM,OAAO,YAAY;IACf,KAAK,CAA4B;IAEzC,YAAY,KAAgC;QAC1C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,MAAM,CACJ,OAAe,EACf,OAAgE;QAEhE,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAEhD,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;QAEzC,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACpC,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBAClC,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;oBACzC,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC;gBACzB,CAAC;YACH,CAAC;YACD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACd,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAEnC,yBAAyB;QACzB,IAAI,OAAO,EAAE,QAAQ,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAClD,IAAI,MAAM,EAAE,CAAC;gBACX,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;oBACrD,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,MAAgB,CAAC,IAAI,CAAC,CAAC;oBAClD,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;wBAChB,MAAM,CAAC,GAAG,CAAC,MAAgB,EAAE,OAAO,GAAG,KAAK,CAAC,CAAC;oBAChD,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,oCAAoC;QACpC,IAAI,OAAO,EAAE,YAAY,EAAE,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC,UAAU,KAAK,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;YACjI,MAAM,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,UAAoB,CAAC;YAC9D,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACxC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,GAAG,gBAAgB,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9C,MAAM,UAAU,GAA2C,EAAE,CAAC;QAC9D,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;YACnC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,GAAG,QAAQ,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAE7C,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAC3B,kDAAkD;QAClD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;QAE9B,IAAI,UAAU,GAAG,GAAG;YAAE,OAAO,IAAI,CAAC;QAElC,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,UAAU;YACV,UAAU;SACX,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,14 @@
1
+ import { type ModeId, type ModeTemplate } from './types.js';
2
+ export declare class ModeLoader {
3
+ private builtInDir;
4
+ private userDir;
5
+ private cache;
6
+ constructor(builtInDir: string, userDir: string);
7
+ loadAll(): Promise<Map<ModeId, ModeTemplate>>;
8
+ get(id: ModeId): ModeTemplate | undefined;
9
+ getAll(): Map<ModeId, ModeTemplate>;
10
+ reload(): Promise<Map<ModeId, ModeTemplate>>;
11
+ private loadFromDir;
12
+ private parseMode;
13
+ }
14
+ //# sourceMappingURL=mode-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mode-loader.d.ts","sourceRoot":"","sources":["../../src/modes/mode-loader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAY,KAAK,MAAM,EAAE,KAAK,YAAY,EAAmB,MAAM,YAAY,CAAC;AAEvF,qBAAa,UAAU;IACrB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAwC;gBAEzC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAKzC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAYnD,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIzC,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC;IAI7B,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;YAIpC,WAAW;IAyBzB,OAAO,CAAC,SAAS;CAyClB"}
@@ -0,0 +1,94 @@
1
+ import * as fs from 'node:fs/promises';
2
+ import * as path from 'node:path';
3
+ import { MODE_IDS } from './types.js';
4
+ export class ModeLoader {
5
+ builtInDir;
6
+ userDir;
7
+ cache = new Map();
8
+ constructor(builtInDir, userDir) {
9
+ this.builtInDir = builtInDir;
10
+ this.userDir = userDir;
11
+ }
12
+ async loadAll() {
13
+ this.cache.clear();
14
+ // Load built-in modes first
15
+ await this.loadFromDir(this.builtInDir);
16
+ // User modes override built-ins
17
+ await this.loadFromDir(this.userDir);
18
+ return this.cache;
19
+ }
20
+ get(id) {
21
+ return this.cache.get(id);
22
+ }
23
+ getAll() {
24
+ return this.cache;
25
+ }
26
+ async reload() {
27
+ return this.loadAll();
28
+ }
29
+ async loadFromDir(dir) {
30
+ let entries;
31
+ try {
32
+ entries = await fs.readdir(dir);
33
+ }
34
+ catch {
35
+ return;
36
+ }
37
+ for (const entry of entries) {
38
+ if (!entry.endsWith('.md'))
39
+ continue;
40
+ const id = path.basename(entry, '.md');
41
+ if (!MODE_IDS.includes(id))
42
+ continue;
43
+ try {
44
+ const content = await fs.readFile(path.join(dir, entry), 'utf-8');
45
+ const template = this.parseMode(id, content);
46
+ if (template) {
47
+ this.cache.set(template.id, template);
48
+ }
49
+ }
50
+ catch {
51
+ // Skip invalid files
52
+ }
53
+ }
54
+ }
55
+ parseMode(id, content) {
56
+ // Parse HTML comment metadata: <!-- mode: operator\n name: ...\n signals: run:0.8, execute:0.8 -->
57
+ const metaMatch = content.match(/^<!--\s*([\s\S]*?)-->\s*\n?/);
58
+ if (!metaMatch)
59
+ return null;
60
+ let name = id;
61
+ let description = '';
62
+ const signals = [];
63
+ const metaLines = metaMatch[1].split('\n');
64
+ for (const line of metaLines) {
65
+ const kv = line.match(/^\s*(\w+):\s*(.+)$/);
66
+ if (!kv)
67
+ continue;
68
+ const [, key, value] = kv;
69
+ switch (key) {
70
+ case 'name':
71
+ name = value.trim();
72
+ break;
73
+ case 'description':
74
+ description = value.trim();
75
+ break;
76
+ case 'signals':
77
+ for (const pair of value.split(',')) {
78
+ const parts = pair.trim().split(':');
79
+ if (parts.length === 2) {
80
+ signals.push({
81
+ phrase: parts[0].trim().toLowerCase(),
82
+ weight: parseFloat(parts[1].trim()) || 0.5,
83
+ });
84
+ }
85
+ }
86
+ break;
87
+ }
88
+ }
89
+ // Everything after the comment block is prompt content
90
+ const promptContent = content.slice(metaMatch[0].length).trim();
91
+ return { id, name, description, promptContent, signals };
92
+ }
93
+ }
94
+ //# sourceMappingURL=mode-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mode-loader.js","sourceRoot":"","sources":["../../src/modes/mode-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { AgentIdentity } from '@auxiora/config';
2
+ import type { ModeLoader } from './mode-loader.js';
3
+ import type { SessionModeState, UserPreferences } from './types.js';
4
+ import type { SecurityContext } from '../security-floor.js';
5
+ import type { SecurityFloor } from '../security-floor.js';
6
+ import type { EscalationState } from '../escalation.js';
7
+ export declare class PromptAssembler {
8
+ private agent;
9
+ private modeLoader;
10
+ private personalityAdapter?;
11
+ private basePrompt;
12
+ constructor(agent: AgentIdentity, modeLoader: ModeLoader, personalityAdapter?: {
13
+ getPromptModifier(): Promise<string | null>;
14
+ });
15
+ buildBase(): Promise<string>;
16
+ getBasePrompt(): string;
17
+ /**
18
+ * Build a prompt for a security context: base prompt + security floor section + memories.
19
+ * No mode instructions or user preferences are included.
20
+ */
21
+ enrichForSecurityContext(securityContext: SecurityContext, securityFloor: SecurityFloor, memorySection: string | null): string;
22
+ enrichForMessage(modeState: SessionModeState | undefined, memorySection: string | null, preferences?: UserPreferences, escalationState?: EscalationState, _channelType?: string): string;
23
+ renderPreferences(prefs: UserPreferences): string;
24
+ private dampenToneForEscalation;
25
+ private buildIdentityPreamble;
26
+ }
27
+ //# sourceMappingURL=prompt-assembler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-assembler.d.ts","sourceRoot":"","sources":["../../src/modes/prompt-assembler.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAU,MAAM,YAAY,CAAC;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,qBAAa,eAAe;IAC1B,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,kBAAkB,CAAC,CAAkD;IAC7E,OAAO,CAAC,UAAU,CAAc;gBAG9B,KAAK,EAAE,aAAa,EACpB,UAAU,EAAE,UAAU,EACtB,kBAAkB,CAAC,EAAE;QAAE,iBAAiB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;KAAE;IAOhE,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IA4DlC,aAAa,IAAI,MAAM;IAIvB;;;OAGG;IACH,wBAAwB,CACtB,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,MAAM,GAAG,IAAI,GAC3B,MAAM;IAiBT,gBAAgB,CACd,SAAS,EAAE,gBAAgB,GAAG,SAAS,EACvC,aAAa,EAAE,MAAM,GAAG,IAAI,EAC5B,WAAW,CAAC,EAAE,eAAe,EAC7B,eAAe,CAAC,EAAE,eAAe,EACjC,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM;IA2CT,iBAAiB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM;IAgDjD,OAAO,CAAC,uBAAuB;IAc/B,OAAO,CAAC,qBAAqB;CA+C9B"}