@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
@@ -0,0 +1,117 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { basename } from "node:path";
3
+ import { convertPromptItems } from "./sillytavern-importer/items.js";
4
+ import { detectMacros } from "./sillytavern-importer/macros.js";
5
+ import { buildConversionItems, buildPromptMap, findMissingIdentifiers, selectCharacterEntry, } from "./sillytavern-importer/prompt-order.js";
6
+ import { summarizeRegexScripts } from "./sillytavern-importer/regex.js";
7
+ import { buildSillyTavernImportReport } from "./sillytavern-importer/report.js";
8
+ export function importSillyTavernPreset(filePath, characterId) {
9
+ let raw;
10
+ try {
11
+ raw = JSON.parse(readFileSync(filePath, "utf8"));
12
+ }
13
+ catch (err) {
14
+ return { error: `Failed to read or parse ${filePath}: ${err instanceof Error ? err.message : String(err)}` };
15
+ }
16
+ if (!raw || typeof raw !== "object" || Array.isArray(raw)) {
17
+ return { error: "Preset root must be a JSON object." };
18
+ }
19
+ return convertSillyTavernPreset(raw, { sourceName: filePath, sourcePath: filePath, characterId });
20
+ }
21
+ export function convertSillyTavernPreset(raw, options = {}) {
22
+ if (!raw || typeof raw !== "object" || Array.isArray(raw)) {
23
+ return { error: "Preset root must be a JSON object." };
24
+ }
25
+ const preset = raw;
26
+ const fallbackName = typeof preset.preset_name === "string" && preset.preset_name.trim()
27
+ ? preset.preset_name
28
+ : typeof preset.name === "string" && preset.name.trim()
29
+ ? preset.name
30
+ : "imported.json";
31
+ const sourceName = options.sourceName ?? fallbackName;
32
+ const sourcePath = options.sourcePath ?? sourceName;
33
+ const allPrompts = preset.prompts ?? [];
34
+ const promptOrder = preset.prompt_order ?? [];
35
+ const regexScripts = summarizeRegexScripts(preset);
36
+ if (allPrompts.length === 0) {
37
+ return { error: "Preset has no prompts array." };
38
+ }
39
+ const selectedEntry = selectCharacterEntry(promptOrder, options.characterId);
40
+ if (!selectedEntry) {
41
+ const ids = promptOrder.map((entry) => entry.character_id);
42
+ if (ids.length === 0) {
43
+ return { error: "Preset has no prompt_order entries. Choose a character_id and retry." };
44
+ }
45
+ return {
46
+ error: `Multiple character configs found: [${ids.join(", ")}]. Choose a character_id and retry.`,
47
+ };
48
+ }
49
+ const promptMap = buildPromptMap(allPrompts);
50
+ const conversionItems = buildConversionItems(selectedEntry, promptMap);
51
+ const macroUsage = detectMacros(conversionItems);
52
+ const { items, disabledCount, usesLastUserMessage: itemUsesLastUserMessage } = convertPromptItems(conversionItems);
53
+ const missingIdentifiers = findMissingIdentifiers(selectedEntry, promptMap);
54
+ const fileName = basename(sourceName).replace(/\.json$/i, "") || "imported";
55
+ const styleName = preset.names_behavior === 1 ? "names" : preset.names_behavior === 2 ? "nonames" : "default";
56
+ const stackId = normalizeStackId(fileName);
57
+ const variables = buildStaticVariables(macroUsage.detected);
58
+ let usesLastUserMessage = itemUsesLastUserMessage;
59
+ const stack = {
60
+ schemaVersion: 1,
61
+ type: "pi-forge.prompt-stack",
62
+ id: stackId,
63
+ name: preset.preset_name || preset.name || fileName,
64
+ autoActivate: false,
65
+ mode: "replace",
66
+ variables: Object.keys(variables).length > 0 ? variables : undefined,
67
+ context: { allowDuplicateChatHistory: false },
68
+ regex: regexScripts && regexScripts.rules.length > 0 ? { schemaVersion: 1, rules: regexScripts.rules } : undefined,
69
+ items,
70
+ import: {
71
+ source: "sillytavern",
72
+ sourceFile: fileName,
73
+ characterId: selectedEntry.character_id,
74
+ convertedAt: new Date().toISOString(),
75
+ },
76
+ };
77
+ if (macroUsage.detected.has("lastusermessage"))
78
+ usesLastUserMessage = true;
79
+ if (usesLastUserMessage) {
80
+ const chatHistoryItem = items.find((item) => item.kind === "slot" && item.slot === "chat-history");
81
+ if (chatHistoryItem && chatHistoryItem.kind === "slot") {
82
+ chatHistoryItem.options = { includeLastUserMessage: false };
83
+ }
84
+ }
85
+ const report = buildSillyTavernImportReport({
86
+ fileName,
87
+ sourcePath,
88
+ characterId: selectedEntry.character_id,
89
+ stackId,
90
+ styleName: `${styleName} (ST value ${preset.names_behavior ?? "?"})`,
91
+ totalPrompts: allPrompts.length,
92
+ orderItemCount: selectedEntry.order?.length ?? 0,
93
+ items,
94
+ macroUsage,
95
+ disabledCount,
96
+ missingIdentifiers,
97
+ regexScripts,
98
+ variables,
99
+ usesLastUserMessage,
100
+ });
101
+ return {
102
+ stack,
103
+ report,
104
+ };
105
+ }
106
+ function normalizeStackId(fileName) {
107
+ return fileName.replace(/[^a-zA-Z0-9_-]/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, "").toLowerCase() || "imported";
108
+ }
109
+ function buildStaticVariables(detectedMacros) {
110
+ const variables = {};
111
+ if (detectedMacros.has("char"))
112
+ variables.char = "{{char}}";
113
+ if (detectedMacros.has("user"))
114
+ variables.user = "{{user}}";
115
+ return variables;
116
+ }
117
+ //# sourceMappingURL=sillytavern-importer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sillytavern-importer.js","sourceRoot":"","sources":["../src/sillytavern-importer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { PromptRuntime, PromptStack, PromptStackDiagnostic, PromptStackSlotFormat, PromptStackSlotItem } from "./types.ts";
2
+ import { type PromptRenderHelpers, type PromptVariableAccess } from "./render-helpers.ts";
3
+ import { type PromptExtensionOptionsSchema, type PromptRegistryEntry } from "./extension-registry.ts";
4
+ export interface PromptSlotRenderContext {
5
+ item: PromptStackSlotItem;
6
+ stack: PromptStack;
7
+ runtime: PromptRuntime;
8
+ diagnostics: PromptStackDiagnostic[];
9
+ options: Record<string, unknown>;
10
+ helpers: PromptRenderHelpers;
11
+ variables: PromptVariableAccess;
12
+ format: (options?: {
13
+ allowJson?: boolean;
14
+ }) => PromptStackSlotFormat;
15
+ }
16
+ export type PromptSlotRenderer = (context: PromptSlotRenderContext) => string | undefined;
17
+ export interface PromptSlotDefinition extends PromptRegistryEntry {
18
+ options?: PromptExtensionOptionsSchema;
19
+ render: PromptSlotRenderer;
20
+ }
21
+ export declare const SUPPORTED_SLOTS: Set<string>;
22
+ export declare function renderSlotText(item: PromptStackSlotItem, stack: PromptStack, runtime: PromptRuntime, diagnostics: PromptStackDiagnostic[]): string;
23
+ export declare function registerSlot(definition: PromptSlotDefinition): () => void;
24
+ export declare function getRegisteredSlots(): readonly PromptSlotDefinition[];
25
+ //# sourceMappingURL=slot-renderers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slot-renderers.d.ts","sourceRoot":"","sources":["../src/slot-renderers.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACX,aAAa,EACb,WAAW,EACX,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EAEnB,MAAM,YAAY,CAAC;AACpB,OAAO,EAMN,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EAEzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAsB,KAAK,4BAA4B,EAAE,KAAK,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE1H,MAAM,WAAW,uBAAuB;IACvC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,aAAa,CAAC;IACvB,WAAW,EAAE,qBAAqB,EAAE,CAAC;IACrC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,OAAO,EAAE,mBAAmB,CAAC;IAC7B,SAAS,EAAE,oBAAoB,CAAC;IAChC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,qBAAqB,CAAC;CACrE;AAED,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,EAAE,uBAAuB,KAAK,MAAM,GAAG,SAAS,CAAC;AAE1F,MAAM,WAAW,oBAAqB,SAAQ,mBAAmB;IAChE,OAAO,CAAC,EAAE,4BAA4B,CAAC;IACvC,MAAM,EAAE,kBAAkB,CAAC;CAC3B;AAmBD,eAAO,MAAM,eAAe,aAA+B,CAAC;AAkE5D,wBAAgB,cAAc,CAC7B,IAAI,EAAE,mBAAmB,EACzB,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,qBAAqB,EAAE,GAClC,MAAM,CAcR;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,oBAAoB,GAAG,MAAM,IAAI,CAczE;AAED,wBAAgB,kBAAkB,IAAI,SAAS,oBAAoB,EAAE,CAEpE"}
@@ -0,0 +1,334 @@
1
+ import { dirname, join } from "node:path";
2
+ import { fileURLToPath } from "node:url";
3
+ import { applyResourcePolicy } from "./policy.js";
4
+ import { collectStaticVariables, createVariableAccess, promptRenderHelpers, selectedToolNames, selectedVariableScopes, } from "./render-helpers.js";
5
+ import { assertRegistryName } from "./extension-registry.js";
6
+ function slotRegistryState() {
7
+ const globalScope = globalThis;
8
+ globalScope.__piForgeSlotRegistry ??= { slots: new Map(), supportedSlots: new Set() };
9
+ return globalScope.__piForgeSlotRegistry;
10
+ }
11
+ const SLOT_REGISTRY = slotRegistryState();
12
+ const SLOT_RENDERERS = SLOT_REGISTRY.slots;
13
+ export const SUPPORTED_SLOTS = SLOT_REGISTRY.supportedSlots;
14
+ let registeringBuiltInSlots = true;
15
+ const FORMAT_OPTION = {
16
+ type: "enum",
17
+ values: ["xml", "plain"],
18
+ default: "xml",
19
+ description: "Render as XML-style wrappers or compact plain text.",
20
+ };
21
+ const INCLUDE_TIME_OPTION = {
22
+ type: "boolean",
23
+ default: false,
24
+ description: "Include Current time: HH:MM:SS after the current date.",
25
+ };
26
+ registerSlot({ name: "chat-history", description: "Conversation history insertion point.", render: () => "" });
27
+ registerSlot({
28
+ name: "tools",
29
+ description: "Available tools and prompt snippets.",
30
+ options: {
31
+ format: FORMAT_OPTION,
32
+ onlyWithSnippets: { type: "boolean", default: false, description: "Only render tools that provide prompt snippets." },
33
+ },
34
+ render: renderTools,
35
+ });
36
+ registerSlot({
37
+ name: "tool-guidelines",
38
+ description: "Tool usage guidelines.",
39
+ options: {
40
+ format: FORMAT_OPTION,
41
+ heading: { type: "string", default: "Tool guidelines:", description: "Plain-format heading." },
42
+ includePiDefaultGuidelines: { type: "boolean", default: false, description: "Include Pi's default concise/file-path guideline bullets." },
43
+ piStyle: { type: "boolean", default: false, description: "Use Pi-style wording for default bash guidance." },
44
+ },
45
+ render: renderToolGuidelines,
46
+ });
47
+ registerSlot({
48
+ name: "skills",
49
+ description: "Available Pi skills.",
50
+ options: {
51
+ format: FORMAT_OPTION,
52
+ requireReadTool: { type: "boolean", default: false, description: "Omit the section unless the read tool is active." },
53
+ },
54
+ render: renderSkills,
55
+ });
56
+ registerSlot({ name: "project-context", description: "Project context files.", options: { format: FORMAT_OPTION }, render: renderProjectContext });
57
+ registerSlot({ name: "append-system-prompt", description: "User appended system prompt text.", render: ({ runtime }) => runtime.options.appendSystemPrompt ?? "" });
58
+ registerSlot({ name: "date", description: "Current date.", options: { includeTime: INCLUDE_TIME_OPTION }, render: renderDate });
59
+ registerSlot({ name: "cwd", description: "Current working directory.", render: ({ runtime }) => renderCwd(runtime) });
60
+ registerSlot({ name: "date-cwd", description: "Current date and working directory.", options: { includeTime: INCLUDE_TIME_OPTION }, render: (context) => [renderDate(context), renderCwd(context.runtime)].join("\n") });
61
+ registerSlot({ name: "active-model", description: "Current model provider/id.", render: ({ runtime }) => renderActiveModel(runtime) });
62
+ registerSlot({ name: "pi-docs", description: "Pi documentation guidance.", render: () => renderPiDocsGuidance() });
63
+ registerSlot({
64
+ name: "variables",
65
+ description: "Static, session, and turn variables.",
66
+ options: {
67
+ format: FORMAT_OPTION,
68
+ includeStatic: { type: "boolean", default: true, description: "Include static stack variables." },
69
+ includeSession: { type: "boolean", default: true, description: "Include session variables." },
70
+ includeTurn: { type: "boolean", default: true, description: "Include turn variables." },
71
+ },
72
+ render: renderVariables,
73
+ });
74
+ registeringBuiltInSlots = false;
75
+ export function renderSlotText(item, stack, runtime, diagnostics) {
76
+ const definition = SLOT_RENDERERS.get(item.slot);
77
+ if (!definition) {
78
+ diagnostics.push({ level: "warning", message: `Unsupported slot: ${item.slot}`, itemId: item.id });
79
+ return "";
80
+ }
81
+ try {
82
+ return definition.render(createSlotRenderContext(item, stack, runtime, diagnostics)) ?? "";
83
+ }
84
+ catch (error) {
85
+ const detail = error instanceof Error ? error.message : String(error);
86
+ diagnostics.push({ level: "error", message: `Slot "${item.slot}" failed: ${detail}`, itemId: item.id });
87
+ return "";
88
+ }
89
+ }
90
+ export function registerSlot(definition) {
91
+ assertRegistryName("Slot", definition.name);
92
+ if (SLOT_RENDERERS.has(definition.name)) {
93
+ if (registeringBuiltInSlots)
94
+ return () => { };
95
+ throw new Error(`Slot is already registered: ${definition.name}`);
96
+ }
97
+ SLOT_RENDERERS.set(definition.name, definition);
98
+ SUPPORTED_SLOTS.add(definition.name);
99
+ return () => {
100
+ if (SLOT_RENDERERS.get(definition.name) === definition) {
101
+ SLOT_RENDERERS.delete(definition.name);
102
+ SUPPORTED_SLOTS.delete(definition.name);
103
+ }
104
+ };
105
+ }
106
+ export function getRegisteredSlots() {
107
+ return [...SLOT_RENDERERS.values()];
108
+ }
109
+ function createSlotRenderContext(item, stack, runtime, diagnostics) {
110
+ return {
111
+ item,
112
+ stack,
113
+ runtime,
114
+ diagnostics,
115
+ options: item.options ?? {},
116
+ helpers: promptRenderHelpers,
117
+ variables: createVariableAccess(runtime, stack),
118
+ format: (options) => promptRenderHelpers.slotTextFormat(item, options),
119
+ };
120
+ }
121
+ function renderTools({ item, stack, runtime, format, helpers }) {
122
+ const snippets = runtime.options.toolSnippets ?? {};
123
+ const tools = item.options?.onlyWithSnippets === true
124
+ ? selectedToolNames(stack, runtime).filter((name) => !!snippets[name])
125
+ : selectedToolNames(stack, runtime);
126
+ if (format() === "plain") {
127
+ const lines = ["Available tools:"];
128
+ if (tools.length === 0) {
129
+ lines.push(item.options?.onlyWithSnippets === true ? "(none)" : "- (none)");
130
+ }
131
+ else {
132
+ for (const name of tools) {
133
+ lines.push(helpers.plainBullet(name, snippets[name] ?? "No prompt snippet provided."));
134
+ }
135
+ }
136
+ return lines.join("\n");
137
+ }
138
+ const lines = ["<available_tools>"];
139
+ if (tools.length === 0) {
140
+ lines.push(" (none)");
141
+ }
142
+ else {
143
+ for (const name of tools) {
144
+ const snippet = snippets[name] ?? "No prompt snippet provided.";
145
+ lines.push(` <tool name=\"${helpers.escapeXml(name)}\">${helpers.escapeXml(snippet)}</tool>`);
146
+ }
147
+ }
148
+ lines.push("</available_tools>");
149
+ return lines.join("\n");
150
+ }
151
+ function renderToolGuidelines({ item, stack, runtime, format, helpers }) {
152
+ const tools = selectedToolNames(stack, runtime);
153
+ const guidelines = [];
154
+ const seen = new Set();
155
+ const add = (line) => {
156
+ const normalized = line.trim();
157
+ if (!normalized || seen.has(normalized))
158
+ return;
159
+ seen.add(normalized);
160
+ guidelines.push(normalized);
161
+ };
162
+ if (tools.includes("bash") && !tools.includes("grep") && !tools.includes("find") && !tools.includes("ls")) {
163
+ add(item.options?.piStyle === true ? "Use bash for file operations like ls, rg, find" : "Use bash for file operations like ls, rg, find.");
164
+ }
165
+ for (const guideline of runtime.options.promptGuidelines ?? [])
166
+ add(guideline);
167
+ if (item.options?.includePiDefaultGuidelines === true) {
168
+ add("Be concise in your responses");
169
+ add("Show file paths clearly when working with files");
170
+ }
171
+ if (guidelines.length === 0)
172
+ return "";
173
+ if (format() === "plain") {
174
+ const heading = typeof item.options?.heading === "string" ? item.options.heading.trim() : "Tool guidelines:";
175
+ return [
176
+ ...(heading ? [heading] : []),
177
+ ...guidelines.map((line) => `- ${helpers.plainContinuation(line, " ")}`),
178
+ ].join("\n");
179
+ }
180
+ return ["<tool_guidelines>", ...guidelines.map((line) => `- ${line}`), "</tool_guidelines>"].join("\n");
181
+ }
182
+ function renderSkills({ item, stack, runtime, format, helpers }) {
183
+ if (item.options?.requireReadTool === true && !selectedToolNames(stack, runtime).includes("read"))
184
+ return "";
185
+ const skills = (runtime.options.skills ?? [])
186
+ .filter((skill) => !skill.disableModelInvocation)
187
+ .filter((skill) => applyResourcePolicy([skill.name], stack.skills).length > 0);
188
+ if (skills.length === 0)
189
+ return "";
190
+ const lines = [
191
+ "The following skills provide specialized instructions for specific tasks.",
192
+ "Use the read tool to load a skill's file when the task matches its description.",
193
+ "When a skill file references a relative path, resolve it against the skill directory (parent of SKILL.md / dirname of the path) and use that absolute path in tool commands.",
194
+ "",
195
+ ];
196
+ if (format() === "plain") {
197
+ lines.push("Available skills:");
198
+ for (const skill of skills) {
199
+ lines.push(helpers.plainBullet(skill.name, skill.description));
200
+ lines.push(` Location: ${helpers.plainContinuation(skill.filePath, " ")}`);
201
+ }
202
+ return lines.join("\n");
203
+ }
204
+ lines.push("<available_skills>");
205
+ for (const skill of skills) {
206
+ lines.push(" <skill>");
207
+ lines.push(` <name>${helpers.escapeXml(skill.name)}</name>`);
208
+ lines.push(` <description>${helpers.escapeXml(skill.description)}</description>`);
209
+ lines.push(` <location>${helpers.escapeXml(skill.filePath)}</location>`);
210
+ lines.push(" </skill>");
211
+ }
212
+ lines.push("</available_skills>");
213
+ return lines.join("\n");
214
+ }
215
+ function renderProjectContext({ item, runtime, format, helpers }) {
216
+ const contextFiles = runtime.options.contextFiles ?? [];
217
+ if (contextFiles.length === 0)
218
+ return "";
219
+ if (format() === "plain") {
220
+ const lines = ["Project context:", "", "Project-specific instructions and guidelines:", ""];
221
+ for (const file of contextFiles) {
222
+ lines.push(`Path: ${file.path}`);
223
+ lines.push(helpers.indentPlainBlock(file.content, " "), "");
224
+ }
225
+ return lines.join("\n").trimEnd();
226
+ }
227
+ const lines = ["<project_context>", "", "Project-specific instructions and guidelines:", ""];
228
+ for (const file of contextFiles) {
229
+ lines.push(`<project_instructions path=\"${helpers.escapeXml(file.path)}\">`);
230
+ lines.push(file.content);
231
+ lines.push("</project_instructions>", "");
232
+ }
233
+ lines.push("</project_context>");
234
+ return lines.join("\n");
235
+ }
236
+ function renderDate({ item, runtime, helpers }) {
237
+ const lines = [`Current date: ${helpers.formatDate(runtime.now)}`];
238
+ if (item.options?.includeTime === true) {
239
+ lines.push(`Current time: ${helpers.formatTime(runtime.now)}`);
240
+ }
241
+ return lines.join("\n");
242
+ }
243
+ function renderCwd(runtime) {
244
+ return `Current working directory: ${promptRenderHelpers.normalizePath(runtime.options.cwd)}`;
245
+ }
246
+ function renderActiveModel(runtime) {
247
+ const model = runtime.ctx?.model;
248
+ return model ? `Current model: ${model.provider}/${model.id}` : "Current model: (none)";
249
+ }
250
+ function renderPiDocsGuidance() {
251
+ const paths = piDocsPaths();
252
+ return [
253
+ "Pi documentation (read only when the user asks about pi itself, its SDK, extensions, themes, skills, or TUI):",
254
+ `- Main documentation: ${paths.readme}`,
255
+ `- Additional docs: ${paths.docs}`,
256
+ `- Examples: ${paths.examples} (extensions, custom tools, SDK)`,
257
+ "- When reading pi docs or examples, resolve docs/... under Additional docs and examples/... under Examples, not the current working directory",
258
+ "- When asked about: extensions (docs/extensions.md, examples/extensions/), themes (docs/themes.md), skills (docs/skills.md), prompt templates (docs/prompt-templates.md), TUI components (docs/tui.md), keybindings (docs/keybindings.md), SDK integrations (docs/sdk.md), custom providers (docs/custom-provider.md), adding models (docs/models.md), pi packages (docs/packages.md)",
259
+ "- When working on pi topics, read the docs and examples, and follow .md cross-references before implementing",
260
+ "- Always read pi .md files completely and follow links to related docs (e.g., tui.md for TUI API details)",
261
+ ].join("\n");
262
+ }
263
+ function piDocsPaths() {
264
+ const fallbackRoot = "@earendil-works/pi-coding-agent";
265
+ try {
266
+ const resolve = import.meta.resolve;
267
+ if (!resolve)
268
+ throw new Error("import.meta.resolve unavailable");
269
+ const resolved = resolve("@earendil-works/pi-coding-agent");
270
+ if (!resolved.startsWith("file:"))
271
+ throw new Error("non-file package resolution");
272
+ const packageRoot = dirname(dirname(fileURLToPath(resolved)));
273
+ return {
274
+ readme: join(packageRoot, "README.md"),
275
+ docs: join(packageRoot, "docs"),
276
+ examples: join(packageRoot, "examples"),
277
+ };
278
+ }
279
+ catch {
280
+ return {
281
+ readme: `${fallbackRoot}/README.md`,
282
+ docs: `${fallbackRoot}/docs`,
283
+ examples: `${fallbackRoot}/examples`,
284
+ };
285
+ }
286
+ }
287
+ function renderVariables({ stack, runtime, options, format, variables, helpers }) {
288
+ const scopes = selectedVariableScopes(options);
289
+ const store = runtime.variables;
290
+ const grouped = {
291
+ static: {},
292
+ session: {},
293
+ turn: {},
294
+ };
295
+ if (scopes.includes("static"))
296
+ grouped.static = collectStaticVariables(stack);
297
+ if (scopes.includes("session"))
298
+ grouped.session = { ...(store?.session ?? {}) };
299
+ if (scopes.includes("turn"))
300
+ grouped.turn = { ...(store?.turn ?? {}) };
301
+ const hasVariables = Object.values(grouped).some((values) => Object.keys(values).length > 0);
302
+ if (!hasVariables)
303
+ return "";
304
+ if (format() === "plain") {
305
+ return renderPlainVariables(grouped, variables, helpers);
306
+ }
307
+ const parts = ["<variables>"];
308
+ for (const scope of scopes) {
309
+ const entries = Object.entries(grouped[scope]).sort(([a], [b]) => a.localeCompare(b));
310
+ if (entries.length === 0)
311
+ continue;
312
+ parts.push(` <${scope}>`);
313
+ for (const [name, value] of entries) {
314
+ parts.push(` <var name=\"${helpers.escapeXml(name)}\">${helpers.escapeXml(variables.toPromptText(value))}</var>`);
315
+ }
316
+ parts.push(` </${scope}>`);
317
+ }
318
+ parts.push("</variables>");
319
+ return parts.join("\n");
320
+ }
321
+ function renderPlainVariables(grouped, variables, helpers) {
322
+ const parts = ["Variables:"];
323
+ for (const scope of ["static", "session", "turn"]) {
324
+ const entries = Object.entries(grouped[scope]).sort(([a], [b]) => a.localeCompare(b));
325
+ if (entries.length === 0)
326
+ continue;
327
+ parts.push(`${scope}:`);
328
+ for (const [name, value] of entries) {
329
+ parts.push(helpers.plainBullet(name, variables.toPromptText(value)));
330
+ }
331
+ }
332
+ return parts.join("\n");
333
+ }
334
+ //# sourceMappingURL=slot-renderers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slot-renderers.js","sourceRoot":"","sources":["../src/slot-renderers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ export interface PromptStackMigrationOptions {
2
+ dryRun?: boolean;
3
+ overwrite?: boolean;
4
+ deleteLegacy?: boolean;
5
+ }
6
+ export interface PromptStackMigrationFile {
7
+ name: string;
8
+ sourcePath: string;
9
+ targetPath: string;
10
+ action: "copy" | "overwrite" | "skip" | "error";
11
+ reason?: string;
12
+ deleteLegacy: boolean;
13
+ }
14
+ export interface PromptStackMigrationReport {
15
+ sourceDir: string;
16
+ targetDir: string;
17
+ dryRun: boolean;
18
+ overwrite: boolean;
19
+ deleteLegacy: boolean;
20
+ files: PromptStackMigrationFile[];
21
+ copied: number;
22
+ overwritten: number;
23
+ skipped: number;
24
+ errors: number;
25
+ deletedLegacy: number;
26
+ }
27
+ export declare function migrateLegacyPromptStacks(cwd: string, options?: PromptStackMigrationOptions): PromptStackMigrationReport;
28
+ export declare function renderMigrationReport(report: PromptStackMigrationReport): string;
29
+ //# sourceMappingURL=stack-migration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack-migration.d.ts","sourceRoot":"","sources":["../src/stack-migration.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,2BAA2B;IAC3C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,wBAAwB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,GAAG,OAAO,CAAC;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,0BAA0B;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,wBAAwB,EAAE,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,2BAAgC,GAAG,0BAA0B,CAqF5H;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,0BAA0B,GAAG,MAAM,CAsChF"}