@trim21/personal-pi-extensions 0.0.269 → 0.0.270
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@trim21/personal-pi-extensions",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.270",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Custom pi coding-agent extensions: bwrap sandbox, workspace guard, opencode edit, and more",
|
|
6
6
|
"keywords": [
|
|
@@ -23,9 +23,7 @@
|
|
|
23
23
|
"format": "prettier --write .",
|
|
24
24
|
"test": "vitest run",
|
|
25
25
|
"test:coverage": "vitest run --coverage",
|
|
26
|
-
"
|
|
27
|
-
"copy": "cp node_modules/@vscode/tree-sitter-wasm/wasm/tree-sitter-bash.wasm src/bwrap/tree-sitter-bash.wasm",
|
|
28
|
-
"prepare": "husky && pnpm run copy"
|
|
26
|
+
"prepare": "husky"
|
|
29
27
|
},
|
|
30
28
|
"peerDependencies": {
|
|
31
29
|
"@earendil-works/pi-agent-core": ">=0.84.1",
|
|
@@ -40,7 +38,6 @@
|
|
|
40
38
|
"@types/node": "^24.13.3",
|
|
41
39
|
"@typescript/native": "npm:typescript@^7.0.2",
|
|
42
40
|
"@vitest/coverage-v8": "^4.1.10",
|
|
43
|
-
"@vscode/tree-sitter-wasm": "^0.3.1",
|
|
44
41
|
"eslint": "^10.8.1",
|
|
45
42
|
"eslint-config-prettier": "10.1.8",
|
|
46
43
|
"eslint-plugin-erasable-syntax-only": "0.4.2",
|
|
@@ -86,6 +83,7 @@
|
|
|
86
83
|
"node": ">=24"
|
|
87
84
|
},
|
|
88
85
|
"dependencies": {
|
|
86
|
+
"@vscode/tree-sitter-wasm": "^0.3.1",
|
|
89
87
|
"web-tree-sitter": "^0.26.12"
|
|
90
88
|
}
|
|
91
89
|
}
|
|
@@ -11,8 +11,9 @@
|
|
|
11
11
|
* - opencode packages/opencode/src/tool/shell.ts(tree-sitter 命令提取)
|
|
12
12
|
*/
|
|
13
13
|
import { readFileSync } from "node:fs";
|
|
14
|
+
import { createRequire } from "node:module";
|
|
14
15
|
|
|
15
|
-
import type
|
|
16
|
+
import { Language, type Node, Parser } from "web-tree-sitter";
|
|
16
17
|
|
|
17
18
|
/** 解析后的单个命令:命令名 + 参数 + 原文 + 嵌套命令(命令替换里的)。 */
|
|
18
19
|
export interface BashCommand {
|
|
@@ -43,22 +44,22 @@ interface BashParser {
|
|
|
43
44
|
}
|
|
44
45
|
|
|
45
46
|
/**
|
|
46
|
-
* 延迟初始化 tree-sitter bash parser
|
|
47
|
-
*
|
|
48
|
-
* bash grammar 的 wasm
|
|
49
|
-
*
|
|
50
|
-
* tree-sitter-bash.wasm 不提交进 git:`pnpm install` 后的 prepare
|
|
51
|
-
* 和发布前的 prepack 都会执行 `pnpm run copy`,从 devDependency
|
|
52
|
-
* @vscode/tree-sitter-wasm(MIT)复制到本目录。
|
|
47
|
+
* 延迟初始化 tree-sitter bash parser:web-tree-sitter 是静态 import,
|
|
48
|
+
* 但 wasm 加载与 parser 构造只在首次调用时发生(Parser.init() 开销大)。
|
|
49
|
+
* bash grammar 的 wasm 在模块加载时从 runtime 依赖
|
|
50
|
+
* @vscode/tree-sitter-wasm(MIT)解析并读取一次。
|
|
53
51
|
*/
|
|
52
|
+
const require = createRequire(import.meta.url);
|
|
53
|
+
const BASH_WASM = readFileSync(
|
|
54
|
+
require.resolve("@vscode/tree-sitter-wasm/wasm/tree-sitter-bash.wasm"),
|
|
55
|
+
);
|
|
56
|
+
|
|
54
57
|
function createParserLoader(): () => Promise<BashParser> {
|
|
55
58
|
let parserPromise: Promise<BashParser> | undefined;
|
|
56
59
|
return function loadParser(): Promise<BashParser> {
|
|
57
60
|
parserPromise ??= (async () => {
|
|
58
|
-
const { Language, Parser } = await import("web-tree-sitter");
|
|
59
61
|
await Parser.init();
|
|
60
|
-
const
|
|
61
|
-
const language = await Language.load(bashWasm);
|
|
62
|
+
const language = await Language.load(BASH_WASM);
|
|
62
63
|
const parser = new Parser();
|
|
63
64
|
parser.setLanguage(language);
|
|
64
65
|
return { parse: (source: string) => parser.parse(source) };
|
|
Binary file
|