instar 1.3.683 → 1.3.685
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/core/DynamicMcpManager.d.ts +105 -0
- package/dist/core/DynamicMcpManager.d.ts.map +1 -0
- package/dist/core/DynamicMcpManager.js +119 -0
- package/dist/core/DynamicMcpManager.js.map +1 -0
- package/dist/core/DynamicMcpService.d.ts +76 -0
- package/dist/core/DynamicMcpService.d.ts.map +1 -0
- package/dist/core/DynamicMcpService.js +103 -0
- package/dist/core/DynamicMcpService.js.map +1 -0
- package/dist/core/McpApprovalNonceStore.d.ts +46 -0
- package/dist/core/McpApprovalNonceStore.d.ts.map +1 -0
- package/dist/core/McpApprovalNonceStore.js +83 -0
- package/dist/core/McpApprovalNonceStore.js.map +1 -0
- package/dist/core/McpLoadedSetStore.d.ts +39 -0
- package/dist/core/McpLoadedSetStore.d.ts.map +1 -0
- package/dist/core/McpLoadedSetStore.js +82 -0
- package/dist/core/McpLoadedSetStore.js.map +1 -0
- package/dist/core/PendingMcpApprovalStore.d.ts +56 -0
- package/dist/core/PendingMcpApprovalStore.d.ts.map +1 -0
- package/dist/core/PendingMcpApprovalStore.js +74 -0
- package/dist/core/PendingMcpApprovalStore.js.map +1 -0
- package/dist/core/PostUpdateMigrator.d.ts +1 -0
- package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
- package/dist/core/PostUpdateMigrator.js +19 -0
- package/dist/core/PostUpdateMigrator.js.map +1 -1
- package/dist/core/SessionManager.d.ts +20 -0
- package/dist/core/SessionManager.d.ts.map +1 -1
- package/dist/core/SessionManager.js +89 -0
- package/dist/core/SessionManager.js.map +1 -1
- package/dist/core/dynamicMcpConfig.d.ts +141 -0
- package/dist/core/dynamicMcpConfig.d.ts.map +1 -0
- package/dist/core/dynamicMcpConfig.js +125 -0
- package/dist/core/dynamicMcpConfig.js.map +1 -0
- package/dist/core/frameworkSessionLaunch.d.ts +11 -0
- package/dist/core/frameworkSessionLaunch.d.ts.map +1 -1
- package/dist/core/frameworkSessionLaunch.js +7 -0
- package/dist/core/frameworkSessionLaunch.js.map +1 -1
- package/dist/core/mcpPidCapture.d.ts +43 -0
- package/dist/core/mcpPidCapture.d.ts.map +1 -0
- package/dist/core/mcpPidCapture.js +44 -0
- package/dist/core/mcpPidCapture.js.map +1 -0
- package/dist/core/types.d.ts +10 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/monitoring/McpIdleOffloadSweep.d.ts +61 -0
- package/dist/monitoring/McpIdleOffloadSweep.d.ts.map +1 -0
- package/dist/monitoring/McpIdleOffloadSweep.js +89 -0
- package/dist/monitoring/McpIdleOffloadSweep.js.map +1 -0
- package/dist/monitoring/mcpIdleLiveOffload.d.ts +68 -0
- package/dist/monitoring/mcpIdleLiveOffload.d.ts.map +1 -0
- package/dist/monitoring/mcpIdleLiveOffload.js +59 -0
- package/dist/monitoring/mcpIdleLiveOffload.js.map +1 -0
- package/dist/scaffold/templates.d.ts.map +1 -1
- package/dist/scaffold/templates.js +2 -1
- package/dist/scaffold/templates.js.map +1 -1
- package/dist/server/AgentServer.d.ts +2 -0
- package/dist/server/AgentServer.d.ts.map +1 -1
- package/dist/server/AgentServer.js +165 -0
- package/dist/server/AgentServer.js.map +1 -1
- package/dist/server/CapabilityIndex.d.ts.map +1 -1
- package/dist/server/CapabilityIndex.js +1 -0
- package/dist/server/CapabilityIndex.js.map +1 -1
- package/dist/server/routes.d.ts +4 -0
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +153 -0
- package/dist/server/routes.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +65 -65
- package/src/scaffold/templates.ts +2 -1
- package/upgrades/1.3.684.md +62 -0
- package/upgrades/1.3.685.md +37 -0
- package/upgrades/side-effects/dynamic-mcp-awareness.md +36 -0
- package/upgrades/side-effects/dynamic-mcp-baseline-at-spawn.md +74 -0
- package/upgrades/side-effects/dynamic-mcp-capability-classification.md +36 -0
- package/upgrades/side-effects/dynamic-mcp-driver.md +53 -0
- package/upgrades/side-effects/dynamic-mcp-idle-sweep.md +40 -0
- package/upgrades/side-effects/dynamic-mcp-launch-resolver.md +44 -0
- package/upgrades/side-effects/dynamic-mcp-loaded-set-store.md +37 -0
- package/upgrades/side-effects/dynamic-mcp-nonce-store.md +38 -0
- package/upgrades/side-effects/dynamic-mcp-operator-approval-route.md +44 -0
- package/upgrades/side-effects/dynamic-mcp-pure-cores.md +53 -0
- package/upgrades/side-effects/dynamic-mcp-real-offload.md +57 -0
- package/upgrades/side-effects/dynamic-mcp-routes-wiring.md +59 -0
- package/upgrades/side-effects/dynamic-mcp-service.md +41 -0
- package/upgrades/side-effects/dynamic-mcp-sweep-wiring.md +46 -0
- package/upgrades/side-effects/pending-mcp-approval-store.md +33 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* McpLoadedSetStore — durable per-topic "which MCP servers is this session running
|
|
3
|
+
* with" state for the dynamic MCP lifecycle (DYNAMIC-MCP-LIFECYCLE-SPEC). This is
|
|
4
|
+
* the single source of truth the spawn builder reads (to launch with the current
|
|
5
|
+
* set) and the driver writes (load/offload), so a `--resume` restart re-launches
|
|
6
|
+
* with the right set.
|
|
7
|
+
*
|
|
8
|
+
* Two-phase commit (fold M1/M3): a `committed:false` write is in-flight and is
|
|
9
|
+
* IGNORED by the reader (`readCommitted` returns null) — so a load/offload that
|
|
10
|
+
* writes the new set then fails to restart leaves the live session on its OLD set,
|
|
11
|
+
* never a phantom unapproved change. Only a `committed:true` write is authoritative.
|
|
12
|
+
*
|
|
13
|
+
* Writes are atomic (temp + rename on the same dir) so a crash mid-write can never
|
|
14
|
+
* leave a torn file the reader would choke on.
|
|
15
|
+
*/
|
|
16
|
+
import fs from 'node:fs';
|
|
17
|
+
import path from 'node:path';
|
|
18
|
+
export class McpLoadedSetStore {
|
|
19
|
+
dir;
|
|
20
|
+
/** @param dir e.g. `<projectDir>/.instar/state/mcp-loaded` */
|
|
21
|
+
constructor(dir) {
|
|
22
|
+
this.dir = dir;
|
|
23
|
+
}
|
|
24
|
+
pathFor(topicId) {
|
|
25
|
+
return path.join(this.dir, `${topicId}.json`);
|
|
26
|
+
}
|
|
27
|
+
/** Raw record (committed or not), or null if absent/unreadable. */
|
|
28
|
+
read(topicId) {
|
|
29
|
+
try {
|
|
30
|
+
const raw = fs.readFileSync(this.pathFor(topicId), 'utf-8');
|
|
31
|
+
const rec = JSON.parse(raw);
|
|
32
|
+
if (!rec || typeof rec !== 'object')
|
|
33
|
+
return null;
|
|
34
|
+
const servers = Array.isArray(rec.servers)
|
|
35
|
+
? rec.servers.filter((s) => typeof s === 'string' && s.length > 0)
|
|
36
|
+
: [];
|
|
37
|
+
return {
|
|
38
|
+
servers,
|
|
39
|
+
committed: rec.committed === true,
|
|
40
|
+
updatedAt: typeof rec.updatedAt === 'string' ? rec.updatedAt : '',
|
|
41
|
+
reason: typeof rec.reason === 'string' ? rec.reason : '',
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return null; // absent OR unreadable — caller distinguishes via exists()
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/** True iff a state file EXISTS on disk (regardless of readability). */
|
|
49
|
+
exists(topicId) {
|
|
50
|
+
try {
|
|
51
|
+
return fs.existsSync(this.pathFor(topicId));
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/** The COMMITTED server set, or null when there is no committed record (absent,
|
|
58
|
+
* un-committed/in-flight, or unreadable). The reader's two-phase contract. */
|
|
59
|
+
readCommitted(topicId) {
|
|
60
|
+
const rec = this.read(topicId);
|
|
61
|
+
if (!rec || !rec.committed)
|
|
62
|
+
return null;
|
|
63
|
+
return rec.servers;
|
|
64
|
+
}
|
|
65
|
+
/** Atomically write the loaded set. `committed:false` = in-flight (ignored by
|
|
66
|
+
* readCommitted); `committed:true` = authoritative. Throws on a write failure
|
|
67
|
+
* so the caller (driver) can react — the caller is responsible for fail-safety. */
|
|
68
|
+
write(topicId, servers, committed, reason, nowIso) {
|
|
69
|
+
fs.mkdirSync(this.dir, { recursive: true });
|
|
70
|
+
const rec = {
|
|
71
|
+
servers: [...new Set(servers.filter((s) => typeof s === 'string' && s.length > 0))],
|
|
72
|
+
committed,
|
|
73
|
+
updatedAt: nowIso ?? new Date().toISOString(),
|
|
74
|
+
reason,
|
|
75
|
+
};
|
|
76
|
+
const finalPath = this.pathFor(topicId);
|
|
77
|
+
const tmpPath = `${finalPath}.tmp`;
|
|
78
|
+
fs.writeFileSync(tmpPath, JSON.stringify(rec, null, 2));
|
|
79
|
+
fs.renameSync(tmpPath, finalPath); // atomic on the same filesystem
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=McpLoadedSetStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"McpLoadedSetStore.js","sourceRoot":"","sources":["../../src/core/McpLoadedSetStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PendingMcpApprovalStore — the server-side registry behind the dynamic-MCP
|
|
3
|
+
* operator-approval TAP surface (DYNAMIC-MCP-LIFECYCLE-SPEC follow-up). When a
|
|
4
|
+
* non-preapproved interactive change needs operator approval, the agent registers
|
|
5
|
+
* the pending change here and gets back an OPAQUE `requestId` to put in a tap link
|
|
6
|
+
* — the server-minted nonce stays SERVER-SIDE and never travels in the URL (the
|
|
7
|
+
* same posture as Secret Drop's opaque tokens, vs. a nonce-in-query-string leak).
|
|
8
|
+
*
|
|
9
|
+
* The approval PAGE reads the request via `peek` (which NEVER returns the nonce),
|
|
10
|
+
* renders "Approve load of X on topic N?", and the PIN-gated submit calls `consume`
|
|
11
|
+
* (which returns the nonce once + removes the entry) so the route can drive the
|
|
12
|
+
* existing `{kind:'operator-approved', nonce}` change. Single-use + TTL-bounded.
|
|
13
|
+
*/
|
|
14
|
+
export type McpChangeKind = 'load' | 'offload';
|
|
15
|
+
export interface PendingMcpApproval {
|
|
16
|
+
topicId: number;
|
|
17
|
+
kind: McpChangeKind;
|
|
18
|
+
server: string;
|
|
19
|
+
nonce: string;
|
|
20
|
+
expiresAt: number;
|
|
21
|
+
}
|
|
22
|
+
/** What the approval page may see — deliberately WITHOUT the nonce. */
|
|
23
|
+
export interface PendingMcpApprovalView {
|
|
24
|
+
requestId: string;
|
|
25
|
+
topicId: number;
|
|
26
|
+
kind: McpChangeKind;
|
|
27
|
+
server: string;
|
|
28
|
+
}
|
|
29
|
+
export declare class PendingMcpApprovalStore {
|
|
30
|
+
private readonly ttlMs;
|
|
31
|
+
/** Injectable clock for tests; defaults to real time. */
|
|
32
|
+
private readonly now;
|
|
33
|
+
private readonly byId;
|
|
34
|
+
constructor(ttlMs?: number,
|
|
35
|
+
/** Injectable clock for tests; defaults to real time. */
|
|
36
|
+
now?: () => number);
|
|
37
|
+
/** Register a pending change; returns an opaque single-use requestId. */
|
|
38
|
+
register(input: {
|
|
39
|
+
topicId: number;
|
|
40
|
+
kind: McpChangeKind;
|
|
41
|
+
server: string;
|
|
42
|
+
nonce: string;
|
|
43
|
+
}): string;
|
|
44
|
+
/** Read a pending request for the approval page — NEVER exposes the nonce.
|
|
45
|
+
* Returns null when absent or expired (an expired entry is dropped). */
|
|
46
|
+
peek(requestId: string): PendingMcpApprovalView | null;
|
|
47
|
+
/** Consume (verify + invalidate) for the PIN-gated submit. Returns the full
|
|
48
|
+
* entry INCLUDING the nonce once, then removes it (single-use). Null when
|
|
49
|
+
* absent/expired. */
|
|
50
|
+
consume(requestId: string): PendingMcpApproval | null;
|
|
51
|
+
/** Best-effort sweep of expired entries. */
|
|
52
|
+
pruneExpired(): number;
|
|
53
|
+
/** Outstanding (unconsumed, unexpired) count — for status/tests. */
|
|
54
|
+
size(): number;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=PendingMcpApprovalStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PendingMcpApprovalStore.d.ts","sourceRoot":"","sources":["../../src/core/PendingMcpApprovalStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,SAAS,CAAC;AAE/C,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,uEAAuE;AACvE,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAID,qBAAa,uBAAuB;IAIhC,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,yDAAyD;IACzD,OAAO,CAAC,QAAQ,CAAC,GAAG;IALtB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAyC;gBAG3C,KAAK,GAAE,MAAuB;IAC/C,yDAAyD;IACxC,GAAG,GAAE,MAAM,MAAyB;IAGvD,yEAAyE;IACzE,QAAQ,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,aAAa,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;IAShG;6EACyE;IACzE,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI;IAOtD;;0BAEsB;IACtB,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI;IAQrD,4CAA4C;IAC5C,YAAY,IAAI,MAAM;IAOtB,oEAAoE;IACpE,IAAI,IAAI,MAAM;CACf"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PendingMcpApprovalStore — the server-side registry behind the dynamic-MCP
|
|
3
|
+
* operator-approval TAP surface (DYNAMIC-MCP-LIFECYCLE-SPEC follow-up). When a
|
|
4
|
+
* non-preapproved interactive change needs operator approval, the agent registers
|
|
5
|
+
* the pending change here and gets back an OPAQUE `requestId` to put in a tap link
|
|
6
|
+
* — the server-minted nonce stays SERVER-SIDE and never travels in the URL (the
|
|
7
|
+
* same posture as Secret Drop's opaque tokens, vs. a nonce-in-query-string leak).
|
|
8
|
+
*
|
|
9
|
+
* The approval PAGE reads the request via `peek` (which NEVER returns the nonce),
|
|
10
|
+
* renders "Approve load of X on topic N?", and the PIN-gated submit calls `consume`
|
|
11
|
+
* (which returns the nonce once + removes the entry) so the route can drive the
|
|
12
|
+
* existing `{kind:'operator-approved', nonce}` change. Single-use + TTL-bounded.
|
|
13
|
+
*/
|
|
14
|
+
import crypto from 'node:crypto';
|
|
15
|
+
const DEFAULT_TTL_MS = 10 * 60 * 1000; // 10 min — long enough for a human tap
|
|
16
|
+
export class PendingMcpApprovalStore {
|
|
17
|
+
ttlMs;
|
|
18
|
+
now;
|
|
19
|
+
byId = new Map();
|
|
20
|
+
constructor(ttlMs = DEFAULT_TTL_MS,
|
|
21
|
+
/** Injectable clock for tests; defaults to real time. */
|
|
22
|
+
now = () => Date.now()) {
|
|
23
|
+
this.ttlMs = ttlMs;
|
|
24
|
+
this.now = now;
|
|
25
|
+
}
|
|
26
|
+
/** Register a pending change; returns an opaque single-use requestId. */
|
|
27
|
+
register(input) {
|
|
28
|
+
const requestId = crypto.randomBytes(18).toString('base64url');
|
|
29
|
+
this.byId.set(requestId, {
|
|
30
|
+
topicId: input.topicId, kind: input.kind, server: input.server, nonce: input.nonce,
|
|
31
|
+
expiresAt: this.now() + this.ttlMs,
|
|
32
|
+
});
|
|
33
|
+
return requestId;
|
|
34
|
+
}
|
|
35
|
+
/** Read a pending request for the approval page — NEVER exposes the nonce.
|
|
36
|
+
* Returns null when absent or expired (an expired entry is dropped). */
|
|
37
|
+
peek(requestId) {
|
|
38
|
+
const e = this.byId.get(requestId);
|
|
39
|
+
if (!e)
|
|
40
|
+
return null;
|
|
41
|
+
if (this.now() > e.expiresAt) {
|
|
42
|
+
this.byId.delete(requestId);
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
return { requestId, topicId: e.topicId, kind: e.kind, server: e.server };
|
|
46
|
+
}
|
|
47
|
+
/** Consume (verify + invalidate) for the PIN-gated submit. Returns the full
|
|
48
|
+
* entry INCLUDING the nonce once, then removes it (single-use). Null when
|
|
49
|
+
* absent/expired. */
|
|
50
|
+
consume(requestId) {
|
|
51
|
+
const e = this.byId.get(requestId);
|
|
52
|
+
if (!e)
|
|
53
|
+
return null;
|
|
54
|
+
this.byId.delete(requestId); // single-use regardless of expiry
|
|
55
|
+
if (this.now() > e.expiresAt)
|
|
56
|
+
return null;
|
|
57
|
+
return e;
|
|
58
|
+
}
|
|
59
|
+
/** Best-effort sweep of expired entries. */
|
|
60
|
+
pruneExpired() {
|
|
61
|
+
const t = this.now();
|
|
62
|
+
let removed = 0;
|
|
63
|
+
for (const [id, e] of this.byId) {
|
|
64
|
+
if (t > e.expiresAt) {
|
|
65
|
+
this.byId.delete(id);
|
|
66
|
+
removed++;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return removed;
|
|
70
|
+
}
|
|
71
|
+
/** Outstanding (unconsumed, unexpired) count — for status/tests. */
|
|
72
|
+
size() { this.pruneExpired(); return this.byId.size; }
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=PendingMcpApprovalStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PendingMcpApprovalStore.js","sourceRoot":"","sources":["../../src/core/PendingMcpApprovalStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,MAAM,MAAM,aAAa,CAAC;AAoBjC,MAAM,cAAc,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,uCAAuC;AAE9E,MAAM,OAAO,uBAAuB;IAIf;IAEA;IALF,IAAI,GAAG,IAAI,GAAG,EAA8B,CAAC;IAE9D,YACmB,QAAgB,cAAc;IAC/C,yDAAyD;IACxC,MAAoB,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;QAFpC,UAAK,GAAL,KAAK,CAAyB;QAE9B,QAAG,GAAH,GAAG,CAAiC;IACpD,CAAC;IAEJ,yEAAyE;IACzE,QAAQ,CAAC,KAA8E;QACrF,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC/D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE;YACvB,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK;YAClF,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK;SACnC,CAAC,CAAC;QACH,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;6EACyE;IACzE,IAAI,CAAC,SAAiB;QACpB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACnC,IAAI,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACpB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;YAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAAC,OAAO,IAAI,CAAC;QAAC,CAAC;QAC3E,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;IAC3E,CAAC;IAED;;0BAEsB;IACtB,OAAO,CAAC,SAAiB;QACvB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACnC,IAAI,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,kCAAkC;QAC/D,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAC1C,OAAO,CAAC,CAAC;IACX,CAAC;IAED,4CAA4C;IAC5C,YAAY;QACV,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACrB,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAAC,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;gBAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAAC,OAAO,EAAE,CAAC;YAAC,CAAC;QAAC,CAAC;QAC9F,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,oEAAoE;IACpE,IAAI,KAAa,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;CAC/D"}
|
|
@@ -27,6 +27,7 @@ import { type MigratorStep, type RunPendingStepsResult } from './MigratorStepEng
|
|
|
27
27
|
* Registry'. Spec: docs/specs/playwright-profile-registry.md.
|
|
28
28
|
*/
|
|
29
29
|
export declare function MACHINE_LOAD_ASSESSMENT_CLAUDEMD_SECTION(): string;
|
|
30
|
+
export declare function DYNAMIC_MCP_CLAUDEMD_SECTION(port: number): string;
|
|
30
31
|
export declare function PLAYWRIGHT_PROFILE_REGISTRY_CLAUDEMD_SECTION(port: number): string;
|
|
31
32
|
export interface MigrationResult {
|
|
32
33
|
/** What was upgraded */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PostUpdateMigrator.d.ts","sourceRoot":"","sources":["../../src/core/PostUpdateMigrator.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"PostUpdateMigrator.d.ts","sourceRoot":"","sources":["../../src/core/PostUpdateMigrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -67,6 +67,15 @@ Before deferring work because the machine "looks loaded," RUN \`.instar/scripts/
|
|
|
67
67
|
- **NEVER** judge load from \`uptime\` 1-min load average alone — quote the script's verdict + real idle%, never the load average. (This rule exists because that exact misread caused a false "heavy load" deferral on 2026-06-19.)
|
|
68
68
|
- **When to use** (PROACTIVE — this is the trigger): the moment you catch yourself about to hold off on work, fan out parallel sub-agents, or report "the machine is loaded" → run \`load-assess.sh\` and act on its verdict, not on a load-average glance.\n`;
|
|
69
69
|
}
|
|
70
|
+
export function DYNAMIC_MCP_CLAUDEMD_SECTION(port) {
|
|
71
|
+
return `\n### Dynamic MCP Lifecycle (⚗️ experimental, ships DARK) — load heavy MCP servers on demand
|
|
72
|
+
|
|
73
|
+
Heavy MCP servers (Playwright's Chromium; Electron bridges) are mostly idle and were a dominant share of the process footprint behind the 2026-06-26 resource panic. This lets a claude-code session launch with a LEAN MCP set and load a heavy server only when needed (restart \`--resume\` preserves the conversation), then offload it when idle. **Ships dark + opt-in** (\`sessions.dynamicMcp.enabled\`); the routes 503 when off. The idle-offload sweep + the non-autonomous operator-approval route are tracked follow-ups.
|
|
74
|
+
- What is a topic's session running with? (Registry First — read it, never guess): \`curl -H "Authorization: Bearer $AUTH" http://localhost:${port}/mcp/session/TOPIC_ID\` → \`{ servers, preapproved, source }\`.
|
|
75
|
+
- Request a load / offload: \`curl -X POST -H "Authorization: Bearer $AUTH" http://localhost:${port}/mcp/load -H 'Content-Type: application/json' -d '{"topicId":N,"server":"playwright"}'\` (\`/mcp/offload\` to drop).
|
|
76
|
+
- **Authorization (Know Your Principal):** a change completes ONLY when the topic has a LIVE autonomous run (preapproved) OR an operator-authenticated approval. An \`agent\`-initiated change on a non-preapproved topic returns \`needs-approval\` and performs NO restart — I surface it and wait. I can NEVER self-approve by replaying the nonce over my own Bearer token.
|
|
77
|
+
- **When to use** (PROACTIVE): in an autonomous run, when I need a heavy tool I don't have, I request the load (I'm preapproved → it loads + restarts + continues). When the user asks "free up resources from idle MCP servers" / "why did my session restart to add a tool?" → this feature. Single-server / no-\`.mcp.json\` agents are a no-op.\n`;
|
|
78
|
+
}
|
|
70
79
|
export function PLAYWRIGHT_PROFILE_REGISTRY_CLAUDEMD_SECTION(port) {
|
|
71
80
|
return `\n### Playwright Profile Registry (which browser profile holds which account)
|
|
72
81
|
|
|
@@ -3989,6 +3998,16 @@ setTimeout(() => process.exit(0), 2000);
|
|
|
3989
3998
|
patched = true;
|
|
3990
3999
|
result.upgraded.push('CLAUDE.md: added Playwright Profile Registry section');
|
|
3991
4000
|
}
|
|
4001
|
+
// Dynamic MCP Lifecycle (DYNAMIC-MCP-LIFECYCLE-SPEC) — Agent Awareness +
|
|
4002
|
+
// Migration Parity: existing agents learn the dark/opt-in load-on-demand
|
|
4003
|
+
// capability, the /mcp/* surface, the Know-Your-Principal authorization rule,
|
|
4004
|
+
// and the proactive triggers. Honestly tagged experimental/dark (Maturity
|
|
4005
|
+
// Honesty). Content-sniff on the heading keeps it idempotent.
|
|
4006
|
+
if (!content.includes('Dynamic MCP Lifecycle')) {
|
|
4007
|
+
content += DYNAMIC_MCP_CLAUDEMD_SECTION(port);
|
|
4008
|
+
patched = true;
|
|
4009
|
+
result.upgraded.push('CLAUDE.md: added Dynamic MCP Lifecycle section');
|
|
4010
|
+
}
|
|
3992
4011
|
// Machine Load Assessment (CMT-1703, spec robust-load-assessment-fleet) — Agent
|
|
3993
4012
|
// Awareness Standard + Migration Parity: existing agents learn the load-assess.sh
|
|
3994
4013
|
// go-to method + the "never trust uptime load average" rule via this appended
|