opencode-gbk-tools 1.1.0 → 1.1.1
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.md +5 -4
- package/dist/plugin/index.js +1 -33
- package/dist/plugins/opencode-gbk-tools.js +1 -33
- package/dist/release-manifest.json +2 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
## 安装
|
|
26
26
|
|
|
27
27
|
```bash
|
|
28
|
-
npx opencode-gbk-tools
|
|
28
|
+
npx opencode-gbk-tools setup
|
|
29
29
|
```
|
|
30
30
|
|
|
31
31
|
安装完成后会注册 `opencode-gbk-tools` plugin,由该 plugin 统一向全部 agents 暴露 `text_*` / `gbk_*` 工具与规则。
|
|
@@ -45,7 +45,7 @@ npx opencode-gbk-tools install
|
|
|
45
45
|
|
|
46
46
|
### 一键卸载(对应一键安装)
|
|
47
47
|
|
|
48
|
-
如果当初是用 `npx opencode-gbk-tools
|
|
48
|
+
如果当初是用 `npx opencode-gbk-tools setup` 安装的,执行:
|
|
49
49
|
|
|
50
50
|
```bash
|
|
51
51
|
npx opencode-gbk-tools uninstall
|
|
@@ -61,7 +61,7 @@ npx opencode-gbk-tools uninstall
|
|
|
61
61
|
|
|
62
62
|
- 默认 `encoding=auto`
|
|
63
63
|
- 新建 `.txt` 文件时,优先直接使用 `gbk_write` 创建;plugin 会把这类创建请求优先路由到 `gbk_*`
|
|
64
|
-
-
|
|
64
|
+
- 只要某个目标文件已确认或首次检测为 `gbk` / `gb18030`,该文件后续就会直接禁止内置工具与 `text_*`,统一改走 `gbk_*`
|
|
65
65
|
- 已有文件会尽量保持:
|
|
66
66
|
- 原编码
|
|
67
67
|
- BOM
|
|
@@ -210,7 +210,8 @@ A:不要。现在优先用 `mode="insertAfter"` 或 `mode="insertBefore"`,
|
|
|
210
210
|
|
|
211
211
|
| 版本 | 说明 |
|
|
212
212
|
|------|------|
|
|
213
|
-
| 1.1.
|
|
213
|
+
| 1.1.1 | 收敛最终路由规则并修正文档:继续保留“新建 `.txt` 强制走 `gbk_write`”,已有文件则严格按真实检测结果路由;一旦检测/记忆为 GBK/GB18030,就对该目标文件直接禁用内置 `read/write/edit` 与 `text_*`,后续统一走 `gbk_*`;同时把安装说明统一更正为 `npx opencode-gbk-tools setup` |
|
|
214
|
+
| 1.1.0 | 首个 `1.x` 稳定版本:保留 GBK/GB18030 路由、记忆与新建 `.txt` 走 `gbk_write` 的规则;对已确认或首次检测为 GBK/GB18030 的目标文件,统一禁止内置读写编辑工具与 `text_*`,直接改走 `gbk_*`;同时修复插件层同步自动 summarize 可能导致的会话卡住问题,并为会话状态与 `gbk-file` 行索引缓存增加边界控制,降低长会话和多文件场景下的阻塞与内存累积风险 |
|
|
214
215
|
| 0.1.31 | 在 `0.1.30` 基础上继续收紧新建文件路由:新建 `.txt` 文件必须优先直接使用 `gbk_write`,不再先走 `text_write` 或内置 `write/edit`;并新增“当前会话一旦成功使用过 `gbk_*`,后续新建文件继续优先走 `gbk_*`”的插件级约束与测试覆盖 |
|
|
215
216
|
| 0.1.30 | 补强 `text_*` 针对真实 GBK 样本与大体积重复样本的高强度测试:新增 `QFunction-0.txt` 真实样本读取、编辑、追加与端到端工作流覆盖,并补充大文件重复样本下的 `text_read` / `text_edit` 行为验证;同时继续收紧路由规则:新建 `.txt` 文件直接要求改用 `gbk_write`,且当前会话一旦使用过 `gbk_*`,后续新建文件也继续要求走 `gbk_*` |
|
|
216
217
|
| 0.1.29 | 在方案 B 基础上新增 GBK 文件持久记忆:普通 agent 继续按编码分流,UTF-8 优先使用 OpenCode 内置工具;对现有文件,已确认或首次检测到是 GBK/GB18030 的路径会按完整路径 + mtime/size 持久记忆;后续再次操作同一路径时,`text_*` 与内置 `read` / `write` / `edit` 都会被直接拦截并提示改用 `gbk_*`,避免先误走 `text_edit` / `edit` 再失败;`gbk-engine` 继续保持为强制 GBK 专属模式 |
|
package/dist/plugin/index.js
CHANGED
|
@@ -19405,7 +19405,7 @@ var TEXT_TOOL_SYSTEM_PROMPT = [
|
|
|
19405
19405
|
"- \u666E\u901A UTF-8 / UTF-8 BOM / UTF-16 \u6587\u672C\uFF0C\u4F18\u5148\u4F7F\u7528 OpenCode \u5185\u7F6E read\u3001write\u3001edit\u3002",
|
|
19406
19406
|
"- \u9047\u5230 GBK / GB18030 \u6587\u4EF6\u3001\u4E2D\u6587\u4E71\u7801\u3001\u975E UTF-8 \u65E7\u6587\u672C\uFF0C\u4F18\u5148\u4F7F\u7528 gbk_read\u3001gbk_write\u3001gbk_edit\u3001gbk_search\uFF0C\u4E0D\u8981\u5148\u5C1D\u8BD5 text_* \u6216\u5185\u7F6E read/write/edit\u3002",
|
|
19407
19407
|
"- \u65B0\u5EFA .txt \u6587\u4EF6\u5FC5\u987B\u4F18\u5148\u76F4\u63A5\u4F7F\u7528 gbk_write \u521B\u5EFA\uFF0C\u4E0D\u8981\u5148\u7528 text_write \u6216\u5185\u7F6E write/edit\uFF1B\u5E95\u5C42 text_write \u5728 encoding=auto \u4E0B\u867D\u7136\u4E5F\u4F1A\u9ED8\u8BA4\u5199\u6210 GBK\uFF0C\u4F46\u63D2\u4EF6\u4F1A\u628A\u8FD9\u7C7B\u521B\u5EFA\u8BF7\u6C42\u76F4\u63A5\u8DEF\u7531\u5230 gbk_*\u3002",
|
|
19408
|
-
"- \
|
|
19408
|
+
"- \u53EA\u8981\u67D0\u4E2A\u76EE\u6807\u6587\u4EF6\u5DF2\u786E\u8BA4\u6216\u9996\u6B21\u68C0\u6D4B\u4E3A GBK/GB18030\uFF0C\u8BE5\u6587\u4EF6\u540E\u7EED\u5C31\u76F4\u63A5\u7981\u6B62\u5185\u7F6E read/write/edit \u548C text_*\uFF0C\u7EDF\u4E00\u6539\u8D70 gbk_*\u3002",
|
|
19409
19409
|
"- \u5BF9\u73B0\u6709 .txt / .cfg / .ini / .log \u7B49\u65E7\u6587\u672C\u6587\u4EF6\uFF0C\u53EA\u8981\u6000\u7591\u662F\u4E2D\u6587\u672C\u5730\u7F16\u7801\uFF0C\u4F18\u5148\u5148\u7528 gbk_read \u5224\u65AD\uFF0C\u4E0D\u8981\u5148 edit \u518D\u56E0\u4E3A\u5339\u914D\u5931\u8D25\u6216\u6587\u4EF6\u65F6\u95F4\u6233\u53D8\u5316\u800C\u56DE\u9000\u3002",
|
|
19410
19410
|
"- \u5DF2\u786E\u8BA4\u6216\u9996\u6B21\u68C0\u6D4B\u5230\u662F GBK/GB18030 \u7684\u6587\u4EF6\u4F1A\u88AB\u63D2\u4EF6\u6301\u4E45\u8BB0\u5FC6\uFF1B\u518D\u6B21\u64CD\u4F5C\u540C\u4E00\u8DEF\u5F84\u65F6\uFF0C\u4F1A\u76F4\u63A5\u62E6\u622A\u5185\u7F6E read/write/edit \u548C text_*\uFF0C\u5E76\u8981\u6C42\u6539\u7528 gbk_*\u3002",
|
|
19411
19411
|
"- \u5982\u679C\u610F\u56FE\u662F\u2018\u5728\u67D0\u6807\u7B7E\u524D\u540E\u63D2\u5165\u5185\u5BB9\u2019\uFF0C\u4F18\u5148\u4F7F\u7528 mode=insertAfter \u6216 mode=insertBefore\uFF0C\u5E76\u4F20 anchor/content\u3002",
|
|
@@ -19574,7 +19574,6 @@ var BUILTIN_TEXT_TOOL_IDS = /* @__PURE__ */ new Set(["read", "write", "edit"]);
|
|
|
19574
19574
|
var TEXT_TOOL_IDS = /* @__PURE__ */ new Set(["text_read", "text_write", "text_edit"]);
|
|
19575
19575
|
var ROUTED_TEXT_TOOL_IDS = /* @__PURE__ */ new Set([...BUILTIN_TEXT_TOOL_IDS, ...TEXT_TOOL_IDS]);
|
|
19576
19576
|
var CREATE_ROUTED_TEXT_TOOL_IDS = /* @__PURE__ */ new Set(["write", "edit", "text_write", "text_edit"]);
|
|
19577
|
-
var GBK_TOOL_IDS = /* @__PURE__ */ new Set(["gbk_read", "gbk_write", "gbk_edit", "gbk_search"]);
|
|
19578
19577
|
function getToolFilePath(args) {
|
|
19579
19578
|
if (!args || typeof args !== "object") {
|
|
19580
19579
|
return null;
|
|
@@ -19601,9 +19600,6 @@ function buildTextEditSessionRoutingMessage(filePath) {
|
|
|
19601
19600
|
function buildNewTxtRoutingMessage(filePath) {
|
|
19602
19601
|
return `\u65B0\u5EFA .txt \u6587\u4EF6\u8BF7\u76F4\u63A5\u4F7F\u7528 gbk_write \u521B\u5EFA\u4E3A GBK/GB18030\uFF1B\u4E0D\u8981\u5148\u4F7F\u7528\u5185\u7F6E write/edit \u6216 text_*\uFF1A${filePath}`;
|
|
19603
19602
|
}
|
|
19604
|
-
function buildSessionGbkNewFileRoutingMessage(filePath) {
|
|
19605
|
-
return `\u5F53\u524D\u4F1A\u8BDD\u5DF2\u4F7F\u7528 gbk_* \u5DE5\u5177\uFF1B\u65B0\u5EFA\u6587\u4EF6\u8BF7\u7EE7\u7EED\u76F4\u63A5\u4F7F\u7528 gbk_write \u521B\u5EFA\u4E3A GBK/GB18030\uFF0C\u5FC5\u8981\u65F6\u518D\u7528 gbk_edit\uFF1B\u4E0D\u8981\u5207\u56DE\u5185\u7F6E write/edit \u6216 text_*\uFF1A${filePath}`;
|
|
19606
|
-
}
|
|
19607
19603
|
function isNewTxtFilePath(filePath) {
|
|
19608
19604
|
return path5.extname(filePath).toLowerCase() === ".txt";
|
|
19609
19605
|
}
|
|
@@ -19653,7 +19649,6 @@ function truncateMetadataPreview(value, sessionID) {
|
|
|
19653
19649
|
}
|
|
19654
19650
|
function createOpencodeGbkHooks(_client, directory, worktree) {
|
|
19655
19651
|
const sessionTextEditedFiles = /* @__PURE__ */ new Map();
|
|
19656
|
-
const sessionGbkToolUsage = /* @__PURE__ */ new Set();
|
|
19657
19652
|
const SESSION_TRACKING_LIMIT = 200;
|
|
19658
19653
|
function pruneSessionTracking() {
|
|
19659
19654
|
if (sessionTextEditedFiles.size > SESSION_TRACKING_LIMIT) {
|
|
@@ -19663,13 +19658,6 @@ function createOpencodeGbkHooks(_client, directory, worktree) {
|
|
|
19663
19658
|
sessionTextEditedFiles.delete(sessionID);
|
|
19664
19659
|
}
|
|
19665
19660
|
}
|
|
19666
|
-
if (sessionGbkToolUsage.size > SESSION_TRACKING_LIMIT) {
|
|
19667
|
-
const overflow = sessionGbkToolUsage.size - SESSION_TRACKING_LIMIT;
|
|
19668
|
-
const sessionIDs = [...sessionGbkToolUsage].slice(0, overflow);
|
|
19669
|
-
for (const sessionID of sessionIDs) {
|
|
19670
|
-
sessionGbkToolUsage.delete(sessionID);
|
|
19671
|
-
}
|
|
19672
|
-
}
|
|
19673
19661
|
}
|
|
19674
19662
|
function rememberSessionTextEditFile(sessionID, normalizedFilePath) {
|
|
19675
19663
|
if (!sessionID) {
|
|
@@ -19689,20 +19677,6 @@ function createOpencodeGbkHooks(_client, directory, worktree) {
|
|
|
19689
19677
|
}
|
|
19690
19678
|
return sessionTextEditedFiles.get(sessionID)?.has(normalizedFilePath) ?? false;
|
|
19691
19679
|
}
|
|
19692
|
-
function rememberSessionGbkToolUsage(sessionID) {
|
|
19693
|
-
if (!sessionID) {
|
|
19694
|
-
return;
|
|
19695
|
-
}
|
|
19696
|
-
sessionGbkToolUsage.delete(sessionID);
|
|
19697
|
-
sessionGbkToolUsage.add(sessionID);
|
|
19698
|
-
pruneSessionTracking();
|
|
19699
|
-
}
|
|
19700
|
-
function hasSessionGbkToolUsage(sessionID) {
|
|
19701
|
-
if (!sessionID) {
|
|
19702
|
-
return false;
|
|
19703
|
-
}
|
|
19704
|
-
return sessionGbkToolUsage.has(sessionID);
|
|
19705
|
-
}
|
|
19706
19680
|
return {
|
|
19707
19681
|
tool: {
|
|
19708
19682
|
gbk_read: gbk_read_default,
|
|
@@ -19742,9 +19716,6 @@ function createOpencodeGbkHooks(_client, directory, worktree) {
|
|
|
19742
19716
|
}
|
|
19743
19717
|
const resolvedFilePath = resolveCandidatePath(filePath, { directory, worktree });
|
|
19744
19718
|
if (CREATE_ROUTED_TEXT_TOOL_IDS.has(input.tool) && !await doesPathExist(resolvedFilePath)) {
|
|
19745
|
-
if (hasSessionGbkToolUsage(input.sessionID)) {
|
|
19746
|
-
throw new Error(buildSessionGbkNewFileRoutingMessage(filePath));
|
|
19747
|
-
}
|
|
19748
19719
|
if (isNewTxtFilePath(resolvedFilePath)) {
|
|
19749
19720
|
throw new Error(buildNewTxtRoutingMessage(filePath));
|
|
19750
19721
|
}
|
|
@@ -19782,9 +19753,6 @@ function createOpencodeGbkHooks(_client, directory, worktree) {
|
|
|
19782
19753
|
if (typeof metadata.diffPreview === "string") {
|
|
19783
19754
|
metadata.diffPreview = truncateMetadataPreview(metadata.diffPreview, input.sessionID);
|
|
19784
19755
|
}
|
|
19785
|
-
if (GBK_TOOL_IDS.has(input.tool)) {
|
|
19786
|
-
rememberSessionGbkToolUsage(input.sessionID);
|
|
19787
|
-
}
|
|
19788
19756
|
if (input.tool === "text_edit" && typeof metadata.filePath === "string") {
|
|
19789
19757
|
rememberSessionTextEditFile(
|
|
19790
19758
|
input.sessionID,
|
|
@@ -19405,7 +19405,7 @@ var TEXT_TOOL_SYSTEM_PROMPT = [
|
|
|
19405
19405
|
"- \u666E\u901A UTF-8 / UTF-8 BOM / UTF-16 \u6587\u672C\uFF0C\u4F18\u5148\u4F7F\u7528 OpenCode \u5185\u7F6E read\u3001write\u3001edit\u3002",
|
|
19406
19406
|
"- \u9047\u5230 GBK / GB18030 \u6587\u4EF6\u3001\u4E2D\u6587\u4E71\u7801\u3001\u975E UTF-8 \u65E7\u6587\u672C\uFF0C\u4F18\u5148\u4F7F\u7528 gbk_read\u3001gbk_write\u3001gbk_edit\u3001gbk_search\uFF0C\u4E0D\u8981\u5148\u5C1D\u8BD5 text_* \u6216\u5185\u7F6E read/write/edit\u3002",
|
|
19407
19407
|
"- \u65B0\u5EFA .txt \u6587\u4EF6\u5FC5\u987B\u4F18\u5148\u76F4\u63A5\u4F7F\u7528 gbk_write \u521B\u5EFA\uFF0C\u4E0D\u8981\u5148\u7528 text_write \u6216\u5185\u7F6E write/edit\uFF1B\u5E95\u5C42 text_write \u5728 encoding=auto \u4E0B\u867D\u7136\u4E5F\u4F1A\u9ED8\u8BA4\u5199\u6210 GBK\uFF0C\u4F46\u63D2\u4EF6\u4F1A\u628A\u8FD9\u7C7B\u521B\u5EFA\u8BF7\u6C42\u76F4\u63A5\u8DEF\u7531\u5230 gbk_*\u3002",
|
|
19408
|
-
"- \
|
|
19408
|
+
"- \u53EA\u8981\u67D0\u4E2A\u76EE\u6807\u6587\u4EF6\u5DF2\u786E\u8BA4\u6216\u9996\u6B21\u68C0\u6D4B\u4E3A GBK/GB18030\uFF0C\u8BE5\u6587\u4EF6\u540E\u7EED\u5C31\u76F4\u63A5\u7981\u6B62\u5185\u7F6E read/write/edit \u548C text_*\uFF0C\u7EDF\u4E00\u6539\u8D70 gbk_*\u3002",
|
|
19409
19409
|
"- \u5BF9\u73B0\u6709 .txt / .cfg / .ini / .log \u7B49\u65E7\u6587\u672C\u6587\u4EF6\uFF0C\u53EA\u8981\u6000\u7591\u662F\u4E2D\u6587\u672C\u5730\u7F16\u7801\uFF0C\u4F18\u5148\u5148\u7528 gbk_read \u5224\u65AD\uFF0C\u4E0D\u8981\u5148 edit \u518D\u56E0\u4E3A\u5339\u914D\u5931\u8D25\u6216\u6587\u4EF6\u65F6\u95F4\u6233\u53D8\u5316\u800C\u56DE\u9000\u3002",
|
|
19410
19410
|
"- \u5DF2\u786E\u8BA4\u6216\u9996\u6B21\u68C0\u6D4B\u5230\u662F GBK/GB18030 \u7684\u6587\u4EF6\u4F1A\u88AB\u63D2\u4EF6\u6301\u4E45\u8BB0\u5FC6\uFF1B\u518D\u6B21\u64CD\u4F5C\u540C\u4E00\u8DEF\u5F84\u65F6\uFF0C\u4F1A\u76F4\u63A5\u62E6\u622A\u5185\u7F6E read/write/edit \u548C text_*\uFF0C\u5E76\u8981\u6C42\u6539\u7528 gbk_*\u3002",
|
|
19411
19411
|
"- \u5982\u679C\u610F\u56FE\u662F\u2018\u5728\u67D0\u6807\u7B7E\u524D\u540E\u63D2\u5165\u5185\u5BB9\u2019\uFF0C\u4F18\u5148\u4F7F\u7528 mode=insertAfter \u6216 mode=insertBefore\uFF0C\u5E76\u4F20 anchor/content\u3002",
|
|
@@ -19574,7 +19574,6 @@ var BUILTIN_TEXT_TOOL_IDS = /* @__PURE__ */ new Set(["read", "write", "edit"]);
|
|
|
19574
19574
|
var TEXT_TOOL_IDS = /* @__PURE__ */ new Set(["text_read", "text_write", "text_edit"]);
|
|
19575
19575
|
var ROUTED_TEXT_TOOL_IDS = /* @__PURE__ */ new Set([...BUILTIN_TEXT_TOOL_IDS, ...TEXT_TOOL_IDS]);
|
|
19576
19576
|
var CREATE_ROUTED_TEXT_TOOL_IDS = /* @__PURE__ */ new Set(["write", "edit", "text_write", "text_edit"]);
|
|
19577
|
-
var GBK_TOOL_IDS = /* @__PURE__ */ new Set(["gbk_read", "gbk_write", "gbk_edit", "gbk_search"]);
|
|
19578
19577
|
function getToolFilePath(args) {
|
|
19579
19578
|
if (!args || typeof args !== "object") {
|
|
19580
19579
|
return null;
|
|
@@ -19601,9 +19600,6 @@ function buildTextEditSessionRoutingMessage(filePath) {
|
|
|
19601
19600
|
function buildNewTxtRoutingMessage(filePath) {
|
|
19602
19601
|
return `\u65B0\u5EFA .txt \u6587\u4EF6\u8BF7\u76F4\u63A5\u4F7F\u7528 gbk_write \u521B\u5EFA\u4E3A GBK/GB18030\uFF1B\u4E0D\u8981\u5148\u4F7F\u7528\u5185\u7F6E write/edit \u6216 text_*\uFF1A${filePath}`;
|
|
19603
19602
|
}
|
|
19604
|
-
function buildSessionGbkNewFileRoutingMessage(filePath) {
|
|
19605
|
-
return `\u5F53\u524D\u4F1A\u8BDD\u5DF2\u4F7F\u7528 gbk_* \u5DE5\u5177\uFF1B\u65B0\u5EFA\u6587\u4EF6\u8BF7\u7EE7\u7EED\u76F4\u63A5\u4F7F\u7528 gbk_write \u521B\u5EFA\u4E3A GBK/GB18030\uFF0C\u5FC5\u8981\u65F6\u518D\u7528 gbk_edit\uFF1B\u4E0D\u8981\u5207\u56DE\u5185\u7F6E write/edit \u6216 text_*\uFF1A${filePath}`;
|
|
19606
|
-
}
|
|
19607
19603
|
function isNewTxtFilePath(filePath) {
|
|
19608
19604
|
return path5.extname(filePath).toLowerCase() === ".txt";
|
|
19609
19605
|
}
|
|
@@ -19653,7 +19649,6 @@ function truncateMetadataPreview(value, sessionID) {
|
|
|
19653
19649
|
}
|
|
19654
19650
|
function createOpencodeGbkHooks(_client, directory, worktree) {
|
|
19655
19651
|
const sessionTextEditedFiles = /* @__PURE__ */ new Map();
|
|
19656
|
-
const sessionGbkToolUsage = /* @__PURE__ */ new Set();
|
|
19657
19652
|
const SESSION_TRACKING_LIMIT = 200;
|
|
19658
19653
|
function pruneSessionTracking() {
|
|
19659
19654
|
if (sessionTextEditedFiles.size > SESSION_TRACKING_LIMIT) {
|
|
@@ -19663,13 +19658,6 @@ function createOpencodeGbkHooks(_client, directory, worktree) {
|
|
|
19663
19658
|
sessionTextEditedFiles.delete(sessionID);
|
|
19664
19659
|
}
|
|
19665
19660
|
}
|
|
19666
|
-
if (sessionGbkToolUsage.size > SESSION_TRACKING_LIMIT) {
|
|
19667
|
-
const overflow = sessionGbkToolUsage.size - SESSION_TRACKING_LIMIT;
|
|
19668
|
-
const sessionIDs = [...sessionGbkToolUsage].slice(0, overflow);
|
|
19669
|
-
for (const sessionID of sessionIDs) {
|
|
19670
|
-
sessionGbkToolUsage.delete(sessionID);
|
|
19671
|
-
}
|
|
19672
|
-
}
|
|
19673
19661
|
}
|
|
19674
19662
|
function rememberSessionTextEditFile(sessionID, normalizedFilePath) {
|
|
19675
19663
|
if (!sessionID) {
|
|
@@ -19689,20 +19677,6 @@ function createOpencodeGbkHooks(_client, directory, worktree) {
|
|
|
19689
19677
|
}
|
|
19690
19678
|
return sessionTextEditedFiles.get(sessionID)?.has(normalizedFilePath) ?? false;
|
|
19691
19679
|
}
|
|
19692
|
-
function rememberSessionGbkToolUsage(sessionID) {
|
|
19693
|
-
if (!sessionID) {
|
|
19694
|
-
return;
|
|
19695
|
-
}
|
|
19696
|
-
sessionGbkToolUsage.delete(sessionID);
|
|
19697
|
-
sessionGbkToolUsage.add(sessionID);
|
|
19698
|
-
pruneSessionTracking();
|
|
19699
|
-
}
|
|
19700
|
-
function hasSessionGbkToolUsage(sessionID) {
|
|
19701
|
-
if (!sessionID) {
|
|
19702
|
-
return false;
|
|
19703
|
-
}
|
|
19704
|
-
return sessionGbkToolUsage.has(sessionID);
|
|
19705
|
-
}
|
|
19706
19680
|
return {
|
|
19707
19681
|
tool: {
|
|
19708
19682
|
gbk_read: gbk_read_default,
|
|
@@ -19742,9 +19716,6 @@ function createOpencodeGbkHooks(_client, directory, worktree) {
|
|
|
19742
19716
|
}
|
|
19743
19717
|
const resolvedFilePath = resolveCandidatePath(filePath, { directory, worktree });
|
|
19744
19718
|
if (CREATE_ROUTED_TEXT_TOOL_IDS.has(input.tool) && !await doesPathExist(resolvedFilePath)) {
|
|
19745
|
-
if (hasSessionGbkToolUsage(input.sessionID)) {
|
|
19746
|
-
throw new Error(buildSessionGbkNewFileRoutingMessage(filePath));
|
|
19747
|
-
}
|
|
19748
19719
|
if (isNewTxtFilePath(resolvedFilePath)) {
|
|
19749
19720
|
throw new Error(buildNewTxtRoutingMessage(filePath));
|
|
19750
19721
|
}
|
|
@@ -19782,9 +19753,6 @@ function createOpencodeGbkHooks(_client, directory, worktree) {
|
|
|
19782
19753
|
if (typeof metadata.diffPreview === "string") {
|
|
19783
19754
|
metadata.diffPreview = truncateMetadataPreview(metadata.diffPreview, input.sessionID);
|
|
19784
19755
|
}
|
|
19785
|
-
if (GBK_TOOL_IDS.has(input.tool)) {
|
|
19786
|
-
rememberSessionGbkToolUsage(input.sessionID);
|
|
19787
|
-
}
|
|
19788
19756
|
if (input.tool === "text_edit" && typeof metadata.filePath === "string") {
|
|
19789
19757
|
rememberSessionTextEditFile(
|
|
19790
19758
|
input.sessionID,
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"manifestVersion": 1,
|
|
3
3
|
"packageName": "opencode-gbk-tools",
|
|
4
|
-
"packageVersion": "1.1.
|
|
4
|
+
"packageVersion": "1.1.1",
|
|
5
5
|
"artifacts": [
|
|
6
6
|
{
|
|
7
7
|
"relativePath": "plugins/opencode-gbk-tools.js",
|
|
8
8
|
"kind": "plugin",
|
|
9
|
-
"expectedHash": "
|
|
9
|
+
"expectedHash": "d58d1daf90890e6a40651356aee8d1d8f0369c0b6f4a7a910b519e90a53bcf41",
|
|
10
10
|
"hashAlgorithm": "sha256"
|
|
11
11
|
},
|
|
12
12
|
{
|