@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.
Files changed (156) hide show
  1. package/README.md +87 -2
  2. package/README.zh-CN.md +72 -2
  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/forge-extensions.d.ts +28 -0
  12. package/dist/forge-extensions.d.ts.map +1 -0
  13. package/dist/forge-extensions.js +182 -0
  14. package/dist/forge-extensions.js.map +1 -0
  15. package/dist/index.d.ts +8 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +376 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/lifecycle.d.ts +14 -0
  20. package/dist/lifecycle.d.ts.map +1 -0
  21. package/dist/lifecycle.js +139 -0
  22. package/dist/lifecycle.js.map +1 -0
  23. package/dist/loader.d.ts +8 -0
  24. package/dist/loader.d.ts.map +1 -0
  25. package/dist/loader.js +345 -0
  26. package/dist/loader.js.map +1 -0
  27. package/dist/macro-engine.d.ts +23 -0
  28. package/dist/macro-engine.d.ts.map +1 -0
  29. package/dist/macro-engine.js +262 -0
  30. package/dist/macro-engine.js.map +1 -0
  31. package/dist/payload-capture.d.ts +15 -0
  32. package/dist/payload-capture.d.ts.map +1 -0
  33. package/dist/payload-capture.js +86 -0
  34. package/dist/payload-capture.js.map +1 -0
  35. package/dist/payload-command.d.ts +10 -0
  36. package/dist/payload-command.d.ts.map +1 -0
  37. package/dist/payload-command.js +112 -0
  38. package/dist/payload-command.js.map +1 -0
  39. package/dist/policy.d.ts +6 -0
  40. package/dist/policy.d.ts.map +1 -0
  41. package/dist/policy.js +38 -0
  42. package/dist/policy.js.map +1 -0
  43. package/dist/preset-command.d.ts +14 -0
  44. package/dist/preset-command.d.ts.map +1 -0
  45. package/dist/preset-command.js +232 -0
  46. package/dist/preset-command.js.map +1 -0
  47. package/dist/preview.d.ts +12 -0
  48. package/dist/preview.d.ts.map +1 -0
  49. package/dist/preview.js +179 -0
  50. package/dist/preview.js.map +1 -0
  51. package/dist/regex.d.ts +7 -0
  52. package/dist/regex.d.ts.map +1 -0
  53. package/dist/regex.js +432 -0
  54. package/dist/regex.js.map +1 -0
  55. package/dist/render-helpers.d.ts +44 -0
  56. package/dist/render-helpers.d.ts.map +1 -0
  57. package/dist/render-helpers.js +128 -0
  58. package/dist/render-helpers.js.map +1 -0
  59. package/dist/runtime-state.d.ts +26 -0
  60. package/dist/runtime-state.d.ts.map +1 -0
  61. package/dist/runtime-state.js +15 -0
  62. package/dist/runtime-state.js.map +1 -0
  63. package/dist/sillytavern-importer/items.d.ts +3 -0
  64. package/dist/sillytavern-importer/items.d.ts.map +1 -0
  65. package/dist/sillytavern-importer/items.js +88 -0
  66. package/dist/sillytavern-importer/items.js.map +1 -0
  67. package/dist/sillytavern-importer/macros.d.ts +15 -0
  68. package/dist/sillytavern-importer/macros.d.ts.map +1 -0
  69. package/dist/sillytavern-importer/macros.js +141 -0
  70. package/dist/sillytavern-importer/macros.js.map +1 -0
  71. package/dist/sillytavern-importer/prompt-order.d.ts +6 -0
  72. package/dist/sillytavern-importer/prompt-order.d.ts.map +1 -0
  73. package/dist/sillytavern-importer/prompt-order.js +38 -0
  74. package/dist/sillytavern-importer/prompt-order.js.map +1 -0
  75. package/dist/sillytavern-importer/regex.d.ts +3 -0
  76. package/dist/sillytavern-importer/regex.d.ts.map +1 -0
  77. package/dist/sillytavern-importer/regex.js +275 -0
  78. package/dist/sillytavern-importer/regex.js.map +1 -0
  79. package/dist/sillytavern-importer/report.d.ts +21 -0
  80. package/dist/sillytavern-importer/report.d.ts.map +1 -0
  81. package/dist/sillytavern-importer/report.js +166 -0
  82. package/dist/sillytavern-importer/report.js.map +1 -0
  83. package/dist/sillytavern-importer/types.d.ts +106 -0
  84. package/dist/sillytavern-importer/types.d.ts.map +1 -0
  85. package/dist/sillytavern-importer/types.js +2 -0
  86. package/dist/sillytavern-importer/types.js.map +1 -0
  87. package/dist/sillytavern-importer.d.ts +5 -0
  88. package/dist/sillytavern-importer.d.ts.map +1 -0
  89. package/dist/sillytavern-importer.js +117 -0
  90. package/dist/sillytavern-importer.js.map +1 -0
  91. package/dist/slot-renderers.d.ts +25 -0
  92. package/dist/slot-renderers.d.ts.map +1 -0
  93. package/dist/slot-renderers.js +334 -0
  94. package/dist/slot-renderers.js.map +1 -0
  95. package/dist/stack-migration.d.ts +29 -0
  96. package/dist/stack-migration.d.ts.map +1 -0
  97. package/dist/stack-migration.js +126 -0
  98. package/dist/stack-migration.js.map +1 -0
  99. package/dist/storage.d.ts +10 -0
  100. package/dist/storage.d.ts.map +1 -0
  101. package/dist/storage.js +36 -0
  102. package/dist/storage.js.map +1 -0
  103. package/dist/types.d.ts +173 -0
  104. package/dist/types.d.ts.map +1 -0
  105. package/dist/types.js +2 -0
  106. package/dist/types.js.map +1 -0
  107. package/dist/web-editor/index.d.ts +3 -0
  108. package/dist/web-editor/index.d.ts.map +1 -0
  109. package/dist/web-editor/index.js +2 -0
  110. package/dist/web-editor/index.js.map +1 -0
  111. package/dist/web-editor/page.d.ts +2 -0
  112. package/dist/web-editor/page.d.ts.map +1 -0
  113. package/dist/web-editor/page.js +3331 -0
  114. package/dist/web-editor/page.js.map +1 -0
  115. package/dist/web-editor/server.d.ts +4 -0
  116. package/dist/web-editor/server.d.ts.map +1 -0
  117. package/dist/web-editor/server.js +263 -0
  118. package/dist/web-editor/server.js.map +1 -0
  119. package/dist/web-editor/types.d.ts +125 -0
  120. package/dist/web-editor/types.d.ts.map +1 -0
  121. package/dist/web-editor/types.js +2 -0
  122. package/dist/web-editor/types.js.map +1 -0
  123. package/dist/web-host.d.ts +29 -0
  124. package/dist/web-host.d.ts.map +1 -0
  125. package/dist/web-host.js +174 -0
  126. package/dist/web-host.js.map +1 -0
  127. package/examples/custom-system-status-extension/README.md +85 -0
  128. package/examples/custom-system-status-extension/index.ts +136 -0
  129. package/examples/custom-system-status-extension/prompt-stack.json +39 -0
  130. package/examples/image-reader-prompt-stack.json +124 -0
  131. package/package.json +28 -2
  132. package/src/compiler.ts +2 -472
  133. package/src/extension-registry.ts +33 -0
  134. package/src/forge-extensions.ts +223 -0
  135. package/src/index.ts +208 -653
  136. package/src/lifecycle.ts +171 -0
  137. package/src/macro-engine.ts +358 -0
  138. package/src/payload-command.ts +138 -0
  139. package/src/preset-command.ts +280 -0
  140. package/src/preview.ts +226 -0
  141. package/src/render-helpers.ts +169 -0
  142. package/src/runtime-state.ts +40 -0
  143. package/src/sillytavern-importer/items.ts +98 -0
  144. package/src/sillytavern-importer/macros.ts +159 -0
  145. package/src/sillytavern-importer/prompt-order.ts +54 -0
  146. package/src/sillytavern-importer/regex.ts +270 -0
  147. package/src/sillytavern-importer/report.ts +202 -0
  148. package/src/sillytavern-importer/types.ts +120 -0
  149. package/src/sillytavern-importer.ts +55 -865
  150. package/src/slot-renderers.ts +414 -0
  151. package/src/storage.ts +17 -0
  152. package/src/types.ts +3 -14
  153. package/src/web-editor/page.ts +516 -30
  154. package/src/web-editor/server.ts +9 -4
  155. package/src/web-editor/types.ts +18 -4
  156. package/src/web-host.ts +16 -13
@@ -0,0 +1,139 @@
1
+ import { compileMessages, compileSystemPrompt, createPromptVariableStore, getLatestUserMessage, markSessionVariablesClean, resetTurnVariables, } from "./compiler.js";
2
+ import { applyFinalizeRegexRulesToMessage } from "./regex.js";
3
+ import { STATE_ENTRY_TYPE, VARIABLE_ENTRY_TYPE } from "./runtime-state.js";
4
+ export function registerLifecycleHandlers(pi, state, deps) {
5
+ pi.on("session_start", async (event, ctx) => {
6
+ await restoreBranchScopedRuntime(ctx, state, deps);
7
+ deps.refreshWebEditorHost(ctx);
8
+ deps.notifyActivePreset(ctx, "after session " + event.reason);
9
+ });
10
+ pi.on("session_tree", async (_event, ctx) => {
11
+ await restoreBranchScopedRuntime(ctx, state, deps);
12
+ deps.refreshWebEditorHost(ctx);
13
+ deps.notifyActivePreset(ctx, "after tree navigation");
14
+ });
15
+ pi.on("session_compact", async (_event, ctx) => {
16
+ await restoreBranchScopedRuntime(ctx, state, deps);
17
+ deps.refreshWebEditorHost(ctx);
18
+ deps.notifyActivePreset(ctx, "after compaction");
19
+ });
20
+ pi.on("turn_start", async () => {
21
+ deps.syncActiveToolPolicy();
22
+ const id = deps.activeId();
23
+ if (id)
24
+ deps.persistActiveSelection(id);
25
+ });
26
+ pi.on("before_agent_start", async (event, ctx) => {
27
+ state.currentSystemPromptOptions = event.systemPromptOptions;
28
+ state.currentLatestUserMessage = event.prompt;
29
+ state.currentVariableStore = createPromptVariableStore(state.sessionVariables);
30
+ resetTurnVariables(state.currentVariableStore);
31
+ state.contextRewritePending = true;
32
+ if (!state.active)
33
+ return;
34
+ const result = compileSystemPrompt(state.active.stack, { options: event.systemPromptOptions, ctx, latestUserMessage: event.prompt, now: new Date(), variables: state.currentVariableStore }, event.systemPrompt);
35
+ deps.recordCompileDiagnostics(ctx, result.diagnostics);
36
+ persistVariablesIfDirty(pi, state, state.currentVariableStore);
37
+ return { systemPrompt: result.systemPrompt };
38
+ });
39
+ pi.on("context", async (event, ctx) => {
40
+ if (!state.active || !state.currentSystemPromptOptions || !state.contextRewritePending)
41
+ return;
42
+ // Rewrite the message layout only for the first provider request of a user-submitted prompt.
43
+ // Tool-result follow-up turns must receive Pi's natural context; otherwise post-history
44
+ // prompt blocks such as COT / {{lastUserMessage}} are re-appended after every tool call
45
+ // and the model restarts its planning instead of continuing from the tool result.
46
+ state.contextRewritePending = false;
47
+ if (!state.currentVariableStore)
48
+ state.currentVariableStore = createPromptVariableStore(state.sessionVariables);
49
+ const latestUserMessage = getLatestUserMessage(event.messages) ?? state.currentLatestUserMessage;
50
+ const result = compileMessages(state.active.stack, { options: state.currentSystemPromptOptions, ctx, latestUserMessage, now: new Date(), variables: state.currentVariableStore }, event.messages);
51
+ deps.recordCompileDiagnostics(ctx, [...state.latestCompileDiagnostics, ...result.diagnostics]);
52
+ persistVariablesIfDirty(pi, state, state.currentVariableStore);
53
+ return { messages: result.messages };
54
+ });
55
+ pi.on("message_end", async (event, ctx) => {
56
+ if (!state.active)
57
+ return;
58
+ const diagnostics = [];
59
+ const message = applyFinalizeRegexRulesToMessage(state.active.stack, event.message, diagnostics);
60
+ if (diagnostics.length > 0)
61
+ deps.recordCompileDiagnostics(ctx, [...state.latestCompileDiagnostics, ...diagnostics]);
62
+ if (!message)
63
+ return;
64
+ return { message };
65
+ });
66
+ pi.on("agent_end", async () => {
67
+ persistVariablesIfDirty(pi, state, state.currentVariableStore);
68
+ state.currentSystemPromptOptions = undefined;
69
+ state.currentLatestUserMessage = undefined;
70
+ state.currentVariableStore = undefined;
71
+ state.contextRewritePending = false;
72
+ });
73
+ }
74
+ async function restoreBranchScopedRuntime(ctx, state, deps) {
75
+ state.sessionVariables = getRestoredVariables(ctx);
76
+ state.currentVariableStore = undefined;
77
+ const restoredActiveId = getRestoredActiveId(ctx);
78
+ state.lastPersistedActiveId = restoredActiveId;
79
+ await deps.reloadStacks(ctx, restoredActiveId);
80
+ }
81
+ function getCurrentBranchEntries(ctx) {
82
+ const leafId = ctx.sessionManager.getLeafId();
83
+ if (leafId === null)
84
+ return [];
85
+ const sessionManager = ctx.sessionManager;
86
+ return sessionManager.getBranch ? sessionManager.getBranch(leafId ?? undefined) : sessionManager.getEntries();
87
+ }
88
+ function getRestoredActiveId(ctx) {
89
+ const entries = getCurrentBranchEntries(ctx);
90
+ for (let i = entries.length - 1; i >= 0; i--) {
91
+ const entry = entries[i];
92
+ if (entry.type === "custom" && entry.customType === STATE_ENTRY_TYPE) {
93
+ return typeof entry.data?.activeStackId === "string" ? entry.data.activeStackId : undefined;
94
+ }
95
+ }
96
+ return undefined;
97
+ }
98
+ function getRestoredVariables(ctx) {
99
+ const entries = getCurrentBranchEntries(ctx);
100
+ for (let i = entries.length - 1; i >= 0; i--) {
101
+ const entry = entries[i];
102
+ if (entry.type !== "custom" || entry.customType !== VARIABLE_ENTRY_TYPE)
103
+ continue;
104
+ if (!entry.data || typeof entry.data.variables !== "object" || Array.isArray(entry.data.variables))
105
+ return {};
106
+ return normalizeVariableRecord(entry.data.variables);
107
+ }
108
+ return {};
109
+ }
110
+ function persistVariablesIfDirty(pi, state, store) {
111
+ if (!store?.sessionDirty)
112
+ return;
113
+ state.sessionVariables = { ...store.session };
114
+ pi.appendEntry(VARIABLE_ENTRY_TYPE, { variables: state.sessionVariables });
115
+ markSessionVariablesClean(store);
116
+ }
117
+ function normalizeVariableRecord(value) {
118
+ const result = {};
119
+ for (const [key, raw] of Object.entries(value)) {
120
+ if (isPromptVariableValue(raw))
121
+ result[key] = raw;
122
+ }
123
+ return result;
124
+ }
125
+ function isPromptVariableValue(value) {
126
+ if (value === null)
127
+ return true;
128
+ const type = typeof value;
129
+ if (type === "string" || type === "boolean")
130
+ return true;
131
+ if (type === "number")
132
+ return Number.isFinite(value);
133
+ if (Array.isArray(value))
134
+ return value.every(isPromptVariableValue);
135
+ if (!value || typeof value !== "object")
136
+ return false;
137
+ return Object.values(value).every(isPromptVariableValue);
138
+ }
139
+ //# sourceMappingURL=lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { LoadedPromptStack, PromptStack, PromptStackDiagnostic } from "./types.ts";
2
+ export { isInsidePromptStackStorage, legacyPromptStacksDir, promptStackPath, promptStackReadDirs, promptStacksDir } from "./storage.ts";
3
+ export declare function loadPromptStacks(cwd: string): LoadedPromptStack[];
4
+ export declare function chooseDefaultStack(stacks: LoadedPromptStack[], preferredId?: string): LoadedPromptStack | undefined;
5
+ export declare function isUsablePromptStack(loaded: LoadedPromptStack): boolean;
6
+ export declare function isDisabledPromptStackId(id: string | undefined): boolean;
7
+ export declare function validatePromptStack(stack: PromptStack): PromptStackDiagnostic[];
8
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACX,iBAAiB,EAEjB,WAAW,EACX,qBAAqB,EAGrB,MAAM,YAAY,CAAC;AAMpB,OAAO,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,eAAe,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAExI,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAKjE;AA+CD,wBAAgB,kBAAkB,CACjC,MAAM,EAAE,iBAAiB,EAAE,EAC3B,WAAW,CAAC,EAAE,MAAM,GAClB,iBAAiB,GAAG,SAAS,CAiB/B;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAEtE;AAED,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAEvE;AAsHD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,GAAG,qBAAqB,EAAE,CAoD/E"}
package/dist/loader.js ADDED
@@ -0,0 +1,345 @@
1
+ import { existsSync, readdirSync, readFileSync } from "node:fs";
2
+ import { basename, join } from "node:path";
3
+ import { validateRegexConfig } from "./regex.js";
4
+ import { promptStackReadDirs } from "./storage.js";
5
+ import { SUPPORTED_SLOTS } from "./types.js";
6
+ const VALID_ROLES = new Set(["system", "user", "assistant", "custom"]);
7
+ const VALID_CHAT_HISTORY_TOOL_MODES = new Set(["keep", "drop"]);
8
+ export { isInsidePromptStackStorage, legacyPromptStacksDir, promptStackPath, promptStackReadDirs, promptStacksDir } from "./storage.js";
9
+ export function loadPromptStacks(cwd) {
10
+ const files = promptStackFiles(cwd);
11
+ const loaded = files.map(loadPromptStackFile);
12
+ annotateDuplicateStackIds(loaded);
13
+ return loaded;
14
+ }
15
+ function promptStackFiles(cwd) {
16
+ const files = [];
17
+ const shadowedNames = new Set();
18
+ for (const dir of promptStackReadDirs(cwd)) {
19
+ if (!existsSync(dir))
20
+ continue;
21
+ let entries;
22
+ try {
23
+ entries = readdirSync(dir).filter((name) => name.endsWith(".json"));
24
+ }
25
+ catch {
26
+ continue;
27
+ }
28
+ for (const name of entries.sort()) {
29
+ if (shadowedNames.has(name))
30
+ continue;
31
+ shadowedNames.add(name);
32
+ files.push(join(dir, name));
33
+ }
34
+ }
35
+ return files;
36
+ }
37
+ function annotateDuplicateStackIds(stacks) {
38
+ const byId = new Map();
39
+ for (const loaded of stacks) {
40
+ const id = loaded.stack.id;
41
+ const matches = byId.get(id) ?? [];
42
+ matches.push(loaded);
43
+ byId.set(id, matches);
44
+ }
45
+ for (const [id, matches] of byId) {
46
+ if (matches.length <= 1)
47
+ continue;
48
+ const files = matches.map((loaded) => basename(loaded.filePath)).join(", ");
49
+ for (const loaded of matches) {
50
+ loaded.diagnostics.push({
51
+ level: "error",
52
+ message: `Duplicate stack id: ${id} appears in multiple files (${files}).`,
53
+ });
54
+ }
55
+ }
56
+ }
57
+ export function chooseDefaultStack(stacks, preferredId) {
58
+ if (isDisabledPromptStackId(preferredId))
59
+ return undefined;
60
+ if (preferredId) {
61
+ const preferred = stacks.find((loaded) => loaded.stack.id === preferredId);
62
+ if (preferred && isUsablePromptStack(preferred))
63
+ return preferred;
64
+ }
65
+ const defaultStack = stacks.find((loaded) => basename(loaded.filePath) === "default.json" &&
66
+ loaded.stack.autoActivate !== false &&
67
+ isUsablePromptStack(loaded));
68
+ if (defaultStack)
69
+ return defaultStack;
70
+ return stacks.find((loaded) => loaded.stack.autoActivate === true && isUsablePromptStack(loaded));
71
+ }
72
+ export function isUsablePromptStack(loaded) {
73
+ return !loaded.diagnostics.some((diagnostic) => diagnostic.level === "error");
74
+ }
75
+ export function isDisabledPromptStackId(id) {
76
+ return id === "none" || id === "off";
77
+ }
78
+ function loadPromptStackFile(filePath) {
79
+ const diagnostics = [];
80
+ let raw;
81
+ try {
82
+ raw = JSON.parse(readFileSync(filePath, "utf8"));
83
+ }
84
+ catch (error) {
85
+ return {
86
+ filePath,
87
+ stack: fallbackStack(filePath),
88
+ diagnostics: [
89
+ {
90
+ level: "error",
91
+ message: `Failed to parse JSON: ${error instanceof Error ? error.message : String(error)}`,
92
+ },
93
+ ],
94
+ };
95
+ }
96
+ const stack = normalizeStack(raw, filePath, diagnostics);
97
+ diagnostics.push(...validatePromptStack(stack));
98
+ return { filePath, stack, diagnostics };
99
+ }
100
+ function fallbackStack(filePath) {
101
+ return {
102
+ schemaVersion: 1,
103
+ type: "pi-forge.prompt-stack",
104
+ id: basename(filePath, ".json"),
105
+ name: basename(filePath),
106
+ items: [],
107
+ };
108
+ }
109
+ function normalizeStack(raw, filePath, diagnostics) {
110
+ if (!raw || typeof raw !== "object" || Array.isArray(raw)) {
111
+ diagnostics.push({ level: "error", message: "Prompt stack root must be a JSON object." });
112
+ return fallbackStack(filePath);
113
+ }
114
+ const obj = raw;
115
+ const id = typeof obj.id === "string" && obj.id.trim() ? obj.id.trim() : basename(filePath, ".json");
116
+ const schemaVersion = 1;
117
+ if (obj.schemaVersion !== 1) {
118
+ diagnostics.push({ level: "warning", message: "Missing or unsupported schemaVersion; assuming 1." });
119
+ }
120
+ const items = Array.isArray(obj.items) ? obj.items.map((item, index) => normalizeItem(item, index, diagnostics)) : [];
121
+ if (!Array.isArray(obj.items)) {
122
+ diagnostics.push({ level: "error", message: "Prompt stack must contain an items array." });
123
+ }
124
+ if (isPlainObject(obj.state) && Object.keys(obj.state).length > 0) {
125
+ diagnostics.push({
126
+ level: "info",
127
+ message: "state is no longer supported and was ignored; use stack.variables and template variable macros instead.",
128
+ });
129
+ }
130
+ return {
131
+ schemaVersion,
132
+ type: obj.type === "pi-forge.prompt-stack" ? "pi-forge.prompt-stack" : undefined,
133
+ id,
134
+ name: typeof obj.name === "string" ? obj.name : undefined,
135
+ description: typeof obj.description === "string" ? obj.description : undefined,
136
+ autoActivate: typeof obj.autoActivate === "boolean" ? obj.autoActivate : undefined,
137
+ mode: obj.mode === "append" || obj.mode === "prepend" || obj.mode === "replace" ? obj.mode : undefined,
138
+ defaults: isPlainObject(obj.defaults) ? obj.defaults : undefined,
139
+ context: isPlainObject(obj.context) ? obj.context : undefined,
140
+ tools: normalizeResourcePolicy(obj.tools, "tools", diagnostics),
141
+ skills: normalizeResourcePolicy(obj.skills, "skills", diagnostics),
142
+ variables: normalizeStringRecord(obj.variables),
143
+ regex: normalizeRegexConfig(obj.regex, diagnostics),
144
+ items,
145
+ import: isPlainObject(obj.import) ? obj.import : undefined,
146
+ };
147
+ }
148
+ function normalizeItem(raw, index, diagnostics) {
149
+ const fallbackId = `item-${index + 1}`;
150
+ if (!raw || typeof raw !== "object" || Array.isArray(raw)) {
151
+ diagnostics.push({ level: "error", message: `Item ${index + 1} must be an object.`, itemId: fallbackId });
152
+ return { kind: "block", id: fallbackId, enabled: false, content: "" };
153
+ }
154
+ const obj = raw;
155
+ const kind = obj.kind === "slot" ? "slot" : "block";
156
+ const id = normalizeId(obj.id, fallbackId);
157
+ const base = {
158
+ kind,
159
+ id,
160
+ name: typeof obj.name === "string" ? obj.name : undefined,
161
+ enabled: typeof obj.enabled === "boolean" ? obj.enabled : undefined,
162
+ role: VALID_ROLES.has(obj.role) ? obj.role : undefined,
163
+ tags: Array.isArray(obj.tags) ? obj.tags.filter((tag) => typeof tag === "string") : undefined,
164
+ source: isPlainObject(obj.source) ? obj.source : undefined,
165
+ };
166
+ if (kind === "slot") {
167
+ return {
168
+ ...base,
169
+ kind: "slot",
170
+ slot: typeof obj.slot === "string" ? obj.slot : "",
171
+ options: isPlainObject(obj.options) ? obj.options : undefined,
172
+ };
173
+ }
174
+ return {
175
+ ...base,
176
+ kind: "block",
177
+ content: typeof obj.content === "string" ? obj.content : "",
178
+ };
179
+ }
180
+ export function validatePromptStack(stack) {
181
+ const diagnostics = [];
182
+ const ids = new Set();
183
+ let chatHistoryCount = 0;
184
+ if (!stack.id.trim())
185
+ diagnostics.push({ level: "error", message: "Stack id must not be empty." });
186
+ for (const item of stack.items) {
187
+ if (ids.has(item.id))
188
+ diagnostics.push({ level: "error", message: `Duplicate item id: ${item.id}`, itemId: item.id });
189
+ ids.add(item.id);
190
+ if (item.role && !VALID_ROLES.has(item.role)) {
191
+ diagnostics.push({ level: "error", message: `Invalid role: ${item.role}`, itemId: item.id });
192
+ }
193
+ if (item.kind === "slot") {
194
+ if (!SUPPORTED_SLOTS.has(item.slot)) {
195
+ diagnostics.push({ level: "warning", message: `Unsupported slot: ${item.slot}`, itemId: item.id });
196
+ }
197
+ if (item.enabled !== false && item.slot === "chat-history")
198
+ chatHistoryCount++;
199
+ if (item.slot === "chat-history")
200
+ validateChatHistoryOptions(item, diagnostics);
201
+ }
202
+ if (item.kind === "block" && item.role !== "system" && item.enabled !== false && !item.role) {
203
+ diagnostics.push({ level: "warning", message: "Enabled block has no role and will be ignored.", itemId: item.id });
204
+ }
205
+ }
206
+ if (chatHistoryCount === 0) {
207
+ diagnostics.push({
208
+ level: "warning",
209
+ message: "No enabled chat-history slot found; Pi chat context will be appended at the end.",
210
+ });
211
+ }
212
+ else if (chatHistoryCount > 1 && !stack.context?.allowDuplicateChatHistory) {
213
+ diagnostics.push({
214
+ level: "warning",
215
+ message: "Multiple enabled chat-history slots found; only the first will be expanded unless context.allowDuplicateChatHistory is true.",
216
+ });
217
+ }
218
+ diagnostics.push(...validateResourcePolicy(stack.tools, "tools"));
219
+ diagnostics.push(...validateResourcePolicy(stack.skills, "skills"));
220
+ if ((stack.mode === "append" || stack.mode === "prepend") && hasPolicyEntries(stack.skills)) {
221
+ diagnostics.push({
222
+ level: "warning",
223
+ message: "skills policy only filters pi-forge skills slots. Use mode \"replace\" if you need the base Pi prompt to omit filtered skills.",
224
+ });
225
+ }
226
+ diagnostics.push(...validateRegexConfig(stack.regex));
227
+ return diagnostics;
228
+ }
229
+ function validateChatHistoryOptions(item, diagnostics) {
230
+ const options = item.options;
231
+ if (!options)
232
+ return;
233
+ for (const key of ["includeLastUserMessage", "stripAssistantThinking", "includeSummaries"]) {
234
+ const value = options[key];
235
+ if (value !== undefined && typeof value !== "boolean") {
236
+ diagnostics.push({ level: "warning", message: `chat-history option ${key} should be a boolean.`, itemId: item.id });
237
+ }
238
+ }
239
+ if (options.roles !== undefined && !isStringArray(options.roles)) {
240
+ diagnostics.push({ level: "error", message: "chat-history option roles must be an array of strings.", itemId: item.id });
241
+ }
242
+ if (options.toolMode !== undefined && (typeof options.toolMode !== "string" || !VALID_CHAT_HISTORY_TOOL_MODES.has(options.toolMode))) {
243
+ diagnostics.push({ level: "error", message: 'chat-history option toolMode must be "keep" or "drop".', itemId: item.id });
244
+ }
245
+ for (const key of ["maxMessages", "maxChars"]) {
246
+ const value = options[key];
247
+ if (value !== undefined && !isPositiveInteger(value)) {
248
+ diagnostics.push({ level: "error", message: `chat-history option ${key} must be a positive integer.`, itemId: item.id });
249
+ }
250
+ }
251
+ }
252
+ function normalizeId(value, fallback) {
253
+ if (typeof value === "string" && value.trim())
254
+ return value.trim();
255
+ if (typeof value === "number" && Number.isFinite(value))
256
+ return String(value);
257
+ return fallback;
258
+ }
259
+ function isStringArray(value) {
260
+ return Array.isArray(value) && value.every((item) => typeof item === "string");
261
+ }
262
+ function isPositiveInteger(value) {
263
+ return typeof value === "number" && Number.isInteger(value) && value > 0;
264
+ }
265
+ function isPlainObject(value) {
266
+ return !!value && typeof value === "object" && !Array.isArray(value);
267
+ }
268
+ function normalizeStringRecord(value) {
269
+ if (!isPlainObject(value))
270
+ return undefined;
271
+ const result = {};
272
+ for (const [key, raw] of Object.entries(value)) {
273
+ if (typeof raw === "string")
274
+ result[key] = raw;
275
+ }
276
+ return result;
277
+ }
278
+ function normalizeResourcePolicy(value, label, diagnostics) {
279
+ if (value === undefined)
280
+ return undefined;
281
+ if (!isPlainObject(value)) {
282
+ diagnostics.push({ level: "error", message: `${label} policy must be an object when provided.` });
283
+ return undefined;
284
+ }
285
+ const allow = normalizePolicyPatterns(value.allow, `${label}.allow`, diagnostics);
286
+ const deny = normalizePolicyPatterns(value.deny, `${label}.deny`, diagnostics);
287
+ if (allow && deny) {
288
+ diagnostics.push({ level: "error", message: `${label} policy must use either allow or deny, not both.` });
289
+ return { allow };
290
+ }
291
+ if (allow)
292
+ return { allow };
293
+ if (deny)
294
+ return { deny };
295
+ return {};
296
+ }
297
+ function normalizePolicyPatterns(value, label, diagnostics) {
298
+ if (value === undefined)
299
+ return undefined;
300
+ if (!Array.isArray(value)) {
301
+ diagnostics.push({ level: "error", message: `${label} must be an array of strings when provided.` });
302
+ return undefined;
303
+ }
304
+ const patterns = [];
305
+ for (const [index, item] of value.entries()) {
306
+ if (typeof item !== "string" || !item.trim()) {
307
+ diagnostics.push({ level: "error", message: `${label}[${index}] must be a non-empty string.` });
308
+ continue;
309
+ }
310
+ patterns.push(item.trim());
311
+ }
312
+ return patterns.length > 0 ? patterns : undefined;
313
+ }
314
+ function validateResourcePolicy(policy, label) {
315
+ const diagnostics = [];
316
+ if ((policy?.allow?.length ?? 0) > 0 && (policy?.deny?.length ?? 0) > 0) {
317
+ diagnostics.push({ level: "error", message: `${label} policy must use either allow or deny, not both.` });
318
+ }
319
+ for (const key of ["allow", "deny"]) {
320
+ const values = policy?.[key];
321
+ if (!values)
322
+ continue;
323
+ const seen = new Set();
324
+ for (const value of values) {
325
+ if (seen.has(value)) {
326
+ diagnostics.push({ level: "warning", message: `Duplicate ${label}.${key} pattern: ${value}.` });
327
+ }
328
+ seen.add(value);
329
+ }
330
+ }
331
+ return diagnostics;
332
+ }
333
+ function hasPolicyEntries(policy) {
334
+ return !!policy && ((policy.allow?.length ?? 0) > 0 || (policy.deny?.length ?? 0) > 0);
335
+ }
336
+ function normalizeRegexConfig(value, diagnostics) {
337
+ if (value === undefined)
338
+ return undefined;
339
+ if (!isPlainObject(value)) {
340
+ diagnostics.push({ level: "warning", message: "regex must be an object when provided." });
341
+ return undefined;
342
+ }
343
+ return value;
344
+ }
345
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { PromptRuntime, PromptStack, PromptStackDiagnostic } from "./types.ts";
2
+ import { type PromptRenderHelpers, type PromptVariableAccess } from "./render-helpers.ts";
3
+ import { type PromptExtensionArgumentDefinition, type PromptRegistryEntry } from "./extension-registry.ts";
4
+ export interface PromptMacroRenderContext {
5
+ name: string;
6
+ command: string;
7
+ stack: PromptStack;
8
+ runtime: PromptRuntime;
9
+ rawArgs: readonly string[];
10
+ expandArg: (index: number) => string;
11
+ expandJoinedArgs: (startIndex: number) => string;
12
+ helpers: PromptRenderHelpers;
13
+ variables: PromptVariableAccess;
14
+ }
15
+ export type PromptMacroRenderer = (context: PromptMacroRenderContext) => string | undefined;
16
+ export interface PromptMacroDefinition extends PromptRegistryEntry {
17
+ args?: readonly PromptExtensionArgumentDefinition[];
18
+ render: PromptMacroRenderer;
19
+ }
20
+ export declare function expandMacros(text: string, stack: PromptStack, runtime: PromptRuntime, diagnostics: PromptStackDiagnostic[], itemId: string): string;
21
+ export declare function registerMacro(definition: PromptMacroDefinition): () => void;
22
+ export declare function getRegisteredMacros(): readonly PromptMacroDefinition[];
23
+ //# sourceMappingURL=macro-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"macro-engine.d.ts","sourceRoot":"","sources":["../src/macro-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,aAAa,EACb,WAAW,EACX,qBAAqB,EACrB,MAAM,YAAY,CAAC;AACpB,OAAO,EAQN,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EAGzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAsB,KAAK,iCAAiC,EAAE,KAAK,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAU/H,MAAM,WAAW,wBAAwB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACrC,gBAAgB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC;IACjD,OAAO,EAAE,mBAAmB,CAAC;IAC7B,SAAS,EAAE,oBAAoB,CAAC;CAChC;AAED,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,EAAE,wBAAwB,KAAK,MAAM,GAAG,SAAS,CAAC;AAE5F,MAAM,WAAW,qBAAsB,SAAQ,mBAAmB;IACjE,IAAI,CAAC,EAAE,SAAS,iCAAiC,EAAE,CAAC;IACpD,MAAM,EAAE,mBAAmB,CAAC;CAC5B;AAqDD,wBAAgB,YAAY,CAC3B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,qBAAqB,EAAE,EACpC,MAAM,EAAE,MAAM,GACZ,MAAM,CAeR;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,qBAAqB,GAAG,MAAM,IAAI,CAU3E;AAED,wBAAgB,mBAAmB,IAAI,SAAS,qBAAqB,EAAE,CAEtE"}