@zihanw/pi-forge 0.4.1 → 0.5.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.
- package/CHANGELOG.md +79 -1
- package/README.md +12 -11
- package/README.zh-CN.md +3 -5
- package/SUBAGENT_ADAPTER_CONTRACT.md +3 -1
- package/dist/agent-profile.d.ts +18 -62
- package/dist/agent-profile.d.ts.map +1 -1
- package/dist/agent-profile.js +27 -249
- package/dist/agent-profile.js.map +1 -1
- package/dist/codecs/agent-profile.d.ts +53 -0
- package/dist/codecs/agent-profile.d.ts.map +1 -0
- package/dist/codecs/agent-profile.js +176 -0
- package/dist/codecs/agent-profile.js.map +1 -0
- package/dist/codecs/index.d.ts +5 -0
- package/dist/codecs/index.d.ts.map +1 -0
- package/dist/codecs/index.js +3 -0
- package/dist/codecs/index.js.map +1 -0
- package/dist/codecs/prompt-stack.d.ts +18 -0
- package/dist/codecs/prompt-stack.d.ts.map +1 -0
- package/dist/codecs/prompt-stack.js +479 -0
- package/dist/codecs/prompt-stack.js.map +1 -0
- package/dist/compile-cycle.d.ts +18 -0
- package/dist/compile-cycle.d.ts.map +1 -0
- package/dist/compile-cycle.js +13 -0
- package/dist/compile-cycle.js.map +1 -0
- package/dist/compiler.d.ts +10 -4
- package/dist/compiler.d.ts.map +1 -1
- package/dist/compiler.js +53 -19
- package/dist/compiler.js.map +1 -1
- package/dist/context-diff-history.d.ts +61 -0
- package/dist/context-diff-history.d.ts.map +1 -0
- package/dist/context-diff-history.js +84 -0
- package/dist/context-diff-history.js.map +1 -0
- package/dist/context-diff-snapshot.d.ts +19 -0
- package/dist/context-diff-snapshot.d.ts.map +1 -0
- package/dist/context-diff-snapshot.js +146 -0
- package/dist/context-diff-snapshot.js.map +1 -0
- package/dist/context-diff.d.ts +70 -0
- package/dist/context-diff.d.ts.map +1 -0
- package/dist/context-diff.js +259 -0
- package/dist/context-diff.js.map +1 -0
- package/dist/extension-registry.d.ts.map +1 -1
- package/dist/extension-registry.js +5 -2
- package/dist/extension-registry.js.map +1 -1
- package/dist/forge-config.d.ts +0 -105
- package/dist/forge-config.d.ts.map +1 -1
- package/dist/forge-config.js +1 -313
- package/dist/forge-config.js.map +1 -1
- package/dist/forge-v1/analyzer.d.ts +3 -0
- package/dist/forge-v1/analyzer.d.ts.map +1 -0
- package/dist/forge-v1/analyzer.js +50 -0
- package/dist/forge-v1/analyzer.js.map +1 -0
- package/dist/forge-v1/index.d.ts +6 -0
- package/dist/forge-v1/index.d.ts.map +1 -0
- package/dist/forge-v1/index.js +13 -0
- package/dist/forge-v1/index.js.map +1 -0
- package/dist/forge-v1/parser.d.ts +3 -0
- package/dist/forge-v1/parser.d.ts.map +1 -0
- package/dist/forge-v1/parser.js +186 -0
- package/dist/forge-v1/parser.js.map +1 -0
- package/dist/forge-v1/renderer.d.ts +9 -0
- package/dist/forge-v1/renderer.d.ts.map +1 -0
- package/dist/forge-v1/renderer.js +181 -0
- package/dist/forge-v1/renderer.js.map +1 -0
- package/dist/forge-v1/types.d.ts +87 -0
- package/dist/forge-v1/types.d.ts.map +1 -0
- package/dist/forge-v1/types.js +4 -0
- package/dist/forge-v1/types.js.map +1 -0
- package/dist/index.d.ts +12 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +54 -83
- package/dist/index.js.map +1 -1
- package/dist/lifecycle.d.ts +8 -5
- package/dist/lifecycle.d.ts.map +1 -1
- package/dist/lifecycle.js +45 -112
- package/dist/lifecycle.js.map +1 -1
- package/dist/loader.d.ts +5 -8
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +10 -467
- package/dist/loader.js.map +1 -1
- package/dist/macro-engine.d.ts +9 -14
- package/dist/macro-engine.d.ts.map +1 -1
- package/dist/macro-engine.js +5 -238
- package/dist/macro-engine.js.map +1 -1
- package/dist/payload-capture.d.ts +10 -0
- package/dist/payload-capture.d.ts.map +1 -1
- package/dist/payload-capture.js +39 -9
- package/dist/payload-capture.js.map +1 -1
- package/dist/payload-command.d.ts +8 -6
- package/dist/payload-command.d.ts.map +1 -1
- package/dist/payload-command.js +36 -6
- package/dist/payload-command.js.map +1 -1
- package/dist/payload-state.d.ts +19 -0
- package/dist/payload-state.d.ts.map +1 -0
- package/dist/payload-state.js +19 -0
- package/dist/payload-state.js.map +1 -0
- package/dist/preset-command.d.ts +4 -4
- package/dist/preset-command.d.ts.map +1 -1
- package/dist/preset-command.js +33 -104
- package/dist/preset-command.js.map +1 -1
- package/dist/preview.d.ts +4 -4
- package/dist/preview.d.ts.map +1 -1
- package/dist/preview.js +34 -11
- package/dist/preview.js.map +1 -1
- package/dist/profile-command.d.ts +2 -2
- package/dist/profile-command.d.ts.map +1 -1
- package/dist/profile-command.js +15 -14
- package/dist/profile-command.js.map +1 -1
- package/dist/profile-service.d.ts.map +1 -1
- package/dist/profile-service.js +23 -39
- package/dist/profile-service.js.map +1 -1
- package/dist/prompt-analysis.d.ts +24 -0
- package/dist/prompt-analysis.d.ts.map +1 -0
- package/dist/prompt-analysis.js +84 -0
- package/dist/prompt-analysis.js.map +1 -0
- package/dist/prompt-runtime.d.ts +19 -0
- package/dist/prompt-runtime.d.ts.map +1 -0
- package/dist/prompt-runtime.js +30 -0
- package/dist/prompt-runtime.js.map +1 -0
- package/dist/regex.js +6 -12
- package/dist/regex.js.map +1 -1
- package/dist/render-helpers.d.ts +2 -10
- package/dist/render-helpers.d.ts.map +1 -1
- package/dist/render-helpers.js +3 -53
- package/dist/render-helpers.js.map +1 -1
- package/dist/repositories/agent-profile.d.ts +36 -0
- package/dist/repositories/agent-profile.d.ts.map +1 -0
- package/dist/repositories/agent-profile.js +153 -0
- package/dist/repositories/agent-profile.js.map +1 -0
- package/dist/repositories/index.d.ts +3 -0
- package/dist/repositories/index.d.ts.map +1 -0
- package/dist/repositories/index.js +3 -0
- package/dist/repositories/index.js.map +1 -0
- package/dist/repositories/prompt-stack.d.ts +57 -0
- package/dist/repositories/prompt-stack.d.ts.map +1 -0
- package/dist/repositories/prompt-stack.js +175 -0
- package/dist/repositories/prompt-stack.js.map +1 -0
- package/dist/runtime/profile-runtime.d.ts +2 -2
- package/dist/runtime/profile-runtime.d.ts.map +1 -1
- package/dist/runtime/profile-runtime.js +13 -10
- package/dist/runtime/profile-runtime.js.map +1 -1
- package/dist/runtime/prompt-stack-runtime.d.ts +4 -3
- package/dist/runtime/prompt-stack-runtime.d.ts.map +1 -1
- package/dist/runtime/prompt-stack-runtime.js +42 -57
- package/dist/runtime/prompt-stack-runtime.js.map +1 -1
- package/dist/runtime/tool-policy-runtime.d.ts +2 -2
- package/dist/runtime/tool-policy-runtime.d.ts.map +1 -1
- package/dist/runtime/tool-policy-runtime.js +16 -6
- package/dist/runtime/tool-policy-runtime.js.map +1 -1
- package/dist/runtime/web-editor-runtime.d.ts +2 -1
- package/dist/runtime/web-editor-runtime.d.ts.map +1 -1
- package/dist/runtime/web-editor-runtime.js +8 -3
- package/dist/runtime/web-editor-runtime.js.map +1 -1
- package/dist/session-adapter.d.ts +17 -0
- package/dist/session-adapter.d.ts.map +1 -0
- package/dist/session-adapter.js +57 -0
- package/dist/session-adapter.js.map +1 -0
- package/dist/slot-renderers.d.ts +16 -3
- package/dist/slot-renderers.d.ts.map +1 -1
- package/dist/slot-renderers.js +15 -63
- package/dist/slot-renderers.js.map +1 -1
- package/dist/stack-migration.d.ts +6 -0
- package/dist/stack-migration.d.ts.map +1 -1
- package/dist/stack-migration.js +49 -52
- package/dist/stack-migration.js.map +1 -1
- package/dist/subagent/fingerprints.d.ts +24 -0
- package/dist/subagent/fingerprints.d.ts.map +1 -0
- package/dist/subagent/fingerprints.js +81 -0
- package/dist/subagent/fingerprints.js.map +1 -0
- package/dist/subagent/host-port.d.ts +296 -0
- package/dist/subagent/host-port.d.ts.map +1 -0
- package/dist/subagent/host-port.js +560 -0
- package/dist/subagent/host-port.js.map +1 -0
- package/dist/subagent/index.d.ts +10 -10
- package/dist/subagent/index.d.ts.map +1 -1
- package/dist/subagent/index.js +9 -10
- package/dist/subagent/index.js.map +1 -1
- package/dist/subagent-host.d.ts +99 -18
- package/dist/subagent-host.d.ts.map +1 -1
- package/dist/subagent-host.js +143 -146
- package/dist/subagent-host.js.map +1 -1
- package/dist/template-render.d.ts +18 -0
- package/dist/template-render.d.ts.map +1 -0
- package/dist/template-render.js +232 -0
- package/dist/template-render.js.map +1 -0
- package/dist/types.d.ts +40 -27
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/ui-contribution/contrib-port.d.ts +170 -0
- package/dist/ui-contribution/contrib-port.d.ts.map +1 -0
- package/dist/ui-contribution/contrib-port.js +640 -0
- package/dist/ui-contribution/contrib-port.js.map +1 -0
- package/dist/ui-contribution/index.d.ts +3 -0
- package/dist/ui-contribution/index.d.ts.map +1 -0
- package/dist/ui-contribution/index.js +2 -0
- package/dist/ui-contribution/index.js.map +1 -0
- package/dist/web-editor/client-script.generated.d.ts.map +1 -1
- package/dist/web-editor/client-script.generated.js +1 -1
- package/dist/web-editor/client-script.generated.js.map +1 -1
- package/dist/web-editor/client-styles.generated.d.ts.map +1 -1
- package/dist/web-editor/client-styles.generated.js +1 -1
- package/dist/web-editor/client-styles.generated.js.map +1 -1
- package/dist/web-editor/contrib-service.d.ts +41 -0
- package/dist/web-editor/contrib-service.d.ts.map +1 -0
- package/dist/web-editor/contrib-service.js +174 -0
- package/dist/web-editor/contrib-service.js.map +1 -0
- package/dist/web-editor/line-diff.d.ts +28 -0
- package/dist/web-editor/line-diff.d.ts.map +1 -0
- package/dist/web-editor/line-diff.js +216 -0
- package/dist/web-editor/line-diff.js.map +1 -0
- package/dist/web-editor/schema-form.d.ts +63 -0
- package/dist/web-editor/schema-form.d.ts.map +1 -0
- package/dist/web-editor/schema-form.js +213 -0
- package/dist/web-editor/schema-form.js.map +1 -0
- package/dist/web-editor/server.d.ts.map +1 -1
- package/dist/web-editor/server.js +72 -74
- package/dist/web-editor/server.js.map +1 -1
- package/dist/web-editor/styles.d.ts.map +1 -1
- package/dist/web-editor/styles.js +201 -21
- package/dist/web-editor/styles.js.map +1 -1
- package/dist/web-editor/types.d.ts +12 -35
- package/dist/web-editor/types.d.ts.map +1 -1
- package/dist/web-host.d.ts +6 -2
- package/dist/web-host.d.ts.map +1 -1
- package/dist/web-host.js +33 -103
- package/dist/web-host.js.map +1 -1
- package/dist/workspace.d.ts +74 -0
- package/dist/workspace.d.ts.map +1 -0
- package/dist/workspace.js +351 -0
- package/dist/workspace.js.map +1 -0
- package/docs/README.md +7 -4
- package/docs/concepts/agent-profiles.md +1 -1
- package/docs/concepts/prompt-stacks.md +5 -5
- package/docs/design/0.5.1-plan.md +237 -0
- package/docs/design/README.md +21 -3
- package/docs/design/architecture-0.5.md +222 -0
- package/docs/design/archive/0.5-full-proposal/0.5-consumer-audit.md +62 -0
- package/docs/design/archive/0.5-full-proposal/0.5-inventory.md +208 -0
- package/docs/design/archive/0.5-full-proposal/0.5-phase0-decision-drafts.md +237 -0
- package/docs/design/archive/0.5-full-proposal/README.md +12 -0
- package/docs/design/archive/0.5-full-proposal/architecture-0.5.md +423 -0
- package/docs/design/archive/0.5-full-proposal/host-discovery-spike.md +103 -0
- package/docs/design/archive/0.5-full-proposal/template-language-spike.md +156 -0
- package/docs/design/context-diff-plan.md +78 -0
- package/docs/design/decision-template.md +33 -0
- package/docs/design/roadmap-0.4-archive.md +1 -1
- package/docs/design/subagents/interface-design.md +1 -1
- package/docs/development/architecture-rules.md +148 -0
- package/docs/development/release.md +7 -1
- package/docs/development/roadmap.md +37 -5
- package/docs/development/scoped-global-profiles-stacks.md +1 -1
- package/docs/development/setup.md +6 -4
- package/docs/getting-started.md +5 -4
- package/docs/guides/custom-macros-and-slots.md +8 -7
- package/docs/guides/debugging.md +1 -1
- package/docs/guides/delegation.md +18 -22
- package/docs/guides/migrating-to-0.5.md +107 -0
- package/docs/guides/use-cases.md +7 -11
- package/docs/guides/web-editor.md +6 -10
- package/docs/reference/commands.md +4 -3
- package/docs/reference/configuration.md +17 -18
- package/docs/reference/features.md +34 -80
- package/docs/reference/macros-and-slots.md +70 -49
- package/docs/reference/public-api.md +76 -17
- package/docs/reference/stack-schema.md +15 -10
- package/docs/reference/subagent-host-port.md +49 -0
- package/docs/reference/ui-contribution-port.md +51 -0
- package/docs/zh-CN/README.md +3 -3
- package/docs/zh-CN/concepts/agent-profiles.md +1 -1
- package/docs/zh-CN/concepts/prompt-stacks.md +5 -5
- package/docs/zh-CN/getting-started.md +3 -2
- package/docs/zh-CN/guides/delegation.md +10 -12
- package/docs/zh-CN/guides/migrating-to-0.5.md +92 -0
- package/docs/zh-CN/guides/web-editor.md +4 -4
- package/docs/zh-CN/reference/commands.md +3 -2
- package/examples/custom-system-status-extension/README.md +3 -3
- package/examples/custom-system-status-extension/index.ts +2 -1
- package/examples/custom-system-status-extension/prompt-stack.json +4 -3
- package/examples/default-prompt-stack.json +9 -4
- package/examples/image-reader-prompt-stack.json +16 -26
- package/examples/reviewer-prompt-stack.json +13 -24
- package/package.json +106 -120
- package/dist/runtime/subagent-runtime.d.ts +0 -45
- package/dist/runtime/subagent-runtime.d.ts.map +0 -1
- package/dist/runtime/subagent-runtime.js +0 -343
- package/dist/runtime/subagent-runtime.js.map +0 -1
- package/dist/runtime-state.d.ts +0 -30
- package/dist/runtime-state.d.ts.map +0 -1
- package/dist/runtime-state.js +0 -17
- package/dist/runtime-state.js.map +0 -1
- package/dist/sillytavern-importer/items.d.ts +0 -3
- package/dist/sillytavern-importer/items.d.ts.map +0 -1
- package/dist/sillytavern-importer/items.js +0 -88
- package/dist/sillytavern-importer/items.js.map +0 -1
- package/dist/sillytavern-importer/macros.d.ts +0 -15
- package/dist/sillytavern-importer/macros.d.ts.map +0 -1
- package/dist/sillytavern-importer/macros.js +0 -141
- package/dist/sillytavern-importer/macros.js.map +0 -1
- package/dist/sillytavern-importer/prompt-order.d.ts +0 -6
- package/dist/sillytavern-importer/prompt-order.d.ts.map +0 -1
- package/dist/sillytavern-importer/prompt-order.js +0 -38
- package/dist/sillytavern-importer/prompt-order.js.map +0 -1
- package/dist/sillytavern-importer/regex.d.ts +0 -3
- package/dist/sillytavern-importer/regex.d.ts.map +0 -1
- package/dist/sillytavern-importer/regex.js +0 -275
- package/dist/sillytavern-importer/regex.js.map +0 -1
- package/dist/sillytavern-importer/report.d.ts +0 -21
- package/dist/sillytavern-importer/report.d.ts.map +0 -1
- package/dist/sillytavern-importer/report.js +0 -166
- package/dist/sillytavern-importer/report.js.map +0 -1
- package/dist/sillytavern-importer/types.d.ts +0 -106
- package/dist/sillytavern-importer/types.d.ts.map +0 -1
- package/dist/sillytavern-importer/types.js +0 -2
- package/dist/sillytavern-importer/types.js.map +0 -1
- package/dist/sillytavern-importer.d.ts +0 -5
- package/dist/sillytavern-importer.d.ts.map +0 -1
- package/dist/sillytavern-importer.js +0 -117
- package/dist/sillytavern-importer.js.map +0 -1
- package/dist/subagent/canonical.d.ts +0 -22
- package/dist/subagent/canonical.d.ts.map +0 -1
- package/dist/subagent/canonical.js +0 -24
- package/dist/subagent/canonical.js.map +0 -1
- package/dist/subagent/context.d.ts +0 -8
- package/dist/subagent/context.d.ts.map +0 -1
- package/dist/subagent/context.js +0 -125
- package/dist/subagent/context.js.map +0 -1
- package/dist/subagent/contract.d.ts +0 -10
- package/dist/subagent/contract.d.ts.map +0 -1
- package/dist/subagent/contract.js +0 -10
- package/dist/subagent/contract.js.map +0 -1
- package/dist/subagent/plan.d.ts +0 -18
- package/dist/subagent/plan.d.ts.map +0 -1
- package/dist/subagent/plan.js +0 -157
- package/dist/subagent/plan.js.map +0 -1
- package/dist/subagent/preflight.d.ts +0 -4
- package/dist/subagent/preflight.d.ts.map +0 -1
- package/dist/subagent/preflight.js +0 -108
- package/dist/subagent/preflight.js.map +0 -1
- package/dist/subagent/request.d.ts +0 -4
- package/dist/subagent/request.d.ts.map +0 -1
- package/dist/subagent/request.js +0 -154
- package/dist/subagent/request.js.map +0 -1
- package/dist/subagent/response.d.ts +0 -8
- package/dist/subagent/response.d.ts.map +0 -1
- package/dist/subagent/response.js +0 -155
- package/dist/subagent/response.js.map +0 -1
- package/dist/subagent/tools.d.ts +0 -4
- package/dist/subagent/tools.d.ts.map +0 -1
- package/dist/subagent/tools.js +0 -42
- package/dist/subagent/tools.js.map +0 -1
- package/dist/subagent/types.d.ts +0 -272
- package/dist/subagent/types.d.ts.map +0 -1
- package/dist/subagent/types.js +0 -3
- package/dist/subagent/types.js.map +0 -1
- package/dist/subagent/validation.d.ts +0 -35
- package/dist/subagent/validation.d.ts.map +0 -1
- package/dist/subagent/validation.js +0 -314
- package/dist/subagent/validation.js.map +0 -1
- package/dist/subagent-command.d.ts +0 -5
- package/dist/subagent-command.d.ts.map +0 -1
- package/dist/subagent-command.js +0 -249
- package/dist/subagent-command.js.map +0 -1
- package/dist/subagent-profile-tool.d.ts +0 -49
- package/dist/subagent-profile-tool.d.ts.map +0 -1
- package/dist/subagent-profile-tool.js +0 -125
- package/dist/subagent-profile-tool.js.map +0 -1
- package/dist/subagent-tool.d.ts +0 -77
- package/dist/subagent-tool.d.ts.map +0 -1
- package/dist/subagent-tool.js +0 -559
- package/dist/subagent-tool.js.map +0 -1
- package/docs/guides/sillytavern-import.md +0 -47
- package/docs/reference/subagent-adapter.md +0 -204
- package/examples/sillytavern-dm-writer-prompt-stack.json +0 -190
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import { forgeV1, FORGE_V1_MAX_EXTENSION_OUTPUT } from "./forge-v1/index.js";
|
|
2
|
+
import { createMacroRenderContext, getRegisteredMacro } from "./macro-engine.js";
|
|
3
|
+
import { selectedToolNames } from "./render-helpers.js";
|
|
4
|
+
export class ForgeTemplateRenderer {
|
|
5
|
+
base;
|
|
6
|
+
extensions = new Map();
|
|
7
|
+
workingExtensions = {};
|
|
8
|
+
resolving = new Set();
|
|
9
|
+
stack;
|
|
10
|
+
constructor(stack, runtime) {
|
|
11
|
+
this.stack = stack;
|
|
12
|
+
this.base = buildPromptEnvironment(stack, runtime);
|
|
13
|
+
}
|
|
14
|
+
render(text, diagnostics, itemId) {
|
|
15
|
+
const parsed = forgeV1.parse(text);
|
|
16
|
+
if (!parsed.ok) {
|
|
17
|
+
diagnostics.push({
|
|
18
|
+
level: "error",
|
|
19
|
+
message: `forge-v1 parse error: ${parsed.error.message}`,
|
|
20
|
+
itemId,
|
|
21
|
+
});
|
|
22
|
+
return "";
|
|
23
|
+
}
|
|
24
|
+
const analyzed = forgeV1.analyze(parsed.ast);
|
|
25
|
+
if (analyzed.errors.length > 0) {
|
|
26
|
+
for (const error of analyzed.errors) {
|
|
27
|
+
diagnostics.push({ level: "error", message: error.message, itemId });
|
|
28
|
+
}
|
|
29
|
+
return "";
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
const env = freezeEnvironment({
|
|
33
|
+
runtime: this.base.runtime,
|
|
34
|
+
parameters: this.base.parameters,
|
|
35
|
+
extensions: { ...this.workingExtensions },
|
|
36
|
+
});
|
|
37
|
+
const result = forgeV1.render(parsed.ast, env, {
|
|
38
|
+
resolveExtension: (name) => this.resolveExtensionForRender(name, diagnostics, itemId),
|
|
39
|
+
});
|
|
40
|
+
if (!result.ok) {
|
|
41
|
+
diagnostics.push({
|
|
42
|
+
level: "error",
|
|
43
|
+
message: `forge-v1 render error: ${result.error.message}`,
|
|
44
|
+
itemId,
|
|
45
|
+
});
|
|
46
|
+
return "";
|
|
47
|
+
}
|
|
48
|
+
return result.text;
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
52
|
+
diagnostics.push({ level: "error", message: `forge-v1 compile error: ${detail}`, itemId });
|
|
53
|
+
return "";
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
environment() {
|
|
57
|
+
return freezeEnvironment({
|
|
58
|
+
runtime: this.base.runtime,
|
|
59
|
+
parameters: this.base.parameters,
|
|
60
|
+
extensions: { ...this.workingExtensions },
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
environmentForDependencies(dependencies, diagnostics, itemId) {
|
|
64
|
+
for (const dependency of dependencies) {
|
|
65
|
+
const name = parseExtensionDependency(dependency);
|
|
66
|
+
if (!name)
|
|
67
|
+
continue;
|
|
68
|
+
try {
|
|
69
|
+
this.resolveExtensionForRender(name, diagnostics, itemId);
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
const message = error && typeof error === "object" && "message" in error
|
|
73
|
+
? String(error.message)
|
|
74
|
+
: String(error);
|
|
75
|
+
diagnostics.push({ level: "error", message, itemId });
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return this.environment();
|
|
79
|
+
}
|
|
80
|
+
setLatestUserMessage(message) {
|
|
81
|
+
if (this.base.runtime.lastUserMessage === message)
|
|
82
|
+
return;
|
|
83
|
+
this.base.runtime.lastUserMessage = message;
|
|
84
|
+
// The extension cache is keyed by name and serves values resolved against a
|
|
85
|
+
// frozen environment snapshot. latestUserMessage is the one captured field
|
|
86
|
+
// that can legitimately change between the system and message phases of a
|
|
87
|
+
// single compilation, so invalidate the cache so macros that read it observe
|
|
88
|
+
// the current value instead of the pre-phase snapshot.
|
|
89
|
+
this.extensions.clear();
|
|
90
|
+
for (const key of Object.keys(this.workingExtensions))
|
|
91
|
+
delete this.workingExtensions[key];
|
|
92
|
+
}
|
|
93
|
+
resolveExtensionForRender(name, diagnostics, itemId) {
|
|
94
|
+
const cached = this.extensions.get(name);
|
|
95
|
+
if (cached !== undefined)
|
|
96
|
+
return cached;
|
|
97
|
+
if (this.resolving.has(name)) {
|
|
98
|
+
const forgeError = {
|
|
99
|
+
kind: "evaluate",
|
|
100
|
+
message: `forge-v1 extension cycle detected at: ${name}`,
|
|
101
|
+
};
|
|
102
|
+
throw forgeError;
|
|
103
|
+
}
|
|
104
|
+
if (this.resolving.size >= 32) {
|
|
105
|
+
const forgeError = {
|
|
106
|
+
kind: "evaluate",
|
|
107
|
+
message: "forge-v1 extension dependency graph is too deep.",
|
|
108
|
+
};
|
|
109
|
+
throw forgeError;
|
|
110
|
+
}
|
|
111
|
+
const definition = getRegisteredMacro(name);
|
|
112
|
+
if (!definition)
|
|
113
|
+
return undefined;
|
|
114
|
+
this.resolving.add(name);
|
|
115
|
+
try {
|
|
116
|
+
// Resolve declared extension dependencies first so the macro's frozen env
|
|
117
|
+
// contains the dependency snapshot it declared.
|
|
118
|
+
if (definition.dependencies) {
|
|
119
|
+
for (const dependency of definition.dependencies) {
|
|
120
|
+
const depName = parseExtensionDependency(dependency);
|
|
121
|
+
if (depName)
|
|
122
|
+
this.resolveExtensionForRender(depName, diagnostics, itemId);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
const env = freezeEnvironment({
|
|
126
|
+
runtime: this.base.runtime,
|
|
127
|
+
parameters: this.base.parameters,
|
|
128
|
+
extensions: { ...this.workingExtensions },
|
|
129
|
+
});
|
|
130
|
+
let value;
|
|
131
|
+
try {
|
|
132
|
+
value = definition.render(createMacroRenderContext(env));
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
136
|
+
throw {
|
|
137
|
+
kind: "evaluate",
|
|
138
|
+
message: `forge-v1 extension ${name} failed: ${detail}`,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
if (value.length > FORGE_V1_MAX_EXTENSION_OUTPUT) {
|
|
142
|
+
const forgeError = {
|
|
143
|
+
kind: "extension-limit",
|
|
144
|
+
message: `forge-v1 extension ${name} exceeds ${FORGE_V1_MAX_EXTENSION_OUTPUT} characters.`,
|
|
145
|
+
};
|
|
146
|
+
throw forgeError;
|
|
147
|
+
}
|
|
148
|
+
this.extensions.set(name, value);
|
|
149
|
+
this.workingExtensions[name] = value;
|
|
150
|
+
return value;
|
|
151
|
+
}
|
|
152
|
+
finally {
|
|
153
|
+
this.resolving.delete(name);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
export function buildPromptEnvironment(stack, runtime) {
|
|
158
|
+
const tools = selectedToolNames(stack, runtime);
|
|
159
|
+
const toolBooleans = {};
|
|
160
|
+
for (const name of tools)
|
|
161
|
+
toolBooleans[name] = true;
|
|
162
|
+
const slotBooleans = {};
|
|
163
|
+
for (const item of stack.items) {
|
|
164
|
+
if (item.kind === "slot" && item.enabled !== false && item.slot)
|
|
165
|
+
slotBooleans[item.slot] = true;
|
|
166
|
+
}
|
|
167
|
+
const params = {};
|
|
168
|
+
if (stack.schemaVersion === 2) {
|
|
169
|
+
Object.assign(params, stack.parameters ?? {});
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
for (const [key, value] of Object.entries(stack.variables ?? {}))
|
|
173
|
+
params[key] = value;
|
|
174
|
+
}
|
|
175
|
+
const model = runtime.model;
|
|
176
|
+
const env = {
|
|
177
|
+
runtime: {
|
|
178
|
+
cwd: runtime.options.cwd,
|
|
179
|
+
date: formatDate(runtime.now),
|
|
180
|
+
time: formatTime(runtime.now),
|
|
181
|
+
lastUserMessage: runtime.latestUserMessage ?? "",
|
|
182
|
+
selectedTools: tools,
|
|
183
|
+
selectedToolsText: tools.join(", "),
|
|
184
|
+
activeModel: model ? `${model.provider}/${model.id}` : "",
|
|
185
|
+
populatedAt: runtime.now.toISOString(),
|
|
186
|
+
timezone: "local",
|
|
187
|
+
tool: toolBooleans,
|
|
188
|
+
slot: slotBooleans,
|
|
189
|
+
},
|
|
190
|
+
parameters: params,
|
|
191
|
+
extensions: {},
|
|
192
|
+
};
|
|
193
|
+
return env;
|
|
194
|
+
}
|
|
195
|
+
export function freezeEnvironment(environment) {
|
|
196
|
+
const clone = structuredClone(environment);
|
|
197
|
+
const freeze = (value) => {
|
|
198
|
+
if (value === null || typeof value !== "object")
|
|
199
|
+
return value;
|
|
200
|
+
if (Array.isArray(value)) {
|
|
201
|
+
value.forEach((item) => freeze(item));
|
|
202
|
+
return Object.freeze(value);
|
|
203
|
+
}
|
|
204
|
+
const record = value;
|
|
205
|
+
for (const key of Object.keys(record))
|
|
206
|
+
record[key] = freeze(record[key]);
|
|
207
|
+
return Object.freeze(record);
|
|
208
|
+
};
|
|
209
|
+
freeze(clone);
|
|
210
|
+
return clone;
|
|
211
|
+
}
|
|
212
|
+
function parseExtensionDependency(dependency) {
|
|
213
|
+
const trimmed = dependency.trim();
|
|
214
|
+
if (trimmed.startsWith("extensions.")) {
|
|
215
|
+
const name = trimmed.slice("extensions.".length).trim();
|
|
216
|
+
return name && /^[A-Za-z_][A-Za-z0-9_-]*$/.test(name) ? name : undefined;
|
|
217
|
+
}
|
|
218
|
+
return undefined;
|
|
219
|
+
}
|
|
220
|
+
function formatDate(now) {
|
|
221
|
+
const year = now.getFullYear();
|
|
222
|
+
const month = String(now.getMonth() + 1).padStart(2, "0");
|
|
223
|
+
const day = String(now.getDate()).padStart(2, "0");
|
|
224
|
+
return `${year}-${month}-${day}`;
|
|
225
|
+
}
|
|
226
|
+
function formatTime(now) {
|
|
227
|
+
const hours = String(now.getHours()).padStart(2, "0");
|
|
228
|
+
const minutes = String(now.getMinutes()).padStart(2, "0");
|
|
229
|
+
const seconds = String(now.getSeconds()).padStart(2, "0");
|
|
230
|
+
return `${hours}:${minutes}:${seconds}`;
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=template-render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-render.js","sourceRoot":"","sources":["../src/template-render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAC;AAO7E,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAOxD,MAAM,OAAO,qBAAqB;IAChB,IAAI,CAAoB;IACxB,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvC,iBAAiB,GAA2B,EAAE,CAAC;IAC/C,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,CAAc;IAEpC,YAAY,KAAkB,EAAE,OAAsB;QACrD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,CAAC,IAAY,EAAE,WAAoC,EAAE,MAAe;QACzE,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YAChB,WAAW,CAAC,IAAI,CAAC;gBAChB,KAAK,EAAE,OAAO;gBACd,OAAO,EAAE,yBAAyB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE;gBACxD,MAAM;aACN,CAAC,CAAC;YACH,OAAO,EAAE,CAAC;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7C,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACrC,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YACtE,CAAC;YACD,OAAO,EAAE,CAAC;QACX,CAAC;QAED,IAAI,CAAC;YACJ,MAAM,GAAG,GAAG,iBAAiB,CAAC;gBAC7B,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO;gBAC1B,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU;gBAChC,UAAU,EAAE,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE;aACzC,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE;gBAC9C,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC;aACrF,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBAChB,WAAW,CAAC,IAAI,CAAC;oBAChB,KAAK,EAAE,OAAO;oBACd,OAAO,EAAE,0BAA0B,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE;oBACzD,MAAM;iBACN,CAAC,CAAC;gBACH,OAAO,EAAE,CAAC;YACX,CAAC;YACD,OAAO,MAAM,CAAC,IAAI,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACtE,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,2BAA2B,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YAC3F,OAAO,EAAE,CAAC;QACX,CAAC;IACF,CAAC;IAED,WAAW;QACV,OAAO,iBAAiB,CAAC;YACxB,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO;YAC1B,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU;YAChC,UAAU,EAAE,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE;SACzC,CAAC,CAAC;IACJ,CAAC;IAED,0BAA0B,CACzB,YAA+B,EAC/B,WAAoC,EACpC,MAAe;QAEf,KAAK,MAAM,UAAU,IAAI,YAAY,EAAE,CAAC;YACvC,MAAM,IAAI,GAAG,wBAAwB,CAAC,UAAU,CAAC,CAAC;YAClD,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,IAAI,CAAC;gBACJ,IAAI,CAAC,yBAAyB,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;YAC3D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,MAAM,OAAO,GAAG,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,IAAI,KAAK;oBACvE,CAAC,CAAC,MAAM,CAAE,KAA8B,CAAC,OAAO,CAAC;oBACjD,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACjB,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YACvD,CAAC;QACF,CAAC;QACD,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;IAC3B,CAAC;IAED,oBAAoB,CAAC,OAAe;QACnC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,KAAK,OAAO;YAAE,OAAO;QAC1D,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC;QAC5C,4EAA4E;QAC5E,2EAA2E;QAC3E,0EAA0E;QAC1E,6EAA6E;QAC7E,uDAAuD;QACvD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACxB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;YAAE,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAC3F,CAAC;IAEO,yBAAyB,CAChC,IAAY,EACZ,WAAoC,EACpC,MAA0B;QAE1B,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;QAExC,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,MAAM,UAAU,GAAiB;gBAChC,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,yCAAyC,IAAI,EAAE;aACxD,CAAC;YACF,MAAM,UAAU,CAAC;QAClB,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;YAC/B,MAAM,UAAU,GAAiB;gBAChC,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,kDAAkD;aAC3D,CAAC;YACF,MAAM,UAAU,CAAC;QAClB,CAAC;QAED,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,UAAU;YAAE,OAAO,SAAS,CAAC;QAElC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC;YACJ,0EAA0E;YAC1E,gDAAgD;YAChD,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC;gBAC7B,KAAK,MAAM,UAAU,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC;oBAClD,MAAM,OAAO,GAAG,wBAAwB,CAAC,UAAU,CAAC,CAAC;oBACrD,IAAI,OAAO;wBAAE,IAAI,CAAC,yBAAyB,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;gBAC3E,CAAC;YACF,CAAC;YAED,MAAM,GAAG,GAAG,iBAAiB,CAAC;gBAC7B,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO;gBAC1B,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU;gBAChC,UAAU,EAAE,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE;aACzC,CAAC,CAAC;YACH,IAAI,KAAa,CAAC;YAClB,IAAI,CAAC;gBACJ,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACtE,MAAM;oBACL,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,sBAAsB,IAAI,YAAY,MAAM,EAAE;iBACvC,CAAC;YACnB,CAAC;YAED,IAAI,KAAK,CAAC,MAAM,GAAG,6BAA6B,EAAE,CAAC;gBAClD,MAAM,UAAU,GAAiB;oBAChC,IAAI,EAAE,iBAAiB;oBACvB,OAAO,EAAE,sBAAsB,IAAI,YAAY,6BAA6B,cAAc;iBAC1F,CAAC;gBACF,MAAM,UAAU,CAAC;YAClB,CAAC;YAED,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACjC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;YACrC,OAAO,KAAK,CAAC;QACd,CAAC;gBAAS,CAAC;YACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;IACF,CAAC;CACD;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAkB,EAAE,OAAsB;IAChF,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAChD,MAAM,YAAY,GAA4B,EAAE,CAAC;IACjD,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,YAAY,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACpD,MAAM,YAAY,GAA4B,EAAE,CAAC;IACjD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI;YAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACjG,CAAC;IAED,MAAM,MAAM,GAA2C,EAAE,CAAC;IAC1D,IAAI,KAAK,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;SAAM,CAAC;QACP,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACvF,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC5B,MAAM,GAAG,GAAsB;QAC9B,OAAO,EAAE;YACR,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG;YACxB,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC;YAC7B,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC;YAC7B,eAAe,EAAE,OAAO,CAAC,iBAAiB,IAAI,EAAE;YAChD,aAAa,EAAE,KAAK;YACpB,iBAAiB,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YACnC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE;YACzD,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE;YACtC,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,YAAY;SAClB;QACD,UAAU,EAAE,MAAM;QAClB,UAAU,EAAE,EAAE;KACd,CAAC;IACF,OAAO,GAAG,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,WAA8B;IAC/D,MAAM,KAAK,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,CAAC,KAAc,EAAW,EAAE;QAC1C,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC9D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YACtC,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,MAAM,MAAM,GAAG,KAAgC,CAAC;QAChD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACzE,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC,CAAC;IACF,MAAM,CAAC,KAAK,CAAC,CAAC;IACd,OAAO,KAAK,CAAC;AACd,CAAC;AAED,SAAS,wBAAwB,CAAC,UAAkB;IACnD,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;IAClC,IAAI,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QACxD,OAAO,IAAI,IAAI,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1E,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,SAAS,UAAU,CAAC,GAAS;IAC5B,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC1D,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACnD,OAAO,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,UAAU,CAAC,GAAS;IAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC1D,OAAO,GAAG,KAAK,IAAI,OAAO,IAAI,OAAO,EAAE,CAAC;AACzC,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import type { AgentMessage } from "@earendil-works/pi-agent-core";
|
|
2
|
-
import type { BuildSystemPromptOptions, ExtensionContext } from "@earendil-works/pi-coding-agent";
|
|
3
2
|
import type { ResourceKey, ResourceScope } from "./resource-identity.ts";
|
|
4
3
|
export type PromptStackMode = "replace" | "append" | "prepend";
|
|
5
4
|
export type PromptStackRole = "system" | "user" | "assistant" | "custom";
|
|
6
|
-
export type PromptStackSlot = "chat-history" | "tools" | "tool-guidelines" | "skills" | "project-context" | "append-system-prompt" | "date" | "cwd" | "date-cwd" | "active-model" | "pi-docs"
|
|
5
|
+
export type PromptStackSlot = "chat-history" | "tools" | "tool-guidelines" | "skills" | "project-context" | "append-system-prompt" | "date" | "cwd" | "date-cwd" | "active-model" | "pi-docs";
|
|
7
6
|
export type PromptStackSlotFormat = "xml" | "json" | "plain";
|
|
8
7
|
export type PromptRegexStage = "history" | "compiled";
|
|
9
|
-
export type PromptRegexEffect = "outgoing" | "
|
|
8
|
+
export type PromptRegexEffect = "outgoing" | "finalize";
|
|
10
9
|
export type PromptRegexTarget = "system" | "messages";
|
|
11
10
|
export interface PromptRegexRule {
|
|
12
11
|
id: string;
|
|
@@ -57,16 +56,6 @@ export interface PromptStackBlockItem extends PromptStackBaseItem {
|
|
|
57
56
|
kind: "block";
|
|
58
57
|
content: string;
|
|
59
58
|
}
|
|
60
|
-
export interface VariablesSlotOptions {
|
|
61
|
-
/** Include static stack variables. Default: true. */
|
|
62
|
-
includeStatic?: boolean;
|
|
63
|
-
/** Include session variables. Default: true. */
|
|
64
|
-
includeSession?: boolean;
|
|
65
|
-
/** Include turn variables. Default: true. */
|
|
66
|
-
includeTurn?: boolean;
|
|
67
|
-
/** Render format. Default: xml. */
|
|
68
|
-
format?: Exclude<PromptStackSlotFormat, "json">;
|
|
69
|
-
}
|
|
70
59
|
export interface PromptStackSlotOptions {
|
|
71
60
|
/** For chat-history: include the latest user message in the expanded history. Default: true. */
|
|
72
61
|
includeLastUserMessage?: boolean;
|
|
@@ -82,10 +71,6 @@ export interface PromptStackSlotOptions {
|
|
|
82
71
|
maxMessages?: number;
|
|
83
72
|
/** For chat-history: keep only the most recent messages within an approximate character budget. */
|
|
84
73
|
maxChars?: number;
|
|
85
|
-
/** For variables: control which variable scopes are included. */
|
|
86
|
-
includeStatic?: boolean;
|
|
87
|
-
includeSession?: boolean;
|
|
88
|
-
includeTurn?: boolean;
|
|
89
74
|
format?: PromptStackSlotFormat;
|
|
90
75
|
/** For tools: only render tools that provide prompt snippets, matching Pi's default prompt builder. */
|
|
91
76
|
onlyWithSnippets?: boolean;
|
|
@@ -112,7 +97,7 @@ export type PromptVariableValue = PromptVariablePrimitive | PromptVariableValue[
|
|
|
112
97
|
[key: string]: PromptVariableValue;
|
|
113
98
|
};
|
|
114
99
|
export interface PromptStack {
|
|
115
|
-
schemaVersion: 1;
|
|
100
|
+
schemaVersion: 1 | 2;
|
|
116
101
|
type?: "pi-forge.prompt-stack";
|
|
117
102
|
id: string;
|
|
118
103
|
name?: string;
|
|
@@ -124,6 +109,7 @@ export interface PromptStack {
|
|
|
124
109
|
tools?: PromptResourcePolicy;
|
|
125
110
|
skills?: PromptResourcePolicy;
|
|
126
111
|
variables?: Record<string, string>;
|
|
112
|
+
parameters?: Record<string, PromptVariableValue>;
|
|
127
113
|
regex?: PromptRegexConfig;
|
|
128
114
|
items: PromptStackItem[];
|
|
129
115
|
import?: Record<string, unknown>;
|
|
@@ -141,18 +127,45 @@ export interface PromptStackDiagnostic {
|
|
|
141
127
|
message: string;
|
|
142
128
|
itemId?: string;
|
|
143
129
|
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
130
|
+
/**
|
|
131
|
+
* Host-neutral prompt compilation input.
|
|
132
|
+
*
|
|
133
|
+
* This deliberately avoids Pi runtime types such as `ExtensionContext` and
|
|
134
|
+
* `BuildSystemPromptOptions`. Pi/preview/subagent adapters convert their
|
|
135
|
+
* runtime facts into this small snapshot before entering the compiler.
|
|
136
|
+
*/
|
|
137
|
+
export interface PromptCompileOptions {
|
|
138
|
+
cwd: string;
|
|
139
|
+
selectedTools?: readonly string[];
|
|
140
|
+
toolSnippets?: Readonly<Record<string, string>>;
|
|
141
|
+
promptGuidelines?: readonly string[];
|
|
142
|
+
appendSystemPrompt?: string;
|
|
143
|
+
contextFiles?: readonly {
|
|
144
|
+
path: string;
|
|
145
|
+
content: string;
|
|
146
|
+
}[];
|
|
147
|
+
skills?: readonly {
|
|
148
|
+
name: string;
|
|
149
|
+
description: string;
|
|
150
|
+
filePath: string;
|
|
151
|
+
baseDir?: string;
|
|
152
|
+
sourceInfo?: unknown;
|
|
153
|
+
disableModelInvocation: boolean;
|
|
154
|
+
}[];
|
|
155
|
+
}
|
|
156
|
+
export interface PromptRuntimeSnapshot {
|
|
157
|
+
options: PromptCompileOptions;
|
|
158
|
+
/** Host-neutral model identity; used for `activeModel` and synthetic assistant messages. */
|
|
159
|
+
model?: {
|
|
160
|
+
provider: string;
|
|
161
|
+
id: string;
|
|
162
|
+
api?: string;
|
|
163
|
+
};
|
|
152
164
|
latestUserMessage?: string;
|
|
153
165
|
now: Date;
|
|
154
|
-
variables?: PromptVariableStore;
|
|
155
166
|
}
|
|
167
|
+
/** @deprecated Use {@link PromptRuntimeSnapshot} for new code. */
|
|
168
|
+
export type PromptRuntime = PromptRuntimeSnapshot;
|
|
156
169
|
export interface CompileSystemPromptResult {
|
|
157
170
|
systemPrompt: string;
|
|
158
171
|
diagnostics: PromptStackDiagnostic[];
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAwNA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import type { FormSchema, FormValues } from "../web-editor/schema-form.ts";
|
|
2
|
+
/**
|
|
3
|
+
* Cross-extension UI contribution port v1 over the Pi event bus.
|
|
4
|
+
*
|
|
5
|
+
* This is the generic, versioned RPC contract used by optional packages to
|
|
6
|
+
* contribute schema-driven tabs to the pi-forge web editor. Messages are plain,
|
|
7
|
+
* recursively validated, JSON-compatible data only — no functions, components,
|
|
8
|
+
* live contexts, or internal registries cross the bus. The port itself is not a
|
|
9
|
+
* trust boundary.
|
|
10
|
+
*
|
|
11
|
+
* Ownership: the contributing package owns the schema, current values, and
|
|
12
|
+
* persistence/validation for its tab. The pi-forge web server only proxies
|
|
13
|
+
* descriptors to the browser and writes submitted values back over the bus.
|
|
14
|
+
*/
|
|
15
|
+
export declare const UI_CONTRIBUTION_PORT_VERSION = 1;
|
|
16
|
+
export declare const UI_CONTRIBUTION_PORT_NAMESPACE = "@zihanw/pi-forge/ui-contribution/v1";
|
|
17
|
+
export declare const UI_CONTRIBUTION_PORT_OPERATIONS: readonly ["listContributions", "writeValues"];
|
|
18
|
+
export type UiContributionPortOperation = (typeof UI_CONTRIBUTION_PORT_OPERATIONS)[number];
|
|
19
|
+
export declare const UI_CONTRIBUTION_CHANNEL: {
|
|
20
|
+
readonly discover: "@zihanw/pi-forge/ui-contribution/v1/discover";
|
|
21
|
+
readonly available: "@zihanw/pi-forge/ui-contribution/v1/available";
|
|
22
|
+
readonly request: "@zihanw/pi-forge/ui-contribution/v1/request";
|
|
23
|
+
readonly reply: "@zihanw/pi-forge/ui-contribution/v1/reply";
|
|
24
|
+
readonly unavailable: "@zihanw/pi-forge/ui-contribution/v1/unavailable";
|
|
25
|
+
};
|
|
26
|
+
export interface UiContributionTransport {
|
|
27
|
+
emit(channel: string, data: unknown): void;
|
|
28
|
+
on(channel: string, handler: (data: unknown) => void): () => void;
|
|
29
|
+
}
|
|
30
|
+
export type UiContributionWireMessage = {
|
|
31
|
+
type: "discover";
|
|
32
|
+
protocolVersion: number;
|
|
33
|
+
minVersion: number;
|
|
34
|
+
maxVersion: number;
|
|
35
|
+
clientId: string;
|
|
36
|
+
} | {
|
|
37
|
+
type: "available";
|
|
38
|
+
hostId: string;
|
|
39
|
+
protocolVersion: number;
|
|
40
|
+
minVersion: number;
|
|
41
|
+
maxVersion: number;
|
|
42
|
+
capabilities: string[];
|
|
43
|
+
generation: number;
|
|
44
|
+
} | {
|
|
45
|
+
type: "request";
|
|
46
|
+
requestId: string;
|
|
47
|
+
hostId: string;
|
|
48
|
+
generation: number;
|
|
49
|
+
operation: string;
|
|
50
|
+
payload: unknown;
|
|
51
|
+
} | {
|
|
52
|
+
type: "reply";
|
|
53
|
+
requestId: string;
|
|
54
|
+
hostId: string;
|
|
55
|
+
generation: number;
|
|
56
|
+
ok: boolean;
|
|
57
|
+
data?: unknown;
|
|
58
|
+
error?: string;
|
|
59
|
+
} | {
|
|
60
|
+
type: "unavailable";
|
|
61
|
+
hostId: string;
|
|
62
|
+
generation: number;
|
|
63
|
+
};
|
|
64
|
+
export type UiContributionPortResult = {
|
|
65
|
+
ok: true;
|
|
66
|
+
data: unknown;
|
|
67
|
+
} | {
|
|
68
|
+
ok: false;
|
|
69
|
+
error: string;
|
|
70
|
+
};
|
|
71
|
+
export interface UiContributionRequestContext {
|
|
72
|
+
/** Aborted when the provider generation stops; handlers must check before side effects after an await. */
|
|
73
|
+
signal: AbortSignal;
|
|
74
|
+
generation: number;
|
|
75
|
+
}
|
|
76
|
+
export interface UiContributionProviderOptions {
|
|
77
|
+
providerId?: string;
|
|
78
|
+
capabilities?: readonly string[];
|
|
79
|
+
minVersion?: number;
|
|
80
|
+
maxVersion?: number;
|
|
81
|
+
/** Operation handler; must never throw across the bus. */
|
|
82
|
+
handle(operation: string, payload: unknown, context: UiContributionRequestContext): UiContributionPortResult | Promise<UiContributionPortResult>;
|
|
83
|
+
}
|
|
84
|
+
export interface UiContributionConnection {
|
|
85
|
+
hostId: string;
|
|
86
|
+
protocolVersion: number;
|
|
87
|
+
capabilities: readonly string[];
|
|
88
|
+
generation: number;
|
|
89
|
+
}
|
|
90
|
+
export interface UiContributionTabDescriptor {
|
|
91
|
+
tabId: string;
|
|
92
|
+
title: string;
|
|
93
|
+
icon: string;
|
|
94
|
+
schema: FormSchema;
|
|
95
|
+
values: FormValues;
|
|
96
|
+
}
|
|
97
|
+
export interface UiListContributionsResponse {
|
|
98
|
+
tabs: UiContributionTabDescriptor[];
|
|
99
|
+
}
|
|
100
|
+
export interface UiWriteValuesRequest {
|
|
101
|
+
tabId: string;
|
|
102
|
+
patch: FormValues;
|
|
103
|
+
}
|
|
104
|
+
export type UiWriteValuesResponse = {
|
|
105
|
+
ok: true;
|
|
106
|
+
values?: FormValues;
|
|
107
|
+
} | {
|
|
108
|
+
ok: false;
|
|
109
|
+
errors: Record<string, string>;
|
|
110
|
+
};
|
|
111
|
+
export type ValidationResult<T = unknown> = {
|
|
112
|
+
ok: true;
|
|
113
|
+
data: T;
|
|
114
|
+
} | {
|
|
115
|
+
ok: false;
|
|
116
|
+
error: string;
|
|
117
|
+
};
|
|
118
|
+
export declare class UiContributionPortError extends Error {
|
|
119
|
+
readonly code: "timeout" | "duplicate" | "unavailable" | "protocol" | "invalid";
|
|
120
|
+
constructor(code: UiContributionPortError["code"], message: string);
|
|
121
|
+
}
|
|
122
|
+
export declare function validateListContributionsRequest(value: unknown): ValidationResult<Record<string, never>>;
|
|
123
|
+
export declare function validateListContributionsResponse(value: unknown): ValidationResult<UiListContributionsResponse>;
|
|
124
|
+
export declare function validateUiContributionTabDescriptor(value: unknown): ValidationResult<UiContributionTabDescriptor>;
|
|
125
|
+
export declare function validateWriteValuesRequest(value: unknown): ValidationResult<UiWriteValuesRequest>;
|
|
126
|
+
export declare function validateWriteValuesResponse(value: unknown): ValidationResult<UiWriteValuesResponse>;
|
|
127
|
+
export declare function validateFormSchema(value: unknown): ValidationResult<FormSchema>;
|
|
128
|
+
export declare class UiContributionProvider {
|
|
129
|
+
private readonly transport;
|
|
130
|
+
private readonly options;
|
|
131
|
+
readonly hostId: string;
|
|
132
|
+
private generationId;
|
|
133
|
+
private started;
|
|
134
|
+
private unsubscribers;
|
|
135
|
+
private readonly pendingRequests;
|
|
136
|
+
constructor(transport: UiContributionTransport, options: UiContributionProviderOptions);
|
|
137
|
+
get generation(): number;
|
|
138
|
+
get isLive(): boolean;
|
|
139
|
+
private availableMessage;
|
|
140
|
+
start(): void;
|
|
141
|
+
stop(): void;
|
|
142
|
+
private onDiscover;
|
|
143
|
+
private onRequest;
|
|
144
|
+
}
|
|
145
|
+
export interface UiContributionClientOptions {
|
|
146
|
+
clientId?: string;
|
|
147
|
+
defaultTimeoutMs?: number;
|
|
148
|
+
discoverSettleMs?: number;
|
|
149
|
+
}
|
|
150
|
+
export declare class UiContributionClient {
|
|
151
|
+
private readonly transport;
|
|
152
|
+
readonly clientId: string;
|
|
153
|
+
private readonly defaultTimeoutMs;
|
|
154
|
+
private readonly discoverSettleMs;
|
|
155
|
+
private connectionUnsubscribe?;
|
|
156
|
+
private unavailableHandlers;
|
|
157
|
+
private activeConnection?;
|
|
158
|
+
constructor(transport: UiContributionTransport, options?: UiContributionClientOptions);
|
|
159
|
+
onUnavailable(handler: () => void): () => void;
|
|
160
|
+
private teardownPersistentListener;
|
|
161
|
+
private onUnavailableMessage;
|
|
162
|
+
discover(timeoutMs?: number): Promise<UiContributionConnection>;
|
|
163
|
+
connect(connection: UiContributionConnection): UiContributionConnection;
|
|
164
|
+
request(connection: UiContributionConnection, operation: string, payload: unknown, timeoutMs?: number): Promise<UiContributionPortResult>;
|
|
165
|
+
listContributions(connection: UiContributionConnection, timeoutMs?: number): Promise<UiContributionPortResult>;
|
|
166
|
+
writeValues(connection: UiContributionConnection, tabId: string, patch: FormValues, timeoutMs?: number): Promise<UiContributionPortResult>;
|
|
167
|
+
disconnect(): void;
|
|
168
|
+
get subscriptionCount(): number;
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=contrib-port.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contrib-port.d.ts","sourceRoot":"","sources":["../../src/ui-contribution/contrib-port.ts"],"names":[],"mappings":"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"}
|