blun-king-cli 9.1.67 → 9.1.68

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 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.61
12
+ npm install -g blun-king-cli@9.1.68
13
13
 
14
14
  Start
15
15
  -----
@@ -98,6 +98,22 @@ Chancen mit Gegenbeleg, Abbruchkriterium und einem direkt nutzbaren
98
98
  /idea-Auftrag. Ohne Nische fragt er zuerst genau einmal nach. Schwache Belege
99
99
  ergeben weniger Treffer oder no_action, niemals aufgefüllte Vorschläge.
100
100
 
101
+ Venture Flywheel: geprüfte Phase-0-Verträge
102
+ --------------------------------------------
103
+ Der Standardskill venture-flywheel enthält reine Verträge für
104
+ Projektidentität, Repository-Trust, Capability-Entscheidungen, versionierte
105
+ Laufzustände und hash-verkettete Prüfereignisse. Phase 0 führt selbst keine
106
+ Befehle, Netzwerkzugriffe oder Deployments aus.
107
+
108
+ Ein vollständiges CommonJS-Beispiel für alle sieben öffentlichen Funktionen
109
+ liegt hier:
110
+
111
+ standard-skills/venture-flywheel/references/BEISPIELE-phase0.md
112
+
113
+ Es zeigt unter anderem, warum sandbox.execute im Repository abgewiesen, in
114
+ einem isolierten Worktree aber erlaubt wird und wie eine Ereigniskette geprüft
115
+ wird.
116
+
101
117
  Im automatisch angebundenen Telegram-Kanal werden ausschließlich /loop, /goal,
102
118
  /idea, /chancenradar, /curiosity, /scout und /befehle als Befehle ausgeführt. Ist der Agent beschäftigt, bleiben
103
119
  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.61
12
+ npm install -g blun-king-cli@9.1.68
13
13
  ```
14
14
 
15
15
  ## Reproduzierbares Staging und Packen
@@ -122,6 +122,19 @@ Der sichtbare Verlauf behält standardmäßig die vollständige laufende und
122
122
  wiederhergestellte Sitzung. Das Mausrad kann den Verlauf direkt beim ersten Zug
123
123
  öffnen; Editor und Fußzeile bleiben dabei fest sichtbar.
124
124
 
125
+ ## Venture Flywheel: geprüfte Phase-0-Verträge
126
+
127
+ Der mitgelieferte Standardskill `venture-flywheel` stellt reine, deterministische
128
+ Verträge für Projektidentität, Repository-Trust, Capability-Entscheidungen,
129
+ versionierte Laufzustände und hash-verkettete Prüfereignisse bereit. Phase 0
130
+ führt selbst keine Befehle, Netzwerkzugriffe oder Deployments aus.
131
+
132
+ Ein vollständiges CommonJS-Beispiel für alle sieben öffentlichen Funktionen
133
+ liegt unter
134
+ `standard-skills/venture-flywheel/references/BEISPIELE-phase0.md`. Es zeigt
135
+ unter anderem, warum `sandbox.execute` im Repository abgewiesen, in einem
136
+ isolierten Worktree aber erlaubt wird und wie eine Ereigniskette geprüft wird.
137
+
125
138
  Im automatisch angebundenen Telegram-Kanal werden ausschließlich `/loop`,
126
139
  `/goal`, `/idea`, `/chancenradar`, `/curiosity`, `/scout` und `/befehle` als Befehle ausgeführt. Ist der Agent
127
140
  beschäftigt, bleiben sie in der Warteschlange. Andere Slash-Eingaben werden aus
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 (!this.handoffWarningShown && Date.now() - this.ownershipClaimedAt >= this.ownershipHandoffWarningMs) {
417371
- this.handoffWarningShown = true;
417372
- this.host.warn(uiText("telegramChannel.bridgeStartFailed", { error: "telegram ownership handoff is still pending" }));
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();
@@ -514664,6 +514663,7 @@ var BlunTUI = class {
514664
514663
  });
514665
514664
  this.syncChannelQueueDeadline();
514666
514665
  this.channelQueueDeadline.requestDeliveryNow();
514666
+ this.scheduleQueueDrain();
514667
514667
  this.track("input_queue");
514668
514668
  this.updateQueueDisplay();
514669
514669
  this.state.ui.requestRender();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "blun-king-cli",
3
- "version": "9.1.67",
3
+ "version": "9.1.68",
4
4
  "description": "BLUN CLI - your own AI agent with a Telegram channel. Get it done. With BLUN.",
5
5
  "license": "MIT",
6
6
  "bin": {
@@ -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.