codex-agent-view 0.5.0 → 0.5.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/.codex-plugin/plugin.json +1 -1
- package/README.ko.md +8 -6
- package/README.md +8 -6
- package/package.json +1 -1
- package/src/core/normalize-hook-payload.mjs +41 -2
package/README.ko.md
CHANGED
|
@@ -10,7 +10,7 @@ Codex Agent View는 Codex가 지금 어떤 작업을 수행하고 있고 어떤
|
|
|
10
10
|
|
|
11
11
|
### 빠른 시작
|
|
12
12
|
|
|
13
|
-
Public npm `latest`는
|
|
13
|
+
Public npm `latest`는 `codex-agent-view@0.5.0`이다. Current source는 같은 단일 실행·기본 브라우저 workflow를 유지하면서 task summary를 만들기 전에 자동 `in-app-browser-context` wrapper를 제거하는 **미배포 `0.5.1` patch candidate**다. 아래 설치 명령은 검증된 public `0.5.0`을 대상으로 하며 `0.5.1` 공개를 뜻하지 않는다.
|
|
14
14
|
|
|
15
15
|
```bash
|
|
16
16
|
npm install --global codex-agent-view@0.5.0
|
|
@@ -40,9 +40,11 @@ Live UI의 기본 언어는 영어이며 language selector에서 **English**, **
|
|
|
40
40
|
|
|
41
41
|
### 현재 상태
|
|
42
42
|
|
|
43
|
-
현재 source는 미배포 `0.5.
|
|
43
|
+
현재 source는 미배포 `0.5.1` ambient-wrapper removal patch candidate다. Public `0.5.0`의 실행·인증 설계는 그대로 유지한다. `@codex-agent-view` 한 번이 bundle의 내부 capability를 실행해 view를 준비하고 기본 browser를 열며, 사용자용 `$show-agents` picker와 앱 panel은 사용 흐름에 없다. 이 patch는 original prompt의 첫 4,096자로 inspection을 제한한 뒤 닫힌 exact leading `in-app-browser-context` block을 redaction 전에 제거해 ambient UI state가 사용자의 요청 작업으로 표시되지 않게 한다. `0.5.1` publish, tag, GitHub Release, public artifact 검증과 수정 후 공식 앱 E2E는 아직 남아 있다.
|
|
44
44
|
|
|
45
|
-
Historical public `0.
|
|
45
|
+
Historical public `0.5.0` evidence: npm `latest`는 `0.5.0`이다. Signature가 있는 23-file registry artifact의 shasum은 `bf89ee665840e62d502551d87d7faaed2a1e0206`, integrity는 `sha512-W8rOv+0Xb5SVsFl/kXHF/vt9CJ/Su0rwDWVFWLWYWhKidZTxx+ea9Z0dtd65k3KBxucLRuwMOUJL3BtHr2p2Dw==`, SHA-256은 `e23c4ea484fa6186c17f2c564b5019a08eb6acca10f99fc85bf95e2f2757bc2c`다. Main CI `30816426733`은 Node.js 18/20/22에서 통과했다. 이 기기에 public exact `0.5.0`을 재설치해 CLI/plugin version 일치, hook wiring 9종과 `events_received: true`를 확인했다. 공식 앱은 실제 subagent start/stop을 전달했고 최종 상태는 `stopped`였다. 그 E2E에서 자동 `in-app-browser-context` text가 task summary에 섞이는 결함도 확인했으며 `0.5.1`은 이 bounded defect를 수정한다. `v0.5.0` tag와 GitHub Release는 아직 생성하지 않았다.
|
|
46
|
+
|
|
47
|
+
Historical public `0.4.8` evidence로 `npm run check` 153개 test, plugin validation과 package dry-run을 통과했다. Release 당시 npm `latest` `0.4.8`, signature가 있는 25-file registry artifact, exact global install, installed/enabled plugin `0.4.8`, hook 9종, healthy doctor, main/tag CI, annotated tag와 public GitHub Release를 확인했다. 공식 Codex 앱에서는 새 subagent start/stop이 ordered timestamp와 최종 stopped 상태로 실제 전달됐다. 그 release의 기존 in-app Browser 흐름에서도 grant 인증, fragment 제거, 같은 tab bare-root recovery 성공과 새 tab의 recovery button 부재를 확인했다. 이 release evidence는 current `0.5.1` patch candidate의 검증 근거가 아니다.
|
|
46
48
|
|
|
47
49
|
- `@codex-agent-view`/Quick start를 default-browser `open` 1회로 routing하는 내부 launch skill
|
|
48
50
|
- `.codex-plugin/plugin.json`, local marketplace catalog, single genuine Codex skill
|
|
@@ -216,16 +218,16 @@ Plugin enable/trust와 앱 재시작 뒤 생성되거나 재개되는 task는 tr
|
|
|
216
218
|
|
|
217
219
|
### npm 설치 명령 참고
|
|
218
220
|
|
|
219
|
-
아래 명령은
|
|
221
|
+
아래 명령은 검증된 public npm `latest`인 `0.5.0`을 설치한다. Current source는 별도의 미배포 `0.5.1` ambient-wrapper removal patch candidate다.
|
|
220
222
|
|
|
221
223
|
```bash
|
|
222
224
|
npm install --global codex-agent-view@0.5.0
|
|
223
225
|
codex-agent-view install
|
|
224
226
|
```
|
|
225
227
|
|
|
226
|
-
|
|
228
|
+
위 두 명령이 성공한 뒤에는 Codex 앱을 완전히 다시 열고 Plugins 화면에서 설치·활성화와 hook trust를 확인한 다음 새 task를 만든다. 첫 trusted hook이 backend 준비와 event 전달을 내부 처리하므로 사용자가 monitor CLI를 실행하지 않는다. `@codex-agent-view`를 한 번 실행해 기본 browser를 열고 tab을 닫았다면 다시 실행한다.
|
|
227
229
|
|
|
228
|
-
|
|
230
|
+
Public `0.5.0` 설치 경로는 위의 global package 설치와 명시적인 `codex-agent-view install` command 조합이다. Upgrade의 explicit `install`은 authenticated maintenance lifecycle로 registration과 bundle을 교체한다. Installation-owned viewer credential과 historical migration 경계는 보존한다. Launch workflow는 persistent token을 출력하지 않고 viewer credential이나 runtime/control bearer를 browser target에 넣지 않는다.
|
|
229
231
|
|
|
230
232
|
Version별 npm, install, migration, CI, tag와 GitHub Release evidence는 [docs/distribution.md](docs/distribution.md)에 보존한다. 각 evidence는 실제 확인한 뒤에만 갱신한다.
|
|
231
233
|
|
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@ Codex Agent View gives you a clear, read-only view of what Codex is working on a
|
|
|
8
8
|
|
|
9
9
|
## Quick start
|
|
10
10
|
|
|
11
|
-
Public npm `latest`
|
|
11
|
+
Public npm `latest` is `codex-agent-view@0.5.0`. Current source is the **unpublished `0.5.1` patch candidate**: it keeps the same one-invocation default-browser workflow while removing automatic `in-app-browser-context` wrapper text before deriving a task summary. The install command below targets the verified public `0.5.0`; it does not claim that `0.5.1` is available.
|
|
12
12
|
|
|
13
13
|
Universal Plugins Directory search installation is not available yet, so use a regular terminal for the **initial installation only**:
|
|
14
14
|
|
|
@@ -40,9 +40,11 @@ In short: install once in a terminal, invoke `@codex-agent-view` in Codex, and m
|
|
|
40
40
|
|
|
41
41
|
## Status
|
|
42
42
|
|
|
43
|
-
Current source is the unpublished `0.5.
|
|
43
|
+
Current source is the unpublished `0.5.1` ambient-wrapper removal patch candidate. It preserves the public `0.5.0` launch and authentication design: one `@codex-agent-view` invocation runs the bundle's internal capability, prepares the view, and opens the default browser; the user-facing `$show-agents` picker and app panel are not part of the workflow. After bounding inspection to the original prompt's first 4,096 characters, the patch removes a closed exact leading `in-app-browser-context` block before redaction so ambient UI state is not presented as the user's requested work. Publication, tag, GitHub Release, public-artifact verification, and an official fixed E2E for `0.5.1` are still pending.
|
|
44
44
|
|
|
45
|
-
Historical public `0.
|
|
45
|
+
Historical public `0.5.0` evidence: npm `latest` is `0.5.0`. The signed 23-file registry artifact has shasum `bf89ee665840e62d502551d87d7faaed2a1e0206`, integrity `sha512-W8rOv+0Xb5SVsFl/kXHF/vt9CJ/Su0rwDWVFWLWYWhKidZTxx+ea9Z0dtd65k3KBxucLRuwMOUJL3BtHr2p2Dw==`, and SHA-256 `e23c4ea484fa6186c17f2c564b5019a08eb6acca10f99fc85bf95e2f2757bc2c`. Main CI `30816426733` passed on Node.js 18, 20, and 22. This machine was reinstalled from public exact `0.5.0`; the CLI/plugin version matched, all nine hooks were wired, and `events_received: true`. The official app delivered an actual subagent start/stop pair with final status `stopped`. That E2E also exposed automatic `in-app-browser-context` text in the task summary, which is the bounded defect addressed by `0.5.1`. No `v0.5.0` tag or GitHub Release has been created yet.
|
|
46
|
+
|
|
47
|
+
Historical public `0.4.8` evidence: `npm run check` passed all 153 tests plus plugin validation and package dry-run. npm `latest` was `0.4.8` at release time; the signed 25-file registry artifact, exact global installation, enabled plugin `0.4.8`, all nine hooks, healthy doctor result, main/tag CI, annotated tag, and public GitHub Release were verified. The official Codex app delivered an actual new subagent start/stop pair with ordered timestamps and final stopped status. Its historical in-app Browser flow also verified grant authentication, fragment removal, same-tab bare-root recovery, and no recovery button in a new tab. That release evidence does not validate the current `0.5.1` patch candidate.
|
|
46
48
|
|
|
47
49
|
Plugin installation and lifecycle payloads were verified with Homebrew Codex CLI and the Codex executable embedded in the official app. However, a real-use attempt that installed and enabled `0.2.0` in an already-running official app process delivered zero events while two subagents ran. The monitor, registration, enablement, and installed bundle were healthy, while app logs showed no sender invocation. Evidence indicates that the same process retained a pre-install `hooks/list` snapshot; persisted exact-hook trust is not exposed through CLI JSON, so the precise skip boundary remains unconfirmed.
|
|
48
50
|
|
|
@@ -168,16 +170,16 @@ After plugin enablement/trust and an app restart, the first trusted hook interna
|
|
|
168
170
|
|
|
169
171
|
## Install from npm
|
|
170
172
|
|
|
171
|
-
The commands below
|
|
173
|
+
The commands below install the verified public npm `latest`, `0.5.0`. Current source is the separate unpublished `0.5.1` ambient-wrapper removal patch candidate.
|
|
172
174
|
|
|
173
175
|
```bash
|
|
174
176
|
npm install --global codex-agent-view@0.5.0
|
|
175
177
|
codex-agent-view install
|
|
176
178
|
```
|
|
177
179
|
|
|
178
|
-
After
|
|
180
|
+
After these two commands succeed, fully reopen the Codex app, verify installation, enablement, and hook trust, then create a new task. The first trusted hook prepares the backend and delivers its event internally, so users do not run monitor CLI commands. Invoke `@codex-agent-view` once to open the default browser and invoke it again after closing the tab.
|
|
179
181
|
|
|
180
|
-
The
|
|
182
|
+
The public `0.5.0` installation path is the global package install followed by the explicit `codex-agent-view install` command above. During an upgrade, explicit `install` replaces registration and bundle files through the authenticated maintenance lifecycle. It preserves the installation-owned viewer credential and the historical migration boundary. The launch workflow prints no persistent token and puts neither the viewer credential nor runtime/control bearer in the browser target.
|
|
181
183
|
|
|
182
184
|
Version-specific npm, install, migration, CI, tag, and GitHub Release evidence is preserved in [Distribution](docs/distribution.md). That evidence is updated only after each item is actually verified.
|
|
183
185
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codex-agent-view",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.1",
|
|
4
4
|
"description": "Follow Codex work and participating agent progress in a clear, read-only live view opened from the official Codex app.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./src/core/index.mjs",
|
|
@@ -23,6 +23,10 @@ const MAX_LABEL_LENGTH = 256;
|
|
|
23
23
|
const MAX_WORKSPACE_LABEL_LENGTH = 120;
|
|
24
24
|
const MAX_PROMPT_INSPECTION_LENGTH = 4_096;
|
|
25
25
|
const MAX_TASK_SUMMARY_LENGTH = 180;
|
|
26
|
+
const AMBIENT_BROWSER_CONTEXT_OPEN =
|
|
27
|
+
'<in-app-browser-context source="ambient-ui-state">';
|
|
28
|
+
const AMBIENT_BROWSER_CONTEXT_CLOSE = "</in-app-browser-context>";
|
|
29
|
+
const USER_REQUEST_DELIMITER = "## My request for Codex:";
|
|
26
30
|
const CONTROL_CHARACTERS = /[\u0000-\u001f\u007f-\u009f]/;
|
|
27
31
|
const CONTROL_CHARACTERS_GLOBAL = /[\u0000-\u001f\u007f-\u009f]/g;
|
|
28
32
|
|
|
@@ -120,6 +124,35 @@ function replaceAbsolutePaths(value) {
|
|
|
120
124
|
.replace(POSIX_ABSOLUTE_PATH, (_match, prefix) => `${prefix}[path]`);
|
|
121
125
|
}
|
|
122
126
|
|
|
127
|
+
function stripLeadingAmbientBrowserContext(value) {
|
|
128
|
+
const withoutLeadingWhitespace = value.trimStart();
|
|
129
|
+
if (!withoutLeadingWhitespace.startsWith(AMBIENT_BROWSER_CONTEXT_OPEN)) {
|
|
130
|
+
return value;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
const closeAt = withoutLeadingWhitespace.indexOf(
|
|
134
|
+
AMBIENT_BROWSER_CONTEXT_CLOSE,
|
|
135
|
+
AMBIENT_BROWSER_CONTEXT_OPEN.length,
|
|
136
|
+
);
|
|
137
|
+
if (closeAt === -1) {
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
const remainder = withoutLeadingWhitespace.slice(
|
|
142
|
+
closeAt + AMBIENT_BROWSER_CONTEXT_CLOSE.length,
|
|
143
|
+
);
|
|
144
|
+
const delimiterCandidate = remainder.trimStart();
|
|
145
|
+
if (!delimiterCandidate.startsWith(USER_REQUEST_DELIMITER)) {
|
|
146
|
+
return remainder;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
const afterDelimiter = delimiterCandidate.slice(USER_REQUEST_DELIMITER.length);
|
|
150
|
+
if (afterDelimiter.length > 0 && !/^[\r\n]/u.test(afterDelimiter)) {
|
|
151
|
+
return remainder;
|
|
152
|
+
}
|
|
153
|
+
return afterDelimiter;
|
|
154
|
+
}
|
|
155
|
+
|
|
123
156
|
/**
|
|
124
157
|
* Derive a short, display-safe hint from an untrusted UserPromptSubmit prompt.
|
|
125
158
|
* The caller must discard the raw prompt after this synchronous derivation.
|
|
@@ -129,8 +162,14 @@ export function deriveTaskSummary(value) {
|
|
|
129
162
|
return null;
|
|
130
163
|
}
|
|
131
164
|
|
|
132
|
-
|
|
133
|
-
.slice(0, MAX_PROMPT_INSPECTION_LENGTH)
|
|
165
|
+
const summaryCandidate = stripLeadingAmbientBrowserContext(
|
|
166
|
+
value.slice(0, MAX_PROMPT_INSPECTION_LENGTH),
|
|
167
|
+
);
|
|
168
|
+
if (summaryCandidate === null) {
|
|
169
|
+
return null;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
let summary = summaryCandidate
|
|
134
173
|
.replace(PRIVATE_KEY_BLOCK, "[credential]")
|
|
135
174
|
.replace(CONTROL_CHARACTERS_GLOBAL, " ")
|
|
136
175
|
.replace(URL, "[link]")
|