pi-rehydra 1.0.3 → 1.0.4

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.en.md CHANGED
@@ -1,83 +1,88 @@
1
- # pi-rehydra
2
-
3
- Scrub detected secrets from Pi conversations before the main LLM request.
4
-
5
- [中文](./README.md)
6
-
7
- This extension intercepts the conversation between [Pi](https://pi.dev) and the LLM. Secrets from your `.env` files are replaced with placeholders before they leave your machine, and transparently restored before any tool (shell commands, file writes, etc.) executes locally; a placeholder that cannot be restored blocks that tool call.
8
-
9
- It uses Pi's `ExtensionAPI` events: `context_with_system`, `tool_call`, `tool_result`, `message_end`, and `session_start` / `session_shutdown`.
10
-
11
- Detection and rehydration are local. The model only sees placeholders; your tools always see real values.
12
-
13
- ## Install
14
-
15
- ```bash
16
- pi install npm:pi-rehydra
17
- ```
18
-
19
- Pi writes the package entry to `~/.pi/agent/settings.json`. Edit that file to add extension options:
20
-
21
- ```json
22
- {
23
- "packages": [
24
- {
25
- "source": "npm:pi-rehydra"
26
- }
27
- ],
28
- "rehydra": {
29
- "envFiles": [".env", ".env.local"],
30
- "redactValues": ["sk-live-abc123..."],
31
- "allowLiteralTagsIn": ["write", "edit"]
32
- }
33
- }
34
- ```
35
-
36
- Every key under `rehydra` is an extension option: `envFiles`, `redactValues`, `minValueLength`, `disableTypes`, `locale`, `vcsIdentities`, `policy`, `anonymizer`, `tagFormat`. `envFiles` defaults to `["**/.env*"]`, skipping `node_modules`, `.git`, and symlinks.
37
-
38
- `allowLiteralTagsIn` defaults to an empty array (always block). Tools listed here — typically `write` and `edit` — keep an **unresolvable** literal tag in their arguments instead of aborting, so you can write documentation or tests that intentionally show tag examples. Every allowed occurrence is logged (`allowed literal tag in tool args`, tool name and argument path only). Resolvable tags are still restored in every tool.
39
-
40
- ## How it works
41
-
42
- | Event | Effect |
43
- |---|---|
44
- | `session_start` | Instantiate the anonymizer, build the session map, parse the `rehydra` config |
45
- | `context_with_system` | Anonymize all request messages and inject the rehydra instruction when needed |
46
- | `tool_call` | Strictly restore PII tags in tool arguments before local execution; an unresolvable tag blocks the call |
47
- | `tool_result` | Anonymize the completed tool result before it re-enters model context |
48
- | `message_end` | Rewrite the final assistant message so PII tags are replaced with real values |
49
- | `session_shutdown` | Dispose of the anonymizer and session registry |
50
-
51
- ## Masking records and comparison
52
-
53
- Once enabled, you can check request by request what was intercepted and what the model actually received:
54
-
55
- ```json
56
- {
57
- "rehydra": {
58
- "record": {
59
- "enabled": true,
60
- "includeOriginal": true
61
- }
62
- }
63
- }
64
- ```
65
-
66
- `/rehydra log` lists the last 20 records for the current session, `/rehydra log <id>` shows one record (hit lines plus field-level before/after), `/rehydra log --type EMAIL` filters by type; `/rehydra clear` clears the current session and `/rehydra clear --all` clears everything (both ask for confirmation).
67
-
68
- Recording is off by default. When enabled it writes to `~/.pi/agent/rehydra/records/` (directory 0700, files 0600), trimmed by both a 7-day and a 32 MiB cap, with 256 KiB per record for comparisons. **With `includeOriginal` set to true, real values are written to local disk**; set it to false to keep only the type, detector, placeholder, length and offsets. Terminal control characters are escaped when displayed, and record text is never fed back into model context.
69
-
70
- Any recording failure (unwritable directory, symlink, half-written line) only produces a warning and never affects masking or the request.
71
-
72
- ## Limitations
73
- - Tool-argument rehydration is strict: when a tag is absent from this session's map (or the map is missing, or decryption fails), the tool call is blocked rather than run with `<PII .../>` as a real value. A placeholder can only be restored from the same session's map; the default map is in memory, so tags from before a process restart cannot be restored.
74
-
75
- - Model calls that bypass these hooks (rare, e.g. user-initiated notes) are not intercepted.
76
- - `URL`, `IP_ADDRESS`, `BIC_SWIFT`, `POSTAL_CODE` and `DATE` are disabled by default: recognizers that fire on shape alone misfire badly in code and documents. Restore them with `disableTypes: ["URL", "IP_ADDRESS"]`; a bank identifier still needs a full banking context word nearby.
77
- - Only the values of sensitive fields in an `.env` file enter the global known-value set; project names and ports are not replaced later in the text. Explicitly configured `redactValues` are not affected by that filter.
78
- - Collection fields in `policy` may be arrays and thresholds plain objects; an invalid field type fails startup with the field name instead of silently dropping the protection rule.
79
- - This extension cannot guarantee that title or compaction summaries stay sanitized — disable title agents if you need titles to be human-readable.
80
-
81
- ## License
82
-
1
+ # pi-rehydra
2
+
3
+ Scrub detected secrets from Pi conversations before the main LLM request.
4
+
5
+ [中文](./README.md)
6
+
7
+ This extension intercepts the conversation between [Pi](https://pi.dev) and the LLM. Secrets from your `.env` files are replaced with placeholders before they leave your machine, and transparently restored before any tool (shell commands, file writes, etc.) executes locally; a placeholder that cannot be restored blocks that tool call.
8
+
9
+ It uses Pi's `ExtensionAPI` events: `context_with_system`, `tool_call`, `tool_result`, `message_end`, and `session_start` / `session_shutdown`.
10
+
11
+ Detection and rehydration are local. The model only sees placeholders; your tools always see real values.
12
+
13
+ ## Install
14
+
15
+ ```bash
16
+ pi install npm:pi-rehydra
17
+ ```
18
+
19
+ Pi writes the package entry to `~/.pi/agent/settings.json`. Edit that file to add extension options:
20
+
21
+ ```json
22
+ {
23
+ "packages": [
24
+ {
25
+ "source": "npm:pi-rehydra"
26
+ }
27
+ ],
28
+ "rehydra": {
29
+ "envFiles": [".env", ".env.local"],
30
+ "redactValues": ["sk-live-abc123..."],
31
+ "allowLiteralTagsIn": ["write", "edit"]
32
+ }
33
+ }
34
+ ```
35
+
36
+ Every key under `rehydra` is an extension option: `envFiles`, `redactValues`, `minValueLength`, `disableTypes`, `locale`, `vcsIdentities`, `policy`, `anonymizer`, `tagFormat`. `envFiles` defaults to `["**/.env*"]`, skipping `node_modules`, `.git`, and symlinks.
37
+
38
+ `allowLiteralTagsIn` defaults to an empty array (always block). Tools listed here — typically `write` and `edit` — keep an **unresolvable** literal tag in their arguments instead of aborting, so you can write documentation or tests that intentionally show tag examples. Every allowed occurrence is logged (`allowed literal tag in tool args`, tool name and argument path only). Resolvable tags are still restored in every tool.
39
+
40
+ ## How it works
41
+
42
+ | Event | Effect |
43
+ |---|---|
44
+ | `session_start` | Instantiate the anonymizer, build the session map, parse the `rehydra` config |
45
+ | `context_with_system` | Anonymize all request messages and inject the rehydra instruction when needed |
46
+ | `tool_call` | Strictly restore PII tags in tool arguments before local execution; an unresolvable tag blocks the call |
47
+ | `tool_result` | Anonymize the completed tool result before it re-enters model context |
48
+ | `message_end` | Rewrite the final assistant message so PII tags are replaced with real values |
49
+ | `session_shutdown` | Dispose of the anonymizer and session registry |
50
+
51
+ Masked message roles: `user`, `assistant`, `toolResult`, `system` (its `content` and prompt sections, except the tool declarations section), `bashExecution` (command and output), `custom`, `branchSummary`, and `compactionSummary` — exactly the roles Pi turns into model input. When the current request replaced anything, the placeholder guidance is injected as its own prompt section, so the model treats placeholders as opaque pass-through values.
52
+
53
+ On failure: an uninitialized extension blocks tool execution. A single masking failure does not abort the request — Pi swallows handler errors and sends the unmasked content anyway, so the extension catches them and logs a warning carrying only the event name and reason, never the content.
54
+
55
+ ## Masking records and comparison
56
+
57
+ Once enabled, you can check request by request what was intercepted and what the model actually received:
58
+
59
+ ```json
60
+ {
61
+ "rehydra": {
62
+ "record": {
63
+ "enabled": true,
64
+ "includeOriginal": true
65
+ }
66
+ }
67
+ }
68
+ ```
69
+
70
+ `/rehydra log` lists the last 20 records for the current session, `/rehydra log <id>` shows one record (hit lines plus field-level before/after), `/rehydra log --type EMAIL` filters by type; `/rehydra clear` clears the current session and `/rehydra clear --all` clears everything (both ask for confirmation).
71
+
72
+ Recording is off by default. When enabled it writes to `~/.pi/agent/rehydra/records/` (directory 0700, files 0600), trimmed by both a 7-day and a 32 MiB cap, with 256 KiB per record for comparisons. **With `includeOriginal` set to true, real values are written to local disk**; set it to false to keep only the type, detector, placeholder, length and offsets. Terminal control characters are escaped when displayed, and record text is never fed back into model context.
73
+
74
+ Any recording failure (unwritable directory, symlink, half-written line) only produces a warning and never affects masking or the request.
75
+
76
+ ## Limitations
77
+ - Tool-argument rehydration is strict: when a tag is absent from this session's map (or the map is missing, or decryption fails), the tool call is blocked rather than run with `<PII .../>` as a real value. A placeholder can only be restored from the same session's map; the default map is in memory, so tags from before a process restart cannot be restored.
78
+
79
+ - Session maps are cached in-process to avoid repeated decryption. The cache is shared per storage instance and session id, so every session instance on the same storage sees the same map, and a streaming save invalidates it. Only another process, or a different storage instance over the same underlying data, can write a map this process's cache will not notice.
80
+ - Model calls that bypass these hooks (rare, e.g. user-initiated notes) are not intercepted.
81
+ - `URL`, `IP_ADDRESS`, `BIC_SWIFT`, `POSTAL_CODE` and `DATE` are disabled by default: recognizers that fire on shape alone misfire badly in code and documents. Restore them with `disableTypes: ["URL", "IP_ADDRESS"]`; a bank identifier still needs a full banking context word nearby.
82
+ - Only the values of sensitive fields in an `.env` file enter the global known-value set; project names and ports are not replaced later in the text. Explicitly configured `redactValues` are not affected by that filter.
83
+ - Collection fields in `policy` may be arrays and thresholds plain objects; an invalid field type fails startup with the field name instead of silently dropping the protection rule.
84
+ - This extension cannot guarantee that title or compaction summaries stay sanitized — disable title agents if you need titles to be human-readable.
85
+
86
+ ## License
87
+
83
88
  MIT
package/README.md CHANGED
@@ -1,83 +1,86 @@
1
- # pi-rehydra
2
-
3
- 在主 LLM 请求发出之前,脱敏 Pi 对话中检测到的密钥。
4
-
5
- [English](./README.en.md)
6
-
7
- 这个扩展拦截 [Pi](https://pi.dev) 与 LLM 之间的对话。你的 `.env` 文件中的密钥在离开本机前被替换为占位符,并在工具(shell 命令、文件写入等)在本地执行前透明还原;无法还原的占位符会阻止该次工具调用。
8
-
9
- 它依赖 Pi 的 `ExtensionAPI`:`context_with_system`、`tool_call`、`tool_result`、`message_end`、`session_start` / `session_shutdown`。
10
-
11
- 脱敏和还原都在本地进行;模型只用占位符推理,工具始终拿到真实值。
12
-
13
- ## 安装
14
-
15
- ```bash
16
- pi install npm:pi-rehydra
17
- ```
18
-
19
- Pi 会在 `~/.pi/agent/settings.json` 写入包声明。然后编辑该文件添加扩展配置:
20
-
21
- ```json
22
- {
23
- "packages": [
24
- {
25
- "source": "npm:pi-rehydra"
26
- }
27
- ],
28
- "rehydra": {
29
- "envFiles": [".env", ".env.local"],
30
- "redactValues": ["sk-live-abc123..."],
31
- "allowLiteralTagsIn": ["write", "edit"]
32
- }
33
- }
34
- ```
35
-
36
- `rehydra` 键的所有字段都是扩展配置项:`envFiles`、`redactValues`、`minValueLength`、`disableTypes`、`locale`、`vcsIdentities`、`policy`、`anonymizer`、`tagFormat`。`envFiles` 默认是 `["**/.env*"]`,会跳过 `node_modules`、`.git` 和符号链接。
37
-
38
- `allowLiteralTagsIn` 默认是空数组(一律阻断)。列进这个数组的工具(通常是 `write`、`edit`)在参数里出现**无法还原**的字面标签时不再阻断,而是原样保留——用于写文档或测试时故意写标签示例。放行会在日志里留痕(`allowed literal tag in tool args`,只带工具名与参数路径);能还原的标签在任何工具里都照常还原。
39
-
40
- ## 工作原理
41
-
42
- | 钩子 | 作用 |
43
- |---|---|
44
- | `session_start` | 实例化匿名器、装配会话映射、解析 `rehydra` 配置 |
45
- | `context_with_system` | 匿名化模型请求前的所有消息,并按需追加 rehydra 指令 |
46
- | `tool_call` | 在工具执行前严格还原工具入参中的 PII 标签;任一标签无法还原即阻断该次调用 |
47
- | `tool_result` | 在结果返回给模型前脱敏真实 PII |
48
- | `message_end` | 改写最终回答的文本块,把 PII 标签还原为真实值 |
49
- | `session_shutdown` | 释放匿名器与会话注册表 |
50
-
51
- ## 脱敏记录与对照
52
-
53
- 开启后可以逐请求核对"哪些内容被拦截、模型实际收到了什么":
54
-
55
- ```json
56
- {
57
- "rehydra": {
58
- "record": {
59
- "enabled": true,
60
- "includeOriginal": true
61
- }
62
- }
63
- }
64
- ```
65
-
66
- `/rehydra log` 列出当前会话最近 20 条记录,`/rehydra log <id>` 看单条详情(命中行 + 字段级 before/after),`/rehydra log --type EMAIL` 按类型筛选;`/rehydra clear` 清当前会话,`/rehydra clear --all` 清全部(都要确认)。
67
-
68
- 记录默认关闭。开启后写入 `~/.pi/agent/rehydra/records/`(目录 0700、文件 0600),按 7 天与 32 MiB 双上限裁剪,单条记录对照上限 256 KiB。**`includeOriginal` 为 true 时真实值会写到本地磁盘**;不需要时设成 `false`,记录只保留类型、检测器、占位符、长度与偏移。记录里出现的终端控制字符在展示时会转义,原文不会回填到模型上下文。
69
-
70
- 记录层任何失败(目录不可写、符号链接、半行文件)都只告警,不影响脱敏与请求。
71
-
72
- ## 限制
73
- - 工具入参还原是严格的:标签不在本次会话映射中(或映射缺失、解密失败)时,该次工具调用会被阻止,不会把 `<PII .../>` 当作真实值执行。占位符只能由同一条会话的映射还原;默认使用内存映射,进程重启后旧标签无法还原。
74
-
75
- - 不会拦截用户在 UI 里粘贴的、且未走这些 hook 的模型调用。
76
- - 默认禁用 `URL`、`IP_ADDRESS`、`BIC_SWIFT`、`POSTAL_CODE`、`DATE`;只靠形状就能命中的识别器在代码与文档里误报率高。需要它们时把 `disableTypes` 写成 `["URL", "IP_ADDRESS"]` 即可恢复。即便恢复,银行标识码仍要求附近出现完整的银行语境词。
77
- - `.env` 里只有敏感字段的值会进入全局已知值集合:项目名、端口这类普通配置值不会被替换。显式配置的 `redactValues` 不受这条筛选影响。
78
- - `policy` 的集合类字段可写成数组、阈值可写成对象;字段类型不合法时扩展启动报错并指出字段名,不会静默丢掉保护规则。
79
- - Pi 扩展无法保证消息标题(title)与元数据走相同的 hook,因此这些字段仍可能包含占位符。建议在脱敏时启用完整的 PII 脱敏策略。
80
-
81
- ## License
82
-
1
+ # pi-rehydra
2
+
3
+ 在主 LLM 请求发出之前,脱敏 Pi 对话中检测到的密钥。
4
+
5
+ [English](./README.en.md)
6
+
7
+ 这个扩展拦截 [Pi](https://pi.dev) 与 LLM 之间的对话。你的 `.env` 文件中的密钥在离开本机前被替换为占位符,并在工具(shell 命令、文件写入等)在本地执行前透明还原;无法还原的占位符会阻止该次工具调用。
8
+
9
+ 它依赖 Pi 的 `ExtensionAPI`:`context_with_system`、`tool_call`、`tool_result`、`message_end`、`session_start` / `session_shutdown`。
10
+
11
+ 脱敏和还原都在本地进行;模型只用占位符推理,工具始终拿到真实值。
12
+
13
+ ## 安装
14
+
15
+ ```bash
16
+ pi install npm:pi-rehydra
17
+ ```
18
+
19
+ Pi 会在 `~/.pi/agent/settings.json` 写入包声明。然后编辑该文件添加扩展配置:
20
+
21
+ ```json
22
+ {
23
+ "packages": [
24
+ {
25
+ "source": "npm:pi-rehydra"
26
+ }
27
+ ],
28
+ "rehydra": {
29
+ "envFiles": [".env", ".env.local"],
30
+ "redactValues": ["sk-live-abc123..."],
31
+ "allowLiteralTagsIn": ["write", "edit"]
32
+ }
33
+ }
34
+ ```
35
+
36
+ `rehydra` 键的所有字段都是扩展配置项:`envFiles`、`redactValues`、`minValueLength`、`disableTypes`、`locale`、`vcsIdentities`、`policy`、`anonymizer`、`tagFormat`。`envFiles` 默认是 `["**/.env*"]`,会跳过 `node_modules`、`.git` 和符号链接。
37
+
38
+ `allowLiteralTagsIn` 默认是空数组(一律阻断)。列进这个数组的工具(通常是 `write`、`edit`)在参数里出现**无法还原**的字面标签时不再阻断,而是原样保留——用于写文档或测试时故意写标签示例。放行会在日志里留痕(`allowed literal tag in tool args`,只带工具名与参数路径);能还原的标签在任何工具里都照常还原。
39
+
40
+ ## 工作原理
41
+
42
+ | 钩子 | 作用 |
43
+ |---|---|
44
+ | `session_start` | 实例化匿名器、装配会话映射、解析 `rehydra` 配置 |
45
+ | `context_with_system` | 匿名化模型请求前的所有消息,并在本轮有替换时追加占位符说明 |
46
+ | `tool_call` | 在工具执行前严格还原工具入参中的 PII 标签;任一标签无法还原即阻断该次调用 |
47
+ | `tool_result` | 在结果返回给模型前脱敏真实 PII |
48
+ | `message_end` | 改写最终回答的文本块,把 PII 标签还原为真实值 |
49
+ | `session_shutdown` | 释放匿名器与会话注册表 |
50
+ 覆盖的消息角色:`user`、`assistant`、`toolResult`、`system`(其 `content` 与各提示分段,工具声明段除外)、`bashExecution`(命令与输出)、`custom`、`branchSummary` 与 `compactionSummary`——这些正是宿主会转成模型输入的几种。本轮若发生过替换,占位符说明会作为独立提示分段注入,模型因此知道占位符是不可解析的透传值。
51
+
52
+ 失败时的行为:扩展未初始化则阻止工具执行。单次脱敏失败不会中断请求——宿主会吞掉处理器异常并继续发送未脱敏内容,所以扩展自行捕获并写一条告警(只带事件名与原因,不含正文)。
53
+ ## 脱敏记录与对照
54
+
55
+ 开启后可以逐请求核对"哪些内容被拦截、模型实际收到了什么":
56
+
57
+ ```json
58
+ {
59
+ "rehydra": {
60
+ "record": {
61
+ "enabled": true,
62
+ "includeOriginal": true
63
+ }
64
+ }
65
+ }
66
+ ```
67
+
68
+ `/rehydra log` 列出当前会话最近 20 条记录,`/rehydra log <id>` 看单条详情(命中行 + 字段级 before/after),`/rehydra log --type EMAIL` 按类型筛选;`/rehydra clear` 清当前会话,`/rehydra clear --all` 清全部(都要确认)。
69
+
70
+ 记录默认关闭。开启后写入 `~/.pi/agent/rehydra/records/`(目录 0700、文件 0600),按 7 天与 32 MiB 双上限裁剪,单条记录对照上限 256 KiB。**`includeOriginal` 为 true 时真实值会写到本地磁盘**;不需要时设成 `false`,记录只保留类型、检测器、占位符、长度与偏移。记录里出现的终端控制字符在展示时会转义,原文不会回填到模型上下文。
71
+
72
+ 记录层任何失败(目录不可写、符号链接、半行文件)都只告警,不影响脱敏与请求。
73
+
74
+ ## 限制
75
+ - 工具入参还原是严格的:标签不在本次会话映射中(或映射缺失、解密失败)时,该次工具调用会被阻止,不会把 `<PII .../>` 当作真实值执行。占位符只能由同一条会话的映射还原;默认使用内存映射,进程重启后旧标签无法还原。
76
+
77
+ - 会话映射在进程内缓存以避免重复解密。缓存按「存储实例 + 会话 ID」共享,因此同一存储上的多个会话实例看到的是一致的映射;流式脱敏写盘后也会让缓存失效。仅当**另一个进程**,或另一个指向同一份底层数据的存储实例改写时,本进程缓存不会失效。
78
+ - 不会拦截用户在 UI 里粘贴的、且未走这些 hook 的模型调用。
79
+ - 默认禁用 `URL`、`IP_ADDRESS`、`BIC_SWIFT`、`POSTAL_CODE`、`DATE`;只靠形状就能命中的识别器在代码与文档里误报率高。需要它们时把 `disableTypes` 写成 `["URL", "IP_ADDRESS"]` 即可恢复。即便恢复,银行标识码仍要求附近出现完整的银行语境词。
80
+ - `.env` 里只有敏感字段的值会进入全局已知值集合:项目名、端口这类普通配置值不会被替换。显式配置的 `redactValues` 不受这条筛选影响。
81
+ - `policy` 的集合类字段可写成数组、阈值可写成对象;字段类型不合法时扩展启动报错并指出字段名,不会静默丢掉保护规则。
82
+ - Pi 扩展无法保证消息标题(title)与元数据走相同的 hook,因此这些字段仍可能包含占位符。建议在脱敏时启用完整的 PII 脱敏策略。
83
+
84
+ ## License
85
+
83
86
  MIT
@@ -7,12 +7,14 @@
7
7
  * - `tool_call` 在工具执行前严格还原入参标签;还原不全即阻断该次调用;
8
8
  * - `tool_result` 在结果回填给模型前就地脱敏真实 PII;
9
9
  * - `message_end` 改写最终 assistant 文本,把 PII 标签还原为真值;
10
- * - `session_start` / `session_shutdown` 管理会话与匿名器生命周期;
11
- * - `input` / `user_bash` 在源头做最低限度的脱敏,避免走特殊路径的 PII 漏出。
10
+ * - `session_start` / `session_shutdown` 管理会话与匿名器生命周期。
12
11
  *
13
12
  * 设计目标:
14
13
  * - 复用 {@link scrubCore} 递归处理消息树;
15
- * - 失败关闭:任何 scrub 异常都向上抛出,Pi 会停在该请求而不是泄漏;
14
+ * - 覆盖宿主会转成模型输入的全部消息角色(user / assistant / toolResult /
15
+ * system / bashExecution / custom / 两类摘要);
16
+ * - 失败语义:宿主会吞掉处理器异常并继续用未脱敏内容发请求,因此脱敏异常
17
+ * 在扩展内自行捕获并告警;工具执行路径则失败关闭(阻断该次调用);
16
18
  * - 资源释放:`session_shutdown` 幂等释放 session 注册表与匿名器;
17
19
  * - 暴露 `/rehydra` 命令,便于用户在交互模式快速查看当前配置。
18
20
  */
@@ -1 +1 @@
1
- {"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../../src/pi-extension/extension.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,EAGV,YAAY,EAOb,MAAM,iBAAiB,CAAC;AAwjBzB,yBAAyB;AACzB,MAAM,WAAW,eAAe;IAC9B,wBAAwB;IACxB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,wBAAwB;IACxB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC1C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAoU/D"}
1
+ {"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../../src/pi-extension/extension.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,EAGV,YAAY,EAOb,MAAM,iBAAiB,CAAC;AAwvBzB,yBAAyB;AACzB,MAAM,WAAW,eAAe;IAC9B,wBAAwB;IACxB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,wBAAwB;IACxB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC1C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CA4W/D"}