@useactor/core 0.1.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.
Files changed (153) hide show
  1. package/dist/ai-sdk-provider.d.ts +54 -0
  2. package/dist/ai-sdk-provider.d.ts.map +1 -0
  3. package/dist/ai-sdk-provider.js +335 -0
  4. package/dist/ai-sdk-provider.js.map +1 -0
  5. package/dist/app-runtime.d.ts +83 -0
  6. package/dist/app-runtime.d.ts.map +1 -0
  7. package/dist/app-runtime.js +504 -0
  8. package/dist/app-runtime.js.map +1 -0
  9. package/dist/artifacts.d.ts +49 -0
  10. package/dist/artifacts.d.ts.map +1 -0
  11. package/dist/artifacts.js +50 -0
  12. package/dist/artifacts.js.map +1 -0
  13. package/dist/cli-defined-tools.d.ts +17 -0
  14. package/dist/cli-defined-tools.d.ts.map +1 -0
  15. package/dist/cli-defined-tools.js +146 -0
  16. package/dist/cli-defined-tools.js.map +1 -0
  17. package/dist/codex-oauth-provider.d.ts +30 -0
  18. package/dist/codex-oauth-provider.d.ts.map +1 -0
  19. package/dist/codex-oauth-provider.js +453 -0
  20. package/dist/codex-oauth-provider.js.map +1 -0
  21. package/dist/events.d.ts +133 -0
  22. package/dist/events.d.ts.map +1 -0
  23. package/dist/events.js +46 -0
  24. package/dist/events.js.map +1 -0
  25. package/dist/feedback.d.ts +29 -0
  26. package/dist/feedback.d.ts.map +1 -0
  27. package/dist/feedback.js +62 -0
  28. package/dist/feedback.js.map +1 -0
  29. package/dist/history.d.ts +34 -0
  30. package/dist/history.d.ts.map +1 -0
  31. package/dist/history.js +118 -0
  32. package/dist/history.js.map +1 -0
  33. package/dist/in-memory-runtime.d.ts +12 -0
  34. package/dist/in-memory-runtime.d.ts.map +1 -0
  35. package/dist/in-memory-runtime.js +491 -0
  36. package/dist/in-memory-runtime.js.map +1 -0
  37. package/dist/index.d.ts +36 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +36 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/integrations.d.ts +37 -0
  42. package/dist/integrations.d.ts.map +1 -0
  43. package/dist/integrations.js +48 -0
  44. package/dist/integrations.js.map +1 -0
  45. package/dist/local-event-logger.d.ts +19 -0
  46. package/dist/local-event-logger.d.ts.map +1 -0
  47. package/dist/local-event-logger.js +163 -0
  48. package/dist/local-event-logger.js.map +1 -0
  49. package/dist/local-event-schema.d.ts +99 -0
  50. package/dist/local-event-schema.d.ts.map +1 -0
  51. package/dist/local-event-schema.js +43 -0
  52. package/dist/local-event-schema.js.map +1 -0
  53. package/dist/local-tools.d.ts +99 -0
  54. package/dist/local-tools.d.ts.map +1 -0
  55. package/dist/local-tools.js +418 -0
  56. package/dist/local-tools.js.map +1 -0
  57. package/dist/mcp-server-config.d.ts +16 -0
  58. package/dist/mcp-server-config.d.ts.map +1 -0
  59. package/dist/mcp-server-config.js +75 -0
  60. package/dist/mcp-server-config.js.map +1 -0
  61. package/dist/mock-provider.d.ts +8 -0
  62. package/dist/mock-provider.d.ts.map +1 -0
  63. package/dist/mock-provider.js +47 -0
  64. package/dist/mock-provider.js.map +1 -0
  65. package/dist/model-catalog.d.ts +24 -0
  66. package/dist/model-catalog.d.ts.map +1 -0
  67. package/dist/model-catalog.js +92 -0
  68. package/dist/model-catalog.js.map +1 -0
  69. package/dist/monoid-integration.d.ts +33 -0
  70. package/dist/monoid-integration.d.ts.map +1 -0
  71. package/dist/monoid-integration.js +184 -0
  72. package/dist/monoid-integration.js.map +1 -0
  73. package/dist/openai-oauth.d.ts +69 -0
  74. package/dist/openai-oauth.d.ts.map +1 -0
  75. package/dist/openai-oauth.js +127 -0
  76. package/dist/openai-oauth.js.map +1 -0
  77. package/dist/permission-grant-store.d.ts +7 -0
  78. package/dist/permission-grant-store.d.ts.map +1 -0
  79. package/dist/permission-grant-store.js +77 -0
  80. package/dist/permission-grant-store.js.map +1 -0
  81. package/dist/permission-grants.d.ts +38 -0
  82. package/dist/permission-grants.d.ts.map +1 -0
  83. package/dist/permission-grants.js +93 -0
  84. package/dist/permission-grants.js.map +1 -0
  85. package/dist/personas.d.ts +51 -0
  86. package/dist/personas.d.ts.map +1 -0
  87. package/dist/personas.js +137 -0
  88. package/dist/personas.js.map +1 -0
  89. package/dist/project-tool-registry.d.ts +16 -0
  90. package/dist/project-tool-registry.d.ts.map +1 -0
  91. package/dist/project-tool-registry.js +86 -0
  92. package/dist/project-tool-registry.js.map +1 -0
  93. package/dist/projects.d.ts +88 -0
  94. package/dist/projects.d.ts.map +1 -0
  95. package/dist/projects.js +243 -0
  96. package/dist/projects.js.map +1 -0
  97. package/dist/prompt-context.d.ts +13 -0
  98. package/dist/prompt-context.d.ts.map +1 -0
  99. package/dist/prompt-context.js +170 -0
  100. package/dist/prompt-context.js.map +1 -0
  101. package/dist/proposed-plan.d.ts +24 -0
  102. package/dist/proposed-plan.d.ts.map +1 -0
  103. package/dist/proposed-plan.js +74 -0
  104. package/dist/proposed-plan.js.map +1 -0
  105. package/dist/providers.d.ts +53 -0
  106. package/dist/providers.d.ts.map +1 -0
  107. package/dist/providers.js +31 -0
  108. package/dist/providers.js.map +1 -0
  109. package/dist/question-requests.d.ts +39 -0
  110. package/dist/question-requests.d.ts.map +1 -0
  111. package/dist/question-requests.js +135 -0
  112. package/dist/question-requests.js.map +1 -0
  113. package/dist/renderer-api.d.ts +52 -0
  114. package/dist/renderer-api.d.ts.map +1 -0
  115. package/dist/renderer-api.js +2 -0
  116. package/dist/renderer-api.js.map +1 -0
  117. package/dist/runtime-tool-execution.d.ts +22 -0
  118. package/dist/runtime-tool-execution.d.ts.map +1 -0
  119. package/dist/runtime-tool-execution.js +245 -0
  120. package/dist/runtime-tool-execution.js.map +1 -0
  121. package/dist/runtime.d.ts +154 -0
  122. package/dist/runtime.d.ts.map +1 -0
  123. package/dist/runtime.js +184 -0
  124. package/dist/runtime.js.map +1 -0
  125. package/dist/secrets.d.ts +75 -0
  126. package/dist/secrets.d.ts.map +1 -0
  127. package/dist/secrets.js +255 -0
  128. package/dist/secrets.js.map +1 -0
  129. package/dist/session-actions.d.ts +45 -0
  130. package/dist/session-actions.d.ts.map +1 -0
  131. package/dist/session-actions.js +393 -0
  132. package/dist/session-actions.js.map +1 -0
  133. package/dist/skills.d.ts +43 -0
  134. package/dist/skills.d.ts.map +1 -0
  135. package/dist/skills.js +333 -0
  136. package/dist/skills.js.map +1 -0
  137. package/dist/test/setup.d.ts +2 -0
  138. package/dist/test/setup.d.ts.map +1 -0
  139. package/dist/test/setup.js +17 -0
  140. package/dist/test/setup.js.map +1 -0
  141. package/dist/tool-requests.d.ts +58 -0
  142. package/dist/tool-requests.d.ts.map +1 -0
  143. package/dist/tool-requests.js +122 -0
  144. package/dist/tool-requests.js.map +1 -0
  145. package/dist/tools.d.ts +45 -0
  146. package/dist/tools.d.ts.map +1 -0
  147. package/dist/tools.js +50 -0
  148. package/dist/tools.js.map +1 -0
  149. package/dist/wyrdos-integration.d.ts +32 -0
  150. package/dist/wyrdos-integration.d.ts.map +1 -0
  151. package/dist/wyrdos-integration.js +183 -0
  152. package/dist/wyrdos-integration.js.map +1 -0
  153. package/package.json +51 -0
package/dist/skills.js ADDED
@@ -0,0 +1,333 @@
1
+ import { mkdir, readdir, readFile, writeFile } from "node:fs/promises";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { resolveActorHome } from "@useactor/storage";
5
+ const skillFileName = "SKILL.md";
6
+ const builtInSkills = [
7
+ {
8
+ name: "Skill Creator",
9
+ invocationName: "skill-creator",
10
+ description: "Create or update Actor skills. Use when the user asks to create a new skill, improve an existing skill, or make a workflow reusable.",
11
+ path: "builtin:skill-creator",
12
+ scope: "user",
13
+ origin: "builtin",
14
+ instructions: "When the user asks to create a skill and scope is unclear, ask whether it should be project-specific or global. Use the skill tool. Project-specific skills save to the current project's .actor/skills directory. Global skills save to ACTOR_HOME/skills. Do not write skills into Codex directories. If a skill already exists, ask before overwriting and set overwrite only after explicit confirmation. Skills must include concise frontmatter name and description plus actionable Markdown instructions.",
15
+ },
16
+ ];
17
+ export async function listSkills(options = {}) {
18
+ const homedirPath = resolveSkillHomedir(options);
19
+ const roots = [
20
+ ...(options.projectRoot
21
+ ? [
22
+ {
23
+ root: path.join(options.projectRoot, ".actor", "skills"),
24
+ scope: "project",
25
+ origin: "project",
26
+ },
27
+ ]
28
+ : []),
29
+ {
30
+ root: path.join(resolveActorHome(options), "skills"),
31
+ scope: "user",
32
+ origin: "actor",
33
+ },
34
+ {
35
+ root: path.join(homedirPath, ".codex", "skills"),
36
+ scope: "user",
37
+ origin: "codex",
38
+ },
39
+ {
40
+ root: path.join(homedirPath, ".agents", "skills"),
41
+ scope: "user",
42
+ origin: "agents",
43
+ },
44
+ ];
45
+ const skills = [];
46
+ const errors = [];
47
+ const seenNames = new Set();
48
+ for (const root of roots) {
49
+ const loaded = await loadSkillsFromRoot(root.root, root.scope, root.origin);
50
+ for (const skill of loaded.skills) {
51
+ const key = skillIdentityKey(skill);
52
+ if (seenNames.has(key))
53
+ continue;
54
+ seenNames.add(key);
55
+ skills.push(skill);
56
+ }
57
+ errors.push(...loaded.errors);
58
+ }
59
+ for (const skill of builtInSkills) {
60
+ const key = skillIdentityKey(skill);
61
+ if (seenNames.has(key))
62
+ continue;
63
+ seenNames.add(key);
64
+ skills.push(skill);
65
+ }
66
+ skills.sort((first, second) => {
67
+ const origin = originRank(first.origin) - originRank(second.origin);
68
+ if (origin !== 0)
69
+ return origin;
70
+ return first.name.localeCompare(second.name);
71
+ });
72
+ return { skills, errors };
73
+ }
74
+ export function buildSkillsPromptSection(skills) {
75
+ if (skills.length === 0)
76
+ return undefined;
77
+ return [
78
+ "Actor skills:",
79
+ "A skill is a local instruction pack. File-backed skills live in `SKILL.md`; built-in skills include their instructions inline. If the user names a skill with `$skill-name` or the task clearly matches a skill description, follow that skill for the turn.",
80
+ "Available skills:",
81
+ ...skills.flatMap(formatSkillPromptLines),
82
+ ].join("\n");
83
+ }
84
+ export async function createActorSkill(input, options = {}) {
85
+ const name = normalizeSkillSlug(input.name);
86
+ const description = input.description.trim();
87
+ const body = input.body.trim();
88
+ if (!description)
89
+ throw new Error("Skill description is required.");
90
+ if (!body)
91
+ throw new Error("Skill body is required.");
92
+ const root = input.scope === "global"
93
+ ? path.join(resolveActorHome(options), "skills")
94
+ : options.projectRoot
95
+ ? path.join(options.projectRoot, ".actor", "skills")
96
+ : undefined;
97
+ if (!root) {
98
+ throw new Error("Project skill creation requires a project root.");
99
+ }
100
+ const skillPath = path.join(root, name, skillFileName);
101
+ const existing = await readExistingSkill(skillPath);
102
+ if (existing !== undefined && !input.overwrite) {
103
+ throw new Error(`Skill already exists: ${name}. Ask the user before overwriting it.`);
104
+ }
105
+ await mkdir(path.dirname(skillPath), { recursive: true });
106
+ await writeFile(skillPath, [
107
+ "---",
108
+ `name: ${JSON.stringify(name)}`,
109
+ `description: ${JSON.stringify(description)}`,
110
+ "---",
111
+ "",
112
+ body,
113
+ "",
114
+ ].join("\n"), "utf8");
115
+ return {
116
+ path: skillPath,
117
+ name,
118
+ scope: input.scope,
119
+ overwritten: existing !== undefined,
120
+ };
121
+ }
122
+ export function createSkillTool(options = {}) {
123
+ return {
124
+ id: "skill",
125
+ name: "Create Actor skill",
126
+ description: "Create or update an Actor skill. Ask whether the skill is project-specific or global if the user did not say. Project skills are saved in the project .actor/skills directory; global skills are saved in ACTOR_HOME/skills.",
127
+ inputSchema: {
128
+ type: "object",
129
+ additionalProperties: false,
130
+ required: ["name", "description", "body", "scope"],
131
+ properties: {
132
+ name: { type: "string" },
133
+ description: { type: "string" },
134
+ body: { type: "string" },
135
+ scope: { type: "string", enum: ["project", "global"] },
136
+ overwrite: { type: "boolean" },
137
+ },
138
+ },
139
+ permissionPolicy: "on-request",
140
+ async executor(input, context) {
141
+ const result = await createActorSkill(parseCreateSkillInput(input), {
142
+ ...options,
143
+ ...(context.project?.rootPath
144
+ ? { projectRoot: context.project.rootPath }
145
+ : {}),
146
+ });
147
+ return {
148
+ content: JSON.stringify(result),
149
+ metadata: {
150
+ artifactKind: "actor_skill",
151
+ artifactPath: result.path,
152
+ scope: result.scope,
153
+ overwritten: result.overwritten,
154
+ },
155
+ };
156
+ },
157
+ };
158
+ }
159
+ async function loadSkillsFromRoot(root, scope, origin) {
160
+ let entries = [];
161
+ try {
162
+ entries = await readdir(root);
163
+ }
164
+ catch (error) {
165
+ if (isNotFoundError(error)) {
166
+ return { skills: [], errors: [] };
167
+ }
168
+ return {
169
+ skills: [],
170
+ errors: [{ path: root, message: safeErrorMessage(error) }],
171
+ };
172
+ }
173
+ const skills = [];
174
+ const errors = [];
175
+ for (const entry of entries) {
176
+ if (shouldSkipSkillDirectory(entry, origin))
177
+ continue;
178
+ const skillPath = path.join(root, entry, skillFileName);
179
+ try {
180
+ const parsed = parseSkillMarkdown(await readFile(skillPath, "utf8"));
181
+ skills.push({
182
+ name: parsed.name,
183
+ description: parsed.description,
184
+ path: skillPath,
185
+ scope,
186
+ origin,
187
+ });
188
+ }
189
+ catch (error) {
190
+ if (isNotFoundError(error))
191
+ continue;
192
+ errors.push({ path: skillPath, message: safeErrorMessage(error) });
193
+ }
194
+ }
195
+ return { skills, errors };
196
+ }
197
+ function parseSkillMarkdown(markdown) {
198
+ if (!markdown.startsWith("---\n")) {
199
+ throw new Error("missing YAML frontmatter");
200
+ }
201
+ const end = markdown.indexOf("\n---", 4);
202
+ if (end === -1) {
203
+ throw new Error("unterminated YAML frontmatter");
204
+ }
205
+ const frontmatter = parseSimpleFrontmatter(markdown.slice(4, end));
206
+ const name = frontmatter.name?.trim();
207
+ const description = frontmatter.description?.trim();
208
+ if (!name)
209
+ throw new Error("missing frontmatter field: name");
210
+ if (!description)
211
+ throw new Error("missing frontmatter field: description");
212
+ return { name, description };
213
+ }
214
+ function parseSimpleFrontmatter(value) {
215
+ const parsed = {};
216
+ for (const line of value.split("\n")) {
217
+ const trimmed = line.trim();
218
+ if (!trimmed || trimmed.startsWith("#"))
219
+ continue;
220
+ const colon = trimmed.indexOf(":");
221
+ if (colon === -1)
222
+ continue;
223
+ const key = trimmed.slice(0, colon).trim();
224
+ const rawValue = trimmed.slice(colon + 1).trim();
225
+ if (key === "name" || key === "description") {
226
+ parsed[key] = unquoteYamlScalar(rawValue);
227
+ }
228
+ }
229
+ return parsed;
230
+ }
231
+ function unquoteYamlScalar(value) {
232
+ if ((value.startsWith('"') && value.endsWith('"')) ||
233
+ (value.startsWith("'") && value.endsWith("'"))) {
234
+ return value.slice(1, -1);
235
+ }
236
+ return value;
237
+ }
238
+ function originRank(origin) {
239
+ switch (origin) {
240
+ case "project":
241
+ return 0;
242
+ case "actor":
243
+ return 1;
244
+ case "builtin":
245
+ return 2;
246
+ case "codex":
247
+ return 3;
248
+ case "agents":
249
+ return 4;
250
+ }
251
+ }
252
+ function shouldSkipSkillDirectory(entry, origin) {
253
+ return origin === "codex" && entry.startsWith(".");
254
+ }
255
+ function normalizeSkillName(name) {
256
+ return name.trim().toLowerCase();
257
+ }
258
+ function skillIdentityKey(skill) {
259
+ return normalizeSkillName(skill.invocationName ?? skill.name);
260
+ }
261
+ function formatSkillPromptLines(skill) {
262
+ const invocation = skill.invocationName ?? skill.name;
263
+ const header = skill.origin === "builtin"
264
+ ? `- ${skill.name} ($${invocation}): ${skill.description} (built-in)`
265
+ : `- ${skill.name}: ${skill.description} (file: ${skill.path})`;
266
+ return skill.instructions
267
+ ? [header, ` Instructions: ${skill.instructions}`]
268
+ : [header];
269
+ }
270
+ function normalizeSkillSlug(name) {
271
+ const normalized = name.trim();
272
+ if (!/^[a-z0-9][a-z0-9_-]*$/u.test(normalized)) {
273
+ throw new Error("Skill name must be a lowercase path-safe slug using letters, numbers, dashes, or underscores.");
274
+ }
275
+ return normalized;
276
+ }
277
+ function parseCreateSkillInput(input) {
278
+ if (!input || typeof input !== "object" || Array.isArray(input)) {
279
+ throw new Error("Skill tool input must be an object.");
280
+ }
281
+ const record = input;
282
+ const name = requiredString(record, "name");
283
+ const description = requiredString(record, "description");
284
+ const body = requiredString(record, "body");
285
+ const rawScope = requiredString(record, "scope");
286
+ if (rawScope !== "global" && rawScope !== "project") {
287
+ throw new Error("Skill scope must be either project or global.");
288
+ }
289
+ const overwrite = typeof record.overwrite === "boolean" ? record.overwrite : undefined;
290
+ return {
291
+ name,
292
+ description,
293
+ body,
294
+ scope: rawScope,
295
+ ...(overwrite !== undefined ? { overwrite } : {}),
296
+ };
297
+ }
298
+ function requiredString(record, key) {
299
+ const value = record[key];
300
+ if (typeof value !== "string" || !value.trim()) {
301
+ throw new Error(`Skill ${key} is required.`);
302
+ }
303
+ return value;
304
+ }
305
+ async function readExistingSkill(filePath) {
306
+ try {
307
+ return await readFile(filePath, "utf8");
308
+ }
309
+ catch (error) {
310
+ if (isNotFoundError(error))
311
+ return undefined;
312
+ throw error;
313
+ }
314
+ }
315
+ function resolveSkillHomedir(options) {
316
+ if (options?.homedirPath) {
317
+ return options.homedirPath;
318
+ }
319
+ if (options?.homedirResolver) {
320
+ return options.homedirResolver();
321
+ }
322
+ return os.homedir();
323
+ }
324
+ function safeErrorMessage(error) {
325
+ return error instanceof Error ? error.message : String(error);
326
+ }
327
+ function isNotFoundError(error) {
328
+ return Boolean(error &&
329
+ typeof error === "object" &&
330
+ "code" in error &&
331
+ error.code === "ENOENT");
332
+ }
333
+ //# sourceMappingURL=skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/test/setup.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ import { mkdtemp, rm } from "node:fs/promises";
2
+ import { tmpdir } from "node:os";
3
+ import path from "node:path";
4
+ import { afterAll, beforeAll } from "vitest";
5
+ let tempHomeRoot;
6
+ beforeAll(async () => {
7
+ tempHomeRoot = await mkdtemp(path.join(tmpdir(), "actor-core-test-home-"));
8
+ process.env.ACTOR_HOME = tempHomeRoot;
9
+ delete process.env.OPENAI_API_KEY;
10
+ delete process.env.ANTHROPIC_API_KEY;
11
+ });
12
+ afterAll(async () => {
13
+ if (tempHomeRoot) {
14
+ await rm(tempHomeRoot, { recursive: true, force: true });
15
+ }
16
+ });
17
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/test/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAE7C,IAAI,YAAgC,CAAC;AAErC,SAAS,CAAC,KAAK,IAAI,EAAE;IACnB,YAAY,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,uBAAuB,CAAC,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,YAAY,CAAC;IACtC,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAClC,OAAO,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;AACvC,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,KAAK,IAAI,EAAE;IAClB,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,EAAE,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,58 @@
1
+ import { type PermissionGrantRequest, type PermissionGrantStore } from "./permission-grants.js";
2
+ import { type ApprovalDecisionType, type ApprovalResultEvent, type EventContext, type ToolRequestEvent } from "./events.js";
3
+ import type { ActorId } from "./runtime.js";
4
+ export type { ApprovalDecisionType } from "./events.js";
5
+ export interface ToolRequestDescriptor {
6
+ readonly toolId: ActorId;
7
+ readonly action: string;
8
+ readonly target?: string;
9
+ readonly reason: string;
10
+ readonly preview?: string;
11
+ }
12
+ export interface PendingToolRequest {
13
+ readonly runId: ActorId;
14
+ readonly requestId: ActorId;
15
+ readonly sessionId: ActorId;
16
+ readonly descriptor: ToolRequestDescriptor;
17
+ readonly permissionRequest?: PermissionGrantRequest;
18
+ readonly context: EventContext;
19
+ }
20
+ export interface ApprovalDecisionInput {
21
+ readonly runId: ActorId;
22
+ readonly requestId: ActorId;
23
+ readonly decision: ApprovalDecisionType;
24
+ readonly instruction?: string;
25
+ }
26
+ export interface UnknownToolRequestResult {
27
+ readonly status: "unknown_request";
28
+ }
29
+ export interface ApprovedToolRequestResult {
30
+ readonly status: "approved";
31
+ readonly event: ApprovalResultEvent;
32
+ readonly toolResult?: unknown;
33
+ }
34
+ export interface DeniedToolRequestResult {
35
+ readonly status: "denied";
36
+ readonly event: ApprovalResultEvent;
37
+ }
38
+ export interface RedirectedToolRequestResult {
39
+ readonly status: "redirected";
40
+ readonly event: ApprovalResultEvent;
41
+ readonly instruction: string;
42
+ }
43
+ export type ApprovalDecisionResult = UnknownToolRequestResult | ApprovedToolRequestResult | DeniedToolRequestResult | RedirectedToolRequestResult;
44
+ export declare class ToolRequestLifecycle {
45
+ private readonly options;
46
+ private readonly pendingByRun;
47
+ constructor(options?: {
48
+ readonly grantStore?: PermissionGrantStore;
49
+ });
50
+ createPendingRequest(input: PendingToolRequest): ToolRequestEvent;
51
+ requestToolExecution(input: PendingToolRequest, execute: (request: PendingToolRequest) => Promise<unknown>): {
52
+ readonly event: ToolRequestEvent;
53
+ readonly result: Promise<ApprovalDecisionResult>;
54
+ };
55
+ executeWithMatchingGrant(request: PendingToolRequest, execute: (request: PendingToolRequest) => Promise<unknown>): Promise<ApprovedToolRequestResult | undefined>;
56
+ submitApprovalDecision(input: ApprovalDecisionInput, execute?: (request: PendingToolRequest) => Promise<void>): Promise<ApprovalDecisionResult>;
57
+ }
58
+ //# sourceMappingURL=tool-requests.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-requests.d.ts","sourceRoot":"","sources":["../src/tool-requests.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,122 @@
1
+ import { createPermissionGrant, findMatchingPermissionGrant, shouldPersistPermissionGrant } from "./permission-grants.js";
2
+ import { createApprovalResultEvent, createToolRequestEvent } from "./events.js";
3
+ export class ToolRequestLifecycle {
4
+ options;
5
+ pendingByRun = new Map();
6
+ constructor(options = {}) {
7
+ this.options = options;
8
+ }
9
+ createPendingRequest(input) {
10
+ const runRequests = this.pendingByRun.get(input.runId) ?? new Map();
11
+ runRequests.set(input.requestId, input);
12
+ this.pendingByRun.set(input.runId, runRequests);
13
+ return createToolRequestEvent(input.context, input.requestId, input.descriptor);
14
+ }
15
+ requestToolExecution(input, execute) {
16
+ let resolveResult;
17
+ let rejectResult;
18
+ const result = new Promise((resolve, reject) => {
19
+ resolveResult = resolve;
20
+ rejectResult = reject;
21
+ });
22
+ const runRequests = this.pendingByRun.get(input.runId) ?? new Map();
23
+ runRequests.set(input.requestId, {
24
+ ...input,
25
+ execute,
26
+ resolve: resolveResult,
27
+ reject: rejectResult
28
+ });
29
+ this.pendingByRun.set(input.runId, runRequests);
30
+ return {
31
+ event: createToolRequestEvent(input.context, input.requestId, input.descriptor),
32
+ result
33
+ };
34
+ }
35
+ async executeWithMatchingGrant(request, execute) {
36
+ if (!request.permissionRequest || !this.options.grantStore) {
37
+ return undefined;
38
+ }
39
+ const grants = await this.options.grantStore.listPermissionGrants();
40
+ const grant = findMatchingPermissionGrant(grants, request.permissionRequest);
41
+ if (!grant) {
42
+ return undefined;
43
+ }
44
+ const toolResult = await execute(request);
45
+ return {
46
+ status: "approved",
47
+ event: createApprovalResultEvent(request.context, request.requestId, true, grant.type),
48
+ ...(toolResult !== undefined ? { toolResult } : {})
49
+ };
50
+ }
51
+ async submitApprovalDecision(input, execute = async () => { }) {
52
+ const runRequests = this.pendingByRun.get(input.runId);
53
+ const request = runRequests?.get(input.requestId);
54
+ if (!request) {
55
+ return { status: "unknown_request" };
56
+ }
57
+ if (input.decision === "redirect") {
58
+ runRequests?.delete(input.requestId);
59
+ if (runRequests?.size === 0) {
60
+ this.pendingByRun.delete(input.runId);
61
+ }
62
+ const result = {
63
+ status: "redirected",
64
+ event: createApprovalResultEvent(request.context, input.requestId, false, "redirect"),
65
+ instruction: input.instruction ?? request.descriptor.reason
66
+ };
67
+ resolvePendingExecution(request, result);
68
+ return result;
69
+ }
70
+ if (input.decision === "deny") {
71
+ runRequests?.delete(input.requestId);
72
+ if (runRequests?.size === 0) {
73
+ this.pendingByRun.delete(input.runId);
74
+ }
75
+ const result = {
76
+ status: "denied",
77
+ event: createApprovalResultEvent(request.context, input.requestId, false, "deny")
78
+ };
79
+ resolvePendingExecution(request, result);
80
+ return result;
81
+ }
82
+ let toolResult;
83
+ try {
84
+ toolResult = await (isPendingToolExecution(request) ? request.execute(request) : execute(request));
85
+ if (input.decision === "allow_always" &&
86
+ request.permissionRequest &&
87
+ this.options.grantStore &&
88
+ shouldPersistPermissionGrant(input.decision)) {
89
+ await this.options.grantStore.savePermissionGrant(createPermissionGrant({
90
+ ...request.permissionRequest,
91
+ type: "allow_always"
92
+ }));
93
+ }
94
+ }
95
+ catch (error) {
96
+ if (isPendingToolExecution(request)) {
97
+ request.reject(error);
98
+ }
99
+ throw error;
100
+ }
101
+ runRequests?.delete(input.requestId);
102
+ if (runRequests?.size === 0) {
103
+ this.pendingByRun.delete(input.runId);
104
+ }
105
+ const result = {
106
+ status: "approved",
107
+ event: createApprovalResultEvent(request.context, input.requestId, true, input.decision),
108
+ ...(toolResult !== undefined ? { toolResult } : {})
109
+ };
110
+ resolvePendingExecution(request, result);
111
+ return result;
112
+ }
113
+ }
114
+ function isPendingToolExecution(request) {
115
+ return "execute" in request;
116
+ }
117
+ function resolvePendingExecution(request, result) {
118
+ if (isPendingToolExecution(request)) {
119
+ request.resolve(result);
120
+ }
121
+ }
122
+ //# sourceMappingURL=tool-requests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-requests.js","sourceRoot":"","sources":["../src/tool-requests.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import type { ProjectRef, ActorId } from "./runtime.js";
2
+ export type ToolPermissionPolicy = "never" | "on-request" | "always";
3
+ export interface ToolExecutionContext {
4
+ readonly sessionId: ActorId;
5
+ readonly runId: ActorId;
6
+ readonly project?: ProjectRef;
7
+ }
8
+ export interface ToolExecutionResult {
9
+ readonly content: string;
10
+ readonly metadata?: Record<string, unknown>;
11
+ }
12
+ export type ToolExecutor = (input: unknown, context: ToolExecutionContext) => Promise<ToolExecutionResult>;
13
+ export interface ToolDefinition {
14
+ readonly id: ActorId;
15
+ readonly name: string;
16
+ readonly description: string;
17
+ readonly inputSchema: unknown;
18
+ readonly permissionPolicy: ToolPermissionPolicy;
19
+ readonly projectFilter?: {
20
+ readonly projectIds?: readonly ActorId[];
21
+ };
22
+ readonly executor: ToolExecutor;
23
+ }
24
+ export interface ToolDescriptor {
25
+ readonly id: ActorId;
26
+ readonly name: string;
27
+ readonly description: string;
28
+ readonly inputSchema: unknown;
29
+ readonly permissionPolicy: ToolPermissionPolicy;
30
+ }
31
+ export interface ListToolsOptions {
32
+ readonly project?: ProjectRef;
33
+ }
34
+ export interface ToolRegistry {
35
+ registerTool(tool: ToolDefinition): void;
36
+ listTools(options?: ListToolsOptions): readonly ToolDefinition[];
37
+ listToolDescriptors(options?: ListToolsOptions): readonly ToolDescriptor[];
38
+ getTool(toolId: ActorId): ToolDefinition | undefined;
39
+ }
40
+ export declare class DuplicateToolIdError extends Error {
41
+ constructor(toolId: ActorId);
42
+ }
43
+ export declare function createToolRegistry(initialTools?: readonly ToolDefinition[]): ToolRegistry;
44
+ export declare function toToolDescriptor(tool: ToolDefinition): ToolDescriptor;
45
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAExD,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,YAAY,GAAG,QAAQ,CAAC;AAErE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC;CAC/B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7C;AAED,MAAM,MAAM,YAAY,GAAG,CACzB,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,oBAAoB,KAC1B,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAElC,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,oBAAoB,CAAC;IAChD,QAAQ,CAAC,aAAa,CAAC,EAAE;QACvB,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;KAC1C,CAAC;IACF,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;CACjC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,oBAAoB,CAAC;CACjD;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,CAAC;IACzC,SAAS,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,SAAS,cAAc,EAAE,CAAC;IACjE,mBAAmB,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,SAAS,cAAc,EAAE,CAAC;IAC3E,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,cAAc,GAAG,SAAS,CAAC;CACtD;AAED,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,MAAM,EAAE,OAAO;CAI5B;AAED,wBAAgB,kBAAkB,CAAC,YAAY,GAAE,SAAS,cAAc,EAAO,GAAG,YAAY,CA8B7F;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,cAAc,GAAG,cAAc,CAQrE"}