@cyber-dash-tech/revela 0.18.13 → 0.18.15
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 +23 -23
- package/README.zh-CN.md +23 -23
- package/bin/revela.ts +0 -0
- package/lib/refine/server.ts +28 -4
- package/package.json +1 -1
- package/plugins/revela/.codex-plugin/plugin.json +1 -1
- package/plugins/revela/.mcp.json +3 -2
- package/plugins/revela/mcp/revela-server.ts +1 -1
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
**English** | [中文](README.zh-CN.md)
|
|
4
4
|
|
|
5
|
-
[](https://www.npmjs.com/package/@cyber-dash-tech/revela) [](LICENSE) [](https://www.npmjs.com/package/@cyber-dash-tech/revela) [](LICENSE) [](tests/) [](https://github.com/openai/codex) [](https://bun.sh)
|
|
6
6
|
|
|
7
7
|
<p align="center">
|
|
8
8
|
<img src="assets/img/logo-wordmark.png" alt="Revela" width="320" />
|
|
@@ -19,7 +19,7 @@ In your local workspace, Revela reviews materials, saves source-linked research,
|
|
|
19
19
|
Requirements:
|
|
20
20
|
|
|
21
21
|
- The Codex CLI must be installed and the `codex` command must be available in your shell.
|
|
22
|
-
- Your environment must be able to run `
|
|
22
|
+
- Your environment must be able to run `bun`; Revela uses `bun ./mcp/revela-server.ts` from the installed Codex plugin cache to start the MCP server.
|
|
23
23
|
- For interactive Review Apply actions, `codex exec` must also work because the Review UI uses it after saved comments are applied.
|
|
24
24
|
|
|
25
25
|
Optional preflight:
|
|
@@ -27,10 +27,10 @@ Optional preflight:
|
|
|
27
27
|
```bash
|
|
28
28
|
codex --version
|
|
29
29
|
codex exec --help
|
|
30
|
-
|
|
30
|
+
bun --version
|
|
31
31
|
```
|
|
32
32
|
|
|
33
|
-
If
|
|
33
|
+
If npm package checks fail with an npm cache permission error, repair the cache ownership or use a writable cache for local checks:
|
|
34
34
|
|
|
35
35
|
```bash
|
|
36
36
|
sudo chown -R "$(id -u):$(id -g)" ~/.npm
|
|
@@ -40,11 +40,11 @@ npm_config_cache=/tmp/revela-npm-cache bun run smoke:mcp-pack
|
|
|
40
40
|
Install Revela through the Codex Git marketplace:
|
|
41
41
|
|
|
42
42
|
```bash
|
|
43
|
-
codex plugin marketplace add https://github.com/cyber-dash-tech/revela --ref v0.18.
|
|
43
|
+
codex plugin marketplace add https://github.com/cyber-dash-tech/revela --ref v0.18.15
|
|
44
44
|
codex plugin add revela@revela
|
|
45
45
|
```
|
|
46
46
|
|
|
47
|
-
The Git marketplace install provides the Codex plugin shell, skills, hooks, and MCP configuration. When Codex starts the Revela MCP server
|
|
47
|
+
The Git marketplace install provides the Codex plugin shell, skills, hooks, and MCP configuration. When Codex starts the Revela MCP server, it runs `bun ./mcp/revela-server.ts` from the installed plugin cache and resolves the checked-out marketplace runtime.
|
|
48
48
|
|
|
49
49
|
You do not need to run `bun install` inside the Codex marketplace clone.
|
|
50
50
|
|
|
@@ -52,7 +52,7 @@ Start a new Codex thread after installing so Codex loads the Revela skills, MCP
|
|
|
52
52
|
|
|
53
53
|
Codex uses nine Revela skills: `revela` for routing the next workflow step, `revela-spec` for writing root-level `spec.md`, `revela-helper` for status and active design/domain, `revela-design` for custom design creation/validation/activation, `revela-domain` for custom narrative domain creation/validation/activation, `revela-research` for local and web research saved under `researches/` plus the design-aware `deck-plan.md` handoff, `revela-make-deck` for generating `decks/*.html` from an existing plan, `revela-review` for the Review UI, and `revela-export` for PDF/PPTX/PNG.
|
|
54
54
|
|
|
55
|
-
For release-aligned local validation, run `bun run smoke:mcp-pack`. It packs the current checkout to a temporary npm tarball and starts the MCP server through
|
|
55
|
+
For release-aligned local validation, run `bun run smoke:mcp-pack`. It packs the current checkout to a temporary npm tarball, extracts it, and starts the MCP server through the packaged Codex plugin launcher path without requiring a registry publish.
|
|
56
56
|
|
|
57
57
|
#### Codex Upgrade
|
|
58
58
|
|
|
@@ -74,7 +74,7 @@ codex plugin marketplace upgrade revela
|
|
|
74
74
|
codex plugin add revela@revela
|
|
75
75
|
```
|
|
76
76
|
|
|
77
|
-
The Git marketplace ref and `.mcp.json`
|
|
77
|
+
The Git marketplace ref and `.mcp.json` plugin launcher are part of the same release artifact. Start a new Codex thread after upgrading so Codex reloads the Revela skills, MCP tools, hooks, and runtime launcher.
|
|
78
78
|
|
|
79
79
|
## Built-In Designs
|
|
80
80
|
|
|
@@ -108,7 +108,7 @@ Revela includes built-in deck designs:
|
|
|
108
108
|
|
|
109
109
|
To switch designs in Codex, ask:
|
|
110
110
|
|
|
111
|
-
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.
|
|
111
|
+
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.18.15/skills/revela/SKILL.md), use summit as the design.
|
|
112
112
|
|
|
113
113
|
In Codex, ask Revela to list or switch designs; the plugin uses the active design when making decks.
|
|
114
114
|
|
|
@@ -116,7 +116,7 @@ In Codex, ask Revela to list or switch designs; the plugin uses the active desig
|
|
|
116
116
|
|
|
117
117
|
Domains add topic-specific communication guidance, such as consulting, product, or investor communication. Use them when you want Revela to adapt deck framing to a specific context.
|
|
118
118
|
|
|
119
|
-
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.
|
|
119
|
+
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.18.15/skills/revela/SKILL.md), list available domains.
|
|
120
120
|
|
|
121
121
|
In Codex, ask Revela to list or switch domains; the active domain guides deck framing during init, research, and planning.
|
|
122
122
|
|
|
@@ -126,57 +126,57 @@ Use these prompts in Codex from the workspace that contains your source material
|
|
|
126
126
|
|
|
127
127
|
1. Choose the narrative domain before authoring so Revela frames the audience, decision, risks, and objections for your context.
|
|
128
128
|
|
|
129
|
-
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.
|
|
129
|
+
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.18.15/skills/revela/SKILL.md), use consulting as the domain.
|
|
130
130
|
|
|
131
131
|
2. Choose the deck design before rendering so generated artifacts use the intended visual language.
|
|
132
132
|
|
|
133
|
-
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.
|
|
133
|
+
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.18.15/skills/revela/SKILL.md), use summit as the design.
|
|
134
134
|
|
|
135
135
|
3. Create a custom design when you want a different visual direction.
|
|
136
136
|
|
|
137
|
-
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.
|
|
137
|
+
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.18.15/skills/revela/SKILL.md), create a new design named neon-finance with a crisp financial-dashboard style: dark surfaces, precise grids, and bright green accents.
|
|
138
138
|
|
|
139
139
|
Revela may ask for references or constraints, then creates and validates the design. When it is ready, switch to it:
|
|
140
140
|
|
|
141
|
-
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.
|
|
141
|
+
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.18.15/skills/revela/SKILL.md), use neon-finance as the design.
|
|
142
142
|
|
|
143
143
|
4. Initialize local material intake. Init scans, extracts, and reviews workspace sources; it does not create a Narrative Vault.
|
|
144
144
|
|
|
145
|
-
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.
|
|
145
|
+
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.18.15/skills/revela/SKILL.md), help me init this workspace from the local materials.
|
|
146
146
|
|
|
147
147
|
5. Research source-linked deck inputs and save findings.
|
|
148
148
|
|
|
149
|
-
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.
|
|
149
|
+
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.18.15/skills/revela/SKILL.md), research the public evidence and examples needed for this deck.
|
|
150
150
|
|
|
151
151
|
6. Create or update the deck plan before generating HTML so slide order, chapter structure, source links, unresolved inputs, source limitations, and visual intent are explicit.
|
|
152
152
|
|
|
153
|
-
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.
|
|
153
|
+
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.18.15/skills/revela/SKILL.md), create or update the deck plan before generating HTML.
|
|
154
154
|
|
|
155
155
|
7. Make an HTML deck from the current deck plan.
|
|
156
156
|
|
|
157
|
-
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.
|
|
157
|
+
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.18.15/skills/revela/SKILL.md), make the deck from the current deck plan.
|
|
158
158
|
|
|
159
159
|
8. Review the generated deck for Artifact QA and targeted edits.
|
|
160
160
|
|
|
161
|
-
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.
|
|
161
|
+
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.18.15/skills/revela/SKILL.md), review the generated deck.
|
|
162
162
|
|
|
163
163
|
9. Export a PDF after deck QA passes.
|
|
164
164
|
|
|
165
|
-
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.
|
|
165
|
+
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.18.15/skills/revela/SKILL.md), export the deck to PDF.
|
|
166
166
|
|
|
167
167
|
10. Export an editable PPTX after deck QA passes.
|
|
168
168
|
|
|
169
|
-
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.
|
|
169
|
+
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.18.15/skills/revela/SKILL.md), export the deck to PPTX.
|
|
170
170
|
|
|
171
171
|
11. Export per-slide PNG files after deck QA passes.
|
|
172
172
|
|
|
173
|
-
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.
|
|
173
|
+
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.18.15/skills/revela/SKILL.md), export the deck to PNG.
|
|
174
174
|
|
|
175
175
|
## Review A Deck
|
|
176
176
|
|
|
177
177
|
Use Review after generating an HTML deck:
|
|
178
178
|
|
|
179
|
-
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.
|
|
179
|
+
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.18.15/skills/revela/SKILL.md), review the generated deck.
|
|
180
180
|
|
|
181
181
|
<p align="center">
|
|
182
182
|
<img src="assets/img/review-ui.png" alt="Revela Review UI showing @ref comments and deck QA" width="900" />
|
package/README.zh-CN.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[English](README.md) | **中文**
|
|
4
4
|
|
|
5
|
-
[](https://www.npmjs.com/package/@cyber-dash-tech/revela) [](LICENSE) [](https://www.npmjs.com/package/@cyber-dash-tech/revela) [](LICENSE) [](tests/) [](https://github.com/openai/codex) [](https://bun.sh)
|
|
6
6
|
|
|
7
7
|
<p align="center">
|
|
8
8
|
<img src="assets/img/logo-wordmark.png" alt="Revela" width="320" />
|
|
@@ -19,7 +19,7 @@ Revela 是 Codex plugin,用来把来源材料、调研、数据和用户意图
|
|
|
19
19
|
环境要求:
|
|
20
20
|
|
|
21
21
|
- 需要已安装 Codex CLI,并且 shell 中可以执行 `codex`。
|
|
22
|
-
- 环境中需要可以执行 `
|
|
22
|
+
- 环境中需要可以执行 `bun`;Revela 会从已安装的 Codex plugin cache 中运行 `bun ./mcp/revela-server.ts` 来启动 MCP server。
|
|
23
23
|
- 如果使用 Review UI 的 Apply,需要 `codex exec` 可用;评论会先保存,点击 Apply 后才执行修复。
|
|
24
24
|
|
|
25
25
|
可选的安装前检查:
|
|
@@ -27,10 +27,10 @@ Revela 是 Codex plugin,用来把来源材料、调研、数据和用户意图
|
|
|
27
27
|
```bash
|
|
28
28
|
codex --version
|
|
29
29
|
codex exec --help
|
|
30
|
-
|
|
30
|
+
bun --version
|
|
31
31
|
```
|
|
32
32
|
|
|
33
|
-
如果
|
|
33
|
+
如果 npm package 检查时报 npm cache 权限错误,可以修复 cache owner,或在本地检查时使用可写 cache:
|
|
34
34
|
|
|
35
35
|
```bash
|
|
36
36
|
sudo chown -R "$(id -u):$(id -g)" ~/.npm
|
|
@@ -40,11 +40,11 @@ npm_config_cache=/tmp/revela-npm-cache bun run smoke:mcp-pack
|
|
|
40
40
|
通过 Codex Git marketplace 安装 Revela:
|
|
41
41
|
|
|
42
42
|
```bash
|
|
43
|
-
codex plugin marketplace add https://github.com/cyber-dash-tech/revela --ref v0.18.
|
|
43
|
+
codex plugin marketplace add https://github.com/cyber-dash-tech/revela --ref v0.18.15
|
|
44
44
|
codex plugin add revela@revela
|
|
45
45
|
```
|
|
46
46
|
|
|
47
|
-
Git marketplace 安装的是 Codex plugin 壳、skills、hooks 和 MCP 配置。Codex
|
|
47
|
+
Git marketplace 安装的是 Codex plugin 壳、skills、hooks 和 MCP 配置。Codex 启动 Revela MCP server 时,会从已安装的 plugin cache 中运行 `bun ./mcp/revela-server.ts`,并解析该 marketplace checkout 中的 runtime。
|
|
48
48
|
|
|
49
49
|
不需要在 Codex marketplace clone 里运行 `bun install`。
|
|
50
50
|
|
|
@@ -52,7 +52,7 @@ Git marketplace 安装的是 Codex plugin 壳、skills、hooks 和 MCP 配置。
|
|
|
52
52
|
|
|
53
53
|
Codex 使用九个 Revela skills:`revela` 路由下一步 workflow,`revela-spec` 产出根目录 `spec.md`,`revela-helper` 查看状态和 active design/domain,`revela-design` 创建、验证、激活 custom design,`revela-domain` 创建、验证、激活 custom narrative domain,`revela-research` 调研本地与网络资料、保存到 `researches/`,并产出 design-aware `deck-plan.md` handoff;`revela-make-deck` 基于已有 plan 生成 `decks/*.html`,`revela-review` 打开 Review UI,`revela-export` 导出 PDF/PPTX/PNG。
|
|
54
54
|
|
|
55
|
-
如果要按发布路径做本地验证,运行 `bun run smoke:mcp-pack`。它会把当前 checkout 打成临时 npm tarball
|
|
55
|
+
如果要按发布路径做本地验证,运行 `bun run smoke:mcp-pack`。它会把当前 checkout 打成临时 npm tarball,解包后通过打包出的 Codex plugin launcher 路径启动 MCP server,不需要先发布到 registry。
|
|
56
56
|
|
|
57
57
|
#### Codex 升级
|
|
58
58
|
|
|
@@ -74,7 +74,7 @@ codex plugin marketplace upgrade revela
|
|
|
74
74
|
codex plugin add revela@revela
|
|
75
75
|
```
|
|
76
76
|
|
|
77
|
-
Git marketplace ref 和 `.mcp.json`
|
|
77
|
+
Git marketplace ref 和 `.mcp.json` plugin launcher 属于同一个 release artifact。升级后开启一个新的 Codex thread,让 Codex 重新加载 Revela skills、MCP tools、hooks 和 runtime launcher。
|
|
78
78
|
|
|
79
79
|
## 内置设计
|
|
80
80
|
|
|
@@ -108,7 +108,7 @@ Revela 内置多个 deck design:
|
|
|
108
108
|
|
|
109
109
|
在 Codex 中切换 design,可以这样问:
|
|
110
110
|
|
|
111
|
-
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.
|
|
111
|
+
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.18.15/skills/revela/SKILL.md),use summit as design.
|
|
112
112
|
|
|
113
113
|
在 Codex 中,可以直接让 Revela 列出或切换 design;生成 deck 时会使用 active design。
|
|
114
114
|
|
|
@@ -116,7 +116,7 @@ Revela 内置多个 deck design:
|
|
|
116
116
|
|
|
117
117
|
Domain 提供特定场景的沟通 guidance,例如 consulting、product 或 investor communication。需要让 Revela 按具体沟通场景调整 deck framing 时使用。
|
|
118
118
|
|
|
119
|
-
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.
|
|
119
|
+
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.18.15/skills/revela/SKILL.md),列出 available domains。
|
|
120
120
|
|
|
121
121
|
在 Codex 中,可以直接让 Revela 列出或切换 domain;active domain 会用于 init、research 和 deck planning 阶段的 framing。
|
|
122
122
|
|
|
@@ -126,57 +126,57 @@ Domain 提供特定场景的沟通 guidance,例如 consulting、product 或 in
|
|
|
126
126
|
|
|
127
127
|
1. 先选择 domain,让 Revela 按你的沟通场景 framing 受众、决策、风险和潜在质疑。
|
|
128
128
|
|
|
129
|
-
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.
|
|
129
|
+
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.18.15/skills/revela/SKILL.md),use consulting as domain.
|
|
130
130
|
|
|
131
131
|
2. 再选择 design,让后续生成的 deck 使用指定视觉风格。
|
|
132
132
|
|
|
133
|
-
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.
|
|
133
|
+
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.18.15/skills/revela/SKILL.md),use summit as design.
|
|
134
134
|
|
|
135
135
|
3. 如果需要不同的视觉方向,可以创建一个自定义 design。
|
|
136
136
|
|
|
137
|
-
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.
|
|
137
|
+
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.18.15/skills/revela/SKILL.md),创建一个名为 neon-finance 的新 design:金融仪表盘风格,深色界面、精密网格、亮绿色重点色。
|
|
138
138
|
|
|
139
139
|
Revela 可能会继续询问参考图、风格约束或禁忌项,然后创建并校验 design。创建完成后再切换使用:
|
|
140
140
|
|
|
141
|
-
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.
|
|
141
|
+
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.18.15/skills/revela/SKILL.md),使用 neon-finance 作为 design。
|
|
142
142
|
|
|
143
143
|
4. 初始化本地 material intake。Init 会扫描、抽取并审阅 workspace source;它不会创建 Narrative Vault。
|
|
144
144
|
|
|
145
|
-
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.
|
|
145
|
+
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.18.15/skills/revela/SKILL.md),帮我 init 这个 workspace,先读本地材料。
|
|
146
146
|
|
|
147
147
|
5. 针对 deck 所需输入做 research,并保存带来源的 findings。
|
|
148
148
|
|
|
149
|
-
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.
|
|
149
|
+
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.18.15/skills/revela/SKILL.md),research 这个 deck 需要的公开证据、案例和 source。
|
|
150
150
|
|
|
151
151
|
6. 先创建或更新 deck plan,明确 slide 顺序、章节结构、source links、unresolved inputs、source limitations 和 visual intent,再生成 HTML。
|
|
152
152
|
|
|
153
|
-
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.
|
|
153
|
+
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.18.15/skills/revela/SKILL.md),生成 HTML 前先 create or update deck plan。
|
|
154
154
|
|
|
155
155
|
7. 基于当前 deck plan 生成 HTML deck。
|
|
156
156
|
|
|
157
|
-
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.
|
|
157
|
+
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.18.15/skills/revela/SKILL.md),基于当前 deck plan make deck。
|
|
158
158
|
|
|
159
159
|
8. Review 生成后的 deck,检查 Artifact QA,并做定向修改。
|
|
160
160
|
|
|
161
|
-
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.
|
|
161
|
+
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.18.15/skills/revela/SKILL.md),review 生成好的 deck。
|
|
162
162
|
|
|
163
163
|
9. QA 通过后导出 PDF。
|
|
164
164
|
|
|
165
|
-
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.
|
|
165
|
+
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.18.15/skills/revela/SKILL.md),把 deck export 成 PDF。
|
|
166
166
|
|
|
167
167
|
10. QA 通过后导出可编辑 PPTX。
|
|
168
168
|
|
|
169
|
-
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.
|
|
169
|
+
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.18.15/skills/revela/SKILL.md),把 deck export 成 PPTX。
|
|
170
170
|
|
|
171
171
|
11. QA 通过后导出每页 PNG。
|
|
172
172
|
|
|
173
|
-
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.
|
|
173
|
+
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.18.15/skills/revela/SKILL.md),把 deck export 成 PNG。
|
|
174
174
|
|
|
175
175
|
## Review Deck
|
|
176
176
|
|
|
177
177
|
生成 HTML deck 后可以进入 Review:
|
|
178
178
|
|
|
179
|
-
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.
|
|
179
|
+
> [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.18.15/skills/revela/SKILL.md),review 生成好的 deck。
|
|
180
180
|
|
|
181
181
|
<p align="center">
|
|
182
182
|
<img src="assets/img/review-ui.png" alt="Revela Review UI showing @ref comments and deck QA" width="900" />
|
package/bin/revela.ts
CHANGED
|
File without changes
|
package/lib/refine/server.ts
CHANGED
|
@@ -22,6 +22,10 @@ import { annotateVisualEditTargets, applyVisualTargetChanges, type VisualEditTar
|
|
|
22
22
|
const TOKEN_BYTES = 24
|
|
23
23
|
const SESSION_TTL_MS = 2 * 60 * 60 * 1000
|
|
24
24
|
const IDLE_STOP_MS = 30 * 60 * 1000
|
|
25
|
+
const REVIEW_UI_ASSET_ROUTE = "/__revela_ui_asset"
|
|
26
|
+
const REVIEW_UI_ASSETS = new Map<string, string>([
|
|
27
|
+
["/logo-wordmark.png", resolve(dirname(fileURLToPath(import.meta.url)), "../../assets/img/logo-wordmark.png")],
|
|
28
|
+
])
|
|
25
29
|
export const REVIEW_REF_LABEL_MAX_DISPLAY_CHARS = 32
|
|
26
30
|
export const LIVE_EDITOR_IDLE_MS = 10 * 1000
|
|
27
31
|
|
|
@@ -199,6 +203,10 @@ async function handleRequest(req: Request): Promise<Response> {
|
|
|
199
203
|
|
|
200
204
|
if (url.pathname === "/health") return textResponse("ok")
|
|
201
205
|
|
|
206
|
+
if (url.pathname.startsWith(`${REVIEW_UI_ASSET_ROUTE}/`) && (req.method === "GET" || req.method === "HEAD")) {
|
|
207
|
+
return handleReviewUiAsset(url.pathname, req.method)
|
|
208
|
+
}
|
|
209
|
+
|
|
202
210
|
if (url.pathname === "/refine" && req.method === "GET") {
|
|
203
211
|
const session = validateSession(url.searchParams.get("token"))
|
|
204
212
|
if (!session.ok) return session.response
|
|
@@ -608,6 +616,21 @@ function handleAsset(session: EditSession, id: string | null, method: string): R
|
|
|
608
616
|
return new Response(new Uint8Array(readFileSync(asset.absoluteFile)), { status: 200, headers })
|
|
609
617
|
}
|
|
610
618
|
|
|
619
|
+
function handleReviewUiAsset(pathname: string, method: string): Response {
|
|
620
|
+
const assetPath = pathname.slice(REVIEW_UI_ASSET_ROUTE.length)
|
|
621
|
+
const absoluteFile = REVIEW_UI_ASSETS.get(assetPath)
|
|
622
|
+
if (!absoluteFile || !existsSync(absoluteFile) || !statSync(absoluteFile).isFile()) {
|
|
623
|
+
return textResponse("Asset not found", 404)
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
const headers = {
|
|
627
|
+
"content-type": mimeTypeForPath(absoluteFile),
|
|
628
|
+
"cache-control": "no-store, max-age=0",
|
|
629
|
+
}
|
|
630
|
+
if (method === "HEAD") return new Response(null, { status: 200, headers })
|
|
631
|
+
return new Response(new Uint8Array(readFileSync(absoluteFile)), { status: 200, headers })
|
|
632
|
+
}
|
|
633
|
+
|
|
611
634
|
function rewriteLocalAssetRefs(content: string, input: { session: EditSession; sourceFile: string; contentType: "html" | "css" }): string {
|
|
612
635
|
const baseDir = dirname(input.sourceFile)
|
|
613
636
|
let rewritten = rewriteCssUrls(content, input.session, baseDir)
|
|
@@ -1367,7 +1390,7 @@ export function renderRefineShell(token: string, defaultMode: RefineMode = "edit
|
|
|
1367
1390
|
body { margin: 0; background: #f8fafc; color: #111827; height: 100vh; overflow: hidden; }
|
|
1368
1391
|
body.resizing { cursor: col-resize; user-select: none; }
|
|
1369
1392
|
body.resizing iframe, body.resizing .hitbox { pointer-events: none; }
|
|
1370
|
-
.app { --editor-width:
|
|
1393
|
+
.app { --editor-width: 620px; position: relative; display: grid; grid-template-columns: minmax(0, 1fr) var(--editor-width); height: 100vh; }
|
|
1371
1394
|
.preview { position: relative; min-width: 0; background: #eef2f7; }
|
|
1372
1395
|
.resize-handle { position: absolute; top: 0; bottom: 0; right: calc(var(--editor-width) - 7px); width: 14px; z-index: 5; cursor: col-resize; background: transparent; }
|
|
1373
1396
|
.resize-handle::before { content: ""; position: absolute; left: 50%; top: 50%; width: 4px; height: 44px; border-radius: 999px; transform: translate(-50%, -50%); background: rgba(148,163,184,.34); box-shadow: 0 1px 2px rgba(15,23,42,.06); transition: background .16s ease, height .16s ease, box-shadow .16s ease; }
|
|
@@ -1392,7 +1415,8 @@ export function renderRefineShell(token: string, defaultMode: RefineMode = "edit
|
|
|
1392
1415
|
aside { position: relative; display: flex; flex-direction: column; gap: 16px; padding: 18px; background: #ffffff; overflow: hidden; border-left: 1px solid #e2e8f0; box-shadow: -10px 0 28px rgba(15,23,42,.06); }
|
|
1393
1416
|
aside button, aside input, aside select, aside textarea, aside .comment-editor { font-family: inherit; }
|
|
1394
1417
|
h1 { margin: 0; font-size: 17px; line-height: 1.2; letter-spacing: 0; color: #0f172a; }
|
|
1395
|
-
.
|
|
1418
|
+
.review-brand { display: inline-flex; align-items: center; min-width: 0; max-width: 100%; }
|
|
1419
|
+
.wordmark-logo { display: block; width: auto; height: 30px; max-width: min(210px, 82%); object-fit: contain; flex: 0 1 auto; }
|
|
1396
1420
|
.panel { display: flex; flex-direction: column; gap: 10px; }
|
|
1397
1421
|
.tabs { display: flex; gap: 4px; padding: 3px; border: 1px solid #e2e8f0; border-radius: 999px; background: #f8fafc; }
|
|
1398
1422
|
.tab { width: auto; min-width: 112px; padding: 8px 16px; border: 1px solid transparent; border-radius: 999px; background: transparent; color: #64748b; box-shadow: none; font-weight: 750; }
|
|
@@ -1558,7 +1582,7 @@ export function renderRefineShell(token: string, defaultMode: RefineMode = "edit
|
|
|
1558
1582
|
<div id="resizeHandle" class="resize-handle" role="separator" aria-label="Resize editor panel" aria-orientation="vertical" title="Drag to resize editor. Double-click to reset."></div>
|
|
1559
1583
|
<aside>
|
|
1560
1584
|
<div>
|
|
1561
|
-
<h1><
|
|
1585
|
+
<h1 class="review-brand" aria-label="Revela Review"><img class="wordmark-logo" src="${REVIEW_UI_ASSET_ROUTE}/logo-wordmark.png" alt="Revela" /></h1>
|
|
1562
1586
|
</div>
|
|
1563
1587
|
<div id="selectionSummary" class="selection-summary sr-only" aria-live="polite"><strong>Selection</strong><span>No references selected.</span><div id="selectionChips" class="selection-chips"></div></div>
|
|
1564
1588
|
<div class="tabs" role="tablist" aria-label="Review mode">
|
|
@@ -1629,7 +1653,7 @@ export function renderRefineShell(token: string, defaultMode: RefineMode = "edit
|
|
|
1629
1653
|
const codexReview = reviewSurface === 'codex';
|
|
1630
1654
|
const COMMENT_STALE_MS = 60000;
|
|
1631
1655
|
const EDITOR_WIDTH_KEY = 'revela-edit-editor-width';
|
|
1632
|
-
const DEFAULT_EDITOR_WIDTH =
|
|
1656
|
+
const DEFAULT_EDITOR_WIDTH = 620;
|
|
1633
1657
|
const MIN_EDITOR_WIDTH = 320;
|
|
1634
1658
|
const MAX_EDITOR_WIDTH = 620;
|
|
1635
1659
|
const REFERENCE_COLORS = [
|
package/package.json
CHANGED
package/plugins/revela/.mcp.json
CHANGED
|
@@ -395,7 +395,7 @@ async function handle(req: JsonRpcRequest): Promise<any | undefined> {
|
|
|
395
395
|
return result(req.id, {
|
|
396
396
|
protocolVersion: req.params?.protocolVersion || "2024-11-05",
|
|
397
397
|
capabilities: { tools: {} },
|
|
398
|
-
serverInfo: { name: "revela", version: "0.
|
|
398
|
+
serverInfo: { name: "revela", version: "0.18.15" },
|
|
399
399
|
})
|
|
400
400
|
}
|
|
401
401
|
if (req.method === "tools/list") {
|