blun-king-cli 9.1.67 → 9.1.69
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/LIESMICH.txt +37 -1
- package/README.md +37 -1
- package/bin/standard-tools-bootstrap.js +15 -4
- package/blun.mjs +4 -11
- package/package.json +1 -1
- package/release-planned-removals.json +1 -1
- package/standard-skills/venture-flywheel/SKILL.md +4 -0
- package/standard-skills/venture-flywheel/references/BEISPIELE-phase0.md +146 -0
- package/standard-tools/manifest.json +13 -0
package/LIESMICH.txt
CHANGED
|
@@ -9,7 +9,7 @@ Installation
|
|
|
9
9
|
------------
|
|
10
10
|
Die geprüfte Version exakt global installieren:
|
|
11
11
|
|
|
12
|
-
npm install -g blun-king-cli@9.1.
|
|
12
|
+
npm install -g blun-king-cli@9.1.69
|
|
13
13
|
|
|
14
14
|
Start
|
|
15
15
|
-----
|
|
@@ -20,6 +20,26 @@ Start
|
|
|
20
20
|
Beide Startbefehle verwenden dieselbe Version, dasselbe Konto, dasselbe Modell
|
|
21
21
|
und dieselben Befehle.
|
|
22
22
|
|
|
23
|
+
Standard-MCPs und Eingabesteuerung in 9.1.69
|
|
24
|
+
--------------------------------------------
|
|
25
|
+
Beim Start richtet BLUN King agent-browser, blun-language-guard, context7 und
|
|
26
|
+
unter Windows windows-mcp automatisch ein. Erkannte Standardkonfigurationen
|
|
27
|
+
werden aktiviert; eigene, abweichende MCP-Befehle bleiben unverändert.
|
|
28
|
+
|
|
29
|
+
/mcp
|
|
30
|
+
blun tools list
|
|
31
|
+
blun tools enable context7
|
|
32
|
+
|
|
33
|
+
/mcp zeigt den Betriebszustand ohne internen Konfigurationspfad. In der
|
|
34
|
+
Detailansicht bleibt der Pfad für die Fehlersuche verfügbar.
|
|
35
|
+
|
|
36
|
+
Telegram-Nachrichten werden in Eingangsreihenfolge verarbeitet. Im Leerlauf
|
|
37
|
+
startet die Warteschlange selbstständig; während eines Werkzeuglaufs erfolgt
|
|
38
|
+
die Zustellung am nächsten geschützten Übergabepunkt. Strg+C und Esc brechen
|
|
39
|
+
einen aktiven Zug ab, ohne den geschriebenen Entwurf zu löschen. Das gilt auch
|
|
40
|
+
bei Autovervollständigung, Geistervorschlägen, Bash-Eingabe und einer offenen
|
|
41
|
+
Mehrzeileneingabe.
|
|
42
|
+
|
|
23
43
|
Zuverlässiger King-Start
|
|
24
44
|
-----------------------
|
|
25
45
|
Der Windows-Hilfsprozess für private Pfade übernimmt TEMP und TMP aus der
|
|
@@ -98,6 +118,22 @@ Chancen mit Gegenbeleg, Abbruchkriterium und einem direkt nutzbaren
|
|
|
98
118
|
/idea-Auftrag. Ohne Nische fragt er zuerst genau einmal nach. Schwache Belege
|
|
99
119
|
ergeben weniger Treffer oder no_action, niemals aufgefüllte Vorschläge.
|
|
100
120
|
|
|
121
|
+
Venture Flywheel: geprüfte Phase-0-Verträge
|
|
122
|
+
--------------------------------------------
|
|
123
|
+
Der Standardskill venture-flywheel enthält reine Verträge für
|
|
124
|
+
Projektidentität, Repository-Trust, Capability-Entscheidungen, versionierte
|
|
125
|
+
Laufzustände und hash-verkettete Prüfereignisse. Phase 0 führt selbst keine
|
|
126
|
+
Befehle, Netzwerkzugriffe oder Deployments aus.
|
|
127
|
+
|
|
128
|
+
Ein vollständiges CommonJS-Beispiel für alle sieben öffentlichen Funktionen
|
|
129
|
+
liegt hier:
|
|
130
|
+
|
|
131
|
+
standard-skills/venture-flywheel/references/BEISPIELE-phase0.md
|
|
132
|
+
|
|
133
|
+
Es zeigt unter anderem, warum sandbox.execute im Repository abgewiesen, in
|
|
134
|
+
einem isolierten Worktree aber erlaubt wird und wie eine Ereigniskette geprüft
|
|
135
|
+
wird.
|
|
136
|
+
|
|
101
137
|
Im automatisch angebundenen Telegram-Kanal werden ausschließlich /loop, /goal,
|
|
102
138
|
/idea, /chancenradar, /curiosity, /scout und /befehle als Befehle ausgeführt. Ist der Agent beschäftigt, bleiben
|
|
103
139
|
sie in der Warteschlange. Andere Slash-Eingaben werden aus Sicherheitsgründen
|
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@ Voraussetzung ist Node.js 24.15 oder neuer. Die geprüfte Version wird exakt
|
|
|
9
9
|
installiert:
|
|
10
10
|
|
|
11
11
|
```powershell
|
|
12
|
-
npm install -g blun-king-cli@9.1.
|
|
12
|
+
npm install -g blun-king-cli@9.1.69
|
|
13
13
|
```
|
|
14
14
|
|
|
15
15
|
## Reproduzierbares Staging und Packen
|
|
@@ -40,6 +40,29 @@ erzeugt `/telegram:access connect` einen einmaligen Code. `/connect CODE` im
|
|
|
40
40
|
gewünschten privaten Chat oder in einer Gruppe speichert Chat und Absender
|
|
41
41
|
intern; der Code verfällt nach zehn Minuten und ist nur einmal verwendbar.
|
|
42
42
|
|
|
43
|
+
## Standard-MCPs und Eingabesteuerung in 9.1.69
|
|
44
|
+
|
|
45
|
+
Beim Start richtet BLUN King `agent-browser`, `blun-language-guard`, `context7`
|
|
46
|
+
und unter Windows `windows-mcp` automatisch ein und aktiviert erkannte
|
|
47
|
+
Standardkonfigurationen wieder. Eigene, abweichende MCP-Befehle bleiben
|
|
48
|
+
unverändert. `/mcp` zeigt den Betriebszustand ohne internen Konfigurationspfad;
|
|
49
|
+
in der Detailansicht bleibt der Pfad für die Fehlersuche verfügbar.
|
|
50
|
+
|
|
51
|
+
Beispiele:
|
|
52
|
+
|
|
53
|
+
```text
|
|
54
|
+
/mcp
|
|
55
|
+
blun tools list
|
|
56
|
+
blun tools enable context7
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Telegram-Nachrichten werden in Eingangsreihenfolge verarbeitet. Trifft eine
|
|
60
|
+
Nachricht im Leerlauf ein, startet die Warteschlange selbstständig; während
|
|
61
|
+
eines Werkzeuglaufs wird sie am nächsten geschützten Übergabepunkt eingefügt.
|
|
62
|
+
`Strg+C` und `Esc` brechen einen aktiven Zug zuverlässig ab, ohne den bereits
|
|
63
|
+
geschriebenen Entwurf zu löschen. Das gilt auch bei Autovervollständigung,
|
|
64
|
+
Geistervorschlägen, Bash-Eingabe und einer noch offenen Mehrzeileneingabe.
|
|
65
|
+
|
|
43
66
|
## Zuverlässiger King-Start
|
|
44
67
|
|
|
45
68
|
Der Windows-Hilfsprozess für private Pfade übernimmt `TEMP` und `TMP` aus der
|
|
@@ -122,6 +145,19 @@ Der sichtbare Verlauf behält standardmäßig die vollständige laufende und
|
|
|
122
145
|
wiederhergestellte Sitzung. Das Mausrad kann den Verlauf direkt beim ersten Zug
|
|
123
146
|
öffnen; Editor und Fußzeile bleiben dabei fest sichtbar.
|
|
124
147
|
|
|
148
|
+
## Venture Flywheel: geprüfte Phase-0-Verträge
|
|
149
|
+
|
|
150
|
+
Der mitgelieferte Standardskill `venture-flywheel` stellt reine, deterministische
|
|
151
|
+
Verträge für Projektidentität, Repository-Trust, Capability-Entscheidungen,
|
|
152
|
+
versionierte Laufzustände und hash-verkettete Prüfereignisse bereit. Phase 0
|
|
153
|
+
führt selbst keine Befehle, Netzwerkzugriffe oder Deployments aus.
|
|
154
|
+
|
|
155
|
+
Ein vollständiges CommonJS-Beispiel für alle sieben öffentlichen Funktionen
|
|
156
|
+
liegt unter
|
|
157
|
+
`standard-skills/venture-flywheel/references/BEISPIELE-phase0.md`. Es zeigt
|
|
158
|
+
unter anderem, warum `sandbox.execute` im Repository abgewiesen, in einem
|
|
159
|
+
isolierten Worktree aber erlaubt wird und wie eine Ereigniskette geprüft wird.
|
|
160
|
+
|
|
125
161
|
Im automatisch angebundenen Telegram-Kanal werden ausschließlich `/loop`,
|
|
126
162
|
`/goal`, `/idea`, `/chancenradar`, `/curiosity`, `/scout` und `/befehle` als Befehle ausgeführt. Ist der Agent
|
|
127
163
|
beschäftigt, bleiben sie in der Warteschlange. Andere Slash-Eingaben werden aus
|
|
@@ -81,16 +81,27 @@ function sameStringArray(left, right) {
|
|
|
81
81
|
&& left.every((value, index) => value === right[index]);
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
-
function recognizedBundledServer(current, expected) {
|
|
85
|
-
|
|
86
|
-
|
|
84
|
+
function recognizedBundledServer(name, current, expected) {
|
|
85
|
+
if (!isObject(current)) return false;
|
|
86
|
+
const exact = current.transport === expected.transport
|
|
87
87
|
&& current.command === expected.command
|
|
88
88
|
&& sameStringArray(current.args, expected.args);
|
|
89
|
+
if (exact) return true;
|
|
90
|
+
return name === 'context7'
|
|
91
|
+
&& current.transport === 'stdio'
|
|
92
|
+
&& current.command === 'npx'
|
|
93
|
+
&& Array.isArray(current.args)
|
|
94
|
+
&& current.args[0] === '-y'
|
|
95
|
+
&& /^@upstash\/context7-mcp(?:@[^\s]+)?$/u.test(current.args[1] ?? '');
|
|
89
96
|
}
|
|
90
97
|
|
|
91
98
|
function migrateBundledTimeouts(name, current, expected) {
|
|
92
|
-
if (!recognizedBundledServer(current, expected)) return false;
|
|
99
|
+
if (!recognizedBundledServer(name, current, expected)) return false;
|
|
93
100
|
let changed = false;
|
|
101
|
+
if (current.enabled === false) {
|
|
102
|
+
current.enabled = true;
|
|
103
|
+
changed = true;
|
|
104
|
+
}
|
|
94
105
|
if (name === 'agent-browser') {
|
|
95
106
|
if (current.startupTimeoutMs === 30_000) {
|
|
96
107
|
current.startupTimeoutMs = expected.startupTimeoutMs;
|
package/blun.mjs
CHANGED
|
@@ -417230,7 +417230,6 @@ var TelegramChannelController = class {
|
|
|
417230
417230
|
stopped = false;
|
|
417231
417231
|
activeOwner = false;
|
|
417232
417232
|
ownershipLost = false;
|
|
417233
|
-
handoffWarningShown = false;
|
|
417234
417233
|
ownershipClaimedAt = 0;
|
|
417235
417234
|
ownedBridge;
|
|
417236
417235
|
stopPromise;
|
|
@@ -417367,9 +417366,9 @@ var TelegramChannelController = class {
|
|
|
417367
417366
|
this.activateOwnedChannel();
|
|
417368
417367
|
return;
|
|
417369
417368
|
}
|
|
417370
|
-
if (
|
|
417371
|
-
this.
|
|
417372
|
-
|
|
417369
|
+
if (Date.now() - this.ownershipClaimedAt >= this.ownershipHandoffWarningMs) {
|
|
417370
|
+
this.activateOwnedChannel();
|
|
417371
|
+
return;
|
|
417373
417372
|
}
|
|
417374
417373
|
this.handoffTimer = setTimeout(() => this.tryActivateOwnership(), this.ownershipPollMs);
|
|
417375
417374
|
this.handoffTimer.unref();
|
|
@@ -421938,8 +421937,6 @@ var McpManagerComponent = class extends Container {
|
|
|
421938
421937
|
const name = selected ? currentTheme.boldFg("primary", server.name) : currentTheme.fg("text", server.name);
|
|
421939
421938
|
const status = currentTheme.fg(statusTone(server.status), statusLabel$2(server.status));
|
|
421940
421939
|
lines.push(` ${pointer} ${name} ${status} ${currentTheme.fg("textMuted", toolCount(server))}`);
|
|
421941
|
-
const origin = originDescription(server);
|
|
421942
|
-
if (origin !== void 0) lines.push(currentTheme.fg("textMuted", ` ${origin}`));
|
|
421943
421940
|
}
|
|
421944
421941
|
if (view.items.length === 0) lines.push(currentTheme.fg("textMuted", ` ${uiText("common.noMatches")}`));
|
|
421945
421942
|
lines.push("");
|
|
@@ -422056,10 +422053,6 @@ function groupLabel(group) {
|
|
|
422056
422053
|
function sourceLabel(group) {
|
|
422057
422054
|
return uiText(`mcp.source.${group}`);
|
|
422058
422055
|
}
|
|
422059
|
-
function originDescription(server) {
|
|
422060
|
-
if (server.source === "plugin") return uiText("mcp.origin.plugin", { id: server.pluginId ?? uiText("mcp.unknown") });
|
|
422061
|
-
return server.configPath === void 0 ? void 0 : sanitizeMcpDisplayText(server.configPath);
|
|
422062
|
-
}
|
|
422063
422056
|
function detailRows(server) {
|
|
422064
422057
|
const rows = [
|
|
422065
422058
|
[uiText("mcp.detail.status"), statusLabel$2(server.status)],
|
|
@@ -514663,7 +514656,7 @@ var BlunTUI = class {
|
|
|
514663
514656
|
...envelope.meta["image_path"] !== void 0 ? { channelImagePath: envelope.meta["image_path"] } : {}
|
|
514664
514657
|
});
|
|
514665
514658
|
this.syncChannelQueueDeadline();
|
|
514666
|
-
this.
|
|
514659
|
+
this.scheduleQueueDrain();
|
|
514667
514660
|
this.track("input_queue");
|
|
514668
514661
|
this.updateQueueDisplay();
|
|
514669
514662
|
this.state.ui.requestRender();
|
package/package.json
CHANGED
|
@@ -26,3 +26,7 @@ Read [references/CAPABILITY-MAP.md](references/CAPABILITY-MAP.md) for the build
|
|
|
26
26
|
order and [references/SPEC-phase0-state-events.md](references/SPEC-phase0-state-events.md)
|
|
27
27
|
plus [references/SPEC-phase0-identity-trust.md](references/SPEC-phase0-identity-trust.md)
|
|
28
28
|
for the currently implemented contracts.
|
|
29
|
+
|
|
30
|
+
The German usage guide in
|
|
31
|
+
[references/BEISPIELE-phase0.md](references/BEISPIELE-phase0.md) contains one
|
|
32
|
+
complete example covering every public Phase 0 function.
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# Venture Flywheel: Beispiele für Phase 0
|
|
2
|
+
|
|
3
|
+
Phase 0 stellt ausschließlich reine Verträge bereit. Sie führt keine
|
|
4
|
+
Repository-Befehle aus, verwendet kein Netzwerk und führt weder Deployments
|
|
5
|
+
noch Veröffentlichungen, Käufe oder ausgehende Nachrichten durch.
|
|
6
|
+
|
|
7
|
+
## Öffentliche Funktionen
|
|
8
|
+
|
|
9
|
+
- `deriveProjectIdentity` leitet aus Repository-Fakten und einem
|
|
10
|
+
authentifizierten Konto eine deterministische Projektidentität ab.
|
|
11
|
+
- `createRepositoryTrust` erzeugt den anfänglichen Datensatz mit `UNTRUSTED`.
|
|
12
|
+
- `transitionRepositoryTrust` wendet einen ausdrücklichen, versionierten
|
|
13
|
+
Trust-Wechsel an.
|
|
14
|
+
- `evaluateCapability` liefert `allow`, `deny` oder `approval_required` und
|
|
15
|
+
entscheidet bei Unklarheit ablehnend.
|
|
16
|
+
- `transitionRun` führt genau einen zulässigen, optimistisch versionierten
|
|
17
|
+
Zustandswechsel aus.
|
|
18
|
+
- `createExecutionEvent` erzeugt ein deterministisches, hash-verkettetes
|
|
19
|
+
Prüfereignis und weist geheimnisverdächtige Felder in Nutzdaten ab.
|
|
20
|
+
- `verifyEventChain` prüft Reihenfolge, Verknüpfungen und Hashes einer
|
|
21
|
+
vollständigen Ereigniskette.
|
|
22
|
+
|
|
23
|
+
## Vollständiges Beispiel
|
|
24
|
+
|
|
25
|
+
Das folgende CommonJS-Beispiel leitet eine Projektidentität ab, erzeugt lokalen
|
|
26
|
+
Trust, vergleicht die Ausführung im Repository mit der Ausführung in einem
|
|
27
|
+
isolierten Worktree, setzt einen Lauf fort, erzeugt zwei verkettete Ereignisse
|
|
28
|
+
und prüft anschließend die Kette.
|
|
29
|
+
|
|
30
|
+
```js
|
|
31
|
+
const { deriveProjectIdentity } = require('./identity/project-identity.cjs');
|
|
32
|
+
const {
|
|
33
|
+
CAPABILITIES,
|
|
34
|
+
createRepositoryTrust,
|
|
35
|
+
transitionRepositoryTrust,
|
|
36
|
+
} = require('./policy/repository-trust.cjs');
|
|
37
|
+
const { evaluateCapability } = require('./policy/capability-engine.cjs');
|
|
38
|
+
const { transitionRun } = require('./state/task-state-machine.cjs');
|
|
39
|
+
const {
|
|
40
|
+
createExecutionEvent,
|
|
41
|
+
verifyEventChain,
|
|
42
|
+
} = require('./state/execution-event.cjs');
|
|
43
|
+
|
|
44
|
+
const identity = deriveProjectIdentity({
|
|
45
|
+
repository_host: 'github.com',
|
|
46
|
+
repository_owner: 'example',
|
|
47
|
+
repository_name: 'venture',
|
|
48
|
+
canonical_remote_url: 'git@github.com:example/venture.git',
|
|
49
|
+
local_repository_root: 'C:/Work/venture',
|
|
50
|
+
initial_repository_fingerprint: `sha256:${'a'.repeat(64)}`,
|
|
51
|
+
}, { account_id: 'account-123' });
|
|
52
|
+
|
|
53
|
+
const initialTrust = createRepositoryTrust(identity);
|
|
54
|
+
const localCapabilities = [
|
|
55
|
+
'network.none',
|
|
56
|
+
'repo.metadata.read',
|
|
57
|
+
'repo.read',
|
|
58
|
+
'sandbox.execute',
|
|
59
|
+
'workspace.write',
|
|
60
|
+
'worktree.create',
|
|
61
|
+
];
|
|
62
|
+
const granted = new Set(localCapabilities);
|
|
63
|
+
const localTrust = transitionRepositoryTrust(initialTrust, {
|
|
64
|
+
event_id: 'evt-trust-local',
|
|
65
|
+
expected_version: initialTrust.version,
|
|
66
|
+
from_trust_level: initialTrust.trust_level,
|
|
67
|
+
to_trust_level: 'TRUSTED_LOCAL',
|
|
68
|
+
granted_capabilities: [...granted].sort(),
|
|
69
|
+
denied_capabilities: CAPABILITIES.filter(
|
|
70
|
+
(capability) => !granted.has(capability),
|
|
71
|
+
),
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
const deniedInRepository = evaluateCapability({
|
|
75
|
+
project_identity: identity,
|
|
76
|
+
repository_trust: localTrust,
|
|
77
|
+
capability: 'sandbox.execute',
|
|
78
|
+
execution_scope: 'repository',
|
|
79
|
+
});
|
|
80
|
+
const allowedInWorktree = evaluateCapability({
|
|
81
|
+
project_identity: identity,
|
|
82
|
+
repository_trust: localTrust,
|
|
83
|
+
capability: 'sandbox.execute',
|
|
84
|
+
execution_scope: 'isolated_worktree',
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
let run = { run_id: 'run-001', state: 'discovered', version: 0 };
|
|
88
|
+
run = transitionRun(run, {
|
|
89
|
+
event_id: 'evt-profiled',
|
|
90
|
+
expected_version: 0,
|
|
91
|
+
from_state: 'discovered',
|
|
92
|
+
to_state: 'profiled',
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
const firstEvent = createExecutionEvent({
|
|
96
|
+
event_id: 'evt-profiled',
|
|
97
|
+
run_id: run.run_id,
|
|
98
|
+
project_id: identity.project_id,
|
|
99
|
+
actor: { type: 'agent', id: 'agent-1', session_id: 'session-1' },
|
|
100
|
+
event_type: 'run.profiled',
|
|
101
|
+
occurred_at: '2026-08-24T10:00:00.000Z',
|
|
102
|
+
payload: {
|
|
103
|
+
from_state: 'discovered',
|
|
104
|
+
to_state: 'profiled',
|
|
105
|
+
version: run.version,
|
|
106
|
+
},
|
|
107
|
+
});
|
|
108
|
+
const secondEvent = createExecutionEvent({
|
|
109
|
+
event_id: 'evt-policy',
|
|
110
|
+
run_id: run.run_id,
|
|
111
|
+
project_id: identity.project_id,
|
|
112
|
+
actor: { type: 'agent', id: 'agent-1', session_id: 'session-1' },
|
|
113
|
+
event_type: 'policy.checked',
|
|
114
|
+
occurred_at: '2026-08-24T10:01:00.000Z',
|
|
115
|
+
payload: { decision: allowedInWorktree.decision },
|
|
116
|
+
previous_event_hash: firstEvent.event_hash,
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
console.log(deniedInRepository);
|
|
120
|
+
console.log(allowedInWorktree);
|
|
121
|
+
console.log(verifyEventChain([firstEvent, secondEvent]));
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Erwartete Entscheidungen: Die Ausführung im Repository wird mit
|
|
125
|
+
`isolated_worktree_required` abgewiesen, die Ausführung im isolierten Worktree
|
|
126
|
+
wird erlaubt und die Kettenprüfung liefert `{ ok: true }`.
|
|
127
|
+
|
|
128
|
+
## Wichtige Schutzregeln
|
|
129
|
+
|
|
130
|
+
- Ein Repository beginnt mit `UNTRUSTED`; Trust-Hochstufungen müssen
|
|
131
|
+
nacheinander erfolgen.
|
|
132
|
+
- Jeder Trust- und Laufwechsel muss die aktuelle `expected_version` verwenden.
|
|
133
|
+
- `workspace.write` und `sandbox.execute` erfordern
|
|
134
|
+
`execution_scope: 'isolated_worktree'`.
|
|
135
|
+
- Externe oder irreversible Fähigkeiten liefern niemals `allow`, sondern
|
|
136
|
+
höchstens `approval_required`.
|
|
137
|
+
- `completed` erfordert `final_evidence_id`, `rolled_back` erfordert
|
|
138
|
+
`rollback_evidence_id` innerhalb von `evidence`.
|
|
139
|
+
- Ereignisnutzdaten mit Feldern wie `token`, `password`, `secret`, `api_key`
|
|
140
|
+
oder `access_token` werden vor dem Hashen abgewiesen.
|
|
141
|
+
- `no_action` ist ein gültiges Endergebnis.
|
|
142
|
+
|
|
143
|
+
## Prüfung
|
|
144
|
+
|
|
145
|
+
Führe `node --test test/venture-flywheel-state.test.js`,
|
|
146
|
+
`node --test test/venture-flywheel-trust.test.js` und `npm test` aus.
|
|
@@ -31,6 +31,19 @@
|
|
|
31
31
|
"toolTimeoutMs": 120000
|
|
32
32
|
}
|
|
33
33
|
},
|
|
34
|
+
"context7": {
|
|
35
|
+
"owner": "user-mcp",
|
|
36
|
+
"version": "latest",
|
|
37
|
+
"detectTokens": ["context7", "@upstash/context7-mcp"],
|
|
38
|
+
"config": {
|
|
39
|
+
"transport": "stdio",
|
|
40
|
+
"command": "npx",
|
|
41
|
+
"args": ["-y", "@upstash/context7-mcp@latest"],
|
|
42
|
+
"enabled": false,
|
|
43
|
+
"startupTimeoutMs": 40000,
|
|
44
|
+
"toolTimeoutMs": 120000
|
|
45
|
+
}
|
|
46
|
+
},
|
|
34
47
|
"telegram": {
|
|
35
48
|
"owner": "managed-plugin",
|
|
36
49
|
"version": "bundled",
|