konsilio 0.3.1 → 0.3.2
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/README.md
CHANGED
|
@@ -63,12 +63,27 @@ Returns a blueprint with architecture directives, edge cases, constraints, and n
|
|
|
63
63
|
"models": {
|
|
64
64
|
"experts": "google/gemini-2.5-flash-lite",
|
|
65
65
|
"lead": "google/gemini-2.5-pro"
|
|
66
|
+
},
|
|
67
|
+
"timeouts": {
|
|
68
|
+
"expertMs": 90000,
|
|
69
|
+
"leadMs": 120000
|
|
70
|
+
},
|
|
71
|
+
"maxTokens": {
|
|
72
|
+
"experts": 16384,
|
|
73
|
+
"lead": 32768
|
|
66
74
|
}
|
|
67
75
|
}
|
|
68
76
|
```
|
|
69
77
|
|
|
70
78
|
Default personas: `security`, `performance`, `ux-dx`, `devops`, `typescript`, `graph-dba`, `node-fullstack`, `dev-tooling`, `distributed-systems`, `test-architect`
|
|
71
79
|
|
|
80
|
+
**Timeouts & Token Limits:**
|
|
81
|
+
- `timeouts.expertMs` — Timeout per expert call in ms (default: `90000`)
|
|
82
|
+
- `timeouts.leadMs` — Timeout per consolidation phase in ms (default: `120000`)
|
|
83
|
+
- `maxTokens.experts` — Max tokens per expert response (default: `4096`)
|
|
84
|
+
- `maxTokens.lead` — Max tokens per consolidation phase (default: `16384`)
|
|
85
|
+
- Set any value to `0` to treat as **unlimited** (no timeout / no token limit)
|
|
86
|
+
|
|
72
87
|
```mermaid
|
|
73
88
|
flowchart TD
|
|
74
89
|
A[Identify Need During Development] --> B[Write Proposal Document]
|
|
@@ -114,17 +129,22 @@ flowchart TD
|
|
|
114
129
|
|
|
115
130
|
Each expert is a focused agent with a specific lens:
|
|
116
131
|
|
|
117
|
-
| Persona | Focus |
|
|
118
|
-
|
|
119
|
-
| 🔒 Security | Auth, injection, rate limiting, data exposure |
|
|
120
|
-
| ⚡ Performance | Bottlenecks, caching, query patterns, scaling |
|
|
121
|
-
|
|
|
122
|
-
| 🧪 Test Architect | Coverage, edge cases, testability |
|
|
123
|
-
| 🎨 UX/DX | API design, developer experience, ergonomics |
|
|
124
|
-
| 🛠️
|
|
132
|
+
| Persona | Focus | Config Name |
|
|
133
|
+
|---------|-------|-------------|
|
|
134
|
+
| 🔒 Security Architect | Auth, injection, rate limiting, data exposure, secrets lifecycle | `security` |
|
|
135
|
+
| ⚡ Performance Engineer | Bottlenecks, caching, query patterns, scaling, cost efficiency | `performance` |
|
|
136
|
+
| 🔧 DevOps Engineer | Deployment, observability, infrastructure, IaC, auto-scaling | `devops` |
|
|
137
|
+
| 🧪 QA/Test Architect | Coverage, edge cases, testability, chaos engineering, contract testing | `test-architect` |
|
|
138
|
+
| 🎨 UX/DX Designer | API design, developer experience, ergonomics, accessibility | `ux-dx` |
|
|
139
|
+
| 🛠️ Developer Tooling Specialist | Build pipeline, CI/CD, code generation, test frameworks, monorepo | `dev-tooling` |
|
|
140
|
+
| 📘 TypeScript Engineer | Static types, module boundaries, async flow, generics, compiler config | `typescript` |
|
|
141
|
+
| 🚀 Node/TypeScript Fullstack Engineer | REST/GraphQL APIs, auth, middleware, WebSocket/SSE, error boundaries | `node-fullstack` |
|
|
142
|
+
| 🕸️ Graph Data Modeler | Vertex-edge design, traversal performance, query patterns, schema evolution | `graph-dba` |
|
|
143
|
+
| 🌐 Distributed Systems Engineer | Consensus, fault tolerance, messaging, event-driven, saga orchestration | `distributed-systems` |
|
|
125
144
|
|
|
126
145
|
Experts output **prose** — free-form analysis without JSON constraints.
|
|
127
|
-
|
|
146
|
+
|
|
147
|
+
**Note:** User-defined experts can be created by adding an `<expert-name>.md` file to `/data/personas/`
|
|
128
148
|
|
|
129
149
|
### The Lead
|
|
130
150
|
|
|
@@ -30,8 +30,21 @@ export class OpenRouterService {
|
|
|
30
30
|
}
|
|
31
31
|
for (let attempt = 0; attempt < this.maxRetries; attempt++) {
|
|
32
32
|
const controller = new AbortController();
|
|
33
|
-
|
|
33
|
+
// timeoutMs of 0 means unlimited (no abort timeout)
|
|
34
|
+
const timeoutMs = opts.timeoutMs ?? 90_000;
|
|
35
|
+
const timeout = timeoutMs > 0 ? setTimeout(() => controller.abort(), timeoutMs) : null;
|
|
34
36
|
try {
|
|
37
|
+
const body = {
|
|
38
|
+
model: opts.model,
|
|
39
|
+
messages: opts.messages,
|
|
40
|
+
temperature: opts.temperature ?? 0.3,
|
|
41
|
+
...(opts.responseFormat && { response_format: opts.responseFormat }),
|
|
42
|
+
};
|
|
43
|
+
// maxTokens of 0 means unlimited (omit from request, let model use its default)
|
|
44
|
+
const maxTokens = opts.maxTokens ?? 4096;
|
|
45
|
+
if (maxTokens > 0) {
|
|
46
|
+
body.max_tokens = maxTokens;
|
|
47
|
+
}
|
|
35
48
|
const res = await fetch(`${this.baseUrl}/chat/completions`, {
|
|
36
49
|
method: 'POST',
|
|
37
50
|
headers: {
|
|
@@ -40,13 +53,7 @@ export class OpenRouterService {
|
|
|
40
53
|
'HTTP-Referer': 'https://github.com/konsilio',
|
|
41
54
|
'X-Title': 'Konsilio Council',
|
|
42
55
|
},
|
|
43
|
-
body: JSON.stringify(
|
|
44
|
-
model: opts.model,
|
|
45
|
-
messages: opts.messages,
|
|
46
|
-
max_tokens: opts.maxTokens ?? 4096,
|
|
47
|
-
temperature: opts.temperature ?? 0.3,
|
|
48
|
-
...(opts.responseFormat && { response_format: opts.responseFormat }),
|
|
49
|
-
}),
|
|
56
|
+
body: JSON.stringify(body),
|
|
50
57
|
signal: controller.signal,
|
|
51
58
|
});
|
|
52
59
|
if (res.status === 401)
|
|
@@ -71,7 +78,7 @@ export class OpenRouterService {
|
|
|
71
78
|
}
|
|
72
79
|
catch (err) {
|
|
73
80
|
if (err instanceof Error && err.name === 'AbortError') {
|
|
74
|
-
throw new Error(`Request timeout (>${
|
|
81
|
+
throw new Error(`Request timeout (>${timeoutMs / 1000}s).`);
|
|
75
82
|
}
|
|
76
83
|
if (this.isRetryable(err) && attempt < this.maxRetries - 1) {
|
|
77
84
|
this.logger.warn('Retrying OpenRouter call', { attempt: attempt + 1 }, correlationId);
|
|
@@ -81,7 +88,8 @@ export class OpenRouterService {
|
|
|
81
88
|
throw err;
|
|
82
89
|
}
|
|
83
90
|
finally {
|
|
84
|
-
|
|
91
|
+
if (timeout)
|
|
92
|
+
clearTimeout(timeout);
|
|
85
93
|
}
|
|
86
94
|
}
|
|
87
95
|
throw new Error('Max retries exceeded.');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openrouter.service.js","sourceRoot":"","sources":["../../src/services/openrouter.service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAuCH;;GAEG;AACH,MAAM,OAAO,iBAAiB;IACX,MAAM,CAAS;IACf,OAAO,CAAS;IAChB,UAAU,CAAS;IACnB,WAAW,CAAS;IACpB,MAAM,CAAS;IAEhC,YAAY,MAA+B,EAAE,MAAc;QACzD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC;QAC9C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,IAA2B,EAAE,aAAsB;QAC5D,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CACb,yDAAyD;gBACzD,4CAA4C,CAC7C,CAAC;QACJ,CAAC;QAED,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;YAC3D,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"openrouter.service.js","sourceRoot":"","sources":["../../src/services/openrouter.service.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED