instar 1.3.228 → 1.3.230
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/cli.js +11 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/devProfileNode.d.ts +62 -0
- package/dist/commands/devProfileNode.d.ts.map +1 -0
- package/dist/commands/devProfileNode.js +179 -0
- package/dist/commands/devProfileNode.js.map +1 -0
- package/dist/commands/server.js +3 -2
- package/dist/commands/server.js.map +1 -1
- package/dist/core/CoherenceReviewer.d.ts.map +1 -1
- package/dist/core/CoherenceReviewer.js +1 -0
- package/dist/core/CoherenceReviewer.js.map +1 -1
- package/dist/core/ContextualEvaluator.d.ts.map +1 -1
- package/dist/core/ContextualEvaluator.js +3 -0
- package/dist/core/ContextualEvaluator.js.map +1 -1
- package/dist/core/DiscoveryEvaluator.d.ts.map +1 -1
- package/dist/core/DiscoveryEvaluator.js +1 -0
- package/dist/core/DiscoveryEvaluator.js.map +1 -1
- package/dist/core/ExternalOperationGate.d.ts.map +1 -1
- package/dist/core/ExternalOperationGate.js +1 -0
- package/dist/core/ExternalOperationGate.js.map +1 -1
- package/dist/core/JobReflector.d.ts.map +1 -1
- package/dist/core/JobReflector.js +1 -0
- package/dist/core/JobReflector.js.map +1 -1
- package/dist/core/LLMConflictResolver.d.ts.map +1 -1
- package/dist/core/LLMConflictResolver.js +1 -0
- package/dist/core/LLMConflictResolver.js.map +1 -1
- package/dist/core/MessageSentinel.d.ts.map +1 -1
- package/dist/core/MessageSentinel.js +1 -0
- package/dist/core/MessageSentinel.js.map +1 -1
- package/dist/core/MessagingToneGate.d.ts.map +1 -1
- package/dist/core/MessagingToneGate.js +1 -0
- package/dist/core/MessagingToneGate.js.map +1 -1
- package/dist/core/PreCompactionFlush.js +1 -1
- package/dist/core/PreCompactionFlush.js.map +1 -1
- package/dist/core/ProjectDriftChecker.d.ts.map +1 -1
- package/dist/core/ProjectDriftChecker.js +1 -0
- package/dist/core/ProjectDriftChecker.js.map +1 -1
- package/dist/core/RelationshipManager.js +2 -2
- package/dist/core/RelationshipManager.js.map +1 -1
- package/dist/core/ResumeValidator.js +1 -1
- package/dist/core/ResumeValidator.js.map +1 -1
- package/dist/core/TemporalCoherenceChecker.d.ts.map +1 -1
- package/dist/core/TemporalCoherenceChecker.js +1 -0
- package/dist/core/TemporalCoherenceChecker.js.map +1 -1
- package/dist/core/UnjustifiedStopGate.d.ts.map +1 -1
- package/dist/core/UnjustifiedStopGate.js +1 -0
- package/dist/core/UnjustifiedStopGate.js.map +1 -1
- package/dist/core/crossModelReviewer.d.ts.map +1 -1
- package/dist/core/crossModelReviewer.js +1 -0
- package/dist/core/crossModelReviewer.js.map +1 -1
- package/dist/knowledge/TreeSynthesis.d.ts.map +1 -1
- package/dist/knowledge/TreeSynthesis.js +1 -0
- package/dist/knowledge/TreeSynthesis.js.map +1 -1
- package/dist/knowledge/TreeTriage.d.ts.map +1 -1
- package/dist/knowledge/TreeTriage.js +2 -0
- package/dist/knowledge/TreeTriage.js.map +1 -1
- package/dist/memory/TopicSummarizer.d.ts.map +1 -1
- package/dist/memory/TopicSummarizer.js +1 -0
- package/dist/memory/TopicSummarizer.js.map +1 -1
- package/dist/messaging/SessionSummarySentinel.js +1 -1
- package/dist/messaging/SessionSummarySentinel.js.map +1 -1
- package/dist/messaging/TelegramAdapter.d.ts.map +1 -1
- package/dist/messaging/TelegramAdapter.js +1 -0
- package/dist/messaging/TelegramAdapter.js.map +1 -1
- package/dist/monitoring/CommitmentSentinel.d.ts.map +1 -1
- package/dist/monitoring/CommitmentSentinel.js +1 -0
- package/dist/monitoring/CommitmentSentinel.js.map +1 -1
- package/dist/monitoring/InputClassifier.d.ts.map +1 -1
- package/dist/monitoring/InputClassifier.js +1 -0
- package/dist/monitoring/InputClassifier.js.map +1 -1
- package/dist/monitoring/PromptGate.d.ts.map +1 -1
- package/dist/monitoring/PromptGate.js +1 -0
- package/dist/monitoring/PromptGate.js.map +1 -1
- package/dist/monitoring/SessionActivitySentinel.d.ts.map +1 -1
- package/dist/monitoring/SessionActivitySentinel.js +3 -0
- package/dist/monitoring/SessionActivitySentinel.js.map +1 -1
- package/dist/monitoring/SessionWatchdog.d.ts.map +1 -1
- package/dist/monitoring/SessionWatchdog.js +1 -0
- package/dist/monitoring/SessionWatchdog.js.map +1 -1
- package/dist/monitoring/StallTriageNurse.d.ts.map +1 -1
- package/dist/monitoring/StallTriageNurse.js +1 -0
- package/dist/monitoring/StallTriageNurse.js.map +1 -1
- package/dist/scaffold/templates.d.ts.map +1 -1
- package/dist/scaffold/templates.js +2 -0
- package/dist/scaffold/templates.js.map +1 -1
- package/package.json +1 -1
- package/scripts/docs-coverage.mjs +14 -4
- package/scripts/generate-builtin-manifest.cjs +1 -0
- package/src/data/builtin-manifest.json +42 -34
- package/src/scaffold/templates.ts +2 -0
- package/upgrades/1.3.229.md +47 -0
- package/upgrades/1.3.230.md +66 -0
- package/upgrades/dev-profile-node-tool.eli16.md +42 -0
- package/upgrades/side-effects/attribute-remaining-llm-callers.md +82 -0
- package/upgrades/side-effects/dev-profile-node-tool.md +85 -0
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `instar dev:profile-node [pid]` — CPU-profile a RUNNING node process and print
|
|
3
|
+
* the hottest JS functions (function + file:line + self-time %).
|
|
4
|
+
*
|
|
5
|
+
* Why this exists: macOS `sample` (and lsof snapshots, `gh run --log`, etc.) can't
|
|
6
|
+
* symbolicate a node process's JS frames — they show only native/V8 frames, so a
|
|
7
|
+
* busy node server's actual hot *function* stays invisible. This wraps the
|
|
8
|
+
* technique that DOES see it: SIGUSR1 opens node's inspector on the running
|
|
9
|
+
* process, then a CDP CPU profile over the inspector websocket reports the exact
|
|
10
|
+
* JS call frames. (This is how the StateManager.listSessions hot-loop was pinned —
|
|
11
|
+
* 30% of CPU in readFileUtf8 under listSessions, invisible to every other tool.)
|
|
12
|
+
*
|
|
13
|
+
* Side effect: SIGUSR1 opens the inspector on 127.0.0.1 (localhost-only) for the
|
|
14
|
+
* life of the process; it closes when the process restarts. The command says so.
|
|
15
|
+
* Read-only otherwise — it samples, it never mutates the target.
|
|
16
|
+
*/
|
|
17
|
+
import { execFile } from 'node:child_process';
|
|
18
|
+
import pc from 'picocolors';
|
|
19
|
+
const INSPECTOR_PORTS = [9229, 9230, 9231, 9232, 9233, 9234, 9235];
|
|
20
|
+
const DEFAULT_TOP = 15;
|
|
21
|
+
const DEFAULT_DURATION_SEC = 5;
|
|
22
|
+
/**
|
|
23
|
+
* Pure: aggregate a CDP CPU profile's self-time (per-node `hitCount`) by JS call
|
|
24
|
+
* frame, returning the top-N frames as `function src/file.js:line` + self %.
|
|
25
|
+
* The biggest non-idle entry IS the hot loop. Idle/native frames (`(idle)`,
|
|
26
|
+
* `(program)`, GC) are kept — seeing "48% idle, 30% readFileUtf8" is the signal.
|
|
27
|
+
*/
|
|
28
|
+
export function aggregateHotFrames(profile, topN = DEFAULT_TOP) {
|
|
29
|
+
const self = new Map();
|
|
30
|
+
for (const n of profile.nodes ?? []) {
|
|
31
|
+
const f = n.callFrame ?? {};
|
|
32
|
+
const fn = f.functionName && f.functionName.length > 0 ? f.functionName : '(anonymous)';
|
|
33
|
+
const loc = f.url ? `${f.url.replace(/^.*\/(dist|src)\//, '$1/')}:${(f.lineNumber ?? -1) + 1}` : '';
|
|
34
|
+
const key = loc ? `${fn} ${loc}` : fn;
|
|
35
|
+
self.set(key, (self.get(key) ?? 0) + (n.hitCount ?? 0));
|
|
36
|
+
}
|
|
37
|
+
const total = [...self.values()].reduce((a, b) => a + b, 0) || 1;
|
|
38
|
+
return [...self.entries()]
|
|
39
|
+
.map(([label, samples]) => ({ label, samples, selfPct: Math.round((1000 * samples) / total) / 10 }))
|
|
40
|
+
.sort((a, b) => b.samples - a.samples)
|
|
41
|
+
.slice(0, topN);
|
|
42
|
+
}
|
|
43
|
+
/** Probe the inspector ports for the target opened by SIGUSR1. First hit wins. */
|
|
44
|
+
export async function findInspectorTarget(deps) {
|
|
45
|
+
for (const port of INSPECTOR_PORTS) {
|
|
46
|
+
try {
|
|
47
|
+
const t = await deps.fetchInspectorTarget(port);
|
|
48
|
+
if (t?.webSocketDebuggerUrl)
|
|
49
|
+
return t;
|
|
50
|
+
}
|
|
51
|
+
catch { /* try the next port */ }
|
|
52
|
+
}
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Orchestrate: resolve pid → SIGUSR1 → find inspector → CDP CPU profile →
|
|
57
|
+
* aggregate → print. Returns an exit code (0 ok, 1 operational failure).
|
|
58
|
+
*/
|
|
59
|
+
export async function runDevProfileNode(opts) {
|
|
60
|
+
const out = opts.output ?? { write: (t) => process.stdout.write(t), error: (t) => process.stderr.write(t) };
|
|
61
|
+
const deps = opts.deps ?? productionDeps();
|
|
62
|
+
const durationMs = Math.max(1, opts.durationSec ?? DEFAULT_DURATION_SEC) * 1000;
|
|
63
|
+
const topN = opts.top ?? DEFAULT_TOP;
|
|
64
|
+
let pid = null;
|
|
65
|
+
if (opts.pid && /^\d+$/.test(opts.pid)) {
|
|
66
|
+
pid = parseInt(opts.pid, 10);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
pid = await deps.hottestNodePid();
|
|
70
|
+
if (pid == null) {
|
|
71
|
+
out.error(pc.red('No running node process found to profile.\n'));
|
|
72
|
+
return 1;
|
|
73
|
+
}
|
|
74
|
+
out.write(pc.dim(`No pid given — profiling the hottest node process: ${pid}\n`));
|
|
75
|
+
}
|
|
76
|
+
try {
|
|
77
|
+
deps.signalUsr1(pid);
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
out.error(pc.red(`Could not signal pid ${pid} (is it alive? is it a node process?).\n`));
|
|
81
|
+
return 1;
|
|
82
|
+
}
|
|
83
|
+
// The inspector takes a moment to bind after SIGUSR1.
|
|
84
|
+
await deps.sleep(800);
|
|
85
|
+
const target = await findInspectorTarget(deps);
|
|
86
|
+
if (!target?.webSocketDebuggerUrl) {
|
|
87
|
+
out.error(pc.red(`pid ${pid} did not expose a node inspector on 127.0.0.1:9229-9235.\n` +
|
|
88
|
+
`It may not be a node process, or the inspector is already bound elsewhere.\n`));
|
|
89
|
+
return 1;
|
|
90
|
+
}
|
|
91
|
+
out.write(pc.dim(`Profiling ${pid} for ${durationMs / 1000}s via the inspector…\n`));
|
|
92
|
+
let profile;
|
|
93
|
+
try {
|
|
94
|
+
profile = await deps.captureCpuProfile(target.webSocketDebuggerUrl, durationMs);
|
|
95
|
+
}
|
|
96
|
+
catch (err) {
|
|
97
|
+
out.error(pc.red(`CPU profile failed: ${err instanceof Error ? err.message : String(err)}\n`));
|
|
98
|
+
return 1;
|
|
99
|
+
}
|
|
100
|
+
const frames = aggregateHotFrames(profile, topN);
|
|
101
|
+
if (frames.length === 0) {
|
|
102
|
+
out.error(pc.yellow('Profile captured but no samples — try a longer --duration.\n'));
|
|
103
|
+
return 0;
|
|
104
|
+
}
|
|
105
|
+
out.write(pc.bold(`\nHottest JS frames (self-time) for pid ${pid}:\n`));
|
|
106
|
+
for (const f of frames) {
|
|
107
|
+
const pct = `${f.selfPct.toFixed(1)}%`.padStart(6);
|
|
108
|
+
out.write(` ${pc.cyan(pct)} ${f.label}\n`);
|
|
109
|
+
}
|
|
110
|
+
out.write(pc.dim(`\n(The biggest non-idle frame is the hot path. SIGUSR1 left the inspector ` +
|
|
111
|
+
`open on 127.0.0.1 for pid ${pid}; it closes on the process's next restart.)\n`));
|
|
112
|
+
return 0;
|
|
113
|
+
}
|
|
114
|
+
/** Production deps: real SIGUSR1, http inspector probe, ws CDP profile, ps. */
|
|
115
|
+
export function productionDeps() {
|
|
116
|
+
return {
|
|
117
|
+
signalUsr1(pid) { process.kill(pid, 'SIGUSR1'); },
|
|
118
|
+
async fetchInspectorTarget(port) {
|
|
119
|
+
const res = await fetch(`http://127.0.0.1:${port}/json/list`, { signal: AbortSignal.timeout(2000) });
|
|
120
|
+
if (!res.ok)
|
|
121
|
+
return null;
|
|
122
|
+
const list = (await res.json());
|
|
123
|
+
return Array.isArray(list) && list.length > 0 ? list[0] : null;
|
|
124
|
+
},
|
|
125
|
+
async captureCpuProfile(wsUrl, durationMs) {
|
|
126
|
+
const { WebSocket } = await import('ws');
|
|
127
|
+
return await new Promise((resolve, reject) => {
|
|
128
|
+
const ws = new WebSocket(wsUrl, { maxPayload: 512 * 1024 * 1024 });
|
|
129
|
+
let id = 0;
|
|
130
|
+
const pending = new Map();
|
|
131
|
+
const send = (method, params = {}) => new Promise((r) => { const i = ++id; pending.set(i, r); ws.send(JSON.stringify({ id: i, method, params })); });
|
|
132
|
+
const fail = (e) => { try {
|
|
133
|
+
ws.close();
|
|
134
|
+
}
|
|
135
|
+
catch { /* noop */ } reject(e); };
|
|
136
|
+
const timer = setTimeout(() => fail(new Error('inspector timed out')), durationMs + 15000);
|
|
137
|
+
ws.on('message', (m) => {
|
|
138
|
+
const o = JSON.parse(m.toString());
|
|
139
|
+
if (o.id != null && pending.has(o.id)) {
|
|
140
|
+
pending.get(o.id)(o.result);
|
|
141
|
+
pending.delete(o.id);
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
ws.on('error', (e) => { clearTimeout(timer); fail(e); });
|
|
145
|
+
ws.on('open', () => {
|
|
146
|
+
void (async () => {
|
|
147
|
+
await send('Profiler.enable');
|
|
148
|
+
await send('Profiler.setSamplingInterval', { interval: 100 });
|
|
149
|
+
await send('Profiler.start');
|
|
150
|
+
await new Promise((r) => setTimeout(r, durationMs));
|
|
151
|
+
const stop = (await send('Profiler.stop'));
|
|
152
|
+
clearTimeout(timer);
|
|
153
|
+
try {
|
|
154
|
+
ws.close();
|
|
155
|
+
}
|
|
156
|
+
catch { /* noop */ }
|
|
157
|
+
resolve(stop.profile ?? {});
|
|
158
|
+
})().catch(fail);
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
},
|
|
162
|
+
async hottestNodePid() {
|
|
163
|
+
return await new Promise((resolve) => {
|
|
164
|
+
execFile('ps', ['-Aceo', 'pcpu,pid,comm'], { timeout: 5000 }, (err, stdout) => {
|
|
165
|
+
if (err) {
|
|
166
|
+
resolve(null);
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
const hot = stdout.split('\n').map((l) => l.trim().match(/^([\d.]+)\s+(\d+)\s+(.+)$/))
|
|
170
|
+
.filter((m) => !!m && m[3] === 'node')
|
|
171
|
+
.sort((a, b) => parseFloat(b[1]) - parseFloat(a[1]))[0];
|
|
172
|
+
resolve(hot ? parseInt(hot[2], 10) : null);
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
},
|
|
176
|
+
sleep(ms) { return new Promise((r) => setTimeout(r, ms)); },
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=devProfileNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devProfileNode.js","sourceRoot":"","sources":["../../src/commands/devProfileNode.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/server.js
CHANGED
|
@@ -6307,7 +6307,8 @@ export async function startServer(options) {
|
|
|
6307
6307
|
void captureAndDistill({
|
|
6308
6308
|
ring,
|
|
6309
6309
|
ledger: correctionLedger,
|
|
6310
|
-
distill: (prompt) => correctionLlmQueue.enqueue('background', () => sharedIntelligence.evaluate(prompt, { model: 'fast', maxTokens: 400, temperature: 0 }),
|
|
6310
|
+
distill: (prompt) => correctionLlmQueue.enqueue('background', () => sharedIntelligence.evaluate(prompt, { model: 'fast', maxTokens: 400, temperature: 0, attribution: { component: 'server:correction-learning' } }), // attribution for /metrics/features
|
|
6311
|
+
0.3),
|
|
6311
6312
|
shouldShed: () => {
|
|
6312
6313
|
const r = quotaTracker?.getRecommendation();
|
|
6313
6314
|
return r === 'critical' || r === 'stop';
|
|
@@ -7139,7 +7140,7 @@ export async function startServer(options) {
|
|
|
7139
7140
|
.listActive()
|
|
7140
7141
|
.map(({ threadId, entry }) => ({ threadId, peerName: entry.remoteAgent ?? 'peer', topicId: entry.originTopicId }))
|
|
7141
7142
|
.filter((t) => typeof t.topicId === 'number'),
|
|
7142
|
-
summarize: (prompt) => sharedLlmQueue.enqueue('background', () => intelligence.evaluate(prompt, { model: 'fast' })),
|
|
7143
|
+
summarize: (prompt) => sharedLlmQueue.enqueue('background', () => intelligence.evaluate(prompt, { model: 'fast', attribution: { component: 'server:a2a-checkin' } })), // attribution for /metrics/features
|
|
7143
7144
|
surface: async ({ topicId, body }) => {
|
|
7144
7145
|
if (typeof topicId === 'number')
|
|
7145
7146
|
await tg.sendToTopic(topicId, body);
|