@zihanw/pi-forge 0.2.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. package/README.md +233 -105
  2. package/README.zh-CN.md +215 -104
  3. package/dist/compiler.d.ts +10 -0
  4. package/dist/compiler.d.ts.map +1 -0
  5. package/dist/compiler.js +490 -0
  6. package/dist/compiler.js.map +1 -0
  7. package/dist/extension-registry.d.ts +25 -0
  8. package/dist/extension-registry.d.ts.map +1 -0
  9. package/dist/extension-registry.js +6 -0
  10. package/dist/extension-registry.js.map +1 -0
  11. package/dist/index.d.ts +7 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +364 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/lifecycle.d.ts +14 -0
  16. package/dist/lifecycle.d.ts.map +1 -0
  17. package/dist/lifecycle.js +139 -0
  18. package/dist/lifecycle.js.map +1 -0
  19. package/dist/loader.d.ts +8 -0
  20. package/dist/loader.d.ts.map +1 -0
  21. package/dist/loader.js +345 -0
  22. package/dist/loader.js.map +1 -0
  23. package/dist/macro-engine.d.ts +23 -0
  24. package/dist/macro-engine.d.ts.map +1 -0
  25. package/dist/macro-engine.js +262 -0
  26. package/dist/macro-engine.js.map +1 -0
  27. package/dist/payload-capture.d.ts +15 -0
  28. package/dist/payload-capture.d.ts.map +1 -0
  29. package/dist/payload-capture.js +86 -0
  30. package/dist/payload-capture.js.map +1 -0
  31. package/dist/payload-command.d.ts +10 -0
  32. package/dist/payload-command.d.ts.map +1 -0
  33. package/dist/payload-command.js +112 -0
  34. package/dist/payload-command.js.map +1 -0
  35. package/dist/policy.d.ts +6 -0
  36. package/dist/policy.d.ts.map +1 -0
  37. package/dist/policy.js +38 -0
  38. package/dist/policy.js.map +1 -0
  39. package/dist/preset-command.d.ts +14 -0
  40. package/dist/preset-command.d.ts.map +1 -0
  41. package/dist/preset-command.js +223 -0
  42. package/dist/preset-command.js.map +1 -0
  43. package/dist/preview.d.ts +12 -0
  44. package/dist/preview.d.ts.map +1 -0
  45. package/dist/preview.js +179 -0
  46. package/dist/preview.js.map +1 -0
  47. package/dist/regex.d.ts +7 -0
  48. package/dist/regex.d.ts.map +1 -0
  49. package/dist/regex.js +432 -0
  50. package/dist/regex.js.map +1 -0
  51. package/dist/render-helpers.d.ts +44 -0
  52. package/dist/render-helpers.d.ts.map +1 -0
  53. package/dist/render-helpers.js +128 -0
  54. package/dist/render-helpers.js.map +1 -0
  55. package/dist/runtime-state.d.ts +24 -0
  56. package/dist/runtime-state.d.ts.map +1 -0
  57. package/dist/runtime-state.js +13 -0
  58. package/dist/runtime-state.js.map +1 -0
  59. package/dist/sillytavern-importer/items.d.ts +3 -0
  60. package/dist/sillytavern-importer/items.d.ts.map +1 -0
  61. package/dist/sillytavern-importer/items.js +88 -0
  62. package/dist/sillytavern-importer/items.js.map +1 -0
  63. package/dist/sillytavern-importer/macros.d.ts +15 -0
  64. package/dist/sillytavern-importer/macros.d.ts.map +1 -0
  65. package/dist/sillytavern-importer/macros.js +141 -0
  66. package/dist/sillytavern-importer/macros.js.map +1 -0
  67. package/dist/sillytavern-importer/prompt-order.d.ts +6 -0
  68. package/dist/sillytavern-importer/prompt-order.d.ts.map +1 -0
  69. package/dist/sillytavern-importer/prompt-order.js +38 -0
  70. package/dist/sillytavern-importer/prompt-order.js.map +1 -0
  71. package/dist/sillytavern-importer/regex.d.ts +3 -0
  72. package/dist/sillytavern-importer/regex.d.ts.map +1 -0
  73. package/dist/sillytavern-importer/regex.js +275 -0
  74. package/dist/sillytavern-importer/regex.js.map +1 -0
  75. package/dist/sillytavern-importer/report.d.ts +21 -0
  76. package/dist/sillytavern-importer/report.d.ts.map +1 -0
  77. package/dist/sillytavern-importer/report.js +166 -0
  78. package/dist/sillytavern-importer/report.js.map +1 -0
  79. package/dist/sillytavern-importer/types.d.ts +106 -0
  80. package/dist/sillytavern-importer/types.d.ts.map +1 -0
  81. package/dist/sillytavern-importer/types.js +2 -0
  82. package/dist/sillytavern-importer/types.js.map +1 -0
  83. package/dist/sillytavern-importer.d.ts +5 -0
  84. package/dist/sillytavern-importer.d.ts.map +1 -0
  85. package/dist/sillytavern-importer.js +117 -0
  86. package/dist/sillytavern-importer.js.map +1 -0
  87. package/dist/slot-renderers.d.ts +25 -0
  88. package/dist/slot-renderers.d.ts.map +1 -0
  89. package/dist/slot-renderers.js +334 -0
  90. package/dist/slot-renderers.js.map +1 -0
  91. package/dist/stack-migration.d.ts +29 -0
  92. package/dist/stack-migration.d.ts.map +1 -0
  93. package/dist/stack-migration.js +126 -0
  94. package/dist/stack-migration.js.map +1 -0
  95. package/dist/storage.d.ts +6 -0
  96. package/dist/storage.d.ts.map +1 -0
  97. package/dist/storage.js +23 -0
  98. package/dist/storage.js.map +1 -0
  99. package/dist/types.d.ts +173 -0
  100. package/dist/types.d.ts.map +1 -0
  101. package/dist/types.js +2 -0
  102. package/dist/types.js.map +1 -0
  103. package/dist/web-editor/index.d.ts +3 -0
  104. package/dist/web-editor/index.d.ts.map +1 -0
  105. package/dist/web-editor/index.js +2 -0
  106. package/dist/web-editor/index.js.map +1 -0
  107. package/dist/web-editor/page.d.ts +2 -0
  108. package/dist/web-editor/page.d.ts.map +1 -0
  109. package/dist/web-editor/page.js +3331 -0
  110. package/dist/web-editor/page.js.map +1 -0
  111. package/dist/web-editor/server.d.ts +4 -0
  112. package/dist/web-editor/server.d.ts.map +1 -0
  113. package/dist/web-editor/server.js +263 -0
  114. package/dist/web-editor/server.js.map +1 -0
  115. package/dist/web-editor/types.d.ts +125 -0
  116. package/dist/web-editor/types.d.ts.map +1 -0
  117. package/dist/web-editor/types.js +2 -0
  118. package/dist/web-editor/types.js.map +1 -0
  119. package/dist/web-host.d.ts +29 -0
  120. package/dist/web-host.d.ts.map +1 -0
  121. package/dist/web-host.js +174 -0
  122. package/dist/web-host.js.map +1 -0
  123. package/examples/custom-system-status-extension/README.md +78 -0
  124. package/examples/custom-system-status-extension/index.ts +176 -0
  125. package/examples/custom-system-status-extension/prompt-stack.json +39 -0
  126. package/examples/default-prompt-stack.json +52 -93
  127. package/examples/image-reader-prompt-stack.json +124 -0
  128. package/examples/reviewer-prompt-stack.json +115 -0
  129. package/examples/sillytavern-dm-writer-prompt-stack.json +190 -0
  130. package/package.json +30 -9
  131. package/src/compiler.ts +321 -420
  132. package/src/extension-registry.ts +33 -0
  133. package/src/index.ts +310 -1110
  134. package/src/lifecycle.ts +171 -0
  135. package/src/loader.ts +141 -56
  136. package/src/macro-engine.ts +358 -0
  137. package/src/payload-capture.ts +85 -0
  138. package/src/payload-command.ts +138 -0
  139. package/src/policy.ts +42 -0
  140. package/src/preset-command.ts +271 -0
  141. package/src/preview.ts +226 -0
  142. package/src/regex.ts +500 -0
  143. package/src/render-helpers.ts +169 -0
  144. package/src/runtime-state.ts +36 -0
  145. package/src/sillytavern-importer/items.ts +98 -0
  146. package/src/sillytavern-importer/macros.ts +159 -0
  147. package/src/sillytavern-importer/prompt-order.ts +54 -0
  148. package/src/sillytavern-importer/regex.ts +270 -0
  149. package/src/sillytavern-importer/report.ts +202 -0
  150. package/src/sillytavern-importer/types.ts +120 -0
  151. package/src/sillytavern-importer.ts +57 -482
  152. package/src/slot-renderers.ts +414 -0
  153. package/src/stack-migration.ts +159 -0
  154. package/src/storage.ts +28 -0
  155. package/src/types.ts +83 -52
  156. package/src/web-editor/index.ts +2 -0
  157. package/src/web-editor/page.ts +3330 -0
  158. package/src/web-editor/server.ts +294 -0
  159. package/src/web-editor/types.ts +98 -0
  160. package/src/web-host.ts +232 -0
  161. package/src/web-editor.ts +0 -1491
package/src/types.ts CHANGED
@@ -19,6 +19,42 @@ export type PromptStackSlot =
19
19
  | "pi-docs"
20
20
  | "variables";
21
21
 
22
+ export type PromptStackSlotFormat = "xml" | "json" | "plain";
23
+
24
+ export type PromptRegexStage = "history" | "compiled";
25
+
26
+ export type PromptRegexEffect = "outgoing" | "display" | "both" | "finalize";
27
+
28
+ export type PromptRegexTarget = "system" | "messages";
29
+
30
+ export interface PromptRegexRule {
31
+ id: string;
32
+ name?: string;
33
+ enabled?: boolean;
34
+ stage: PromptRegexStage;
35
+ effect?: PromptRegexEffect;
36
+ pattern: string;
37
+ flags?: string;
38
+ replace?: string;
39
+ trimStrings?: string[];
40
+ roles?: string[];
41
+ targets?: PromptRegexTarget[];
42
+ maxMessages?: number;
43
+ maxChars?: number;
44
+ minDepth?: number;
45
+ maxDepth?: number;
46
+ source?: Record<string, unknown>;
47
+ }
48
+
49
+ export interface PromptRegexConfig {
50
+ schemaVersion?: 1;
51
+ rules?: PromptRegexRule[];
52
+ }
53
+
54
+ export type PromptResourcePolicy =
55
+ | { allow?: string[]; deny?: never }
56
+ | { allow?: never; deny?: string[] };
57
+
22
58
  export interface PromptStackDefaults {
23
59
  syntheticMessagesVisible?: boolean;
24
60
  unresolvedMacroPolicy?: "warn" | "keep" | "error";
@@ -50,33 +86,42 @@ export interface VariablesSlotOptions {
50
86
  includeSession?: boolean;
51
87
  /** Include turn variables. Default: true. */
52
88
  includeTurn?: boolean;
53
- /** Include only these scopes. Overrides includeStatic/includeSession/includeTurn when present. */
54
- includeScopes?: PromptStateScope[];
55
- /** Include variable names matching these exact names or wildcard prefixes, e.g. agent.*. */
56
- includeNamespaces?: string[];
57
- /** Exclude variable names matching these exact names or wildcard prefixes. */
58
- excludeNamespaces?: string[];
59
- /** Include type and description metadata from stack.state.definitions. Default: false. */
60
- includeMetadata?: boolean;
61
89
  /** Render format. Default: xml. */
62
- format?: "xml" | "json";
63
- /** Truncate each rendered value after this many characters. */
64
- maxValueChars?: number;
90
+ format?: Exclude<PromptStackSlotFormat, "json">;
65
91
  }
66
92
 
67
93
  export interface PromptStackSlotOptions {
68
94
  /** For chat-history: include the latest user message in the expanded history. Default: true. */
69
95
  includeLastUserMessage?: boolean;
96
+ /** For chat-history: remove assistant thinking content blocks from inserted history. Default: false. */
97
+ stripAssistantThinking?: boolean;
98
+ /** For chat-history: keep only messages with these roles. Default: all roles. */
99
+ roles?: string[];
100
+ /** For chat-history: include Pi branch/compaction summaries. Default: true. */
101
+ includeSummaries?: boolean;
102
+ /** For chat-history: keep or drop tool-call/tool-result history. Default: keep. */
103
+ toolMode?: "keep" | "drop";
104
+ /** For chat-history: keep only the most recent N messages after filtering. */
105
+ maxMessages?: number;
106
+ /** For chat-history: keep only the most recent messages within an approximate character budget. */
107
+ maxChars?: number;
70
108
  /** For variables: control which variable scopes are included. */
71
109
  includeStatic?: boolean;
72
110
  includeSession?: boolean;
73
111
  includeTurn?: boolean;
74
- includeScopes?: PromptStateScope[];
75
- includeNamespaces?: string[];
76
- excludeNamespaces?: string[];
77
- includeMetadata?: boolean;
78
- format?: "xml" | "json";
79
- maxValueChars?: number;
112
+ format?: PromptStackSlotFormat;
113
+ /** For tools: only render tools that provide prompt snippets, matching Pi's default prompt builder. */
114
+ onlyWithSnippets?: boolean;
115
+ /** For date/date-cwd: include the exact current time. Default: false. */
116
+ includeTime?: boolean;
117
+ /** For tool-guidelines: override the plain-format section heading. */
118
+ heading?: string;
119
+ /** For tool-guidelines: include Pi's default concise/file-path guideline bullets. */
120
+ includePiDefaultGuidelines?: boolean;
121
+ /** For tool-guidelines: match Pi's default wording where it differs from pi-forge's generic wording. */
122
+ piStyle?: boolean;
123
+ /** For skills: omit the skills section unless the read tool is active, matching Pi's default prompt builder. */
124
+ requireReadTool?: boolean;
80
125
  [key: string]: unknown;
81
126
  }
82
127
 
@@ -88,25 +133,9 @@ export interface PromptStackSlotItem extends PromptStackBaseItem {
88
133
 
89
134
  export type PromptStackItem = PromptStackBlockItem | PromptStackSlotItem;
90
135
 
91
- export type PromptStatePrimitive = string | number | boolean | null;
92
-
93
- export type PromptStateValue = PromptStatePrimitive | PromptStateValue[] | { [key: string]: PromptStateValue };
94
-
95
- export type PromptStateScope = "static" | "session" | "turn";
96
-
97
- export interface PromptStateDefinition {
98
- type?: string;
99
- scope?: PromptStateScope;
100
- description?: string;
101
- agentWritable?: boolean;
102
- userWritable?: boolean;
103
- default?: PromptStateValue;
104
- }
136
+ export type PromptVariablePrimitive = string | number | boolean | null;
105
137
 
106
- export interface PromptStateConfig {
107
- schemaVersion?: 1;
108
- definitions?: Record<string, PromptStateDefinition>;
109
- }
138
+ export type PromptVariableValue = PromptVariablePrimitive | PromptVariableValue[] | { [key: string]: PromptVariableValue };
110
139
 
111
140
  export interface PromptStack {
112
141
  schemaVersion: 1;
@@ -118,8 +147,10 @@ export interface PromptStack {
118
147
  mode?: PromptStackMode;
119
148
  defaults?: PromptStackDefaults;
120
149
  context?: PromptStackContextOptions;
150
+ tools?: PromptResourcePolicy;
151
+ skills?: PromptResourcePolicy;
121
152
  variables?: Record<string, string>;
122
- state?: PromptStateConfig;
153
+ regex?: PromptRegexConfig;
123
154
  items: PromptStackItem[];
124
155
  import?: Record<string, unknown>;
125
156
  }
@@ -139,8 +170,8 @@ export interface PromptStackDiagnostic {
139
170
  }
140
171
 
141
172
  export interface PromptVariableStore {
142
- turn: Record<string, PromptStateValue>;
143
- session: Record<string, PromptStateValue>;
173
+ turn: Record<string, PromptVariableValue>;
174
+ session: Record<string, PromptVariableValue>;
144
175
  sessionDirty?: boolean;
145
176
  }
146
177
 
@@ -157,22 +188,22 @@ export interface CompileSystemPromptResult {
157
188
  diagnostics: PromptStackDiagnostic[];
158
189
  }
159
190
 
191
+ export type CompileMessageSourceKind = "stack-item" | "chat-history" | "implicit-history";
192
+
193
+ export interface CompileMessageSource {
194
+ kind: CompileMessageSourceKind;
195
+ itemId?: string;
196
+ itemName?: string;
197
+ slot?: string;
198
+ historyIndex?: number;
199
+ historyCount?: number;
200
+ role?: string;
201
+ }
202
+
160
203
  export interface CompileMessagesResult {
161
204
  messages: AgentMessage[];
205
+ messageSources: CompileMessageSource[];
162
206
  diagnostics: PromptStackDiagnostic[];
163
207
  }
164
208
 
165
- export const SUPPORTED_SLOTS = new Set<PromptStackSlot>([
166
- "chat-history",
167
- "tools",
168
- "tool-guidelines",
169
- "skills",
170
- "project-context",
171
- "append-system-prompt",
172
- "date",
173
- "cwd",
174
- "date-cwd",
175
- "active-model",
176
- "pi-docs",
177
- "variables",
178
- ]);
209
+ export { SUPPORTED_SLOTS } from "./slot-renderers.ts";
@@ -0,0 +1,2 @@
1
+ export { DEFAULT_WEB_EDITOR_PORT, startWebEditorServer } from "./server.ts";
2
+ export type * from "./types.ts";