Repository navigation
feat(llm): add Cheaper Inference gateway template - #85
Open
aiapienthusiast wants to merge 612 commits into
Open
aiapienthusiast wants to merge 612 commits into
aiapienthusiast wants to merge 612 commits into
Conversation
各 agent 的 noa 归档基目录由本 run 的工作目录改为全局 workDir, 统一落在 <workDir>/noa/<SessionID>/。SessionID 全局唯一,同一基目录 内互不冲突。
0.3.10 的 /btw 条目把 NUL 字符本身字面写进了反引号,导致整个 CHANGELOG.md 被 git 和编辑器判为二进制/显示乱码。改为可读的 \u0000。
PR #102 给详情页加了 FindingTrafficPanel 并请求
GET /exploration/findings/{id}/traffic,但 demo mock handler 没有
对应路由,请求落到读兜底返回 {},前端读 data.bindings.length 时
因 undefined 崩掉整个概览 Tab —— 漏洞详情页白屏、展示不出信息。
补齐关联流量的全套 mock 路由(列表/绑定/编辑/解绑/排序/报文详情/
正文分页),返回与后端 db.FindingTraffic 一致的结构并维护内存态;
为 5 条代表性漏洞预置语义匹配的流量证据,其余走空状态;列表与详情
接口补上 traffic_count。
合并 codex/approval-record-filters,解决与 #133 在 web/src/components/approval-records.tsx 的冲突: - 导入同时保留 InterceptApprovalFilter 与 InterceptPending。 - load() 采用 #133 的独立待审批队列(Promise.allSettled 拉取 /intercept/pending),并把 #139 的 filter 参数透传给历史分页调用; 筛选只作用于历史记录,待处理队列不受 filter 影响,保证跨页/被筛 记录仍可审批。 - decide() 保留 #133 的乐观更新(移除 pendingRows 对应项)叠加 #139 决策后重新拉取以对齐筛选后的计数与行。 验证:前端 tsc 通过、Biome 仅剩预存告警;go build/vet 通过; db TestInterceptApprovalFilters(8 子用例)与 server TestInterceptFilterHTTP 在本地 dev 库均通过。 Closes #139
按创建时间分页平铺展示探索节点,作为探索链路图的时间轴视图, 复用同一份 exploration_nodes 数据,不影响链路图。 - 后端 NodesPage/NodesByIDs/EdgesTouching:分页下推 SQL, 支持 kind/state 过滤、payload/origin 搜索、正倒序, 并补出当页节点的相邻边与对端节点 - 新增 GET /api/exploration/nodes(仅本任务节点,不含继承) - 播报板:时间轴分行、按天分组、类型快筛、搜索防抖、 自动刷新、直播位未读提示、展开看上下游与 payload - 补 mock,NEXT_PUBLIC_MOCK=1 下可无后端预览
feat(web): 任务详情页新增探索链路播报板
引擎经权威解析器实际驱动的是 agentsForTask 构建的 per-task planner,但 cold-digest 落地时只在 buildPlannerWorker(全局 fallback pair)接了 SetCompactor,而该 pair 被解析器旁路、从不跑规划轮。结果 per-task planner 的 compactor 恒为 nil,OnPlannerRound 每轮直接 no-op —— round_no 不递增、 cold_since_round 从不盖章、digest 从不生成,与阈值无关。 在 agentsForTask 补上 SetCompactor,provider 用 plannerRuntime、model 用 task-router,与该 planner 实际运行所用模型一致(§4)。
…mpactor,修复冷节点压缩从不触发
判断任务详情页的前缀 "/function/tasks/" 在 trailingSlash 静态导出下 会把列表页自身(pathname 为 "/function/tasks/")也匹配进去,导致发布 二进制里的列表页走了 full-bleed 分支,侧边栏折叠、搜索、版本号、主题 与账号入口整条 header 都不渲染;dev 与 mock demo 未开 trailingSlash 故看不出问题。判前缀前先剥掉尾部斜杠。
per-task 路由(agentsForTask)落地后,这些全局副本已无人使用: - 全局 mainAgent(字段 + applyLLM 里的构造 + mainAgentRef getter):真正在跑的是 agentsForTask(t).main,全局那份从不被读取,mainAgentRef 无调用者。 - agentsForProfile:旧的任务 pin 路径,已被 agentsForTask 取代,无调用者。 - 随之失活的 profBundle 类型与 profAgents 缓存(仅初始化/清空、再无存取)一并移除。 均为编译器可确认的死代码,不改变任何执行路径;chat 的全局兜底(chatAgent/ chatAgentForProfile)、provider 缓存(provByProfile)等仍在用,保留不动。 全局 planner/worker 空壳与 Ready()/Mode() 改造留待第二步。
feat(web): 播报板每行显示节点 id
权威解析器(SetAuthoritativeAgentResolver)落地后,引擎每轮规划/worker 都走 per-task 的 agentsForTask 路由;applyLLM 经 buildPlannerWorker 构建、UseLLM 装入 的全局 planner/worker 从不被执行,仅充当 Ready() 的'已配置'探针。这层空壳是 功能容易被错误接线的温床(冷节点压缩此前就误接在它上面)。 改动: - 删除 buildPlannerWorker、providerForAgent(仅前者调用)、Engine.UseLLM/snapshot/ Mode、Engine.planner/worker/mu 字段。 - Ready() 改为读 SetReadiness 注入的谓词(基于 s.llmOn);snapshotFor 去掉全局 兜底,权威解析器返回 nil 即表示该任务不可用(语义不变)。 - applyLLM 不再构建全局 pair;NewServer 注入就绪谓词。 - 相应更新 3 处依赖旧注入方式的测试(改用权威解析器注入)。 生产行为不变(全局 pair 本就从不执行);go build/vet 通过,server 测试失败集合 与基线一致(均为需 DB 的既有用例),无新增失败。
上游/下游节点从只显示 id 改为悬停弹出节点名片(类型/状态/来源/时间/摘要/payload); 展开时顺带展示该节点锚定的资产(类型标签 + 可辨识文本)。 服务端 /exploration/nodes 新增 assets 字段(节点id→资产),读 exploration_anchors 并复用发现列表的资产打标逻辑;同页节点互引时用本页 items 兜底 refs 查找表。
feat(web): 播报板节点详情展示上游节点信息与锚定资产
搜索框在内容/来源之外,新增节点 id 匹配:纯数字或 UI 展示的「cskwork#41」形式 都会精确命中该节点。服务端 NodesPage 在 payload/origin ILIKE 的 OR 组里 追加 id 精确匹配;mock 同步;补 NodesPage id 搜索测试。
Composer 的 file input onChange 里同步执行 e.target.value = "" 清空了与 input 活绑定的 FileList。DraftChat 的 pickFiles 要先 await 建会话才取文件, 恢复执行时 FileList 已空,FormData 里没有 file 字段,后端返回 400。 改为在清空 value 之前把 FileList 快照成 File[] 再回调,onPickFiles 签名 随之改为 (files: File[]),调用方去掉各自的 Array.from。
删除入口区分两种模式(待领/运行中/已暂停的意图均可删除): - 假删除(默认):意图置 state='deleted'、删除原因记入新字段 delete_reason, 保留节点与全部产出/血缘,不再在图上另挂 fact。 - 真删除:物理删除意图及「仅由它支撑」的独占子孙(沿 yields/derived_from 级联到叶子),避免孤立数据;共享节点、目标、任务根事实保留。被删意图先做 token rollup 并清理 activity/副会话,被删 finding 先删 findings 行。 两种模式都照常用 cancelled 触发通知 planner(带删除前捕获的意图摘要 + 原因), planner 文案不再声称原因挂为事实。 - DB: 新增 SoftDeleteIntent、重写 CancelIntent 为深度独占级联;schema 加 delete_reason 列与 intent 的 deleted 状态(含旧库迁移)。 - 前端: 删除对话框加模式切换与动态说明,状态徽章/图标新增「已删除」, 播报板展开展示删除原因。
feat(intent): 意图删除支持假删除/真删除两种模式
feat(web): 播报板搜索支持按节点 id 筛选
docs(release): add changelog for v0.8.0
fix: clarify scope wording (cskwork#50) + v0.8.1 changelog
The zh-Hans/zh-Hant/ja catalogs continue one phrase across the bold and plain fragments, so the literal JSX space landed inside a word.
…skwork#62) The rewritten soft-delete copy promised that the planner is told the output is withdrawn, but server/task_control.go sets OutputDeletion only for the terminal states. For an open, running or paused intent the planner still gets the old "it will no longer execute" notice, so the dialog claimed an instruction that was never sent. The unfinished-worker fragments restore the pre-cskwork#62 wording verbatim in all six catalogs; the withdrawal wording stays for finished workers.
…cing, conditional rerun rollback
…ds and read tools
… two fix slices The cascade slice added one locale message and the withdrawal slice another, so the exact production key count is 2047. Records the withdrawal-persistence fix and the digest-covered survivor it does not reach.
…rker-output fix: allow deleting a finished worker's output (cskwork#62)
The release workflow reads log/changelog-<tag>.md for the release title and body; the v0.9.0 tag was pushed without it, so the release job failed at Prepare release notes and no binaries or checksums were attached.
fix(release): add the missing v0.9.0 release notes file
fix(db): sanitize NUL escapes in chat context snapshots
Align newly copied examples with PostgreSQL port 5432 while preserving explicit connection settings. Document database prerequisites and safe recovery in all six shipped languages, and exercise the real Windows binary against an isolated PostgreSQL cluster.
…ostgres fix: Windows PostgreSQL setup and native startup verification (cskwork#79)
Add a Cheaper Inference configuration template (cloud group) for new profiles: OpenAI Chat Completions at https://api.cheaperinference.com/v1, model gpt-5.4-mini, thinking and effort omitted, output limit 16384 sent as max_completion_tokens, context window 0. The model id and limits come from the gateway's public model list (checked 2026-11-05). Add the label and help text in all six shipped languages, extend the template tests and the catalog key count, and document the template in llm-providers.md and its five translated editions. No backend change.
zxfandyy
pushed a commit
to zxfandyy/scopeweaver
that referenced
this pull request
Nov 10, 2026
支持 Worker 对话实时调整执行方向
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #84
This PR adds a Cheaper Inference configuration template for new LLM profiles.
It uses the same pattern as #47 (OpenCode Go template).
Cheaper Inference is an OpenAI-compatible LLM gateway.
One API key gives access to models from several labs.
The template fills only the form of a new profile.
It does not save or activate a profile.
It keeps an entered API key, like the other cloud templates.
There is no backend change.
Template values
cheaper-inference(Cloud providers group).https://api.cheaperinference.com/v1.gpt-5.4-mini.16384, sent asmax_completion_tokens.0(200K default).https://api.cheaperinference.com/public/models(checked 2026-11-05).Changed files
web/src/lib/llm-profile-presets.ts: new cloud target.web/src/app/(main)/system/llm/page.tsx: new entry inCLOUD_PRESETS.web/src/i18n/messages/*.ts: label and help text in en, ko, zh-Hans, zh-Hant, ja and es.web/src/lib/llm-profile-presets.test.mjs: the new template in the existing template tests.web/src/i18n/i18n.test.mjs: catalog key count 3286 -> 3288.docs/llm-providers.mdand the five translated editions: new section after OpenCode Go.Checks
git diff --check: pass.