@zihanw/pi-forge 0.3.2 → 0.4.0
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 +196 -0
- package/PUBLIC_API.md +5 -0
- package/README.md +93 -478
- package/README.zh-CN.md +88 -461
- package/SUBAGENT_ADAPTER_CONTRACT.md +5 -0
- package/dist/agent-profile.d.ts +71 -0
- package/dist/agent-profile.d.ts.map +1 -0
- package/dist/agent-profile.js +303 -0
- package/dist/agent-profile.js.map +1 -0
- package/dist/forge-config.d.ts +88 -0
- package/dist/forge-config.d.ts.map +1 -0
- package/dist/forge-config.js +290 -0
- package/dist/forge-config.js.map +1 -0
- package/dist/forge-extensions.d.ts.map +1 -1
- package/dist/forge-extensions.js +19 -3
- package/dist/forge-extensions.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +97 -358
- package/dist/index.js.map +1 -1
- package/dist/lifecycle.d.ts +11 -3
- package/dist/lifecycle.d.ts.map +1 -1
- package/dist/lifecycle.js +90 -4
- package/dist/lifecycle.js.map +1 -1
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +116 -5
- package/dist/loader.js.map +1 -1
- package/dist/payload-capture.d.ts.map +1 -1
- package/dist/payload-capture.js +27 -0
- package/dist/payload-capture.js.map +1 -1
- package/dist/payload-command.d.ts +3 -3
- package/dist/payload-command.d.ts.map +1 -1
- package/dist/payload-command.js.map +1 -1
- package/dist/preview.d.ts +2 -2
- package/dist/preview.d.ts.map +1 -1
- package/dist/preview.js +2 -3
- package/dist/preview.js.map +1 -1
- package/dist/profile-command.d.ts +12 -0
- package/dist/profile-command.d.ts.map +1 -0
- package/dist/profile-command.js +291 -0
- package/dist/profile-command.js.map +1 -0
- package/dist/profile-service.d.ts +103 -0
- package/dist/profile-service.d.ts.map +1 -0
- package/dist/profile-service.js +220 -0
- package/dist/profile-service.js.map +1 -0
- package/dist/runtime/profile-runtime.d.ts +13 -0
- package/dist/runtime/profile-runtime.d.ts.map +1 -0
- package/dist/runtime/profile-runtime.js +47 -0
- package/dist/runtime/profile-runtime.js.map +1 -0
- package/dist/runtime/prompt-stack-runtime.d.ts +22 -0
- package/dist/runtime/prompt-stack-runtime.d.ts.map +1 -0
- package/dist/runtime/prompt-stack-runtime.js +104 -0
- package/dist/runtime/prompt-stack-runtime.js.map +1 -0
- package/dist/runtime/subagent-runtime.d.ts +45 -0
- package/dist/runtime/subagent-runtime.d.ts.map +1 -0
- package/dist/runtime/subagent-runtime.js +335 -0
- package/dist/runtime/subagent-runtime.js.map +1 -0
- package/dist/runtime/tool-policy-runtime.d.ts +15 -0
- package/dist/runtime/tool-policy-runtime.d.ts.map +1 -0
- package/dist/runtime/tool-policy-runtime.js +170 -0
- package/dist/runtime/tool-policy-runtime.js.map +1 -0
- package/dist/runtime/web-editor-runtime.d.ts +9 -0
- package/dist/runtime/web-editor-runtime.d.ts.map +1 -0
- package/dist/runtime/web-editor-runtime.js +131 -0
- package/dist/runtime/web-editor-runtime.js.map +1 -0
- package/dist/runtime-state.d.ts +4 -0
- package/dist/runtime-state.d.ts.map +1 -1
- package/dist/runtime-state.js +2 -0
- package/dist/runtime-state.js.map +1 -1
- package/dist/storage.d.ts +4 -0
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +24 -1
- package/dist/storage.js.map +1 -1
- package/dist/subagent/canonical.d.ts +22 -0
- package/dist/subagent/canonical.d.ts.map +1 -0
- package/dist/subagent/canonical.js +24 -0
- package/dist/subagent/canonical.js.map +1 -0
- package/dist/subagent/context.d.ts +8 -0
- package/dist/subagent/context.d.ts.map +1 -0
- package/dist/subagent/context.js +125 -0
- package/dist/subagent/context.js.map +1 -0
- package/dist/subagent/contract.d.ts +10 -0
- package/dist/subagent/contract.d.ts.map +1 -0
- package/dist/subagent/contract.js +10 -0
- package/dist/subagent/contract.js.map +1 -0
- package/dist/subagent/index.d.ts +14 -0
- package/dist/subagent/index.d.ts.map +1 -0
- package/dist/subagent/index.js +14 -0
- package/dist/subagent/index.js.map +1 -0
- package/dist/subagent/plan.d.ts +18 -0
- package/dist/subagent/plan.d.ts.map +1 -0
- package/dist/subagent/plan.js +157 -0
- package/dist/subagent/plan.js.map +1 -0
- package/dist/subagent/preflight.d.ts +4 -0
- package/dist/subagent/preflight.d.ts.map +1 -0
- package/dist/subagent/preflight.js +108 -0
- package/dist/subagent/preflight.js.map +1 -0
- package/dist/subagent/request.d.ts +4 -0
- package/dist/subagent/request.d.ts.map +1 -0
- package/dist/subagent/request.js +122 -0
- package/dist/subagent/request.js.map +1 -0
- package/dist/subagent/response.d.ts +8 -0
- package/dist/subagent/response.d.ts.map +1 -0
- package/dist/subagent/response.js +155 -0
- package/dist/subagent/response.js.map +1 -0
- package/dist/subagent/tools.d.ts +4 -0
- package/dist/subagent/tools.d.ts.map +1 -0
- package/dist/subagent/tools.js +42 -0
- package/dist/subagent/tools.js.map +1 -0
- package/dist/subagent/types.d.ts +268 -0
- package/dist/subagent/types.d.ts.map +1 -0
- package/dist/subagent/types.js +3 -0
- package/dist/subagent/types.js.map +1 -0
- package/dist/subagent/validation.d.ts +35 -0
- package/dist/subagent/validation.d.ts.map +1 -0
- package/dist/subagent/validation.js +314 -0
- package/dist/subagent/validation.js.map +1 -0
- package/dist/subagent-command.d.ts +4 -0
- package/dist/subagent-command.d.ts.map +1 -0
- package/dist/subagent-command.js +246 -0
- package/dist/subagent-command.js.map +1 -0
- package/dist/subagent-host.d.ts +44 -0
- package/dist/subagent-host.d.ts.map +1 -0
- package/dist/subagent-host.js +292 -0
- package/dist/subagent-host.js.map +1 -0
- package/dist/subagent-profile-tool.d.ts +49 -0
- package/dist/subagent-profile-tool.d.ts.map +1 -0
- package/dist/subagent-profile-tool.js +124 -0
- package/dist/subagent-profile-tool.js.map +1 -0
- package/dist/subagent-tool.d.ts +53 -0
- package/dist/subagent-tool.d.ts.map +1 -0
- package/dist/subagent-tool.js +456 -0
- package/dist/subagent-tool.js.map +1 -0
- package/dist/web-editor/client-script.d.ts +2 -0
- package/dist/web-editor/client-script.d.ts.map +1 -0
- package/dist/web-editor/client-script.generated.d.ts +2 -0
- package/dist/web-editor/client-script.generated.d.ts.map +1 -0
- package/dist/web-editor/client-script.generated.js +3 -0
- package/dist/web-editor/client-script.generated.js.map +1 -0
- package/dist/web-editor/client-script.js +2 -0
- package/dist/web-editor/client-script.js.map +1 -0
- package/dist/web-editor/client-styles.d.ts +2 -0
- package/dist/web-editor/client-styles.d.ts.map +1 -0
- package/dist/web-editor/client-styles.generated.d.ts +2 -0
- package/dist/web-editor/client-styles.generated.d.ts.map +1 -0
- package/dist/web-editor/client-styles.generated.js +3 -0
- package/dist/web-editor/client-styles.generated.js.map +1 -0
- package/dist/web-editor/client-styles.js +2 -0
- package/dist/web-editor/client-styles.js.map +1 -0
- package/dist/web-editor/page.d.ts +2 -0
- package/dist/web-editor/page.d.ts.map +1 -1
- package/dist/web-editor/page.js +14 -3319
- package/dist/web-editor/page.js.map +1 -1
- package/dist/web-editor/server.d.ts.map +1 -1
- package/dist/web-editor/server.js +148 -0
- package/dist/web-editor/server.js.map +1 -1
- package/dist/web-editor/styles.d.ts +2 -0
- package/dist/web-editor/styles.d.ts.map +1 -0
- package/dist/web-editor/styles.js +1053 -0
- package/dist/web-editor/styles.js.map +1 -0
- package/dist/web-editor/types.d.ts +79 -0
- package/dist/web-editor/types.d.ts.map +1 -1
- package/dist/web-host.d.ts +16 -5
- package/dist/web-host.d.ts.map +1 -1
- package/dist/web-host.js +307 -0
- package/dist/web-host.js.map +1 -1
- package/docs/README.md +41 -0
- package/docs/concepts/agent-profiles.md +60 -0
- package/docs/concepts/prompt-stacks.md +90 -0
- package/docs/design/README.md +17 -0
- package/docs/design/roadmap-0.4-archive.md +216 -0
- package/docs/design/subagents/design-review.md +220 -0
- package/docs/design/subagents/interface-design.md +274 -0
- package/docs/design/subagents/sdk-spike-findings.md +117 -0
- package/docs/development/complexity-review.md +86 -0
- package/docs/development/release.md +31 -0
- package/docs/development/roadmap.md +42 -0
- package/docs/development/setup.md +75 -0
- package/docs/getting-started.md +93 -0
- package/docs/guides/custom-macros-and-slots.md +68 -0
- package/docs/guides/debugging.md +39 -0
- package/docs/guides/delegation.md +99 -0
- package/docs/guides/sillytavern-import.md +47 -0
- package/docs/guides/use-cases.md +65 -0
- package/docs/guides/web-editor.md +75 -0
- package/docs/reference/commands.md +60 -0
- package/docs/reference/configuration.md +64 -0
- package/docs/reference/features.md +279 -0
- package/docs/reference/macros-and-slots.md +82 -0
- package/docs/reference/public-api.md +28 -0
- package/docs/reference/stack-schema.md +167 -0
- package/docs/reference/subagent-adapter.md +204 -0
- package/docs/zh-CN/README.md +37 -0
- package/docs/zh-CN/concepts/agent-profiles.md +44 -0
- package/docs/zh-CN/concepts/prompt-stacks.md +40 -0
- package/docs/zh-CN/getting-started.md +79 -0
- package/docs/zh-CN/guides/delegation.md +66 -0
- package/docs/zh-CN/guides/web-editor.md +45 -0
- package/docs/zh-CN/reference/commands.md +58 -0
- package/package.json +55 -13
- package/src/compiler.ts +0 -578
- package/src/extension-registry.ts +0 -33
- package/src/forge-extensions.ts +0 -223
- package/src/index.ts +0 -445
- package/src/lifecycle.ts +0 -171
- package/src/loader.ts +0 -394
- package/src/macro-engine.ts +0 -358
- package/src/payload-capture.ts +0 -85
- package/src/payload-command.ts +0 -138
- package/src/policy.ts +0 -42
- package/src/preset-command.ts +0 -280
- package/src/preview.ts +0 -226
- package/src/regex.ts +0 -500
- package/src/render-helpers.ts +0 -169
- package/src/runtime-state.ts +0 -40
- package/src/sillytavern-importer/items.ts +0 -98
- package/src/sillytavern-importer/macros.ts +0 -159
- package/src/sillytavern-importer/prompt-order.ts +0 -54
- package/src/sillytavern-importer/regex.ts +0 -270
- package/src/sillytavern-importer/report.ts +0 -202
- package/src/sillytavern-importer/types.ts +0 -120
- package/src/sillytavern-importer.ts +0 -152
- package/src/slot-renderers.ts +0 -414
- package/src/stack-migration.ts +0 -159
- package/src/storage.ts +0 -45
- package/src/types.ts +0 -209
- package/src/web-editor/index.ts +0 -2
- package/src/web-editor/page.ts +0 -3330
- package/src/web-editor/server.ts +0 -294
- package/src/web-editor/types.ts +0 -98
- package/src/web-host.ts +0 -232
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
import { isValidAgentProfileId } from "./agent-profile.js";
|
|
4
|
+
import { globalForgeDir } from "./storage.js";
|
|
5
|
+
/** Backend used when neither a per-run override nor a configured default applies. */
|
|
6
|
+
export const DEFAULT_SUBAGENT_BACKEND_ID = "pi-subprocess-readonly";
|
|
7
|
+
/** Preserve the original foreground-run timeout unless the user configures one. */
|
|
8
|
+
export const DEFAULT_SUBAGENT_TIMEOUT_MS = 60_000;
|
|
9
|
+
export const MIN_SUBAGENT_TIMEOUT_MS = 1_000;
|
|
10
|
+
export const MAX_SUBAGENT_TIMEOUT_MS = 3_600_000;
|
|
11
|
+
/**
|
|
12
|
+
* Development/test override for the global config location. Keeps automated
|
|
13
|
+
* tests hermetic regardless of the developer's real ~/.pi/forge/config.json.
|
|
14
|
+
* Not part of the supported user-facing configuration surface.
|
|
15
|
+
*/
|
|
16
|
+
export const GLOBAL_FORGE_CONFIG_PATH_ENV = "PI_FORGE_GLOBAL_CONFIG_PATH";
|
|
17
|
+
/**
|
|
18
|
+
* Resolve the effective backend for one run: explicit per-run override, then
|
|
19
|
+
* a trusted-project per-profile override, then trusted-project/global defaults,
|
|
20
|
+
* then the built-in subprocess backend. There is deliberately no fallback when
|
|
21
|
+
* the resolved backend is missing or rejects the intent.
|
|
22
|
+
*/
|
|
23
|
+
export function resolveSubagentBackend(settings, explicitBackend, profileId) {
|
|
24
|
+
if (explicitBackend)
|
|
25
|
+
return { id: explicitBackend, source: "explicit" };
|
|
26
|
+
const profile = profileId ? configuredProfile(settings, profileId) : undefined;
|
|
27
|
+
if (profile?.backend)
|
|
28
|
+
return { id: profile.backend, source: profile.backendSource ?? "project-profile" };
|
|
29
|
+
if (settings.backend)
|
|
30
|
+
return { id: settings.backend, source: settings.backendSource ?? "global" };
|
|
31
|
+
return { id: DEFAULT_SUBAGENT_BACKEND_ID, source: "built-in" };
|
|
32
|
+
}
|
|
33
|
+
export function resolveSubagentTimeout(settings, profileId) {
|
|
34
|
+
const profile = profileId ? configuredProfile(settings, profileId) : undefined;
|
|
35
|
+
if (profile?.timeoutMs !== undefined) {
|
|
36
|
+
return { milliseconds: profile.timeoutMs, source: profile.timeoutSource ?? "project-profile" };
|
|
37
|
+
}
|
|
38
|
+
return { milliseconds: settings.timeoutMs, source: settings.timeoutSource };
|
|
39
|
+
}
|
|
40
|
+
export function resolveSubagentProfilePolicy(settings, profileId, explicitBackend) {
|
|
41
|
+
const profile = configuredProfile(settings, profileId);
|
|
42
|
+
return {
|
|
43
|
+
profileId,
|
|
44
|
+
enabled: profile?.enabled === true,
|
|
45
|
+
enabledSource: profile?.enabledSource ?? "built-in",
|
|
46
|
+
backend: resolveSubagentBackend(settings, explicitBackend, profileId),
|
|
47
|
+
timeout: resolveSubagentTimeout(settings, profileId),
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
export function loadForgeSubagentSettings(ctx) {
|
|
51
|
+
const configPath = join(ctx.cwd, ".pi", "forge", "config.json");
|
|
52
|
+
const globalConfigPath = process.env[GLOBAL_FORGE_CONFIG_PATH_ENV] ?? join(globalForgeDir(), "config.json");
|
|
53
|
+
const settings = {
|
|
54
|
+
allowAgentInvocationWithoutApproval: false,
|
|
55
|
+
timeoutMs: DEFAULT_SUBAGENT_TIMEOUT_MS,
|
|
56
|
+
timeoutSource: "built-in",
|
|
57
|
+
profiles: Object.create(null),
|
|
58
|
+
configPath,
|
|
59
|
+
globalConfigPath,
|
|
60
|
+
warnings: [],
|
|
61
|
+
};
|
|
62
|
+
// The global config is user-owned and always applies. The project config is
|
|
63
|
+
// honored only for trusted projects and overrides global values.
|
|
64
|
+
const globalSection = readSubagentsSection(globalConfigPath, settings.warnings);
|
|
65
|
+
applyBackend(globalSection, globalConfigPath, "global", settings);
|
|
66
|
+
applyTimeout(globalSection, globalConfigPath, "global", settings);
|
|
67
|
+
warnIgnoredGlobalProfiles(globalSection, globalConfigPath, settings);
|
|
68
|
+
if (!ctx.isProjectTrusted())
|
|
69
|
+
return settings;
|
|
70
|
+
const projectSection = readSubagentsSection(configPath, settings.warnings);
|
|
71
|
+
applyBackend(projectSection, configPath, "project", settings);
|
|
72
|
+
applyTimeout(projectSection, configPath, "project", settings);
|
|
73
|
+
applyProjectProfiles(projectSection, configPath, settings);
|
|
74
|
+
applyUnattended(projectSection, configPath, settings);
|
|
75
|
+
return settings;
|
|
76
|
+
}
|
|
77
|
+
function readSubagentsSection(configPath, warnings) {
|
|
78
|
+
if (!existsSync(configPath))
|
|
79
|
+
return undefined;
|
|
80
|
+
let raw;
|
|
81
|
+
try {
|
|
82
|
+
raw = JSON.parse(readFileSync(configPath, "utf8"));
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
warnings.push(`pi-forge: failed to read ${configPath}; its subagent settings are ignored. ${error instanceof Error ? error.message : String(error)}`);
|
|
86
|
+
return undefined;
|
|
87
|
+
}
|
|
88
|
+
if (!isPlainObject(raw)) {
|
|
89
|
+
warnings.push(`pi-forge: ${configPath} must be a JSON object; its subagent settings are ignored.`);
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
if (raw.subagents === undefined)
|
|
93
|
+
return undefined;
|
|
94
|
+
if (!isPlainObject(raw.subagents)) {
|
|
95
|
+
warnings.push(`pi-forge: ${configPath} subagents must be a JSON object; its subagent settings are ignored.`);
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
return raw.subagents;
|
|
99
|
+
}
|
|
100
|
+
function applyBackend(section, configPath, source, settings) {
|
|
101
|
+
if (!section || section.backend === undefined)
|
|
102
|
+
return;
|
|
103
|
+
const value = section.backend;
|
|
104
|
+
if (typeof value !== "string" || !value.trim()) {
|
|
105
|
+
settings.warnings.push(`pi-forge: ${configPath} subagents.backend must be a non-empty string; the configured value is ignored.`);
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
settings.backend = value;
|
|
109
|
+
settings.backendSource = source;
|
|
110
|
+
}
|
|
111
|
+
function applyTimeout(section, configPath, source, settings) {
|
|
112
|
+
if (!section || section.timeoutMs === undefined)
|
|
113
|
+
return;
|
|
114
|
+
const value = section.timeoutMs;
|
|
115
|
+
if (!isValidSubagentTimeoutMs(value)) {
|
|
116
|
+
settings.warnings.push(`pi-forge: ${configPath} subagents.timeoutMs must be an integer from ${MIN_SUBAGENT_TIMEOUT_MS} to ${MAX_SUBAGENT_TIMEOUT_MS}; the configured value is ignored.`);
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
settings.timeoutMs = value;
|
|
120
|
+
settings.timeoutSource = source;
|
|
121
|
+
}
|
|
122
|
+
function warnIgnoredGlobalProfiles(section, configPath, settings) {
|
|
123
|
+
if (!section || section.profiles === undefined)
|
|
124
|
+
return;
|
|
125
|
+
settings.warnings.push(`pi-forge: ${configPath} subagents.profiles is project-only and ignored; configure profile delegation in the trusted project's .pi/forge/config.json.`);
|
|
126
|
+
}
|
|
127
|
+
function applyProjectProfiles(section, configPath, settings) {
|
|
128
|
+
if (!section || section.profiles === undefined)
|
|
129
|
+
return;
|
|
130
|
+
if (!isPlainObject(section.profiles)) {
|
|
131
|
+
settings.warnings.push(`pi-forge: ${configPath} subagents.profiles must be a JSON object; its per-profile settings are ignored.`);
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
for (const [profileId, rawProfile] of Object.entries(section.profiles)) {
|
|
135
|
+
const path = `subagents.profiles.${profileId}`;
|
|
136
|
+
if (!isValidAgentProfileId(profileId)) {
|
|
137
|
+
settings.warnings.push(`pi-forge: ${configPath} ${path} has an invalid profile id; the entry is ignored.`);
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
if (!isPlainObject(rawProfile)) {
|
|
141
|
+
settings.warnings.push(`pi-forge: ${configPath} ${path} must be a JSON object; the entry is ignored.`);
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
for (const field of Object.keys(rawProfile)) {
|
|
145
|
+
if (field === "enabled" || field === "backend" || field === "timeoutMs")
|
|
146
|
+
continue;
|
|
147
|
+
settings.warnings.push(`pi-forge: ${configPath} ${path}.${field} is unsupported and ignored.`);
|
|
148
|
+
}
|
|
149
|
+
const target = configuredProfile(settings, profileId) ?? {};
|
|
150
|
+
const profileSource = "project-profile";
|
|
151
|
+
if (rawProfile.enabled !== undefined) {
|
|
152
|
+
if (typeof rawProfile.enabled !== "boolean") {
|
|
153
|
+
settings.warnings.push(`pi-forge: ${configPath} ${path}.enabled must be boolean; the configured value is ignored.`);
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
target.enabled = rawProfile.enabled;
|
|
157
|
+
target.enabledSource = profileSource;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
if (rawProfile.backend !== undefined) {
|
|
161
|
+
if (typeof rawProfile.backend !== "string" || !rawProfile.backend.trim()) {
|
|
162
|
+
settings.warnings.push(`pi-forge: ${configPath} ${path}.backend must be a non-empty string; the configured value is ignored.`);
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
target.backend = rawProfile.backend;
|
|
166
|
+
target.backendSource = profileSource;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
if (rawProfile.timeoutMs !== undefined) {
|
|
170
|
+
if (!isValidSubagentTimeoutMs(rawProfile.timeoutMs)) {
|
|
171
|
+
settings.warnings.push(`pi-forge: ${configPath} ${path}.timeoutMs must be an integer from ${MIN_SUBAGENT_TIMEOUT_MS} to ${MAX_SUBAGENT_TIMEOUT_MS}; the configured value is ignored.`);
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
target.timeoutMs = rawProfile.timeoutMs;
|
|
175
|
+
target.timeoutSource = profileSource;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
if (Object.keys(target).length > 0)
|
|
179
|
+
settings.profiles[profileId] = target;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
function applyUnattended(section, configPath, settings) {
|
|
183
|
+
if (!section || section.allowAgentInvocationWithoutApproval === undefined)
|
|
184
|
+
return;
|
|
185
|
+
const value = section.allowAgentInvocationWithoutApproval;
|
|
186
|
+
if (typeof value !== "boolean") {
|
|
187
|
+
settings.warnings.push(`pi-forge: ${configPath} subagents.allowAgentInvocationWithoutApproval must be boolean; per-run subagent approval remains required.`);
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
settings.allowAgentInvocationWithoutApproval = value;
|
|
191
|
+
}
|
|
192
|
+
export function isValidSubagentTimeoutMs(value) {
|
|
193
|
+
return Number.isSafeInteger(value)
|
|
194
|
+
&& value >= MIN_SUBAGENT_TIMEOUT_MS
|
|
195
|
+
&& value <= MAX_SUBAGENT_TIMEOUT_MS;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Update `subagents.profiles.<id>` in the project's `.pi/forge/config.json`,
|
|
199
|
+
* preserving unknown top-level, `subagents`, and per-entry fields. Callers
|
|
200
|
+
* must gate this on project trust; the project config is ignored otherwise.
|
|
201
|
+
*/
|
|
202
|
+
export function updateForgeSubagentProfileConfig(cwd, profileId, update) {
|
|
203
|
+
if (!isValidAgentProfileId(profileId)) {
|
|
204
|
+
return { ok: false, error: `Invalid agent profile id: ${profileId}` };
|
|
205
|
+
}
|
|
206
|
+
if (update.backend !== undefined && update.backend !== null && (typeof update.backend !== "string" || !update.backend.trim())) {
|
|
207
|
+
return { ok: false, error: "subagent backend must be a non-empty string or null to clear the override." };
|
|
208
|
+
}
|
|
209
|
+
if (update.timeoutMs !== undefined && update.timeoutMs !== null && !isValidSubagentTimeoutMs(update.timeoutMs)) {
|
|
210
|
+
return {
|
|
211
|
+
ok: false,
|
|
212
|
+
error: `subagent timeoutMs must be an integer from ${MIN_SUBAGENT_TIMEOUT_MS} to ${MAX_SUBAGENT_TIMEOUT_MS} or null to clear the override.`,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
const configPath = join(cwd, ".pi", "forge", "config.json");
|
|
216
|
+
let root = {};
|
|
217
|
+
if (existsSync(configPath)) {
|
|
218
|
+
let raw;
|
|
219
|
+
try {
|
|
220
|
+
raw = JSON.parse(readFileSync(configPath, "utf8"));
|
|
221
|
+
}
|
|
222
|
+
catch (error) {
|
|
223
|
+
return {
|
|
224
|
+
ok: false,
|
|
225
|
+
error: `Refusing to update unreadable ${configPath}: ${error instanceof Error ? error.message : String(error)}`,
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
if (!isPlainObject(raw)) {
|
|
229
|
+
return { ok: false, error: `Refusing to update ${configPath}: the config root must be a JSON object.` };
|
|
230
|
+
}
|
|
231
|
+
root = raw;
|
|
232
|
+
}
|
|
233
|
+
if (root.subagents !== undefined && !isPlainObject(root.subagents)) {
|
|
234
|
+
return { ok: false, error: `Refusing to update ${configPath}: subagents must be a JSON object.` };
|
|
235
|
+
}
|
|
236
|
+
const subagents = isPlainObject(root.subagents) ? root.subagents : {};
|
|
237
|
+
if (subagents.profiles !== undefined && !isPlainObject(subagents.profiles)) {
|
|
238
|
+
return { ok: false, error: `Refusing to update ${configPath}: subagents.profiles must be a JSON object.` };
|
|
239
|
+
}
|
|
240
|
+
const profiles = isPlainObject(subagents.profiles) ? subagents.profiles : {};
|
|
241
|
+
if (profiles[profileId] !== undefined && !isPlainObject(profiles[profileId])) {
|
|
242
|
+
return { ok: false, error: `Refusing to update ${configPath}: subagents.profiles.${profileId} must be a JSON object.` };
|
|
243
|
+
}
|
|
244
|
+
const entry = isPlainObject(profiles[profileId]) ? { ...profiles[profileId] } : {};
|
|
245
|
+
if (update.enabled !== undefined) {
|
|
246
|
+
if (update.enabled)
|
|
247
|
+
entry.enabled = true;
|
|
248
|
+
else
|
|
249
|
+
delete entry.enabled;
|
|
250
|
+
}
|
|
251
|
+
if (update.backend !== undefined) {
|
|
252
|
+
if (typeof update.backend === "string" && update.backend.trim())
|
|
253
|
+
entry.backend = update.backend.trim();
|
|
254
|
+
else
|
|
255
|
+
delete entry.backend;
|
|
256
|
+
}
|
|
257
|
+
if (update.timeoutMs !== undefined) {
|
|
258
|
+
if (update.timeoutMs === null)
|
|
259
|
+
delete entry.timeoutMs;
|
|
260
|
+
else
|
|
261
|
+
entry.timeoutMs = update.timeoutMs;
|
|
262
|
+
}
|
|
263
|
+
if (Object.keys(entry).length > 0)
|
|
264
|
+
profiles[profileId] = entry;
|
|
265
|
+
else
|
|
266
|
+
delete profiles[profileId];
|
|
267
|
+
if (Object.keys(profiles).length > 0)
|
|
268
|
+
subagents.profiles = profiles;
|
|
269
|
+
else
|
|
270
|
+
delete subagents.profiles;
|
|
271
|
+
if (Object.keys(subagents).length > 0)
|
|
272
|
+
root.subagents = subagents;
|
|
273
|
+
else
|
|
274
|
+
delete root.subagents;
|
|
275
|
+
try {
|
|
276
|
+
mkdirSync(dirname(configPath), { recursive: true });
|
|
277
|
+
writeFileSync(configPath, `${JSON.stringify(root, null, 2)}\n`, "utf8");
|
|
278
|
+
return { ok: true, configPath };
|
|
279
|
+
}
|
|
280
|
+
catch (error) {
|
|
281
|
+
return { ok: false, error: `Failed to write ${configPath}: ${error instanceof Error ? error.message : String(error)}` };
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
function configuredProfile(settings, profileId) {
|
|
285
|
+
return Object.hasOwn(settings.profiles, profileId) ? settings.profiles[profileId] : undefined;
|
|
286
|
+
}
|
|
287
|
+
function isPlainObject(value) {
|
|
288
|
+
return !!value && typeof value === "object" && !Array.isArray(value);
|
|
289
|
+
}
|
|
290
|
+
//# sourceMappingURL=forge-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forge-config.js","sourceRoot":"","sources":["../src/forge-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forge-extensions.d.ts","sourceRoot":"","sources":["../src/forge-extensions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"forge-extensions.d.ts","sourceRoot":"","sources":["../src/forge-extensions.ts"],"names":[],"mappings":"AAKA,OAAO,EACN,mBAAmB,EAEnB,KAAK,qBAAqB,EAC1B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAuB,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACpF,OAAO,EACN,kBAAkB,EAElB,KAAK,oBAAoB,EACzB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAIxD,MAAM,WAAW,iBAAiB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,mBAAmB,CAAC;IAC7B,aAAa,CAAC,UAAU,EAAE,qBAAqB,GAAG,MAAM,IAAI,CAAC;IAC7D,YAAY,CAAC,UAAU,EAAE,oBAAoB,GAAG,MAAM,IAAI,CAAC;IAC3D,mBAAmB,EAAE,OAAO,mBAAmB,CAAC;IAChD,kBAAkB,EAAE,OAAO,kBAAkB,CAAC;CAC9C;AAED,MAAM,MAAM,sBAAsB,GAAG,CAAC,GAAG,EAAE,iBAAiB,KAAK,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;AAEpH,MAAM,WAAW,mBAAmB;IACnC,UAAU,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,wBAAwB;IACxC,WAAW,EAAE,qBAAqB,EAAE,CAAC;IACrC,WAAW,EAAE,MAAM,EAAE,CAAC;CACtB;AAOD,wBAAgB,yBAAyB,IAAI,mBAAmB,CAE/D;AAED,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAgBtH;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,mBAAmB,GAAG,qBAAqB,EAAE,CAazF;AAED,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAEjE"}
|
package/dist/forge-extensions.js
CHANGED
|
@@ -7,21 +7,25 @@ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExte
|
|
|
7
7
|
return path;
|
|
8
8
|
};
|
|
9
9
|
import { existsSync, readdirSync, statSync } from "node:fs";
|
|
10
|
+
import { randomUUID } from "node:crypto";
|
|
11
|
+
import { createRequire } from "node:module";
|
|
10
12
|
import { basename, join } from "node:path";
|
|
11
13
|
import { pathToFileURL } from "node:url";
|
|
12
14
|
import { getRegisteredMacros, registerMacro, } from "./macro-engine.js";
|
|
13
15
|
import { promptRenderHelpers } from "./render-helpers.js";
|
|
14
16
|
import { getRegisteredSlots, registerSlot, } from "./slot-renderers.js";
|
|
15
17
|
import { forgeDir, forgeExtensionsDir, globalForgeDir, globalForgeExtensionsDir } from "./storage.js";
|
|
18
|
+
const require = createRequire(import.meta.url);
|
|
16
19
|
export function createForgeExtensionState() {
|
|
17
20
|
return { unregister: [], loadVersion: 0 };
|
|
18
21
|
}
|
|
19
22
|
export async function reloadForgeExtensions(cwd, state) {
|
|
20
23
|
const diagnostics = unloadForgeExtensions(state);
|
|
21
24
|
state.loadVersion++;
|
|
25
|
+
const loadToken = `${state.loadVersion}-${randomUUID()}`;
|
|
22
26
|
const loadedPaths = [];
|
|
23
27
|
for (const candidate of discoverForgeExtensionCandidates(cwd)) {
|
|
24
|
-
const result = await loadForgeExtensionFile(cwd, candidate.forgeDir, candidate.filePath,
|
|
28
|
+
const result = await loadForgeExtensionFile(cwd, candidate.forgeDir, candidate.filePath, loadToken);
|
|
25
29
|
diagnostics.push(...result.diagnostics);
|
|
26
30
|
if (result.loaded) {
|
|
27
31
|
state.unregister.push(...result.unregister);
|
|
@@ -99,11 +103,12 @@ function discoverForgeExtensionFilesInDir(dir) {
|
|
|
99
103
|
}
|
|
100
104
|
return files;
|
|
101
105
|
}
|
|
102
|
-
async function loadForgeExtensionFile(cwd, forgeDirPath, filePath,
|
|
106
|
+
async function loadForgeExtensionFile(cwd, forgeDirPath, filePath, loadToken) {
|
|
103
107
|
const unregister = [];
|
|
104
108
|
const diagnostics = [];
|
|
105
109
|
try {
|
|
106
|
-
|
|
110
|
+
clearCommonJsCache(filePath);
|
|
111
|
+
const module = await import(__rewriteRelativeImportExtension(`${pathToFileURL(filePath).href}?piForgeReload=${encodeURIComponent(loadToken)}`));
|
|
107
112
|
const register = readRegisterFunction(module);
|
|
108
113
|
if (!register) {
|
|
109
114
|
return {
|
|
@@ -136,6 +141,17 @@ async function loadForgeExtensionFile(cwd, forgeDirPath, filePath, loadVersion)
|
|
|
136
141
|
return { loaded: false, unregister: [], diagnostics };
|
|
137
142
|
}
|
|
138
143
|
}
|
|
144
|
+
function clearCommonJsCache(filePath) {
|
|
145
|
+
if (!filePath.endsWith(".js") && !filePath.endsWith(".cjs"))
|
|
146
|
+
return;
|
|
147
|
+
try {
|
|
148
|
+
const resolved = require.resolve(filePath);
|
|
149
|
+
delete require.cache[resolved];
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
// ESM .js files do not use the CommonJS cache.
|
|
153
|
+
}
|
|
154
|
+
}
|
|
139
155
|
function createForgeExtensionApi(cwd, forgeDirPath, extensionPath, unregister) {
|
|
140
156
|
return {
|
|
141
157
|
cwd,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forge-extensions.js","sourceRoot":"","sources":["../src/forge-extensions.ts"],"names":[],"mappings":";;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACN,mBAAmB,EACnB,aAAa,GAEb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAA4B,MAAM,qBAAqB,CAAC;AACpF,OAAO,EACN,kBAAkB,EAClB,YAAY,GAEZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"forge-extensions.js","sourceRoot":"","sources":["../src/forge-extensions.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,6 +3,10 @@ export { getRegisteredMacros, registerMacro, type PromptMacroDefinition, type Pr
|
|
|
3
3
|
export { getRegisteredSlots, registerSlot, type PromptSlotDefinition, type PromptSlotRenderContext, type PromptSlotRenderer, } from "./slot-renderers.ts";
|
|
4
4
|
export { type PromptExtensionArgumentDefinition, type PromptExtensionOptionDefinition, type PromptExtensionOptionsSchema, type PromptExtensionOptionType, type PromptRegistryEntry, } from "./extension-registry.ts";
|
|
5
5
|
export { type ForgeExtensionApi, type ForgeExtensionRegister, } from "./forge-extensions.ts";
|
|
6
|
+
export { AGENT_PROFILE_THINKING_LEVELS, AGENT_PROFILE_TYPE, agentProfileFingerprint, agentProfilePath, agentProfilesDir, chooseAutoActivateAgentProfile, hasAutoActivateAgentProfile, hasAgentProfileErrors, isResolvedAgentProfileUsable, isUsableAgentProfile, isValidAgentProfileId, loadAgentProfileFile, loadAgentProfiles, renderAgentProfileDiagnostics, resolveAgentProfile, validateAgentProfile, type AgentProfile, type AgentProfileDiagnostic, type AgentProfileDiagnosticLevel, type AgentProfileModelReference, type AgentProfileResolutionResources, type AgentProfileProvenance, type AgentProfileRuntimeSnapshot, type LoadedAgentProfile, type ResolvedAgentProfile, isAgentProfileProvenance, } from "./agent-profile.ts";
|
|
7
|
+
export { applyResolvedAgentProfile, captureAgentProfile, createAgentProfilePreview, deleteAgentProfile, forgetAgentProfileProvenance, getAgentProfileRuntimeStatus, writeAgentProfile, type AgentProfileApplicationDeps, type AgentProfileApplicationResult, type AgentProfileApplicationState, type AgentProfileCaptureInput, type AgentProfileCaptureResult, type AgentProfileCurrentRuntime, type AgentProfileDeleteResult, type AgentProfileDriftField, type AgentProfilePreview, type AgentProfileRuntimeStatus, type AgentProfileWriteResult, } from "./profile-service.ts";
|
|
6
8
|
export { createVariableAccess, promptRenderHelpers, type PromptRenderHelpers, type PromptVariableAccess, type PromptVariableScope, type PromptWritableVariableScope, } from "./render-helpers.ts";
|
|
9
|
+
export * from "./subagent/contract.ts";
|
|
10
|
+
export { appendProtectedAgentTask, collectMacroCommandNames, collectSubagentPromptDependencies, compileProtectedAgentTaskMessages, currentSubagentPromptRegistrationCatalog, isProtectedAgentTaskPreserved, prepareSubagentHostPlan, resolveSubagentHostProfile, type SubagentHostResolution, type SubagentPromptRegistration, type SubagentPromptRegistrationCatalog, } from "./subagent-host.ts";
|
|
7
11
|
export default function piForge(pi: ExtensionAPI): void;
|
|
8
12
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA4B,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA4B,YAAY,EAAoB,MAAM,iCAAiC,CAAC;AAiBhH,OAAO,EACN,mBAAmB,EACnB,aAAa,EACb,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACN,kBAAkB,EAClB,YAAY,EACZ,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,GACvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACN,KAAK,iCAAiC,EACtC,KAAK,+BAA+B,EACpC,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,GACxB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACN,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,GAC3B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACN,6BAA6B,EAC7B,kBAAkB,EAClB,uBAAuB,EACvB,gBAAgB,EAChB,gBAAgB,EAChB,8BAA8B,EAC9B,2BAA2B,EAC3B,qBAAqB,EACrB,4BAA4B,EAC5B,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,6BAA6B,EAC7B,mBAAmB,EACnB,oBAAoB,EACpB,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAC3B,KAAK,2BAA2B,EAChC,KAAK,0BAA0B,EAC/B,KAAK,+BAA+B,EACpC,KAAK,sBAAsB,EAC3B,KAAK,2BAA2B,EAChC,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,wBAAwB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACN,yBAAyB,EACzB,mBAAmB,EACnB,yBAAyB,EACzB,kBAAkB,EAClB,4BAA4B,EAC5B,4BAA4B,EAC5B,iBAAiB,EACjB,KAAK,2BAA2B,EAChC,KAAK,6BAA6B,EAClC,KAAK,4BAA4B,EACjC,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,yBAAyB,EAC9B,KAAK,uBAAuB,GAC5B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACN,oBAAoB,EACpB,mBAAmB,EACnB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,2BAA2B,GAChC,MAAM,qBAAqB,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,OAAO,EACN,wBAAwB,EACxB,wBAAwB,EACxB,iCAAiC,EACjC,iCAAiC,EACjC,wCAAwC,EACxC,6BAA6B,EAC7B,uBAAuB,EACvB,0BAA0B,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,EAC/B,KAAK,iCAAiC,GACtC,MAAM,oBAAoB,CAAC;AAE5B,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,EAAE,EAAE,YAAY,QAiG/C"}
|