Commit Graph
86 Commits
Author SHA1 Message Date
NI0317 978f61f9e7 docs(onboarding): document telemetry opt-out 2026-07-31 17:05:30 +08:00
NI0317 2bed90d355 Merge remote-tracking branch 'origin/agent/update-internal-beta-copy' into feature/gui-welcome-copy-v2
# Conflicts:
#	README.i18n.yaml
#	README.md
#	README.zh.md
2026-07-31 15:14:01 +08:00
NI0317 b9863e4c3a Merge remote-tracking branch 'origin/master' into feature/gui-welcome-copy-v2 2026-07-31 15:12:02 +08:00
NI0317 d3ff2c3653 docs(onboarding): update internal testing notice 2026-07-31 15:04:24 +08:00
NI0317 8e7a36db01 test(web): publish welcome acknowledgement before browser boot 2026-07-31 13:59:29 +08:00
NI0317 cf4027afe8 Merge remote-tracking branch 'origin/master' into feature/gui-first-run-welcome
# Conflicts:
#	packages/host/apiproxy/README.i18n.yaml
2026-07-31 13:41:17 +08:00
NI0317 139464f3e7 docs(onboarding): refine internal testing notice 2026-07-31 13:34:13 +08:00
NI0317 c171ce2944 Merge remote-tracking branch 'origin/master' into feature/gui-first-run-welcome 2026-07-31 13:10:06 +08:00
NI0317 1962d71b70 fix(web): balance credential step vertically 2026-07-31 13:09:41 +08:00
NI0317 85d1c5e2ad Merge remote-tracking branch 'origin/master' into feature/gui-first-run-welcome
# Conflicts:
#	packages/client/ui-settings-general/src/client/index.ts
#	packages/client/ui-settings-general/src/client/locales.ts
#	packages/client/ui-settings-general/tests/apply.spec.ts
#	packages/client/ui-settings/README.i18n.yaml
#	packages/client/ui-settings/README.md
#	packages/client/ui-settings/README.zh.md
#	packages/client/ui-settings/src/client/index.ts
#	packages/host/apiproxy/README.i18n.yaml
#	packages/host/apiproxy/src/api-proxy.ts
2026-07-31 12:48:39 +08:00
NI0317 10e0c2711f test(web): scope welcome notice to onboarding scenarios 2026-07-31 12:26:44 +08:00
NI0317 a7907f9fa9 fix(web): keep onboarding steps visually continuous 2026-07-31 12:26:16 +08:00
NI0317 c955c9adb1 fix(web): align the credential onboarding page 2026-07-31 11:27:01 +08:00
NI0317 e2373ee562 Merge remote-tracking branch 'origin/feature/readme-current-capabilities' into feature/readme-current-capabilities 2026-07-31 11:26:40 +08:00
NI0317 84b52debb1 Merge remote-tracking branch 'origin/master' into feature/readme-current-capabilities 2026-07-31 11:20:05 +08:00
NI0317 e9cbfa153a docs: address README review 2026-07-31 11:18:49 +08:00
NI0317 46515aec6c Merge remote-tracking branch 'origin/master' into feature/readme-current-capabilities 2026-07-31 11:00:05 +08:00
NI0317 fb80732e7d Merge updated DeepSeek onboarding base
# Conflicts:
#	.agents/notes/implemented/feature/2026-07-30-deepseek-onboarding-credential-setup.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-30-deepseek-onboarding-credential-setup.md
#	.agents/notes/implemented/feature/2026-07-30-deepseek-onboarding-credential-setup.zh.md
#	packages/client/ui-models/README.i18n.yaml
#	packages/client/ui-models/README.md
#	packages/client/ui-models/README.zh.md
#	packages/client/ui-models/src/client/DeepSeekOnboardingDialog.module.css
#	packages/client/ui-models/src/client/DeepSeekOnboardingDialog.tsx
#	packages/client/ui-models/tests/onboarding-dialog.spec.tsx
2026-07-31 10:29:20 +08:00
NI0317 bc69648f03 Merge updated DeepSeek onboarding base
# Conflicts:
#	packages/host/apiproxy/README.i18n.yaml
2026-07-31 00:32:40 +08:00
NI0317 75a0366a52 feat(web): present onboarding as a continuous page 2026-07-31 00:28:17 +08:00
NI0317 04f8b30db1 fix(web): make the welcome notice scan-first 2026-07-30 22:58:52 +08:00
NI0317 564ba0df72 Merge updated DeepSeek onboarding base 2026-07-30 22:25:33 +08:00
NI0317 c311400945 Merge updated DeepSeek onboarding base
# Conflicts:
#	packages/host/apiproxy/README.i18n.yaml
2026-07-30 22:19:31 +08:00
NI0317 bef8db3add feat(web): add versioned first-run welcome 2026-07-30 22:17:56 +08:00
NI0317 33cbb00fb9 Merge remote-tracking branch 'origin/master' into feature/readme-current-capabilities 2026-07-30 17:18:14 +08:00
NI0317 013761f850 docs: verify and simplify launch instructions 2026-07-30 17:17:22 +08:00
NI0317 4d3e324467 docs: preserve established README voice 2026-07-30 16:47:27 +08:00
NI0317 254ead9871 docs: add candid preview note 2026-07-30 16:10:35 +08:00
NI0317 4ee2b61dbc Merge remote-tracking branch 'origin/master' into feature/readme-current-capabilities 2026-07-30 15:52:28 +08:00
NI0317 544d3f8267 docs: refresh root README for current capabilities 2026-07-30 15:52:20 +08:00
NI0317 f280a97c56 test(web): isolate details session lifecycle e2e 2026-07-29 11:32:03 +08:00
NI0317 ca2e6207b5 Merge origin/master into fix/web-details-session-lifecycle 2026-07-29 11:21:48 +08:00
NI0317 406cd3602b fix(web): close details when current session changes 2026-07-29 11:21:13 +08:00
NI0317 6b79ce08c5 test(fs-search): minimize glob snapshot composition
Boot the glob sampling scenario from a standalone ACP composition that exposes only bash, glob, and grep. Regenerate the smaller header fixtures and trim implementation narration already owned by the Agent Note.
2026-07-28 16:21:29 +08:00
NI0317 b14fbf7031 Merge remote-tracking branch 'origin/master' into feature/directory-listing-tool 2026-07-28 16:12:11 +08:00
NI0317 57cf137918 fix(fs-search): keep broad glob samples representative
Remove the duplicate model-facing list tool from this branch; directory orientation remains available through bash ls. Keep the glob sampling fix, add a real ACP composition snapshot, and narrow the decision record to the shipped bug fix.
2026-07-28 14:42:59 +08:00
NI0317 4b5b22d42f Merge remote-tracking branch 'origin/master' into feature/directory-listing-tool
Master had advanced 392 commits. Every conflict was a derived artifact both
sides had regenerated — `docs/tool-catalog.md`, four recorded headless
session logs, and one TUI terminal expectation — so each was resolved by
taking master's version and re-running the generator and the keyless
snapshot refresh on the merged tree. No source file conflicted.

The new `examples/jsonrpc-agent` fixtures keep master's scrubbed
`{{system}}` / `{{tools}}` headers: that suite scrubs request headers, so a
new tool changes nothing there and the refresh output was discarded.
2026-07-28 13:48:28 +08:00
NI0317 451c21a5b6 fix(fs): quote a listed name only when it would misreport the listing
The review made every name a JSON string with `<`, `>`, and `&` escaped. The
hazards behind that are real and each is now covered: a control character
splits one entry across lines, `</` closes the envelope, and a regular file
named `x@` reads as a socket named `x` under the non-regular marker.

Quote those, and only those. `list` is the tool an agent reaches for first
and its output sits in every transcript, so `"archive"/` on every ordinary
line is a permanent cost for a case that almost never occurs. A name is now
emitted verbatim unless it matches a control character, a leading quote, a
backslash, `</`, or a trailing `@`, and is otherwise a JSON string with `</`
neutralized — the delimiter treatment `dsh-workspace-context` already applies
to instruction text, extended to an interpolated path as its
`instruction-frame-paths` TODO asks.
2026-07-28 13:16:24 +08:00
NI0317 717852423f fix(fs): harden directory listing and glob sampling 2026-07-28 13:01:26 +08:00
NI0317 a9c0e00620 docs: record the directory-listing and glob-sampling decision
Agent Note for the two changes: what the session log showed, what ordering
can and cannot fix (measured, correcting the first diagnosis), why the page
is sampled only past the cap, why `list` is needed alongside it, and the
alternatives each one beat.
2026-07-28 12:06:25 +08:00
NI0317 9b9b45e65e fix(fs-search): sample an over-cap glob result across the tree
Asked what a workspace contained, an agent described one subfolder as the
whole project. `glob {"pattern": "*"}` matched 10030 paths across 22
top-level entries and the inline page was the first 100 of them, all under a
single unpacked archive.

Three properties compose into that page: a pattern with no `/` matches
basenames at any depth, so `*` means the whole tree rather than its top
level; `--sort=modified` orders oldest first, and unpacking an archive
restores timestamps that predate everything the user wrote; and the page was
the head of that order. Each is defensible alone, and together they make the
most ordinary request an agent receives produce a confident wrong answer.

A result within `globMaxResults` is unchanged — shown whole, in
modification-time order. Beyond it the page is filled round-robin across the
complete result's top-level entries, so one subtree cannot own every slot,
and the footer states that the page was sampled rather than taken in
modification-time order. Measured on a 24-entry, 716-file reproduction, the
head of 100 reaches 7 top-level names and the sampled page reaches 21. The
spill artifact still holds the complete sorted list.

The guidance and schema stop steering away from `ls`, state the any-depth
pattern rule, say results are files and never directories, and point at
`list` for a directory's contents.
2026-07-28 12:05:36 +08:00
NI0317 d4614f92d6 feat(fs): add a model-facing directory listing tool
`ctx.fs.listDir` has shipped since the filesystem seam gained it, with skill
discovery as its only consumer; the model-facing tool was deferred to a
separate decision. Nothing else could answer "what is in this directory":
`rg --files` backs glob and grep and never emits a directory entry, so an
empty directory is invisible, no output says which names are directories,
and no output gives an entry count.

`list` takes an optional `path`, defaulting to the session workspace so the
common question needs no argument, and returns the direct children of one
directory with their type. Two presentation rules carry it: directories sort
first, then files, then non-regular children, each alphabetically — so
truncation loses leaves rather than the tree — and the footer always states
the complete listing's size and composition, so a capped view can never read
as a whole directory.

It emits no `fs/observed`: seeing a filename is not reading a file, and a
listing must never satisfy the read-before-write gate.
2026-07-28 11:59:52 +08:00
NI0317 1ef285d038 Restore Cordis mount and unmount names
Keep temporary lifecycle descriptions and UI labels explicit.
2026-07-27 21:20:06 +08:00
NI0317 8cec221dab Merge remote-tracking branch 'origin/master' into feature/cordis-temporary-tools 2026-07-27 17:45:01 +08:00
NI0317 b4a1304489 Rename Cordis tools for temporary plugins
Clarify process-local lifecycle semantics and refresh generated documentation, demos, and snapshots.
2026-07-27 16:57:26 +08:00
NI0317 c171ecc60b Merge remote-tracking branch 'origin/master' into feature/delete-workspace 2026-07-27 16:07:11 +08:00
NI0317 dcf06e8272 Merge remote-tracking branch 'origin/master' into feature/delete-workspace
# Conflicts:
#	packages/client/runtime/README.i18n.yaml
#	packages/host/apiproxy/README.i18n.yaml
2026-07-27 15:54:51 +08:00
NI0317 4701373fc2 fix(workspace): remove transient duplicate warning 2026-07-27 15:52:35 +08:00
NI0317 7bd96af5eb fix(workspace): make deletion recoverable 2026-07-27 14:37:04 +08:00
NI0317 187cf6f804 feat(web): delete workspace registrations 2026-07-27 12:38:11 +08:00
NI0317 54d986ed87 fix(tui): close resume handoff races 2026-07-24 01:29:35 -07:00
NI0317 2ae9f4fdf3 feat(tui): add safe session resume flow 2026-07-24 01:29:35 -07:00
NI0317 f97f9bcf8a chore(examples): declare @deepseek-ai/dsh-llm-pi-ai as an example dep
pi-ai is the library-backed twin adapter the tui-agent README already
points at ("swap one line to @deepseek-ai/dsh-llm-pi-ai"), and the
supported entry point for third-party providers (Anthropic, Google,
OpenRouter) mounted through the personal overlay under ~/.dsh. Making
it a declared workspace dep of the examples umbrella means
`pnpm install` resolves the symlink upstream so users configuring a
third-party provider via `~/.dsh/config.yaml` don't have to patch
`examples/package.json` locally (which their next git checkout would
wipe).

Placement matches the sibling llm-* cluster; workspace:* to match the
other adapters. No cordis.yml or README changes: mounting pi-ai
remains explicit and opt-in per the provider-routed-llm-adapters
Agent Note.
2026-07-24 13:23:28 +08:00
NI0317 a7bfade7eb refactor(pty): rename model-facing tools to terminal_* and harden teardown
Rename the six model-facing tools pty_* -> terminal_* and align every
description, guidance section, ACP card title, and rendered result to
terminal terminology. Package and service internals keep their technical
PTY names (PtyService, "unknown PTY session", node-pty).

Harden the local backend teardown:
- a failed close is retryable: drop the memoized rejection so a later
  terminal_close re-runs against the live process table
- service disposal clears the backend, reservation, and owner-cleanup
  registries even when a close fails
- stop readiness polling before teardown so an in-flight send settles as
  session_exit instead of a mis-inferred wait reason
- bound the sanitizer's pending buffer against unterminated escape runs

Update the tool catalog, package READMEs, the bilingual Agent Note, and the
acp/headless pty-tools snapshots to match.
2026-07-21 19:29:56 +08:00
NI0317 85ac747208 fix: wait for PTY startup readiness 2026-07-21 16:12:42 +08:00
NI0317 58cde5103a feat: add persistent PTY sessions 2026-07-21 16:01:00 +08:00
NI0317 b4750f6333 Merge remote-tracking branch 'origin/master' into rfc/pty 2026-07-20 17:33:50 +08:00
NI0317 f1f35116ea docs(agent-note): propose persistent PTY sessions 2026-07-20 16:57:28 +08:00
NI0317 e9b76e40e1 Revert "docs(ui): add desktop workbench screenshots for PR review"
This reverts commit 723f0b96b2afbb7bc11a7687a736eca4521798fa.
2026-07-20 11:23:47 +08:00
NI0317 a321567473 docs(ui): add desktop workbench screenshots for PR review 2026-07-20 11:05:28 +08:00
NI0317 37a03df733 fix(ui): pin dock rows, verb labels on live tools, dedupe reject
Auto placement floated the new docks to the top of the main pane; every
dock now owns an explicit grid row (and the layout regression guards
them). Live tool rows use the streamed kind verb like persisted rows,
and the approval card's fallback reject is omitted when the request
already carries a reject option.
2026-07-20 10:58:21 +08:00
NI0317 d3ac437616 feat(ui): queue prompts, in-conversation approval cards, docked plan
Prompts submitted while a turn runs queue above the composer (edit,
remove, auto-send on completion; interruption or a failure pauses the
queue with an explicit resume). Permission requests and elicitations
route from the ACP client in main to renderer cards with the request
options — pending cards replay when the renderer reloads, replacing
the blocking OS dialogs. The task plan docks above the composer instead
of scrolling inside the thread, multi-line user bubbles trim their
padding lines, and a turn that ends abnormally shows an inline error
line in the transcript.
2026-07-20 10:46:00 +08:00
NI0317 91554b05f1 test(ui): cover seqless todo/write snapshots in the trace graph 2026-07-20 10:27:59 +08:00
NI0317 cdb5524632 feat(ui): render todo plans and streamed tool kinds in both views
todo/write events fold into plan targets: the chat transcript and
trajectory show a checklist card (done counts, active item), and live
ACP plan updates render the same card while the turn streams — the
task list was previously invisible on both paths. Tool rows label
themselves with the streamed ACP kind verb (read/edit/search/run…)
instead of a generic noun, and touched-file locations open in the OS
editor from the expanded row.
2026-07-20 10:25:11 +08:00
NI0317 7a5f0b0827 chore(ui): drop the Change Loop panel and detail-head status badge 2026-07-19 21:54:29 +08:00
NI0317 88544d9c1b fix(ui): keep live tool presentation after turn completion
Turn completion no longer force-scrolls the conversation: only a
session switch snaps to the bottom, so finishing a turn does not yank
the view while the user reads. ACP streams richer tool titles (for
example a workflow run's description) than the persisted tool/call
name; remember them per call id and keep rendering them in chat and
trajectory after the persisted trace replaces the live turn.
2026-07-19 21:50:19 +08:00
NI0317 e290545c97 docs(ui): add KV Cache effect fields to the desktop Model Experience 2026-07-19 21:48:22 +08:00
NI0317 3b23f4c41b Merge remote-tracking branch 'origin/master' into codex/desktop-ui-source-browser
# Conflicts:
#	knip.json
#	pnpm-lock.yaml
2026-07-19 21:42:28 +08:00
NI0317 c2fdfae170 feat(ui): open Develop artifacts in the OS editor
Develop stays read-first: each artifact whose source is a repository
path gains an Open in editor action routed through a path-validated
main-process handler (shell.openPath), instead of an in-app write path.
Persona and prompt-assembly sources open the governing cordis.yml or
source file directly.
2026-07-19 21:39:08 +08:00
NI0317 97df884937 fix(ui): align the sidebar rail and topbar controls on one geometry
Every sidebar section now shares the same horizontal inset, so the
primary action, module nav, search field, and session rows start and
end on identical lines with one control height and one radius. Topbar
controls share one row height, and the round send-button style no
longer leaks onto the cancel button.
2026-07-19 21:14:39 +08:00
NI0317 96076606df polish(ui): apply ui-skills audit across a11y, motion cost, and numerics
fixing-accessibility: expandable rows expose aria-expanded/controls, user
messages become keyboard-operable buttons, pane dividers and the composer
gain accessible names, the live status row announces politely, the busy
form sets aria-busy, feedback failures render inline next to the form,
and the muted/faint text tiers rise to AA-viable contrast.

fixing-motion-performance: composer autosize moves to CSS field-sizing
(dropping the per-keystroke measure/write cycle) and streaming scroll
writes coalesce per frame while direct user actions stay synchronous.

baseline-ui: data columns use tabular numerals, headings balance and
prose wraps pretty, and z-index joins the token scale.

improve-ui: straggler radii and control heights land on the declared
size scale (radius-xs joins the ramp).

fixing-metadata: the document language follows the active locale.
2026-07-19 11:32:07 +08:00
NI0317 74390bca0a fix(ui): never reuse a stale live-turn skeleton and poll lagging traces
A finished turn whose persisted JSONL had not flushed yet left the live
turn on screen; the next prompt then patched its content into the stale
skeleton, so the new message rendered under the previous user bubble.
Key each live turn and rebuild the skeleton on mismatch, and poll the
persisted trace after a lagging read so the conversation converges
without waiting for a user action. Module nav rows also collapse to one
line at the primary-action control height.
2026-07-19 11:22:48 +08:00
NI0317 de9190accc fix(ui): render the empty-state guide on first boot with no sessions 2026-07-19 11:10:21 +08:00
NI0317 c4584b5c19 feat(ui): rebuild desktop renderer on a shared trace graph and design tokens
Replace the full-innerHTML render loop with a static shell plus
per-region updates, so composer drafts, fold state, focus, and scroll
survive streaming turns. Fold session events into one trace graph
consumed by Chat, Trajectory, Waterfall, and the shared inspector
drawer, with live ACP updates patched into a keyed live-turn region.

Align the visual system with a tokenized design spec: a 4px spacing
base with fixed control/row height steps, foreground-derived text
tiers and borders (color-mix), neutral interaction overlays, tiered
motion durations with a reduced-motion collapse, hover-revealed
scrollbars, and drawer-aware layout elasticity. Localize trajectory
role chips and row previews.

The renderer entry (app.ts) joins the coverage exclude list as a
self-executing DOM bootstrap: jsdom lifecycle specs exercise its
behavior, and extractable logic lives in covered modules
(trace-graph.ts, renderer-content.ts).
2026-07-19 01:37:04 +08:00
NI0317 382708b1c0 chore(ui): satisfy desktop package gates 2026-07-18 17:44:12 +08:00
NI0317 2f37bbc61a feat(ui): refine desktop workbench navigation 2026-07-18 17:39:31 +08:00
NI0317 649183aa65 feat(ui): add desktop harness workbench 2026-07-18 17:05:46 +08:00
NI0317 aa18e2a9b2 feat(trace-workbench): reveal the session's jsonl in the file manager
POST /api/sessions/:id/reveal resolves the file server-side (execFile,
argv array — no shell) and opens the platform file manager; the header
button shows the full path on hover.
2026-07-18 14:37:35 +08:00
NI0317 5c0d741531 feat(trace-workbench): show spawned-session links in chat tool blocks
The parent session log has no record of subagent spawns (the workflow
engine spawns them internally; the only durable linkage is the child
header's parentSession field), so the workbench reconstructs call ->
children attribution by creation-time window. Surface that panel in the
chat tool block too, not just the trajectory row.
2026-07-18 14:33:45 +08:00
NI0317 b965285f28 feat(research): add trace-workbench local session-replay UI
A localhost viewer over persisted session JSONL for agent developers and
researchers. Three first-class views — Chat (markdown-rendered surface
conversation with a second-level inspector), Trajectory (turn/step tree
with scroll-spy over a step-grouped event table, inline annotations),
and Waterfall (timing summary + aligned time track that deep-links into
Trajectory). Subagent sessions group under their parentSession with
spawn links and breadcrumbs; failed tool calls are marked in every view;
?session=&view=&sel= makes any selection a shareable deep link.

Motion follows an audited restraint baseline (plans/ documents the
audit): one strong ease-out token, enter-only animations, press feedback
on pushbuttons, prefers-reduced-motion support.

AGENTS.md gains the research/ layout entry; the AGENTS.md word ceiling
rises 1370 -> 1375 to fit it (one line, relocation not applicable for a
top-level layout entry).
2026-07-18 14:06:32 +08:00
NI0317 d7ead6fdec docs(rfc): correct harness loop contracts 2026-07-16 18:47:46 +08:00
NI0317 8a33e7cd00 docs(rfc): propose harness-level goal-based loop
Introduce packages/loop as a capability seam covering goal-based (and
naturally proactive) loops around the existing agent-loop, deferring
time-based scheduling to a future dsh-schedule RFC. Four cordis service
seams — loop-as-session, pluggable Evaluator/Budget with EvaluatorSpec
tiers and protectedPaths, RoundHandoff, GoalReflector — plus a driver-
enforced Default-FAIL contract and reuse of packages/fs policy gate for
reward-hacking defense. Bilingual pair.
2026-07-16 17:06:16 +08:00
NI0317 069e0ecdc9 docs: refresh top-level README + add dsh-arch-diagram skill
Replaces the 20-line stub with a bilingual README pair covering:
- getting started (`pnpm run demo:repl` + Node ^22.19 || ≥24 + pnpm 11.7)
- editor integration (Zed / VS Code / Cursor over ACP)
- programmatic embedding via `@deepseek-ai/dsh-app-boot` (with the
  two failure paths of `boot()` vs `installFailLoud` spelled out)
- writing a plugin (`echo-tool` grounded in `examples/echo-agent`, with
  the runnable command `pnpm run demo:echo`)
- Packages table grouped by family, including `session-query`,
  `context`, and Support (with `invariants` called out as a runtime
  diagnostic mounted by `dsh-agent-core`, not test-only)
- deep-dive links, community, license

Bilingual pairing: English and Chinese sides share byte-identical code
blocks and mirroring link ordinals; language-asymmetric community
channels (Discord/X in EN, WeCom in ZH) sit inside HTML `<a href>`
tags that the pairing gate's structural signature excludes by design.
ZH side follows `docs/i18n/terminology.md` — first `agent` occurrence
annotated as `agent(智能体)`, plain `agent` thereafter.

Ships an in-repo skill at `.agents/skills/dsh-arch-diagram/` that owns
the two architecture PNGs (`assets/arch-{en,zh}.png`). HTML templates
+ shared CSS + a `render.sh` that renders via Chrome headless. The
renderer is portable (auto-detects Chrome/Chromium on macOS + Linux,
uses `--no-sandbox` under root for container envs, discovers the local
http.server port from Python's own startup line so `lsof` isn't
required). The 12-card capability row uses `flex: 0 0 auto` so
adjacent card backgrounds cannot clip descriptions; layout tuned to
1560px page / 96% row-width / 1820×580 render viewport.

Consolidates the four review-response commits from the initial round
of ds-review-bot feedback; each review round is documented in a
top-level PR comment for traceability.
2026-07-15 21:06:18 +08:00
NI0317 3735f8c955 docs(cookbook): add operator guide for dsh-code-review maintenance
Entry point for the skill's operator and for any future handoff: what the
private periodic tool produces, where the saved candidate diff and SKILL.md
land on the operator's machine, and how the promote helper turns the
operator's decision into a draft PR from a clean master checkout. Companion
to the maintenance RFC.
2026-07-15 21:05:52 +08:00
NI0317 9a4efada5d docs(rfc): propose periodic human-review maintenance for dsh-code-review
A private out-of-repo maintainer tool turns adopted human review feedback
into candidate skill updates. Only the resulting SKILL.md diff enters this
repository through normal PR review; the tool source, adapter binaries,
provider credentials, and scheduler stay on the maintainer's machine to
keep this repository focused on shipped product code. Kept in proposed/
until end-to-end verification against master lands a candidate PR; the
acceptance criteria list the exact observations that unlock promotion.
2026-07-15 21:05:43 +08:00
NI0317 d0910a2ed7 docs(skill): distill adopted review feedback 2026-07-15 21:05:18 +08:00