freecodego 0.1.6-alpha.2 → 0.1.6-alpha.2.3

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/README.i18n.yaml CHANGED
@@ -2,5 +2,5 @@
2
2
  # side as of the last confirmed-consistent state. Both languages carry equal authority;
3
3
  # after editing either side, bring the other along and re-record with:
4
4
  # pnpm run verify-translation-pairing --write packages/freecodego/bundle-latest/README.md
5
- README.md: c84b923b4a08b4d754752b5db63a5cc81d1ceac7
6
- README.zh.md: 27ad7904392963a4026a0d6949f638af7f5266f4
5
+ README.md: a55282f22dea6b39738bf359c0aa3942ae935bc9
6
+ README.zh.md: 6892acf2dc9a8ef0ccdc5f88b482d335f113320a
package/README.md CHANGED
@@ -14,6 +14,9 @@ Installable single-package FreeCodeGo composition for DeepSeek Harness `freecode
14
14
  ## Table of Contents
15
15
 
16
16
  - [Install](#install)
17
+ - [Free Models](#free-models)
18
+ - [Code Review](#code-review)
19
+ - [Project Memory](#project-memory)
17
20
  - [Agent Teams](#agent-teams)
18
21
  - [Model Experience](#model-experience)
19
22
  - [Known Limitations and Deferred Work](#known-limitations-and-deferred-work)
@@ -46,6 +49,47 @@ The workflow verifies the family, builds, packs, and creates the GitHub release
46
49
 
47
50
  -----
48
51
 
52
+ <a id="free-models"></a>
53
+ ## Free Models
54
+
55
+ <!-- generated:free-models:begin by scripts/generate-free-model-tables.ts -->
56
+ Every free row below comes from the provider's own directory, read when you open the picker, so this is what those directories returned on 2026-09-23 (sorted, where the picker keeps directory order) — and the picker is the count that is true when you look.
57
+
58
+ | Provider | Free models | Directory |
59
+ |---|---|---|
60
+ | **OpenCode** | `big-pickle`, `deepseek-v4-flash-free`, `jev-1.13-free`, `ling-3.0-flash-fin-free`, `mimo-v2.5-free`, `mimo-v2.6-flash-free`, `muse-spark-1.2`, `muse-spark-1.2-contributor-free`, `muse-spark-1.3`, `muse-spark-1.3-contributor-free`, `nemotron-3-ultra-free`, `nemotron-3.5-lightning-free` | 12 of 76 rows; public, no sign-in |
61
+ | **Kilo** | `cohere/north-mini-code:free`, `dots-studio/dots-3-note-preview:free`, `inclusionai/ling-3.0-flash-fin:free`, `inclusionai/ling-3.0-flash-sante:free`, `inclusionai/ling-3.0-flash-vl:free`, `kilo-auto/free`, `liquid/lfm-2.5-2.6b:free`, `nex-agi/nex-n2.5-mini:free`, `nex-agi/nex-n2.5-pro:free`, `nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free`, `nvidia/nemotron-3-super-120b-a12b:free`, `nvidia/nemotron-3-ultra-550b-a55b:free`, `nvidia/nemotron-3.5-content-safety:free`, `nvidia/nemotron-3.5-lightning:free`, `openrouter/free`, `poolside/laguna-s-2.1:free`, `poolside/laguna-xs-2.1:free`, `qwen/qwen3.8-27b:free`, `stepfun/step-3.7-flash:free`, `thinkingmachines/inkling-small:free`, `z-ai/glm-5.2:free` | 21 of 385 rows; public, 200 requests/hour per egress IP |
62
+ | **Logfare** | chat `deepseek-v3.2`, `deepseek-v4-pro-0813`, `gemma-4-26b`, `gemma-4-31b-it`, `glm-5`, `glm-5.3`, `glm-5.3-flash`, `grok-4.6`, `kimi-k2.5`, `kimi-k2.6`, `kimi-k2.7-code`, `logfare/auto`, `moondream3.1`, `qwen-3.8-27b`, `step-3.7-flash`; images `flux-1-schnell`, `flux-2-dev`, `flux-2-klein-4b`, `flux-2-klein-9b`, `sdxl-lightning`; audio `melotts`, `whisper-large-v3-turbo`; other routes `aura-2-en`, `lucid-origin`, `nova-3`, `phoenix-1.0` | 26 rows; 18 need a training-data opt-in, the other 8 do not |
63
+ | **Qoder** | `Qwen 3.8 Flash` (route `qmodel_38flash`) | the free flash route, plus daily check-in campaigns |
64
+ | **NVIDIA** | `google/gemma-4-31b-it`, `moonshotai/kimi-k3`, `z-ai/glm-5.3`, `z-ai/glm-5.3-flash` — the roster also names `deepseek-ai/deepseek-v4-flash-0731` and `deepseek-ai/deepseek-v4-pro-0813`, which are gone from NVIDIA's live catalogue of 82 rows | an API key is required to call them; cross-checked 2026-09-23 |
65
+ | **SenseNova** | `deepseek-v4-flash`, `deepseek-v4-pro`, `glm-5.2`, `kimi-k3`, `sensenova-6.8-flash-lite` — 1M context and 128K output each | roster ships in the bundle; an API key is required |
66
+ | **TRAE** | the rows its directory lists | free credits reset daily, per account |
67
+ | **Cline** | the rows the directory marks `×0 · 官方免费模型` | an account pool |
68
+ | **WorkBuddy International** | the rows a credit package marks `x0` | device login, several accounts |
69
+ | **Agnes** | chat and image/video rows | a control-plane account |
70
+ | **VyceAI** | no free roster | the daily check-in credit pays its metered rows |
71
+ | **Groq** | `whisper-large-v3-turbo` | transcription, not a chat route |
72
+
73
+ These lists follow their directories: a route upstream retires leaves the table on the next read, which is why it is generated by `scripts/generate-free-model-tables.ts` rather than remembered.
74
+
75
+ TRAE, Cline, WorkBuddy International, Agnes publish no stable roster, so their rows are counted when they arrive rather than listed here.
76
+
77
+ 18 Logfare rows sit behind a training-data opt-in, which the picker labels rather than hides.
78
+
79
+ <!-- generated:free-models:end -->
80
+
81
+ <a id="code-review"></a>
82
+ ## Code Review
83
+
84
+ The bundle mounts a four-tool change reviewer. `engineering_code_review` reviews the workspace (staged, unstaged, *and* untracked changes), a ref range measured from its merge base, or one commit against its first parent, and renders the report as `text`, `json`, or `sarif`; `engineering_review_rules` returns what would be reviewed and under which rule with no model call at all; `engineering_review_status` and `engineering_review_report` show what is running and re-render the last result for another reader. Rules resolve in four layers — a rule file passed for the run, the project's own (`.opencodereview/rule.json`, `.dsh/review.json`, or `.freecodego/review.json`), the user's `~/.opencodereview/rule.json`, then the baseline shipped with the plugin — and the first matching layer wins, so a project override replaces the shipped rule rather than merging into it. Coverage is accounted per file: a run cannot finish while a changed file is still unreviewed, and every skip records why it was skipped.
85
+
86
+ The reviewer spends model calls, so it is opt-in. `reviewMode` is `off`, `record` (findings become durable session events, so a review is answerable later without re-running it), or `gate` (findings at or above `reviewThreshold` are injected back into the turn once `reviewCooldownTurns` has passed, so the Agent has to answer them before it can finish). `reviewDeep` gives each changed file its own read-only child agent, and `reviewEscalation` re-checks high-severity findings with an independent adjudicator that is asked to *refute* them. Reviews run on the plugin's second-model route (`advisorProvider` / `advisorModel`), so a fresh install reviews without extra configuration.
87
+
88
+ <a id="project-memory"></a>
89
+ ## Project Memory
90
+
91
+ Durable per-project memory ships with the bundle: recall is reviewed-only, injected recall is fenced and budgeted, and credential screening refuses a labelled credential or redacts a shape-only match on the write path. Consolidation is a staged rollout rather than a switch — `memoryRollout` is `off`, `record_only`, `shadow` (which runs the whole pass, including the model call, and commits nothing, so an operator can read what the model *would* have written), or `active` — and a pass takes a fenced lease plus a frozen snapshot, so a crashed pass is recoverable while a live one is reported instead of retried. `MEMORY.md` is a bounded index of absolute pointers, and forgetting requires the caller to hand over the bytes it means to remove together with their hash, because "forget what you know about X" must not become a relevance decision that deletes records with no undo.
92
+
49
93
  <a id="agent-teams"></a>
50
94
  ## Agent Teams
51
95
 
package/README.zh.md CHANGED
@@ -14,6 +14,9 @@ kind: "package-bundle"
14
14
  ## 目录
15
15
 
16
16
  - [安装](#install)
17
+ - [免费模型](#free-models)
18
+ - [代码审查](#code-review)
19
+ - [项目记忆](#project-memory)
17
20
  - [Agent Teams](#agent-teams)
18
21
  - [模型体验](#model-experience)
19
22
  - [已知限制与延期工作](#known-limitations-and-deferred-work)
@@ -46,6 +49,47 @@ gh workflow run release-freecodego.yml --ref freecodego-v<version>
46
49
 
47
50
  -----
48
51
 
52
+ <a id="free-models"></a>
53
+ ## 免费模型
54
+
55
+ <!-- generated:free-models:begin by scripts/generate-free-model-tables.ts -->
56
+ 下面每一行都来自各提供商自己的目录,在你打开选择器时读取;也就是说,这是那些目录在 2026-09-23 返回的结果(按名称排序,选择器里保持目录顺序),而选择器里的数量才是你查看时真正成立的数量。
57
+
58
+ | 提供商 | 免费模型 | 目录 |
59
+ |---|---|---|
60
+ | **OpenCode** | `big-pickle`、`deepseek-v4-flash-free`、`jev-1.13-free`、`ling-3.0-flash-fin-free`、`mimo-v2.5-free`、`mimo-v2.6-flash-free`、`muse-spark-1.2`、`muse-spark-1.2-contributor-free`、`muse-spark-1.3`、`muse-spark-1.3-contributor-free`、`nemotron-3-ultra-free`、`nemotron-3.5-lightning-free` | 76 行中的 12 行;公开,无需登录 |
61
+ | **Kilo** | `cohere/north-mini-code:free`、`dots-studio/dots-3-note-preview:free`、`inclusionai/ling-3.0-flash-fin:free`、`inclusionai/ling-3.0-flash-sante:free`、`inclusionai/ling-3.0-flash-vl:free`、`kilo-auto/free`、`liquid/lfm-2.5-2.6b:free`、`nex-agi/nex-n2.5-mini:free`、`nex-agi/nex-n2.5-pro:free`、`nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free`、`nvidia/nemotron-3-super-120b-a12b:free`、`nvidia/nemotron-3-ultra-550b-a55b:free`、`nvidia/nemotron-3.5-content-safety:free`、`nvidia/nemotron-3.5-lightning:free`、`openrouter/free`、`poolside/laguna-s-2.1:free`、`poolside/laguna-xs-2.1:free`、`qwen/qwen3.8-27b:free`、`stepfun/step-3.7-flash:free`、`thinkingmachines/inkling-small:free`、`z-ai/glm-5.2:free` | 385 行中的 21 行;公开,每个出口 IP 每小时 200 次 |
62
+ | **Logfare** | 对话 `deepseek-v3.2`、`deepseek-v4-pro-0813`、`gemma-4-26b`、`gemma-4-31b-it`、`glm-5`、`glm-5.3`、`glm-5.3-flash`、`grok-4.6`、`kimi-k2.5`、`kimi-k2.6`、`kimi-k2.7-code`、`logfare/auto`、`moondream3.1`、`qwen-3.8-27b`、`step-3.7-flash`;图片 `flux-1-schnell`、`flux-2-dev`、`flux-2-klein-4b`、`flux-2-klein-9b`、`sdxl-lightning`;音频 `melotts`、`whisper-large-v3-turbo`;其他路由 `aura-2-en`、`lucid-origin`、`nova-3`、`phoenix-1.0` | 26 行;18 行需要训练数据授权,其余 8 行不需要 |
63
+ | **Qoder** | `Qwen 3.8 Flash`(路由 `qmodel_38flash`) | 免费 flash 路由,另有每日签到活动 |
64
+ | **NVIDIA** | `google/gemma-4-31b-it`、`moonshotai/kimi-k3`、`z-ai/glm-5.3`、`z-ai/glm-5.3-flash` —— 名单里另有 `deepseek-ai/deepseek-v4-flash-0731` 与 `deepseek-ai/deepseek-v4-pro-0813`,这两个名字已不在 NVIDIA 实时目录(82 行)中 | 调用需要 API key;核对于 2026-09-23 |
65
+ | **SenseNova** | `deepseek-v4-flash`、`deepseek-v4-pro`、`glm-5.2`、`kimi-k3`、`sensenova-6.8-flash-lite` —— 均为 1M 上下文 / 128K 输出 | 名单随 bundle 内置;需要 API key |
66
+ | **TRAE** | 其目录列出的那些行 | 免费额度每日重置,按账号 |
67
+ | **Cline** | 目录标记 `×0 · 官方免费模型` 的那些行 | 账号池 |
68
+ | **WorkBuddy 国际版** | 积分包标记 `x0` 的那些行 | 设备登录,可放多个账号 |
69
+ | **Agnes** | 对话与图片/视频行 | 控制面账号 |
70
+ | **VyceAI** | 没有免费名单 | 每日签到额度支付其计量行 |
71
+ | **Groq** | `whisper-large-v3-turbo` | 仅转写,不是对话路由 |
72
+
73
+ 这些清单跟随各自的目录:上游下架的路由会在下次读取时从表中消失 —— 这正是本表由 `scripts/generate-free-model-tables.ts` 生成、而不是凭记忆维护的原因。
74
+
75
+ TRAE、Cline、WorkBuddy 国际版、Agnes 不公布固定名单,因此它们的行在到达时计数,而不在此列名。
76
+
77
+ Logfare 有 18 行位于训练数据授权之后,选择器会标注而不是隐藏它们。
78
+
79
+ <!-- generated:free-models:end -->
80
+
81
+ <a id="code-review"></a>
82
+ ## 代码审查
83
+
84
+ 这个包挂载一个四工具的改动审查器。`engineering_code_review` 会审查工作区(已暂存、未暂存**以及**未跟踪的改动)、从 merge base 起算的一段引用范围、或某个提交对其第一父提交的差异,并按 `text`、`json` 或 `sarif` 渲染报告;`engineering_review_rules` 完全不花模型调用,直接返回会审查什么、按哪条规则;`engineering_review_status` 与 `engineering_review_report` 分别显示正在跑什么、以及把上一次结果按另一位读者重新渲染。规则分四层解析 —— 本次运行传入的规则文件、项目自己的(`.opencodereview/rule.json`、`.dsh/review.json` 或 `.freecodego/review.json`)、用户级 `~/.opencodereview/rule.json`、以及随插件发布的基线 —— 命中的第一层胜出,所以项目覆盖是替换而不是并入。覆盖面按文件核算:只要还有改动过的文件没被审到,这次运行就不能结束,而每次跳过都会记录原因。
85
+
86
+ 审查要花模型调用,所以是可选的。`reviewMode` 取 `off`、`record`(结论成为持久会话事件,所以事后不必重跑就能回答"那次审查说了什么")或 `gate`(达到 `reviewThreshold` 的结论会在 `reviewCooldownTurns` 过去后注入回这一回合,Agent 必须回应它才能结束)。`reviewDeep` 为每个改动文件各开一个只读子 Agent,`reviewEscalation` 会用独立裁定者复核高危结论,并要求它去**反驳**。审查跑在本插件的第二模型路由(`advisorProvider` / `advisorModel`)上,所以全新安装无需额外配置即可使用。
87
+
88
+ <a id="project-memory"></a>
89
+ ## 项目记忆
90
+
91
+ 这个包同时带上按项目持久化的记忆:召回只针对已审核记录,注入有围栏与预算,而凭据筛查会在写入路径上拒绝带标签的凭据、或就地脱敏仅形状匹配的内容。整合是分阶段放量而不是开关 —— `memoryRollout` 取 `off`、`record_only`、`shadow`(完整跑完包括模型调用的整合但什么都不提交,所以操作者能先读到模型**本来会**写什么)、或 `active` —— 并且一次整合会取一把带租约的锁加一份冻结快照,因此崩掉的整合可恢复,而运行中的整合会被如实报告而不是被重试。`MEMORY.md` 是一份有界的绝对路径索引,而遗忘需要调用方把打算删除的字节连同哈希一起交出来,因为"忘掉你知道的关于 X 的一切"绝不能变成一次会以没有撤销的方式删掉记录的相关性判断。
92
+
49
93
  <a id="agent-teams"></a>
50
94
  ## Agent Teams
51
95
 
package/cordis.patch.yml CHANGED
@@ -1,8 +1,19 @@
1
1
  # Standard DeepSeek Harness 0.1.6-alpha.2 FreeCodeGo composition.
2
- - id: llm-deepseek
3
- disabled: true
4
- - id: web-search-deepseek
5
- disabled: true
2
+ # Neither official route is disabled. `llm-deepseek` is the only row that
3
+ # registers provider `deepseek-official`, and the base composition names that
4
+ # provider twice (`agent-default-model.provider`, `web.searchProvider`) — so
5
+ # disabling it leaves both the default model selection and the deepseek search
6
+ # provider pointing at an id no mounted row supplies. The plugin registers its
7
+ # own model adapters beside the official one rather than in place of it.
8
+ #
9
+ # The Harness's own search provider stays enabled. The base composition pins
10
+ # `web.searchProvider: deepseek-official`, and `@deepseek-ai/dsh-web-search-deepseek`
11
+ # is the only row that registers that provider — disabling it makes every
12
+ # `web_search` call fail with the Harness's own `WEB_PROVIDER_CONFIGURED_MISSING`
13
+ # (`packages/web/web/src/index.ts`), which is a capability this plugin supplies
14
+ # no replacement for: it registers model adapters, not a search provider. A
15
+ # deployment without `DEEPSEEK_API_KEY` gets that route reported unavailable,
16
+ # which is the Harness's own credential error rather than a broken tool.
6
17
  - id: system-prompt
7
18
  config:
8
19
  persona: >-
@@ -18,13 +29,28 @@
18
29
  - insert:
19
30
  - id: freecodego-session-events
20
31
  name: 'freecodego/session-events'
21
- # The Harness's team runtime, loaded BEFORE the FreeCodeGo plugin. The order is
22
- # load-bearing: the plugin decides at construction whether to register its own
23
- # board and member lifecycle, and that decision has to be settled before the
24
- # first request catalog is assembled rather than changing mid-session. Nothing
25
- # here depends on FreeCodeGo, so the earlier position costs nothing.
32
+ # The Harness's team runtime, mounted before the FreeCodeGo plugin's own row.
33
+ # Nothing in the plugin depends on that position: it registers no team board
34
+ # and no member lifecycle of its own.
35
+ #
36
+ # These two rows are upstream's own modules — `packages/experimental/agent-team`
37
+ # and `-tool-agent-team`, published as `@deepseek-ai/dsh-experimental-agent-team`
38
+ # and `-tool-agent-team` — compiled into this bundle, and they exist only so a
39
+ # composition that never selected the official team bundles still has
40
+ # `ctx.agentTeams` and the team tools. When the official
41
+ # `@deepseek-ai/dsh-experimental-agent-team-profile` IS selected the official
42
+ # layer already mounts both, and this pair would then claim `spawn_teammate`
43
+ # twice. The installer's conflict guard resolves that by disabling one of two
44
+ # identical implementations, which is a coin flip the user cannot see; standing
45
+ # down here is the same outcome, decided before mounting. Official-first costs
46
+ # no capability, because the plugin owns no team service to lose: it classifies
47
+ # `spawn_teammate` (`plan-mode.ts`'s mutating set, `verify-on-stop.ts`'s
48
+ # delegation set) and its `engineering_team_*` tools orchestrate engines
49
+ # directly — a council over Codex/Claude/DeepSeek in `agent-tools.ts`, a
50
+ # different mechanism from this service rather than a second copy of it.
26
51
  - id: freecodego-agent-team
27
52
  name: 'freecodego/agent-team'
53
+ disabled: !!js "ctx.get('profileContext')?.startedBundles?.includes('@deepseek-ai/dsh-experimental-agent-team-profile') ?? false"
28
54
  config:
29
55
  maxMembers: 8
30
56
  maxTasks: 256
@@ -33,6 +59,7 @@
33
59
  disposalTimeoutMs: 5000
34
60
  - id: freecodego-tool-agent-team
35
61
  name: 'freecodego/tool-agent-team'
62
+ disabled: !!js "ctx.get('profileContext')?.startedBundles?.includes('@deepseek-ai/dsh-experimental-agent-team-profile') ?? false"
36
63
  config:
37
64
  freshProvider: spawn
38
65
  forkProvider: fork
@@ -51,6 +78,114 @@
51
78
  # preset (see action-reviewer.ts), so an Auto action gets one verdict, not two.
52
79
  - id: freecodego-auto-review
53
80
  name: 'freecodego/auto-review'
81
+
82
+ # ── optional Harness capabilities, off by default ──────────────────────
83
+ #
84
+ # Browser control, desktop control, and session-history retrieval each ship
85
+ # in the Harness as a service plus one provider or tool package, and no
86
+ # bundle mounts any of them: mounting them is how a deployment says yes.
87
+ # Every row below is `disabled` for two reasons that hold for all three,
88
+ # plus the capability-specific ones stated beside each row.
89
+ #
90
+ # 1. **They are not part of the install contract.** This bundle's
91
+ # `peerDependencies` is what the Harness must supply for the composition
92
+ # to load, and none of these packages is in it — upstream's own words are
93
+ # that the browser and desktop providers "activate only when explicitly
94
+ # mounted", and `tool-session-query` documents itself as opt-in. An
95
+ # *enabled* row naming a package the Harness need not supply is a row that
96
+ # fails on an install that lacks it, so these rows are `disabled` and carry
97
+ # the recipe for whoever wants them.
98
+ # 2. **They fail closed at different grains, so the grain decides.** Mounted
99
+ # in a *preset*, one unresolvable enabled row makes the whole preset
100
+ # unselectable — `packages/preset/agent-presets/src/discovery.ts`,
101
+ # `unresolvableRows`, skips a row only while `Boolean(row.disabled)` — which
102
+ # is the "Failed to load" failure the bundled presets already record once.
103
+ # Mounted here, an enabled row that cannot load fails *that entry alone*:
104
+ # `Entry._init` catches the import error, logs it and returns, and the rest
105
+ # of the tree keeps running. The host plane is therefore the plane that can
106
+ # hold an optional capability at all.
107
+ #
108
+ # Enabling one is a Loader decision, not an edit here: the Loader owns entry
109
+ # enablement (`plugin-conflicts.ts` says the same about entry ownership), so a
110
+ # row is turned on where the user's other entries are managed.
111
+ #
112
+ # ── browser and desktop control ─────────────────────────────────────────
113
+ #
114
+ # Each takes exactly ONE provider: `ctx.browserUse` and `ctx.computerUse`
115
+ # hold a single slot and reject a second registration, so an alternative is a
116
+ # swap rather than an addition:
117
+ # browser — dsh-experimental-browser-use-chrome-devtools-mcp (Chrome DevTools
118
+ # over MCP), dsh-experimental-browser-use-stagehand-native
119
+ # (AI-assisted actions on its own configured model)
120
+ # desktop — dsh-experimental-computer-use-cua-driver-mcp (an already
121
+ # installed `cua-driver` executable owns permissions instead)
122
+ #
123
+ # A third reason holds for these two rows alone: their prerequisites are the
124
+ # user's machine, not ours. A launched browser follows the upstream Playwright
125
+ # runtime's browser installation, and the native desktop provider needs OS
126
+ # permission grants plus npm optional dependencies left enabled — and it
127
+ # shares the host process, so a native crash can take the Host with it (its
128
+ # README says so in those words).
129
+ #
130
+ # `mode` is required by the Playwright provider and has no default; `launch`
131
+ # with `headless: true` is the pair its README documents. The native desktop
132
+ # provider takes no configuration at all. Both providers are mounted before
133
+ # the plugin's own row, which is the position the provider README asks for
134
+ # ("mount both entries before creating or resuming a Session").
135
+ - id: browser-use
136
+ name: '@deepseek-ai/dsh-browser-use'
137
+ disabled: true
138
+ - id: browser-use-playwright-mcp
139
+ name: '@deepseek-ai/dsh-experimental-browser-use-playwright-mcp'
140
+ disabled: true
141
+ config:
142
+ mode: launch
143
+ headless: true
144
+ - id: computer-use
145
+ name: '@deepseek-ai/dsh-computer-use'
146
+ disabled: true
147
+ - id: computer-use-cua-driver-native
148
+ name: '@deepseek-ai/dsh-experimental-computer-use-cua-driver-native'
149
+ disabled: true
150
+
151
+ # ── session-history retrieval ──────────────────────────────────────────
152
+ #
153
+ # `tool-session-query` gives the model five read-only tools over earlier
154
+ # sessions (`session_search`, `session_event_search`, `session_trace`,
155
+ # `session_event_trace`, `session_event_read`), authorized per call by exact
156
+ # `cwd` equality with the caller's session. This one row is the whole opt-in:
157
+ # the package injects `['tools', 'systemPrompt', 'sessionQuery',
158
+ # 'sessionProjections']`, and the base composition already mounts both
159
+ # services — `session-query-sqlite` is the owner of `ctx.sessionQuery` and
160
+ # `session-projection` is mounted beside it. Nothing else has to be added for
161
+ # the tools to load and work.
162
+ #
163
+ # ⚠ Content search is a second, separate switch, and this caveat is the
164
+ # reason this note is long. The base mounts `session-query-sqlite` with
165
+ # `openAt: never` on purpose: `ctx.sessionQuery` stays mounted (exact reads,
166
+ # titles, lineage traces) while SQLite is never opened, so `session_search`
167
+ # and `session_event_search` answer `SESSION_QUERY_SEARCH_DISABLED` — and the
168
+ # Web sidebar searches titles and workspace names only. Enabling the tools
169
+ # without the override below is therefore three working tools and two that
170
+ # always fail. This file is exactly the "later patch layer" the base comment
171
+ # points at, so the pair belongs together; it is stated rather than mounted
172
+ # because it changes search for *every* deployment, sidebar included, and
173
+ # that is the same decision as turning the tools on rather than a default:
174
+ #
175
+ # - id: session-query-sqlite
176
+ # config:
177
+ # path: !!js dshHomePath('session-index.db') # durable, or `:memory:`
178
+ # openAt: first-search # or `startup`
179
+ #
180
+ # Upstream has a second reason for keeping this opt-in, and it is measurable
181
+ # here: the package's README states that enabling it adds fixed guidance plus
182
+ # five tool schemas to every model request, which
183
+ # `engineering_surface_report` reports as injected bytes against the reviewed
184
+ # lock in `.freecodego/surface-lock.json`.
185
+ - id: tool-session-query
186
+ name: '@deepseek-ai/dsh-tool-session-query'
187
+ disabled: true
188
+
54
189
  - id: freecodego
55
190
  name: 'freecodego'
56
191
  config: {}
@@ -3,7 +3,7 @@ name: engineering-code-review
3
3
  description: Review changed code for concrete behavioral failures, regressions, security risks, and missing tests.
4
4
  metadata:
5
5
  origin: FreeCodeGo Engineering Enhancement Pack
6
- version: 1
6
+ version: 2
7
7
  ---
8
8
 
9
9
  # Code Review
@@ -11,3 +11,34 @@ metadata:
11
11
  Start with concrete findings ordered by severity. Each finding needs an exact location, a realistic failure mode, and enough surrounding context to prove it is actionable. Focus on correctness, behavioral regressions, security boundaries, race conditions, error handling, and missing verification.
12
12
 
13
13
  Returning no findings is valid when the reviewed evidence supports it. Do not manufacture style concerns to appear rigorous.
14
+
15
+ ## Run the review with the review tools
16
+
17
+ The plugin owns a review pipeline. Prefer it over re-deriving a review by reading the diff yourself — the pipeline covers every changed file and you do not, and it pays that cost in one call instead of dozens.
18
+
19
+ | Tool | Use it when |
20
+ | --- | --- |
21
+ | `engineering_code_review` | You need the findings. Reviews staged, unstaged **and** untracked changes by default; pass `mode: "range"` with `from`/`to` for a branch comparison, or `mode: "commit"` for one commit. `format: "json"` or `"sarif"` for machine output. |
22
+ | `engineering_review_rules` | You need to know what *would* be reviewed and which rule applies to each file. Costs no model call — use it to check an exclude pattern or a project rule file, or to get the file list so you can review a subset yourself. |
23
+ | `engineering_review_status` | A review is running, or you want to know what the last one covered. |
24
+ | `engineering_review_report` | Re-read an earlier review, in text, JSON, or SARIF, without paying for it again. |
25
+
26
+ Pass a short `background` describing what the change was *meant* to do. It is the difference between flagging a deleted branch as a regression and recognising it as the point of the change.
27
+
28
+ ## Read the coverage before you report
29
+
30
+ A review accounts for every file it entered, and the three states are not interchangeable:
31
+
32
+ - **reviewed** — a reviewer read it.
33
+ - **skipped** — nothing was read, and the reason is stated: excluded by a rule layer, binary, oversized, unreadable, past the file limit, or refused by the run budget.
34
+ - **failed** — a reviewer was supposed to read it and did not; the error is stated.
35
+
36
+ `reviewed` is not `total`. Saying "the change is clean" when half the files were skipped is a claim the review did not make, so check the skip list before you repeat it. When the interesting files are the skipped ones, narrow the run (`exclude`, or review a specific range) until they are inside it.
37
+
38
+ `exclude` takes gitignore-style patterns, and a brace list counts as one: `**/*.{gen,min}.ts` drops both, in the same three places a rule file may write it (a system rule, a rule-document entry, and an `exclude` list). `**` crosses directories, a pattern with no slash matches at any depth, and matching is case-sensitive.
39
+
40
+ Findings arrive with a severity, a category, a location, and sometimes a replacement. A finding at line `0` means the reviewer could not place it on a line — treat it as a claim about the change rather than about a specific line, and do not restate it as though it had coordinates.
41
+
42
+ ## When you disagree with a finding
43
+
44
+ Say so, and say what would have to be true for it to be wrong. A finding the diff disproves is worth reporting as such — the pipeline records filtered findings and adjudicated ones separately from published ones, so a disagreement with evidence is more useful than silence, and much more useful than editing the code to satisfy a finding that was never right.
@@ -207,16 +207,25 @@
207
207
  backgroundMode: one-shot
208
208
  maxDepth: provider-managed
209
209
 
210
- - id: workflow-worker-thread
211
- name: '@deepseek-ai/dsh-workflow-worker-thread'
210
+ # This row used to name `@deepseek-ai/dsh-workflow-worker-thread`, which no
211
+ # Harness line installs: preset discovery resolves every enabled row against
212
+ # the installed harness and reports the whole preset broken (the roster card
213
+ # reads "Failed to load") before a session could start. `standard/agent.cordis.yml`
214
+ # names `workflow-ptc`, and a mirror has to name the same package.
215
+ - id: workflow-ptc
216
+ name: '@deepseek-ai/dsh-workflow-ptc'
212
217
  config:
213
218
  provider: spawn
214
219
 
215
220
  - id: tool-workflow
216
221
  name: '@deepseek-ai/dsh-tool-workflow'
217
222
 
223
+ # Disabled with the standard row this mirrors: the tool description restricts
224
+ # `ralph` to runs the human explicitly asked for, and completion is a worker
225
+ # self-report rather than an independent evaluation.
218
226
  - id: tool-ralph
219
227
  name: '@deepseek-ai/dsh-tool-ralph'
228
+ disabled: true
220
229
  config:
221
230
  subagentProvider: spawn
222
231
  maxRounds: 64
@@ -235,4 +244,11 @@
235
244
  name: '@deepseek-ai/dsh-tool-web'
236
245
  config:
237
246
  fetch: true
238
- searchTimeoutMs: 60000
247
+ searchTimeoutMs: 60000
248
+
249
+ - id: present
250
+ name: '@deepseek-ai/dsh-tool-present'
251
+
252
+ - id: tool-plugin-manager
253
+ name: '@deepseek-ai/dsh-plugin-manager/tools'
254
+ disabled: true
@@ -189,16 +189,25 @@
189
189
  backgroundMode: one-shot
190
190
  maxDepth: provider-managed
191
191
 
192
- - id: workflow-worker-thread
193
- name: '@deepseek-ai/dsh-workflow-worker-thread'
192
+ # This row used to name `@deepseek-ai/dsh-workflow-worker-thread`, which no
193
+ # Harness line installs: preset discovery resolves every enabled row against
194
+ # the installed harness and reports the whole preset broken (the roster card
195
+ # reads "Failed to load") before a session could start. `standard/agent.cordis.yml`
196
+ # names `workflow-ptc`, and a mirror has to name the same package.
197
+ - id: workflow-ptc
198
+ name: '@deepseek-ai/dsh-workflow-ptc'
194
199
  config:
195
200
  provider: spawn
196
201
 
197
202
  - id: tool-workflow
198
203
  name: '@deepseek-ai/dsh-tool-workflow'
199
204
 
205
+ # Disabled with the standard row this mirrors: the tool description restricts
206
+ # `ralph` to runs the human explicitly asked for, and completion is a worker
207
+ # self-report rather than an independent evaluation.
200
208
  - id: tool-ralph
201
209
  name: '@deepseek-ai/dsh-tool-ralph'
210
+ disabled: true
202
211
  config:
203
212
  subagentProvider: spawn
204
213
  maxRounds: 64
@@ -218,3 +227,10 @@
218
227
  config:
219
228
  fetch: true
220
229
  searchTimeoutMs: 60000
230
+
231
+ - id: present
232
+ name: '@deepseek-ai/dsh-tool-present'
233
+
234
+ - id: tool-plugin-manager
235
+ name: '@deepseek-ai/dsh-plugin-manager/tools'
236
+ disabled: true