@zihanw/pi-forge 0.5.3 → 0.5.5
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 +84 -0
- package/README.md +67 -103
- package/README.zh-CN.md +67 -95
- package/assets/pi-forge-header-concept-1.png +0 -0
- package/assets/readme/PROVENANCE.md +95 -0
- package/assets/readme/en/capability-tools.gif +0 -0
- package/assets/readme/en/context-composition.gif +0 -0
- package/assets/readme/en/context-toggle.gif +0 -0
- package/assets/readme/en/draft-diff.png +0 -0
- package/assets/readme/en/edit-draft-diff.gif +0 -0
- package/assets/readme/en/editor-overview-v3.png +0 -0
- package/assets/readme/en/editor-overview.png +0 -0
- package/assets/readme/en/mode-tools.gif +0 -0
- package/assets/readme/en/regex-transforms.gif +0 -0
- package/assets/readme/en/tool-selection.gif +0 -0
- package/assets/readme/tui-quickstart.gif +0 -0
- package/assets/readme/zh-CN/capability-tools.gif +0 -0
- package/assets/readme/zh-CN/context-composition.gif +0 -0
- package/assets/readme/zh-CN/context-toggle.gif +0 -0
- package/assets/readme/zh-CN/draft-diff.png +0 -0
- package/assets/readme/zh-CN/edit-draft-diff.gif +0 -0
- package/assets/readme/zh-CN/editor-overview-v3.png +0 -0
- package/assets/readme/zh-CN/editor-overview.png +0 -0
- package/assets/readme/zh-CN/mode-tools.gif +0 -0
- package/assets/readme/zh-CN/regex-transforms.gif +0 -0
- package/assets/readme/zh-CN/tool-selection.gif +0 -0
- package/dist/active-state.d.ts +148 -0
- package/dist/active-state.d.ts.map +1 -0
- package/dist/active-state.js +374 -0
- package/dist/active-state.js.map +1 -0
- package/dist/agent-profile.d.ts.map +1 -1
- package/dist/agent-profile.js +11 -0
- package/dist/agent-profile.js.map +1 -1
- package/dist/capabilities.d.ts +39 -0
- package/dist/capabilities.d.ts.map +1 -0
- package/dist/capabilities.js +160 -0
- package/dist/capabilities.js.map +1 -0
- package/dist/capability-anchors.d.ts +45 -0
- package/dist/capability-anchors.d.ts.map +1 -0
- package/dist/capability-anchors.js +263 -0
- package/dist/capability-anchors.js.map +1 -0
- package/dist/capability-command.d.ts +4 -0
- package/dist/capability-command.d.ts.map +1 -0
- package/dist/capability-command.js +164 -0
- package/dist/capability-command.js.map +1 -0
- package/dist/capability-events.d.ts +79 -0
- package/dist/capability-events.d.ts.map +1 -0
- package/dist/capability-events.js +478 -0
- package/dist/capability-events.js.map +1 -0
- package/dist/capability-projection.d.ts +22 -0
- package/dist/capability-projection.d.ts.map +1 -0
- package/dist/capability-projection.js +273 -0
- package/dist/capability-projection.js.map +1 -0
- package/dist/capability-protocol.d.ts +21 -0
- package/dist/capability-protocol.d.ts.map +1 -0
- package/dist/capability-protocol.js +15 -0
- package/dist/capability-protocol.js.map +1 -0
- package/dist/capability-state.d.ts +74 -0
- package/dist/capability-state.d.ts.map +1 -0
- package/dist/capability-state.js +43 -0
- package/dist/capability-state.js.map +1 -0
- package/dist/capability-tool.d.ts +11 -0
- package/dist/capability-tool.d.ts.map +1 -0
- package/dist/capability-tool.js +25 -0
- package/dist/capability-tool.js.map +1 -0
- package/dist/capability-web-host.d.ts +11 -0
- package/dist/capability-web-host.d.ts.map +1 -0
- package/dist/capability-web-host.js +105 -0
- package/dist/capability-web-host.js.map +1 -0
- package/dist/codecs/capability.d.ts +71 -0
- package/dist/codecs/capability.d.ts.map +1 -0
- package/dist/codecs/capability.js +363 -0
- package/dist/codecs/capability.js.map +1 -0
- package/dist/codecs/prompt-stack.d.ts +1 -1
- package/dist/codecs/prompt-stack.d.ts.map +1 -1
- package/dist/codecs/prompt-stack.js +140 -13
- package/dist/codecs/prompt-stack.js.map +1 -1
- package/dist/command-contribution/index.d.ts +21 -0
- package/dist/command-contribution/index.d.ts.map +1 -0
- package/dist/command-contribution/index.js +14 -0
- package/dist/command-contribution/index.js.map +1 -0
- package/dist/compile-cycle.d.ts +7 -1
- package/dist/compile-cycle.d.ts.map +1 -1
- package/dist/compile-cycle.js +2 -0
- package/dist/compile-cycle.js.map +1 -1
- package/dist/compiler.d.ts +7 -1
- package/dist/compiler.d.ts.map +1 -1
- package/dist/compiler.js +140 -19
- package/dist/compiler.js.map +1 -1
- package/dist/context-diff-history.d.ts +2 -0
- package/dist/context-diff-history.d.ts.map +1 -1
- package/dist/context-diff-history.js +9 -0
- package/dist/context-diff-history.js.map +1 -1
- package/dist/forge-command.d.ts +10 -0
- package/dist/forge-command.d.ts.map +1 -0
- package/dist/forge-command.js +106 -0
- package/dist/forge-command.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +58 -7
- package/dist/index.js.map +1 -1
- package/dist/json-fingerprint.d.ts +11 -0
- package/dist/json-fingerprint.d.ts.map +1 -0
- package/dist/json-fingerprint.js +66 -0
- package/dist/json-fingerprint.js.map +1 -0
- package/dist/lifecycle.d.ts +14 -0
- package/dist/lifecycle.d.ts.map +1 -1
- package/dist/lifecycle.js +175 -66
- package/dist/lifecycle.js.map +1 -1
- package/dist/payload-command.d.ts +2 -2
- package/dist/payload-command.d.ts.map +1 -1
- package/dist/payload-command.js +80 -26
- package/dist/payload-command.js.map +1 -1
- package/dist/payload-state.d.ts +1 -0
- package/dist/payload-state.d.ts.map +1 -1
- package/dist/payload-state.js +1 -0
- package/dist/payload-state.js.map +1 -1
- package/dist/policy.d.ts +2 -1
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js +3 -0
- package/dist/policy.js.map +1 -1
- package/dist/preset-command.d.ts +2 -0
- package/dist/preset-command.d.ts.map +1 -1
- package/dist/preset-command.js +101 -36
- package/dist/preset-command.js.map +1 -1
- package/dist/preview-text.d.ts +5 -0
- package/dist/preview-text.d.ts.map +1 -0
- package/dist/preview-text.js +27 -0
- package/dist/preview-text.js.map +1 -0
- package/dist/preview.d.ts +18 -1
- package/dist/preview.d.ts.map +1 -1
- package/dist/preview.js +134 -99
- package/dist/preview.js.map +1 -1
- package/dist/profile-command.d.ts +4 -1
- package/dist/profile-command.d.ts.map +1 -1
- package/dist/profile-command.js +77 -14
- package/dist/profile-command.js.map +1 -1
- package/dist/prompt-cache-warning.d.ts +23 -0
- package/dist/prompt-cache-warning.d.ts.map +1 -0
- package/dist/prompt-cache-warning.js +74 -0
- package/dist/prompt-cache-warning.js.map +1 -0
- package/dist/regex.d.ts.map +1 -1
- package/dist/regex.js +5 -0
- package/dist/regex.js.map +1 -1
- package/dist/render-helpers.d.ts.map +1 -1
- package/dist/render-helpers.js +2 -0
- package/dist/render-helpers.js.map +1 -1
- package/dist/repositories/capability.d.ts +53 -0
- package/dist/repositories/capability.d.ts.map +1 -0
- package/dist/repositories/capability.js +294 -0
- package/dist/repositories/capability.js.map +1 -0
- package/dist/runtime/capability-runtime.d.ts +91 -0
- package/dist/runtime/capability-runtime.d.ts.map +1 -0
- package/dist/runtime/capability-runtime.js +967 -0
- package/dist/runtime/capability-runtime.js.map +1 -0
- package/dist/runtime/tool-policy-runtime.d.ts +8 -0
- package/dist/runtime/tool-policy-runtime.d.ts.map +1 -1
- package/dist/runtime/tool-policy-runtime.js +171 -30
- package/dist/runtime/tool-policy-runtime.js.map +1 -1
- package/dist/session-adapter.d.ts +13 -0
- package/dist/session-adapter.d.ts.map +1 -1
- package/dist/session-adapter.js +110 -0
- package/dist/session-adapter.js.map +1 -1
- package/dist/session-usage.d.ts +65 -0
- package/dist/session-usage.d.ts.map +1 -0
- package/dist/session-usage.js +134 -0
- package/dist/session-usage.js.map +1 -0
- package/dist/subagent/fingerprints.d.ts +3 -15
- package/dist/subagent/fingerprints.d.ts.map +1 -1
- package/dist/subagent/fingerprints.js +5 -69
- package/dist/subagent/fingerprints.js.map +1 -1
- package/dist/subagent/index.d.ts +2 -0
- package/dist/subagent/index.d.ts.map +1 -1
- package/dist/subagent/index.js +2 -0
- package/dist/subagent/index.js.map +1 -1
- package/dist/subagent-host.d.ts +2 -2
- package/dist/subagent-host.d.ts.map +1 -1
- package/dist/subagent-host.js +13 -1
- package/dist/subagent-host.js.map +1 -1
- package/dist/types.d.ts +6 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- 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/server.d.ts.map +1 -1
- package/dist/web-editor/server.js +152 -4
- 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 +521 -116
- package/dist/web-editor/styles.js.map +1 -1
- package/dist/web-editor/types.d.ts +81 -1
- package/dist/web-editor/types.d.ts.map +1 -1
- package/dist/web-host.d.ts +7 -0
- package/dist/web-host.d.ts.map +1 -1
- package/dist/web-host.js +168 -5
- package/dist/web-host.js.map +1 -1
- package/dist/workspace.d.ts +11 -0
- package/dist/workspace.d.ts.map +1 -1
- package/dist/workspace.js +63 -5
- package/dist/workspace.js.map +1 -1
- package/docs/README.md +4 -0
- package/docs/design/README.md +3 -1
- package/docs/design/architecture-0.5.md +22 -0
- package/docs/design/archive/2026-09-12-system-update-design.md +229 -0
- package/docs/design/pi-forge-system-update-design-notes.md +157 -0
- package/docs/development/release.md +20 -20
- package/docs/development/roadmap.md +17 -2
- package/docs/development/scoped-global-profiles-stacks.md +1 -1
- package/docs/development/setup.md +1 -1
- package/docs/getting-started.md +1 -1
- package/docs/guides/delegation.md +22 -20
- package/docs/guides/migrating-to-0.5.md +29 -0
- package/docs/guides/use-cases.md +6 -2
- package/docs/guides/web-editor.md +73 -5
- package/docs/reference/active-state.md +77 -0
- package/docs/reference/capabilities.md +259 -0
- package/docs/reference/commands.md +52 -24
- package/docs/reference/configuration.md +4 -2
- package/docs/reference/features.md +70 -4
- package/docs/reference/provider-support.md +67 -0
- package/docs/reference/public-api.md +49 -3
- package/docs/reference/session-cache.md +112 -0
- package/docs/reference/stack-schema.md +18 -4
- package/docs/reference/subagent-host-port.md +8 -0
- package/docs/zh-CN/README.md +3 -0
- package/docs/zh-CN/getting-started.md +1 -1
- package/docs/zh-CN/guides/delegation.md +22 -10
- package/docs/zh-CN/guides/migrating-to-0.5.md +29 -0
- package/docs/zh-CN/guides/web-editor.md +74 -7
- package/docs/zh-CN/reference/capabilities.md +259 -0
- package/docs/zh-CN/reference/commands.md +61 -33
- package/docs/zh-CN/reference/provider-support.md +67 -0
- package/docs/zh-CN/reference/session-cache.md +112 -0
- package/examples/capabilities/review.json +12 -0
- package/examples/capabilities/write-tools.json +15 -0
- package/examples/read-first-worker-prompt-stack.json +49 -0
- package/package.json +16 -9
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { formatResourceKey } from "./resource-identity.js";
|
|
2
|
+
import { showText } from "./preview.js";
|
|
3
|
+
const CAPABILITY_USAGE = "/capability add <text> | list | bindings | enable <[scope:]id> | enable-bound <id> | disable <activation-id> | status | reset | help";
|
|
4
|
+
const CAPABILITY_VERBS = ["add", "list", "bindings", "enable", "enable-bound", "disable", "status", "reset", "help"];
|
|
5
|
+
export function registerCapabilityCommand(pi, runtime) {
|
|
6
|
+
const command = {
|
|
7
|
+
description: "Manage session capabilities (no inference)",
|
|
8
|
+
getArgumentCompletions: (prefix) => capabilityArgumentCompletions(runtime, prefix),
|
|
9
|
+
handler: async (args, ctx) => {
|
|
10
|
+
await handleCapabilityCommand(runtime, args, ctx);
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
pi.registerCommand("capability", command);
|
|
14
|
+
}
|
|
15
|
+
async function handleCapabilityCommand(runtime, args, ctx) {
|
|
16
|
+
const { operation, value } = parseCapabilityInvocation(args);
|
|
17
|
+
try {
|
|
18
|
+
if (operation === "help") {
|
|
19
|
+
if (value.trim())
|
|
20
|
+
throw new Error(`Usage: ${CAPABILITY_USAGE}`);
|
|
21
|
+
return await showText(ctx, "pi-forge capability help", capabilityHelp());
|
|
22
|
+
}
|
|
23
|
+
if (operation === "list") {
|
|
24
|
+
assertNoValue(value);
|
|
25
|
+
return await showText(ctx, "Capability library", runtime.library(ctx));
|
|
26
|
+
}
|
|
27
|
+
if (operation === "status") {
|
|
28
|
+
assertNoValue(value);
|
|
29
|
+
return await showText(ctx, "Session capabilities", runtime.status(ctx));
|
|
30
|
+
}
|
|
31
|
+
if (operation === "bindings") {
|
|
32
|
+
assertNoValue(value);
|
|
33
|
+
const res = runtime.readBindings(ctx);
|
|
34
|
+
if (!res.ok)
|
|
35
|
+
throw new Error(res.error);
|
|
36
|
+
const content = res.bindings.length
|
|
37
|
+
? res.bindings
|
|
38
|
+
.map((b) => `${b.id}${b.modelCallable ? " [modelCallable]" : " [human-only]"}: ${formatResourceKey(b.ref)}${b.capability.name ? ` — ${b.capability.name}` : ""}`)
|
|
39
|
+
.join("\n")
|
|
40
|
+
: "No capability bindings in active preset.";
|
|
41
|
+
return await showText(ctx, "Preset capability bindings", content);
|
|
42
|
+
}
|
|
43
|
+
if (operation === "enable-bound") {
|
|
44
|
+
assertSingleValue(value, "enable-bound <id>");
|
|
45
|
+
const res = runtime.enableBound(ctx, value.trim(), "user");
|
|
46
|
+
if (!res.ok)
|
|
47
|
+
throw new Error(res.error);
|
|
48
|
+
notify(ctx, res.message, "info");
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
if (operation !== "add" && operation !== "enable" && operation !== "disable" && operation !== "reset") {
|
|
52
|
+
throw new Error(`Usage: ${CAPABILITY_USAGE}`);
|
|
53
|
+
}
|
|
54
|
+
if (operation === "reset") {
|
|
55
|
+
assertNoValue(value);
|
|
56
|
+
}
|
|
57
|
+
else if (operation !== "add") {
|
|
58
|
+
assertSingleValue(value, `${operation} <${operation === "disable" ? "activation-id" : "id"}>`);
|
|
59
|
+
}
|
|
60
|
+
else if (!value.trim()) {
|
|
61
|
+
throw new Error("Usage: /capability add <text>");
|
|
62
|
+
}
|
|
63
|
+
const result = runtime.change(ctx, operation, operation === "add" ? value : value.trim());
|
|
64
|
+
notify(ctx, result, "info");
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
const message = `pi-forge: ${error instanceof Error ? error.message : "Capability update failed."}`;
|
|
68
|
+
if (ctx.hasUI)
|
|
69
|
+
ctx.ui.notify(message, "error");
|
|
70
|
+
else
|
|
71
|
+
console.error(message);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
function capabilityArgumentCompletions(runtime, prefix) {
|
|
75
|
+
const input = prefix.trimStart();
|
|
76
|
+
if (!input)
|
|
77
|
+
return CAPABILITY_VERBS.map((verb) => ({ value: verb, label: verb }));
|
|
78
|
+
const match = input.match(/^(\S+)([\s\S]*)$/);
|
|
79
|
+
if (!match)
|
|
80
|
+
return CAPABILITY_VERBS.map((verb) => ({ value: verb, label: verb }));
|
|
81
|
+
const operation = match[1];
|
|
82
|
+
const remainder = match[2] ?? "";
|
|
83
|
+
if (!remainder && !prefix.endsWith(" ")) {
|
|
84
|
+
return CAPABILITY_VERBS
|
|
85
|
+
.filter((verb) => verb.startsWith(operation))
|
|
86
|
+
.map((verb) => ({ value: verb, label: verb }));
|
|
87
|
+
}
|
|
88
|
+
if (operation === "add")
|
|
89
|
+
return null;
|
|
90
|
+
if (!["enable", "enable-bound", "disable"].includes(operation))
|
|
91
|
+
return [];
|
|
92
|
+
const argument = remainder.trim();
|
|
93
|
+
if (argument && /\s/.test(argument))
|
|
94
|
+
return [];
|
|
95
|
+
// The command API does not pass a context to completion callbacks. The
|
|
96
|
+
// runtime retains only the current session context, and rejects a disposed
|
|
97
|
+
// or cross-session view rather than exposing stale resources.
|
|
98
|
+
const projected = runtime.completionView();
|
|
99
|
+
if (!projected.ok)
|
|
100
|
+
return [];
|
|
101
|
+
if (operation === "enable") {
|
|
102
|
+
const wantsScope = argument.includes(":");
|
|
103
|
+
return projected.capabilities
|
|
104
|
+
.map((candidate) => ({
|
|
105
|
+
selector: wantsScope || candidate.collides ? candidate.id : candidate.bareId,
|
|
106
|
+
label: candidate.label,
|
|
107
|
+
}))
|
|
108
|
+
.filter((candidate) => candidate.selector.startsWith(argument))
|
|
109
|
+
.sort((a, b) => a.selector.localeCompare(b.selector))
|
|
110
|
+
.map((candidate) => ({ value: `enable ${candidate.selector}`, label: candidate.label }));
|
|
111
|
+
}
|
|
112
|
+
if (operation === "enable-bound") {
|
|
113
|
+
return projected.bindings
|
|
114
|
+
.filter((candidate) => candidate.id.startsWith(argument))
|
|
115
|
+
.map((candidate) => ({ value: `enable-bound ${candidate.id}`, label: candidate.label }));
|
|
116
|
+
}
|
|
117
|
+
return projected.active
|
|
118
|
+
.filter((candidate) => candidate.id.startsWith(argument))
|
|
119
|
+
.map((candidate) => ({ value: `disable ${candidate.id}`, label: candidate.label }));
|
|
120
|
+
}
|
|
121
|
+
function parseCapabilityInvocation(args) {
|
|
122
|
+
const input = args.trimStart();
|
|
123
|
+
if (!input)
|
|
124
|
+
return { operation: "status", value: "" };
|
|
125
|
+
const match = input.match(/^(\S+)([\s\S]*)$/);
|
|
126
|
+
if (!match)
|
|
127
|
+
return { operation: "status", value: "" };
|
|
128
|
+
const operation = match[1];
|
|
129
|
+
const remainder = match[2] ?? "";
|
|
130
|
+
// Remove only the first syntax separator for add. The rest is user text,
|
|
131
|
+
// including internal and trailing whitespace.
|
|
132
|
+
return { operation, value: operation === "add" && remainder.startsWith(" ") ? remainder.slice(1) : remainder.trim() };
|
|
133
|
+
}
|
|
134
|
+
function assertNoValue(value) {
|
|
135
|
+
if (value.trim())
|
|
136
|
+
throw new Error(`Usage: ${CAPABILITY_USAGE}`);
|
|
137
|
+
}
|
|
138
|
+
function assertSingleValue(value, usage) {
|
|
139
|
+
const trimmed = value.trim();
|
|
140
|
+
if (!trimmed || /\s/.test(trimmed))
|
|
141
|
+
throw new Error(`Usage: /capability ${usage}`);
|
|
142
|
+
}
|
|
143
|
+
function notify(ctx, message, level) {
|
|
144
|
+
if (ctx.hasUI)
|
|
145
|
+
ctx.ui.notify(message, level);
|
|
146
|
+
else if (level === "error")
|
|
147
|
+
console.error(message);
|
|
148
|
+
else
|
|
149
|
+
console.log(message);
|
|
150
|
+
}
|
|
151
|
+
function capabilityHelp() {
|
|
152
|
+
return [
|
|
153
|
+
"Usage:",
|
|
154
|
+
` ${CAPABILITY_USAGE}`,
|
|
155
|
+
"",
|
|
156
|
+
"add preserves the free-form text after the command and does not infer a capability ID.",
|
|
157
|
+
"enable completions offer bare IDs when unique, qualified selectors on collision or when ':' is typed.",
|
|
158
|
+
"enable-bound completes bindings saved on the current active preset, including human-only bindings.",
|
|
159
|
+
"disable completes exact active activation IDs; the label identifies the source and actor.",
|
|
160
|
+
"Completions use the current session and last published workspace snapshot only.",
|
|
161
|
+
"Run /capability list to explicitly reload the capability library; no watcher or per-keystroke scan is used.",
|
|
162
|
+
].join("\n");
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=capability-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability-command.js","sourceRoot":"","sources":["../src/capability-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { MAX_CAPABILITY_NAME_LENGTH, type CapabilityToolPatch } from "./codecs/capability.ts";
|
|
2
|
+
import { type ResourceKey } from "./resource-identity.ts";
|
|
3
|
+
export declare const CAPABILITY_SNAPSHOT_TYPE: "pi-forge.capability-snapshot";
|
|
4
|
+
export declare const FINGERPRINT_PATTERN: RegExp;
|
|
5
|
+
export declare const MAX_ID_LENGTH = 128;
|
|
6
|
+
export { MAX_CAPABILITY_NAME_LENGTH };
|
|
7
|
+
export declare const MAX_NAME_LENGTH = 1000;
|
|
8
|
+
export type CapabilitySource = {
|
|
9
|
+
kind: "manual";
|
|
10
|
+
} | {
|
|
11
|
+
kind: "capability";
|
|
12
|
+
key: ResourceKey;
|
|
13
|
+
binding?: {
|
|
14
|
+
preset: ResourceKey;
|
|
15
|
+
id: string;
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
export interface CapabilitySnapshot {
|
|
19
|
+
activationId: string;
|
|
20
|
+
source: CapabilitySource;
|
|
21
|
+
name?: string;
|
|
22
|
+
content: string;
|
|
23
|
+
tools: CapabilityToolPatch;
|
|
24
|
+
fingerprint: string;
|
|
25
|
+
}
|
|
26
|
+
export interface CapabilityActivateEvent {
|
|
27
|
+
schemaVersion: 1;
|
|
28
|
+
eventId: string;
|
|
29
|
+
op: "activate";
|
|
30
|
+
actor: "user" | "agent";
|
|
31
|
+
createdAt: number;
|
|
32
|
+
snapshot: CapabilitySnapshot;
|
|
33
|
+
}
|
|
34
|
+
export interface CapabilityDeactivateEvent {
|
|
35
|
+
schemaVersion: 1;
|
|
36
|
+
eventId: string;
|
|
37
|
+
op: "deactivate";
|
|
38
|
+
actor: "user" | "agent" | "lifecycle";
|
|
39
|
+
createdAt: number;
|
|
40
|
+
activationId: string;
|
|
41
|
+
}
|
|
42
|
+
export interface CapabilityResetEvent {
|
|
43
|
+
schemaVersion: 1;
|
|
44
|
+
eventId: string;
|
|
45
|
+
op: "reset";
|
|
46
|
+
actor: "user";
|
|
47
|
+
createdAt: number;
|
|
48
|
+
}
|
|
49
|
+
export type CapabilityEvent = CapabilityActivateEvent | CapabilityDeactivateEvent | CapabilityResetEvent;
|
|
50
|
+
export interface ActiveCapability {
|
|
51
|
+
snapshot: CapabilitySnapshot;
|
|
52
|
+
actor: "user" | "agent";
|
|
53
|
+
eventId: string;
|
|
54
|
+
createdAt: number;
|
|
55
|
+
}
|
|
56
|
+
export declare function createCapabilitySnapshot(input: Omit<CapabilitySnapshot, "fingerprint">): CapabilitySnapshot;
|
|
57
|
+
export declare function decodeCapabilityEvent(raw: unknown): {
|
|
58
|
+
ok: true;
|
|
59
|
+
event: CapabilityEvent;
|
|
60
|
+
} | {
|
|
61
|
+
ok: false;
|
|
62
|
+
error: string;
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* Reduce an ordered event stream into active capability states.
|
|
66
|
+
* Note: Current reducer only validates event shape and historical actor ownership.
|
|
67
|
+
* It does not validate current Preset.modelCallable, registered tools, or top-level policy;
|
|
68
|
+
* these are deferred to downstream services, and complete authorization checking is not claimed here.
|
|
69
|
+
*/
|
|
70
|
+
export declare function reduceCapabilityEvents(events: readonly unknown[]): {
|
|
71
|
+
ok: true;
|
|
72
|
+
active: readonly ActiveCapability[];
|
|
73
|
+
lastEventId?: string;
|
|
74
|
+
} | {
|
|
75
|
+
ok: false;
|
|
76
|
+
index: number;
|
|
77
|
+
error: string;
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=capability-events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability-events.d.ts","sourceRoot":"","sources":["../src/capability-events.ts"],"names":[],"mappings":"AACA,OAAO,EAGN,0BAA0B,EAE1B,KAAK,mBAAmB,EACxB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAGN,KAAK,WAAW,EAChB,MAAM,wBAAwB,CAAC;AAEhC,eAAO,MAAM,wBAAwB,EAAG,8BAAuC,CAAC;AAChF,eAAO,MAAM,mBAAmB,QAA6B,CAAC;AAC9D,eAAO,MAAM,aAAa,MAAM,CAAC;AACjC,OAAO,EAAE,0BAA0B,EAAE,CAAC;AACtC,eAAO,MAAM,eAAe,OAA6B,CAAC;AAE1D,MAAM,MAAM,gBAAgB,GACzB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IACA,IAAI,EAAE,YAAY,CAAC;IACnB,GAAG,EAAE,WAAW,CAAC;IACjB,OAAO,CAAC,EAAE;QACT,MAAM,EAAE,WAAW,CAAC;QACpB,EAAE,EAAE,MAAM,CAAC;KACX,CAAC;CACD,CAAC;AAEL,MAAM,WAAW,kBAAkB;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,gBAAgB,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,mBAAmB,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACvC,aAAa,EAAE,CAAC,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,UAAU,CAAC;IACf,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,kBAAkB,CAAC;CAC7B;AAED,MAAM,WAAW,yBAAyB;IACzC,aAAa,EAAE,CAAC,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,YAAY,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACpC,aAAa,EAAE,CAAC,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,eAAe,GACxB,uBAAuB,GACvB,yBAAyB,GACzB,oBAAoB,CAAC;AAExB,MAAM,WAAW,gBAAgB;IAChC,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CAClB;AAiLD,wBAAgB,wBAAwB,CACvC,KAAK,EAAE,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC,GAC5C,kBAAkB,CA0DpB;AAED,wBAAgB,qBAAqB,CACpC,GAAG,EAAE,OAAO,GACV;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,eAAe,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CA+KrE;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACrC,MAAM,EAAE,SAAS,OAAO,EAAE,GAExB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GACvE;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CA+G7C"}
|