sogeisetsu · Daily GitHub activitysogeisetsu 的 GitHub 每日动态
@sogeisetsu·2026-11-01 00:00 – 24:00 · UTC+8
27 own commits were recorded across five repositories, plus 23 automated commits by github-actions[bot].
In sogeisetsu/opencode-skill-management, 16 commits covered releases v1.2.0 and 1.2.1, serialized write enable/disable behavior, target-only rejection of unparsable configs, output-schema validation, and documentation-site updates.
In sogeisetsu/opencode-go-model-picker, 6 commits introduced a single scripts/go.mjs entry point with four verbs, corrected release measurements, and removed two test artifacts.
The 2 commits in sogeisetsu/opencode-agent-sandbox documented knowledge-ingest verification and the roles of three review commands, while 2 commits in sogeisetsu/sopen-translate corrected G2 status and documented the Google 2 key path.
The remaining own commit in sogeisetsu/sogeisetsu added a generated-artifact validation gate to the daily report workflow.
当天在五个仓库产生 27 次本人提交,另有 23 次由 github-actions[bot] 自动提交。
sogeisetsu/opencode-skill-management 的 16 次提交涵盖 v1.2.0 与 1.2.1 发布、写入启停的串行化、仅针对目标配置拒绝不可解析配置、输出结构校验及文档站更新。
sogeisetsu/opencode-go-model-picker 的 6 次提交引入带四个动词的单一 scripts/go.mjs 入口,修正发布测量数据并删除两个测试产物。
sogeisetsu/opencode-agent-sandbox 的 2 次提交记录了 knowledge-ingest 验证流程和三种审查命令的分工,sogeisetsu/sopen-translate 的 2 次提交修正 G2 状态并说明 Google 2 密钥路径。
sogeisetsu/sogeisetsu 剩余的 1 次本人提交为日报工作流加入生成物校验门禁。
23 automated commits by @github-actions[bot] · not counted in the total23 次自动提交,由 @github-actions[bot] 发起 · 不计入总提交数
Minimal package: opencode-go-model-picker-3.0.0-min.zip contains only what the skill runs — SKILL.md, references/ (one doc plus two dated seeds), scripts/ (one entry point + modules) and LICENSE. Unzip it into ~/.config/opencode/skills/ so the folder is named opencode-go-model-picker. Verify with node scripts/go.mjs --help (four verbs: run / report / check / apply).
Full notes: CHANGELOG.md · 中文:CHANGELOG-ZH.md
3.0.0 is not a feature release: it is the same job described with **an order of
magnitude less text**. Measured against the 2.0.0 tag:
| What the model must read | 2.0.0 | 3.0.0 | Change |
|---|---|---|---|
| Markdown files | 7 (SKILL.md + 6 references) | 2 (SKILL.md + plan-facts.md) | −5 files |
| Characters | 104,181 | 8,291 | 12.6× smaller (−92%) |
| Lines | 1,776 | 168 | 10.6× fewer (−91%) |
| Estimated tokens | ≈27,400 | ≈2,200 | ≈25,200 saved per full read |
SKILL.md alone | 18,804 chars ≈4,900 tok | 4,221 chars ≈1,100 tok | −78% |
| Runnable entry points | 9 runtime scripts (11 with maintainer tools) | 1 (go.mjs) | −8 runtime |
| Minimal install zip | 128,802 B | 89,163 B | −31% |
A typical 2.0.0 run loaded SKILL.md plus two or three references (≈11–15k
tokens); the same run now loads 8.3k characters, about 2.2k tokens — roughly
80–85% less context before any work starts. Token figures are estimates at
3.8 characters/token (no tokenizer ships with the repo); character and line counts
are exact: git show v2.0.0:SKILL.md | wc -c and the same for each reference.
Code did not shrink — it moved: ~4,700 lines of scripts became ~5,300 lines of
modules plus tests, because the rules that used to be prose (refresh order, basis
selection, priced columns, chain shape, apply diff) are now enforced by code.
scripts/go.mjs replaces nine scripts — discover-agents,probe-console, calibrate-usage, quota-math, refresh-snapshot,refresh-prices, refresh-scores, snapshot-summary and fetch-go-models are
gone. Four verbs: run (agents → Console → usage → refresh → plan diff → basis,
one serial pass, one run.json), report (table, money columns, config blocks),check (the gate before delivery), apply (exact diff; writes only with--write, only the named file, only that agent's model value).
references/plan-facts.md replaces quota-math.md,model-snapshot.md, data-sources.md, agent-sources.md, console-mcp.md andoutput-format.md. SKILL.md drops from ~19k to ~4k characters and is
model-facing only; teaching moved to the READMEs.
Basis: line and its denominator, the priced $/session column, chain-shape
rules, seed staleness, mode resolution and the apply diff are computed, not
described. The nine self-checks became go.mjs check.
apply refuses a chain containing a dead id and refuses to write a result thatdoes not re-parse.
node --test tests/*.test.mjs (built-in node:test, no dependencies):tests/golden/ holds outputs captured from the 2.0.0 scripts and covers pricing,
discovery and the five Console states; CLI tests cover offline degradation, the
report gate, and dry-run versus --write.
run --offline always produces a dated, seed-labelled run.json; data.qualitysays live / seed / none instead of leaving the reader to infer it.
scripts/check-docs.mjs and scripts/generate-assets.mjs moved to tools/:they maintain the repository, not the skill, and are not part of the minimal
install.
test-prompts.json to tests/prompts.json and documented it in therepository layout: it is an evaluation fixture (a request paired with the
behaviour the skill must exhibit), not a runtime asset — nothing loads it.
AI This release replaces nine runtime scripts with the single scripts/go.mjs entry point offering run, report, check, and apply, and consolidates six reference documents into references/plan-facts.md. It is a breaking change that reduces the model-facing text from 104,181 to 8,291 characters and the minimal install zip from 128,802 to 89,163 bytes, while moving rules such as refresh order, basis selection, pricing, and apply diffs into code. It adds node:test coverage with golden outputs, makes run --offline produce a dated seed-labelled run.json with explicit data.quality, and moves repository maintenance scripts into tools/.该版本以单一 scripts/go.mjs 入口取代九个运行时脚本,提供 run、report、check、apply 四个动词,并将六份参考文档合并为 references/plan-facts.md。这是一次破坏性变更,模型需阅读的文本从 104,181 字符降至 8,291 字符,最小安装包从 128,802 字节降至 89,163 字节,同时把刷新顺序、基准选择、定价和 apply 差异等规则移入代码。新版本加入基于 node:test 的黄金输出测试,使 run --offline 生成带日期和种子标记的 run.json 并明确 data.quality,还将仓库维护脚本移至 tools/。
skill_management gives every installed OpenCode skill a switch: list what is installed, find out
why one will not load, hide it from the model, and put it back. Disabling writes one globalskill permission rule — no skill file is ever moved, edited or deleted.
No breaking changes in 1.2.0. The four actions, their inputs, the JSON envelope, the written
rule shape, the same-line marker and the single-file layout are unchanged since 1.1.0.
list no longer reports "N skills differ across other agents" on every call.summary.diverged counted hidden internal agents (title, summary, …), which carry{*,*,deny}; on a real machine that made every skill look divergent (33/33) and added a noise
warning to each list. Only visible agents are compared now; inspect.agents[] still lists
every agent, so the detail is not lost.
disable-model-invocation: "false" is astring, and Boolean("false") === true, so inspect reported it as true while list reportedautoinvoke: false for the same file. true/yes/on/1 and false/no/off/0 (quoted or not) are
normalized now, and both fields go through the same rule.
config was written and verified, a sidecar write failure used to surface as internal_error: the
file really changed, but the result had no changed / diff. It now returns ok: true,changed: true, keeps diff, sets sidecar: null, and explains itself in warnings. The config
change is not rolled back.
enable is no longer blocked by an unrelated file's syntax error. It reads sidecar-recordedconfig files alongside the target; before, any of them failing to parse plus "no candidate rule"
produced config_unparsable. The hard refusal now applies only to the target config file;
other files are reported in warnings by name.
opencode.json(c) already lists this package inplugins, or a second copy sits in plugins/, it refuses and exits with code 2, leaving every
file untouched — two sources make the host report Duplicate plugin ID and fail one of them.
--check / --dry-run, --uninstall (deletes only this plugin's file),--npm (asserts the npm channel, never writes), --force, --json. <config> resolves the way
the host resolves it ($OPENCODE_CONFIG_DIR first).
PLUGIN_VERSION, asserted against package.json by the harness.output against the declared JSON Schema (required fields, property types, error.code /error.message) and asserts that content is the same data as output.
workflow moved to the documentation site.
there is no allow, why global-only, why text edits plus a same-line marker, why the sidecar is
only an audit trail — each with its cost) and Development & verification (harness sections,
CI, the performance and release gates, npm package contents, why two copies cannot coexist).
The Permissions page now expands Effects into a deny vs ask comparison with three real
skill examples. English and Chinese stay mirrored.
| Action | What you get | Writes config |
|---|---|---|
list | Every registered skill and its effective state for the calling agent (available / disabled / ask) | No |
inspect | Why one skill is (not) usable: the matched rule, per-agent differences, how the id was derived | No |
disable | Hidden from the model-visible list and rejected at load (effect: "ask" keeps it listed with confirmation) | Yes |
enable | Deletes the one blocking rule, whoever wrote it | Yes |
Permissions are evaluated for the calling agent only: last match wins (findLast, with *
and ? globs), and no match falls back to ask, not allow.
The rule disable writes is exactly this line (the trailing comment is the provenance markerenable uses):
{ "action": "skill", "resource": "windows-shell", "effect": "deny" } // skill_managementWrites are atomic, preserve indentation, key order, line endings (CRLF/LF) and BOM, keep one
backup, and are verified by reloading the host and polling the caller's rule set; a write the host
did not pick up is rolled back.
skill_management({ action: "list" })
skill_management({ action: "inspect", id: "windows-shell" })
skill_management({ action: "disable", id: "windows-shell" })
skill_management({ action: "disable", id: "windows-shell", dryRun: true })
skill_management({ action: "disable", id: "windows-shell", effect: "ask" })
skill_management({ action: "enable", id: "windows-shell" })Full field tables and error codes are on the four action pages of the docs site:
<https://sogeisetsu.github.io/opencode-skill-management/>
| Channel | Command / asset | Notes |
|---|---|---|
| npm (recommended) | opencode plugin add opencode-skill-management@1.2.0 | Installs the package and registers it in the global config; no token needed |
| git spec | opencode plugin add github:sogeisetsu/opencode-skill-management | Bypasses the npm registry |
| Single file | asset skill_management.js | Drop it into <config>/plugins/; best for offline use |
| npm tarball | asset opencode-skill-management-1.2.0.tgz | The same tarball npm publishes; for auditing or internal mirrors |
Verify it loaded in a new process:
opencode plugin list --builtin
# skill_management 1.2.0 opencode-skill-management@1.2.0AI This release fixes list counting hidden internal agents as divergent, normalizes frontmatter booleans so inspect and list agree, and reports sidecar write failures as successful config changes with warnings instead of internal_error. enable now hard-refuses only when the target config file is unparsable, while unrelated files are listed in warnings. It also adds installer flags --check, --dry-run, --uninstall, --npm, --force, and --json, expands the acceptance harness to 326 assertions with output-schema validation, and adds Design decisions and Development & verification documentation pages.该版本修复 list 把隐藏内部代理计为差异项的问题,统一规范化 frontmatter 布尔值,使 inspect 与 list 结果一致,并在 sidecar 写入失败时以警告报告成功的配置变更而非 internal_error。enable 现在仅在目标配置文件不可解析时硬拒绝,其他文件按名称列入警告。新增安装器参数 --check、--dry-run、--uninstall、--npm、--force、--json,验收测试扩充至 326 项断言并校验输出结构,文档站新增 Design decisions 与 Development & verification 页面。