blun-king-cli 9.1.624 → 9.1.626
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/CHANGELOG.md +62 -213
- package/LIESMICH.txt +57 -74
- package/README.md +76 -119
- package/agent-spine-plugin/scripts/check-install.js +4 -4
- package/agent-spine-plugin/src/hook.js +0 -4
- package/agent-spine-plugin/src/lib/documents.js +1 -1
- package/agent-spine-plugin/src/lib/hook-context.js +0 -1
- package/agent-spine-plugin/src/lib/host-instruction-budget.js +2 -1
- package/agent-spine-plugin/src/lib/preflight.js +9 -38
- package/agent-spine-plugin/src/lib/source-roots.js +1 -1
- package/bin/agentspine-king-goal-inbox.mjs +127 -127
- package/bin/agentspine-king-goal-intake.mjs +106 -106
- package/bin/agentspine-king-host-runner.mjs +109 -109
- package/bin/agentspine-king-snapshot-policy.cjs +80 -80
- package/bin/agentspine-king-status-policy.mjs +226 -226
- package/bin/agentspine-king-worker-host.mjs +160 -160
- package/bin/core-bootstrap.js +83 -97
- package/bin/launcher-mode.js +93 -93
- package/bin/launcher-restart-policy.cjs +131 -131
- package/bin/launcher-runtime.js +91 -254
- package/bin/managed-node.js +186 -186
- package/bin/managed-plugin-selection.cjs +109 -116
- package/bin/native-module-repair.js +201 -201
- package/bin/node-runtime.js +34 -34
- package/bin/node-version.js +49 -49
- package/bin/plugin-bootstrap.js +149 -172
- package/bin/private-paths.js +1578 -1624
- package/bin/runtime-exit-ledger.cjs +144 -144
- package/bin/runtime-exit-ledger.d.cts +23 -23
- package/bin/standard-tools-bootstrap.js +277 -272
- package/bin/turn-thinking-policy.cjs +82 -82
- package/bin/update-copy.js +200 -200
- package/bin/update-lease.js +597 -599
- package/bin/update-notice.js +1568 -1568
- package/bin/verify-agent-behavior.cjs +122 -122
- package/bin/verify-agent-components.cjs +104 -104
- package/bin/verify-bundled-agent-sources.cjs +91 -96
- package/bin/windows-node-crash-dump.cjs +289 -289
- package/blun.mjs +187640 -180475
- package/bundled-agent-sources.json +26 -30
- package/codebase-index/codebase_index.py +462 -470
- package/dist-web/assets/{CodeBlockNode-TKKkJX8L.js → CodeBlockNode-BMbuG85x.js} +1 -1
- package/dist-web/assets/{CodeBlockShell.vue_vue_type_style_index_0_lang-CUj2Ds5x.js → CodeBlockShell.vue_vue_type_style_index_0_lang-C1fv7l_Z.js} +1 -1
- package/dist-web/assets/DesignSystemView-6HgAUEmC.css +1 -0
- package/dist-web/assets/DesignSystemView-CEEBqXSX.js +12 -0
- package/dist-web/assets/{Tooltip-CTWv7WCU.js → Tooltip--YoauJ24.js} +1 -1
- package/dist-web/assets/{abnfDiagram-N423BO3Z-DA8V8Zjh.js → abnfDiagram-N423BO3Z-DZvBWkRg.js} +1 -1
- package/dist-web/assets/{arc-YtddKbdY.js → arc-B04JATeX.js} +1 -1
- package/dist-web/assets/{architectureDiagram-T3A2C74G-CGEiObmo.js → architectureDiagram-T3A2C74G-DmYnMep2.js} +1 -1
- package/dist-web/assets/{blockDiagram-VBNYF7ZC-Bd5Vt50e.js → blockDiagram-VBNYF7ZC-DJ1gPS1C.js} +1 -1
- package/dist-web/assets/{c4Diagram-5PPSVZJV-D2ApPM54.js → c4Diagram-5PPSVZJV-DmjxvUbd.js} +1 -1
- package/dist-web/assets/channel-472fcEvw.js +1 -0
- package/dist-web/assets/{chunk-2GRJ4B5K-BDcIEZSl.js → chunk-2GRJ4B5K-AB0raj3I.js} +1 -1
- package/dist-web/assets/{chunk-2Q5K7J3B-6aSabCX7.js → chunk-2Q5K7J3B-Drf039vM.js} +1 -1
- package/dist-web/assets/{chunk-5RXB4S5H-BFRQvIJS.js → chunk-5RXB4S5H-D5ILttmz.js} +1 -1
- package/dist-web/assets/{chunk-5VM5RSS4-ChAa-DNY.js → chunk-5VM5RSS4-DrLSdi8y.js} +1 -1
- package/dist-web/assets/{chunk-6Q2QTUOP-BIfrb2Jc.js → chunk-6Q2QTUOP-LiaqdEOQ.js} +1 -1
- package/dist-web/assets/{chunk-GF5L2VYU-BR0gvtWI.js → chunk-GF5L2VYU-AIYkb--o.js} +1 -1
- package/dist-web/assets/{chunk-JWPE2WC7-BgXKsx5E.js → chunk-JWPE2WC7-CogdNl0i.js} +1 -1
- package/dist-web/assets/{chunk-KBJHAD2P-I8mrZhpz.js → chunk-KBJHAD2P-DHjpNtZv.js} +1 -1
- package/dist-web/assets/{chunk-RYQCIY6F-BMPaem92.js → chunk-RYQCIY6F-BUSOqH2X.js} +1 -1
- package/dist-web/assets/{chunk-XXDRQBXY-COy0J-0j.js → chunk-XXDRQBXY-BpoMV0bh.js} +1 -1
- package/dist-web/assets/classDiagram-JCYQIIEL-BTZeLngj.js +1 -0
- package/dist-web/assets/classDiagram-v2-OCEON4UE-BTZeLngj.js +1 -0
- package/dist-web/assets/{cose-bilkent-JH36ORCC-MosTTRdo.js → cose-bilkent-JH36ORCC-BJr2I61o.js} +1 -1
- package/dist-web/assets/{cynefin-VYW2F7L2-5tjPgrkP.js → cynefin-VYW2F7L2-HtysQZ4A.js} +1 -1
- package/dist-web/assets/{cynefinDiagram-MW4NZA55-CbDcdInR.js → cynefinDiagram-MW4NZA55-CcpC_2uv.js} +1 -1
- package/dist-web/assets/{dagre-VZM6K2ZE-YaBom1ZH.js → dagre-VZM6K2ZE-D8Ao0LUg.js} +1 -1
- package/dist-web/assets/{diagram-7IWD3JNH-Da4m-Hgz.js → diagram-7IWD3JNH-BITiLhjX.js} +1 -1
- package/dist-web/assets/{diagram-B4RE2ZJO-CAUUegxg.js → diagram-B4RE2ZJO-CJtwfy9f.js} +1 -1
- package/dist-web/assets/{diagram-LBJQPF4R-o21mWKG4.js → diagram-LBJQPF4R-BsVTh6w8.js} +1 -1
- package/dist-web/assets/{diagram-Q27KOJAE-BA3z3sXf.js → diagram-Q27KOJAE-pA_MUCUf.js} +1 -1
- package/dist-web/assets/{diagram-UB23O5K3-CGRdSSDK.js → diagram-UB23O5K3-CIY8z7vu.js} +1 -1
- package/dist-web/assets/{ebnfDiagram-BXEA7PRR-Bw-iU9FP.js → ebnfDiagram-BXEA7PRR-C3FMioqp.js} +1 -1
- package/dist-web/assets/{erDiagram-JOGREHBK-BwM1yiR0.js → erDiagram-JOGREHBK-CzoyKmKc.js} +1 -1
- package/dist-web/assets/{flowDiagram-UKHOOZJN-z05eOR1Q.js → flowDiagram-UKHOOZJN-DOqfushy.js} +1 -1
- package/dist-web/assets/{ganttDiagram-PKOTCBZU-BMUubNTl.js → ganttDiagram-PKOTCBZU-Cf9XQSWl.js} +1 -1
- package/dist-web/assets/{gitGraphDiagram-DS77QQ5N-Dccbi1wU.js → gitGraphDiagram-DS77QQ5N-DHUDofE5.js} +1 -1
- package/dist-web/assets/{index-h0KEOmkU.js → index-B6qEMQMx.js} +14 -14
- package/dist-web/assets/{index-C9eDH3u-.css → index-BmKj7CB1.css} +1 -1
- package/dist-web/assets/{index-BBbC5LRF.js → index-DokxDX1w.js} +1 -1
- package/dist-web/assets/{index-D48p0M2S.js → index-auojtiAA.js} +2 -2
- package/dist-web/assets/{index10-Qbuw1N6u.js → index10-Drb2n5e5.js} +1 -1
- package/dist-web/assets/{index11-g8v025wN.js → index11-Cx-aV4G2.js} +1 -1
- package/dist-web/assets/{index5-BYNcV8BY.js → index5-Dg3qGTyH.js} +1 -1
- package/dist-web/assets/{index6-BetANtnV.js → index6-BgvtIICP.js} +1 -1
- package/dist-web/assets/{index7-BcPbgCKN.js → index7-uEnniPQG.js} +1 -1
- package/dist-web/assets/{index8-B1lp-RvF.js → index8-h4IKc0ek.js} +2 -2
- package/dist-web/assets/{infoDiagram-6WML65LV-BF_pbUnN.js → infoDiagram-6WML65LV-D-3tvEiJ.js} +1 -1
- package/dist-web/assets/{ishikawaDiagram-WSZJBQD7-Dedv4urS.js → ishikawaDiagram-WSZJBQD7-DIIBNv7a.js} +1 -1
- package/dist-web/assets/{journeyDiagram-NVQOT4AX-B1Ex3b6o.js → journeyDiagram-NVQOT4AX-DP4r1Vlx.js} +1 -1
- package/dist-web/assets/{kanban-definition-27J2QSJJ-BtCGliBH.js → kanban-definition-27J2QSJJ-C3_Ztgxv.js} +1 -1
- package/dist-web/assets/{linear-ByItc8Qr.js → linear-DnqhIw-y.js} +1 -1
- package/dist-web/assets/{mermaid.core-B1M2O7nN.js → mermaid.core-xYUgBa3T.js} +4 -4
- package/dist-web/assets/{mindmap-definition-FAOFIHXS-D0UHKUyj.js → mindmap-definition-FAOFIHXS-l-dq-zfr.js} +1 -1
- package/dist-web/assets/{pegDiagram-VL7TDLO6-D7zYCVmG.js → pegDiagram-VL7TDLO6-C8vXQiaJ.js} +1 -1
- package/dist-web/assets/{pieDiagram-7S7Q4E2Y-Bd0i9CHa.js → pieDiagram-7S7Q4E2Y-CyNRSsI6.js} +1 -1
- package/dist-web/assets/{quadrantDiagram-CIZ2JOQS-MG-Ug47d.js → quadrantDiagram-CIZ2JOQS-D-w8AD_g.js} +1 -1
- package/dist-web/assets/{railroadDiagram-AXF67PYL-AZdl90Gj.js → railroadDiagram-AXF67PYL-BLkyQCWy.js} +1 -1
- package/dist-web/assets/{requirementDiagram-LRYGKXZP-DjplF9kt.js → requirementDiagram-LRYGKXZP-CEWO7XfT.js} +1 -1
- package/dist-web/assets/{sankeyDiagram-W5VNT64P-Bi9Zgfjs.js → sankeyDiagram-W5VNT64P-ByGoAaGj.js} +1 -1
- package/dist-web/assets/{sequenceDiagram-SI44F4Z6-ChEpdCvb.js → sequenceDiagram-SI44F4Z6-Bhn9GQtd.js} +1 -1
- package/dist-web/assets/{sizeCapture-X5ZJPWSS-B5RFUdaa.js → sizeCapture-X5ZJPWSS-jVKR9CTu.js} +1 -1
- package/dist-web/assets/{stateDiagram-OKZ733FA-BkRblSKp.js → stateDiagram-OKZ733FA-wW3XbegA.js} +1 -1
- package/dist-web/assets/stateDiagram-v2-UEYNNEHI-B8aids-Z.js +1 -0
- package/dist-web/assets/{swimlanes-SLNWSIFB-DLXH6Zhc.js → swimlanes-SLNWSIFB-B8QyFS7G.js} +2 -2
- package/dist-web/assets/swimlanesDiagram-ULZ7WXOC-B8XAkdSm.js +8 -0
- package/dist-web/assets/{timeline-definition-Z64GVDOM-C_N88siO.js → timeline-definition-Z64GVDOM-DpvxS-1A.js} +1 -1
- package/dist-web/assets/{vennDiagram-T6HMQDX7-DMsnvDt0.js → vennDiagram-T6HMQDX7-BzGM0ihY.js} +1 -1
- package/dist-web/assets/{vue.runtime.esm-bundler-B-3uIy85.js → vue.runtime.esm-bundler-BOcpwIX1.js} +1 -1
- package/dist-web/assets/{wardleyDiagram-T6FBY63Y-C9SJIPzq.js → wardleyDiagram-T6FBY63Y-2DKAOs5e.js} +1 -1
- package/dist-web/assets/{xychartDiagram-ELKLHX3M-DZLWA6Go.js → xychartDiagram-ELKLHX3M-B0SP0TXd.js} +1 -1
- package/dist-web/index.html +32 -32
- package/dist-web/vis/index.html.gz +0 -0
- package/package.json +1 -1
- package/scripts/fix-node-pty-perms.js +53 -53
- package/standard-skills/blun-app-design-system/SKILL.md +30 -30
- package/standard-skills/blun-app-design-system/provenance.json +17 -17
- package/standard-skills/blun-app-design-system/references/tokens.md +48 -48
- package/standard-skills/blun-app-design-system/scripts/check-blun-design.mjs +49 -49
- package/standard-skills/translate-native/README.md +1 -1
- package/standard-skills/translate-native/scripts/blun_language_guard.py +2 -0
- package/standard-skills/translate-native/scripts/language_gateway.py +2 -0
- package/standard-skills/translate-native/scripts/pre_output_guard.py +2 -0
- package/standard-tools/language-guard/blun_language_guard.py +2 -0
- package/standard-tools/language-guard/language_gateway.py +2 -0
- package/standard-tools/language-guard/pre_output_guard.py +2 -0
- package/telegram-plugin/blun.plugin.json +20 -20
- package/telegram-plugin/commands/access.md +37 -37
- package/telegram-plugin/dist/bridge.mjs +310 -187
- package/telegram-plugin/dist/mcp-server.mjs +174 -261
- package/telegram-plugin/dist/noise.mjs +1 -19
- package/worker-host.mjs +13747 -16824
- package/bin/profile-handoff.cjs +0 -152
- package/bin/profile-launch.cjs +0 -120
- package/dist-web/assets/DesignSystemView-DwK1aQMo.js +0 -12
- package/dist-web/assets/DesignSystemView-szjTj7ns.css +0 -1
- package/dist-web/assets/channel-BnluexuN.js +0 -1
- package/dist-web/assets/classDiagram-JCYQIIEL-BliFdSD9.js +0 -1
- package/dist-web/assets/classDiagram-v2-OCEON4UE-BliFdSD9.js +0 -1
- package/dist-web/assets/stateDiagram-v2-UEYNNEHI-fVkQcACW.js +0 -1
- package/dist-web/assets/swimlanesDiagram-ULZ7WXOC-Bg-BiZJQ.js +0 -8
package/README.md
CHANGED
|
@@ -1,133 +1,90 @@
|
|
|
1
|
-
# blun-king-cli — npm-Distribution
|
|
2
|
-
|
|
3
|
-
Dieses Verzeichnis ist das Gerüst des öffentlichen npm-Pakets `blun-king-cli`
|
|
4
|
-
(Erstveröffentlichung 8.0.0, 06.07.2026, Account `blunking`).
|
|
5
|
-
|
|
6
|
-
## Installation
|
|
7
|
-
|
|
8
|
-
Voraussetzung ist Node.js 24.15 oder neuer. Die geprüfte Version wird exakt
|
|
9
|
-
installiert:
|
|
10
|
-
|
|
11
|
-
```powershell
|
|
12
|
-
npm install -g blun-king-cli@9.1.624
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
### Windows: Node.js, npm und Git Bash
|
|
16
|
-
|
|
17
|
-
Node.js ab Version 24.15 ist erforderlich; npm wird mit Node.js installiert. Unter Windows benötigt die Konsole außerdem Git Bash aus Git for Windows. Nach der Installation ein neues Terminal öffnen und prüfen:
|
|
1
|
+
# blun-king-cli — npm-Distribution
|
|
2
|
+
|
|
3
|
+
Dieses Verzeichnis ist das Gerüst des öffentlichen npm-Pakets `blun-king-cli`
|
|
4
|
+
(Erstveröffentlichung 8.0.0, 06.07.2026, Account `blunking`).
|
|
5
|
+
|
|
6
|
+
## Installation
|
|
7
|
+
|
|
8
|
+
Voraussetzung ist Node.js 24.15 oder neuer. Die geprüfte Version wird exakt
|
|
9
|
+
installiert:
|
|
18
10
|
|
|
19
11
|
```powershell
|
|
20
|
-
|
|
21
|
-
npm --version
|
|
22
|
-
git --version
|
|
12
|
+
npm install -g blun-king-cli@9.1.600
|
|
23
13
|
```
|
|
24
14
|
|
|
25
|
-
|
|
15
|
+
## Reproduzierbares Staging und Packen
|
|
26
16
|
|
|
27
|
-
|
|
17
|
+
Der Schritt baut nichts, installiert nichts und veröffentlicht nichts. Vorher müssen
|
|
18
|
+
`apps/blun-king/dist/main.mjs`, `dist-web`, die Darwin- und Windows-Natives sowie
|
|
19
|
+
`plugins/telegram/dist` bereits frisch gebaut sein.
|
|
28
20
|
|
|
29
|
-
|
|
21
|
+
Das Staging landet standardmäßig
|
|
22
|
+
unter `.stage/package`, das Tarball unter `.stage/artifacts`.
|
|
23
|
+
`BLUN_NPM_STAGE_DIR` und `BLUN_NPM_ARTIFACT_DIR` können beide Ziele überschreiben;
|
|
24
|
+
beim direkten Skriptaufruf stehen zusätzlich `--output` und `--artifacts` bereit.
|
|
30
25
|
|
|
31
|
-
|
|
26
|
+
Der Schritt validiert alle Pflichtartefakte vor dem Leeren des alten Stagings. Er
|
|
27
|
+
kopiert nur die Paket-Hülle, `blun.mjs`, `dist-web`, `native`, Telegrams
|
|
28
|
+
`dist`/Manifest/Commands und die Repo-Skills.
|
|
32
29
|
|
|
33
|
-
|
|
34
|
-
| --- | --- |
|
|
35
|
-
| `/context doctor`, `/context-doctor`, `/tokens` | Zeigt die ausführliche Kontextdiagnose der aktiven Sitzung. |
|
|
36
|
-
| `/queue` | Zeigt die aktuelle Warteschlangenregel. |
|
|
37
|
-
| `/queue steer` | Übergibt neue Eingaben am nächsten geeigneten Übergabepunkt; ist das nicht möglich, warten sie auf den nächsten Zug. |
|
|
38
|
-
| `/queue followup` | Verarbeitet neue Eingaben nach dem laufenden Zug. |
|
|
39
|
-
| `/queue collect debounce:500ms batch:10` | Bündelt zusammengehörige Eingaben; weitere Eingaben bleiben in der Warteschlange. |
|
|
40
|
-
| `/queue interrupt` | Unterbricht für neue Eingaben den laufenden Zug. |
|
|
41
|
-
| `/queue reset`, `/queue default` | Entfernt die sitzungsspezifische Warteschlangenregel. |
|
|
42
|
-
| `/session <ID oder Titel>` | Wählt eine Sitzung im aktuellen Arbeitsbereich. Eindeutige ID-Präfixe werden ebenfalls erkannt; bei Mehrdeutigkeit öffnet sich die Auswahl. |
|
|
43
|
-
| `/question` | Öffnet noch ausstehende Rückfragen erneut. Das Einklappen beantwortet oder verwirft sie nicht. |
|
|
44
|
-
| `/usage off`, `/usage tokens`, `/usage full` | Speichert den Anzeigemodus für den Verbrauch in dieser Sitzung. |
|
|
45
|
-
| `/usage reset` | Entfernt den sitzungsspezifischen Anzeigemodus. `inherit`, `clear` und `default` sind gleichwertig. |
|
|
46
|
-
| `/settings` | Öffnet die Einstellungen einschließlich der lokalen Anzeigeoptionen. |
|
|
30
|
+
## Startmodi
|
|
47
31
|
|
|
48
|
-
|
|
32
|
+
`blun` startet die lokale Konsole, ohne Telegram automatisch anzubinden. `king`
|
|
33
|
+
startet dieselbe Konsole und bindet den eingerichteten Telegram-Kanal automatisch
|
|
34
|
+
an. Version, Konto, Modell und Befehle sind ansonsten identisch. Der Unterschied
|
|
35
|
+
gilt nur für den laufenden Prozess; die gespeicherte
|
|
36
|
+
Plugin-Konfiguration wird nicht umgeschrieben.
|
|
49
37
|
|
|
50
|
-
|
|
38
|
+
Beim ersten Start werden das Telegram-Plugin und die mitgelieferten Skills
|
|
39
|
+
eingerichtet. Die Anmeldung erfolgt anschließend in der
|
|
40
|
+
Konsole mit `/login` über den BLUN-OAuth-Server. Das Paket erzeugt keine
|
|
41
|
+
statische Anbieter- oder API-Key-Konfiguration.
|
|
51
42
|
|
|
52
|
-
|
|
43
|
+
## Persönliches Gedächtnis
|
|
53
44
|
|
|
54
|
-
|
|
45
|
+
Seit Version 9.1.599 zeigt BLUN King Freigaben für das persönliche Gedächtnis mit übersetzten Aktionstiteln und vollständigen Vorschauen der tatsächlichen Einstellungsänderungen oder des zu speichernden Textes. Gültige Änderungen lassen sich nur einmalig freigeben, ungültige Eingaben nur ablehnen. Eine Sitzungsfreigabe genehmigt solche wartenden Anfragen nicht automatisch. Steuerzeichen werden sichtbar maskiert; der Originalinhalt bleibt unverändert.
|
|
55
46
|
|
|
56
|
-
|
|
47
|
+
## Zeitgrenzen für die Antwortprüfung
|
|
57
48
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
`
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
-
|
|
100
|
-
- Guard-Protokoll unverändert auf 6.20.0.
|
|
101
|
-
|
|
102
|
-
## Nachweisbare Arbeitsabläufe
|
|
103
|
-
|
|
104
|
-
Version 9.1.0 enthält sieben zusätzliche, getrennt nutzbare Befehlsgruppen:
|
|
105
|
-
|
|
106
|
-
- `proof` belegt Prüfungen und Artefakte mit SHA-256.
|
|
107
|
-
- `brief` erstellt einen versionierten Projektauftrag.
|
|
108
|
-
- `handoff` übergibt eine Sitzung zwischen CLI, Desktop und Web.
|
|
109
|
-
- `replay` erzeugt einen bereinigten Arbeitsverlauf.
|
|
110
|
-
- `guard` prüft Belegintegrität und aktuelle Artefakte.
|
|
111
|
-
- `demo` erzeugt eine bereinigte statische Projektdemo.
|
|
112
|
-
- `workspace` verwaltet isolierte Git-Arbeitsbereiche.
|
|
113
|
-
|
|
114
|
-
Sie stehen unter `blun` und `king` identisch zur Verfügung.
|
|
115
|
-
|
|
116
|
-
## Aktualisieren
|
|
117
|
-
|
|
118
|
-
`blun update`, `king update` und die jeweilige Variante `upgrade` verwenden
|
|
119
|
-
denselben abgesicherten Updater. Er bleibt im installierten Stable- oder
|
|
120
|
-
Next-Kanal, verhindert Rückstufungen und übergibt npm ausschließlich eine zuvor
|
|
121
|
-
aufgelöste exakte Paketversion.
|
|
122
|
-
|
|
123
|
-
## Absturzdiagnose unter Windows
|
|
124
|
-
|
|
125
|
-
Startfehler und unbehandelte Ausnahmen werden im begrenzten, bereinigten Protokoll `BLUN_HOME/diagnostics/runtime-exits.jsonl` erfasst. Die Diagnose startet keinen neuen Prozess und ändert beim Start keine Windows-Registrywerte.
|
|
126
|
-
|
|
127
|
-
Ausführliche Node-Berichte sind optional. Nur `BLUN_NODE_CRASH_REPORTS=1` aktiviert sie für den gestarteten Prozess. Die Berichte liegen unter `BLUN_HOME/diagnostics/crash-dumps`. Umgebungsvariablen und Netzwerkinformationen werden ausgeschlossen; Programmargumente, Dateipfade und weitere sensible Prozessdaten können trotzdem enthalten sein. Berichte vor einer Weitergabe prüfen.
|
|
128
|
-
|
|
129
|
-
Drei gemeinsam reservierte Plätze begrenzen die Anzahl dieser Node-Berichte, nicht deren Dateigröße. Ein ordentlich beendeter Prozess gibt seine Reservierung frei; ein späterer Prozess kann den Bericht dieses Platzes ersetzen. Aktive oder unklar verwaiste Reservierungen werden nicht automatisch entfernt. Sind alle Plätze belegt oder liegen alte Berichte mit Zufallskennung vor, bleiben neue Detailberichte aus, bis der Betreiber diese Dateien ausdrücklich geprüft und bereinigt hat. Der normale Start und das kleine Fehlerprotokoll bleiben davon unabhängig. Sitzungen und fremde Dateien werden nicht entfernt.
|
|
130
|
-
|
|
131
|
-
Native Windows-Dumps sind davon getrennt. Der mitgelieferte Helfer `bin/windows-node-crash-dump.cjs` bietet `--query-wer` für eine reine Abfrage. Eine Änderung erfordert ausdrücklich `--configure-wer --confirm-system-wide`, ein gesetztes `BLUN_HOME` und ausreichende Windows-Rechte. Sie betrifft alle Prozesse namens `node.exe`, nicht nur BLUN: drei Minidumps im angegebenen Diagnoseordner. Bei einem Teilfehler nennt die JSON-Ausgabe die bereits gesetzten Werte. Der normale Start ruft diesen Befehl niemals auf.
|
|
132
|
-
|
|
133
|
-
Node-Berichte erfassen unterstützte Node-Fehler; sie sind kein Beleg dafür, dass jeder native Windows-Abbruch erfasst wird. Die Funktion lässt den ursprünglichen Fehler und den vorgesehenen Prozessabbruch bestehen.
|
|
49
|
+
Version 9.1.600 begrenzt die Antwortprüfung pro äußerem Prüfversuch auf insgesamt 120 Sekunden. Allgemeine Prüfer behalten die bisherige Frist von 30 Sekunden. Bei der nativen Sprachprüfung stehen nach dem bestätigten Start einmalig bis zu 90 Sekunden für den ersten inhaltlichen Text bereit; auch dabei gilt die Gesamtgrenze. Inhaltlicher Text innerhalb der zulässigen Ausgabelänge sowie die geordneten Übergänge zur Freigabe und zur Belegprüfung setzen die Wartefrist jeweils auf 30 Sekunden zurück, ohne die Gesamtgrenze zu verlängern. Es bleibt bei höchstens zwei äußeren Prüfversuchen.
|
|
50
|
+
|
|
51
|
+
Abbruch, exakte Bindung an den Antworttext, Belegablauf und Autorisierung bleiben unverändert. Damit ist keine Behebung von HTTP-502-Fehlern im Live-Betrieb nachgewiesen.
|
|
52
|
+
|
|
53
|
+
## Festgelegte Komponentenstände
|
|
54
|
+
|
|
55
|
+
- AgentSpine 0.73.0, Commit `38cb94760b19e3a82e7efdf12538a1adf5324964`.
|
|
56
|
+
- Translate Native 6.155.0, Commit `21efc66da8f77992c8c63ac0f145a106c31e7eb2`.
|
|
57
|
+
- Guard-Protokoll unverändert auf 6.20.0.
|
|
58
|
+
|
|
59
|
+
## Nachweisbare Arbeitsabläufe
|
|
60
|
+
|
|
61
|
+
Version 9.1.0 enthält sieben zusätzliche, getrennt nutzbare Befehlsgruppen:
|
|
62
|
+
|
|
63
|
+
- `proof` belegt Prüfungen und Artefakte mit SHA-256.
|
|
64
|
+
- `brief` erstellt einen versionierten Projektauftrag.
|
|
65
|
+
- `handoff` übergibt eine Sitzung zwischen CLI, Desktop und Web.
|
|
66
|
+
- `replay` erzeugt einen bereinigten Arbeitsverlauf.
|
|
67
|
+
- `guard` prüft Belegintegrität und aktuelle Artefakte.
|
|
68
|
+
- `demo` erzeugt eine bereinigte statische Projektdemo.
|
|
69
|
+
- `workspace` verwaltet isolierte Git-Arbeitsbereiche.
|
|
70
|
+
|
|
71
|
+
Sie stehen unter `blun` und `king` identisch zur Verfügung.
|
|
72
|
+
|
|
73
|
+
## Aktualisieren
|
|
74
|
+
|
|
75
|
+
`blun update`, `king update` und die jeweilige Variante `upgrade` verwenden
|
|
76
|
+
denselben abgesicherten Updater. Er bleibt im installierten Stable- oder
|
|
77
|
+
Next-Kanal, verhindert Rückstufungen und übergibt npm ausschließlich eine zuvor
|
|
78
|
+
aufgelöste exakte Paketversion.
|
|
79
|
+
|
|
80
|
+
## Absturzdiagnose unter Windows
|
|
81
|
+
|
|
82
|
+
Startfehler und unbehandelte Ausnahmen werden im begrenzten, bereinigten Protokoll `BLUN_HOME/diagnostics/runtime-exits.jsonl` erfasst. Die Diagnose startet keinen neuen Prozess und ändert beim Start keine Windows-Registrywerte.
|
|
83
|
+
|
|
84
|
+
Ausführliche Node-Berichte sind optional. Nur `BLUN_NODE_CRASH_REPORTS=1` aktiviert sie für den gestarteten Prozess. Die Berichte liegen unter `BLUN_HOME/diagnostics/crash-dumps`. Umgebungsvariablen und Netzwerkinformationen werden ausgeschlossen; Programmargumente, Dateipfade und weitere sensible Prozessdaten können trotzdem enthalten sein. Berichte vor einer Weitergabe prüfen.
|
|
85
|
+
|
|
86
|
+
Drei gemeinsam reservierte Plätze begrenzen die Anzahl dieser Node-Berichte, nicht deren Dateigröße. Ein ordentlich beendeter Prozess gibt seine Reservierung frei; ein späterer Prozess kann den Bericht dieses Platzes ersetzen. Aktive oder unklar verwaiste Reservierungen werden nicht automatisch entfernt. Sind alle Plätze belegt oder liegen alte Berichte mit Zufallskennung vor, bleiben neue Detailberichte aus, bis der Betreiber diese Dateien ausdrücklich geprüft und bereinigt hat. Der normale Start und das kleine Fehlerprotokoll bleiben davon unabhängig. Sitzungen und fremde Dateien werden nicht entfernt.
|
|
87
|
+
|
|
88
|
+
Native Windows-Dumps sind davon getrennt. Der mitgelieferte Helfer `bin/windows-node-crash-dump.cjs` bietet `--query-wer` für eine reine Abfrage. Eine Änderung erfordert ausdrücklich `--configure-wer --confirm-system-wide`, ein gesetztes `BLUN_HOME` und ausreichende Windows-Rechte. Sie betrifft alle Prozesse namens `node.exe`, nicht nur BLUN: drei Minidumps im angegebenen Diagnoseordner. Bei einem Teilfehler nennt die JSON-Ausgabe die bereits gesetzten Werte. Der normale Start ruft diesen Befehl niemals auf.
|
|
89
|
+
|
|
90
|
+
Node-Berichte erfassen unterstützte Node-Fehler; sie sind kein Beleg dafür, dass jeder native Windows-Abbruch erfasst wird. Die Funktion lässt den ursprünglichen Fehler und den vorgesehenen Prozessabbruch bestehen.
|
|
@@ -215,7 +215,7 @@ async function prepareInstalledChannelWake(pluginRoot, projectRoot, stateRoot) {
|
|
|
215
215
|
const graph = await import(pathToFileURL(join(pluginRoot, "src/lib/graph.js")).href);
|
|
216
216
|
const channel = await import(pathToFileURL(join(pluginRoot, "src/lib/channel-runtime.js")).href);
|
|
217
217
|
await graph.upsertEntity({
|
|
218
|
-
root: projectRoot, id: "agent:install-channel", kind: "agent", displayName: "
|
|
218
|
+
root: projectRoot, id: "agent:install-channel", kind: "agent", displayName: "Franz",
|
|
219
219
|
attributes: { language: "de-DE", voice: { warmth: "warm", directness: "clear", length: "concise" } },
|
|
220
220
|
privacy: "shared"
|
|
221
221
|
});
|
|
@@ -261,7 +261,7 @@ async function invokeInstalledChannelWake(pluginRoot, projectRoot, stateRoot, ho
|
|
|
261
261
|
agent_spine_channel_event: { event_id: event.eventId, provider: event.provider }
|
|
262
262
|
}, { extraEnv: { AGENTSPINE_INSTALL_CHANNEL_SECRET: secret } });
|
|
263
263
|
if (result.channelEvent?.eventId !== event.eventId || result.channelEvent?.chatId !== event.chatId
|
|
264
|
-
|| result.channelEvent?.threadId !== event.threadId || result.voiceBrief?.displayName !== "
|
|
264
|
+
|| result.channelEvent?.threadId !== event.threadId || result.voiceBrief?.displayName !== "Franz"
|
|
265
265
|
|| result.voiceBrief?.profile?.warmth !== "warm") {
|
|
266
266
|
throw new Error(`${host} installed hook did not inject the exact channel event and voice brief`);
|
|
267
267
|
}
|
|
@@ -288,8 +288,8 @@ async function invokeInstalledGateway(pluginRoot, projectRoot, stateRoot) {
|
|
|
288
288
|
bindings: [{
|
|
289
289
|
id: "persona-binding:installed-gateway", authenticator: "host-manifest", issuer: "host:installed",
|
|
290
290
|
tenantId: "tenant:installed-gateway", host: "codex", profileId: "profile:installed-gateway",
|
|
291
|
-
subjectId: "subject:installed-gateway", kind: "agent", displayName: "Installed
|
|
292
|
-
sourceBinding: ".codex/agents/installed-
|
|
291
|
+
subjectId: "subject:installed-gateway", kind: "agent", displayName: "Installed Franz",
|
|
292
|
+
sourceBinding: ".codex/agents/installed-franz.md", groupId: "group:installed-gateway"
|
|
293
293
|
}, {
|
|
294
294
|
id: "persona-binding:installed-peer", authenticator: "host-manifest", issuer: "host:installed",
|
|
295
295
|
tenantId: "tenant:installed-gateway", host: "codex", profileId: "profile:installed-gateway",
|
|
@@ -431,10 +431,6 @@ async function runHookCore(input, payload, options) {
|
|
|
431
431
|
}
|
|
432
432
|
if (payload) return { blocked: false, context, briefing, preflight, signal, attentionEvent, channelEvent, lessonRecall, catalogPath };
|
|
433
433
|
const output = hookOutput(event, context, process.env, sourceWarning);
|
|
434
|
-
if (preflight?.instructionNotice) {
|
|
435
|
-
output.hookSpecificOutput.message = [output.hookSpecificOutput.message, preflight.instructionNotice]
|
|
436
|
-
.filter(Boolean).join("\n");
|
|
437
|
-
}
|
|
438
434
|
const handoff = await writeContextOutput(output, process.env.BLUN_PLUGIN_ROOT ? "king"
|
|
439
435
|
: process.env.PLUGIN_ROOT ? "codex" : process.env.CLAUDE_PLUGIN_ROOT ? "claude" : scope.host);
|
|
440
436
|
if (event === "UserPromptSubmit" && briefingOrigin) {
|
|
@@ -86,7 +86,7 @@ export async function indexExplicitDocuments(entries) {
|
|
|
86
86
|
if (!metadata.isFile() || metadata.isSymbolicLink()) throw new Error(`source is not a regular non-symlink file: ${entry.id}`);
|
|
87
87
|
buffer = await readFile(path);
|
|
88
88
|
}
|
|
89
|
-
if (buffer.byteLength > (entry.maxBytes ||
|
|
89
|
+
if (buffer.byteLength > (entry.maxBytes || 4 * 1024 * 1024)) throw new Error(`source exceeds its byte limit: ${entry.id}`);
|
|
90
90
|
const classification = classify(entry.id);
|
|
91
91
|
const document = {
|
|
92
92
|
path,
|
|
@@ -44,7 +44,6 @@ return null;
|
|
|
44
44
|
|
|
45
45
|
export function hostContextLimit(preflight) {
|
|
46
46
|
if (preflight?.receipt?.instructionHost === "codex") return 32768 + Buffer.byteLength(JSON.stringify(preflight.briefing || {}));
|
|
47
|
-
if (preflight?.briefing?.instructions?.length) return 32768 + Buffer.byteLength(JSON.stringify(preflight.briefing));
|
|
48
47
|
const mode = preflight?.receipt?.instructionBudget?.mode;
|
|
49
48
|
if (mode === "claude-required-overflow") return MAX_CLAUDE_OVERFLOW_CONTEXT_BYTES;
|
|
50
49
|
return STANDARD_HOST_CONTEXT_BYTES;
|
|
@@ -4,7 +4,8 @@ const KING_TOTAL = 8388608;
|
|
|
4
4
|
export const isKingHost = (env = process.env) => !!(env.BLUN_PLUGIN_ROOT && env.BLUN_HOME);
|
|
5
5
|
|
|
6
6
|
export function instructionBudget(host, usedBytes = 0, env = process.env) {
|
|
7
|
-
const hardLimitBytes = KING_TOTAL
|
|
7
|
+
const hardLimitBytes = host === "codex" && isKingHost(env) ? KING_TOTAL
|
|
8
|
+
: host === "claude" ? 16384 : host === "codex" ? 32768 : STANDARD;
|
|
8
9
|
return { mode: usedBytes > STANDARD ? `${host}-required-overflow` : "standard",
|
|
9
10
|
standardBytes: STANDARD, hardLimitBytes, usedBytes, overflowBytes: Math.max(0, usedBytes - STANDARD) };
|
|
10
11
|
}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import { createHash, createHmac, randomBytes, randomUUID, timingSafeEqual } from "node:crypto";
|
|
2
2
|
import { constants as fsConstants } from "node:fs";
|
|
3
3
|
import { spawn } from "node:child_process";
|
|
4
|
-
import { StringDecoder } from "node:string_decoder";
|
|
5
4
|
import { lstat, mkdir, open, readFile, realpath, stat, unlink, writeFile } from "node:fs/promises";
|
|
6
5
|
import { basename, dirname, isAbsolute, join, relative, resolve } from "node:path";
|
|
7
6
|
import { isFileLockContention, replaceFileWithRetry } from "./filesystem-retry.js";
|
|
8
7
|
import { ancestorsBetween, isInside, stateRoot } from "./paths.js";
|
|
9
8
|
import { preflightDeliveryId } from "./preflight-delivery-id.js";
|
|
10
9
|
import { resolveHostSourceCatalog } from "./source-roots.js";
|
|
11
|
-
import { instructionBudget
|
|
10
|
+
import { instructionBudget } from "./host-instruction-budget.js";
|
|
12
11
|
|
|
13
12
|
export const PREFLIGHT_SCHEMA = "agentspine.preflight/v2";
|
|
14
13
|
export const PREFLIGHT_POLICY_SCHEMA = "agentspine.preflight-policy/v1";
|
|
@@ -327,7 +326,7 @@ async function assertNoSymlinkParents(path, allowedRoot) {
|
|
|
327
326
|
}
|
|
328
327
|
return { root, target };
|
|
329
328
|
}
|
|
330
|
-
async function safeReadRequired(path, allowedRoot, maximum = STANDARD_REQUIRED_INSTRUCTIONS_BYTES, fileHooks = null
|
|
329
|
+
async function safeReadRequired(path, allowedRoot, maximum = STANDARD_REQUIRED_INSTRUCTIONS_BYTES, fileHooks = null) {
|
|
331
330
|
const checked = await assertNoSymlinkParents(path, allowedRoot);
|
|
332
331
|
const flags = fsConstants.O_RDONLY | (fsConstants.O_NOFOLLOW || 0);
|
|
333
332
|
const handle = await open(checked.target, flags);
|
|
@@ -354,10 +353,7 @@ async function safeReadRequired(path, allowedRoot, maximum = STANDARD_REQUIRED_I
|
|
|
354
353
|
|| current.size !== before.size || current.mtimeMs !== before.mtimeMs || current.ctimeMs !== before.ctimeMs) {
|
|
355
354
|
throw new Error(`required instruction ${basename(path)} was replaced during preflight`);
|
|
356
355
|
}
|
|
357
|
-
|
|
358
|
-
const content = contentLimit === null ? buffer.toString("utf8") : decoder.write(buffer.subarray(0, contentLimit));
|
|
359
|
-
const readBytes = Buffer.byteLength(content);
|
|
360
|
-
return { content, bytes: buffer.length, readBytes, omittedBytes: buffer.length - readBytes, sha256: sha256(buffer),
|
|
356
|
+
return { content: buffer.toString("utf8"), bytes: buffer.length, sha256: sha256(buffer),
|
|
361
357
|
identity: sha256(`${before.dev}\0${before.ino}\0${before.size}\0${before.mtimeMs}\0${before.ctimeMs}`) };
|
|
362
358
|
} finally { await handle.close(); }
|
|
363
359
|
}
|
|
@@ -496,19 +492,16 @@ export async function runPreflight({ input, scope, resolvedSources, prompt, now
|
|
|
496
492
|
const requiredInstructions = [];
|
|
497
493
|
let instructionBytes = 0;
|
|
498
494
|
const maximumInstructionBytes = instructionBudget(instructionHost, 0, env).hardLimitBytes;
|
|
499
|
-
const kingInstructions = instructionHost === "codex" && isKingHost(env);
|
|
500
|
-
const contentBudget = kingInstructions ? 900000 : 32768;
|
|
501
495
|
for (const document of documents) {
|
|
502
496
|
const allowedRoot = document.sourceScope === "user" ? resolvedSources.hostHome : resolvedSources.projectRoot;
|
|
503
|
-
const snapshot = await safeReadRequired(document.path, allowedRoot, maximumInstructionBytes, fileHooks
|
|
497
|
+
const snapshot = await safeReadRequired(document.path, allowedRoot, maximumInstructionBytes, fileHooks);
|
|
504
498
|
if (snapshot.sha256 !== document.sha256 || snapshot.bytes !== document.bytes) throw new Error(`required instruction changed after source resolution: ${document.relativePath}`);
|
|
505
|
-
instructionBytes += snapshot.
|
|
499
|
+
instructionBytes += snapshot.bytes;
|
|
506
500
|
if (instructionBytes > maximumInstructionBytes) {
|
|
507
501
|
throw new Error(`required host instructions total ${instructionBytes} bytes; mandatory limit is ${maximumInstructionBytes} bytes`);
|
|
508
502
|
}
|
|
509
503
|
requiredInstructions.push({ path: document.path, displayPath: document.relativePath, scope: document.sourceScope,
|
|
510
|
-
bytes: snapshot.bytes,
|
|
511
|
-
sha256: snapshot.sha256, identity: snapshot.identity, content: snapshot.content });
|
|
504
|
+
bytes: snapshot.bytes, sha256: snapshot.sha256, identity: snapshot.identity, content: snapshot.content });
|
|
512
505
|
}
|
|
513
506
|
const appliedInstructionBudget = instructionBudget(instructionHost, instructionBytes, env);
|
|
514
507
|
const memoryState = validateMemories(await readJson(paths.memories, MAX_STATE_BYTES, emptyMemories));
|
|
@@ -555,7 +548,6 @@ export async function runPreflight({ input, scope, resolvedSources, prompt, now
|
|
|
555
548
|
const key = await signingKey(paths); const bodyDigest = digestObject(receiptBody);
|
|
556
549
|
const receipt = { id: `preflight:${bodyDigest.slice(0, 32)}`, ...receiptBody, bodyDigest,
|
|
557
550
|
signature: createHmac("sha256", key).update(bodyDigest).digest("hex") };
|
|
558
|
-
let instructionNotice = null;
|
|
559
551
|
await withLock(paths, async () => {
|
|
560
552
|
const state = await readVerifiedState(paths);
|
|
561
553
|
state.receipts = state.receipts.filter((item) => new Date(item.receipt?.expiresAt || 0).getTime() >= new Date(createdAt).getTime() - RECEIPT_TTL_MS);
|
|
@@ -565,25 +557,6 @@ export async function runPreflight({ input, scope, resolvedSources, prompt, now
|
|
|
565
557
|
const envelope = { receipt, consumedAt: null, invalidatedAt: null, stateSignature: "" };
|
|
566
558
|
envelope.stateSignature = createHmac("sha256", key).update(envelopeBody(envelope)).digest("hex");
|
|
567
559
|
state.receipts.push(envelope); state.revision += 1;
|
|
568
|
-
if (requiredInstructions.length > 0) {
|
|
569
|
-
const notices = [];
|
|
570
|
-
for (const item of requiredInstructions.filter((instruction) => instruction.bytes > 8192)) {
|
|
571
|
-
const sessionDigest = sha256(`${exactScope.sessionId}\0${item.path}`);
|
|
572
|
-
if (state.history.some((event) => event.event === "instruction-notice" && event.sessionDigest === sessionDigest)) continue;
|
|
573
|
-
state.history.push({ event: "instruction-notice", sessionDigest, at: createdAt, authority: "diagnostic-only" });
|
|
574
|
-
notices.push(`${item.displayPath}: ${item.bytes} bytes; ${item.readBytes} read; ${item.omittedBytes} omitted.`);
|
|
575
|
-
}
|
|
576
|
-
const totalBytes = requiredInstructions.reduce((sum, item) => sum + item.bytes, 0);
|
|
577
|
-
const omittedBytes = totalBytes - instructionBytes;
|
|
578
|
-
if (omittedBytes > 0) {
|
|
579
|
-
const totalDigest = sha256(`${exactScope.sessionId}\0instruction-total`);
|
|
580
|
-
if (!state.history.some((event) => event.event === "instruction-notice" && event.sessionDigest === totalDigest)) {
|
|
581
|
-
state.history.push({ event: "instruction-notice", sessionDigest: totalDigest, at: createdAt, authority: "diagnostic-only" });
|
|
582
|
-
notices.push(`Instruction total: ${totalBytes} bytes; ${instructionBytes} read; ${omittedBytes} omitted.`);
|
|
583
|
-
}
|
|
584
|
-
}
|
|
585
|
-
instructionNotice = notices.join("\n") || null;
|
|
586
|
-
}
|
|
587
560
|
state.lastTurn = { status: "ready", receiptId: receipt.id, at: createdAt, host: exactScope.host,
|
|
588
561
|
instructionHost, instructionFiles: receipt.instructionFiles.length, recall: receipt.providerQueries.map((item) => ({
|
|
589
562
|
providerId: item.providerId, status: item.status, rejected: item.rejected
|
|
@@ -591,7 +564,7 @@ export async function runPreflight({ input, scope, resolvedSources, prompt, now
|
|
|
591
564
|
state.history.push({ event: "ready", receiptId: receipt.id, at: createdAt, authority: "preflight-proof-only" });
|
|
592
565
|
await writeJson(paths.state, state);
|
|
593
566
|
});
|
|
594
|
-
return { receipt, briefing,
|
|
567
|
+
return { receipt, briefing, policy: { configured: Boolean(profile), requiredProviderIds } };
|
|
595
568
|
}
|
|
596
569
|
|
|
597
570
|
export async function verifyPreflightReceipt({ receipt, input, scope, resolvedSources, prompt, now = new Date(), env = process.env, consume = false }) {
|
|
@@ -634,14 +607,12 @@ export async function verifyPreflightReceipt({ receipt, input, scope, resolvedSo
|
|
|
634
607
|
|| currentDocuments.some((document, index) => document.path !== receipt.instructionFiles[index]?.path)) return false;
|
|
635
608
|
let instructionBytes = 0;
|
|
636
609
|
const maximumInstructionBytes = instructionBudget(receipt.instructionHost, 0, env).hardLimitBytes;
|
|
637
|
-
const kingInstructions = receipt.instructionHost === "codex" && isKingHost(env);
|
|
638
|
-
const contentBudget = kingInstructions ? 900000 : 32768;
|
|
639
610
|
for (const instruction of receipt.instructionFiles) {
|
|
640
611
|
const allowedRoot = instruction.scope === "user" ? freshSources.hostHome : freshSources.projectRoot;
|
|
641
|
-
const currentSnapshot = await safeReadRequired(instruction.path, allowedRoot, maximumInstructionBytes
|
|
612
|
+
const currentSnapshot = await safeReadRequired(instruction.path, allowedRoot, maximumInstructionBytes);
|
|
642
613
|
if (currentSnapshot.sha256 !== instruction.sha256 || currentSnapshot.bytes !== instruction.bytes
|
|
643
614
|
|| currentSnapshot.identity !== instruction.identity) return false;
|
|
644
|
-
instructionBytes += currentSnapshot.
|
|
615
|
+
instructionBytes += currentSnapshot.bytes;
|
|
645
616
|
}
|
|
646
617
|
if (instructionBytes > maximumInstructionBytes
|
|
647
618
|
|| canonical(receipt.instructionBudget) !== canonical(instructionBudget(receipt.instructionHost, instructionBytes, env))) return false;
|
|
@@ -376,7 +376,7 @@ export async function resolveHostSourceCatalog({ host, cwd = process.cwd(), inpu
|
|
|
376
376
|
const codexHome = isKingHost(env) ? env.BLUN_HOME : env.CODEX_HOME || env.BLUN_HOME || join(homedir(), ".codex");
|
|
377
377
|
hostHome = await existingDirectory(resolve(codexHome)) || resolve(codexHome);
|
|
378
378
|
const config = await codexConfig(hostHome);
|
|
379
|
-
config.maxBytes = KING_SOURCE_BYTES;
|
|
379
|
+
if (isKingHost(env)) config.maxBytes = KING_SOURCE_BYTES;
|
|
380
380
|
if (env.AGENTSPINE_ROOT) projectRoot = await canonicalPath(env.AGENTSPINE_ROOT);
|
|
381
381
|
else ({ root: projectRoot, resolution: rootResolution } = await findRoot(canonicalCwd, config.rootMarkers));
|
|
382
382
|
sources = await codexSources({ cwd: canonicalCwd, projectRoot, codexHome: hostHome, config });
|