sigma-agents 0.1.7 → 0.1.8
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/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/profiles.d.ts +7 -1
- package/dist/profiles.d.ts.map +1 -1
- package/dist/profiles.js +38 -4
- package/dist/profiles.js.map +1 -1
- package/dist/router.d.ts +6 -1
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +163 -32
- package/dist/router.js.map +1 -1
- package/dist/sub-agent.d.ts +1 -1
- package/dist/sub-agent.d.ts.map +1 -1
- package/dist/sub-agent.js +13 -22
- package/dist/sub-agent.js.map +1 -1
- package/dist/types.d.ts +3 -3
- package/dist/types.d.ts.map +1 -1
- package/package.json +6 -3
- package/src/index.ts +4 -4
- package/src/profiles.ts +126 -88
- package/src/router.ts +275 -136
- package/src/sub-agent.ts +153 -160
- package/src/types.ts +32 -29
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {
|
|
3
|
-
export { SubAgentManager } from
|
|
4
|
-
export * from
|
|
1
|
+
export { ModelProfiler } from "./profiles.js";
|
|
2
|
+
export { SmartRouter } from "./router.js";
|
|
3
|
+
export { SubAgentManager } from "./sub-agent.js";
|
|
4
|
+
export * from "./types.js";
|
|
5
5
|
//# 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,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,cAAc,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -14,11 +14,11 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.SubAgentManager = exports.
|
|
18
|
-
var router_js_1 = require("./router.js");
|
|
19
|
-
Object.defineProperty(exports, "SmartRouter", { enumerable: true, get: function () { return router_js_1.SmartRouter; } });
|
|
17
|
+
exports.SubAgentManager = exports.SmartRouter = exports.ModelProfiler = void 0;
|
|
20
18
|
var profiles_js_1 = require("./profiles.js");
|
|
21
19
|
Object.defineProperty(exports, "ModelProfiler", { enumerable: true, get: function () { return profiles_js_1.ModelProfiler; } });
|
|
20
|
+
var router_js_1 = require("./router.js");
|
|
21
|
+
Object.defineProperty(exports, "SmartRouter", { enumerable: true, get: function () { return router_js_1.SmartRouter; } });
|
|
22
22
|
var sub_agent_js_1 = require("./sub-agent.js");
|
|
23
23
|
Object.defineProperty(exports, "SubAgentManager", { enumerable: true, get: function () { return sub_agent_js_1.SubAgentManager; } });
|
|
24
24
|
__exportStar(require("./types.js"), exports);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,6CAA8C;AAArC,4GAAA,aAAa,OAAA;AACtB,yCAA0C;AAAjC,wGAAA,WAAW,OAAA;AACpB,+CAAiD;AAAxC,+GAAA,eAAe,OAAA;AACxB,6CAA2B"}
|
package/dist/profiles.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ModelProfile, TaskCategory } from
|
|
1
|
+
import type { ModelProfile, TaskCategory } from "./types.js";
|
|
2
2
|
export declare class ModelProfiler {
|
|
3
3
|
profiles: Map<string, ModelProfile>;
|
|
4
4
|
/**
|
|
@@ -21,6 +21,12 @@ export declare class ModelProfiler {
|
|
|
21
21
|
* Charge les profiles par défaut des modèles Alibaba
|
|
22
22
|
*/
|
|
23
23
|
private loadDefaultProfiles;
|
|
24
|
+
/**
|
|
25
|
+
* Valide la forme d'un profile chargé depuis un JSON non fiable.
|
|
26
|
+
* Empêche les entrées sans id (qui s'écraseraient sous la clé undefined)
|
|
27
|
+
* et les champs malformés qui feraient planter getBestForTask.
|
|
28
|
+
*/
|
|
29
|
+
static isValidProfile(profile: unknown): profile is ModelProfile;
|
|
24
30
|
/**
|
|
25
31
|
* Returns empty default profiles.
|
|
26
32
|
* Actual profiles should be populated from /phi-init or user configuration.
|
package/dist/profiles.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../src/profiles.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../src/profiles.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE7D,qBAAa,aAAa;IAClB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAa;IAEvD;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB/C;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ7C;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAIvC;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,YAAY,GAAG,YAAY,GAAG,IAAI;IAqB3D;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAS3B;;;;OAIG;IACH,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,YAAY;IA6BhE;;;;OAIG;IACH,kBAAkB,IAAI,YAAY,EAAE;CAGpC"}
|
package/dist/profiles.js
CHANGED
|
@@ -9,11 +9,15 @@ class ModelProfiler {
|
|
|
9
9
|
*/
|
|
10
10
|
async loadFromFile(path) {
|
|
11
11
|
try {
|
|
12
|
-
const content = await (0, promises_1.readFile)(path,
|
|
12
|
+
const content = await (0, promises_1.readFile)(path, "utf8");
|
|
13
13
|
const data = JSON.parse(content);
|
|
14
14
|
if (Array.isArray(data.profiles)) {
|
|
15
15
|
this.profiles.clear();
|
|
16
16
|
for (const profile of data.profiles) {
|
|
17
|
+
if (!ModelProfiler.isValidProfile(profile)) {
|
|
18
|
+
console.warn("Skipping invalid profile entry");
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
17
21
|
this.profiles.set(profile.id, profile);
|
|
18
22
|
}
|
|
19
23
|
}
|
|
@@ -29,9 +33,9 @@ class ModelProfiler {
|
|
|
29
33
|
*/
|
|
30
34
|
async saveToFile(path) {
|
|
31
35
|
const data = {
|
|
32
|
-
profiles: Array.from(this.profiles.values())
|
|
36
|
+
profiles: Array.from(this.profiles.values()),
|
|
33
37
|
};
|
|
34
|
-
await (0, promises_1.writeFile)(path, JSON.stringify(data, null, 2),
|
|
38
|
+
await (0, promises_1.writeFile)(path, JSON.stringify(data, null, 2), "utf8");
|
|
35
39
|
}
|
|
36
40
|
/**
|
|
37
41
|
* Ajoute un profile
|
|
@@ -44,7 +48,7 @@ class ModelProfiler {
|
|
|
44
48
|
*/
|
|
45
49
|
getBestForTask(category) {
|
|
46
50
|
const candidates = Array.from(this.profiles.values())
|
|
47
|
-
.filter(profile => profile.strengths.includes(category))
|
|
51
|
+
.filter((profile) => profile.strengths.includes(category))
|
|
48
52
|
.sort((a, b) => {
|
|
49
53
|
// Priority: quality > speed
|
|
50
54
|
if (a.quality !== b.quality) {
|
|
@@ -69,6 +73,36 @@ class ModelProfiler {
|
|
|
69
73
|
this.profiles.set(profile.id, profile);
|
|
70
74
|
}
|
|
71
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* Valide la forme d'un profile chargé depuis un JSON non fiable.
|
|
78
|
+
* Empêche les entrées sans id (qui s'écraseraient sous la clé undefined)
|
|
79
|
+
* et les champs malformés qui feraient planter getBestForTask.
|
|
80
|
+
*/
|
|
81
|
+
static isValidProfile(profile) {
|
|
82
|
+
if (typeof profile !== "object" || profile === null) {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
const p = profile;
|
|
86
|
+
if (typeof p.id !== "string" || p.id.length === 0) {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
if (typeof p.provider !== "string") {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
if (p.speed !== "fast" && p.speed !== "medium" && p.speed !== "slow") {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
if (p.quality !== "high" && p.quality !== "medium" && p.quality !== "low") {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
if (!Array.isArray(p.strengths) || !p.strengths.every((s) => typeof s === "string")) {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
if (typeof p.maxTokens !== "number" || typeof p.supportsTools !== "boolean") {
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
72
106
|
/**
|
|
73
107
|
* Returns empty default profiles.
|
|
74
108
|
* Actual profiles should be populated from /phi-init or user configuration.
|
package/dist/profiles.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../src/profiles.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../src/profiles.ts"],"names":[],"mappings":"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"}
|
package/dist/router.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { RoutingConfig, TaskCategory } from
|
|
1
|
+
import type { RoutingConfig, TaskCategory } from "./types.js";
|
|
2
2
|
export declare class SmartRouter {
|
|
3
3
|
private config;
|
|
4
4
|
constructor(config: RoutingConfig);
|
|
@@ -19,6 +19,11 @@ export declare class SmartRouter {
|
|
|
19
19
|
* Charge la configuration depuis un fichier JSON
|
|
20
20
|
*/
|
|
21
21
|
static loadConfig(configPath: string): Promise<RoutingConfig>;
|
|
22
|
+
/**
|
|
23
|
+
* Valide la structure d'une RoutingConfig chargée depuis un fichier non fiable.
|
|
24
|
+
* Fail-safe : retourne false sur toute incohérence structurelle.
|
|
25
|
+
*/
|
|
26
|
+
static validateRoutingConfig(config: unknown): config is RoutingConfig;
|
|
22
27
|
/**
|
|
23
28
|
* Default configuration with provider-agnostic model names.
|
|
24
29
|
* Uses 'default' as model placeholder — the actual model is determined
|
package/dist/router.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE9D,qBAAa,WAAW;IACvB,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,EAAE,aAAa;IAIjC;;;OAGG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY;IAkC1C;;OAEG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,EAAE,YAAY,CAAA;KAAE;IAmBlG;;OAEG;WACU,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAmBnE;;;OAGG;IACH,MAAM,CAAC,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,aAAa;IA2CtE;;;;OAIG;IACH,MAAM,CAAC,aAAa,IAAI,aAAa;CAoIrC"}
|
package/dist/router.js
CHANGED
|
@@ -14,18 +14,23 @@ class SmartRouter {
|
|
|
14
14
|
classifyTask(prompt) {
|
|
15
15
|
const lowerPrompt = prompt.toLowerCase();
|
|
16
16
|
const categories = [];
|
|
17
|
+
if (!this.config?.routes) {
|
|
18
|
+
return "general";
|
|
19
|
+
}
|
|
17
20
|
// Check each category
|
|
18
21
|
for (const [category, route] of Object.entries(this.config.routes)) {
|
|
19
|
-
|
|
22
|
+
if (!Array.isArray(route?.keywords))
|
|
23
|
+
continue;
|
|
24
|
+
const hasKeyword = route.keywords.some((keyword) => lowerPrompt.includes(keyword.toLowerCase()));
|
|
20
25
|
if (hasKeyword) {
|
|
21
26
|
categories.push(category);
|
|
22
27
|
}
|
|
23
28
|
}
|
|
24
29
|
if (categories.length === 0) {
|
|
25
|
-
return
|
|
30
|
+
return "general";
|
|
26
31
|
}
|
|
27
32
|
// Apply priorities
|
|
28
|
-
const priorityOrder = [
|
|
33
|
+
const priorityOrder = ["debug", "code", "plan", "review", "test", "explore", "general"];
|
|
29
34
|
for (const priority of priorityOrder) {
|
|
30
35
|
if (categories.includes(priority)) {
|
|
31
36
|
return priority;
|
|
@@ -43,13 +48,13 @@ class SmartRouter {
|
|
|
43
48
|
return {
|
|
44
49
|
model: this.config.default.model,
|
|
45
50
|
agent: this.config.default.agent,
|
|
46
|
-
category
|
|
51
|
+
category,
|
|
47
52
|
};
|
|
48
53
|
}
|
|
49
54
|
return {
|
|
50
55
|
model: route.preferredModel,
|
|
51
56
|
agent: route.agent,
|
|
52
|
-
category
|
|
57
|
+
category,
|
|
53
58
|
};
|
|
54
59
|
}
|
|
55
60
|
/**
|
|
@@ -57,14 +62,60 @@ class SmartRouter {
|
|
|
57
62
|
*/
|
|
58
63
|
static async loadConfig(configPath) {
|
|
59
64
|
try {
|
|
60
|
-
const content = await (0, promises_1.readFile)(configPath,
|
|
61
|
-
|
|
65
|
+
const content = await (0, promises_1.readFile)(configPath, "utf8");
|
|
66
|
+
const parsed = JSON.parse(content);
|
|
67
|
+
if (!SmartRouter.validateRoutingConfig(parsed)) {
|
|
68
|
+
console.warn(`Invalid routing config structure in ${configPath}; falling back to defaults`);
|
|
69
|
+
return SmartRouter.defaultConfig();
|
|
70
|
+
}
|
|
71
|
+
return parsed;
|
|
62
72
|
}
|
|
63
73
|
catch {
|
|
64
74
|
// File doesn't exist yet — use defaults silently
|
|
65
75
|
return SmartRouter.defaultConfig();
|
|
66
76
|
}
|
|
67
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* Valide la structure d'une RoutingConfig chargée depuis un fichier non fiable.
|
|
80
|
+
* Fail-safe : retourne false sur toute incohérence structurelle.
|
|
81
|
+
*/
|
|
82
|
+
static validateRoutingConfig(config) {
|
|
83
|
+
if (typeof config !== "object" || config === null) {
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
const candidate = config;
|
|
87
|
+
const routes = candidate.routes;
|
|
88
|
+
if (typeof routes !== "object" || routes === null) {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
for (const route of Object.values(routes)) {
|
|
92
|
+
if (typeof route !== "object" || route === null) {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
const r = route;
|
|
96
|
+
if (typeof r.preferredModel !== "string" || typeof r.fallback !== "string") {
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
if (!(r.agent === null || typeof r.agent === "string")) {
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
if (!Array.isArray(r.keywords) || !r.keywords.every((k) => typeof k === "string")) {
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
const defaults = candidate.default;
|
|
107
|
+
if (typeof defaults !== "object" || defaults === null) {
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
const d = defaults;
|
|
111
|
+
if (typeof d.model !== "string") {
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
if (!(d.agent === null || typeof d.agent === "string")) {
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
68
119
|
/**
|
|
69
120
|
* Default configuration with provider-agnostic model names.
|
|
70
121
|
* Uses 'default' as model placeholder — the actual model is determined
|
|
@@ -74,52 +125,132 @@ class SmartRouter {
|
|
|
74
125
|
return {
|
|
75
126
|
routes: {
|
|
76
127
|
code: {
|
|
77
|
-
preferredModel:
|
|
78
|
-
fallback:
|
|
128
|
+
preferredModel: "default",
|
|
129
|
+
fallback: "default",
|
|
79
130
|
agent: null,
|
|
80
|
-
keywords: [
|
|
131
|
+
keywords: [
|
|
132
|
+
"code",
|
|
133
|
+
"implement",
|
|
134
|
+
"write",
|
|
135
|
+
"create",
|
|
136
|
+
"build",
|
|
137
|
+
"développer",
|
|
138
|
+
"coder",
|
|
139
|
+
"programmer",
|
|
140
|
+
"function",
|
|
141
|
+
"class",
|
|
142
|
+
"method",
|
|
143
|
+
],
|
|
81
144
|
},
|
|
82
145
|
debug: {
|
|
83
|
-
preferredModel:
|
|
84
|
-
fallback:
|
|
146
|
+
preferredModel: "default",
|
|
147
|
+
fallback: "default",
|
|
85
148
|
agent: null,
|
|
86
|
-
keywords: [
|
|
149
|
+
keywords: [
|
|
150
|
+
"debug",
|
|
151
|
+
"fix",
|
|
152
|
+
"error",
|
|
153
|
+
"bug",
|
|
154
|
+
"broken",
|
|
155
|
+
"issue",
|
|
156
|
+
"problem",
|
|
157
|
+
"repair",
|
|
158
|
+
"correct",
|
|
159
|
+
"erreur",
|
|
160
|
+
"problème",
|
|
161
|
+
"réparer",
|
|
162
|
+
],
|
|
87
163
|
},
|
|
88
164
|
explore: {
|
|
89
|
-
preferredModel:
|
|
90
|
-
fallback:
|
|
165
|
+
preferredModel: "default",
|
|
166
|
+
fallback: "default",
|
|
91
167
|
agent: null,
|
|
92
|
-
keywords: [
|
|
168
|
+
keywords: [
|
|
169
|
+
"explore",
|
|
170
|
+
"understand",
|
|
171
|
+
"analyze",
|
|
172
|
+
"examine",
|
|
173
|
+
"investigate",
|
|
174
|
+
"study",
|
|
175
|
+
"review",
|
|
176
|
+
"explorer",
|
|
177
|
+
"analyser",
|
|
178
|
+
"comprendre",
|
|
179
|
+
],
|
|
93
180
|
},
|
|
94
181
|
plan: {
|
|
95
|
-
preferredModel:
|
|
96
|
-
fallback:
|
|
182
|
+
preferredModel: "default",
|
|
183
|
+
fallback: "default",
|
|
97
184
|
agent: null,
|
|
98
|
-
keywords: [
|
|
185
|
+
keywords: [
|
|
186
|
+
"plan",
|
|
187
|
+
"design",
|
|
188
|
+
"architecture",
|
|
189
|
+
"strategy",
|
|
190
|
+
"approach",
|
|
191
|
+
"structure",
|
|
192
|
+
"organize",
|
|
193
|
+
"concevoir",
|
|
194
|
+
"planifier",
|
|
195
|
+
"architecture",
|
|
196
|
+
],
|
|
99
197
|
},
|
|
100
198
|
test: {
|
|
101
|
-
preferredModel:
|
|
102
|
-
fallback:
|
|
199
|
+
preferredModel: "default",
|
|
200
|
+
fallback: "default",
|
|
103
201
|
agent: null,
|
|
104
|
-
keywords: [
|
|
202
|
+
keywords: [
|
|
203
|
+
"test",
|
|
204
|
+
"testing",
|
|
205
|
+
"unit",
|
|
206
|
+
"integration",
|
|
207
|
+
"verify",
|
|
208
|
+
"validate",
|
|
209
|
+
"check",
|
|
210
|
+
"tester",
|
|
211
|
+
"vérifier",
|
|
212
|
+
"valider",
|
|
213
|
+
],
|
|
105
214
|
},
|
|
106
215
|
review: {
|
|
107
|
-
preferredModel:
|
|
108
|
-
fallback:
|
|
216
|
+
preferredModel: "default",
|
|
217
|
+
fallback: "default",
|
|
109
218
|
agent: null,
|
|
110
|
-
keywords: [
|
|
219
|
+
keywords: [
|
|
220
|
+
"review",
|
|
221
|
+
"audit",
|
|
222
|
+
"check",
|
|
223
|
+
"validate",
|
|
224
|
+
"quality",
|
|
225
|
+
"improve",
|
|
226
|
+
"optimize",
|
|
227
|
+
"réviser",
|
|
228
|
+
"améliorer",
|
|
229
|
+
"optimiser",
|
|
230
|
+
],
|
|
111
231
|
},
|
|
112
232
|
general: {
|
|
113
|
-
preferredModel:
|
|
114
|
-
fallback:
|
|
233
|
+
preferredModel: "default",
|
|
234
|
+
fallback: "default",
|
|
115
235
|
agent: null,
|
|
116
|
-
keywords: [
|
|
117
|
-
|
|
236
|
+
keywords: [
|
|
237
|
+
"help",
|
|
238
|
+
"explain",
|
|
239
|
+
"what",
|
|
240
|
+
"how",
|
|
241
|
+
"why",
|
|
242
|
+
"question",
|
|
243
|
+
"aide",
|
|
244
|
+
"expliquer",
|
|
245
|
+
"comment",
|
|
246
|
+
"pourquoi",
|
|
247
|
+
],
|
|
248
|
+
},
|
|
118
249
|
},
|
|
119
250
|
default: {
|
|
120
|
-
model:
|
|
121
|
-
agent: null
|
|
122
|
-
}
|
|
251
|
+
model: "default",
|
|
252
|
+
agent: null,
|
|
253
|
+
},
|
|
123
254
|
};
|
|
124
255
|
}
|
|
125
256
|
}
|
package/dist/router.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
|
package/dist/sub-agent.d.ts
CHANGED
package/dist/sub-agent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sub-agent.d.ts","sourceRoot":"","sources":["../src/sub-agent.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sub-agent.d.ts","sourceRoot":"","sources":["../src/sub-agent.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,qBAAa,eAAe;IAC3B,OAAO,CAAC,MAAM,CAA0C;IAExD;;;OAGG;IACG,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyB5D;;OAEG;IACH,kBAAkB,IAAI,cAAc,EAAE;IAItC;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAI5D;;;;;;;;;;;;;;OAcG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IA4E1D;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAI7C;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAG/B"}
|
package/dist/sub-agent.js
CHANGED
|
@@ -12,12 +12,12 @@ class SubAgentManager {
|
|
|
12
12
|
async loadAgentDefinitions(agentsDir) {
|
|
13
13
|
try {
|
|
14
14
|
const files = await (0, promises_1.readdir)(agentsDir);
|
|
15
|
-
const mdFiles = files.filter(file => file.endsWith(
|
|
15
|
+
const mdFiles = files.filter((file) => file.endsWith(".md"));
|
|
16
16
|
this.agents.clear();
|
|
17
17
|
for (const file of mdFiles) {
|
|
18
18
|
try {
|
|
19
19
|
const filePath = (0, node_path_1.join)(agentsDir, file);
|
|
20
|
-
const content = await (0, promises_1.readFile)(filePath,
|
|
20
|
+
const content = await (0, promises_1.readFile)(filePath, "utf8");
|
|
21
21
|
const agent = this.parseAgentMarkdown(content);
|
|
22
22
|
if (agent) {
|
|
23
23
|
this.agents.set(agent.name, agent);
|
|
@@ -42,16 +42,7 @@ class SubAgentManager {
|
|
|
42
42
|
* Construit la commande CLI pour spawner un sous-agent phi
|
|
43
43
|
*/
|
|
44
44
|
createCommand(agent, task) {
|
|
45
|
-
return [
|
|
46
|
-
'phi',
|
|
47
|
-
'--print',
|
|
48
|
-
'--model',
|
|
49
|
-
agent.model,
|
|
50
|
-
'--no-session',
|
|
51
|
-
'--system-prompt',
|
|
52
|
-
agent.systemPrompt,
|
|
53
|
-
task
|
|
54
|
-
];
|
|
45
|
+
return ["phi", "--print", "--model", agent.model, "--no-session", "--system-prompt", agent.systemPrompt, task];
|
|
55
46
|
}
|
|
56
47
|
/**
|
|
57
48
|
* Parse un fichier markdown avec frontmatter YAML
|
|
@@ -69,14 +60,14 @@ class SubAgentManager {
|
|
|
69
60
|
* Le contenu après le frontmatter devient le system prompt...
|
|
70
61
|
*/
|
|
71
62
|
parseAgentMarkdown(content) {
|
|
72
|
-
const lines = content.split(
|
|
73
|
-
if (!lines[0]?.startsWith(
|
|
63
|
+
const lines = content.split("\n");
|
|
64
|
+
if (!lines[0]?.startsWith("---")) {
|
|
74
65
|
return null;
|
|
75
66
|
}
|
|
76
67
|
// Trouver la fin du frontmatter
|
|
77
68
|
let frontmatterEnd = -1;
|
|
78
69
|
for (let i = 1; i < lines.length; i++) {
|
|
79
|
-
if (lines[i] ===
|
|
70
|
+
if (lines[i] === "---") {
|
|
80
71
|
frontmatterEnd = i;
|
|
81
72
|
break;
|
|
82
73
|
}
|
|
@@ -89,9 +80,9 @@ class SubAgentManager {
|
|
|
89
80
|
const frontmatter = {};
|
|
90
81
|
for (const line of frontmatterLines) {
|
|
91
82
|
const trimmed = line.trim();
|
|
92
|
-
if (!trimmed || trimmed.startsWith(
|
|
83
|
+
if (!trimmed || trimmed.startsWith("#"))
|
|
93
84
|
continue;
|
|
94
|
-
const colonIndex = trimmed.indexOf(
|
|
85
|
+
const colonIndex = trimmed.indexOf(":");
|
|
95
86
|
if (colonIndex === -1)
|
|
96
87
|
continue;
|
|
97
88
|
const key = trimmed.substring(0, colonIndex).trim();
|
|
@@ -99,9 +90,9 @@ class SubAgentManager {
|
|
|
99
90
|
// Parser la valeur
|
|
100
91
|
let value = valueStr;
|
|
101
92
|
// Arrays (format: [item1, item2])
|
|
102
|
-
if (valueStr.startsWith(
|
|
93
|
+
if (valueStr.startsWith("[") && valueStr.endsWith("]")) {
|
|
103
94
|
const arrayContent = valueStr.slice(1, -1);
|
|
104
|
-
value = arrayContent.split(
|
|
95
|
+
value = arrayContent.split(",").map((item) => item.trim().replace(/['"]/g, ""));
|
|
105
96
|
}
|
|
106
97
|
// Numbers
|
|
107
98
|
else if (/^\d+$/.test(valueStr)) {
|
|
@@ -116,18 +107,18 @@ class SubAgentManager {
|
|
|
116
107
|
}
|
|
117
108
|
// Extract system prompt (content after frontmatter)
|
|
118
109
|
const systemPromptLines = lines.slice(frontmatterEnd + 1);
|
|
119
|
-
const systemPrompt = systemPromptLines.join(
|
|
110
|
+
const systemPrompt = systemPromptLines.join("\n").trim();
|
|
120
111
|
// Valider les champs requis
|
|
121
112
|
if (!frontmatter.name || !frontmatter.model || !systemPrompt) {
|
|
122
113
|
return null;
|
|
123
114
|
}
|
|
124
115
|
return {
|
|
125
116
|
name: frontmatter.name,
|
|
126
|
-
description: frontmatter.description ||
|
|
117
|
+
description: frontmatter.description || "",
|
|
127
118
|
model: frontmatter.model,
|
|
128
119
|
tools: Array.isArray(frontmatter.tools) ? frontmatter.tools : [],
|
|
129
120
|
systemPrompt,
|
|
130
|
-
maxTokens: frontmatter.maxTokens || undefined
|
|
121
|
+
maxTokens: frontmatter.maxTokens || undefined,
|
|
131
122
|
};
|
|
132
123
|
}
|
|
133
124
|
/**
|
package/dist/sub-agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sub-agent.js","sourceRoot":"","sources":["../src/sub-agent.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"sub-agent.js","sourceRoot":"","sources":["../src/sub-agent.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export type TaskCategory =
|
|
1
|
+
export type TaskCategory = "code" | "debug" | "explore" | "plan" | "test" | "review" | "general";
|
|
2
2
|
export interface ModelProfile {
|
|
3
3
|
id: string;
|
|
4
4
|
provider: string;
|
|
5
|
-
speed:
|
|
6
|
-
quality:
|
|
5
|
+
speed: "fast" | "medium" | "slow";
|
|
6
|
+
quality: "high" | "medium" | "low";
|
|
7
7
|
strengths: TaskCategory[];
|
|
8
8
|
maxTokens: number;
|
|
9
9
|
supportsTools: boolean;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEjG,MAAM,WAAW,YAAY;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEjG,MAAM,WAAW,YAAY;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;IAClC,OAAO,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACnC,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC7B,MAAM,EAAE,MAAM,CACb,YAAY,EACZ;QACC,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;KACnB,CACD,CAAC;IACF,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;CACjD;AAED,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf"}
|