@auxiora/personality 1.0.0 → 1.3.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/dist/__tests__/architect-awareness-collector.test.d.ts +2 -0
- package/dist/__tests__/architect-awareness-collector.test.d.ts.map +1 -0
- package/dist/__tests__/architect-awareness-collector.test.js +57 -0
- package/dist/__tests__/architect-awareness-collector.test.js.map +1 -0
- package/dist/__tests__/architect-bridge.test.d.ts +2 -0
- package/dist/__tests__/architect-bridge.test.d.ts.map +1 -0
- package/dist/__tests__/architect-bridge.test.js +59 -0
- package/dist/__tests__/architect-bridge.test.js.map +1 -0
- package/dist/__tests__/soul-bias-parser.test.d.ts +2 -0
- package/dist/__tests__/soul-bias-parser.test.d.ts.map +1 -0
- package/dist/__tests__/soul-bias-parser.test.js +47 -0
- package/dist/__tests__/soul-bias-parser.test.js.map +1 -0
- package/dist/architect-awareness-collector.d.ts +20 -0
- package/dist/architect-awareness-collector.d.ts.map +1 -0
- package/dist/architect-awareness-collector.js +41 -0
- package/dist/architect-awareness-collector.js.map +1 -0
- package/dist/architect-bridge.d.ts +35 -0
- package/dist/architect-bridge.d.ts.map +1 -0
- package/dist/architect-bridge.js +70 -0
- package/dist/architect-bridge.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/marketplace/schema.d.ts +6 -6
- package/dist/soul-bias-parser.d.ts +10 -0
- package/dist/soul-bias-parser.d.ts.map +1 -0
- package/dist/soul-bias-parser.js +48 -0
- package/dist/soul-bias-parser.js.map +1 -0
- package/lib/context-detector.d.ts +23 -0
- package/lib/context-detector.js +275 -0
- package/lib/context-profiles.d.ts +3 -0
- package/lib/context-profiles.js +550 -0
- package/lib/conversation-context.d.ts +70 -0
- package/lib/conversation-context.js +144 -0
- package/lib/conversation-export.d.ts +77 -0
- package/lib/conversation-export.js +254 -0
- package/lib/correction-store.d.ts +53 -0
- package/lib/correction-store.js +185 -0
- package/lib/custom-weights.d.ts +43 -0
- package/lib/custom-weights.js +164 -0
- package/lib/emotional-overrides.d.ts +14 -0
- package/lib/emotional-overrides.js +86 -0
- package/lib/emotional-tracker.d.ts +41 -0
- package/lib/emotional-tracker.js +210 -0
- package/lib/index.d.ts +161 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +486 -0
- package/lib/index.js.map +1 -0
- package/lib/persistence-adapter.d.ts +55 -0
- package/lib/persistence-adapter.js +50 -0
- package/lib/persistence.d.ts +49 -0
- package/lib/persistence.js +116 -0
- package/lib/prompt-assembler.d.ts +16 -0
- package/lib/prompt-assembler.js +66 -0
- package/lib/recommender.d.ts +25 -0
- package/lib/recommender.js +125 -0
- package/lib/schema.d.ts +173 -0
- package/lib/schema.d.ts.map +1 -0
- package/lib/schema.js +2 -0
- package/lib/schema.js.map +1 -0
- package/lib/source-map.d.ts +9 -0
- package/lib/source-map.js +223 -0
- package/lib/system-prompt.d.ts +2 -0
- package/lib/system-prompt.js +102 -0
- package/lib/the-architect/context-detector.d.ts +23 -0
- package/lib/the-architect/context-detector.d.ts.map +1 -0
- package/lib/the-architect/context-detector.js +275 -0
- package/lib/the-architect/context-detector.js.map +1 -0
- package/lib/the-architect/context-profiles.d.ts +3 -0
- package/lib/the-architect/context-profiles.d.ts.map +1 -0
- package/lib/the-architect/context-profiles.js +550 -0
- package/lib/the-architect/context-profiles.js.map +1 -0
- package/lib/the-architect/conversation-context.d.ts +70 -0
- package/lib/the-architect/conversation-context.js +144 -0
- package/lib/the-architect/conversation-context.js.map +1 -0
- package/lib/the-architect/conversation-export.d.ts +77 -0
- package/lib/the-architect/conversation-export.js +254 -0
- package/lib/the-architect/correction-store.d.ts +53 -0
- package/lib/the-architect/correction-store.d.ts.map +1 -0
- package/lib/the-architect/correction-store.js +185 -0
- package/lib/the-architect/correction-store.js.map +1 -0
- package/lib/the-architect/custom-weights.d.ts +43 -0
- package/lib/the-architect/custom-weights.js +164 -0
- package/lib/the-architect/emotional-overrides.d.ts +14 -0
- package/lib/the-architect/emotional-overrides.d.ts.map +1 -0
- package/lib/the-architect/emotional-overrides.js +86 -0
- package/lib/the-architect/emotional-overrides.js.map +1 -0
- package/lib/the-architect/emotional-tracker.d.ts +41 -0
- package/lib/the-architect/emotional-tracker.js +210 -0
- package/lib/the-architect/index.d.ts +161 -0
- package/lib/the-architect/index.d.ts.map +1 -0
- package/lib/the-architect/index.js +486 -0
- package/lib/the-architect/index.js.map +1 -0
- package/lib/the-architect/persistence-adapter.d.ts +55 -0
- package/lib/the-architect/persistence-adapter.js +50 -0
- package/lib/the-architect/persistence.d.ts +49 -0
- package/lib/the-architect/persistence.js +116 -0
- package/lib/the-architect/prompt-assembler.d.ts +16 -0
- package/lib/the-architect/prompt-assembler.d.ts.map +1 -0
- package/lib/the-architect/prompt-assembler.js +66 -0
- package/lib/the-architect/prompt-assembler.js.map +1 -0
- package/lib/the-architect/recommender.d.ts +25 -0
- package/lib/the-architect/recommender.js +125 -0
- package/lib/the-architect/source-map.d.ts +9 -0
- package/lib/the-architect/source-map.d.ts.map +1 -0
- package/lib/the-architect/source-map.js +223 -0
- package/lib/the-architect/source-map.js.map +1 -0
- package/lib/the-architect/system-prompt.d.ts +2 -0
- package/lib/the-architect/system-prompt.d.ts.map +1 -0
- package/lib/the-architect/system-prompt.js +102 -0
- package/lib/the-architect/system-prompt.js.map +1 -0
- package/lib/the-architect/trait-to-instruction.d.ts +12 -0
- package/lib/the-architect/trait-to-instruction.d.ts.map +1 -0
- package/lib/the-architect/trait-to-instruction.js +330 -0
- package/lib/the-architect/trait-to-instruction.js.map +1 -0
- package/lib/trait-to-instruction.d.ts +12 -0
- package/lib/trait-to-instruction.js +330 -0
- package/package.json +15 -3
- package/modes/advisor.md +0 -24
- package/modes/analyst.md +0 -25
- package/modes/companion.md +0 -24
- package/modes/legal.md +0 -1188
- package/modes/operator.md +0 -24
- package/modes/roast.md +0 -24
- package/modes/socratic.md +0 -24
- package/modes/writer.md +0 -23
- package/src/__tests__/builder.test.ts +0 -78
- package/src/__tests__/conversation-builder.test.ts +0 -386
- package/src/__tests__/escalation.test.ts +0 -172
- package/src/__tests__/manager.test.ts +0 -141
- package/src/__tests__/parser.test.ts +0 -101
- package/src/__tests__/security-floor.test.ts +0 -212
- package/src/builder.ts +0 -75
- package/src/conversation-builder.ts +0 -279
- package/src/escalation.ts +0 -162
- package/src/index.ts +0 -55
- package/src/manager.ts +0 -119
- package/src/marketplace/__tests__/scanner.test.ts +0 -159
- package/src/marketplace/__tests__/schema.test.ts +0 -269
- package/src/marketplace/scanner.ts +0 -85
- package/src/marketplace/schema.ts +0 -141
- package/src/modes/__tests__/mode-detector.test.ts +0 -149
- package/src/modes/__tests__/mode-loader.test.ts +0 -143
- package/src/modes/__tests__/prompt-assembler.test.ts +0 -291
- package/src/modes/mode-detector.ts +0 -84
- package/src/modes/mode-loader.ts +0 -105
- package/src/modes/prompt-assembler.ts +0 -278
- package/src/modes/types.ts +0 -67
- package/src/parser.ts +0 -132
- package/src/security-floor.ts +0 -147
- package/src/types.ts +0 -27
- package/src/voice-profiles.ts +0 -88
- package/templates/chill.md +0 -30
- package/templates/creative.md +0 -29
- package/templates/friendly.md +0 -28
- package/templates/mentor.md +0 -31
- package/templates/minimal.md +0 -24
- package/templates/professional.md +0 -28
- package/templates/technical.md +0 -30
- package/tsconfig.json +0 -12
- package/tsconfig.tsbuildinfo +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"architect-awareness-collector.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/architect-awareness-collector.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { ArchitectAwarenessCollector } from '../architect-awareness-collector.js';
|
|
3
|
+
function ctx() {
|
|
4
|
+
return { userId: 'u1', sessionId: 's1', chatId: 'c1', currentMessage: 'test', recentMessages: [] };
|
|
5
|
+
}
|
|
6
|
+
describe('ArchitectAwarenessCollector', () => {
|
|
7
|
+
it('should return empty when no architect output set', async () => {
|
|
8
|
+
const collector = new ArchitectAwarenessCollector();
|
|
9
|
+
const signals = await collector.collect(ctx());
|
|
10
|
+
expect(signals).toEqual([]);
|
|
11
|
+
});
|
|
12
|
+
it('should emit domain signal when domain is not general', async () => {
|
|
13
|
+
const collector = new ArchitectAwarenessCollector();
|
|
14
|
+
collector.updateOutput({
|
|
15
|
+
detectedContext: { domain: 'security_review', emotionalRegister: 'neutral', stakes: 'high', complexity: 'moderate', detectionConfidence: 0.85 },
|
|
16
|
+
emotionalTrajectory: 'stable',
|
|
17
|
+
});
|
|
18
|
+
const signals = await collector.collect(ctx());
|
|
19
|
+
expect(signals).toHaveLength(1);
|
|
20
|
+
expect(signals[0].dimension).toBe('architect-context');
|
|
21
|
+
expect(signals[0].priority).toBe(0.6);
|
|
22
|
+
expect(signals[0].text).toContain('security_review');
|
|
23
|
+
expect(signals[0].text).toContain('0.85');
|
|
24
|
+
});
|
|
25
|
+
it('should emit emotional trajectory signal when not stable', async () => {
|
|
26
|
+
const collector = new ArchitectAwarenessCollector();
|
|
27
|
+
collector.updateOutput({
|
|
28
|
+
detectedContext: { domain: 'general', emotionalRegister: 'stressed', stakes: 'medium', complexity: 'low' },
|
|
29
|
+
emotionalTrajectory: 'escalating',
|
|
30
|
+
});
|
|
31
|
+
const signals = await collector.collect(ctx());
|
|
32
|
+
expect(signals).toHaveLength(1);
|
|
33
|
+
expect(signals[0].dimension).toBe('architect-emotion');
|
|
34
|
+
expect(signals[0].priority).toBe(0.8);
|
|
35
|
+
expect(signals[0].text).toContain('escalating');
|
|
36
|
+
});
|
|
37
|
+
it('should emit escalation alert signal with highest priority', async () => {
|
|
38
|
+
const collector = new ArchitectAwarenessCollector();
|
|
39
|
+
collector.updateOutput({
|
|
40
|
+
detectedContext: { domain: 'crisis_management', emotionalRegister: 'stressed', stakes: 'critical', complexity: 'high', detectionConfidence: 0.95 },
|
|
41
|
+
emotionalTrajectory: 'escalating',
|
|
42
|
+
escalationAlert: true,
|
|
43
|
+
});
|
|
44
|
+
const signals = await collector.collect(ctx());
|
|
45
|
+
expect(signals).toHaveLength(3);
|
|
46
|
+
const escalation = signals.find(s => s.dimension === 'architect-escalation');
|
|
47
|
+
expect(escalation).toBeDefined();
|
|
48
|
+
expect(escalation.priority).toBe(1.0);
|
|
49
|
+
expect(escalation.text).toContain('escalation detected');
|
|
50
|
+
});
|
|
51
|
+
it('should be named "architect-bridge"', () => {
|
|
52
|
+
const collector = new ArchitectAwarenessCollector();
|
|
53
|
+
expect(collector.name).toBe('architect-bridge');
|
|
54
|
+
expect(collector.enabled).toBe(true);
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
//# sourceMappingURL=architect-awareness-collector.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"architect-awareness-collector.test.js","sourceRoot":"","sources":["../../src/__tests__/architect-awareness-collector.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAGlF,SAAS,GAAG;IACV,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC;AACrG,CAAC;AAED,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,SAAS,GAAG,IAAI,2BAA2B,EAAE,CAAC;QACpD,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/C,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,SAAS,GAAG,IAAI,2BAA2B,EAAE,CAAC;QACpD,SAAS,CAAC,YAAY,CAAC;YACrB,eAAe,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,mBAAmB,EAAE,IAAI,EAAE;YAC/I,mBAAmB,EAAE,QAAQ;SAC9B,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/C,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACvD,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QACrD,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,SAAS,GAAG,IAAI,2BAA2B,EAAE,CAAC;QACpD,SAAS,CAAC,YAAY,CAAC;YACrB,eAAe,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE;YAC1G,mBAAmB,EAAE,YAAY;SAClC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/C,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACvD,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,SAAS,GAAG,IAAI,2BAA2B,EAAE,CAAC;QACpD,SAAS,CAAC,YAAY,CAAC;YACrB,eAAe,EAAE,EAAE,MAAM,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,mBAAmB,EAAE,IAAI,EAAE;YAClJ,mBAAmB,EAAE,YAAY;YACjC,eAAe,EAAE,IAAI;SACtB,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/C,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,sBAAsB,CAAC,CAAC;QAC7E,MAAM,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;QACjC,MAAM,CAAC,UAAW,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvC,MAAM,CAAC,UAAW,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,SAAS,GAAG,IAAI,2BAA2B,EAAE,CAAC;QACpD,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAChD,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"architect-bridge.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/architect-bridge.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { describe, it, expect, vi } from 'vitest';
|
|
2
|
+
import { ArchitectBridge } from '../architect-bridge.js';
|
|
3
|
+
import { ArchitectAwarenessCollector } from '../architect-awareness-collector.js';
|
|
4
|
+
function mockArchitect() {
|
|
5
|
+
return {
|
|
6
|
+
getConversationSummary: vi.fn().mockReturnValue({
|
|
7
|
+
theme: 'security_review',
|
|
8
|
+
messageCount: 3,
|
|
9
|
+
}),
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
function mockVault() {
|
|
13
|
+
const store = new Map();
|
|
14
|
+
return {
|
|
15
|
+
get: vi.fn((key) => store.get(key)),
|
|
16
|
+
add: vi.fn(async (key, value) => { store.set(key, value); }),
|
|
17
|
+
has: vi.fn((key) => store.has(key)),
|
|
18
|
+
store, // expose for test setup
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
describe('ArchitectBridge', () => {
|
|
22
|
+
it('should update awareness collector after prompt', () => {
|
|
23
|
+
const collector = new ArchitectAwarenessCollector();
|
|
24
|
+
const bridge = new ArchitectBridge(mockArchitect(), collector, mockVault());
|
|
25
|
+
bridge.afterPrompt({ domain: 'security_review', emotionalRegister: 'neutral', stakes: 'high', complexity: 'moderate', detectionConfidence: 0.85 }, 'stable', undefined, 'chat-1');
|
|
26
|
+
// Collector should have received the snapshot
|
|
27
|
+
expect(collector.enabled).toBe(true);
|
|
28
|
+
});
|
|
29
|
+
it('should persist conversation state to vault', () => {
|
|
30
|
+
const architect = mockArchitect();
|
|
31
|
+
const vault = mockVault();
|
|
32
|
+
const bridge = new ArchitectBridge(architect, new ArchitectAwarenessCollector(), vault);
|
|
33
|
+
bridge.afterPrompt({ domain: 'general', emotionalRegister: 'neutral', stakes: 'moderate', complexity: 'moderate' }, 'stable', undefined, 'chat-42');
|
|
34
|
+
expect(vault.add).toHaveBeenCalledWith('architect:chat:chat-42', expect.any(String));
|
|
35
|
+
});
|
|
36
|
+
it('should fire escalation callback when alert present', () => {
|
|
37
|
+
const onEscalation = vi.fn();
|
|
38
|
+
const bridge = new ArchitectBridge(mockArchitect(), new ArchitectAwarenessCollector(), mockVault(), { onEscalation });
|
|
39
|
+
bridge.afterPrompt({ domain: 'crisis_management', emotionalRegister: 'stressed', stakes: 'critical', complexity: 'high', detectionConfidence: 0.95 }, 'escalating', true, 'chat-1');
|
|
40
|
+
expect(onEscalation).toHaveBeenCalledWith('Emotional escalation detected', expect.objectContaining({ domain: 'crisis_management' }));
|
|
41
|
+
});
|
|
42
|
+
it('should NOT fire escalation callback when no alert', () => {
|
|
43
|
+
const onEscalation = vi.fn();
|
|
44
|
+
const bridge = new ArchitectBridge(mockArchitect(), new ArchitectAwarenessCollector(), mockVault(), { onEscalation });
|
|
45
|
+
bridge.afterPrompt({ domain: 'general', emotionalRegister: 'neutral', stakes: 'moderate', complexity: 'moderate' }, 'stable', undefined, 'chat-1');
|
|
46
|
+
expect(onEscalation).not.toHaveBeenCalled();
|
|
47
|
+
});
|
|
48
|
+
it('should read vault on first message per chat only', () => {
|
|
49
|
+
const vault = mockVault();
|
|
50
|
+
vault.store.set('architect:chat:chat-99', JSON.stringify({ theme: 'security_review', messageCount: 3, lastUpdated: Date.now() }));
|
|
51
|
+
const bridge = new ArchitectBridge(mockArchitect(), new ArchitectAwarenessCollector(), vault);
|
|
52
|
+
bridge.afterPrompt({ domain: 'general' }, 'stable', undefined, 'chat-99');
|
|
53
|
+
expect(vault.get).toHaveBeenCalledWith('architect:chat:chat-99');
|
|
54
|
+
// Second message should NOT re-read
|
|
55
|
+
bridge.afterPrompt({ domain: 'general' }, 'stable', undefined, 'chat-99');
|
|
56
|
+
expect(vault.get).toHaveBeenCalledTimes(1);
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
//# sourceMappingURL=architect-bridge.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"architect-bridge.test.js","sourceRoot":"","sources":["../../src/__tests__/architect-bridge.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"soul-bias-parser.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/soul-bias-parser.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { parseSoulBiases } from '../soul-bias-parser.js';
|
|
3
|
+
describe('parseSoulBiases', () => {
|
|
4
|
+
it('should detect security bias from security-focused SOUL.md', () => {
|
|
5
|
+
const soul = `You are a security-first assistant.
|
|
6
|
+
Always check for vulnerabilities and audit compliance.
|
|
7
|
+
Prioritize encryption and authentication in all recommendations.
|
|
8
|
+
Review threat models and access controls carefully.`;
|
|
9
|
+
const biases = parseSoulBiases(soul);
|
|
10
|
+
expect(biases['security_review']).toBeGreaterThan(0);
|
|
11
|
+
expect(biases['security_review']).toBeLessThanOrEqual(0.15);
|
|
12
|
+
});
|
|
13
|
+
it('should detect code engineering bias', () => {
|
|
14
|
+
const soul = `You specialize in TypeScript and React development.
|
|
15
|
+
Help with code reviews, API design, and testing.
|
|
16
|
+
Focus on clean architecture and CI/CD pipelines.
|
|
17
|
+
Assist with refactoring and debugging.`;
|
|
18
|
+
const biases = parseSoulBiases(soul);
|
|
19
|
+
expect(biases['code_engineering']).toBeGreaterThan(0);
|
|
20
|
+
});
|
|
21
|
+
it('should return empty object for generic SOUL.md', () => {
|
|
22
|
+
const soul = `You are a helpful assistant. Be kind and concise.`;
|
|
23
|
+
const biases = parseSoulBiases(soul);
|
|
24
|
+
expect(Object.keys(biases).length).toBe(0);
|
|
25
|
+
});
|
|
26
|
+
it('should return empty object for empty string', () => {
|
|
27
|
+
const biases = parseSoulBiases('');
|
|
28
|
+
expect(Object.keys(biases).length).toBe(0);
|
|
29
|
+
});
|
|
30
|
+
it('should cap biases at 0.15', () => {
|
|
31
|
+
const soul = `vulnerability CVE threat exploit patch audit compliance penetration
|
|
32
|
+
firewall incident breach SIEM SOC CTEM attack surface zero-day Qualys
|
|
33
|
+
CrowdStrike Splunk Wiz TORQ security encryption authentication authorization`;
|
|
34
|
+
const biases = parseSoulBiases(soul);
|
|
35
|
+
expect(biases['security_review']).toBe(0.15);
|
|
36
|
+
});
|
|
37
|
+
it('should detect multiple domain biases', () => {
|
|
38
|
+
const soul = `You are a security-focused engineering assistant.
|
|
39
|
+
Help with code reviews, vulnerability assessments, and API design.
|
|
40
|
+
Focus on secure coding practices, threat modeling, and refactoring.
|
|
41
|
+
Assist with testing, CI/CD pipelines, and deployment.
|
|
42
|
+
Review authentication, encryption, and audit compliance.`;
|
|
43
|
+
const biases = parseSoulBiases(soul);
|
|
44
|
+
expect(Object.keys(biases).length).toBeGreaterThanOrEqual(2);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
//# sourceMappingURL=soul-bias-parser.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"soul-bias-parser.test.js","sourceRoot":"","sources":["../../src/__tests__/soul-bias-parser.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,IAAI,GAAG;;;oDAGmC,CAAC;QACjD,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACrD,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,IAAI,GAAG;;;uCAGsB,CAAC;QACpC,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,IAAI,GAAG,mDAAmD,CAAC;QACjE,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,MAAM,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,IAAI,GAAG;;6EAE4D,CAAC;QAC1E,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,IAAI,GAAG;;;;yDAIwC,CAAC;QACtD,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { SignalCollector, AwarenessSignal, CollectionContext } from '@auxiora/self-awareness';
|
|
2
|
+
export interface ArchitectSnapshot {
|
|
3
|
+
detectedContext: {
|
|
4
|
+
domain: string;
|
|
5
|
+
emotionalRegister: string;
|
|
6
|
+
stakes: string;
|
|
7
|
+
complexity: string;
|
|
8
|
+
detectionConfidence?: number;
|
|
9
|
+
};
|
|
10
|
+
emotionalTrajectory?: string;
|
|
11
|
+
escalationAlert?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare class ArchitectAwarenessCollector implements SignalCollector {
|
|
14
|
+
readonly name = "architect-bridge";
|
|
15
|
+
enabled: boolean;
|
|
16
|
+
private latest;
|
|
17
|
+
updateOutput(snapshot: ArchitectSnapshot): void;
|
|
18
|
+
collect(_context: CollectionContext): Promise<AwarenessSignal[]>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=architect-awareness-collector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"architect-awareness-collector.d.ts","sourceRoot":"","sources":["../src/architect-awareness-collector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEnG,MAAM,WAAW,iBAAiB;IAChC,eAAe,EAAE;QACf,MAAM,EAAE,MAAM,CAAC;QACf,iBAAiB,EAAE,MAAM,CAAC;QAC1B,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;KAC9B,CAAC;IACF,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,qBAAa,2BAA4B,YAAW,eAAe;IACjE,QAAQ,CAAC,IAAI,sBAAsB;IACnC,OAAO,UAAQ;IAEf,OAAO,CAAC,MAAM,CAAkC;IAEhD,YAAY,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAIzC,OAAO,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;CAmCvE"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export class ArchitectAwarenessCollector {
|
|
2
|
+
name = 'architect-bridge';
|
|
3
|
+
enabled = true;
|
|
4
|
+
latest = null;
|
|
5
|
+
updateOutput(snapshot) {
|
|
6
|
+
this.latest = snapshot;
|
|
7
|
+
}
|
|
8
|
+
async collect(_context) {
|
|
9
|
+
if (!this.latest)
|
|
10
|
+
return [];
|
|
11
|
+
const signals = [];
|
|
12
|
+
const { detectedContext, emotionalTrajectory, escalationAlert } = this.latest;
|
|
13
|
+
if (detectedContext.domain !== 'general') {
|
|
14
|
+
const conf = detectedContext.detectionConfidence;
|
|
15
|
+
signals.push({
|
|
16
|
+
dimension: 'architect-context',
|
|
17
|
+
priority: 0.6,
|
|
18
|
+
text: `Currently in ${detectedContext.domain} context (confidence: ${conf != null ? conf.toFixed(2) : 'n/a'}, stakes: ${detectedContext.stakes})`,
|
|
19
|
+
data: { domain: detectedContext.domain, confidence: conf ?? 0, stakes: detectedContext.stakes },
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
if (emotionalTrajectory && emotionalTrajectory !== 'stable') {
|
|
23
|
+
signals.push({
|
|
24
|
+
dimension: 'architect-emotion',
|
|
25
|
+
priority: 0.8,
|
|
26
|
+
text: `User emotional trajectory: ${emotionalTrajectory} (register: ${detectedContext.emotionalRegister})`,
|
|
27
|
+
data: { trajectory: emotionalTrajectory, register: detectedContext.emotionalRegister },
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
if (escalationAlert) {
|
|
31
|
+
signals.push({
|
|
32
|
+
dimension: 'architect-escalation',
|
|
33
|
+
priority: 1.0,
|
|
34
|
+
text: 'Emotional escalation detected — user may need de-escalation support',
|
|
35
|
+
data: { escalation: true, domain: detectedContext.domain },
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
return signals;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=architect-awareness-collector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"architect-awareness-collector.js","sourceRoot":"","sources":["../src/architect-awareness-collector.ts"],"names":[],"mappings":"AAcA,MAAM,OAAO,2BAA2B;IAC7B,IAAI,GAAG,kBAAkB,CAAC;IACnC,OAAO,GAAG,IAAI,CAAC;IAEP,MAAM,GAA6B,IAAI,CAAC;IAEhD,YAAY,CAAC,QAA2B;QACtC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,QAA2B;QACvC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAsB,EAAE,CAAC;QACtC,MAAM,EAAE,eAAe,EAAE,mBAAmB,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QAE9E,IAAI,eAAe,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,eAAe,CAAC,mBAAmB,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC;gBACX,SAAS,EAAE,mBAAmB;gBAC9B,QAAQ,EAAE,GAAG;gBACb,IAAI,EAAE,gBAAgB,eAAe,CAAC,MAAM,yBAAyB,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,aAAa,eAAe,CAAC,MAAM,GAAG;gBACjJ,IAAI,EAAE,EAAE,MAAM,EAAE,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,IAAI,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,MAAM,EAAE;aAChG,CAAC,CAAC;QACL,CAAC;QAED,IAAI,mBAAmB,IAAI,mBAAmB,KAAK,QAAQ,EAAE,CAAC;YAC5D,OAAO,CAAC,IAAI,CAAC;gBACX,SAAS,EAAE,mBAAmB;gBAC9B,QAAQ,EAAE,GAAG;gBACb,IAAI,EAAE,8BAA8B,mBAAmB,eAAe,eAAe,CAAC,iBAAiB,GAAG;gBAC1G,IAAI,EAAE,EAAE,UAAU,EAAE,mBAAmB,EAAE,QAAQ,EAAE,eAAe,CAAC,iBAAiB,EAAE;aACvF,CAAC,CAAC;QACL,CAAC;QAED,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC;gBACX,SAAS,EAAE,sBAAsB;gBACjC,QAAQ,EAAE,GAAG;gBACb,IAAI,EAAE,qEAAqE;gBAC3E,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,CAAC,MAAM,EAAE;aAC3D,CAAC,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { ArchitectAwarenessCollector, ArchitectSnapshot } from './architect-awareness-collector.js';
|
|
2
|
+
export interface ArchitectLike {
|
|
3
|
+
getConversationSummary(): {
|
|
4
|
+
theme: string | null;
|
|
5
|
+
messageCount: number;
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
export interface VaultLike {
|
|
9
|
+
get(key: string): string | undefined;
|
|
10
|
+
add(key: string, value: string): Promise<void>;
|
|
11
|
+
has(key: string): boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface BridgeOptions {
|
|
14
|
+
onEscalation?: (alert: string, context: ArchitectSnapshot['detectedContext']) => void;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Orchestrates Architect side effects: conversation state persistence,
|
|
18
|
+
* awareness collector feeding, and escalation alert callbacks.
|
|
19
|
+
*
|
|
20
|
+
* The runtime calls `architect.generatePrompt()` directly (for typed output),
|
|
21
|
+
* then passes the output here for side effects via `afterPrompt()`.
|
|
22
|
+
*/
|
|
23
|
+
export declare class ArchitectBridge {
|
|
24
|
+
private readonly architect;
|
|
25
|
+
private readonly awarenessCollector;
|
|
26
|
+
private readonly vault;
|
|
27
|
+
private readonly options;
|
|
28
|
+
private restoredChats;
|
|
29
|
+
constructor(architect: ArchitectLike, awarenessCollector: ArchitectAwarenessCollector, vault: VaultLike, options?: BridgeOptions);
|
|
30
|
+
/** Call after architect.generatePrompt() to handle persistence, awareness, and escalation. */
|
|
31
|
+
afterPrompt(detectedContext: Record<string, unknown>, emotionalTrajectory: string | undefined, escalationAlert: boolean | undefined, chatId: string): void;
|
|
32
|
+
private maybeRestore;
|
|
33
|
+
private persistState;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=architect-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"architect-bridge.d.ts","sourceRoot":"","sources":["../src/architect-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAEzG,MAAM,WAAW,aAAa;IAC5B,sBAAsB,IAAI;QAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1E;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACrC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;CACvF;AAED;;;;;;GAMG;AACH,qBAAa,eAAe;IAIxB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAN1B,OAAO,CAAC,aAAa,CAAqB;gBAGvB,SAAS,EAAE,aAAa,EACxB,kBAAkB,EAAE,2BAA2B,EAC/C,KAAK,EAAE,SAAS,EAChB,OAAO,GAAE,aAAkB;IAG9C,8FAA8F;IAC9F,WAAW,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,EAAE,MAAM,GAAG,SAAS,EAAE,eAAe,EAAE,OAAO,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IA8B1J,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,YAAY;CAarB"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Orchestrates Architect side effects: conversation state persistence,
|
|
3
|
+
* awareness collector feeding, and escalation alert callbacks.
|
|
4
|
+
*
|
|
5
|
+
* The runtime calls `architect.generatePrompt()` directly (for typed output),
|
|
6
|
+
* then passes the output here for side effects via `afterPrompt()`.
|
|
7
|
+
*/
|
|
8
|
+
export class ArchitectBridge {
|
|
9
|
+
architect;
|
|
10
|
+
awarenessCollector;
|
|
11
|
+
vault;
|
|
12
|
+
options;
|
|
13
|
+
restoredChats = new Set();
|
|
14
|
+
constructor(architect, awarenessCollector, vault, options = {}) {
|
|
15
|
+
this.architect = architect;
|
|
16
|
+
this.awarenessCollector = awarenessCollector;
|
|
17
|
+
this.vault = vault;
|
|
18
|
+
this.options = options;
|
|
19
|
+
}
|
|
20
|
+
/** Call after architect.generatePrompt() to handle persistence, awareness, and escalation. */
|
|
21
|
+
afterPrompt(detectedContext, emotionalTrajectory, escalationAlert, chatId) {
|
|
22
|
+
// Restore conversation state on first message per chat
|
|
23
|
+
this.maybeRestore(chatId);
|
|
24
|
+
// Update awareness collector
|
|
25
|
+
const snapshot = {
|
|
26
|
+
detectedContext: {
|
|
27
|
+
domain: String(detectedContext.domain ?? 'general'),
|
|
28
|
+
emotionalRegister: String(detectedContext.emotionalRegister ?? 'neutral'),
|
|
29
|
+
stakes: String(detectedContext.stakes ?? 'moderate'),
|
|
30
|
+
complexity: String(detectedContext.complexity ?? 'moderate'),
|
|
31
|
+
detectionConfidence: typeof detectedContext.detectionConfidence === 'number' ? detectedContext.detectionConfidence : undefined,
|
|
32
|
+
},
|
|
33
|
+
emotionalTrajectory,
|
|
34
|
+
escalationAlert,
|
|
35
|
+
};
|
|
36
|
+
this.awarenessCollector.updateOutput(snapshot);
|
|
37
|
+
// Persist conversation state
|
|
38
|
+
this.persistState(chatId);
|
|
39
|
+
// Fire escalation callback if alert present
|
|
40
|
+
if (escalationAlert && this.options.onEscalation) {
|
|
41
|
+
this.options.onEscalation('Emotional escalation detected', snapshot.detectedContext);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
maybeRestore(chatId) {
|
|
45
|
+
if (this.restoredChats.has(chatId))
|
|
46
|
+
return;
|
|
47
|
+
this.restoredChats.add(chatId);
|
|
48
|
+
try {
|
|
49
|
+
this.vault.get(`architect:chat:${chatId}`);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// Vault locked or missing — proceed with fresh state
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
persistState(chatId) {
|
|
56
|
+
try {
|
|
57
|
+
const summary = this.architect.getConversationSummary();
|
|
58
|
+
const state = JSON.stringify({
|
|
59
|
+
theme: summary.theme,
|
|
60
|
+
messageCount: summary.messageCount,
|
|
61
|
+
lastUpdated: Date.now(),
|
|
62
|
+
});
|
|
63
|
+
this.vault.add(`architect:chat:${chatId}`, state).catch(() => { });
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
// Vault locked — skip persistence
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=architect-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"architect-bridge.js","sourceRoot":"","sources":["../src/architect-bridge.ts"],"names":[],"mappings":"AAgBA;;;;;;GAMG;AACH,MAAM,OAAO,eAAe;IAIP;IACA;IACA;IACA;IANX,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IAE1C,YACmB,SAAwB,EACxB,kBAA+C,EAC/C,KAAgB,EAChB,UAAyB,EAAE;QAH3B,cAAS,GAAT,SAAS,CAAe;QACxB,uBAAkB,GAAlB,kBAAkB,CAA6B;QAC/C,UAAK,GAAL,KAAK,CAAW;QAChB,YAAO,GAAP,OAAO,CAAoB;IAC3C,CAAC;IAEJ,8FAA8F;IAC9F,WAAW,CAAC,eAAwC,EAAE,mBAAuC,EAAE,eAAoC,EAAE,MAAc;QACjJ,uDAAuD;QACvD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAE1B,6BAA6B;QAC7B,MAAM,QAAQ,GAAsB;YAClC,eAAe,EAAE;gBACf,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC,MAAM,IAAI,SAAS,CAAC;gBACnD,iBAAiB,EAAE,MAAM,CAAC,eAAe,CAAC,iBAAiB,IAAI,SAAS,CAAC;gBACzE,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC,MAAM,IAAI,UAAU,CAAC;gBACpD,UAAU,EAAE,MAAM,CAAC,eAAe,CAAC,UAAU,IAAI,UAAU,CAAC;gBAC5D,mBAAmB,EAAE,OAAO,eAAe,CAAC,mBAAmB,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS;aAC/H;YACD,mBAAmB;YACnB,eAAe;SAChB,CAAC;QACF,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAE/C,6BAA6B;QAC7B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAE1B,4CAA4C;QAC5C,IAAI,eAAe,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;YACjD,IAAI,CAAC,OAAO,CAAC,YAAY,CACvB,+BAA+B,EAC/B,QAAQ,CAAC,eAAe,CACzB,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,MAAc;QACjC,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,OAAO;QAC3C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,MAAM,EAAE,CAAC,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,qDAAqD;QACvD,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,MAAc;QACjC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,sBAAsB,EAAE,CAAC;YACxD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC3B,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;aACxB,CAAC,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACpE,CAAC;QAAC,MAAM,CAAC;YACP,kCAAkC;QACpC,CAAC;IACH,CAAC;CACF"}
|
package/dist/index.d.ts
CHANGED
|
@@ -18,4 +18,9 @@ export { scanString, scanAllStringFields, BLOCKED_PATTERNS } from './marketplace
|
|
|
18
18
|
export type { ScanViolation, ScanResult } from './marketplace/scanner.js';
|
|
19
19
|
export { validatePersonalityConfig, PersonalityConfigSchema, FORBIDDEN_FIELD_NAMES, FORBIDDEN_FIELD_PATTERNS, } from './marketplace/schema.js';
|
|
20
20
|
export type { ValidationResult } from './marketplace/schema.js';
|
|
21
|
+
export { ArchitectAwarenessCollector } from './architect-awareness-collector.js';
|
|
22
|
+
export type { ArchitectSnapshot } from './architect-awareness-collector.js';
|
|
23
|
+
export { parseSoulBiases } from './soul-bias-parser.js';
|
|
24
|
+
export { ArchitectBridge } from './architect-bridge.js';
|
|
25
|
+
export type { ArchitectLike, VaultLike, BridgeOptions } from './architect-bridge.js';
|
|
21
26
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,mBAAmB,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,YAAY,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAElI,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,YAAY,EACV,MAAM,EACN,YAAY,EACZ,UAAU,EACV,mBAAmB,EACnB,eAAe,EACf,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAE7F,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,KAAK,YAAY,GAClB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AACvG,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAEtG,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC7F,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE1E,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,mBAAmB,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,YAAY,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAElI,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,YAAY,EACV,MAAM,EACN,YAAY,EACZ,UAAU,EACV,mBAAmB,EACnB,eAAe,EACf,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAE7F,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,KAAK,YAAY,GAClB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AACvG,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAEtG,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC7F,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE1E,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AACjF,YAAY,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAE5E,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -17,4 +17,10 @@ export { EscalationStateMachine, ESCALATION_LEVELS, SEVERITY_LEVELS, RESPONSE_CA
|
|
|
17
17
|
export { scanString, scanAllStringFields, BLOCKED_PATTERNS } from './marketplace/scanner.js';
|
|
18
18
|
// Marketplace schema
|
|
19
19
|
export { validatePersonalityConfig, PersonalityConfigSchema, FORBIDDEN_FIELD_NAMES, FORBIDDEN_FIELD_PATTERNS, } from './marketplace/schema.js';
|
|
20
|
+
// Architect awareness bridge
|
|
21
|
+
export { ArchitectAwarenessCollector } from './architect-awareness-collector.js';
|
|
22
|
+
// SOUL.md domain bias parser
|
|
23
|
+
export { parseSoulBiases } from './soul-bias-parser.js';
|
|
24
|
+
// Architect bridge orchestrator
|
|
25
|
+
export { ArchitectBridge } from './architect-bridge.js';
|
|
20
26
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,eAAe;AACf,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAS9D,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAC7F,uBAAuB;AACvB,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,qBAAqB,GAEtB,MAAM,qBAAqB,CAAC;AAC7B,iBAAiB;AACjB,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAEvG,aAAa;AACb,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAQzB,sBAAsB;AACtB,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE7F,qBAAqB;AACrB,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,eAAe;AACf,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAS9D,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAC7F,uBAAuB;AACvB,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,qBAAqB,GAEtB,MAAM,qBAAqB,CAAC;AAC7B,iBAAiB;AACjB,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAEvG,aAAa;AACb,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAQzB,sBAAsB;AACtB,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE7F,qBAAqB;AACrB,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AAEjC,6BAA6B;AAC7B,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AAEjF,6BAA6B;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,gCAAgC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -90,13 +90,13 @@ export declare const PersonalityConfigSchema: z.ZodObject<{
|
|
|
90
90
|
directness?: number | undefined;
|
|
91
91
|
formality?: number | undefined;
|
|
92
92
|
} | undefined;
|
|
93
|
-
description?: string | undefined;
|
|
94
|
-
license?: "MIT" | "CC-BY-4.0" | "CC-BY-SA-4.0" | "CC0" | "proprietary" | undefined;
|
|
95
|
-
errorStyle?: "professional" | "apologetic" | "matter_of_fact" | "self_deprecating" | "gentle" | "detailed" | "encouraging" | "terse" | "educational" | undefined;
|
|
96
93
|
boundaries?: {
|
|
97
94
|
neverJokeAbout?: string[] | undefined;
|
|
98
95
|
neverAdviseOn?: string[] | undefined;
|
|
99
96
|
} | undefined;
|
|
97
|
+
errorStyle?: "professional" | "apologetic" | "matter_of_fact" | "self_deprecating" | "gentle" | "detailed" | "encouraging" | "terse" | "educational" | undefined;
|
|
98
|
+
description?: string | undefined;
|
|
99
|
+
license?: "MIT" | "CC-BY-4.0" | "CC-BY-SA-4.0" | "CC0" | "proprietary" | undefined;
|
|
100
100
|
bodyMarkdown?: string | undefined;
|
|
101
101
|
voiceProfile?: {
|
|
102
102
|
voice?: "onyx" | "nova" | "fable" | "echo" | "shimmer" | "alloy" | undefined;
|
|
@@ -123,13 +123,13 @@ export declare const PersonalityConfigSchema: z.ZodObject<{
|
|
|
123
123
|
directness?: number | undefined;
|
|
124
124
|
formality?: number | undefined;
|
|
125
125
|
} | undefined;
|
|
126
|
-
description?: string | undefined;
|
|
127
|
-
license?: "MIT" | "CC-BY-4.0" | "CC-BY-SA-4.0" | "CC0" | "proprietary" | undefined;
|
|
128
|
-
errorStyle?: "professional" | "apologetic" | "matter_of_fact" | "self_deprecating" | "gentle" | "detailed" | "encouraging" | "terse" | "educational" | undefined;
|
|
129
126
|
boundaries?: {
|
|
130
127
|
neverJokeAbout?: string[] | undefined;
|
|
131
128
|
neverAdviseOn?: string[] | undefined;
|
|
132
129
|
} | undefined;
|
|
130
|
+
errorStyle?: "professional" | "apologetic" | "matter_of_fact" | "self_deprecating" | "gentle" | "detailed" | "encouraging" | "terse" | "educational" | undefined;
|
|
131
|
+
description?: string | undefined;
|
|
132
|
+
license?: "MIT" | "CC-BY-4.0" | "CC-BY-SA-4.0" | "CC0" | "proprietary" | undefined;
|
|
133
133
|
bodyMarkdown?: string | undefined;
|
|
134
134
|
voiceProfile?: {
|
|
135
135
|
voice?: "onyx" | "nova" | "fable" | "echo" | "shimmer" | "alloy" | undefined;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parses SOUL.md content for domain-indicative keywords and produces
|
|
3
|
+
* trait weight biases. Uses the same keyword sets as The Architect's
|
|
4
|
+
* context detector (17 domains).
|
|
5
|
+
*
|
|
6
|
+
* Biases are in the range [0, 0.15] — subtle nudges, not overrides.
|
|
7
|
+
* Only domains with >= 3 keyword hits produce a bias.
|
|
8
|
+
*/
|
|
9
|
+
export declare function parseSoulBiases(soulContent: string): Record<string, number>;
|
|
10
|
+
//# sourceMappingURL=soul-bias-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"soul-bias-parser.d.ts","sourceRoot":"","sources":["../src/soul-bias-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA2BH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAmB3E"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parses SOUL.md content for domain-indicative keywords and produces
|
|
3
|
+
* trait weight biases. Uses the same keyword sets as The Architect's
|
|
4
|
+
* context detector (17 domains).
|
|
5
|
+
*
|
|
6
|
+
* Biases are in the range [0, 0.15] — subtle nudges, not overrides.
|
|
7
|
+
* Only domains with >= 3 keyword hits produce a bias.
|
|
8
|
+
*/
|
|
9
|
+
const DOMAIN_KEYWORDS = {
|
|
10
|
+
security_review: ['vulnerability', 'vulnerabilities', 'CVE', 'threat', 'exploit', 'patch', 'audit', 'compliance', 'penetration', 'firewall', 'incident', 'breach', 'SIEM', 'SOC', 'CTEM', 'attack surface', 'zero-day', 'security', 'encryption', 'authentication', 'authorization', 'hardening', 'malware', 'phishing'],
|
|
11
|
+
code_engineering: ['function', 'API', 'deploy', 'refactor', 'test', 'build', 'pipeline', 'CI/CD', 'container', 'microservice', 'typescript', 'python', 'rust', 'terraform', 'code', 'programming', 'database', 'git', 'docker', 'react', 'node', 'npm'],
|
|
12
|
+
architecture_design: ['architecture', 'scalability', 'ADR', 'microservice', 'monolith', 'event-driven', 'platform', 'infrastructure', 'distributed', 'load balancer', 'service mesh', 'database design', 'schema', 'data model', 'tech stack'],
|
|
13
|
+
debugging: ['error', 'bug', 'crash', 'stack trace', 'exception', 'timeout', 'fix', 'regression', 'flaky', 'memory leak', 'segfault', 'logs'],
|
|
14
|
+
team_leadership: ['team', 'hire', 'hiring', 'performance', 'culture', 'morale', 'feedback', 'onboarding', 'manage', 'leadership', 'standup', 'sprint', 'agile'],
|
|
15
|
+
crisis_management: ['breach', 'outage', 'incident', 'emergency', 'compromised', 'escalation', 'P1', 'disaster', 'recovery', 'rollback', 'hotfix', 'war room', 'postmortem'],
|
|
16
|
+
creative_work: ['brainstorm', 'creative', 'concept', 'innovation', 'prototype', 'design thinking', 'inspiration', 'experiment'],
|
|
17
|
+
writing_content: ['blog', 'article', 'newsletter', 'documentation', 'write', 'draft', 'edit', 'copy', 'essay', 'report'],
|
|
18
|
+
strategic_planning: ['strategy', 'roadmap', 'vision', 'priority', 'OKR', 'initiative', 'resource allocation', 'planning', 'goals', 'KPI'],
|
|
19
|
+
decision_making: ['decide', 'trade-off', 'pros and cons', 'risk', 'compare', 'alternatives', 'evaluate', 'criteria'],
|
|
20
|
+
personal_development: ['career', 'resume', 'interview', 'skill', 'certification', 'learning', 'growth path', 'mentor', 'promotion'],
|
|
21
|
+
sales_pitch: ['pitch', 'proposal', 'sell', 'demo', 'close', 'deal', 'prospect', 'value prop', 'ROI', 'pipeline'],
|
|
22
|
+
negotiation: ['negotiate', 'contract', 'terms', 'concession', 'counter-offer', 'compensation', 'salary', 'leverage'],
|
|
23
|
+
marketing_content: ['brand', 'audience', 'campaign', 'SEO', 'content strategy', 'positioning', 'social media', 'marketing', 'funnel', 'conversion'],
|
|
24
|
+
one_on_one: ['1:1', 'one-on-one', 'check-in', 'career', 'coaching', 'mentoring', 'direct report', 'feedback'],
|
|
25
|
+
learning_research: ['research', 'study', 'paper', 'methodology', 'analysis', 'findings', 'literature', 'experiment', 'data', 'hypothesis'],
|
|
26
|
+
};
|
|
27
|
+
const MIN_HITS = 3;
|
|
28
|
+
const MAX_BIAS = 0.15;
|
|
29
|
+
const BIAS_PER_HIT = 0.03;
|
|
30
|
+
export function parseSoulBiases(soulContent) {
|
|
31
|
+
if (!soulContent.trim())
|
|
32
|
+
return {};
|
|
33
|
+
const lower = soulContent.toLowerCase();
|
|
34
|
+
const biases = {};
|
|
35
|
+
for (const [domain, keywords] of Object.entries(DOMAIN_KEYWORDS)) {
|
|
36
|
+
let hits = 0;
|
|
37
|
+
for (const kw of keywords) {
|
|
38
|
+
if (lower.includes(kw.toLowerCase())) {
|
|
39
|
+
hits++;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (hits >= MIN_HITS) {
|
|
43
|
+
biases[domain] = Math.min(hits * BIAS_PER_HIT, MAX_BIAS);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return biases;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=soul-bias-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"soul-bias-parser.js","sourceRoot":"","sources":["../src/soul-bias-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { TaskContext, ContextDomain } from '../schema.js';
|
|
2
|
+
import type { CorrectionStore } from './correction-store.js';
|
|
3
|
+
/**
|
|
4
|
+
* Returns all domain scores for debugging and transparency.
|
|
5
|
+
* Useful for understanding why a particular domain was selected.
|
|
6
|
+
*/
|
|
7
|
+
export declare function scoreAllDomains(message: string): Record<ContextDomain, number>;
|
|
8
|
+
/**
|
|
9
|
+
* Detects the full task context from a user message and optional conversation
|
|
10
|
+
* history. Combines domain detection, emotional register analysis, complexity
|
|
11
|
+
* inference, stakes assessment, and mode classification into a single
|
|
12
|
+
* TaskContext object that drives trait modulation.
|
|
13
|
+
*
|
|
14
|
+
* When a `correctionStore` is provided, the auto-detected domain is checked
|
|
15
|
+
* against learned correction patterns. If a high-confidence correction is
|
|
16
|
+
* found, it overrides the detection and the `corrected` / `originalDomain`
|
|
17
|
+
* fields are set on the returned context.
|
|
18
|
+
*/
|
|
19
|
+
export declare function detectContext(userMessage: string, history?: Array<{
|
|
20
|
+
role: string;
|
|
21
|
+
content: string;
|
|
22
|
+
}>, correctionStore?: CorrectionStore): TaskContext;
|
|
23
|
+
//# sourceMappingURL=context-detector.d.ts.map
|