@zihanw/pi-forge 0.5.1 → 0.5.3
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/CHANGELOG.md +26 -0
- package/README.md +24 -20
- package/README.zh-CN.md +24 -20
- package/dist/agent-profile.js +5 -5
- package/dist/agent-profile.js.map +1 -1
- package/dist/codecs/agent-profile.js +4 -4
- package/dist/codecs/agent-profile.js.map +1 -1
- package/dist/codecs/prompt-stack.d.ts +2 -2
- package/dist/codecs/prompt-stack.d.ts.map +1 -1
- package/dist/codecs/prompt-stack.js +37 -20
- package/dist/codecs/prompt-stack.js.map +1 -1
- package/dist/compiler.d.ts.map +1 -1
- package/dist/compiler.js +81 -0
- package/dist/compiler.js.map +1 -1
- package/dist/lifecycle.d.ts.map +1 -1
- package/dist/lifecycle.js +17 -2
- package/dist/lifecycle.js.map +1 -1
- package/dist/preset-command.js +13 -13
- package/dist/preset-command.js.map +1 -1
- package/dist/preview.d.ts.map +1 -1
- package/dist/preview.js +27 -7
- package/dist/preview.js.map +1 -1
- package/dist/profile-command.js +6 -6
- package/dist/profile-command.js.map +1 -1
- package/dist/profile-service.js +4 -4
- package/dist/profile-service.js.map +1 -1
- package/dist/regex.d.ts +12 -0
- package/dist/regex.d.ts.map +1 -1
- package/dist/regex.js +81 -5
- package/dist/regex.js.map +1 -1
- package/dist/repositories/prompt-stack.js +8 -8
- package/dist/repositories/prompt-stack.js.map +1 -1
- package/dist/runtime/profile-runtime.js +3 -3
- package/dist/runtime/profile-runtime.js.map +1 -1
- package/dist/runtime/prompt-stack-runtime.js +1 -1
- package/dist/runtime/prompt-stack-runtime.js.map +1 -1
- package/dist/runtime/tool-policy-runtime.d.ts.map +1 -1
- package/dist/runtime/tool-policy-runtime.js +16 -4
- package/dist/runtime/tool-policy-runtime.js.map +1 -1
- package/dist/runtime/web-editor-runtime.js +7 -7
- package/dist/runtime/web-editor-runtime.js.map +1 -1
- package/dist/subagent-host.js +4 -4
- package/dist/subagent-host.js.map +1 -1
- package/dist/types.d.ts +17 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/web-editor/client-script.generated.d.ts.map +1 -1
- package/dist/web-editor/client-script.generated.js +1 -1
- package/dist/web-editor/client-script.generated.js.map +1 -1
- package/dist/web-editor/client-styles.generated.d.ts.map +1 -1
- package/dist/web-editor/client-styles.generated.js +1 -1
- package/dist/web-editor/client-styles.generated.js.map +1 -1
- package/dist/web-editor/page.d.ts +1 -1
- package/dist/web-editor/page.d.ts.map +1 -1
- package/dist/web-editor/page.js +2 -2
- package/dist/web-editor/page.js.map +1 -1
- package/dist/web-editor/server.js +58 -5
- package/dist/web-editor/server.js.map +1 -1
- package/dist/web-editor/styles.d.ts.map +1 -1
- package/dist/web-editor/styles.js +26 -1
- package/dist/web-editor/styles.js.map +1 -1
- package/dist/web-editor/types.d.ts +18 -1
- package/dist/web-editor/types.d.ts.map +1 -1
- package/dist/web-host.d.ts +5 -3
- package/dist/web-host.d.ts.map +1 -1
- package/dist/web-host.js +114 -26
- package/dist/web-host.js.map +1 -1
- package/docs/README.md +5 -5
- package/docs/concepts/prompt-stacks.md +19 -15
- package/docs/design/architecture-0.5.md +10 -0
- package/docs/development/roadmap.md +16 -0
- package/docs/getting-started.md +1 -1
- package/docs/guides/use-cases.md +4 -2
- package/docs/guides/web-editor.md +13 -8
- package/docs/reference/configuration.md +4 -1
- package/docs/reference/features.md +5 -0
- package/docs/reference/stack-schema.md +58 -1
- package/docs/zh-CN/README.md +4 -4
- package/docs/zh-CN/concepts/prompt-stacks.md +16 -10
- package/docs/zh-CN/guides/web-editor.md +11 -6
- package/examples/custom-system-status-extension/README.md +6 -6
- package/examples/custom-system-status-extension/index.ts +15 -8
- package/examples/fake-assistant-direct-output-prompt-stack.json +48 -0
- package/examples/hack-prompt-stack.json +118 -0
- package/examples/minimal-prompt-stack.json +40 -0
- package/package.json +2 -2
- package/examples/image-reader-prompt-stack.json +0 -114
- package/examples/reviewer-prompt-stack.json +0 -104
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,32 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
In 0.x development, breaking changes may occur in minor releases and will be explicitly noted.
|
|
8
8
|
|
|
9
|
+
## [0.5.3] - 2026-09-01
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
|
|
13
|
+
- **Preset and Stack terminology.** The complete user-facing resource is now a **Preset**, while **Stack** means its ordered Block/Slot composition. The former whole-resource Stack settings tab is now **Advanced**. English and Chinese editor labels, commands, diagnostics, profiles, documentation, and examples use the same hierarchy.
|
|
14
|
+
- This patch intentionally keeps compatibility identifiers unchanged: `.pi/forge/prompt-stacks/`, `"pi-forge.prompt-stack"`, profile field `promptStack`, `/api/stacks`, wire contracts, and internal `PromptStack` type names do not migrate.
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
- Preview now recovers the pre-policy session tool baseline when captured prompt options were already filtered by the active Preset. Previewing another draft therefore restores its selected tool names, fills missing tool text from registered descriptions, and rebuilds the matching tool guidelines instead of showing empty or stale tool context.
|
|
19
|
+
|
|
20
|
+
## [0.5.2] - 2026-08-28
|
|
21
|
+
|
|
22
|
+
### Added
|
|
23
|
+
|
|
24
|
+
- **Optional consecutive-role message merge.** Stacks can set `context.mergeConsecutiveRoles: true` (plus an optional `context.mergeSeparator`, default a blank line) to compile runs of consecutive stack items that share the same declared role into a single provider message. Only stack-authored `user`/`assistant` items merge: chat-history output (including the implicit history tail and a trailing user history message) and custom-role items are hard boundaries, and merging runs after compiled-stage regex so existing rule semantics are unchanged. Preview reflects the merged layout and attributes merged messages to their source items ("A + B"). The web editor's Stack tab exposes both options.
|
|
25
|
+
- **System-position validation warning.** Stack validation now warns when an enabled `system` item appears after enabled non-system items, since item position across the system/message channels has no effect on compilation. Roles are never silently converted; the warning suggests a user-role item for in-conversation injection.
|
|
26
|
+
- **Per-rule regex frequency.** Regex rules accept `frequency: "turn" | "request"` (default `"turn"`, preserving prior behavior). Outgoing message rules with `"request"` also run on tool-result follow-up requests over Pi's full natural context — closing the gap where tool output (for example an API key returned by a tool) reached the provider unfiltered until the next user turn. Wire-consistent by construction: each request is rebuilt from the transcript, so re-application never doubles. `finalize` rules and system-only targets ignore `frequency` with a validation warning. The regex editor exposes the field, and preview notes that follow-up applications are not represented.
|
|
27
|
+
- **Finalize rules can scrub stored tool results.** A `finalize` rule whose `roles` explicitly includes `"toolResult"` now rewrites stored tool-result messages at `message_end` — before the follow-up request, so the wire inherits the scrubbed transcript. Rules without `roles` keep assistant-only behavior; user messages are never finalized. The `hack-prompt-stack.json` example demonstrates the wire-plus-transcript pair (`redact-api-keys-outgoing` with `frequency: "request"` + `redact-api-keys-finalize`) for two illustrative token shapes; regex redaction is not an exhaustive secret scanner.
|
|
28
|
+
|
|
29
|
+
- **Web editor localization.** The editor interface is available in English and Chinese: a language selector in the top bar (Auto / English / 中文) writes `webEditor.locale` in the project config, `"auto"` (default) follows the browser language, and the initial page render honors `Accept-Language`. Navigation, the stack workspace chrome, all built-in stack/profile tabs, the preview/diff dock, and the generic settings form renderer are localized with instant switching; contributed settings tabs remain provider-owned and are not translated, and compiler/server-generated diagnostics stay in English.
|
|
30
|
+
|
|
31
|
+
### Fixed
|
|
32
|
+
|
|
33
|
+
- The settings status no longer compares localized placeholder text to decide when to show "Settings ready", so the contribution surface behaves identically in both interface languages.
|
|
34
|
+
|
|
9
35
|
## [0.5.1] - 2026-08-23
|
|
10
36
|
|
|
11
37
|
### Added
|
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|

|
|
6
6
|
|
|
7
|
-
**pi-forge** lets you customize how [Pi](https://github.com/badlogic/pi-mono) thinks and behaves.
|
|
7
|
+
**pi-forge** lets you customize how [Pi](https://github.com/badlogic/pi-mono) thinks and behaves. Presets bundle an ordered prompt Stack with tool/skill policy, Regex, and parameters; agent profiles apply a model, thinking level, and Preset as a reusable one-shot configuration.
|
|
8
8
|
|
|
9
9
|
Think of it as a character sheet and workbench for your AI agent.
|
|
10
10
|
|
|
@@ -12,11 +12,11 @@ Think of it as a character sheet and workbench for your AI agent.
|
|
|
12
12
|
|
|
13
13
|
- Compose Pi's system prompt, conversation history, tools, skills, project context, and runtime data as ordered blocks and slots.
|
|
14
14
|
- Switch between coding, reviewing, writing, roleplay, and translation modes with one command.
|
|
15
|
-
- Save and apply complete model/thinking/
|
|
16
|
-
- Enforce per-
|
|
17
|
-
- Use immutable
|
|
15
|
+
- Save and apply complete model/thinking/Preset profiles.
|
|
16
|
+
- Enforce per-Preset tool policy and filter model-visible skills.
|
|
17
|
+
- Use immutable Preset `parameters` with the deterministic forge-v1 template engine.
|
|
18
18
|
- Apply deterministic regex transforms to outgoing prompts or finalized assistant messages.
|
|
19
|
-
- Edit
|
|
19
|
+
- Edit Presets and profiles in a local browser UI and inspect the exact provider payload.
|
|
20
20
|
- Inspect prompt changes in the Preview dock: **Preview** compiles the live draft, **Draft diff** compares unsaved edits with disk, and **Run diff** compares recent provider turns. Git-style unified/split views include old/new line numbers, inline highlights, and changes-only/three-line/all-line context. Run metadata keeps chars/4 estimates separate from Pi's provider-reported prompt/cache usage and real cache-hit rate.
|
|
21
21
|
- Run an explicitly enabled profile as an experimental, approval-gated foreground subagent.
|
|
22
22
|
|
|
@@ -32,16 +32,16 @@ Restart Pi after installing or updating the extension. Pi supplies its SDK packa
|
|
|
32
32
|
|
|
33
33
|
## Five-minute start
|
|
34
34
|
|
|
35
|
-
### 1. Create a
|
|
35
|
+
### 1. Create a Preset
|
|
36
36
|
|
|
37
|
-
Create
|
|
37
|
+
Create the `default` Preset from [the default Pi mirror](examples/default-prompt-stack.json). The compatibility storage path remains `.pi/forge/prompt-stacks/default.json` in 0.5.3:
|
|
38
38
|
|
|
39
39
|
```bash
|
|
40
40
|
mkdir -p .pi/forge/prompt-stacks
|
|
41
41
|
cp examples/default-prompt-stack.json .pi/forge/prompt-stacks/default.json
|
|
42
42
|
```
|
|
43
43
|
|
|
44
|
-
If you installed from npm rather than cloning this repository, open `/preset ui` and create a new
|
|
44
|
+
If you installed from npm rather than cloning this repository, open `/preset ui` and create a new Preset; the editor starts with the same Pi-mirror layout.
|
|
45
45
|
|
|
46
46
|
Restart Pi or run:
|
|
47
47
|
|
|
@@ -50,7 +50,7 @@ Restart Pi or run:
|
|
|
50
50
|
/preset use default
|
|
51
51
|
```
|
|
52
52
|
|
|
53
|
-
`default.json` auto-activates when no
|
|
53
|
+
`default.json` auto-activates when no Preset or restored session selection takes precedence.
|
|
54
54
|
|
|
55
55
|
### 2. Open the visual editor
|
|
56
56
|
|
|
@@ -58,7 +58,7 @@ Restart Pi or run:
|
|
|
58
58
|
/preset ui
|
|
59
59
|
```
|
|
60
60
|
|
|
61
|
-
The local editor can create, fork, validate, preview, import, export, and delete
|
|
61
|
+
The local editor can create, fork, validate, preview, import, export, and delete Presets. Its **Agent profiles** view manages one-shot model/thinking/Preset bundles. Writes require a trusted project. When `@zihanw/pi-forge-subagents` is installed, its schema-driven editor appears on the separate top-level **Settings** surface and persists to the optional package's `subagents.json` files.
|
|
62
62
|
|
|
63
63
|
### 3. Save a profile
|
|
64
64
|
|
|
@@ -69,36 +69,40 @@ Configure Pi normally, then capture and reuse the current settings:
|
|
|
69
69
|
/profile use reviewer
|
|
70
70
|
```
|
|
71
71
|
|
|
72
|
-
A profile applies once. Later manual changes to the model or thinking level remain in effect until the profile is applied again; an active
|
|
72
|
+
A profile applies once. Later manual changes to the model or thinking level remain in effect until the profile is applied again; an active Preset continues enforcing its tool policy.
|
|
73
73
|
|
|
74
74
|
## The basic model
|
|
75
75
|
|
|
76
|
-
A
|
|
76
|
+
A **Preset** is one JSON document. Its ordered composition section is the **Stack**:
|
|
77
77
|
|
|
78
|
-
|
|
|
78
|
+
| Stack item | Purpose |
|
|
79
79
|
|---|---|
|
|
80
80
|
| **Block** | Static `system`, `user`, `assistant`, or hidden `custom` text |
|
|
81
81
|
| **Slot** | Runtime content such as tools, skills, project context, date/cwd, or chat history |
|
|
82
82
|
|
|
83
|
-
|
|
83
|
+
The Preset also carries system mode (`replace`, `append`, or `prepend`), tool/skill policy, Regex, parameters, and extension references. During compilation, pi-forge expands the Stack, compiles forge-v1 templates over `runtime.*` / `parameters.*` / `extensions.*`, enforces tool policy, filters its skill listing, and applies enabled Regex rules.
|
|
84
84
|
|
|
85
|
-
Agent profiles
|
|
85
|
+
Agent profiles reference an exact provider/model, thinking level, and Preset. They intentionally do not duplicate tool or skill policy—the referenced Preset remains the source of truth.
|
|
86
|
+
|
|
87
|
+
> **0.5.3 compatibility note.** User-facing terminology now follows Preset → Stack. Storage and schema identifiers remain backward-compatible in this patch: `.pi/forge/prompt-stacks/`, `"pi-forge.prompt-stack"`, profile field `promptStack`, `/api/stacks`, and internal `PromptStack` type names are unchanged. See the [roadmap](docs/development/roadmap.md) for the later storage/schema migration.
|
|
86
88
|
|
|
87
89
|
Start with these examples:
|
|
88
90
|
|
|
89
91
|
- [Default Pi mirror](examples/default-prompt-stack.json) keeps normal Pi behavior while making its sections movable.
|
|
90
|
-
- [
|
|
92
|
+
- [Minimal worker](examples/minimal-prompt-stack.json) borrows the DeepSeek Harness Minimal shape using stock Pi tools: the exact one-line persona, chat history, and only `bash` plus `edit`, without replicating DSH shell/editor semantics.
|
|
93
|
+
- [Regex hack pack](examples/hack-prompt-stack.json) demonstrates request-frequency outgoing redaction plus transcript-finalize scrubbing for two illustrative token shapes; it is not an exhaustive secret scanner.
|
|
91
94
|
- [Custom system-status extension](examples/custom-system-status-extension/README.md) registers a trusted macro and slot.
|
|
95
|
+
- [Fake-assistant direct-output experiment](examples/fake-assistant-direct-output-prompt-stack.json) appends ordinary assistant text after chat history to test a model-specific reasoning shortcut; support varies by model/provider/endpoint and must be verified with an A/B run.
|
|
92
96
|
|
|
93
97
|
## Common commands
|
|
94
98
|
|
|
95
99
|
| Command | Purpose |
|
|
96
100
|
|---|---|
|
|
97
101
|
| `/preset ui [stop\|restart]` | Open or manage the web editor |
|
|
98
|
-
| `/preset list` | List
|
|
99
|
-
| `/preset use <id\|none>` | Select or disable a
|
|
100
|
-
| `/preset preview [id]` | Compile a
|
|
101
|
-
| `/preset validate [id]` | Validate one
|
|
102
|
+
| `/preset list` | List Presets |
|
|
103
|
+
| `/preset use <id\|none>` | Select or disable a Preset |
|
|
104
|
+
| `/preset preview [id]` | Compile a Preset without sending a request |
|
|
105
|
+
| `/preset validate [id]` | Validate one Preset or all Presets |
|
|
102
106
|
| `/preset diagnostics` | Show runtime and extension diagnostics |
|
|
103
107
|
| `/profile list` | List and preflight profiles |
|
|
104
108
|
| `/profile save <id> [--overwrite]` | Capture the current runtime as a profile |
|
package/README.zh-CN.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|

|
|
6
6
|
|
|
7
|
-
**pi-forge** 让你自定义 [Pi](https://github.com/badlogic/pi-mono) 的思考方式和行为。
|
|
7
|
+
**pi-forge** 让你自定义 [Pi](https://github.com/badlogic/pi-mono) 的思考方式和行为。Preset(预设)把有序 prompt 堆栈与工具/skill 策略、Regex 和参数放在一起;Agent Profile 可以一次性应用模型、思考等级和预设。
|
|
8
8
|
|
|
9
9
|
可以把它理解为 AI agent 的角色卡和工作台。
|
|
10
10
|
|
|
@@ -12,11 +12,11 @@
|
|
|
12
12
|
|
|
13
13
|
- 把 system prompt、聊天历史、工具、skills、项目上下文和运行时数据组合成可排序的 block 和 slot。
|
|
14
14
|
- 用一条命令切换编程、审查、写作、角色扮演和翻译模式。
|
|
15
|
-
-
|
|
16
|
-
-
|
|
15
|
+
- 保存并应用完整的模型/思考等级/预设 Profile。
|
|
16
|
+
- 按预设严格限制工具,并过滤模型可见的 skills。
|
|
17
17
|
- 使用静态、轮次和会话变量,以及支持嵌套的模板宏。
|
|
18
18
|
- 对发给模型的 prompt 或最终 assistant 消息执行确定性 regex 转换。
|
|
19
|
-
- 在本地 Web 编辑器中管理
|
|
19
|
+
- 在本地 Web 编辑器中管理 Preset/Profile,并检查实际 provider payload。
|
|
20
20
|
- 用明确启用的 profile 运行实验性、需要审批的前台 subagent。
|
|
21
21
|
|
|
22
22
|
## 安装
|
|
@@ -31,16 +31,16 @@ pi install npm:@zihanw/pi-forge
|
|
|
31
31
|
|
|
32
32
|
## 五分钟上手
|
|
33
33
|
|
|
34
|
-
### 1.
|
|
34
|
+
### 1. 创建预设
|
|
35
35
|
|
|
36
|
-
从
|
|
36
|
+
从[默认 Pi mirror](examples/default-prompt-stack.json) 创建 `default` 预设。0.5.3 的兼容存储路径仍是 `.pi/forge/prompt-stacks/default.json`:
|
|
37
37
|
|
|
38
38
|
```bash
|
|
39
39
|
mkdir -p .pi/forge/prompt-stacks
|
|
40
40
|
cp examples/default-prompt-stack.json .pi/forge/prompt-stacks/default.json
|
|
41
41
|
```
|
|
42
42
|
|
|
43
|
-
如果你通过 npm 安装而不是 clone 仓库,请直接打开 `/preset ui`
|
|
43
|
+
如果你通过 npm 安装而不是 clone 仓库,请直接打开 `/preset ui` 新建预设;编辑器使用相同的 Pi mirror 布局。
|
|
44
44
|
|
|
45
45
|
重启 Pi,或执行:
|
|
46
46
|
|
|
@@ -49,7 +49,7 @@ cp examples/default-prompt-stack.json .pi/forge/prompt-stacks/default.json
|
|
|
49
49
|
/preset use default
|
|
50
50
|
```
|
|
51
51
|
|
|
52
|
-
|
|
52
|
+
没有其他预设或已恢复 session 选择优先时,`default.json` 会自动启用。
|
|
53
53
|
|
|
54
54
|
### 2. 打开可视化编辑器
|
|
55
55
|
|
|
@@ -57,7 +57,7 @@ cp examples/default-prompt-stack.json .pi/forge/prompt-stacks/default.json
|
|
|
57
57
|
/preset ui
|
|
58
58
|
```
|
|
59
59
|
|
|
60
|
-
本地编辑器可以新建、fork
|
|
60
|
+
本地编辑器可以新建、fork、校验、预览、导入、导出和删除预设,并可在新建/fork/导入时明确选择写入项目或用户全局存储。Preview dock 提供带旧/新行号和行内高亮的 unified/split diff,可只看变化行或保留三行/全部上下文;Run diff 会把 chars/4 估算与 Pi 返回的真实 prompt/cache usage、cache hit rate 明确分开。切换到 **Agent profiles** 可以浏览项目与全局 Profile、编辑和删除全局 Profile(通过显式 `global:<id>` 路由)。写入操作要求项目已被信任。Delegation 配置由可选包 `@zihanw/pi-forge-subagents` 的 `subagents.json` 文件管理,不在编辑器中。
|
|
61
61
|
|
|
62
62
|
### 3. 保存 profile
|
|
63
63
|
|
|
@@ -68,36 +68,40 @@ cp examples/default-prompt-stack.json .pi/forge/prompt-stacks/default.json
|
|
|
68
68
|
/profile use reviewer
|
|
69
69
|
```
|
|
70
70
|
|
|
71
|
-
Profile 只应用一次。之后手动修改模型或思考等级会被保留,直到再次应用
|
|
71
|
+
Profile 只应用一次。之后手动修改模型或思考等级会被保留,直到再次应用 Profile;当前预设的工具策略则会在启用期间持续执行。
|
|
72
72
|
|
|
73
73
|
## 基本概念
|
|
74
74
|
|
|
75
|
-
|
|
75
|
+
一份 **Preset(预设)**对应一个 JSON 文档,其中有序的上下文编排部分叫 **Stack(堆栈)**:
|
|
76
76
|
|
|
77
|
-
|
|
|
77
|
+
| 堆栈条目 | 用途 |
|
|
78
78
|
|---|---|
|
|
79
79
|
| **Block** | 固定的 `system`、`user`、`assistant` 或隐藏 `custom` 文本 |
|
|
80
|
-
| **Slot** | 工具、skills
|
|
80
|
+
| **Slot** | 工具、skills、项目上下文、参数、日期/cwd、聊天历史等运行时内容 |
|
|
81
81
|
|
|
82
|
-
|
|
82
|
+
预设还会携带 system mode(`replace`、`append` 或 `prepend`)、工具/skill 策略、Regex、参数和扩展引用。编译时,pi-forge 会展开堆栈、插入对话、执行工具策略、过滤自己渲染的 skill 列表,并应用已启用的 Regex 规则。
|
|
83
83
|
|
|
84
|
-
Agent
|
|
84
|
+
Agent Profile 引用精确 provider/model、思考等级和预设。它不会重复保存工具或 skill 策略;被引用的预设始终是唯一来源。项目 Profile 和预设可以遮蔽同 ID 的全局资源;需要精确选择时使用 `project:<id>` 或 `global:<id>`。
|
|
85
|
+
|
|
86
|
+
> **0.5.3 兼容说明。** 用户界面已经统一为“预设 → 堆栈”,但这个补丁版本不会偷偷迁移存储和 schema:`.pi/forge/prompt-stacks/`、`"pi-forge.prompt-stack"`、Profile 字段 `promptStack`、`/api/stacks` 和内部 `PromptStack` 类型名暂时保持不变。后续存储/schema 迁移见 [roadmap](docs/development/roadmap.md)。
|
|
85
87
|
|
|
86
88
|
推荐从这些示例开始:
|
|
87
89
|
|
|
88
90
|
- [默认 Pi mirror](examples/default-prompt-stack.json):保留 Pi 默认行为,同时让所有区域都可移动。
|
|
89
|
-
- [
|
|
91
|
+
- [最小 worker](examples/minimal-prompt-stack.json):用 Pi 自带工具借用 DeepSeek Harness Minimal 的结构——同一句 persona、聊天历史,以及仅 `bash` + `edit`;不复刻 DSH 的 shell/editor 语义。
|
|
92
|
+
- [Regex hack pack](examples/hack-prompt-stack.json):针对两种示例 token 形态展示 request 频率的出站脱敏和 transcript finalize 清理;它不是完整的密钥扫描器。
|
|
90
93
|
- [自定义 system-status extension](examples/custom-system-status-extension/README.md):注册可信 macro 和 slot。
|
|
94
|
+
- [Fake assistant 直接输出实验](examples/fake-assistant-direct-output-prompt-stack.json):在聊天历史后追加普通 assistant 文本,测试模型特定的思考捷径;是否有效取决于 model/provider/endpoint,使用前必须做同条件 A/B。
|
|
91
95
|
|
|
92
96
|
## 常用命令
|
|
93
97
|
|
|
94
98
|
| 命令 | 用途 |
|
|
95
99
|
|---|---|
|
|
96
100
|
| `/preset ui [stop\|restart]` | 打开或管理 Web 编辑器 |
|
|
97
|
-
| `/preset list` |
|
|
98
|
-
| `/preset use <id\|none>` |
|
|
99
|
-
| `/preset preview [id]` |
|
|
100
|
-
| `/preset validate [id]` |
|
|
101
|
+
| `/preset list` | 列出预设 |
|
|
102
|
+
| `/preset use <id\|none>` | 选择或禁用预设 |
|
|
103
|
+
| `/preset preview [id]` | 编译预设,但不发送请求 |
|
|
104
|
+
| `/preset validate [id]` | 校验一个或全部预设 |
|
|
101
105
|
| `/preset diagnostics` | 查看运行时和 extension 诊断 |
|
|
102
106
|
| `/profile list` | 列出并 preflight profile |
|
|
103
107
|
| `/profile save <id> [--overwrite]` | 把当前运行时保存为 profile |
|
package/dist/agent-profile.js
CHANGED
|
@@ -93,7 +93,7 @@ export function resolveAgentProfile(loaded, resources) {
|
|
|
93
93
|
diagnostics.push({
|
|
94
94
|
level: diagnostic.level,
|
|
95
95
|
field: "promptStack",
|
|
96
|
-
message: `
|
|
96
|
+
message: `Preset ${promptStack.stack.id}: ${diagnostic.message}`,
|
|
97
97
|
});
|
|
98
98
|
}
|
|
99
99
|
const allowedPatterns = promptStack.stack.tools?.allow?.filter((pattern) => pattern !== "*") ?? [];
|
|
@@ -104,7 +104,7 @@ export function resolveAgentProfile(loaded, resources) {
|
|
|
104
104
|
diagnostics.push({
|
|
105
105
|
level: "warning",
|
|
106
106
|
field: "promptStack",
|
|
107
|
-
message: `
|
|
107
|
+
message: `Preset ${promptStack.stack.id} allows tool pattern "${pattern}", but it matches no registered tools.`,
|
|
108
108
|
});
|
|
109
109
|
}
|
|
110
110
|
}
|
|
@@ -158,7 +158,7 @@ function resolveProfilePromptStack(loaded, promptStacks) {
|
|
|
158
158
|
diagnostics.push({
|
|
159
159
|
level: "error",
|
|
160
160
|
field: "promptStack",
|
|
161
|
-
message: `Global profile ${loaded.profile.id} cannot reference project
|
|
161
|
+
message: `Global profile ${loaded.profile.id} cannot reference project preset ${parsed.selector.id}.`,
|
|
162
162
|
});
|
|
163
163
|
return { stack: undefined, diagnostics };
|
|
164
164
|
}
|
|
@@ -174,14 +174,14 @@ function resolveProfilePromptStack(loaded, promptStacks) {
|
|
|
174
174
|
diagnostics.push({
|
|
175
175
|
level: "error",
|
|
176
176
|
field: "promptStack",
|
|
177
|
-
message: `Unknown
|
|
177
|
+
message: `Unknown preset: ${reference}.${suggestion}`,
|
|
178
178
|
});
|
|
179
179
|
return { stack: undefined, diagnostics };
|
|
180
180
|
}
|
|
181
181
|
diagnostics.push({
|
|
182
182
|
level: "error",
|
|
183
183
|
field: "promptStack",
|
|
184
|
-
message: `
|
|
184
|
+
message: `Preset id is ambiguous: ${reference}`,
|
|
185
185
|
});
|
|
186
186
|
return { stack: undefined, diagnostics };
|
|
187
187
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-profile.js","sourceRoot":"","sources":["../src/agent-profile.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"agent-profile.js","sourceRoot":"","sources":["../src/agent-profile.ts"],"names":[],"mappings":"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"}
|
|
@@ -105,7 +105,7 @@ function normalizeThinkingLevel(raw, diagnostics) {
|
|
|
105
105
|
}
|
|
106
106
|
function normalizePromptStackReference(raw, diagnostics) {
|
|
107
107
|
if (!Object.prototype.hasOwnProperty.call(raw, "promptStack")) {
|
|
108
|
-
diagnostics.push({ level: "error", field: "promptStack", message: "promptStack is required and must be a
|
|
108
|
+
diagnostics.push({ level: "error", field: "promptStack", message: "Profile field promptStack is required and must be a preset id or null." });
|
|
109
109
|
return null;
|
|
110
110
|
}
|
|
111
111
|
if (raw.promptStack === null)
|
|
@@ -113,7 +113,7 @@ function normalizePromptStackReference(raw, diagnostics) {
|
|
|
113
113
|
const id = nonEmptyString(raw.promptStack);
|
|
114
114
|
if (id)
|
|
115
115
|
return id;
|
|
116
|
-
diagnostics.push({ level: "error", field: "promptStack", message: "promptStack must be a non-empty
|
|
116
|
+
diagnostics.push({ level: "error", field: "promptStack", message: "Profile field promptStack must be a non-empty preset id or null." });
|
|
117
117
|
return null;
|
|
118
118
|
}
|
|
119
119
|
function fallbackProfile(filePath) {
|
|
@@ -153,7 +153,7 @@ export function validateAgentProfile(profile) {
|
|
|
153
153
|
diagnostics.push({ level: "error", field: "thinkingLevel", message: `Unsupported thinkingLevel: ${String(profile.thinkingLevel)}` });
|
|
154
154
|
}
|
|
155
155
|
if (profile.promptStack !== null && !profile.promptStack.trim()) {
|
|
156
|
-
diagnostics.push({ level: "error", field: "promptStack", message: "promptStack must be a non-empty
|
|
156
|
+
diagnostics.push({ level: "error", field: "promptStack", message: "Profile field promptStack must be a non-empty preset id or null." });
|
|
157
157
|
}
|
|
158
158
|
return diagnostics;
|
|
159
159
|
}
|
|
@@ -168,7 +168,7 @@ export function validateAgentProfilePromptStackScope(profile, scope) {
|
|
|
168
168
|
return [{
|
|
169
169
|
level: "error",
|
|
170
170
|
field: "promptStack",
|
|
171
|
-
message: `Global profile ${profile.id} cannot reference project
|
|
171
|
+
message: `Global profile ${profile.id} cannot reference project preset ${parsed.selector.id}.`,
|
|
172
172
|
}];
|
|
173
173
|
}
|
|
174
174
|
return [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-profile.js","sourceRoot":"","sources":["../../src/codecs/agent-profile.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"agent-profile.js","sourceRoot":"","sources":["../../src/codecs/agent-profile.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { LoadedPromptStack, PromptStack, PromptStackDiagnostic } from "../types.ts";
|
|
2
2
|
export type PromptStackScope = "global" | "project";
|
|
3
3
|
/**
|
|
4
|
-
* Parse, normalize, and validate a
|
|
4
|
+
* Parse, normalize, and validate a preset from its serialized source.
|
|
5
5
|
* This is the single entry point for turning stack JSON text into a
|
|
6
6
|
* LoadedPromptStack; loaders only add file-system concerns on top.
|
|
7
7
|
*/
|
|
@@ -9,7 +9,7 @@ export declare function parsePromptStack(source: string, filePath: string, scope
|
|
|
9
9
|
/** Build a fail-closed LoadedPromptStack when the source cannot be read or parsed. */
|
|
10
10
|
export declare function createPromptStackFault(filePath: string, scope: PromptStackScope, message: string): LoadedPromptStack;
|
|
11
11
|
/**
|
|
12
|
-
* Single canonical serializer for
|
|
12
|
+
* Single canonical serializer for presets. Every writer (web host,
|
|
13
13
|
* repository, migration tooling) must go through this function so serialized
|
|
14
14
|
* output stays identical across all write paths.
|
|
15
15
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-stack.d.ts","sourceRoot":"","sources":["../../src/codecs/prompt-stack.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACX,iBAAiB,EAEjB,WAAW,EACX,qBAAqB,EAIrB,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,SAAS,CAAC;AAKpD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,iBAAiB,CAiC7G;AAcD,sFAAsF;AACtF,wBAAgB,sBAAsB,CACrC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,MAAM,GACb,iBAAiB,CAQnB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAE/D;AAuGD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,GAAG,qBAAqB,EAAE,
|
|
1
|
+
{"version":3,"file":"prompt-stack.d.ts","sourceRoot":"","sources":["../../src/codecs/prompt-stack.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACX,iBAAiB,EAEjB,WAAW,EACX,qBAAqB,EAIrB,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,SAAS,CAAC;AAKpD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,iBAAiB,CAiC7G;AAcD,sFAAsF;AACtF,wBAAgB,sBAAsB,CACrC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,MAAM,GACb,iBAAiB,CAQnB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAE/D;AAuGD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,GAAG,qBAAqB,EAAE,CA0E/E"}
|
|
@@ -6,7 +6,7 @@ import { SUPPORTED_SLOTS } from "../types.js";
|
|
|
6
6
|
const VALID_ROLES = new Set(["system", "user", "assistant", "custom"]);
|
|
7
7
|
const VALID_CHAT_HISTORY_TOOL_MODES = new Set(["keep", "drop"]);
|
|
8
8
|
/**
|
|
9
|
-
* Parse, normalize, and validate a
|
|
9
|
+
* Parse, normalize, and validate a preset from its serialized source.
|
|
10
10
|
* This is the single entry point for turning stack JSON text into a
|
|
11
11
|
* LoadedPromptStack; loaders only add file-system concerns on top.
|
|
12
12
|
*/
|
|
@@ -59,7 +59,7 @@ export function createPromptStackFault(filePath, scope, message) {
|
|
|
59
59
|
};
|
|
60
60
|
}
|
|
61
61
|
/**
|
|
62
|
-
* Single canonical serializer for
|
|
62
|
+
* Single canonical serializer for presets. Every writer (web host,
|
|
63
63
|
* repository, migration tooling) must go through this function so serialized
|
|
64
64
|
* output stays identical across all write paths.
|
|
65
65
|
*/
|
|
@@ -77,7 +77,7 @@ function fallbackStack(filePath) {
|
|
|
77
77
|
}
|
|
78
78
|
function normalizeStack(raw, filePath, diagnostics) {
|
|
79
79
|
if (!raw || typeof raw !== "object" || Array.isArray(raw)) {
|
|
80
|
-
diagnostics.push({ level: "error", message: "
|
|
80
|
+
diagnostics.push({ level: "error", message: "Preset root must be a JSON object." });
|
|
81
81
|
return fallbackStack(filePath);
|
|
82
82
|
}
|
|
83
83
|
const obj = raw;
|
|
@@ -86,7 +86,7 @@ function normalizeStack(raw, filePath, diagnostics) {
|
|
|
86
86
|
if (rawId && !isValidResourceId(rawId)) {
|
|
87
87
|
diagnostics.push({
|
|
88
88
|
level: "error",
|
|
89
|
-
message: `
|
|
89
|
+
message: `Preset id ${rawId} must start with a letter or number and contain only letters, numbers, dots, underscores, and hyphens; falling back to ${id}.`,
|
|
90
90
|
});
|
|
91
91
|
}
|
|
92
92
|
let schemaVersion = 1;
|
|
@@ -98,7 +98,7 @@ function normalizeStack(raw, filePath, diagnostics) {
|
|
|
98
98
|
}
|
|
99
99
|
const items = Array.isArray(obj.items) ? obj.items.map((item, index) => normalizeItem(item, index, diagnostics)) : [];
|
|
100
100
|
if (!Array.isArray(obj.items)) {
|
|
101
|
-
diagnostics.push({ level: "error", message: "
|
|
101
|
+
diagnostics.push({ level: "error", message: "Preset must contain an items array." });
|
|
102
102
|
}
|
|
103
103
|
if (isPlainObject(obj.state) && Object.keys(obj.state).length > 0) {
|
|
104
104
|
diagnostics.push({
|
|
@@ -162,7 +162,8 @@ export function validatePromptStack(stack) {
|
|
|
162
162
|
const ids = new Set();
|
|
163
163
|
let chatHistoryCount = 0;
|
|
164
164
|
if (!stack.id.trim())
|
|
165
|
-
diagnostics.push({ level: "error", message: "
|
|
165
|
+
diagnostics.push({ level: "error", message: "Preset id must not be empty." });
|
|
166
|
+
let seenNonSystemItem = false;
|
|
166
167
|
for (const item of stack.items) {
|
|
167
168
|
if (ids.has(item.id))
|
|
168
169
|
diagnostics.push({ level: "error", message: `Duplicate item id: ${item.id}`, itemId: item.id });
|
|
@@ -170,6 +171,20 @@ export function validatePromptStack(stack) {
|
|
|
170
171
|
if (item.role && !VALID_ROLES.has(item.role)) {
|
|
171
172
|
diagnostics.push({ level: "error", message: `Invalid role: ${item.role}`, itemId: item.id });
|
|
172
173
|
}
|
|
174
|
+
if (item.enabled !== false) {
|
|
175
|
+
if (item.role === "system") {
|
|
176
|
+
if (seenNonSystemItem) {
|
|
177
|
+
diagnostics.push({
|
|
178
|
+
level: "warning",
|
|
179
|
+
message: "System item appears after non-system items; item position across the system/message channels has no effect on compilation. Use a user-role item for in-conversation injection.",
|
|
180
|
+
itemId: item.id,
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
else if (item.role === "user" || item.role === "assistant" || item.role === "custom") {
|
|
185
|
+
seenNonSystemItem = true;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
173
188
|
if (item.kind === "slot") {
|
|
174
189
|
if (!SUPPORTED_SLOTS.has(item.slot)) {
|
|
175
190
|
diagnostics.push({ level: "warning", message: `Unsupported slot: ${item.slot}`, itemId: item.id });
|
|
@@ -218,16 +233,16 @@ function validateRawPromptStackShape(raw) {
|
|
|
218
233
|
if (!isPlainObject(raw))
|
|
219
234
|
return diagnostics;
|
|
220
235
|
if (typeof raw.id !== "string" || !raw.id.trim()) {
|
|
221
|
-
diagnostics.push({ level: "error", message: "
|
|
236
|
+
diagnostics.push({ level: "error", message: "Preset id must be a non-empty string." });
|
|
222
237
|
}
|
|
223
238
|
if (raw.type !== undefined && raw.type !== "pi-forge.prompt-stack") {
|
|
224
|
-
diagnostics.push({ level: "error", message: '
|
|
239
|
+
diagnostics.push({ level: "error", message: 'Preset type must be "pi-forge.prompt-stack" when provided by the legacy schema.' });
|
|
225
240
|
}
|
|
226
|
-
validateOptionalString(raw, "name", "
|
|
227
|
-
validateOptionalString(raw, "description", "
|
|
228
|
-
validateOptionalBoolean(raw, "autoActivate", "
|
|
241
|
+
validateOptionalString(raw, "name", "Preset name", diagnostics);
|
|
242
|
+
validateOptionalString(raw, "description", "Preset description", diagnostics);
|
|
243
|
+
validateOptionalBoolean(raw, "autoActivate", "Preset autoActivate", diagnostics);
|
|
229
244
|
if (raw.mode !== undefined && raw.mode !== "append" && raw.mode !== "prepend" && raw.mode !== "replace") {
|
|
230
|
-
diagnostics.push({ level: "error", message: '
|
|
245
|
+
diagnostics.push({ level: "error", message: 'Preset mode must be "append", "prepend", or "replace" when provided.' });
|
|
231
246
|
}
|
|
232
247
|
validateRawDefaults(raw.defaults, diagnostics);
|
|
233
248
|
validateRawContext(raw.context, diagnostics);
|
|
@@ -279,7 +294,7 @@ function validateRawDefaults(value, diagnostics) {
|
|
|
279
294
|
if (value === undefined)
|
|
280
295
|
return;
|
|
281
296
|
if (!isPlainObject(value)) {
|
|
282
|
-
diagnostics.push({ level: "error", message: "
|
|
297
|
+
diagnostics.push({ level: "error", message: "Preset defaults must be an object when provided." });
|
|
283
298
|
return;
|
|
284
299
|
}
|
|
285
300
|
validateOptionalBoolean(value, "syntheticMessagesVisible", "defaults.syntheticMessagesVisible", diagnostics);
|
|
@@ -291,41 +306,43 @@ function validateRawContext(value, diagnostics) {
|
|
|
291
306
|
if (value === undefined)
|
|
292
307
|
return;
|
|
293
308
|
if (!isPlainObject(value)) {
|
|
294
|
-
diagnostics.push({ level: "error", message: "
|
|
309
|
+
diagnostics.push({ level: "error", message: "Preset context must be an object when provided." });
|
|
295
310
|
return;
|
|
296
311
|
}
|
|
297
312
|
validateOptionalBoolean(value, "allowDuplicateChatHistory", "context.allowDuplicateChatHistory", diagnostics);
|
|
313
|
+
validateOptionalBoolean(value, "mergeConsecutiveRoles", "context.mergeConsecutiveRoles", diagnostics);
|
|
314
|
+
validateOptionalString(value, "mergeSeparator", "context.mergeSeparator", diagnostics);
|
|
298
315
|
}
|
|
299
316
|
function validateRawVariables(value, diagnostics) {
|
|
300
317
|
if (value === undefined)
|
|
301
318
|
return;
|
|
302
319
|
if (!isPlainObject(value)) {
|
|
303
|
-
diagnostics.push({ level: "error", message: "
|
|
320
|
+
diagnostics.push({ level: "error", message: "Preset variables must be an object when provided." });
|
|
304
321
|
return;
|
|
305
322
|
}
|
|
306
323
|
for (const [name, variable] of Object.entries(value)) {
|
|
307
324
|
if (typeof variable !== "string") {
|
|
308
|
-
diagnostics.push({ level: "error", message: `
|
|
325
|
+
diagnostics.push({ level: "error", message: `Preset variable ${name} must be a string.` });
|
|
309
326
|
}
|
|
310
327
|
}
|
|
311
328
|
}
|
|
312
329
|
function validateRawParameters(raw, diagnostics) {
|
|
313
330
|
const schemaVersion = raw.schemaVersion === 2 ? 2 : 1;
|
|
314
331
|
if (schemaVersion === 2 && raw.variables !== undefined) {
|
|
315
|
-
diagnostics.push({ level: "warning", message: "schemaVersion 2
|
|
332
|
+
diagnostics.push({ level: "warning", message: "schemaVersion 2 presets use parameters; variables is ignored." });
|
|
316
333
|
}
|
|
317
334
|
if (schemaVersion === 1 && raw.parameters !== undefined) {
|
|
318
|
-
diagnostics.push({ level: "warning", message: "schemaVersion 1
|
|
335
|
+
diagnostics.push({ level: "warning", message: "schemaVersion 1 presets use variables; parameters is ignored." });
|
|
319
336
|
}
|
|
320
337
|
if (raw.parameters === undefined)
|
|
321
338
|
return;
|
|
322
339
|
if (!isPlainObject(raw.parameters)) {
|
|
323
|
-
diagnostics.push({ level: "error", message: "
|
|
340
|
+
diagnostics.push({ level: "error", message: "Preset parameters must be an object when provided." });
|
|
324
341
|
return;
|
|
325
342
|
}
|
|
326
343
|
for (const [name, value] of Object.entries(raw.parameters)) {
|
|
327
344
|
if (!isPromptVariableValue(value)) {
|
|
328
|
-
diagnostics.push({ level: "error", message: `
|
|
345
|
+
diagnostics.push({ level: "error", message: `Preset parameter ${name} must be a JSON-compatible value.` });
|
|
329
346
|
}
|
|
330
347
|
}
|
|
331
348
|
}
|