freecodego 0.1.6-alpha.2 → 0.1.6-alpha.2.4
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 +2 -2
- package/README.md +44 -0
- package/README.zh.md +44 -0
- package/cordis.patch.yml +144 -9
- package/dist/assets/engineering/skills/engineering-code-review/SKILL.md +32 -1
- package/dist/assets/presets/augmentcode/agent.cordis.yml +19 -3
- package/dist/assets/presets/freecodego/agent.cordis.yml +18 -2
- package/dist/bootstrap.js +22884 -11350
- package/dist/client.cjs +7925 -1689
- package/package.json +11 -1
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:
|
|
6
|
-
README.zh.md:
|
|
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
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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,
|
|
22
|
-
#
|
|
23
|
-
#
|
|
24
|
-
#
|
|
25
|
-
#
|
|
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:
|
|
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
|
-
|
|
211
|
-
|
|
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
|
-
|
|
193
|
-
|
|
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
|