✨ feat(vscode): 重写注释把原型存进 docs/prototype/<功能>/openpencil/
跟写注释技能 ECC v2.2.53 的原型约定:去掉临时草稿目录 spx-comment-<id> 和 */prototypes 的建目录规则,会话 id 交给 Claude Code 起。 放开 Edit/Write 到 docs/prototype/*/openpencil/ 下、mkdir -p 到 docs/prototype/*/openpencil/exports;Bash 规则的 * 能跨空格,另外拒掉建目录时多跟一个路径的写法。
This commit is contained in:
1 parent
5bfa89e691
commit
b7c29c60e1
3 files changed
+43
-66
No files matched your search
@@ -640,9 +640,9 @@
|
||||
- 按钮(`MessageSquareText` 图标,只有图标,悬停 / 读屏「按注释规范重写」,块还没有说明、也没有前面的普通注释时是「按注释规范写注释」):每块代码都有,不管卡片有没有「注释」一行都排在右上角那排按钮的最前面,依次是它、「问 AI」、「编辑」;文件开头的说明卡片也一样。定义卡片浮窗里、删掉的块没有;嵌着的代码里的块(Dockerfile RUN 里的 shell)、语言既没有说明的写法(`LanguageAdapter.freshDoc`)也没给行注释记号(`LanguageAdapter.lineComment`)、又还没有可换的注释的块没有(`BlockView.commentTarget` 没有);文件不在工作区文件夹里时重写记录没地方存,也没有。点了按技能命令重写(开新会话)、展开这块的重写记录;展开着又正在写时不能再点。重写过、记录收着时它叫「展开重写记录」,点了只展开(好接着说),展开着再点才重写。
|
||||
- 改哪儿(`BlockView.commentTarget`,扩展端 `blockView.ts` 算):块已经有说明(Python 函数 / 类主体里第一条语句的 docstring、紧贴声明的 JSDoc、Rust 的 `///` / `//!`,以及别的语言记在块上的说明)时换掉这段说明的那几行,正文填回原来的定界符(`"""`、`/** */`、`///`),不在声明上面再插一行行注释;说明和块前面的普通注释都有时只换说明,普通注释留着。没有说明、块前面挂着普通注释时换掉它们(从第一段开头到最后一段结尾,几段中间隔着的空行一起换掉,写成一段);文件开头的说明卡片换掉它自己。都没有时新写:Python 的函数或类在主体里插一段 docstring(缩进同主体,作为第一条语句;声明和主体写在同一行时从主体那一列拆开);JavaScript / TypeScript 的函数、类、枚举、常量、变量在声明紧上面插 `/** */`;Rust 的项在紧上面插 `///`;别的(语句、Python 的变量,只有行注释的 shell、Dockerfile)在块的第一行上面插一行行注释。挂在块后面、子块交上来的注释不动。技能照这条规矩从范围本身判断写哪种:写说明时带 `@param` 等标签,前端组件的说明画原型图、嵌进正文。
|
||||
- 问模型:同「问 AI」用 Claude Code 命令行、在这份文件所在的工作区文件夹里跑、用输入框旁边选的 profile,按 JSON Schema 交结果(`--json-schema '{"type":"object","properties":{"body":{"type":"string"}},"required":["body"],"additionalProperties":false}'`:模型调 `StructuredOutput` 交,result 行的 `structured_output.body` 是不带注释符号的正文;只回了一段话、`body` 是空的都算没交回)。文件有没保存的修改时不问(模型读的是磁盘上的文件),直接失败「先保存再重写注释」。
|
||||
- 第一轮(点按钮)从 stdin 发的只有一句 `/ecc:writing-code-comments <路径>:<起>-<止>`:路径相对 claude 的工作目录、用 `/` 分隔,行号 1 起,是这块代码的完整范围(连同挂在它上面的注释;文件开头的说明卡片是它自己那几行),开新会话(`--session-id` 由扩展起)。
|
||||
- 第一轮(点按钮)从 stdin 发的只有一句 `/ecc:writing-code-comments <路径>:<起>-<止>`:路径相对 claude 的工作目录、用 `/` 分隔,行号 1 起,是这块代码的完整范围(连同挂在它上面的注释;文件开头的说明卡片是它自己那几行),开新会话(会话 id 由 Claude Code 起,结果里带回来)。
|
||||
- 输入框里说的话:`--resume` 这块最近一次重写的会话(和问答的会话分开,各接各的),发「块现在在哪(`<路径>:<起>-<止>`,写回注释后行号会变,按记号从最新的块树里找)、空一行、用户的话」,带上贴的图。会话找不到了(过期、被清理)就开新会话,发技能命令后面空一行跟着这句话。
|
||||
- 能做的事(`claudeAsk.ts` 的 `rewriteArgs`):`--restricted` 不读用户、项目、本地的设置文件(那里放行的命令进不来,比如用户设置里的 `git -C`),文件工具只认工作目录;写注释的插件单独加载(`--plugin-dir`,目录按 `claude plugin list --json` 里启用着的 ecc 找),它的目录和这个会话的草稿目录(系统临时目录下的 `spx-comment-<会话 id>`)加进工作目录(`--add-dir`)。工具只给读、搜、Bash、写文件(`--tools Read,Grep,Glob,Bash,Edit,Write`),不用再批的只有读搜、OpenPencil 的 `op`(`Bash(/Applications/OpenPencil.app/Contents/MacOS/op *)`)、建组件旁边的 `prototypes/` 目录(`Bash(mkdir -p */prototypes)`)、改草稿目录(`Edit(//<草稿目录>/**)`),别的一律拒绝、不等人批(`--permission-mode dontAsk`),不加载 MCP(`--strict-mcp-config`):改不了源码、跑不了别的命令,写回归扩展。本机 claude 2.1.296 试过:op 能跑、PNG 写进 `prototypes/`,改源码、`rm`、`git -C`、`node -e`、重定向写文件都被拒。
|
||||
- 能做的事(`claudeAsk.ts` 的 `rewriteArgs`):`--restricted` 不读用户、项目、本地的设置文件(那里放行的命令进不来,比如用户设置里的 `git -C`),文件工具只认工作目录;写注释的插件单独加载(`--plugin-dir`,目录按 `claude plugin list --json` 里启用着的 ecc 找),它的目录加进工作目录(`--add-dir`),技能读得到它的参考文档。原型照技能的约定存在仓库里:`docs/prototype/<功能>/openpencil/` 下的 `build.js`、`<功能>.op`,截图在它的 `exports/` 里,注释链到截图。工具只给读、搜、Bash、写文件(`--tools Read,Grep,Glob,Bash,Edit,Write`),不用再批的只有读搜、OpenPencil 的 `op`(`Bash(/Applications/OpenPencil.app/Contents/MacOS/op *)`)、建原型的截图目录(`Bash(mkdir -p docs/prototype/*/openpencil/exports)`)、改原型目录里的文件(`Edit(/docs/prototype/*/openpencil/**)`,开头的 `/` 是 claude 的工作目录,`*` 只配一层目录;Edit 规则也管 Write)。Bash 规则里的 `*` 能跨空格,建目录时后面多跟一个路径(`mkdir -p docs/prototype/x/openpencil/exports src/y`)也对得上,所以另外拒掉 `Bash(mkdir -p docs/prototype/* *)`(`--disallowedTools`)。别的一律拒绝、不等人批(`--permission-mode dontAsk`),不加载 MCP(`--strict-mcp-config`):改不了源码、跑不了别的命令,写回归扩展。本机 claude 2.1.296 用这组参数试过:写、改 `docs/prototype/x/openpencil/build.js`,建它的 `exports/`,`op --version` / `op status` 都行;写、改源码,写 `docs/prototype` 之外和 `docs/prototype/x/` 下 `openpencil/` 之外的文件,在别处建目录(`docs/other/exports`、`src/openpencil/exports`、仓库外的绝对路径、带 `..` 的路径、合法路径后面多跟一个),`rm`、`git -C`、`node -e`、重定向写文件都被拒。
|
||||
- 画图比读文件慢,超时 15 分钟(问 AI 仍是 5 分钟)。
|
||||
- 过程:说的话(第一轮是那句技能命令,开始后扩展端报上来)、正文逐字长出来(`--include-partial-messages` 时 `StructuredOutput` 的输入逐段来,按写到一半的 JSON 读出已经写出来的正文)、正在做什么(「读取 a.py」)。块下面同问答区的样子(`AskThread` 换成重写的称呼):灰字历史、当前这一轮、输入框(提示「说说这段注释要怎么改…」,旁边 profile 下拉,能贴图),正在写时发送换成停止。同一块同时只重写一轮,全插件同时最多 3 段。
|
||||
- 写回(扩展端,`WorkspaceEdit`,能撤销):换掉时套回原来那段的定界符和缩进(Python 三引号、`#` / `//` / `///` / `//!` 行注释、`/* */` 块注释,`refillComment`;几段隔着空行的照第一段的写法);新写时用这块说明的壳(docstring、`/** */`、`///`,或行注释 `#` / `//`)一行一行写,缩进同插入的那一行,空行写成只有记号的一行(docstring 的空行仍是空行)。写之前核对这块代码的那几行和开始时一样,变了就不写(「这块代码在重写期间变了」);没交回正文、定界符认不出、编辑器没接受也不写。
|
||||
|
||||
Reference in new issue
Block a user