pi-codex-auto-review 0.1.3 → 0.2.0

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.
Files changed (128) hide show
  1. package/NOTICE +4 -2
  2. package/README.ko.md +85 -0
  3. package/README.md +51 -52
  4. package/dist/approval-commands.d.ts +3 -3
  5. package/dist/approval-commands.js +161 -34
  6. package/dist/approval-commands.js.map +1 -1
  7. package/dist/approval-settings.d.ts +1 -1
  8. package/dist/approval-settings.js +17 -10
  9. package/dist/approval-settings.js.map +1 -1
  10. package/dist/approvals.d.ts +10 -9
  11. package/dist/approvals.js +196 -75
  12. package/dist/approvals.js.map +1 -1
  13. package/dist/audit.d.ts +1 -1
  14. package/dist/audit.js +37 -13
  15. package/dist/audit.js.map +1 -1
  16. package/dist/cli.js +63 -34
  17. package/dist/cli.js.map +1 -1
  18. package/dist/context-files.d.ts +2 -2
  19. package/dist/context-files.js +40 -19
  20. package/dist/context-files.js.map +1 -1
  21. package/dist/contracts.d.ts +39 -39
  22. package/dist/contracts.js +117 -51
  23. package/dist/contracts.js.map +1 -1
  24. package/dist/index.d.ts +9 -9
  25. package/dist/index.js +147 -43
  26. package/dist/index.js.map +1 -1
  27. package/dist/pi-host.js +3 -3
  28. package/dist/pi-host.js.map +1 -1
  29. package/dist/policy/domains.js +17 -7
  30. package/dist/policy/domains.js.map +1 -1
  31. package/dist/policy/index.d.ts +7 -7
  32. package/dist/policy/index.js +382 -139
  33. package/dist/policy/index.js.map +1 -1
  34. package/dist/policy/paths.js +31 -18
  35. package/dist/policy/paths.js.map +1 -1
  36. package/dist/policy/rule-engine.d.ts +2 -0
  37. package/dist/policy/rule-engine.js +283 -0
  38. package/dist/policy/rule-engine.js.map +1 -0
  39. package/dist/policy/rule-types.d.ts +30 -0
  40. package/dist/policy/rule-types.js +2 -0
  41. package/dist/policy/rule-types.js.map +1 -0
  42. package/dist/policy/rules-sync.d.ts +1 -0
  43. package/dist/policy/rules-sync.js +14 -0
  44. package/dist/policy/rules-sync.js.map +1 -0
  45. package/dist/policy/rules-worker.d.ts +1 -0
  46. package/dist/policy/rules-worker.js +14 -0
  47. package/dist/policy/rules-worker.js.map +1 -0
  48. package/dist/policy/rules.d.ts +4 -31
  49. package/dist/policy/rules.js +126 -38
  50. package/dist/policy/rules.js.map +1 -1
  51. package/dist/policy/shell.js +70 -41
  52. package/dist/policy/shell.js.map +1 -1
  53. package/dist/policy/starlark/builtins.d.ts +6 -0
  54. package/dist/policy/starlark/builtins.js +764 -0
  55. package/dist/policy/starlark/builtins.js.map +1 -0
  56. package/dist/policy/starlark/evaluator.d.ts +18 -0
  57. package/dist/policy/starlark/evaluator.js +518 -0
  58. package/dist/policy/starlark/evaluator.js.map +1 -0
  59. package/dist/policy/starlark/lexer.d.ts +14 -0
  60. package/dist/policy/starlark/lexer.js +189 -0
  61. package/dist/policy/starlark/lexer.js.map +1 -0
  62. package/dist/policy/starlark/parser.d.ts +140 -0
  63. package/dist/policy/starlark/parser.js +508 -0
  64. package/dist/policy/starlark/parser.js.map +1 -0
  65. package/dist/policy/starlark/validation.d.ts +4 -0
  66. package/dist/policy/starlark/validation.js +183 -0
  67. package/dist/policy/starlark/validation.js.map +1 -0
  68. package/dist/policy/starlark/values.d.ts +46 -0
  69. package/dist/policy/starlark/values.js +363 -0
  70. package/dist/policy/starlark/values.js.map +1 -0
  71. package/dist/reports.d.ts +1 -1
  72. package/dist/reports.js +66 -30
  73. package/dist/reports.js.map +1 -1
  74. package/dist/review/context.d.ts +16 -3
  75. package/dist/review/context.js +254 -48
  76. package/dist/review/context.js.map +1 -1
  77. package/dist/review/investigation.d.ts +2 -2
  78. package/dist/review/investigation.js +57 -16
  79. package/dist/review/investigation.js.map +1 -1
  80. package/dist/review/lifecycle.d.ts +1 -1
  81. package/dist/review/lifecycle.js +72 -29
  82. package/dist/review/lifecycle.js.map +1 -1
  83. package/dist/review/policy.js +27 -5
  84. package/dist/review/policy.js.map +1 -1
  85. package/dist/review/upstream-policy.js +1 -1
  86. package/dist/review/upstream-policy.js.map +1 -1
  87. package/dist/review/user-input.d.ts +5 -0
  88. package/dist/review/user-input.js +54 -0
  89. package/dist/review/user-input.js.map +1 -0
  90. package/dist/reviewer.d.ts +16 -6
  91. package/dist/reviewer.js +258 -70
  92. package/dist/reviewer.js.map +1 -1
  93. package/dist/signals.js +24 -9
  94. package/dist/signals.js.map +1 -1
  95. package/dist/startup.d.ts +4 -4
  96. package/dist/startup.js +139 -41
  97. package/dist/startup.js.map +1 -1
  98. package/dist/tools/controller.d.ts +19 -13
  99. package/dist/tools/controller.js +460 -118
  100. package/dist/tools/controller.js.map +1 -1
  101. package/dist/tools/environment.d.ts +1 -0
  102. package/dist/tools/environment.js +5 -0
  103. package/dist/tools/environment.js.map +1 -1
  104. package/dist/tools/executor.d.ts +1 -1
  105. package/dist/tools/executor.js +45 -28
  106. package/dist/tools/executor.js.map +1 -1
  107. package/dist/tools/external.d.ts +9 -8
  108. package/dist/tools/external.js +22 -11
  109. package/dist/tools/external.js.map +1 -1
  110. package/dist/tools/mcp.d.ts +6 -6
  111. package/dist/tools/mcp.js +208 -79
  112. package/dist/tools/mcp.js.map +1 -1
  113. package/dist/tools/mutation-queue.js.map +1 -1
  114. package/docs/publishing.ko.md +114 -0
  115. package/docs/publishing.md +49 -47
  116. package/docs/security/dependencies.ko.md +54 -0
  117. package/docs/security/dependencies.md +27 -26
  118. package/docs/testing/auto-review-protection.ko.md +158 -0
  119. package/docs/testing/auto-review-protection.md +105 -97
  120. package/docs/usage.ko.md +242 -0
  121. package/docs/usage.md +127 -111
  122. package/package.json +106 -95
  123. package/dist/native/darwin-arm64/artifact.json +0 -5
  124. package/dist/native/darwin-arm64/pi-guard-execpolicy +0 -0
  125. package/dist/native/linux-x64/artifact.json +0 -5
  126. package/dist/native/linux-x64/pi-guard-execpolicy +0 -0
  127. package/native/execpolicy/LICENSE +0 -201
  128. package/native/execpolicy/NOTICE +0 -6
package/docs/usage.md CHANGED
@@ -1,30 +1,32 @@
1
- # 사용법
1
+ # Usage
2
2
 
3
- pi-codex-auto-review를 Pi 확장으로 등록하는 방법과 CLI·SDK·정책 파일 설정을 다룹니다.
3
+ **English** | [한국어](usage.ko.md)
4
4
 
5
- ## npm에서 설치
5
+ This guide covers registering pi-codex-auto-review as a Pi extension and configuring the CLI, SDK, and policy files.
6
6
 
7
- npm에 게시된 버전은 Node.js 22.19 이상과 Pi 0.99.1 또는 1.0.0에서 설치합니다. 배포 대상은 macOS ARM64와 Linux x64이며, 패키지에 두 플랫폼의 규칙 엔진을 포함하므로 설치할 때 Rust가 필요하지 않습니다.
7
+ ## Installing from npm
8
8
 
9
- 현재 소스의 샌드박스 제거와 `/approve`·`/approve-model` 메뉴 변경은 아직 새 npm 버전으로 게시되지 않았습니다. 아래 `0.1.2` 설치는 이전 실행 구조를 설치합니다. 변경된 동작은 소스 빌드 후 로컬 등록으로 확인합니다.
9
+ Install the npm package with Node.js 22.19 or later and Pi 0.99.1 or 1.0.0. Version `0.2.0` distributes the rule engine as JavaScript, replacing the native executables included through `0.1.4`. The extension requires no Rust compiler or platform-specific rule binary; Pi's own native modules are separate.
10
+
11
+ `0.1.4` includes English approval descriptions, `/scoped-models` integration, `/approve retry`, reapproval through ordinary user messages, and fixes for passing and restoring review context. The earlier `0.1.3` removed the sandbox and added the `/approve` and `/approve-model` settings commands.
10
12
 
11
13
  ```sh
12
- pi install npm:pi-codex-auto-review@0.1.2
14
+ pi install npm:pi-codex-auto-review@0.2.0
13
15
  pi list
14
16
  pi remove npm:pi-codex-auto-review
15
17
  ```
16
18
 
17
- `--local`을 추가하면 현재 프로젝트의 `.pi/settings.json`에 등록합니다. 프로젝트 패키지는 해당 프로젝트의 신뢰 결정 후 로드됩니다. 버전을 명시한 설치는 그 버전으로 고정됩니다.
19
+ Add `--local` to register the package in the current project's `.pi/settings.json`. Project packages load after a trust decision for that project. Specifying a version pins the installation to that version.
18
20
 
19
- Pi는 관리하는 확장에 호스트 SDK의 물리적 복사본을 설치하지 않습니다. 확장은 Pi의 공개 경로 API로 호스트 SDK를 찾으므로 별도의 SDK 복사본이나 심볼릭 링크를 추가할 필요가 없습니다.
21
+ Pi does not install a physical copy of the host SDK for managed extensions. The extension locates the host SDK through Pi's public path API, so no additional SDK copy or symbolic link is needed.
20
22
 
21
- 기존 버전의 `Directory metadata scope is too large to qualify safely`와 시작 지연은 샌드박스의 디렉터리 검사 경로에서 발생했습니다. 현재 소스에서는 이 실행 경로와 `@anthropic-ai/sandbox-runtime` 의존성을 제거했습니다.
23
+ The earlier `Directory metadata scope is too large to qualify safely` error and startup delays came from sandbox directory inspection. The current source removes that execution path and the `@anthropic-ai/sandbox-runtime` dependency.
22
24
 
23
- 기본 설치 위치인 `.pi/agent/npm` 안에서도 실행에 필요한 확장 코드와 의존성을 읽을 수 있습니다. 에이전트 설정과 자격 증명 경로의 보호는 유지합니다.
25
+ The extension can read the code and dependencies needed to run even inside the default installation directory, `.pi/agent/npm`. Agent settings and credential paths remain protected.
24
26
 
25
- ## 소스에서 빌드
27
+ ## Building from source
26
28
 
27
- 소스 빌드에는 Rust 1.95 이상도 필요합니다. 저장소 루트에서 개발 의존성을 설치하고 빌드합니다. 이 명령은 현재 운영체제·아키텍처용 실행 파일을 `dist/native/<플랫폼>-<아키텍처>/`에 만듭니다. npm 게시용 패키지 준비는 [배포 안내](publishing.md)를 따릅니다.
29
+ Source builds use TypeScript and require no Rust compiler or platform binary. Install development dependencies and build from the repository root. The official Pi SDK is installed from the committed npm lockfile; no `vendor` archive is needed. Follow the [publishing guide](publishing.md) to prepare an npm release package.
28
30
 
29
31
  ```sh
30
32
  npm ci --ignore-scripts
@@ -32,9 +34,9 @@ npm run build
32
34
  node dist/cli.js --help
33
35
  ```
34
36
 
35
- ## Pi 플러그인으로 등록
37
+ ## Registering as a Pi plugin
36
38
 
37
- 빌드한 저장소를 로컬 패키지로 등록합니다. 로컬 경로는 복사 없이 해당 위치에서 직접 로드됩니다.
39
+ Register the built repository as a local package. Local paths load directly from their location without copying.
38
40
 
39
41
  ```sh
40
42
  pi install ./pi-codex-auto-review
@@ -42,9 +44,9 @@ pi list
42
44
  pi remove ./pi-codex-auto-review
43
45
  ```
44
46
 
45
- - 등록하면 로컬 도구와 공식 MCP가 승인 경로에 연결되고, Pi의 기본 MCP 확장은 중복 연결되지 않도록 교체됩니다.
46
- - 확장 등록만으로는 보호 시작을 보장하지 않습니다. Pi 자체가 확장 로딩 실패를 무시할 수 있으므로, 보호 시작이 필요하면 아래 CLI 진입점이나 SDK의 `createGuardedRuntime()`을 사용합니다.
47
- - 프로젝트 지침·설정·MCP 서버는 Pi에 저장된 프로젝트 신뢰 결정과 전역 `defaultProjectTrust`를 따릅니다. 결정이 없으면 프로젝트 자원을 시작하지 않습니다. 이번 실행에서 명시적으로 신뢰하려면 CLI의 `--trust-project` 또는 SDK의 `isProjectTrusted: true`를 사용합니다.
47
+ - Registration connects local tools and official MCP tools to the approval path. Pi's default MCP extension is replaced to avoid duplicate connections.
48
+ - Extension registration alone does not guarantee protected startup. Pi can ignore extension loading failures. When approval protection must be ready at startup, use the CLI entry point below or the SDK's `createGuardedRuntime()`.
49
+ - Project instructions, settings, and MCP servers follow Pi's saved project trust decision and global `defaultProjectTrust`. Without a decision, project resources do not start. To explicitly trust the project for this run, use CLI `--trust-project` or SDK `isProjectTrusted: true`.
48
50
 
49
51
  ## CLI
50
52
 
@@ -55,7 +57,7 @@ node dist/cli.js --mode rpc
55
57
  node dist/cli.js --mode tui
56
58
  ```
57
59
 
58
- 등록된 외부 공급자는 `--extension`으로 명시하고 `--provider`와 `--model`을 함께 선택합니다. `OLLAMA_API_KEY`를 export한 셸에서 실행합니다.
60
+ Specify a registered external provider with `--extension`, and select both `--provider` and `--model`. Run from a shell with `OLLAMA_API_KEY` exported.
59
61
 
60
62
  ```sh
61
63
  node dist/cli.js \
@@ -64,19 +66,19 @@ node dist/cli.js \
64
66
  --mode print "현재 프로젝트를 분석해줘"
65
67
  ```
66
68
 
67
- | 옵션 | 설명 |
69
+ | Option | Description |
68
70
  | --- | --- |
69
- | `--mode tui\|print\|json\|rpc` | 실행 모드. 기본은 TUI. 자동 검토는 print·JSON에서도 동작합니다 |
70
- | `--cwd 경로` | 시작 작업 디렉터리 |
71
- | `--agent-dir 경로` | Pi 자원 디렉터리. 생략하면 `PI_CODING_AGENT_DIR`, 그다음 기본 Pi 자원 디렉터리를 사용합니다 |
72
- | `--policy 파일` | 사용자가 관리하는 정책 JSON의 절대 경로. 잘못된 설정은 실행을 막습니다 |
73
- | `--trust-project` | 이번 실행에서 선택한 프로젝트를 명시적으로 신뢰합니다 |
74
- | `--extension 경로`, `-e` | 반복할 수 있습니다. 경로는 명령을 실행한 디렉터리 기준이며, 해당 코드 디렉터리를 신뢰하고 모델 쓰기에서 보호합니다 |
75
- | `--provider 공급자 --model 모델` | 함께 지정해야 합니다. 등록된 모델이 없으면 시작을 거부합니다. 키는 명령 인자에 넣지 않습니다 |
71
+ | `--mode tui\|print\|json\|rpc` | Execution mode; defaults to TUI. Automatic review also works in print and JSON modes |
72
+ | `--cwd path` | Initial working directory |
73
+ | `--agent-dir path` | Pi resource directory. If omitted, uses `PI_CODING_AGENT_DIR`, then Pi's default resource directory |
74
+ | `--policy file` | Absolute path to a user-managed policy JSON file. Invalid settings block startup |
75
+ | `--trust-project` | Explicitly trusts the selected project for this run |
76
+ | `--extension path`, `-e` | Repeatable. Paths are relative to the directory where the command runs. The code directory is trusted and protected from model writes |
77
+ | `--provider provider --model model` | Must be specified together. Startup is rejected if no registered model matches. Do not put keys in command arguments |
76
78
 
77
79
  ## SDK
78
80
 
79
- 승인 제어가 준비되지 않으면 시작을 거부해야 하는 실행은 `pi-codex-auto-review/startup`의 `createGuardedRuntime()`을 사용합니다. 확장과 승인 제어기 상태를 검사하고, 모드 재연결과 직접 사용자 셸 호출에도 같은 검사를 적용합니다.
81
+ Use `createGuardedRuntime()` from `pi-codex-auto-review/startup` when execution must refuse to start without approval controls. It checks extension and approval controller readiness and applies the same checks to mode reconnection and direct user shell calls.
80
82
 
81
83
  ```ts
82
84
  import { createGuardedRuntime } from 'pi-codex-auto-review/startup';
@@ -92,23 +94,27 @@ try {
92
94
  }
93
95
  ```
94
96
 
95
- | 옵션 | 설명 |
97
+ | Option | Description |
96
98
  | --- | --- |
97
- | `cwd`, `agentDir` | 시작 디렉터리와 Pi 자원 디렉터리 |
98
- | `settings` 또는 `settingsPath` | 정책 파일과 같은 형식의 실행 정책 |
99
- | `isProjectTrusted` | 명시적 프로젝트 신뢰. 지시가 없으면 Pi의 신뢰 결정과 전역 `defaultProjectTrust`를 따릅니다. 이후 디렉터리 변경은 각 디렉터리의 신뢰 기록을 따릅니다 |
100
- | `model` 또는 `modelSelection` | 모델 객체 또는 `{provider, id}` 선택. 둘을 함께 쓸 수는 없습니다 |
101
- | `trustedExtensionPaths` | 신뢰하는 확장 진입 파일. Pi의 공개 로더로 읽고, 상대 import까지 보호하도록 파일이 있는 디렉터리 전체를 모델 쓰기에서 보호합니다 |
102
- | `profile` | `readOnlyPaths` 등 SDK 프로필을 직접 전달합니다. 필수 제어·인증 경로 보호는 함께 적용됩니다 |
103
- | `mcp: false`, `mcpToolPolicies` | MCP 연결 끄기와 `서버/도구` 키별 `approvalMode` |
99
+ | `cwd`, `agentDir` | Initial directory and Pi resource directory |
100
+ | `settings` or `settingsPath` | Execution policy in the same format as the policy file |
101
+ | `isProjectTrusted` | Explicit project trust. If unspecified, follows Pi's trust decision and global `defaultProjectTrust`. Later directory changes follow each directory's saved trust decision |
102
+ | `model` or `modelSelection` | A model object or `{provider, id}` selection. These cannot be used together |
103
+ | `trustedExtensionPaths` | Trusted extension entry files, loaded through Pi's public loader. The entire containing directory is protected from model writes, including relative imports |
104
+ | `profile` | Directly supplies an SDK profile, including `readOnlyPaths`. Required control and authentication path protection also applies |
105
+ | `mcp: false`, `mcpToolPolicies` | Disables MCP connections, or configures `approvalMode` by `server/tool` key |
106
+
107
+ The protected entry point disables automatic extension discovery. Tools outside the known set are blocked unless they have a trusted adapter.
108
+
109
+ ## Policy file
104
110
 
105
- 보호 진입점은 자동 확장 탐색을 끕니다. 알려진 도구 외에는 신뢰한 어댑터가 없는 도구를 차단합니다.
111
+ Specify a policy with `--policy` or SDK `settings` or `settingsPath`.
106
112
 
107
- ## 정책 파일
113
+ A normal Pi installation uses `<agentDir>/guard/settings.json`. Choose **Approve for me** or **Ask for approval** in `/approve`. The screen uses the English descriptions from [Codex's official approval picker](https://learn.chatgpt.com/docs/security-administration) and wraps the selected description on narrow terminals. Command descriptions, selection screens, status text, and fixed approval dialog text are in English.
108
114
 
109
- `--policy` 또는 SDK의 `settings`·`settingsPath`로 지정합니다.
115
+ `/approve-model` shows only available models in Pi's current `/scoped-models` scope. Without a configured scope, it shows all available models, as Pi does. If every scoped model is unavailable, it does not expand to the full list. A model removed from the scope while the picker is open is not saved; existing settings are preserved.
110
116
 
111
- 일반 Pi 설치에서는 `<agentDir>/guard/settings.json`을 사용합니다. `/approve`에서 **Approve for me** 또는 **Ask for approval**을 선택하고, `/approve-model`에서 등록된 모델을 검색해 보조 모델을 선택합니다. **현재 Pi 모델 사용**은 `reviewModel: null`에 해당합니다. 주 모델은 바뀌지 않으며 Esc로 취소하면 저장하지 않습니다. 명시한 `settingsPath`가 있으면 메뉴도 그 파일에 저장합니다.
117
+ **Use current Pi model** corresponds to `reviewModel: null` and uses the current main model for review instead of a secondary model. Selecting a secondary model does not change the main model. Esc cancels without saving. When `settingsPath` is specified, the menus also save to that file.
112
118
 
113
119
  ```json
114
120
  {
@@ -128,90 +134,100 @@ try {
128
134
  }
129
135
  ```
130
136
 
131
- | 필드 | 기본값 | 설명 |
137
+ | Field | Default | Description |
132
138
  | --- | --- | --- |
133
- | `mode` | `workspace-write` | `read-only` 또는 `workspace-write` |
134
- | `approvalPolicy` | `on-request` | `"on-request"`, `"never"`, 또는 `{"sandbox": true, "rules": false, "mcp_elicitations": true}`. `sandbox` 키는 기존 파일 호환성을 위한 일반 승인 범주의 이름이며 OS 격리를 뜻하지 않습니다. 생략한 `mcp_elicitations`는 허용하지 않습니다. `never`와 꺼진 범주의 요청은 검토 없이 차단합니다 |
135
- | `approvalsReviewer` | `auto_review` | `"user"`면 사용자 검토 |
136
- | `reviewModel` | `null` | 현재 모델 대신 사용할 등록 모델 (`{"provider": "ollama-cloud", "id": "glm-5.3"}`). 해당 공급자를 먼저 등록해야 합니다 |
137
- | `ruleFiles` | `[]` | 아래 규칙 파일 경로 |
138
- | `commandRules` | `[]` | 리터럴 인자 접두사 규칙 (`allow`·`ask`·`deny`) |
139
- | `allowedDomains` | `[]` | 허용 도메인 패턴 |
140
- | `trustedTools` | `[]` | 알려진 도구 외에 통과할 추가 도구 이름 |
141
- | `reviewTimeoutMs`, `approvalTimeoutMs`, `executionTimeoutSeconds` | 20000, 60000, 120 | 검토자·승인 창은 밀리초, 쉘은 초 단위입니다 |
142
- | `reviewPolicy`, `reviewMaxRounds`, `reviewMaxOutputTokens`, `reviewContextChars` | `null`, 4, 2048, 60000 | 검토자의 조직 정책 부분을 교체합니다. 위험 평가·출처 구분·결과 기준은 유지합니다 |
143
- | `writableRoots` | `[]` | 추가 쓰기 루트 |
144
- | `excludeSlashTmp`, `excludeTmpdir` | `false` | 기본 임시 경로(`/tmp`, `os.tmpdir()`) 허용을 제외합니다 |
145
- | `projectDocMaxBytes`, `projectDocFallbackFilenames`, `projectRootMarkers` | 32768, `[]`, `null` | 프로젝트 지침 합산 한도, 보조 파일명, 루트 표시 (`null`은 `.git`, `[]`은 상위 탐색 해제) |
146
-
147
- ## 규칙 파일
148
-
149
- `ruleFiles`의 `.rules`는 고정 리비전의 Codex `codex-execpolicy`가 직접 평가합니다.
150
-
151
- - Starlark 함수·조건식·컴프리헨션·문자열 보간, `prefix_rule`, `host_executable`, `network_rule`, `match`·`not_match` 검증을 지원합니다.
152
- - 복합 명령에는 가장 강한 규칙을 적용합니다.
153
- - Codex의 네트워크 규칙 변환처럼 프로토콜 표시는 호스트 허용·거부 목록으로 합쳐지며, 별도 프로토콜별 권한으로 분리하지 않습니다.
154
- - 해석하지 못하는 셸 구문은 신뢰한 전체 명령 규칙이 허용하지 않으면 검토합니다.
155
- - 신뢰한 `allow` 규칙은 일치하는 명령의 권한을 넓힐 수 있으므로 필요한 명령에만 지정합니다.
156
-
157
- ## 동작 상세
158
-
159
- ### 명령 검토와 승인
160
-
161
- - 승인된 도구는 Pi의 원래 SDK 실행기로 실행합니다. 셸의 최종 명령·작업 디렉터리·환경·시간 제한·취소 신호를 유지합니다.
162
- - 일반 범위를 넘는 파일 접근, 명시적 승인 요청, 검토 규칙, 해석하지 못하는 명령은 실행 전에 검토합니다.
163
- - `additional_permissions`는 검토할 범위의 설명입니다. 승인된 명령은 호스트 권한으로 실행하며 이 범위를 OS 접근 제한으로 강제하지 않습니다. 실행 중 네트워크 목적지를 가로채거나 별도 프록시를 만들지 않습니다.
164
- - TUI·RPC 승인 창에서 한 번, 세션, 규칙 저장을 선택할 수 있습니다. 전체 명령 권한은 한 번만 승인할 수 있습니다. 저장 승인은 정확한 도구·입력·작업 디렉터리·호출 경로·정책·권한에 묶이며, 정책 변경 시 기존 승인을 무효화합니다.
165
- - 모델 작업이 반복 거부로 중단돼도 이후 사용자가 직접 입력한 쉘 명령은 독립적으로 평가합니다.
166
-
167
- ### 자동 검토자
168
-
169
- - 현재 모델을 기본으로 사용하고 `reviewModel`로 등록된 다른 모델을 선택할 수 있습니다.
170
- - 누적된 사용자 지시와 Pi가 제공한 지시의 출처를 유지하며, 도구 결과는 실행 증거로 취급합니다.
171
- - 조사는 읽기 전용 파일·디렉터리 도구로 제한합니다.
172
- - 연속 3회 또는 최근 50회 중 10회 거부되면 실제 Pi 작업을 중단합니다.
173
- - 오류와 시간 초과는 승인으로 바뀌지 않으며, 잘못된 위험 등급·승인 수준 응답도 검토 실패로 처리합니다.
174
- - `/approve`는 승인 방식 설정이고 `/approve-model`은 보조 모델 선택입니다. 설정 변경은 저장 후 즉시 적용하며 이전 정책의 대기 검토와 저장 승인을 무효화합니다.
175
-
176
- ### 컨텍스트 파일
177
-
178
- - `agentDir`의 전역 지침과 프로젝트 루트부터 현재 디렉터리까지의 지침을 자동 탐색합니다.
179
- - 같은 디렉터리에서는 `AGENTS.override.md` → `AGENTS.md` → `projectDocFallbackFilenames` 순서로 선택합니다.
180
- - 보호 파일로 연결되는 별칭은 거부하고, 도구 출력에 등장한 파일명을 지침의 출처로 취급하지 않습니다. 비신뢰 프로젝트는 제외하며 새로고침 때 다시 읽습니다.
139
+ | `mode` | `workspace-write` | `read-only` or `workspace-write` |
140
+ | `approvalPolicy` | `on-request` | `"on-request"`, `"never"`, or `{"sandbox": true, "rules": false, "mcp_elicitations": true}`. The `sandbox` key names the general approval category for compatibility with existing files; it does not mean OS isolation. Omitted `mcp_elicitations` is not allowed. `never` and disabled categories block requests without review |
141
+ | `approvalsReviewer` | `auto_review` | `"user"` selects user review |
142
+ | `reviewModel` | `null` | A registered model to use instead of the current model (`{"provider": "ollama-cloud", "id": "glm-5.3"}`). Register the provider first |
143
+ | `ruleFiles` | `[]` | Paths to the rule files described below |
144
+ | `commandRules` | `[]` | Literal argument prefix rules (`allow`, `ask`, `deny`) |
145
+ | `allowedDomains` | `[]` | Allowed domain patterns |
146
+ | `trustedTools` | `[]` | Additional tool names allowed outside the known set |
147
+ | `reviewTimeoutMs`, `approvalTimeoutMs`, `executionTimeoutSeconds` | 20000, 60000, 120 | Reviewer and approval dialog timeouts are in milliseconds; shell timeout is in seconds |
148
+ | `reviewPolicy`, `reviewMaxRounds`, `reviewMaxOutputTokens`, `reviewContextChars` | `null`, 4, 2048, 60000 | Replaces the reviewer's organization policy section. Risk assessment, source distinction, and outcome criteria remain intact |
149
+ | `writableRoots` | `[]` | Additional writable roots |
150
+ | `excludeSlashTmp`, `excludeTmpdir` | `false` | Excludes the default temporary paths (`/tmp`, `os.tmpdir()`) from allowed writes |
151
+ | `projectDocMaxBytes`, `projectDocFallbackFilenames`, `projectRootMarkers` | 32768, `[]`, `null` | Combined project instruction limit, fallback filenames, and root markers (`null` means `.git`; `[]` disables parent traversal) |
152
+
153
+ ## Rule files
154
+
155
+ The TypeScript engine evaluates `.rules` files in `ruleFiles` using contracts ported from Codex revision `a956835d020762cb2b570053af06f643a11c0ecc`. Captured outputs from the former native engine are replayed in the [parity tests](../test/unit/execpolicy-parity.test.mjs).
156
+
157
+ Evaluation exposes only Starlark values and policy functions, with no host file or network functions or JavaScript `eval`. Input/output size, execution steps, collection size, nesting, and evaluation time are bounded. The asynchronous API uses a cancellable Node.js worker; the synchronous API uses a bounded Node.js process. Invalid or unsupported input and exhausted budgets reject the rules. Without rule files, startup needs neither an evaluation worker nor an external executable.
158
+
159
+ - Supports Starlark functions, conditionals, comprehensions, string interpolation, `prefix_rule`, `host_executable`, `network_rule`, and `match` and `not_match` validation.
160
+ - Applies the strongest matching rule to compound commands.
161
+ - As in Codex's network rule conversion, protocol labels are merged into host allow and deny lists rather than separate protocol permissions.
162
+ - Shell syntax that cannot be interpreted requires review unless a trusted full-command rule allows it.
163
+ - `curl` and `wget` require review when the destination is not an explicit HTTP URL or comes from a separate configuration file. Omitting the scheme or supplying the URL through a configuration file does not bypass general approval review.
164
+ - Trusted `allow` rules can broaden permissions for matching commands; limit them to the commands that need them.
165
+
166
+ ## Behavior details
167
+
168
+ ### Command review and approval
169
+
170
+ - Approved tools run through Pi's original SDK executor. The final shell command, working directory, environment, timeout, and cancellation signal are preserved.
171
+ - File access outside the normal scope, explicit approval requests, review rules, and commands that cannot be interpreted are reviewed before execution.
172
+ - `additional_permissions` describes the scope to review. Approved commands run with host permissions; the scope is not enforced as an OS access restriction. The extension does not intercept network destinations during execution or create a separate proxy.
173
+ - TUI and RPC approval dialogs offer one-time, session, and saved-rule approval. Full-command permissions can be approved only once. Saved approvals bind to the exact tool, input, working directory, invocation path, policy, and permissions. Policy changes invalidate existing approvals.
174
+ - Direct shell commands entered later by the user are evaluated independently even if repeated denials stopped the model's task.
175
+
176
+ ### Automatic reviewer
177
+
178
+ - Uses the current model by default; `reviewModel` can select another registered model.
179
+ - Preserves the sources and chronology of accumulated user instructions and instructions supplied by Pi. Tool results are execution evidence. The outer `user` message sent to the review API and user-role messages generated by extensions do not themselves grant authorization.
180
+ - Investigation is limited to read-only file and directory tools.
181
+ - Stops the actual Pi task after three consecutive denials or ten denials in the latest fifty reviews.
182
+ - Errors and timeouts never become approvals. Invalid risk or authorization level responses are also treated as review failures.
183
+ - `/approve` configures the approval method; `/approve-model` selects the secondary model. Changes apply immediately after saving and invalidate pending reviews and saved approvals from the previous policy.
184
+ - After reading a denial reason, the user can authorize the exact operation, target, and content to send in an ordinary message. The next review receives the latest authorization and new facts; no special command is needed. If the user withdraws authorization or requests another target, review is based on the current instructions and actual operation.
185
+ - `/approve retry` lets the user select one exact operation from up to ten recent automatic review denials. Selecting it after checking the target, input, and denial reason triggers one new review of the same operation in the same context. It does not automatically allow the operation or grant session approval. A previous `critical` assessment can be reevaluated, but an operation still assessed as `critical` or subject to an explicit absolute denial remains blocked. The authorization marker does not apply to changed inputs or stale context.
186
+ - A custom `reviewPolicy` replaces only the original organization policy section. Strings such as `{{ extra_policy }}` inside the policy are preserved literally. Risk and authorization criteria are not replaced.
187
+ - Actual model responses must use the structured `outcome` assessment. The existing `decision` interface of a `ReviewProvider` explicitly injected through the SDK remains for compatibility; actual Pi models cannot use that path.
188
+ - Review input includes the current approval policy, path and domain scope, final execution arguments, linked tool calls and results, and the actual approval dialog's questions and answers. Shell environment evidence includes explicit non-secret values and the names of omitted variables; it is not described as the full process environment.
189
+ - Final prepared calls, results, review assessments, and user confirmations are saved in Pi session custom records for extension reloads and active branch restoration. Audit logs still omit raw arguments. Large evidence is limited with omission markers. If user authorization and the full current review target exceed the budget, execution is not automatic.
190
+ - A statement from an ordinary tool that “the user approved” is evidence. Only answers observed by the protected adapter through actual Pi `select`, `confirm`, and `input` APIs are recorded as user confirmations with their questions. Answers to questions marked as password or API key input are masked in the record.
191
+
192
+ ### Context files
193
+
194
+ - Automatically discovers global instructions in `agentDir` and project instructions from the project root to the current directory.
195
+ - In each directory, chooses `AGENTS.override.md`, then `AGENTS.md`, then `projectDocFallbackFilenames`.
196
+ - Rejects aliases pointing to protected files and does not treat filenames in tool output as instruction sources. Untrusted projects are excluded. Files are reread on refresh.
181
197
 
182
198
  ### MCP
183
199
 
184
- - Pi에 등록된 서버, `agentDir/mcp.json`, 신뢰한 프로젝트의 `.pi/mcp.json`을 사용합니다. 모드를 다시 연결할 때 기존 연결을 종료하고 새 연결을 만듭니다.
185
- - 최종 실행 승인은 서버의 실제 도구 등록에 결합합니다. 검토 중 등록 정보가 바뀌거나 호출이 취소되면 실행하지 않습니다.
186
- - 일반 경로는 검토자 종류와 별개로 Codex의 annotation 우선순위와 승인 모드를 따릅니다. 엄격한 검토 요청·민감 작업·필수 사용자 입력은 새 승인을 요구하고, 읽기 전용 표시나 이전 승인으로 생략하지 않습니다.
187
- - `codex_requires_user_input`은 모델이 대신 승인하지 않습니다. 빈 승인 폼은 처리하지만, 입력 필드가 있는 일반 폼과 URL 인증 요청은 이 어댑터에서 거부합니다.
188
- - `node_repl/js` 이름에도 같은 승인 규칙을 적용합니다. 추가 승인 요청은 살아 있는 원래 호출의 도구·연결·실제 입력에 결합하며, 다른 도구나 커넥터를 대신 지목하면 거부합니다.
200
+ - Uses servers registered in Pi, `agentDir/mcp.json`, and trusted projects' `.pi/mcp.json`. Mode reconnection closes existing connections and creates new ones.
201
+ - Final execution approval binds to the server's actual tool registration. Changes to registration during review, or cancellation, prevent execution.
202
+ - The normal path follows Codex's annotation precedence and approval modes regardless of reviewer type. Strict review requests, sensitive operations, and required user input need fresh approval; read-only annotations and previous approvals cannot skip it.
203
+ - The model does not approve `codex_requires_user_input` on the user's behalf. Empty approval forms are handled, but ordinary forms with input fields and URL authentication requests are rejected by this adapter.
204
+ - The same approval rules apply to the `node_repl/js` name. Additional approval requests bind to the original live call's tool, connection, and actual input. Requests naming another tool or connector instead are rejected.
189
205
 
190
- ### 실행 범위
206
+ ### Execution scope
191
207
 
192
- - 검토 입력의 경로는 문자 그대로 정규화합니다. 별도의 OS 권한 패턴으로 변환하지 않습니다.
193
- - 시작과 도구 실행 전에 디렉터리 트리나 하드링크를 전수 탐색하지 않습니다.
194
- - 직접 도구 경로와 해석 가능한 명령의 보호 경로는 승인 전에 거부합니다. 승인된 인터프리터 내부의 간접 접근, 하드링크 별칭, 실행 중 네트워크 변경을 격리하지 않습니다.
208
+ - Review input paths are normalized literally, without conversion to separate OS permission patterns.
209
+ - The extension does not exhaustively scan directory trees or hard links at startup or before tool execution.
210
+ - Direct tool paths and protected paths in interpretable commands are rejected before approval. Indirect access inside approved interpreters, hard-link aliases, and network changes during execution are not isolated.
195
211
 
196
- ## Docker에서 Ollama Cloud 검증
212
+ ## Ollama Cloud verification in Docker
197
213
 
198
- ### 준비
214
+ ### Preparation
199
215
 
200
- - 저장소 루트에서 Docker 엔진이 실행 중이어야 합니다. 로컬 Ollama 서버는 설치하지 않습니다.
201
- - 이미지는 Node 24.14.0, Pi 0.99.1, `pi-ollama-cloud` 0.12.2, `fd` 10.3.0을 고정합니다. 호스트 디렉터리·소켓을 마운트하거나 포트를 공개하지 않으며 Docker의 기본 보안 제한을 유지합니다.
202
- - 처음 이미지 빌드에만 네트워크가 필요하고, 검증 컨테이너는 네트워크 없이 실행합니다.
216
+ - Run from the repository root with the Docker engine running. No local Ollama server is installed.
217
+ - The image pins Node 24.14.0, Pi 0.99.1, `pi-ollama-cloud` 0.12.2, and `fd` 10.3.0. It does not mount host directories or sockets or publish ports, and retains Docker's default security restrictions.
218
+ - Only the initial image build requires network access. Verification containers run without a network.
203
219
 
204
- ### 키 없는 검증
220
+ ### Verification without keys
205
221
 
206
222
  ```sh
207
223
  npm run verify:docker -- --mode offline --platform linux/amd64
208
224
  ```
209
225
 
210
- ARM Docker 호스트에서 별도 ARM64 결과를 얻으려면 `--platform linux/arm64`로 실행합니다.
226
+ For a separate ARM64 result on an ARM Docker host, run with `--platform linux/arm64`.
211
227
 
212
- ### 실모델 검증
228
+ ### Live model verification
213
229
 
214
- 실행할 셸에 `OLLAMA_API_KEY`를 export해야 합니다. 키는 명령 인자·이미지 빌드 인자·`auth.json`에 쓰지 않으며, 실제 호출에는 계정 사용량이 발생할 수 있습니다.
230
+ Export `OLLAMA_API_KEY` in the shell that will run verification. Do not put the key in command arguments, image build arguments, or `auth.json`. Actual calls may consume account usage.
215
231
 
216
232
  ```sh
217
233
  export OLLAMA_MODEL=glm-5.3
@@ -219,8 +235,8 @@ npm run verify:docker -- --mode live --platform linux/amd64
219
235
  npm run verify:docker -- --mode conformance --platform linux/amd64
220
236
  ```
221
237
 
222
- - `live`는 실제 주 에이전트와 검토자의 외부 경로 쓰기를 확인합니다.
223
- - `conformance`는 허용·외부 경로 승인·보호 경로 차단·정책 거부 사례와 배포된 CLI의 공급자 선택 승인을 검사합니다.
224
- - 사례마다 모델 호출 횟수·시간·출력을 제한하고 자동 공급자 재시도를 끕니다. 관찰 확장은 호출 수와 선택한 모델만 기록하고 응답을 대체하지 않습니다. 웹 도구와 사용량 조회는 비활성화합니다.
225
- - 키 부재·미지원 모델·서비스 오류·격리 오류는 성공으로 바꾸지 않습니다.
226
- - 출력의 `imageDigest`를 `--image`에 추가하면 소스와 아키텍처가 일치하는 기존 이미지를 재사용합니다. 소스 수정 후에는 `--image` 없이 다시 빌드합니다.
238
+ - `live` checks external-path writes by the actual main agent and reviewer.
239
+ - `conformance` checks allowed operations, external-path approvals, protected-path blocks, policy denials, and provider selection approval in the distributed CLI.
240
+ - Each case limits model calls, time, and output, and disables automatic provider retries. The observation extension records only call counts and selected models; it does not replace responses. Web tools and usage queries are disabled.
241
+ - Missing keys, unsupported models, service errors, and isolation errors are not treated as success.
242
+ - Supply the output's `imageDigest` through `--image` to reuse an existing image with matching source and architecture. After source changes, rebuild without `--image`.
package/package.json CHANGED
@@ -1,98 +1,109 @@
1
1
  {
2
- "name": "pi-codex-auto-review",
3
- "version": "0.1.3",
4
- "description": "Codex의 ‘Approve for me’에서 영감을 받은 Pi용 자동 실행 승인 검토 확장. 규칙과 Pi의 현재 모델로 도구 실행을 검토하고, 필요한 경우 사용자 승인을 요청합니다.",
5
- "license": "Apache-2.0",
6
- "keywords": [
7
- "pi-package",
8
- "pi-extension",
9
- "approval",
10
- "auto-review"
11
- ],
12
- "repository": {
13
- "type": "git",
14
- "url": "git+https://github.com/buYoung/pi-codex-auto-review.git"
15
- },
16
- "homepage": "https://github.com/buYoung/pi-codex-auto-review#readme",
17
- "bugs": {
18
- "url": "https://github.com/buYoung/pi-codex-auto-review/issues"
19
- },
20
- "publishConfig": {
21
- "access": "public",
22
- "registry": "https://registry.npmjs.org/"
23
- },
24
- "type": "module",
25
- "main": "dist/index.js",
26
- "types": "dist/index.d.ts",
27
- "exports": {
28
- ".": "./dist/index.js",
29
- "./startup": "./dist/startup.js"
30
- },
31
- "bin": {
32
- "pi-codex-auto-review": "dist/cli.js"
33
- },
34
- "pi": {
35
- "extensions": [
36
- "./dist/index.js"
2
+ "name": "pi-codex-auto-review",
3
+ "version": "0.2.0",
4
+ "description": "Codex의 ‘Approve for me’에서 영감을 받은 Pi용 자동 실행 승인 검토 확장. 규칙과 Pi의 현재 모델로 도구 실행을 검토하고, 필요한 경우 사용자 승인을 요청합니다.",
5
+ "license": "Apache-2.0",
6
+ "keywords": [
7
+ "pi-package",
8
+ "pi-extension",
9
+ "approval",
10
+ "auto-review"
11
+ ],
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "git+https://github.com/buYoung/pi-codex-auto-review.git"
15
+ },
16
+ "homepage": "https://github.com/buYoung/pi-codex-auto-review#readme",
17
+ "bugs": {
18
+ "url": "https://github.com/buYoung/pi-codex-auto-review/issues"
19
+ },
20
+ "publishConfig": {
21
+ "access": "public",
22
+ "registry": "https://registry.npmjs.org/"
23
+ },
24
+ "type": "module",
25
+ "main": "dist/index.js",
26
+ "types": "dist/index.d.ts",
27
+ "exports": {
28
+ ".": "./dist/index.js",
29
+ "./startup": "./dist/startup.js"
30
+ },
31
+ "bin": {
32
+ "pi-codex-auto-review": "dist/cli.js"
33
+ },
34
+ "pi": {
35
+ "extensions": [
36
+ "./dist/index.js"
37
+ ]
38
+ },
39
+ "scripts": {
40
+ "prepare": "husky",
41
+ "check": "biome check .",
42
+ "check:fix": "biome check --write .",
43
+ "check:staged": "lint-staged",
44
+ "release": "node scripts/release.mjs",
45
+ "build": "node scripts/clean-build.mjs && tsc",
46
+ "prepack": "node scripts/clean-build.mjs && tsc && node scripts/check-package.mjs",
47
+ "test:contracts": "node scripts/run-tests.mjs contracts",
48
+ "test:policy": "node scripts/run-tests.mjs policy",
49
+ "test:reviewer": "node scripts/run-tests.mjs reviewer",
50
+ "test:approvals": "node scripts/run-tests.mjs approvals",
51
+ "test:execution": "node scripts/run-tests.mjs execution",
52
+ "test:integration": "node scripts/run-tests.mjs integration",
53
+ "test:e2e": "node scripts/run-tests.mjs e2e",
54
+ "test:conformance": "node scripts/run-tests.mjs conformance",
55
+ "verify:guard": "node scripts/verify-guard.mjs",
56
+ "verify:platform": "node scripts/verify-platform.mjs",
57
+ "verify:windows": "node scripts/verify-windows.mjs",
58
+ "verify:docker": "node scripts/verify-docker.mjs"
59
+ },
60
+ "lint-staged": {
61
+ "*": "biome check --no-errors-on-unmatched --files-ignore-unknown=true"
62
+ },
63
+ "peerDependencies": {
64
+ "@earendil-works/pi-ai": ">=0.86.1",
65
+ "@earendil-works/pi-coding-agent": ">=0.86.1",
66
+ "@earendil-works/pi-tui": ">=0.86.1"
67
+ },
68
+ "devDependencies": {
69
+ "@biomejs/biome": "2.5.15",
70
+ "@earendil-works/pi-ai": "0.99.1",
71
+ "@earendil-works/pi-coding-agent": "0.99.1",
72
+ "@earendil-works/pi-tui": "0.99.1",
73
+ "@inquirer/prompts": "8.5.2",
74
+ "@sinclair/typebox": "0.34.52",
75
+ "@types/node": "24.0.0",
76
+ "husky": "9.1.7",
77
+ "lint-staged": "16.4.0",
78
+ "pi-ollama-cloud": "0.12.2",
79
+ "release-it": "21.0.1",
80
+ "semver": "7.8.5",
81
+ "typescript": "6.0.3"
82
+ },
83
+ "overrides": {
84
+ "@earendil-works/pi-ai": "0.99.1",
85
+ "@earendil-works/pi-agent-core": "0.99.1",
86
+ "@earendil-works/pi-tui": "0.99.1",
87
+ "brace-expansion": "5.0.12"
88
+ },
89
+ "engines": {
90
+ "node": ">=22.19.0"
91
+ },
92
+ "files": [
93
+ "dist/**/*.js",
94
+ "dist/**/*.d.ts",
95
+ "dist/**/*.js.map",
96
+ "README.md",
97
+ "README.ko.md",
98
+ "LICENSE",
99
+ "NOTICE",
100
+ "docs/usage.md",
101
+ "docs/usage.ko.md",
102
+ "docs/publishing.md",
103
+ "docs/publishing.ko.md",
104
+ "docs/security/dependencies.md",
105
+ "docs/security/dependencies.ko.md",
106
+ "docs/testing/auto-review-protection.md",
107
+ "docs/testing/auto-review-protection.ko.md"
37
108
  ]
38
- },
39
- "scripts": {
40
- "release": "node scripts/release.mjs",
41
- "build": "node scripts/clean-build.mjs && tsc && node scripts/build-execpolicy.mjs",
42
- "prepack": "node scripts/clean-build.mjs && tsc && node scripts/check-package.mjs",
43
- "test:contracts": "node scripts/run-tests.mjs contracts",
44
- "test:policy": "node scripts/run-tests.mjs policy",
45
- "test:reviewer": "node scripts/run-tests.mjs reviewer",
46
- "test:approvals": "node scripts/run-tests.mjs approvals",
47
- "test:execution": "node scripts/run-tests.mjs execution",
48
- "test:integration": "node scripts/run-tests.mjs integration",
49
- "test:e2e": "node scripts/run-tests.mjs e2e",
50
- "test:conformance": "node scripts/run-tests.mjs conformance",
51
- "verify:guard": "node scripts/verify-guard.mjs",
52
- "verify:platform": "node scripts/verify-platform.mjs",
53
- "verify:windows": "node scripts/verify-windows.mjs",
54
- "verify:docker": "node scripts/verify-docker.mjs"
55
- },
56
- "peerDependencies": {
57
- "@earendil-works/pi-ai": ">=0.86.1",
58
- "@earendil-works/pi-coding-agent": ">=0.86.1",
59
- "@earendil-works/pi-tui": ">=0.86.1"
60
- },
61
- "devDependencies": {
62
- "@earendil-works/pi-ai": "0.99.1",
63
- "@earendil-works/pi-coding-agent": "file:vendor/pi-coding-agent-0.99.1-security.1.tgz",
64
- "@earendil-works/pi-tui": "0.99.1",
65
- "@inquirer/prompts": "8.5.2",
66
- "@sinclair/typebox": "0.34.52",
67
- "@types/node": "24.0.0",
68
- "pi-ollama-cloud": "0.12.2",
69
- "release-it": "21.0.1",
70
- "semver": "7.8.5",
71
- "typescript": "6.0.3"
72
- },
73
- "overrides": {
74
- "@earendil-works/pi-ai": "0.99.1",
75
- "@earendil-works/pi-agent-core": "0.99.1",
76
- "@earendil-works/pi-tui": "0.99.1",
77
- "brace-expansion": "5.0.12"
78
- },
79
- "engines": {
80
- "node": ">=22.19.0"
81
- },
82
- "files": [
83
- "dist/**/*.js",
84
- "dist/**/*.d.ts",
85
- "dist/**/*.js.map",
86
- "dist/native/*/pi-guard-execpolicy*",
87
- "dist/native/*/artifact.json",
88
- "README.md",
89
- "LICENSE",
90
- "NOTICE",
91
- "docs/usage.md",
92
- "docs/publishing.md",
93
- "docs/security/dependencies.md",
94
- "docs/testing/auto-review-protection.md",
95
- "native/execpolicy/LICENSE",
96
- "native/execpolicy/NOTICE"
97
- ]
98
109
  }
@@ -1,5 +0,0 @@
1
- {
2
- "platform": "darwin-arm64",
3
- "sourceDigest": "77a7cd21c340d5d5956164cc0ce32970097bc8f4180a2e373df56a1ff79b5088",
4
- "sha256": "660d7f76dec67a66b6e62d3e1c43fb01ae3e9b6912ff0b73645e0f87c22cd198"
5
- }
@@ -1,5 +0,0 @@
1
- {
2
- "platform": "linux-x64",
3
- "sourceDigest": "77a7cd21c340d5d5956164cc0ce32970097bc8f4180a2e373df56a1ff79b5088",
4
- "sha256": "a08e8b8579986c6f0d17b6ef964e129ebf036df972b95a8510ea679802bfa1fb"
5
- }