@zihanw/pi-forge 0.3.0 → 0.3.2
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 +87 -2
- package/README.zh-CN.md +72 -2
- package/dist/compiler.d.ts +10 -0
- package/dist/compiler.d.ts.map +1 -0
- package/dist/compiler.js +490 -0
- package/dist/compiler.js.map +1 -0
- package/dist/extension-registry.d.ts +25 -0
- package/dist/extension-registry.d.ts.map +1 -0
- package/dist/extension-registry.js +6 -0
- package/dist/extension-registry.js.map +1 -0
- package/dist/forge-extensions.d.ts +28 -0
- package/dist/forge-extensions.d.ts.map +1 -0
- package/dist/forge-extensions.js +182 -0
- package/dist/forge-extensions.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +376 -0
- package/dist/index.js.map +1 -0
- package/dist/lifecycle.d.ts +14 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/lifecycle.js +139 -0
- package/dist/lifecycle.js.map +1 -0
- package/dist/loader.d.ts +8 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +345 -0
- package/dist/loader.js.map +1 -0
- package/dist/macro-engine.d.ts +23 -0
- package/dist/macro-engine.d.ts.map +1 -0
- package/dist/macro-engine.js +262 -0
- package/dist/macro-engine.js.map +1 -0
- package/dist/payload-capture.d.ts +15 -0
- package/dist/payload-capture.d.ts.map +1 -0
- package/dist/payload-capture.js +86 -0
- package/dist/payload-capture.js.map +1 -0
- package/dist/payload-command.d.ts +10 -0
- package/dist/payload-command.d.ts.map +1 -0
- package/dist/payload-command.js +112 -0
- package/dist/payload-command.js.map +1 -0
- package/dist/policy.d.ts +6 -0
- package/dist/policy.d.ts.map +1 -0
- package/dist/policy.js +38 -0
- package/dist/policy.js.map +1 -0
- package/dist/preset-command.d.ts +14 -0
- package/dist/preset-command.d.ts.map +1 -0
- package/dist/preset-command.js +232 -0
- package/dist/preset-command.js.map +1 -0
- package/dist/preview.d.ts +12 -0
- package/dist/preview.d.ts.map +1 -0
- package/dist/preview.js +179 -0
- package/dist/preview.js.map +1 -0
- package/dist/regex.d.ts +7 -0
- package/dist/regex.d.ts.map +1 -0
- package/dist/regex.js +432 -0
- package/dist/regex.js.map +1 -0
- package/dist/render-helpers.d.ts +44 -0
- package/dist/render-helpers.d.ts.map +1 -0
- package/dist/render-helpers.js +128 -0
- package/dist/render-helpers.js.map +1 -0
- package/dist/runtime-state.d.ts +26 -0
- package/dist/runtime-state.d.ts.map +1 -0
- package/dist/runtime-state.js +15 -0
- package/dist/runtime-state.js.map +1 -0
- package/dist/sillytavern-importer/items.d.ts +3 -0
- package/dist/sillytavern-importer/items.d.ts.map +1 -0
- package/dist/sillytavern-importer/items.js +88 -0
- package/dist/sillytavern-importer/items.js.map +1 -0
- package/dist/sillytavern-importer/macros.d.ts +15 -0
- package/dist/sillytavern-importer/macros.d.ts.map +1 -0
- package/dist/sillytavern-importer/macros.js +141 -0
- package/dist/sillytavern-importer/macros.js.map +1 -0
- package/dist/sillytavern-importer/prompt-order.d.ts +6 -0
- package/dist/sillytavern-importer/prompt-order.d.ts.map +1 -0
- package/dist/sillytavern-importer/prompt-order.js +38 -0
- package/dist/sillytavern-importer/prompt-order.js.map +1 -0
- package/dist/sillytavern-importer/regex.d.ts +3 -0
- package/dist/sillytavern-importer/regex.d.ts.map +1 -0
- package/dist/sillytavern-importer/regex.js +275 -0
- package/dist/sillytavern-importer/regex.js.map +1 -0
- package/dist/sillytavern-importer/report.d.ts +21 -0
- package/dist/sillytavern-importer/report.d.ts.map +1 -0
- package/dist/sillytavern-importer/report.js +166 -0
- package/dist/sillytavern-importer/report.js.map +1 -0
- package/dist/sillytavern-importer/types.d.ts +106 -0
- package/dist/sillytavern-importer/types.d.ts.map +1 -0
- package/dist/sillytavern-importer/types.js +2 -0
- package/dist/sillytavern-importer/types.js.map +1 -0
- package/dist/sillytavern-importer.d.ts +5 -0
- package/dist/sillytavern-importer.d.ts.map +1 -0
- package/dist/sillytavern-importer.js +117 -0
- package/dist/sillytavern-importer.js.map +1 -0
- package/dist/slot-renderers.d.ts +25 -0
- package/dist/slot-renderers.d.ts.map +1 -0
- package/dist/slot-renderers.js +334 -0
- package/dist/slot-renderers.js.map +1 -0
- package/dist/stack-migration.d.ts +29 -0
- package/dist/stack-migration.d.ts.map +1 -0
- package/dist/stack-migration.js +126 -0
- package/dist/stack-migration.js.map +1 -0
- package/dist/storage.d.ts +10 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +36 -0
- package/dist/storage.js.map +1 -0
- package/dist/types.d.ts +173 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/web-editor/index.d.ts +3 -0
- package/dist/web-editor/index.d.ts.map +1 -0
- package/dist/web-editor/index.js +2 -0
- package/dist/web-editor/index.js.map +1 -0
- package/dist/web-editor/page.d.ts +2 -0
- package/dist/web-editor/page.d.ts.map +1 -0
- package/dist/web-editor/page.js +3331 -0
- package/dist/web-editor/page.js.map +1 -0
- package/dist/web-editor/server.d.ts +4 -0
- package/dist/web-editor/server.d.ts.map +1 -0
- package/dist/web-editor/server.js +263 -0
- package/dist/web-editor/server.js.map +1 -0
- package/dist/web-editor/types.d.ts +125 -0
- package/dist/web-editor/types.d.ts.map +1 -0
- package/dist/web-editor/types.js +2 -0
- package/dist/web-editor/types.js.map +1 -0
- package/dist/web-host.d.ts +29 -0
- package/dist/web-host.d.ts.map +1 -0
- package/dist/web-host.js +174 -0
- package/dist/web-host.js.map +1 -0
- package/examples/custom-system-status-extension/README.md +85 -0
- package/examples/custom-system-status-extension/index.ts +136 -0
- package/examples/custom-system-status-extension/prompt-stack.json +39 -0
- package/examples/image-reader-prompt-stack.json +124 -0
- package/package.json +28 -2
- package/src/compiler.ts +2 -472
- package/src/extension-registry.ts +33 -0
- package/src/forge-extensions.ts +223 -0
- package/src/index.ts +208 -653
- package/src/lifecycle.ts +171 -0
- package/src/macro-engine.ts +358 -0
- package/src/payload-command.ts +138 -0
- package/src/preset-command.ts +280 -0
- package/src/preview.ts +226 -0
- package/src/render-helpers.ts +169 -0
- package/src/runtime-state.ts +40 -0
- package/src/sillytavern-importer/items.ts +98 -0
- package/src/sillytavern-importer/macros.ts +159 -0
- package/src/sillytavern-importer/prompt-order.ts +54 -0
- package/src/sillytavern-importer/regex.ts +270 -0
- package/src/sillytavern-importer/report.ts +202 -0
- package/src/sillytavern-importer/types.ts +120 -0
- package/src/sillytavern-importer.ts +55 -865
- package/src/slot-renderers.ts +414 -0
- package/src/storage.ts +17 -0
- package/src/types.ts +3 -14
- package/src/web-editor/page.ts +516 -30
- package/src/web-editor/server.ts +9 -4
- package/src/web-editor/types.ts +18 -4
- package/src/web-host.ts +16 -13
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-host.js","sourceRoot":"","sources":["../src/web-host.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Custom System Status Extension
|
|
2
|
+
|
|
3
|
+
This example shows how trusted pi-forge extension modules can register a custom macro and custom slot without importing `@zihanw/pi-forge` from a loose Pi extension file.
|
|
4
|
+
|
|
5
|
+
It registers:
|
|
6
|
+
|
|
7
|
+
- `{{cpuLoad}}` macro: one-line CPU load summary.
|
|
8
|
+
- `machine-status` slot: CPU load, OS load average, memory, and uptime snapshot.
|
|
9
|
+
|
|
10
|
+
The renderers are synchronous, so this example uses Node's OS load average and memory APIs. It is a rough machine-load signal, not an async sampled CPU-utilization profiler.
|
|
11
|
+
|
|
12
|
+
## Try It
|
|
13
|
+
|
|
14
|
+
Install or load pi-forge, then copy the extension module and stack into a trusted project:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
mkdir -p .pi/forge/extensions .pi/forge/prompt-stacks
|
|
18
|
+
cp examples/custom-system-status-extension/index.ts .pi/forge/extensions/system-status.ts
|
|
19
|
+
cp examples/custom-system-status-extension/prompt-stack.json .pi/forge/prompt-stacks/custom-system-status.json
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Start Pi, trust the project if prompted, then run:
|
|
23
|
+
|
|
24
|
+
```text
|
|
25
|
+
/preset reload
|
|
26
|
+
/preset use custom-system-status
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Use `/preset diagnostics` to confirm the extension file is listed under loaded pi-forge extensions.
|
|
30
|
+
|
|
31
|
+
## Where To Put The Extension
|
|
32
|
+
|
|
33
|
+
pi-forge loads trusted registration modules from a global location and the current project:
|
|
34
|
+
|
|
35
|
+
```text
|
|
36
|
+
~/.pi/forge/extensions/
|
|
37
|
+
.pi/forge/extensions/
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Use `~/.pi/forge/extensions/` for personal machine-wide macros and slots. Use `.pi/forge/extensions/` when the customization should travel with the project's prompt stacks.
|
|
41
|
+
|
|
42
|
+
Supported entries:
|
|
43
|
+
|
|
44
|
+
- `~/.pi/forge/extensions/system-status.ts`
|
|
45
|
+
- `.pi/forge/extensions/system-status.ts`
|
|
46
|
+
- `.pi/forge/extensions/system-status.js`
|
|
47
|
+
- `.pi/forge/extensions/system-status.mjs`
|
|
48
|
+
- `.pi/forge/extensions/system-status.cjs`
|
|
49
|
+
- `.pi/forge/extensions/system-status/index.ts`
|
|
50
|
+
- `.pi/forge/extensions/system-status/index.js`
|
|
51
|
+
|
|
52
|
+
Each module exports a default function or named `register` function:
|
|
53
|
+
|
|
54
|
+
```ts
|
|
55
|
+
export default function register(api) {
|
|
56
|
+
api.registerMacro({ name: "cpuLoad", render: () => "..." });
|
|
57
|
+
api.registerSlot({ name: "machine-status", render: () => "..." });
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
pi-forge passes the registration API into the function, tracks unregister callbacks, and unregisters previous definitions before reloading the folder. If the extension is not loaded, the stack can still be read, but `machine-status` will validate as an unsupported slot and `{{cpuLoad}}` will remain an unresolved macro.
|
|
62
|
+
|
|
63
|
+
Only use this folder for trusted code. These modules execute with normal local code permissions after the project is trusted.
|
|
64
|
+
|
|
65
|
+
## Stack Reference
|
|
66
|
+
|
|
67
|
+
The stack references the custom slot declaratively:
|
|
68
|
+
|
|
69
|
+
```json
|
|
70
|
+
{
|
|
71
|
+
"kind": "slot",
|
|
72
|
+
"id": "machine-status",
|
|
73
|
+
"enabled": true,
|
|
74
|
+
"role": "system",
|
|
75
|
+
"slot": "machine-status",
|
|
76
|
+
"options": {
|
|
77
|
+
"format": "plain",
|
|
78
|
+
"heading": "Runtime machine snapshot",
|
|
79
|
+
"includeMemory": true,
|
|
80
|
+
"includeUptime": true
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Only the extension file contains executable code. The prompt stack just selects the registered slot and passes options.
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { cpus, freemem, loadavg, totalmem, uptime } from "node:os";
|
|
2
|
+
|
|
3
|
+
interface ForgeRegistrationApi {
|
|
4
|
+
registerMacro(definition: {
|
|
5
|
+
name: string;
|
|
6
|
+
source?: string;
|
|
7
|
+
description?: string;
|
|
8
|
+
render: () => string;
|
|
9
|
+
}): () => void;
|
|
10
|
+
registerSlot(definition: {
|
|
11
|
+
name: string;
|
|
12
|
+
source?: string;
|
|
13
|
+
description?: string;
|
|
14
|
+
options?: Record<string, unknown>;
|
|
15
|
+
render: (ctx: {
|
|
16
|
+
options: Record<string, unknown>;
|
|
17
|
+
format: () => "xml" | "plain" | "json";
|
|
18
|
+
helpers: {
|
|
19
|
+
escapeXml(value: string): string;
|
|
20
|
+
plainBullet(label: string, value: string): string;
|
|
21
|
+
};
|
|
22
|
+
}) => string;
|
|
23
|
+
}): () => void;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
interface SystemStatusSnapshot {
|
|
27
|
+
logicalCores: number;
|
|
28
|
+
cpuModel: string;
|
|
29
|
+
load1: number;
|
|
30
|
+
load5: number;
|
|
31
|
+
load15: number;
|
|
32
|
+
normalizedLoad1: number;
|
|
33
|
+
freeMemoryMb: number;
|
|
34
|
+
totalMemoryMb: number;
|
|
35
|
+
usedMemoryPercent: number;
|
|
36
|
+
uptimeSeconds: number;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export default function registerSystemStatus(api: ForgeRegistrationApi): void {
|
|
40
|
+
api.registerMacro({
|
|
41
|
+
name: "cpuLoad",
|
|
42
|
+
source: "pi-forge-example-system-status",
|
|
43
|
+
description: "Current machine CPU load as normalized 1-minute OS load average.",
|
|
44
|
+
render: () => formatCpuLoad(readSystemStatus()),
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
api.registerSlot({
|
|
48
|
+
name: "machine-status",
|
|
49
|
+
source: "pi-forge-example-system-status",
|
|
50
|
+
description: "Current machine CPU, memory, and uptime snapshot.",
|
|
51
|
+
options: {
|
|
52
|
+
format: { type: "enum", values: ["plain", "xml"], default: "plain" },
|
|
53
|
+
heading: { type: "string", default: "Machine status" },
|
|
54
|
+
includeMemory: { type: "boolean", default: true },
|
|
55
|
+
includeUptime: { type: "boolean", default: true },
|
|
56
|
+
},
|
|
57
|
+
render: (ctx) => {
|
|
58
|
+
const snapshot = readSystemStatus();
|
|
59
|
+
const includeMemory = ctx.options.includeMemory !== false;
|
|
60
|
+
const includeUptime = ctx.options.includeUptime !== false;
|
|
61
|
+
const heading = typeof ctx.options.heading === "string" && ctx.options.heading.trim()
|
|
62
|
+
? ctx.options.heading.trim()
|
|
63
|
+
: "Machine status";
|
|
64
|
+
|
|
65
|
+
if (ctx.format() === "xml") {
|
|
66
|
+
const lines = [
|
|
67
|
+
"<machine_status>",
|
|
68
|
+
` <cpu logical_cores=\"${snapshot.logicalCores}\" normalized_load_1m=\"${snapshot.normalizedLoad1.toFixed(3)}\" model=\"${ctx.helpers.escapeXml(snapshot.cpuModel)}\">${ctx.helpers.escapeXml(formatCpuLoad(snapshot))}</cpu>`,
|
|
69
|
+
` <load_average one_minute=\"${snapshot.load1.toFixed(2)}\" five_minutes=\"${snapshot.load5.toFixed(2)}\" fifteen_minutes=\"${snapshot.load15.toFixed(2)}\" />`,
|
|
70
|
+
];
|
|
71
|
+
if (includeMemory) {
|
|
72
|
+
lines.push(` <memory used_percent=\"${snapshot.usedMemoryPercent.toFixed(1)}\" free_mb=\"${snapshot.freeMemoryMb}\" total_mb=\"${snapshot.totalMemoryMb}\" />`);
|
|
73
|
+
}
|
|
74
|
+
if (includeUptime) {
|
|
75
|
+
lines.push(` <uptime>${ctx.helpers.escapeXml(formatDuration(snapshot.uptimeSeconds))}</uptime>`);
|
|
76
|
+
}
|
|
77
|
+
lines.push("</machine_status>");
|
|
78
|
+
return lines.join("\n");
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
const lines = [
|
|
82
|
+
`${heading}:`,
|
|
83
|
+
ctx.helpers.plainBullet("CPU", `${snapshot.logicalCores} logical cores, ${snapshot.cpuModel}`),
|
|
84
|
+
ctx.helpers.plainBullet("CPU load", formatCpuLoad(snapshot)),
|
|
85
|
+
ctx.helpers.plainBullet("Load average", `${snapshot.load1.toFixed(2)} / ${snapshot.load5.toFixed(2)} / ${snapshot.load15.toFixed(2)} (1m/5m/15m)`),
|
|
86
|
+
];
|
|
87
|
+
if (includeMemory) {
|
|
88
|
+
lines.push(ctx.helpers.plainBullet("Memory", `${snapshot.usedMemoryPercent.toFixed(1)}% used (${snapshot.freeMemoryMb} MB free / ${snapshot.totalMemoryMb} MB total)`));
|
|
89
|
+
}
|
|
90
|
+
if (includeUptime) {
|
|
91
|
+
lines.push(ctx.helpers.plainBullet("Uptime", formatDuration(snapshot.uptimeSeconds)));
|
|
92
|
+
}
|
|
93
|
+
return lines.join("\n");
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
function readSystemStatus(): SystemStatusSnapshot {
|
|
99
|
+
const cores = cpus();
|
|
100
|
+
const logicalCores = Math.max(cores.length, 1);
|
|
101
|
+
const [load1 = 0, load5 = 0, load15 = 0] = loadavg();
|
|
102
|
+
const free = freemem();
|
|
103
|
+
const total = totalmem();
|
|
104
|
+
const freeMemoryMb = Math.round(free / 1024 / 1024);
|
|
105
|
+
const totalMemoryMb = Math.round(total / 1024 / 1024);
|
|
106
|
+
const usedMemoryPercent = total > 0 ? ((total - free) / total) * 100 : 0;
|
|
107
|
+
|
|
108
|
+
return {
|
|
109
|
+
logicalCores,
|
|
110
|
+
cpuModel: cores[0]?.model ?? "unknown",
|
|
111
|
+
load1,
|
|
112
|
+
load5,
|
|
113
|
+
load15,
|
|
114
|
+
normalizedLoad1: load1 / logicalCores,
|
|
115
|
+
freeMemoryMb,
|
|
116
|
+
totalMemoryMb,
|
|
117
|
+
usedMemoryPercent,
|
|
118
|
+
uptimeSeconds: uptime(),
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
function formatCpuLoad(snapshot: SystemStatusSnapshot): string {
|
|
123
|
+
const normalizedPercent = snapshot.normalizedLoad1 * 100;
|
|
124
|
+
return `${normalizedPercent.toFixed(1)}% normalized (${snapshot.load1.toFixed(2)} 1m load / ${snapshot.logicalCores} logical cores)`;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
function formatDuration(seconds: number): string {
|
|
128
|
+
const days = Math.floor(seconds / 86_400);
|
|
129
|
+
const hours = Math.floor((seconds % 86_400) / 3_600);
|
|
130
|
+
const minutes = Math.floor((seconds % 3_600) / 60);
|
|
131
|
+
const parts: string[] = [];
|
|
132
|
+
if (days > 0) parts.push(`${days}d`);
|
|
133
|
+
if (hours > 0 || parts.length > 0) parts.push(`${hours}h`);
|
|
134
|
+
parts.push(`${minutes}m`);
|
|
135
|
+
return parts.join(" ");
|
|
136
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"type": "pi-forge.prompt-stack",
|
|
4
|
+
"id": "custom-system-status",
|
|
5
|
+
"name": "Custom System Status",
|
|
6
|
+
"description": "Example stack that uses a trusted custom macro and custom slot registered from .pi/forge/extensions/system-status.ts.",
|
|
7
|
+
"mode": "append",
|
|
8
|
+
"items": [
|
|
9
|
+
{
|
|
10
|
+
"kind": "block",
|
|
11
|
+
"id": "cpu-load-macro",
|
|
12
|
+
"name": "CPU Load Macro",
|
|
13
|
+
"enabled": true,
|
|
14
|
+
"role": "system",
|
|
15
|
+
"content": "Current rough CPU load: {{cpuLoad}}"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"kind": "slot",
|
|
19
|
+
"id": "machine-status",
|
|
20
|
+
"name": "Machine Status Slot",
|
|
21
|
+
"enabled": true,
|
|
22
|
+
"role": "system",
|
|
23
|
+
"slot": "machine-status",
|
|
24
|
+
"options": {
|
|
25
|
+
"format": "plain",
|
|
26
|
+
"heading": "Runtime machine snapshot",
|
|
27
|
+
"includeMemory": true,
|
|
28
|
+
"includeUptime": true
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"kind": "slot",
|
|
33
|
+
"id": "chat-history",
|
|
34
|
+
"name": "Chat History",
|
|
35
|
+
"enabled": true,
|
|
36
|
+
"slot": "chat-history"
|
|
37
|
+
}
|
|
38
|
+
]
|
|
39
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"type": "pi-forge.prompt-stack",
|
|
4
|
+
"id": "image-reader",
|
|
5
|
+
"name": "Image Reader Subagent",
|
|
6
|
+
"description": "A vision-subagent prompt stack that converts images into detailed, neutral visual reports for a main agent that may not have vision access.",
|
|
7
|
+
"autoActivate": false,
|
|
8
|
+
"mode": "replace",
|
|
9
|
+
"defaults": {
|
|
10
|
+
"syntheticMessagesVisible": false,
|
|
11
|
+
"unresolvedMacroPolicy": "warn"
|
|
12
|
+
},
|
|
13
|
+
"context": {
|
|
14
|
+
"allowDuplicateChatHistory": false
|
|
15
|
+
},
|
|
16
|
+
"tools": {
|
|
17
|
+
"deny": ["bash", "edit", "write"]
|
|
18
|
+
},
|
|
19
|
+
"variables": {
|
|
20
|
+
"audience": "main agent",
|
|
21
|
+
"report_mode": "image-reader",
|
|
22
|
+
"detail_level": "exhaustive factual visual inventory",
|
|
23
|
+
"safety_scope": "include safety-relevant visual content neutrally without giving instructions for harmful acts"
|
|
24
|
+
},
|
|
25
|
+
"items": [
|
|
26
|
+
{
|
|
27
|
+
"kind": "block",
|
|
28
|
+
"id": "role",
|
|
29
|
+
"name": "Image Reader Role",
|
|
30
|
+
"enabled": true,
|
|
31
|
+
"role": "system",
|
|
32
|
+
"content": "{{setturnvar::active_preset::image-reader}}You are an image reader subagent. Your job is to inspect image inputs directly and produce a faithful visual report for the {{audience}}.\n\nUse this stack only when you can actually inspect the image. If no image is present, the image is inaccessible, or the current model cannot view images, say that directly and do not guess.\n\nPrimary objective: describe exactly what is visible in the image in detail. Treat the report as sensory evidence for another agent, not as advice, judgment, or creative writing."
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"kind": "block",
|
|
36
|
+
"id": "report-rules",
|
|
37
|
+
"name": "Visual Report Rules",
|
|
38
|
+
"enabled": true,
|
|
39
|
+
"role": "system",
|
|
40
|
+
"content": "Reporting rules:\n- Be concrete, literal, and complete. Include objects, people, text, layout, colors, lighting, camera angle, foreground/background, visible actions, and spatial relationships.\n- Separate direct observations from uncertainty. Use phrases like \"appears to\", \"possibly\", or \"unclear\" when the image does not support certainty.\n- Transcribe visible text exactly when legible. Preserve line breaks when they matter.\n- Do not identify private people or infer identity. Describe visible attributes only when relevant to the image.\n- Do not infer hidden intent, guilt, medical diagnosis, protected traits, or off-image facts.\n- Do not omit disturbing or safety-relevant visual content. If weapons, injuries, blood, drugs, self-harm indicators, hate symbols, nudity, sexual content, abuse, dangerous tools, or illegal activity are visible, describe what is visible neutrally.\n- Do not provide operational instructions, optimization, encouragement, or procedural guidance for harmful acts. Stay at visual-description level.\n- If the image contains graphic injury, sexual content, or other sensitive material, keep the wording clinically descriptive and avoid sensational detail beyond what the main agent needs to understand the image."
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"kind": "block",
|
|
44
|
+
"id": "macro-context",
|
|
45
|
+
"name": "Macro Context",
|
|
46
|
+
"enabled": true,
|
|
47
|
+
"role": "system",
|
|
48
|
+
"content": "{{ifeq::report_mode::image-reader::Report mode is active: {{upper::{{report_mode}}}}.::Report mode is not image-reader; state this mismatch before proceeding.}}\n{{ifvar::safety_scope::Safety scope: {{safety_scope}}.}}\n{{iftools::read::If the user references an image file path and direct vision input is unavailable, you may inspect only file metadata or surrounding text with read tools; do not pretend metadata is image vision.}}\n{{ifslot::variables::Runtime variables are available below for auditability.}}"
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"kind": "slot",
|
|
52
|
+
"id": "variables",
|
|
53
|
+
"name": "Image Reader Variables",
|
|
54
|
+
"enabled": true,
|
|
55
|
+
"role": "system",
|
|
56
|
+
"slot": "variables",
|
|
57
|
+
"options": {
|
|
58
|
+
"includeStatic": true,
|
|
59
|
+
"includeSession": true,
|
|
60
|
+
"includeTurn": true,
|
|
61
|
+
"format": "plain"
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"kind": "slot",
|
|
66
|
+
"id": "tools",
|
|
67
|
+
"name": "Available Read-Only Tools",
|
|
68
|
+
"enabled": true,
|
|
69
|
+
"role": "system",
|
|
70
|
+
"slot": "tools",
|
|
71
|
+
"options": {
|
|
72
|
+
"format": "plain",
|
|
73
|
+
"onlyWithSnippets": true
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"kind": "slot",
|
|
78
|
+
"id": "date-cwd",
|
|
79
|
+
"name": "Date and Working Directory",
|
|
80
|
+
"enabled": true,
|
|
81
|
+
"role": "system",
|
|
82
|
+
"slot": "date-cwd"
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"kind": "block",
|
|
86
|
+
"id": "history-open",
|
|
87
|
+
"name": "Open Prior Task Context",
|
|
88
|
+
"enabled": true,
|
|
89
|
+
"role": "user",
|
|
90
|
+
"content": "<prior_task_context>\nThe following prior messages are background for the image-reading request. Use them only to understand what the main agent needs from the image report."
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"kind": "slot",
|
|
94
|
+
"id": "chat-history",
|
|
95
|
+
"name": "Prior Context Without Current Request",
|
|
96
|
+
"enabled": true,
|
|
97
|
+
"slot": "chat-history",
|
|
98
|
+
"options": {
|
|
99
|
+
"includeLastUserMessage": false,
|
|
100
|
+
"stripAssistantThinking": true,
|
|
101
|
+
"includeSummaries": true,
|
|
102
|
+
"toolMode": "drop",
|
|
103
|
+
"maxMessages": 20,
|
|
104
|
+
"maxChars": 12000
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"kind": "block",
|
|
109
|
+
"id": "history-close",
|
|
110
|
+
"name": "Close Prior Task Context",
|
|
111
|
+
"enabled": true,
|
|
112
|
+
"role": "user",
|
|
113
|
+
"content": "</prior_task_context>"
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"kind": "block",
|
|
117
|
+
"id": "current-image-task",
|
|
118
|
+
"name": "Current Image Task",
|
|
119
|
+
"enabled": true,
|
|
120
|
+
"role": "user",
|
|
121
|
+
"content": "<current_image_task>\n{{xml::{{lastUserMessage}}}}\n</current_image_task>\n\nProduce the image report now for the {{audience}}.\n\nRequired output:\n1. Access check: state whether you can directly inspect the image.\n2. One-sentence overview: summarize the scene plainly.\n3. Detailed inventory: list visible subjects, objects, setting, text, colors, layout, and relationships.\n4. Safety-relevant content: list visible hazards, injuries, weapons, explicit content, abuse indicators, hate symbols, or other potentially harmful content. Write \"None visible\" only if none are visible.\n5. Uncertainties: list anything important that is unclear, ambiguous, cropped, blurry, or inferred.\n6. Machine-readable summary: include one compact JSON object with keys \"canInspectImage\", \"overview\", \"visibleText\", \"safetyRelevantContent\", and \"uncertainties\". Use strings or arrays only; do not include markdown inside the JSON.\n\nRequest as JSON string for logging: {{json::{{lastUserMessage}}}}"
|
|
122
|
+
}
|
|
123
|
+
]
|
|
124
|
+
}
|
package/package.json
CHANGED
|
@@ -1,8 +1,31 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zihanw/pi-forge",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.2",
|
|
4
4
|
"description": "Pi extension for prompt stack and agent profile management.",
|
|
5
5
|
"type": "module",
|
|
6
|
+
"exports": {
|
|
7
|
+
".": {
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"import": "./dist/index.js",
|
|
10
|
+
"default": "./dist/index.js"
|
|
11
|
+
},
|
|
12
|
+
"./src/*.ts": {
|
|
13
|
+
"types": "./dist/*.d.ts",
|
|
14
|
+
"import": "./dist/*.js",
|
|
15
|
+
"default": "./dist/*.js"
|
|
16
|
+
},
|
|
17
|
+
"./src/*.js": {
|
|
18
|
+
"types": "./dist/*.d.ts",
|
|
19
|
+
"import": "./dist/*.js",
|
|
20
|
+
"default": "./dist/*.js"
|
|
21
|
+
},
|
|
22
|
+
"./src/*": {
|
|
23
|
+
"types": "./dist/*.d.ts",
|
|
24
|
+
"import": "./dist/*.js",
|
|
25
|
+
"default": "./dist/*.js"
|
|
26
|
+
},
|
|
27
|
+
"./examples/*": "./examples/*"
|
|
28
|
+
},
|
|
6
29
|
"keywords": [
|
|
7
30
|
"pi-package",
|
|
8
31
|
"pi-extension",
|
|
@@ -11,7 +34,7 @@
|
|
|
11
34
|
"license": "MIT",
|
|
12
35
|
"pi": {
|
|
13
36
|
"extensions": [
|
|
14
|
-
"./
|
|
37
|
+
"./dist/index.js"
|
|
15
38
|
]
|
|
16
39
|
},
|
|
17
40
|
"peerDependencies": {
|
|
@@ -38,10 +61,13 @@
|
|
|
38
61
|
"typescript": "latest"
|
|
39
62
|
},
|
|
40
63
|
"scripts": {
|
|
64
|
+
"build": "tsc -p tsconfig.build.json",
|
|
65
|
+
"prepack": "npm run build",
|
|
41
66
|
"typecheck": "tsc --noEmit",
|
|
42
67
|
"test": "node --test tests/*.test.ts"
|
|
43
68
|
},
|
|
44
69
|
"files": [
|
|
70
|
+
"dist/",
|
|
45
71
|
"src/",
|
|
46
72
|
"examples/",
|
|
47
73
|
"README.md",
|