Skip to content

feat(codemap+website): locator/compose polish, plugins gallery page, ops-board design#246

Merged
haowei2000 merged 4 commits into
developfrom
claude/workbench-codemap-design-7f752f
Jul 17, 2026
Merged

feat(codemap+website): locator/compose polish, plugins gallery page, ops-board design#246
haowei2000 merged 4 commits into
developfrom
claude/workbench-codemap-design-7f752f

Conversation

@haowei2000

@haowei2000 haowei2000 commented Jul 17, 2026

Copy link
Copy Markdown
Collaborator

What

One workstream, five commits — codemap hardening, the cheers:compose host verb, and the website plugin column:

1. Directory locators + tree-confirmed probing (wsLocate)

A module's natural loc is often a directory (server/src/gateway); the file endpoint reports those as E_IS_DIR — or not-found on some connectors. Probing now treats E_IS_DIR as a hit and confirms file-endpoint misses with a tree listing before ruling a candidate out. Resolution returns {path, kind}: directories open the workspace folder view, line anchors apply to files only.

2. Verify-before-write prompt rule (map.yaml header guide)

"The path part is relative to YOUR workspace root: VERIFY it exists (e.g. ls <path>) before writing it"; prefer a representative file + #L<line> over a bare directory. Template seed regenerated byte-identical. Renderer search also matches loc paths.

3. cheers:compose — plugin-suggested, human-sent messages (new protocol-1 host verb)

Plugins can prefill the channel composer; nothing is ever sent on their behalf. Empty draft filled / typed draft appended on a new line (user text never lost); @label tokens matching members register as picked mentions — routing's source of truth — so the suggestion actually reaches its bot. Host shape-gates (≤4000 chars, control chars stripped). Docs (EN + zh) + SDK compose(text); the codemap drawer gains "让 bot 讲讲这个模块" (mention derived from the node's loc handle). Enabling primitive for ChatOps boards.

4. Website: Plugins gallery page (website/plugins.html)

The plugin column: what a plugin is, the try→install→preinstalled story, galleries for the four official plugins (descriptions from their actual manifests) and the docs examples (codemap pair, paper tracker, code review board, starter kit + SDK), one-line security model, learn-more grid. Download links serve ./downloads/plugins/*, assembled by pages.yml at build time from the sources of truth (no duplicates in git; workflow also triggers on those paths). Every page's nav gains a Plugins entry.

5. Ops-board design artifact (docs/arch)

Approved v3 mockup for the upcoming ops-board plugin pair: control-machine model (bot = the machine that SSHes into servers; via routing; unreachable ≠ down), lean cards with details-in-drawer, lucide-style icons, deploy via compose prefill.

Tests / verification

  • npm test 74 passed · npm run typecheck clean except pre-existing PdfViewer.tsx.
  • Compose flow exercised in the plugin's standalone demo (mention correctly derived from loc).
  • All 13 gallery download hrefs script-checked 1:1 against the CI copy step; page eyeballed in light/dark, no console errors. Pages deploys on the next develop→main promotion.

🤖 Generated with Claude Code

haowei2000 and others added 2 commits July 17, 2026 11:32
Field report #3: a module loc pointed at a DIRECTORY
(server/src/gateway) — natural for module nodes, but the probe only
used the file endpoint, where directories surface as E_IS_DIR or, on
some connectors, as not-found. So:

- wsLocate treats E_IS_DIR as a hit and, after a file-endpoint miss,
  confirms candidates with a tree listing before ruling them out;
  resolution now returns {path, kind} and a directory jump opens the
  workspace folder view (the dialog's deep-link already lists dirs).
- Line anchors only apply to files.
- map.yaml header guide gains the strongest lever against invented
  paths: VERIFY the path exists (ls it) before writing loc, and prefer
  a representative file + #L<line> over a bare directory. Template
  seed regenerated byte-identical.
- Renderer search also matches loc paths.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ent messages

Renderer plugins can now PREFILL the channel composer (plugin -> host
cheers:compose {text}); nothing is ever sent on the plugin's behalf.
The human's send keystroke is what turns a suggestion into a channel
action — side effects stay human-in-the-loop, audit-visible, and
behind the existing bot approval gates. Enables ChatOps-style boards
(click Deploy -> composer holds '@ops deploy web-1 test' -> review ->
send).

- MessageComposer gains a prefill prop: an empty draft is filled, a
  typed draft gets the text appended on a new line (user text is never
  lost); @Label tokens matching mentionables are registered as picked
  mentions — routing's source of truth — so the suggestion actually
  reaches its bot; focus + cursor-to-end.
- SandboxRenderer shape-gates the message (string, <=4000 chars,
  control chars stripped) and threads it via ctx.composeMessage to
  ChannelView, which owns the composer.
- Protocol docs (EN normative + zh) and the SDK gain the message /
  compose(text).
- codemap example: the detail drawer gains '让 bot 讲讲这个模块' —
  the mention is derived from the node's loc handle (the bot that
  wrote the loc is the bot that knows the code).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@haowei2000 haowei2000 changed the title feat(codemap): directory locators, tree-confirmed probing, verify-before-write prompt feat(codemap): directory locators + verify-before-write prompt + cheers:compose prefill Jul 17, 2026
haowei2000 and others added 2 commits July 17, 2026 12:45
ChatOps server dashboard over an agent-maintained ops/servers.yaml:
control-machine model (bot = the machine that SSHes into servers, via
routing, unreachable≠down), lean cards (status badges + flags, details
in a drawer), lucide-style icons, deploy via cheers:compose prefill.
Design artifact for the upcoming ops-board plugin/template pair.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
New website/plugins.html — the plugin column: what a workbench plugin
is (one sandboxed HTML file), the three-step try/install/preinstalled
story, a gallery of the four official plugins (descriptions from their
actual manifests) and the docs/arch examples (codemap, paper tracker,
code review board, starter kit + SDK), the one-line security model,
and links into the dev guide + normative spec.

Download links serve from ./downloads/plugins/*, assembled by pages.yml
at build time from the sources of truth (server/assets/workbench-plugins
+ docs/arch/examples) — no duplicate copies in git. The workflow also
triggers on changes to those paths so downloads stay fresh. Every page's
nav gains a Plugins entry; plugin-dev's self-link now points here.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@haowei2000 haowei2000 changed the title feat(codemap): directory locators + verify-before-write prompt + cheers:compose prefill feat(codemap+website): locator/compose polish, plugins gallery page, ops-board design Jul 17, 2026
@haowei2000
haowei2000 merged commit e95f7bb into develop Jul 17, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant