berry-agent 0.1.0-alpha.1
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/LICENSE +21 -0
- package/README.md +96 -0
- package/dist/.api-emit.stamp +1 -0
- package/dist/.build-meta.json +6 -0
- package/dist/agent/events.js +1 -0
- package/dist/agent/index.js +2 -0
- package/dist/agent/loop.js +139 -0
- package/dist/agent/queue.js +119 -0
- package/dist/agent/stream.js +62 -0
- package/dist/agent/tools-batch.js +221 -0
- package/dist/agent/types.js +8 -0
- package/dist/api/berry-agent-llm.d.ts +18 -0
- package/dist/api/berry-agent.d.ts +9 -0
- package/dist/api/surface.json +1632 -0
- package/dist/api/tsconfig.paths.json +12 -0
- package/dist/api/typebox-compile.d.ts +2 -0
- package/dist/api/typebox-value.d.ts +2 -0
- package/dist/api/typebox.d.ts +2 -0
- package/dist/browser/cdp.js +256 -0
- package/dist/browser/codes.js +31 -0
- package/dist/browser/discover.js +107 -0
- package/dist/browser/engine.js +169 -0
- package/dist/browser/index.js +17 -0
- package/dist/browser/install.js +342 -0
- package/dist/browser/page.js +321 -0
- package/dist/browser/service.js +158 -0
- package/dist/browser/tools.js +198 -0
- package/dist/browser/types.js +81 -0
- package/dist/channels/ask-queue.js +82 -0
- package/dist/channels/commands.js +129 -0
- package/dist/channels/engine/cell.js +143 -0
- package/dist/channels/engine/diff.js +143 -0
- package/dist/channels/engine/engine.js +416 -0
- package/dist/channels/engine/index.js +8 -0
- package/dist/channels/engine/input-keys.js +86 -0
- package/dist/channels/engine/input.js +596 -0
- package/dist/channels/engine/memory-io.js +71 -0
- package/dist/channels/engine/process-io.js +38 -0
- package/dist/channels/engine/types.js +17 -0
- package/dist/channels/engine/width.js +122 -0
- package/dist/channels/index.js +15 -0
- package/dist/channels/registry.js +56 -0
- package/dist/channels/sdk/admit.js +29 -0
- package/dist/channels/sdk/backend.js +102 -0
- package/dist/channels/sdk/cursor.js +56 -0
- package/dist/channels/sdk/index.js +20 -0
- package/dist/channels/sdk/jsonl.js +208 -0
- package/dist/channels/sdk/protocol.js +24 -0
- package/dist/channels/sdk/schema.js +91 -0
- package/dist/channels/sdk/wire-core.js +446 -0
- package/dist/channels/service.js +169 -0
- package/dist/channels/tui/autocomplete/autocomplete.js +42 -0
- package/dist/channels/tui/autocomplete/file-mentions.js +106 -0
- package/dist/channels/tui/autocomplete/popup.js +148 -0
- package/dist/channels/tui/autocomplete/provider.js +7 -0
- package/dist/channels/tui/autocomplete/token.js +68 -0
- package/dist/channels/tui/backend/ansi-rows.js +211 -0
- package/dist/channels/tui/backend/main-screen.js +207 -0
- package/dist/channels/tui/backend/osc.js +91 -0
- package/dist/channels/tui/backend/transcript.js +230 -0
- package/dist/channels/tui/backend/tui-backend.js +915 -0
- package/dist/channels/tui/editor/editor-model.js +543 -0
- package/dist/channels/tui/editor/editor-view.js +140 -0
- package/dist/channels/tui/editor/editor.js +275 -0
- package/dist/channels/tui/editor/undo-stack.js +35 -0
- package/dist/channels/tui/editor/visual-lines.js +126 -0
- package/dist/channels/tui/editor/word-nav.js +106 -0
- package/dist/channels/tui/history/history-viewer.js +403 -0
- package/dist/channels/tui/index.js +3 -0
- package/dist/channels/tui/layout.js +167 -0
- package/dist/channels/tui/markdown/blocks.js +111 -0
- package/dist/channels/tui/markdown/inline.js +75 -0
- package/dist/channels/tui/markdown/markdown.js +182 -0
- package/dist/channels/tui/memory/memory-viewer.js +540 -0
- package/dist/channels/tui/overlay/alt-screen.js +105 -0
- package/dist/channels/tui/overlay/overlay.js +57 -0
- package/dist/channels/tui/overlay/select-confirm.js +156 -0
- package/dist/channels/tui/panels/todo-panel.js +54 -0
- package/dist/channels/tui/panels/tool-progress-panel.js +93 -0
- package/dist/channels/tui/scroll/scroll-view.js +254 -0
- package/dist/channels/tui/status/status-line.js +76 -0
- package/dist/channels/tui/text.js +38 -0
- package/dist/channels/tui/theme.js +41 -0
- package/dist/channels/types.js +11 -0
- package/dist/channels/ui-core.js +209 -0
- package/dist/checkpoint/capture.js +45 -0
- package/dist/checkpoint/codes.js +33 -0
- package/dist/checkpoint/command.js +82 -0
- package/dist/checkpoint/gate.js +48 -0
- package/dist/checkpoint/index.js +20 -0
- package/dist/checkpoint/restore.js +172 -0
- package/dist/checkpoint/store.js +247 -0
- package/dist/checkpoint/types.js +4 -0
- package/dist/checkpoint/walk.js +146 -0
- package/dist/compaction/ccr-tools.js +112 -0
- package/dist/compaction/ccr.js +84 -0
- package/dist/compaction/codes.js +21 -0
- package/dist/compaction/index.js +18 -0
- package/dist/compaction/policy.js +200 -0
- package/dist/compaction/service.js +422 -0
- package/dist/compaction/slots.js +121 -0
- package/dist/compaction/types.js +10 -0
- package/dist/context/codes.js +40 -0
- package/dist/context/events.js +160 -0
- package/dist/context/index.js +13 -0
- package/dist/context/logger.js +136 -0
- package/dist/context/scope.js +182 -0
- package/dist/context/workspace.js +104 -0
- package/dist/contracts/agent-events.d.ts +73 -0
- package/dist/contracts/agent-events.js +16 -0
- package/dist/contracts/api.d.ts +249 -0
- package/dist/contracts/api.js +299 -0
- package/dist/contracts/approval.d.ts +37 -0
- package/dist/contracts/approval.js +9 -0
- package/dist/contracts/env-ref.d.ts +41 -0
- package/dist/contracts/env-ref.js +32 -0
- package/dist/contracts/errors.d.ts +56 -0
- package/dist/contracts/errors.js +266 -0
- package/dist/contracts/events.d.ts +70 -0
- package/dist/contracts/events.js +329 -0
- package/dist/contracts/index.d.ts +32 -0
- package/dist/contracts/index.js +26 -0
- package/dist/contracts/llm.d.ts +275 -0
- package/dist/contracts/llm.js +12 -0
- package/dist/contracts/messages.d.ts +63 -0
- package/dist/contracts/messages.js +65 -0
- package/dist/contracts/redact.d.ts +46 -0
- package/dist/contracts/redact.js +223 -0
- package/dist/contracts/tools.d.ts +197 -0
- package/dist/contracts/tools.js +33 -0
- package/dist/contracts/types.d.ts +302 -0
- package/dist/contracts/types.js +50 -0
- package/dist/contracts/ui.d.ts +122 -0
- package/dist/contracts/ui.js +15 -0
- package/dist/conversation/agent-service.js +61 -0
- package/dist/conversation/approval-wiring.js +82 -0
- package/dist/conversation/backoff.js +38 -0
- package/dist/conversation/codes.js +47 -0
- package/dist/conversation/control-tools.js +102 -0
- package/dist/conversation/control.js +210 -0
- package/dist/conversation/driver.js +922 -0
- package/dist/conversation/index.js +12 -0
- package/dist/conversation/model-visible.js +169 -0
- package/dist/conversation/open-tools.js +126 -0
- package/dist/conversation/reseed.js +132 -0
- package/dist/conversation/sessions.js +215 -0
- package/dist/conversation/todo.js +203 -0
- package/dist/conversation/types.js +35 -0
- package/dist/conversation/wiring.js +204 -0
- package/dist/credentials/codes.js +59 -0
- package/dist/credentials/commands.js +186 -0
- package/dist/credentials/env-ref.js +34 -0
- package/dist/credentials/index.js +28 -0
- package/dist/credentials/migration.js +18 -0
- package/dist/credentials/oauth.js +266 -0
- package/dist/credentials/refresh.js +152 -0
- package/dist/credentials/secrets.js +118 -0
- package/dist/credentials/types.js +30 -0
- package/dist/exec/bash.js +279 -0
- package/dist/exec/codes.js +37 -0
- package/dist/exec/env.js +99 -0
- package/dist/exec/environment.js +39 -0
- package/dist/exec/git-guard.js +623 -0
- package/dist/exec/index.js +24 -0
- package/dist/exec/registry.js +120 -0
- package/dist/exec/spawn.js +281 -0
- package/dist/exec/tail.js +77 -0
- package/dist/exec/types.js +5 -0
- package/dist/goal/codes.js +33 -0
- package/dist/goal/command.js +175 -0
- package/dist/goal/fold.js +121 -0
- package/dist/goal/gates.js +122 -0
- package/dist/goal/index.js +22 -0
- package/dist/goal/migration.js +48 -0
- package/dist/goal/service.js +501 -0
- package/dist/goal/todo-tool.js +174 -0
- package/dist/goal/types.js +1 -0
- package/dist/goal/update-tool.js +46 -0
- package/dist/host/approval-cmd.js +276 -0
- package/dist/host/assembly.js +1146 -0
- package/dist/host/boot-failures.js +104 -0
- package/dist/host/budget-advisory.js +74 -0
- package/dist/host/budget-broadcast.js +50 -0
- package/dist/host/builtins.js +54 -0
- package/dist/host/cli.js +544 -0
- package/dist/host/codes.js +120 -0
- package/dist/host/config-schema.js +195 -0
- package/dist/host/conversation-stack.js +654 -0
- package/dist/host/core-plugins.js +1685 -0
- package/dist/host/credentials-cmd.js +42 -0
- package/dist/host/disclosure.js +30 -0
- package/dist/host/dispatch.js +105 -0
- package/dist/host/doors-cmd.js +154 -0
- package/dist/host/dump-config.js +44 -0
- package/dist/host/hook-dispatch-guard.js +27 -0
- package/dist/host/import-gate.js +153 -0
- package/dist/host/index.js +54 -0
- package/dist/host/issue-session.js +241 -0
- package/dist/host/loader.js +372 -0
- package/dist/host/main.js +161 -0
- package/dist/host/manifest.js +381 -0
- package/dist/host/mcp-entry.js +53 -0
- package/dist/host/plugin-boot.js +952 -0
- package/dist/host/plugin-context.js +672 -0
- package/dist/host/plugin-install.js +480 -0
- package/dist/host/plugin-reload.js +124 -0
- package/dist/host/plugin-store.js +462 -0
- package/dist/host/plugin-tools.js +359 -0
- package/dist/host/plugin-uninstall.js +257 -0
- package/dist/host/plugins-cmd.js +302 -0
- package/dist/host/plugins-command.js +130 -0
- package/dist/host/plugins-config.js +195 -0
- package/dist/host/prompt-sections.js +133 -0
- package/dist/host/run-entry.js +544 -0
- package/dist/host/runtime.js +209 -0
- package/dist/host/scheduler-tick.js +294 -0
- package/dist/host/serve-daemon.js +501 -0
- package/dist/host/serve-entry.js +279 -0
- package/dist/host/session-anchor.js +41 -0
- package/dist/host/sessions-cmd.js +219 -0
- package/dist/host/sessions-face.js +47 -0
- package/dist/host/settings-store.js +112 -0
- package/dist/host/signals.js +69 -0
- package/dist/host/single-instance.js +105 -0
- package/dist/host/subagent-factory.js +291 -0
- package/dist/host/testkit/harness.js +283 -0
- package/dist/host/testkit/index.js +14 -0
- package/dist/host/testkit/matrix.js +302 -0
- package/dist/host/tool-policy-store.js +177 -0
- package/dist/host/triggers.js +212 -0
- package/dist/host/tui-entry.js +216 -0
- package/dist/host/webui-bridge.js +165 -0
- package/dist/issue/codes.js +38 -0
- package/dist/issue/filter.js +146 -0
- package/dist/issue/github.js +116 -0
- package/dist/issue/index.js +17 -0
- package/dist/issue/mount.js +70 -0
- package/dist/issue/poll.js +58 -0
- package/dist/issue/service.js +341 -0
- package/dist/issue/tools.js +70 -0
- package/dist/issue/types.js +34 -0
- package/dist/issue/webhook.js +126 -0
- package/dist/llm/codes.js +77 -0
- package/dist/llm/complete.js +196 -0
- package/dist/llm/events.js +15 -0
- package/dist/llm/index.js +24 -0
- package/dist/llm/inflight.js +65 -0
- package/dist/llm/model-id.js +58 -0
- package/dist/llm/provider-face.d.ts +32 -0
- package/dist/llm/provider-face.js +34 -0
- package/dist/llm/recovery.js +146 -0
- package/dist/llm/runtime.js +46 -0
- package/dist/llm/stream-fn.js +147 -0
- package/dist/lsp/codes.js +31 -0
- package/dist/lsp/connection.js +147 -0
- package/dist/lsp/frame.js +110 -0
- package/dist/lsp/index.js +16 -0
- package/dist/lsp/inject.js +58 -0
- package/dist/lsp/instance.js +264 -0
- package/dist/lsp/service.js +522 -0
- package/dist/lsp/tools.js +53 -0
- package/dist/lsp/types.js +201 -0
- package/dist/mcp/bridge.js +222 -0
- package/dist/mcp/codes.js +21 -0
- package/dist/mcp/index.js +19 -0
- package/dist/mcp/jsonrpc.js +230 -0
- package/dist/mcp/service.js +125 -0
- package/dist/mcp/tools.js +145 -0
- package/dist/mcp/types.js +108 -0
- package/dist/memory/cite.js +131 -0
- package/dist/memory/codes.js +50 -0
- package/dist/memory/command.js +71 -0
- package/dist/memory/consolidate.js +219 -0
- package/dist/memory/cycle.js +109 -0
- package/dist/memory/dao.js +878 -0
- package/dist/memory/diff.js +238 -0
- package/dist/memory/extract.js +181 -0
- package/dist/memory/fts.js +58 -0
- package/dist/memory/index.js +42 -0
- package/dist/memory/inject.js +354 -0
- package/dist/memory/merge.js +178 -0
- package/dist/memory/migration.js +132 -0
- package/dist/memory/pollution.js +59 -0
- package/dist/memory/port.js +385 -0
- package/dist/memory/review.js +201 -0
- package/dist/memory/scan.js +89 -0
- package/dist/memory/tools.js +508 -0
- package/dist/memory/types.js +140 -0
- package/dist/obs/codes.js +38 -0
- package/dist/obs/db.js +115 -0
- package/dist/obs/index.js +20 -0
- package/dist/obs/rollup.js +61 -0
- package/dist/obs/service.js +363 -0
- package/dist/obs/session-tools.js +282 -0
- package/dist/obs/session-view.js +225 -0
- package/dist/obs/tool.js +97 -0
- package/dist/obs/types.js +1 -0
- package/dist/persist/audit.js +63 -0
- package/dist/persist/aux.js +39 -0
- package/dist/persist/codes.js +35 -0
- package/dist/persist/index.js +30 -0
- package/dist/persist/load-history.js +50 -0
- package/dist/persist/migrations.js +37 -0
- package/dist/persist/paths.js +108 -0
- package/dist/persist/persistence.js +229 -0
- package/dist/persist/schema.js +99 -0
- package/dist/persist/secret-box.js +95 -0
- package/dist/persist/store.js +706 -0
- package/dist/persist/write-behind.js +238 -0
- package/dist/safety/approval.js +171 -0
- package/dist/safety/bwrap.js +123 -0
- package/dist/safety/codes.js +57 -0
- package/dist/safety/danger.js +505 -0
- package/dist/safety/gate.js +226 -0
- package/dist/safety/index.js +24 -0
- package/dist/safety/presets.js +73 -0
- package/dist/safety/roots.js +139 -0
- package/dist/safety/sandbox.js +214 -0
- package/dist/safety/seatbelt.js +88 -0
- package/dist/safety/sensitive.js +34 -0
- package/dist/safety/tool-policy.js +203 -0
- package/dist/safety/types.js +13 -0
- package/dist/scheduler/codes.js +54 -0
- package/dist/scheduler/cron-backend.js +135 -0
- package/dist/scheduler/engine.js +280 -0
- package/dist/scheduler/gates.js +60 -0
- package/dist/scheduler/index.js +25 -0
- package/dist/scheduler/migration.js +22 -0
- package/dist/scheduler/runner.js +171 -0
- package/dist/scheduler/schedule.js +193 -0
- package/dist/scheduler/service.js +283 -0
- package/dist/scheduler/tick.js +139 -0
- package/dist/scheduler/types.js +1 -0
- package/dist/sdk/http.js +865 -0
- package/dist/sdk/index.js +22 -0
- package/dist/sdk/mcp.js +289 -0
- package/dist/sdk/plugin-route-registry.js +126 -0
- package/dist/sdk/plugin-routes.js +149 -0
- package/dist/sdk/security.js +116 -0
- package/dist/sdk/types.js +32 -0
- package/dist/session/budget.js +159 -0
- package/dist/session/codes.js +40 -0
- package/dist/session/derive.js +180 -0
- package/dist/session/event-data.js +1 -0
- package/dist/session/fork.js +72 -0
- package/dist/session/import-gates.js +148 -0
- package/dist/session/index.js +18 -0
- package/dist/session/recover.js +103 -0
- package/dist/session/session.js +279 -0
- package/dist/session/snapshot.js +107 -0
- package/dist/skills/agents.js +242 -0
- package/dist/skills/codes.js +51 -0
- package/dist/skills/discovery.js +266 -0
- package/dist/skills/frontmatter.js +215 -0
- package/dist/skills/index.js +28 -0
- package/dist/skills/load.js +118 -0
- package/dist/skills/manage.js +201 -0
- package/dist/skills/registry.js +138 -0
- package/dist/skills/render.js +124 -0
- package/dist/skills/sections.js +171 -0
- package/dist/skills/types.js +21 -0
- package/dist/subagent/codes.js +50 -0
- package/dist/subagent/declarative.js +55 -0
- package/dist/subagent/index.js +19 -0
- package/dist/subagent/notify.js +51 -0
- package/dist/subagent/provide.js +7 -0
- package/dist/subagent/registry.js +149 -0
- package/dist/subagent/service.js +338 -0
- package/dist/subagent/surface.js +44 -0
- package/dist/subagent/tool.js +153 -0
- package/dist/subagent/types.js +25 -0
- package/dist/tools/apply-patch.js +164 -0
- package/dist/tools/codes.js +109 -0
- package/dist/tools/fs.js +501 -0
- package/dist/tools/index.js +17 -0
- package/dist/tools/observed.js +99 -0
- package/dist/tools/pipeline.js +176 -0
- package/dist/tools/protected-read.js +54 -0
- package/dist/tools/registry.js +250 -0
- package/dist/tools/search.js +451 -0
- package/dist/tools/worktree.js +327 -0
- package/dist/web/codes.js +37 -0
- package/dist/web/gate.js +43 -0
- package/dist/web/hygiene.js +195 -0
- package/dist/web/index.js +16 -0
- package/dist/web/service.js +207 -0
- package/dist/web/ssrf-guard.js +44 -0
- package/dist/web/tool.js +76 -0
- package/dist/web/types.js +10 -0
- package/dist/webui/assets/index-B-t2O8gh.js +22 -0
- package/dist/webui/assets/index-DOlgSZ9Q.css +2 -0
- package/dist/webui/index.html +14 -0
- package/dist/webui/index.js +14 -0
- package/dist/webui/server.js +549 -0
- package/dist/webui/types.js +38 -0
- package/examples/README.md +26 -0
- package/examples/minimal-code-plugin/entry.js +43 -0
- package/examples/minimal-code-plugin/package.json +12 -0
- package/examples/pure-skill-pack/package.json +14 -0
- package/examples/pure-skill-pack/skills/markdown-table/SKILL.md +32 -0
- package/package.json +86 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* host/boot-failures — 启动失败点名账本(03 §5.7 失败三档②的记账面)。
|
|
3
|
+
*
|
|
4
|
+
* 行级装载失败的用户插件记入 `<dataDir>/boot-failures.json`:`{id, version,
|
|
5
|
+
* count}` 点名——count 随每次启动失败累加(启动横幅聚合 warn 的数据源);
|
|
6
|
+
* 装载成功即清名(横幅只报当下仍坏的行)。core: 行不适用(fail-loud 拒启
|
|
7
|
+
* 狗粮纪律,§5.7);清单校验失败属档①拒换、不进本账本。
|
|
8
|
+
*
|
|
9
|
+
* fs 动作全注入(内存 Map 可测);文件形 = 单 JSON 对象 `{ failures:
|
|
10
|
+
* Record<id, {version, count}> }`(人读可改——诊断面友好)。
|
|
11
|
+
*/
|
|
12
|
+
import { readFileSync, writeFileSync } from 'node:fs';
|
|
13
|
+
/**
|
|
14
|
+
* `[码] 报文` 形单源铸造(2026-09-13 复盘发现 ⑪——修前六处手抄:warn 横幅
|
|
15
|
+
* ×2 / CLI·TUI plugins list 失败行 / reload 行级失败清单 / plugin_boot 工具
|
|
16
|
+
* 面失败行 / 本件 lastError 账本)。回执、账本、横幅同一形——变格式只改此
|
|
17
|
+
* 处;结构满足 BootFailureDetail 即可喂入(id 徽记位由各消费面自拼)。
|
|
18
|
+
*/
|
|
19
|
+
export function formatPluginFailureText(failure) {
|
|
20
|
+
return `[${failure.code}] ${failure.message}`;
|
|
21
|
+
}
|
|
22
|
+
/** 缺省真盘实现(读失败一律 null——账本残缺不拦启动序,视同空账本) */
|
|
23
|
+
function defaultFs() {
|
|
24
|
+
return {
|
|
25
|
+
read: (path) => {
|
|
26
|
+
try {
|
|
27
|
+
return readFileSync(path, 'utf8');
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return null; // ENOENT / 坏权限——空账本语义(宁空勿炸:账本是诊断面非真相源)
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
write: (path, text) => writeFileSync(path, text),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* 读账本(坏 JSON 视同空——账本非真相源,残缺不拦启动)。
|
|
38
|
+
*/
|
|
39
|
+
export function readBootFailures(path, fs = defaultFs()) {
|
|
40
|
+
const text = fs.read(path);
|
|
41
|
+
if (text === null)
|
|
42
|
+
return { failures: {} };
|
|
43
|
+
try {
|
|
44
|
+
const doc = JSON.parse(text);
|
|
45
|
+
if (doc === null || typeof doc !== 'object' || typeof doc.failures !== 'object' || doc.failures === null) {
|
|
46
|
+
return { failures: {} };
|
|
47
|
+
}
|
|
48
|
+
const failures = {};
|
|
49
|
+
for (const [id, entry] of Object.entries(doc.failures)) {
|
|
50
|
+
if (typeof entry === 'object' &&
|
|
51
|
+
entry !== null &&
|
|
52
|
+
typeof entry.version === 'string' &&
|
|
53
|
+
typeof entry.count === 'number') {
|
|
54
|
+
// obs-a 扩形字段容错携带:字符串在场即带出,非字符串/缺席静默剥除
|
|
55
|
+
// (旧形条目照常解析——缺席容错读,不迁移)
|
|
56
|
+
failures[id] = {
|
|
57
|
+
version: entry.version,
|
|
58
|
+
count: entry.count,
|
|
59
|
+
...(typeof entry.lastError === 'string'
|
|
60
|
+
? { lastError: entry.lastError }
|
|
61
|
+
: {}),
|
|
62
|
+
...(typeof entry.lastFailedAt === 'string'
|
|
63
|
+
? { lastFailedAt: entry.lastFailedAt }
|
|
64
|
+
: {}),
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return { failures };
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return { failures: {} }; // 坏 JSON——空账本语义
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* 记一次启动失败(count 累加;version 就地刷新为本次版本;lastError/lastFailedAt
|
|
76
|
+
* 刷新为最近一次——03 §5.7② obs-a)——读改写整账本。
|
|
77
|
+
*/
|
|
78
|
+
export function recordBootFailure(path, id, version, failure, fs = defaultFs()) {
|
|
79
|
+
const doc = readBootFailures(path, fs);
|
|
80
|
+
const prev = doc.failures[id];
|
|
81
|
+
const next = { ...doc.failures };
|
|
82
|
+
// lastError = `[码] 报文` 形帽 500 字符(obs-a 定形注——防账本膨胀;超长截断;
|
|
83
|
+
// 格式单源 = formatPluginFailureText——发现 ⑪)
|
|
84
|
+
const text = formatPluginFailureText(failure);
|
|
85
|
+
next[id] = {
|
|
86
|
+
version,
|
|
87
|
+
count: (prev?.count ?? 0) + 1,
|
|
88
|
+
lastError: text.length > 500 ? text.slice(0, 500) : text,
|
|
89
|
+
lastFailedAt: new Date().toISOString(),
|
|
90
|
+
};
|
|
91
|
+
const written = { failures: next };
|
|
92
|
+
fs.write(path, `${JSON.stringify(written, null, 2)}\n`);
|
|
93
|
+
return written;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* 清名(装载成功即报捷——横幅只报仍坏行)。
|
|
97
|
+
*/
|
|
98
|
+
export function clearBootFailure(path, id, fs = defaultFs()) {
|
|
99
|
+
const doc = readBootFailures(path, fs);
|
|
100
|
+
const { [id]: _removed, ...rest } = doc.failures;
|
|
101
|
+
const written = { failures: rest };
|
|
102
|
+
fs.write(path, `${JSON.stringify(written, null, 2)}\n`);
|
|
103
|
+
return written;
|
|
104
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* host/budget-advisory — 预算预警文案铸造(04 §5 软着陆层——遗漏审计批 H)。
|
|
3
|
+
*
|
|
4
|
+
* 04 §5 预算预警条款的文案本体位:档位判定与投影读面在 llm 件单源
|
|
5
|
+
* (budgetAdvisoryLevel / backgroundUsage),本件只做两件事——
|
|
6
|
+
* 1. 预算帽下活判据(run 级后台性——2026-09-13 全面复盘修复批):本层
|
|
7
|
+
* 只对预算帽下的活生效(headless root run、后台道无头 run〔tick 用户行
|
|
8
|
+
* /goal 挂钟行/run --background〕、子代理);前台 run 恒放行无池可警
|
|
9
|
+
* (origin 会话级两判 + backgroundLane run 级声明位——见总入口注);
|
|
10
|
+
* 2. root 与 subagent 各配分级 wrap-up 文案(三档 × 两族):CRITICAL 档指令
|
|
11
|
+
* 「收尾:陈述当前结论与未竟项」而非续开新腿——预算尽头的最后 token
|
|
12
|
+
* 花在收口上。
|
|
13
|
+
*
|
|
14
|
+
* 产物 = 纯文本(经 driver 的 budgetAdvisory 注入位以瞬态 UserMessage 进请求
|
|
15
|
+
* 组装尾——不落 durable 不进快照,与披露段/todo 回看同律)。本件零状态零 IO
|
|
16
|
+
* (纯函数族),装配根闭包消费(assembly)。
|
|
17
|
+
*/
|
|
18
|
+
import { budgetAdvisoryLevel } from '../llm/index.js';
|
|
19
|
+
/** 百分比渲染(四舍五入取整——文案显示位非账面值) */
|
|
20
|
+
function pctOf(ratio) {
|
|
21
|
+
return Math.round(ratio * 100);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* root 档文案族(headless 主循环——issue 道 / 触发器道 / goal 续跑道):
|
|
25
|
+
* 面向「任务的所有者」——三档递进收敛(收敛探索面 → 停开新腿 → 立即收尾)。
|
|
26
|
+
*/
|
|
27
|
+
function rootMessage(level, usage) {
|
|
28
|
+
const pct = pctOf(usage.ratio);
|
|
29
|
+
const scale = `当日后台预算已用约 ${pct}%(${usage.spent}/${usage.limit} tokens)`;
|
|
30
|
+
if (level === 'notice') {
|
|
31
|
+
return `[预算提示 NOTICE] ${scale}。请收敛探索面,优先主线任务。`;
|
|
32
|
+
}
|
|
33
|
+
if (level === 'urgent') {
|
|
34
|
+
return `[预算预警 URGENT] ${scale}。请停止开启新的工作腿,专注完成当前任务。`;
|
|
35
|
+
}
|
|
36
|
+
return `[预算临界 CRITICAL] ${scale}。请立即收尾:陈述当前结论与未竟项,不要再开启新的工作腿。`;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* subagent 档文案族(委派子代理——任务黑盒):面向「单任务的执行者」——
|
|
40
|
+
* 收敛本任务范围;CRITICAL 档汇报归路(父会话将据此结算)。子代理另有 90%
|
|
41
|
+
* reserve 线强停(subagent-factory 执法),本层是强停之前的软着陆带。
|
|
42
|
+
*/
|
|
43
|
+
function subagentMessage(level, usage) {
|
|
44
|
+
const pct = pctOf(usage.ratio);
|
|
45
|
+
const scale = `当日后台预算池已用约 ${pct}%`;
|
|
46
|
+
if (level === 'notice') {
|
|
47
|
+
return `[预算提示 NOTICE] ${scale}。请收敛本任务范围,避免不必要的大范围探索。`;
|
|
48
|
+
}
|
|
49
|
+
if (level === 'urgent') {
|
|
50
|
+
return `[预算预警 URGENT] ${scale}。请停止扩展任务面,专注完成当前子任务。`;
|
|
51
|
+
}
|
|
52
|
+
return `[预算临界 CRITICAL] ${scale}。请立即收尾:汇报当前结论与未竟项(父会话将据此结算),不要再开启新的工作腿。`;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* 预算预警文案总入口(04 §5——root/subagent 分族 + run 级后台性判据):
|
|
56
|
+
* - 未达 notice 线(< 70%)→ null 零注入;
|
|
57
|
+
* - origin 'trigger'(headless root 两道:issue-session / triggers)→ root 族;
|
|
58
|
+
* - origin 'delegation'(in-process 子代理)→ subagent 族;
|
|
59
|
+
* - origin 余三(conversation/import/fork)按 run 级后台道声明位:
|
|
60
|
+
* backgroundRun true(tick 用户行/goal 挂钟行共用 runSession 声明、
|
|
61
|
+
* `run --background` 入口声明)→ root 族;缺省 false = 前台恒 null
|
|
62
|
+
* (无池可警——goal 前台轮记 goal 件内预算非后台日池,同 null);
|
|
63
|
+
* - 不在册会话(origin undefined,如 retire 后)同 null。
|
|
64
|
+
*/
|
|
65
|
+
export function budgetAdvisoryMessage(usage, origin, backgroundRun) {
|
|
66
|
+
const level = budgetAdvisoryLevel(usage.ratio);
|
|
67
|
+
if (level === null)
|
|
68
|
+
return null;
|
|
69
|
+
if (origin === 'delegation')
|
|
70
|
+
return subagentMessage(level, usage);
|
|
71
|
+
if (origin === 'trigger' || backgroundRun)
|
|
72
|
+
return rootMessage(level, usage);
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/** 广播轮询间隔缺省(1s——issue watcher 原值平移;测试注窄值驱动时序) */
|
|
2
|
+
const DEFAULT_POLL_MS = 1000;
|
|
3
|
+
/**
|
|
4
|
+
* 宿主级 budget-extended 广播件真身(装配根单真身——issue 工厂/goal 件/
|
|
5
|
+
* 未来会话级编排位共用;issue 工厂注入位缺席时工厂自建私有实例走同一
|
|
6
|
+
* 实现,单源零重复)。
|
|
7
|
+
*/
|
|
8
|
+
export function createBudgetBroadcast(options) {
|
|
9
|
+
const canAfford = options.canAfford;
|
|
10
|
+
const pollMs = options.pollMs ?? DEFAULT_POLL_MS;
|
|
11
|
+
/** 停靠登记表(三面共享——电平判扫描面,进程生命周期) */
|
|
12
|
+
const entries = new Set();
|
|
13
|
+
/** 停机已收口旗(dispose 后 register 诚实拒——不静默吞登记) */
|
|
14
|
+
let disposed = false;
|
|
15
|
+
// 电平判 watcher(原 issue 工厂私有 watcher 逐字升格):有停靠项且
|
|
16
|
+
// canAfford 恢复即逐项唤醒(snapshot 遍历——wake 内自摘登记不扰迭代)
|
|
17
|
+
const watcher = setInterval(() => {
|
|
18
|
+
if (entries.size === 0)
|
|
19
|
+
return;
|
|
20
|
+
if (!canAfford())
|
|
21
|
+
return;
|
|
22
|
+
for (const entry of [...entries])
|
|
23
|
+
entry.wake();
|
|
24
|
+
}, pollMs);
|
|
25
|
+
watcher.unref();
|
|
26
|
+
return {
|
|
27
|
+
register(entry) {
|
|
28
|
+
if (disposed)
|
|
29
|
+
throw new Error('budget-broadcast 已 dispose——停靠项登记不可达(装配序错位防御)');
|
|
30
|
+
entries.add(entry);
|
|
31
|
+
},
|
|
32
|
+
unregister(entry) {
|
|
33
|
+
entries.delete(entry);
|
|
34
|
+
},
|
|
35
|
+
size() {
|
|
36
|
+
return entries.size;
|
|
37
|
+
},
|
|
38
|
+
dispose() {
|
|
39
|
+
if (disposed)
|
|
40
|
+
return; // 幂等(宿主 closer 双跑无害)
|
|
41
|
+
disposed = true;
|
|
42
|
+
clearInterval(watcher);
|
|
43
|
+
// 逐项停机收口(issue 面的 resolve paused 语义住 entry 自身;goal 面
|
|
44
|
+
// 停靠事实本 durable——goals 表/挂钟行/会话词全在,dispose 可无操作)
|
|
45
|
+
for (const entry of [...entries])
|
|
46
|
+
entry.dispose?.();
|
|
47
|
+
entries.clear();
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* host/builtins — Node 内建模块裸名闭集(import 门禁裁决核的裸名分类面)。
|
|
3
|
+
*
|
|
4
|
+
* 名单 = Node LTS 内建集(node: 协议合法名)。白名单道②只收 `node:` 前缀
|
|
5
|
+
* 形(03 §3.3 字面)——本清单用于裁决核把裸名分类为「裸内建被拒——用
|
|
6
|
+
* node: 前缀」(报文指路),与裸第三方说明符的「树内不可解析」报文分流。
|
|
7
|
+
* 随 Node 版本演进的名单差异:门禁语义按「可被 node: 前缀合法访问的内建」
|
|
8
|
+
* 对账,新增内建随真实需求补列(fail-closed:不在清单的裸名走裸说明符道,
|
|
9
|
+
* 树内不可解析同拒)。
|
|
10
|
+
*/
|
|
11
|
+
export const BARE_BUILTINS = new Set([
|
|
12
|
+
'assert',
|
|
13
|
+
'async_hooks',
|
|
14
|
+
'buffer',
|
|
15
|
+
'child_process',
|
|
16
|
+
'cluster',
|
|
17
|
+
'console',
|
|
18
|
+
'constants',
|
|
19
|
+
'crypto',
|
|
20
|
+
'dgram',
|
|
21
|
+
'diagnostics_channel',
|
|
22
|
+
'dns',
|
|
23
|
+
'domain',
|
|
24
|
+
'events',
|
|
25
|
+
'fs',
|
|
26
|
+
'http',
|
|
27
|
+
'http2',
|
|
28
|
+
'https',
|
|
29
|
+
'inspector',
|
|
30
|
+
'module',
|
|
31
|
+
'net',
|
|
32
|
+
'os',
|
|
33
|
+
'path',
|
|
34
|
+
'perf_hooks',
|
|
35
|
+
'process',
|
|
36
|
+
'punycode',
|
|
37
|
+
'querystring',
|
|
38
|
+
'readline',
|
|
39
|
+
'repl',
|
|
40
|
+
'stream',
|
|
41
|
+
'string_decoder',
|
|
42
|
+
'sys',
|
|
43
|
+
'timers',
|
|
44
|
+
'tls',
|
|
45
|
+
'trace_events',
|
|
46
|
+
'tty',
|
|
47
|
+
'url',
|
|
48
|
+
'util',
|
|
49
|
+
'v8',
|
|
50
|
+
'vm',
|
|
51
|
+
'wasi',
|
|
52
|
+
'worker_threads',
|
|
53
|
+
'zlib',
|
|
54
|
+
]);
|