@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.
- package/LICENSE +191 -0
- package/dist/__tests__/builder.test.d.ts +2 -0
- package/dist/__tests__/builder.test.d.ts.map +1 -0
- package/dist/__tests__/builder.test.js +67 -0
- package/dist/__tests__/builder.test.js.map +1 -0
- package/dist/__tests__/conversation-builder.test.d.ts +2 -0
- package/dist/__tests__/conversation-builder.test.d.ts.map +1 -0
- package/dist/__tests__/conversation-builder.test.js +324 -0
- package/dist/__tests__/conversation-builder.test.js.map +1 -0
- package/dist/__tests__/escalation.test.d.ts +2 -0
- package/dist/__tests__/escalation.test.d.ts.map +1 -0
- package/dist/__tests__/escalation.test.js +143 -0
- package/dist/__tests__/escalation.test.js.map +1 -0
- package/dist/__tests__/manager.test.d.ts +2 -0
- package/dist/__tests__/manager.test.d.ts.map +1 -0
- package/dist/__tests__/manager.test.js +96 -0
- package/dist/__tests__/manager.test.js.map +1 -0
- package/dist/__tests__/parser.test.d.ts +2 -0
- package/dist/__tests__/parser.test.d.ts.map +1 -0
- package/dist/__tests__/parser.test.js +89 -0
- package/dist/__tests__/parser.test.js.map +1 -0
- package/dist/__tests__/security-floor.test.d.ts +2 -0
- package/dist/__tests__/security-floor.test.d.ts.map +1 -0
- package/dist/__tests__/security-floor.test.js +183 -0
- package/dist/__tests__/security-floor.test.js.map +1 -0
- package/dist/builder.d.ts +6 -0
- package/dist/builder.d.ts.map +1 -0
- package/dist/builder.js +65 -0
- package/dist/builder.js.map +1 -0
- package/dist/conversation-builder.d.ts +30 -0
- package/dist/conversation-builder.d.ts.map +1 -0
- package/dist/conversation-builder.js +232 -0
- package/dist/conversation-builder.js.map +1 -0
- package/dist/escalation.d.ts +35 -0
- package/dist/escalation.d.ts.map +1 -0
- package/dist/escalation.js +134 -0
- package/dist/escalation.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/manager.d.ts +28 -0
- package/dist/manager.d.ts.map +1 -0
- package/dist/manager.js +114 -0
- package/dist/manager.js.map +1 -0
- package/dist/marketplace/__tests__/scanner.test.d.ts +2 -0
- package/dist/marketplace/__tests__/scanner.test.d.ts.map +1 -0
- package/dist/marketplace/__tests__/scanner.test.js +134 -0
- package/dist/marketplace/__tests__/scanner.test.js.map +1 -0
- package/dist/marketplace/__tests__/schema.test.d.ts +2 -0
- package/dist/marketplace/__tests__/schema.test.d.ts.map +1 -0
- package/dist/marketplace/__tests__/schema.test.js +243 -0
- package/dist/marketplace/__tests__/schema.test.js.map +1 -0
- package/dist/marketplace/scanner.d.ts +19 -0
- package/dist/marketplace/scanner.d.ts.map +1 -0
- package/dist/marketplace/scanner.js +62 -0
- package/dist/marketplace/scanner.js.map +1 -0
- package/dist/marketplace/schema.d.ts +150 -0
- package/dist/marketplace/schema.d.ts.map +1 -0
- package/dist/marketplace/schema.js +122 -0
- package/dist/marketplace/schema.js.map +1 -0
- package/dist/modes/__tests__/mode-detector.test.d.ts +2 -0
- package/dist/modes/__tests__/mode-detector.test.d.ts.map +1 -0
- package/dist/modes/__tests__/mode-detector.test.js +130 -0
- package/dist/modes/__tests__/mode-detector.test.js.map +1 -0
- package/dist/modes/__tests__/mode-loader.test.d.ts +2 -0
- package/dist/modes/__tests__/mode-loader.test.d.ts.map +1 -0
- package/dist/modes/__tests__/mode-loader.test.js +91 -0
- package/dist/modes/__tests__/mode-loader.test.js.map +1 -0
- package/dist/modes/__tests__/prompt-assembler.test.d.ts +2 -0
- package/dist/modes/__tests__/prompt-assembler.test.d.ts.map +1 -0
- package/dist/modes/__tests__/prompt-assembler.test.js +241 -0
- package/dist/modes/__tests__/prompt-assembler.test.js.map +1 -0
- package/dist/modes/mode-detector.d.ts +10 -0
- package/dist/modes/mode-detector.d.ts.map +1 -0
- package/dist/modes/mode-detector.js +70 -0
- package/dist/modes/mode-detector.js.map +1 -0
- package/dist/modes/mode-loader.d.ts +14 -0
- package/dist/modes/mode-loader.d.ts.map +1 -0
- package/dist/modes/mode-loader.js +94 -0
- package/dist/modes/mode-loader.js.map +1 -0
- package/dist/modes/prompt-assembler.d.ts +27 -0
- package/dist/modes/prompt-assembler.d.ts.map +1 -0
- package/dist/modes/prompt-assembler.js +224 -0
- package/dist/modes/prompt-assembler.js.map +1 -0
- package/dist/modes/types.d.ts +42 -0
- package/dist/modes/types.d.ts.map +1 -0
- package/dist/modes/types.js +24 -0
- package/dist/modes/types.js.map +1 -0
- package/dist/parser.d.ts +6 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +122 -0
- package/dist/parser.js.map +1 -0
- package/dist/security-floor.d.ts +31 -0
- package/dist/security-floor.d.ts.map +1 -0
- package/dist/security-floor.js +113 -0
- package/dist/security-floor.js.map +1 -0
- package/dist/types.d.ts +26 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/voice-profiles.d.ts +23 -0
- package/dist/voice-profiles.d.ts.map +1 -0
- package/dist/voice-profiles.js +72 -0
- package/dist/voice-profiles.js.map +1 -0
- package/modes/advisor.md +24 -0
- package/modes/analyst.md +25 -0
- package/modes/companion.md +24 -0
- package/modes/legal.md +1188 -0
- package/modes/operator.md +24 -0
- package/modes/roast.md +24 -0
- package/modes/socratic.md +24 -0
- package/modes/writer.md +23 -0
- package/package.json +27 -0
- package/src/__tests__/builder.test.ts +78 -0
- package/src/__tests__/conversation-builder.test.ts +386 -0
- package/src/__tests__/escalation.test.ts +172 -0
- package/src/__tests__/manager.test.ts +141 -0
- package/src/__tests__/parser.test.ts +101 -0
- package/src/__tests__/security-floor.test.ts +212 -0
- package/src/builder.ts +75 -0
- package/src/conversation-builder.ts +279 -0
- package/src/escalation.ts +162 -0
- package/src/index.ts +55 -0
- package/src/manager.ts +119 -0
- package/src/marketplace/__tests__/scanner.test.ts +159 -0
- package/src/marketplace/__tests__/schema.test.ts +269 -0
- package/src/marketplace/scanner.ts +85 -0
- package/src/marketplace/schema.ts +141 -0
- package/src/modes/__tests__/mode-detector.test.ts +149 -0
- package/src/modes/__tests__/mode-loader.test.ts +143 -0
- package/src/modes/__tests__/prompt-assembler.test.ts +291 -0
- package/src/modes/mode-detector.ts +84 -0
- package/src/modes/mode-loader.ts +105 -0
- package/src/modes/prompt-assembler.ts +278 -0
- package/src/modes/types.ts +67 -0
- package/src/parser.ts +132 -0
- package/src/security-floor.ts +147 -0
- package/src/types.ts +27 -0
- package/src/voice-profiles.ts +88 -0
- package/templates/chill.md +30 -0
- package/templates/creative.md +29 -0
- package/templates/friendly.md +28 -0
- package/templates/mentor.md +31 -0
- package/templates/minimal.md +24 -0
- package/templates/professional.md +28 -0
- package/templates/technical.md +30 -0
- package/tsconfig.json +12 -0
- package/tsconfig.tsbuildinfo +1 -0
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const PersonalityConfigSchema: z.ZodObject<{
|
|
3
|
+
name: z.ZodString;
|
|
4
|
+
version: z.ZodString;
|
|
5
|
+
author: z.ZodString;
|
|
6
|
+
description: z.ZodOptional<z.ZodString>;
|
|
7
|
+
license: z.ZodOptional<z.ZodEnum<["MIT", "CC-BY-4.0", "CC-BY-SA-4.0", "CC0", "proprietary"]>>;
|
|
8
|
+
tone: z.ZodOptional<z.ZodObject<{
|
|
9
|
+
warmth: z.ZodOptional<z.ZodNumber>;
|
|
10
|
+
directness: z.ZodOptional<z.ZodNumber>;
|
|
11
|
+
humor: z.ZodOptional<z.ZodNumber>;
|
|
12
|
+
formality: z.ZodOptional<z.ZodNumber>;
|
|
13
|
+
}, "strip", z.ZodTypeAny, {
|
|
14
|
+
humor?: number | undefined;
|
|
15
|
+
warmth?: number | undefined;
|
|
16
|
+
directness?: number | undefined;
|
|
17
|
+
formality?: number | undefined;
|
|
18
|
+
}, {
|
|
19
|
+
humor?: number | undefined;
|
|
20
|
+
warmth?: number | undefined;
|
|
21
|
+
directness?: number | undefined;
|
|
22
|
+
formality?: number | undefined;
|
|
23
|
+
}>>;
|
|
24
|
+
errorStyle: z.ZodOptional<z.ZodEnum<["professional", "apologetic", "matter_of_fact", "self_deprecating", "gentle", "detailed", "encouraging", "terse", "educational"]>>;
|
|
25
|
+
catchphrases: z.ZodOptional<z.ZodObject<{
|
|
26
|
+
greeting: z.ZodOptional<z.ZodString>;
|
|
27
|
+
farewell: z.ZodOptional<z.ZodString>;
|
|
28
|
+
thinking: z.ZodOptional<z.ZodString>;
|
|
29
|
+
success: z.ZodOptional<z.ZodString>;
|
|
30
|
+
error: z.ZodOptional<z.ZodString>;
|
|
31
|
+
}, "strip", z.ZodTypeAny, {
|
|
32
|
+
error?: string | undefined;
|
|
33
|
+
greeting?: string | undefined;
|
|
34
|
+
farewell?: string | undefined;
|
|
35
|
+
thinking?: string | undefined;
|
|
36
|
+
success?: string | undefined;
|
|
37
|
+
}, {
|
|
38
|
+
error?: string | undefined;
|
|
39
|
+
greeting?: string | undefined;
|
|
40
|
+
farewell?: string | undefined;
|
|
41
|
+
thinking?: string | undefined;
|
|
42
|
+
success?: string | undefined;
|
|
43
|
+
}>>;
|
|
44
|
+
expertise: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
45
|
+
boundaries: z.ZodOptional<z.ZodObject<{
|
|
46
|
+
neverJokeAbout: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
47
|
+
neverAdviseOn: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
48
|
+
}, "strip", z.ZodTypeAny, {
|
|
49
|
+
neverJokeAbout?: string[] | undefined;
|
|
50
|
+
neverAdviseOn?: string[] | undefined;
|
|
51
|
+
}, {
|
|
52
|
+
neverJokeAbout?: string[] | undefined;
|
|
53
|
+
neverAdviseOn?: string[] | undefined;
|
|
54
|
+
}>>;
|
|
55
|
+
bodyMarkdown: z.ZodOptional<z.ZodString>;
|
|
56
|
+
voiceProfile: z.ZodOptional<z.ZodObject<{
|
|
57
|
+
voice: z.ZodOptional<z.ZodEnum<["alloy", "echo", "fable", "nova", "onyx", "shimmer"]>>;
|
|
58
|
+
speed: z.ZodOptional<z.ZodNumber>;
|
|
59
|
+
pauseDuration: z.ZodOptional<z.ZodNumber>;
|
|
60
|
+
useFillers: z.ZodOptional<z.ZodBoolean>;
|
|
61
|
+
fillerFrequency: z.ZodOptional<z.ZodNumber>;
|
|
62
|
+
}, "strip", z.ZodTypeAny, {
|
|
63
|
+
voice?: "onyx" | "nova" | "fable" | "echo" | "shimmer" | "alloy" | undefined;
|
|
64
|
+
speed?: number | undefined;
|
|
65
|
+
pauseDuration?: number | undefined;
|
|
66
|
+
useFillers?: boolean | undefined;
|
|
67
|
+
fillerFrequency?: number | undefined;
|
|
68
|
+
}, {
|
|
69
|
+
voice?: "onyx" | "nova" | "fable" | "echo" | "shimmer" | "alloy" | undefined;
|
|
70
|
+
speed?: number | undefined;
|
|
71
|
+
pauseDuration?: number | undefined;
|
|
72
|
+
useFillers?: boolean | undefined;
|
|
73
|
+
fillerFrequency?: number | undefined;
|
|
74
|
+
}>>;
|
|
75
|
+
}, "strict", z.ZodTypeAny, {
|
|
76
|
+
name: string;
|
|
77
|
+
version: string;
|
|
78
|
+
author: string;
|
|
79
|
+
expertise?: string[] | undefined;
|
|
80
|
+
catchphrases?: {
|
|
81
|
+
error?: string | undefined;
|
|
82
|
+
greeting?: string | undefined;
|
|
83
|
+
farewell?: string | undefined;
|
|
84
|
+
thinking?: string | undefined;
|
|
85
|
+
success?: string | undefined;
|
|
86
|
+
} | undefined;
|
|
87
|
+
tone?: {
|
|
88
|
+
humor?: number | undefined;
|
|
89
|
+
warmth?: number | undefined;
|
|
90
|
+
directness?: number | undefined;
|
|
91
|
+
formality?: number | undefined;
|
|
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
|
+
boundaries?: {
|
|
97
|
+
neverJokeAbout?: string[] | undefined;
|
|
98
|
+
neverAdviseOn?: string[] | undefined;
|
|
99
|
+
} | undefined;
|
|
100
|
+
bodyMarkdown?: string | undefined;
|
|
101
|
+
voiceProfile?: {
|
|
102
|
+
voice?: "onyx" | "nova" | "fable" | "echo" | "shimmer" | "alloy" | undefined;
|
|
103
|
+
speed?: number | undefined;
|
|
104
|
+
pauseDuration?: number | undefined;
|
|
105
|
+
useFillers?: boolean | undefined;
|
|
106
|
+
fillerFrequency?: number | undefined;
|
|
107
|
+
} | undefined;
|
|
108
|
+
}, {
|
|
109
|
+
name: string;
|
|
110
|
+
version: string;
|
|
111
|
+
author: string;
|
|
112
|
+
expertise?: string[] | undefined;
|
|
113
|
+
catchphrases?: {
|
|
114
|
+
error?: string | undefined;
|
|
115
|
+
greeting?: string | undefined;
|
|
116
|
+
farewell?: string | undefined;
|
|
117
|
+
thinking?: string | undefined;
|
|
118
|
+
success?: string | undefined;
|
|
119
|
+
} | undefined;
|
|
120
|
+
tone?: {
|
|
121
|
+
humor?: number | undefined;
|
|
122
|
+
warmth?: number | undefined;
|
|
123
|
+
directness?: number | undefined;
|
|
124
|
+
formality?: number | undefined;
|
|
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
|
+
boundaries?: {
|
|
130
|
+
neverJokeAbout?: string[] | undefined;
|
|
131
|
+
neverAdviseOn?: string[] | undefined;
|
|
132
|
+
} | undefined;
|
|
133
|
+
bodyMarkdown?: string | undefined;
|
|
134
|
+
voiceProfile?: {
|
|
135
|
+
voice?: "onyx" | "nova" | "fable" | "echo" | "shimmer" | "alloy" | undefined;
|
|
136
|
+
speed?: number | undefined;
|
|
137
|
+
pauseDuration?: number | undefined;
|
|
138
|
+
useFillers?: boolean | undefined;
|
|
139
|
+
fillerFrequency?: number | undefined;
|
|
140
|
+
} | undefined;
|
|
141
|
+
}>;
|
|
142
|
+
export declare const FORBIDDEN_FIELD_NAMES: readonly string[];
|
|
143
|
+
export declare const FORBIDDEN_FIELD_PATTERNS: readonly RegExp[];
|
|
144
|
+
export interface ValidationResult {
|
|
145
|
+
valid: boolean;
|
|
146
|
+
errors: string[];
|
|
147
|
+
warnings: string[];
|
|
148
|
+
}
|
|
149
|
+
export declare function validatePersonalityConfig(raw: unknown): ValidationResult;
|
|
150
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/marketplace/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8DzB,CAAC;AAEZ,eAAO,MAAM,qBAAqB,EAAE,SAAS,MAAM,EAQlD,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,SAAS,MAAM,EAMrD,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,CAgDxE"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { scanAllStringFields } from './scanner.js';
|
|
3
|
+
export const PersonalityConfigSchema = z
|
|
4
|
+
.object({
|
|
5
|
+
name: z
|
|
6
|
+
.string()
|
|
7
|
+
.max(64)
|
|
8
|
+
.regex(/^[a-zA-Z0-9][a-zA-Z0-9 _-]*$/),
|
|
9
|
+
version: z.string().regex(/^\d+\.\d+\.\d+$/),
|
|
10
|
+
author: z.string().max(128),
|
|
11
|
+
description: z.string().max(512).optional(),
|
|
12
|
+
license: z
|
|
13
|
+
.enum(['MIT', 'CC-BY-4.0', 'CC-BY-SA-4.0', 'CC0', 'proprietary'])
|
|
14
|
+
.optional(),
|
|
15
|
+
tone: z
|
|
16
|
+
.object({
|
|
17
|
+
warmth: z.number().min(0).max(1).optional(),
|
|
18
|
+
directness: z.number().min(0).max(1).optional(),
|
|
19
|
+
humor: z.number().min(0).max(1).optional(),
|
|
20
|
+
formality: z.number().min(0).max(1).optional(),
|
|
21
|
+
})
|
|
22
|
+
.optional(),
|
|
23
|
+
errorStyle: z
|
|
24
|
+
.enum([
|
|
25
|
+
'professional',
|
|
26
|
+
'apologetic',
|
|
27
|
+
'matter_of_fact',
|
|
28
|
+
'self_deprecating',
|
|
29
|
+
'gentle',
|
|
30
|
+
'detailed',
|
|
31
|
+
'encouraging',
|
|
32
|
+
'terse',
|
|
33
|
+
'educational',
|
|
34
|
+
])
|
|
35
|
+
.optional(),
|
|
36
|
+
catchphrases: z
|
|
37
|
+
.object({
|
|
38
|
+
greeting: z.string().max(256).optional(),
|
|
39
|
+
farewell: z.string().max(256).optional(),
|
|
40
|
+
thinking: z.string().max(256).optional(),
|
|
41
|
+
success: z.string().max(256).optional(),
|
|
42
|
+
error: z.string().max(256).optional(),
|
|
43
|
+
})
|
|
44
|
+
.optional(),
|
|
45
|
+
expertise: z.array(z.string().max(64)).max(20).optional(),
|
|
46
|
+
boundaries: z
|
|
47
|
+
.object({
|
|
48
|
+
neverJokeAbout: z.array(z.string().max(64)).max(20).optional(),
|
|
49
|
+
neverAdviseOn: z.array(z.string().max(64)).max(20).optional(),
|
|
50
|
+
})
|
|
51
|
+
.optional(),
|
|
52
|
+
bodyMarkdown: z.string().max(4096).optional(),
|
|
53
|
+
voiceProfile: z
|
|
54
|
+
.object({
|
|
55
|
+
voice: z
|
|
56
|
+
.enum(['alloy', 'echo', 'fable', 'nova', 'onyx', 'shimmer'])
|
|
57
|
+
.optional(),
|
|
58
|
+
speed: z.number().min(0.5).max(2.0).optional(),
|
|
59
|
+
pauseDuration: z.number().int().min(100).max(1000).optional(),
|
|
60
|
+
useFillers: z.boolean().optional(),
|
|
61
|
+
fillerFrequency: z.number().min(0).max(0.5).optional(),
|
|
62
|
+
})
|
|
63
|
+
.optional(),
|
|
64
|
+
})
|
|
65
|
+
.strict();
|
|
66
|
+
export const FORBIDDEN_FIELD_NAMES = [
|
|
67
|
+
'corePrinciples',
|
|
68
|
+
'securityFloor',
|
|
69
|
+
'confirmationPatterns',
|
|
70
|
+
'auditBehavior',
|
|
71
|
+
'systemPrompt',
|
|
72
|
+
'modes',
|
|
73
|
+
'preferences',
|
|
74
|
+
];
|
|
75
|
+
export const FORBIDDEN_FIELD_PATTERNS = [
|
|
76
|
+
/prompt/i,
|
|
77
|
+
/system/i,
|
|
78
|
+
/instruction/i,
|
|
79
|
+
/override/i,
|
|
80
|
+
/ignore/i,
|
|
81
|
+
];
|
|
82
|
+
export function validatePersonalityConfig(raw) {
|
|
83
|
+
const errors = [];
|
|
84
|
+
const warnings = [];
|
|
85
|
+
if (typeof raw !== 'object' || raw === null || Array.isArray(raw)) {
|
|
86
|
+
return { valid: false, errors: ['Input must be a non-null object'], warnings };
|
|
87
|
+
}
|
|
88
|
+
const obj = raw;
|
|
89
|
+
// Check forbidden field names
|
|
90
|
+
for (const key of Object.keys(obj)) {
|
|
91
|
+
if (FORBIDDEN_FIELD_NAMES.includes(key)) {
|
|
92
|
+
errors.push(`Forbidden field name: "${key}"`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// Check forbidden field name patterns
|
|
96
|
+
for (const key of Object.keys(obj)) {
|
|
97
|
+
for (const pattern of FORBIDDEN_FIELD_PATTERNS) {
|
|
98
|
+
if (pattern.test(key)) {
|
|
99
|
+
errors.push(`Field name "${key}" matches forbidden pattern: ${pattern}`);
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// Parse with Zod schema
|
|
105
|
+
const result = PersonalityConfigSchema.safeParse(raw);
|
|
106
|
+
if (!result.success) {
|
|
107
|
+
for (const issue of result.error.issues) {
|
|
108
|
+
errors.push(`${issue.path.join('.')}: ${issue.message}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// Content scan (only if schema passed)
|
|
112
|
+
if (result.success) {
|
|
113
|
+
const scanResult = scanAllStringFields(obj);
|
|
114
|
+
if (!scanResult.clean) {
|
|
115
|
+
for (const violation of scanResult.violations) {
|
|
116
|
+
errors.push(`Content violation in "${violation.field}": matched pattern "${violation.pattern}"`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return { valid: errors.length === 0, errors, warnings };
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/marketplace/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mode-detector.test.d.ts","sourceRoot":"","sources":["../../../src/modes/__tests__/mode-detector.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { ModeDetector } from '../mode-detector.js';
|
|
3
|
+
function makeMode(id, signals) {
|
|
4
|
+
return { id, name: id, description: `${id} mode`, promptContent: `# ${id}`, signals };
|
|
5
|
+
}
|
|
6
|
+
function buildModes() {
|
|
7
|
+
const modes = new Map();
|
|
8
|
+
modes.set('operator', makeMode('operator', [
|
|
9
|
+
{ phrase: 'run', weight: 0.8 }, { phrase: 'execute', weight: 0.8 },
|
|
10
|
+
{ phrase: 'deploy', weight: 0.8 }, { phrase: 'status', weight: 0.6 },
|
|
11
|
+
]));
|
|
12
|
+
modes.set('analyst', makeMode('analyst', [
|
|
13
|
+
{ phrase: 'analyze', weight: 0.8 }, { phrase: 'investigate', weight: 0.8 },
|
|
14
|
+
{ phrase: "what's the risk", weight: 0.9 }, { phrase: 'compare', weight: 0.7 },
|
|
15
|
+
]));
|
|
16
|
+
modes.set('advisor', makeMode('advisor', [
|
|
17
|
+
{ phrase: 'should i', weight: 0.8 }, { phrase: 'help me decide', weight: 0.9 },
|
|
18
|
+
{ phrase: 'trade-offs', weight: 0.8 }, { phrase: 'options', weight: 0.6 },
|
|
19
|
+
]));
|
|
20
|
+
modes.set('writer', makeMode('writer', [
|
|
21
|
+
{ phrase: 'write', weight: 0.7 }, { phrase: 'draft', weight: 0.8 },
|
|
22
|
+
{ phrase: 'blog post', weight: 0.9 }, { phrase: 'email', weight: 0.7 },
|
|
23
|
+
]));
|
|
24
|
+
modes.set('socratic', makeMode('socratic', [
|
|
25
|
+
{ phrase: 'challenge me', weight: 0.9 }, { phrase: 'red team', weight: 0.9 },
|
|
26
|
+
{ phrase: 'what am i missing', weight: 0.8 }, { phrase: 'poke holes', weight: 0.8 },
|
|
27
|
+
]));
|
|
28
|
+
modes.set('legal', makeMode('legal', [
|
|
29
|
+
{ phrase: 'compliance', weight: 0.9 }, { phrase: 'regulation', weight: 0.8 },
|
|
30
|
+
{ phrase: 'contract', weight: 0.8 }, { phrase: 'legal', weight: 0.8 },
|
|
31
|
+
]));
|
|
32
|
+
modes.set('roast', makeMode('roast', [
|
|
33
|
+
{ phrase: 'roast', weight: 0.9 }, { phrase: "don't sugarcoat", weight: 0.8 },
|
|
34
|
+
{ phrase: 'give it to me straight', weight: 0.8 },
|
|
35
|
+
]));
|
|
36
|
+
modes.set('companion', makeMode('companion', [
|
|
37
|
+
{ phrase: 'how are you', weight: 0.4 }, { phrase: 'just chatting', weight: 0.6 },
|
|
38
|
+
{ phrase: 'feeling', weight: 0.5 },
|
|
39
|
+
]));
|
|
40
|
+
return modes;
|
|
41
|
+
}
|
|
42
|
+
describe('ModeDetector', () => {
|
|
43
|
+
const modes = buildModes();
|
|
44
|
+
const detector = new ModeDetector(modes);
|
|
45
|
+
it('should detect operator mode from "run" signals', () => {
|
|
46
|
+
const result = detector.detect('run the test suite and deploy');
|
|
47
|
+
expect(result).not.toBeNull();
|
|
48
|
+
expect(result.mode).toBe('operator');
|
|
49
|
+
});
|
|
50
|
+
it('should detect analyst mode from analysis signals', () => {
|
|
51
|
+
const result = detector.detect("analyze this data and what's the risk here");
|
|
52
|
+
expect(result).not.toBeNull();
|
|
53
|
+
expect(result.mode).toBe('analyst');
|
|
54
|
+
});
|
|
55
|
+
it('should detect advisor mode from decision signals', () => {
|
|
56
|
+
const result = detector.detect('should i go with option A? help me decide');
|
|
57
|
+
expect(result).not.toBeNull();
|
|
58
|
+
expect(result.mode).toBe('advisor');
|
|
59
|
+
});
|
|
60
|
+
it('should detect writer mode from writing signals', () => {
|
|
61
|
+
const result = detector.detect('draft a blog post about TypeScript');
|
|
62
|
+
expect(result).not.toBeNull();
|
|
63
|
+
expect(result.mode).toBe('writer');
|
|
64
|
+
});
|
|
65
|
+
it('should detect socratic mode from challenge signals', () => {
|
|
66
|
+
const result = detector.detect('challenge me on this. red team my plan');
|
|
67
|
+
expect(result).not.toBeNull();
|
|
68
|
+
expect(result.mode).toBe('socratic');
|
|
69
|
+
});
|
|
70
|
+
it('should detect legal mode from compliance signals', () => {
|
|
71
|
+
const result = detector.detect('check this contract for compliance issues');
|
|
72
|
+
expect(result).not.toBeNull();
|
|
73
|
+
expect(result.mode).toBe('legal');
|
|
74
|
+
});
|
|
75
|
+
it('should detect roast mode from roast signals', () => {
|
|
76
|
+
const result = detector.detect("roast my code, don't sugarcoat it");
|
|
77
|
+
expect(result).not.toBeNull();
|
|
78
|
+
expect(result.mode).toBe('roast');
|
|
79
|
+
});
|
|
80
|
+
it('should detect companion mode from casual signals', () => {
|
|
81
|
+
const result = detector.detect("how are you feeling today? just chatting");
|
|
82
|
+
expect(result).not.toBeNull();
|
|
83
|
+
expect(result.mode).toBe('companion');
|
|
84
|
+
});
|
|
85
|
+
it('should return null for empty messages', () => {
|
|
86
|
+
expect(detector.detect('')).toBeNull();
|
|
87
|
+
});
|
|
88
|
+
it('should return null for very short messages', () => {
|
|
89
|
+
expect(detector.detect('hi')).toBeNull();
|
|
90
|
+
});
|
|
91
|
+
it('should return null when no signals match', () => {
|
|
92
|
+
expect(detector.detect('tell me a random fact about penguins')).toBeNull();
|
|
93
|
+
});
|
|
94
|
+
it('should score higher with multiple matching keywords', () => {
|
|
95
|
+
const single = detector.detect('run this');
|
|
96
|
+
const multiple = detector.detect('run and execute, then deploy');
|
|
97
|
+
expect(single).not.toBeNull();
|
|
98
|
+
expect(multiple).not.toBeNull();
|
|
99
|
+
// Multiple matches should still resolve to operator
|
|
100
|
+
expect(multiple.mode).toBe('operator');
|
|
101
|
+
});
|
|
102
|
+
it('should apply hysteresis bias to current mode', () => {
|
|
103
|
+
// When current mode is "operator" and message has weak operator signal
|
|
104
|
+
const state = { activeMode: 'operator', autoDetected: true };
|
|
105
|
+
const result = detector.detect('check the status', { currentState: state });
|
|
106
|
+
expect(result).not.toBeNull();
|
|
107
|
+
expect(result.mode).toBe('operator');
|
|
108
|
+
});
|
|
109
|
+
it('should apply task type boosting for code messages', () => {
|
|
110
|
+
// "execute" is a weak operator signal; "code" task type should boost it
|
|
111
|
+
const withBoost = detector.detect('run and execute this', { taskType: 'code' });
|
|
112
|
+
expect(withBoost).not.toBeNull();
|
|
113
|
+
expect(withBoost.mode).toBe('operator');
|
|
114
|
+
});
|
|
115
|
+
it('should return candidates sorted by score', () => {
|
|
116
|
+
const result = detector.detect('analyze the status and run diagnostics');
|
|
117
|
+
expect(result).not.toBeNull();
|
|
118
|
+
expect(result.candidates.length).toBeGreaterThan(0);
|
|
119
|
+
// Candidates should be sorted descending by score
|
|
120
|
+
for (let i = 1; i < result.candidates.length; i++) {
|
|
121
|
+
expect(result.candidates[i - 1].score).toBeGreaterThanOrEqual(result.candidates[i].score);
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
it('should handle case-insensitive matching', () => {
|
|
125
|
+
const result = detector.detect('ANALYZE this data');
|
|
126
|
+
expect(result).not.toBeNull();
|
|
127
|
+
expect(result.mode).toBe('analyst');
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
//# sourceMappingURL=mode-detector.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mode-detector.test.js","sourceRoot":"","sources":["../../../src/modes/__tests__/mode-detector.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD,SAAS,QAAQ,CAAC,EAAU,EAAE,OAAkD;IAC9E,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;AACxF,CAAC;AAED,SAAS,UAAU;IACjB,MAAM,KAAK,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC9C,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE;QACzC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE;QAClE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE;KACrE,CAAC,CAAC,CAAC;IACJ,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE;QACvC,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE;QAC1E,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE;KAC/E,CAAC,CAAC,CAAC;IACJ,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE;QACvC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,EAAE;QAC9E,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE;KAC1E,CAAC,CAAC,CAAC;IACJ,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE;QACrC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QAClE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;KACvE,CAAC,CAAC,CAAC;IACJ,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE;QACzC,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE;QAC5E,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE;KACpF,CAAC,CAAC,CAAC;IACJ,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE;QACnC,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE;QAC5E,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;KACtE,CAAC,CAAC,CAAC;IACJ,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE;QACnC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,GAAG,EAAE;QAC5E,EAAE,MAAM,EAAE,wBAAwB,EAAE,MAAM,EAAE,GAAG,EAAE;KAClD,CAAC,CAAC,CAAC;IACJ,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE;QAC3C,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,EAAE;QAChF,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE;KACnC,CAAC,CAAC,CAAC;IACJ,OAAO,KAAK,CAAC;AACf,CAAC;AAED,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;IAEzC,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,+BAA+B,CAAC,CAAC;QAChE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,MAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;QAC7E,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,MAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,2CAA2C,CAAC,CAAC;QAC5E,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,MAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,oCAAoC,CAAC,CAAC;QACrE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,MAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,wCAAwC,CAAC,CAAC;QACzE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,MAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,2CAA2C,CAAC,CAAC;QAC5E,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,MAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,mCAAmC,CAAC,CAAC;QACpE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,MAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,0CAA0C,CAAC,CAAC;QAC3E,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,MAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,sCAAsC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC;QACjE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAChC,oDAAoD;QACpD,MAAM,CAAC,QAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,uEAAuE;QACvE,MAAM,KAAK,GAAqB,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;QAC/E,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,kBAAkB,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5E,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,MAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,wEAAwE;QACxE,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QAChF,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QACjC,MAAM,CAAC,SAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,wCAAwC,CAAC,CAAC;QACzE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,MAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACrD,kDAAkD;QAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACnD,MAAM,CAAC,MAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,sBAAsB,CAAC,MAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,MAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mode-loader.test.d.ts","sourceRoot":"","sources":["../../../src/modes/__tests__/mode-loader.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach } 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 { ModeLoader } from '../mode-loader.js';
|
|
6
|
+
describe('ModeLoader', () => {
|
|
7
|
+
let tmpDir;
|
|
8
|
+
let builtInDir;
|
|
9
|
+
let userDir;
|
|
10
|
+
beforeEach(async () => {
|
|
11
|
+
tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), 'mode-loader-test-'));
|
|
12
|
+
builtInDir = path.join(tmpDir, 'built-in');
|
|
13
|
+
userDir = path.join(tmpDir, 'user');
|
|
14
|
+
await fs.mkdir(builtInDir, { recursive: true });
|
|
15
|
+
await fs.mkdir(userDir, { recursive: true });
|
|
16
|
+
});
|
|
17
|
+
afterEach(async () => {
|
|
18
|
+
await fs.rm(tmpDir, { recursive: true, force: true });
|
|
19
|
+
});
|
|
20
|
+
it('should load built-in mode files', async () => {
|
|
21
|
+
await fs.writeFile(path.join(builtInDir, 'operator.md'), `<!-- mode: operator\n name: Operator\n description: Fast execution\n signals: run:0.8, execute:0.7 -->\n# Operator mode content`);
|
|
22
|
+
await fs.writeFile(path.join(builtInDir, 'analyst.md'), `<!-- mode: analyst\n name: Analyst\n description: Deep analysis\n signals: analyze:0.8 -->\n# Analyst mode content`);
|
|
23
|
+
const loader = new ModeLoader(builtInDir, userDir);
|
|
24
|
+
const modes = await loader.loadAll();
|
|
25
|
+
expect(modes.size).toBe(2);
|
|
26
|
+
expect(modes.get('operator')).toBeDefined();
|
|
27
|
+
expect(modes.get('analyst')).toBeDefined();
|
|
28
|
+
});
|
|
29
|
+
it('should parse metadata correctly', async () => {
|
|
30
|
+
await fs.writeFile(path.join(builtInDir, 'writer.md'), `<!-- mode: writer\n name: Writer\n description: Creative writing\n signals: write:0.7, draft:0.8, blog post:0.9 -->\n# Writer mode\nBe creative.`);
|
|
31
|
+
const loader = new ModeLoader(builtInDir, userDir);
|
|
32
|
+
await loader.loadAll();
|
|
33
|
+
const mode = loader.get('writer');
|
|
34
|
+
expect(mode).toBeDefined();
|
|
35
|
+
expect(mode.name).toBe('Writer');
|
|
36
|
+
expect(mode.description).toBe('Creative writing');
|
|
37
|
+
expect(mode.signals).toHaveLength(3);
|
|
38
|
+
expect(mode.signals[0]).toEqual({ phrase: 'write', weight: 0.7 });
|
|
39
|
+
expect(mode.signals[1]).toEqual({ phrase: 'draft', weight: 0.8 });
|
|
40
|
+
expect(mode.signals[2]).toEqual({ phrase: 'blog post', weight: 0.9 });
|
|
41
|
+
expect(mode.promptContent).toContain('# Writer mode');
|
|
42
|
+
expect(mode.promptContent).toContain('Be creative.');
|
|
43
|
+
});
|
|
44
|
+
it('should return empty map when directory does not exist', async () => {
|
|
45
|
+
const loader = new ModeLoader('/nonexistent/path', '/also/nonexistent');
|
|
46
|
+
const modes = await loader.loadAll();
|
|
47
|
+
expect(modes.size).toBe(0);
|
|
48
|
+
});
|
|
49
|
+
it('should skip files without valid metadata', async () => {
|
|
50
|
+
// File with no HTML comment header
|
|
51
|
+
await fs.writeFile(path.join(builtInDir, 'operator.md'), `# Just some markdown\nNo metadata here.`);
|
|
52
|
+
const loader = new ModeLoader(builtInDir, userDir);
|
|
53
|
+
const modes = await loader.loadAll();
|
|
54
|
+
expect(modes.size).toBe(0);
|
|
55
|
+
});
|
|
56
|
+
it('should skip non-.md files', async () => {
|
|
57
|
+
await fs.writeFile(path.join(builtInDir, 'readme.txt'), 'not a mode');
|
|
58
|
+
await fs.writeFile(path.join(builtInDir, 'operator.md'), `<!-- mode: operator\n name: Operator\n description: test\n signals: run:0.8 -->\ncontent`);
|
|
59
|
+
const loader = new ModeLoader(builtInDir, userDir);
|
|
60
|
+
const modes = await loader.loadAll();
|
|
61
|
+
expect(modes.size).toBe(1);
|
|
62
|
+
});
|
|
63
|
+
it('should skip files with unknown mode IDs', async () => {
|
|
64
|
+
await fs.writeFile(path.join(builtInDir, 'custom-mode.md'), `<!-- mode: custom-mode\n name: Custom\n description: test\n signals: foo:0.8 -->\ncontent`);
|
|
65
|
+
const loader = new ModeLoader(builtInDir, userDir);
|
|
66
|
+
const modes = await loader.loadAll();
|
|
67
|
+
expect(modes.size).toBe(0);
|
|
68
|
+
});
|
|
69
|
+
it('should allow user modes to override built-in modes', async () => {
|
|
70
|
+
await fs.writeFile(path.join(builtInDir, 'operator.md'), `<!-- mode: operator\n name: Operator\n description: Built-in operator\n signals: run:0.8 -->\nBuilt-in content`);
|
|
71
|
+
await fs.writeFile(path.join(userDir, 'operator.md'), `<!-- mode: operator\n name: My Operator\n description: Custom operator\n signals: run:0.9, go:0.7 -->\nCustom content`);
|
|
72
|
+
const loader = new ModeLoader(builtInDir, userDir);
|
|
73
|
+
await loader.loadAll();
|
|
74
|
+
const mode = loader.get('operator');
|
|
75
|
+
expect(mode).toBeDefined();
|
|
76
|
+
expect(mode.name).toBe('My Operator');
|
|
77
|
+
expect(mode.description).toBe('Custom operator');
|
|
78
|
+
expect(mode.promptContent).toBe('Custom content');
|
|
79
|
+
});
|
|
80
|
+
it('should reload modes', async () => {
|
|
81
|
+
await fs.writeFile(path.join(builtInDir, 'operator.md'), `<!-- mode: operator\n name: Operator\n description: v1\n signals: run:0.8 -->\nv1`);
|
|
82
|
+
const loader = new ModeLoader(builtInDir, userDir);
|
|
83
|
+
await loader.loadAll();
|
|
84
|
+
expect(loader.get('operator').description).toBe('v1');
|
|
85
|
+
// Modify file
|
|
86
|
+
await fs.writeFile(path.join(builtInDir, 'operator.md'), `<!-- mode: operator\n name: Operator\n description: v2\n signals: run:0.8 -->\nv2`);
|
|
87
|
+
await loader.reload();
|
|
88
|
+
expect(loader.get('operator').description).toBe('v2');
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
//# sourceMappingURL=mode-loader.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mode-loader.test.js","sourceRoot":"","sources":["../../../src/modes/__tests__/mode-loader.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-assembler.test.d.ts","sourceRoot":"","sources":["../../../src/modes/__tests__/prompt-assembler.test.ts"],"names":[],"mappings":""}
|