@a5c-ai/agent-core 0.1.0 → 5.0.1-staging.13b6281a

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 (82) hide show
  1. package/dist/agenticTools/background/state.d.ts +5 -0
  2. package/dist/agenticTools/background/state.d.ts.map +1 -0
  3. package/dist/agenticTools/background/state.js +25 -0
  4. package/dist/agenticTools/background/tools.d.ts +3 -0
  5. package/dist/agenticTools/background/tools.d.ts.map +1 -0
  6. package/dist/agenticTools/background/tools.js +37 -0
  7. package/dist/agenticTools/browser/tool.d.ts +3 -0
  8. package/dist/agenticTools/browser/tool.d.ts.map +1 -0
  9. package/dist/agenticTools/browser/tool.js +64 -0
  10. package/dist/agenticTools/config/state.d.ts +10 -0
  11. package/dist/agenticTools/config/state.d.ts.map +1 -0
  12. package/dist/agenticTools/config/state.js +127 -0
  13. package/dist/agenticTools/config/tool.d.ts +3 -0
  14. package/dist/agenticTools/config/tool.d.ts.map +1 -0
  15. package/dist/agenticTools/config/tool.js +87 -0
  16. package/dist/agenticTools/discovery/tools.d.ts +3 -0
  17. package/dist/agenticTools/discovery/tools.d.ts.map +1 -0
  18. package/dist/agenticTools/discovery/tools.js +71 -0
  19. package/dist/agenticTools/index.d.ts +5 -0
  20. package/dist/agenticTools/index.d.ts.map +1 -0
  21. package/dist/agenticTools/index.js +41 -0
  22. package/dist/agenticTools/shared/paths.d.ts +5 -0
  23. package/dist/agenticTools/shared/paths.d.ts.map +1 -0
  24. package/dist/agenticTools/shared/paths.js +116 -0
  25. package/dist/agenticTools/shared/process.d.ts +15 -0
  26. package/dist/agenticTools/shared/process.d.ts.map +1 -0
  27. package/dist/agenticTools/shared/process.js +122 -0
  28. package/dist/agenticTools/shared/results.d.ts +9 -0
  29. package/dist/agenticTools/shared/results.d.ts.map +1 -0
  30. package/dist/agenticTools/shared/results.js +50 -0
  31. package/dist/agenticTools/tools/code.d.ts +3 -0
  32. package/dist/agenticTools/tools/code.d.ts.map +1 -0
  33. package/dist/agenticTools/tools/code.js +305 -0
  34. package/dist/agenticTools/tools/delegation.d.ts +3 -0
  35. package/dist/agenticTools/tools/delegation.d.ts.map +1 -0
  36. package/dist/agenticTools/tools/delegation.js +131 -0
  37. package/dist/agenticTools/tools/execution.d.ts +3 -0
  38. package/dist/agenticTools/tools/execution.d.ts.map +1 -0
  39. package/dist/agenticTools/tools/execution.js +132 -0
  40. package/dist/agenticTools/tools/fileSystem.d.ts +3 -0
  41. package/dist/agenticTools/tools/fileSystem.d.ts.map +1 -0
  42. package/dist/agenticTools/tools/fileSystem.js +210 -0
  43. package/dist/agenticTools/types.d.ts +3 -0
  44. package/dist/agenticTools/types.d.ts.map +1 -0
  45. package/dist/agenticTools/types.js +5 -0
  46. package/dist/agenticTools/web/content.d.ts +3 -0
  47. package/dist/agenticTools/web/content.d.ts.map +1 -0
  48. package/dist/agenticTools/web/content.js +54 -0
  49. package/dist/agenticTools/web/searchHelpers.d.ts +8 -0
  50. package/dist/agenticTools/web/searchHelpers.d.ts.map +1 -0
  51. package/dist/agenticTools/web/searchHelpers.js +50 -0
  52. package/dist/agenticTools/web/tools.d.ts +3 -0
  53. package/dist/agenticTools/web/tools.d.ts.map +1 -0
  54. package/dist/agenticTools/web/tools.js +119 -0
  55. package/dist/backgroundProcessRegistry.d.ts +63 -0
  56. package/dist/backgroundProcessRegistry.d.ts.map +1 -0
  57. package/dist/backgroundProcessRegistry.js +200 -0
  58. package/dist/deferredToolRegistry.d.ts +76 -0
  59. package/dist/deferredToolRegistry.d.ts.map +1 -0
  60. package/dist/deferredToolRegistry.js +150 -0
  61. package/dist/deferredToolRegistry.test.d.ts +2 -0
  62. package/dist/deferredToolRegistry.test.d.ts.map +1 -0
  63. package/dist/deferredToolRegistry.test.js +64 -0
  64. package/dist/index.d.ts +7 -0
  65. package/dist/index.d.ts.map +1 -0
  66. package/dist/index.js +20 -0
  67. package/dist/session.d.ts +31 -0
  68. package/dist/session.d.ts.map +1 -0
  69. package/dist/session.js +272 -0
  70. package/dist/session.test.d.ts +2 -0
  71. package/dist/session.test.d.ts.map +1 -0
  72. package/dist/session.test.js +258 -0
  73. package/dist/tools.d.ts +9 -0
  74. package/dist/tools.d.ts.map +1 -0
  75. package/dist/tools.js +18 -0
  76. package/dist/tools.test.d.ts +2 -0
  77. package/dist/tools.test.d.ts.map +1 -0
  78. package/dist/tools.test.js +514 -0
  79. package/dist/types.d.ts +110 -0
  80. package/dist/types.d.ts.map +1 -0
  81. package/dist/types.js +30 -0
  82. package/package.json +3 -3
@@ -0,0 +1,5 @@
1
+ import { BackgroundProcessRegistry } from "../../backgroundProcessRegistry";
2
+ import type { AgenticToolOptions } from "../types";
3
+ export declare function getBackgroundRegistry(options: AgenticToolOptions): BackgroundProcessRegistry;
4
+ export declare function disposeBackgroundRegistry(options: AgenticToolOptions): void;
5
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/agenticTools/background/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAInD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,kBAAkB,GAAG,yBAAyB,CAW5F;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAO3E"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getBackgroundRegistry = getBackgroundRegistry;
4
+ exports.disposeBackgroundRegistry = disposeBackgroundRegistry;
5
+ const backgroundProcessRegistry_1 = require("../../backgroundProcessRegistry");
6
+ const scopedRegistries = new WeakMap();
7
+ function getBackgroundRegistry(options) {
8
+ if (options.backgroundRegistry) {
9
+ return options.backgroundRegistry;
10
+ }
11
+ let registry = scopedRegistries.get(options);
12
+ if (!registry) {
13
+ registry = new backgroundProcessRegistry_1.BackgroundProcessRegistry({ maxConcurrent: options.maxBackgroundProcesses });
14
+ scopedRegistries.set(options, registry);
15
+ }
16
+ return registry;
17
+ }
18
+ function disposeBackgroundRegistry(options) {
19
+ const registry = scopedRegistries.get(options);
20
+ if (!registry) {
21
+ return;
22
+ }
23
+ registry.dispose();
24
+ scopedRegistries.delete(options);
25
+ }
@@ -0,0 +1,3 @@
1
+ import type { AgenticToolOptions, CustomToolDefinition } from "../types";
2
+ export declare function createBackgroundTools(options: AgenticToolOptions): CustomToolDefinition[];
3
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/agenticTools/background/tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAIzE,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,kBAAkB,GAAG,oBAAoB,EAAE,CA+BzF"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createBackgroundTools = createBackgroundTools;
4
+ const typebox_1 = require("@sinclair/typebox");
5
+ const results_1 = require("../shared/results");
6
+ const state_1 = require("./state");
7
+ function createBackgroundTools(options) {
8
+ return [
9
+ {
10
+ name: "background_status",
11
+ label: "Background Task Status",
12
+ description: "Query the status of a background task by its backgroundTaskId. Returns the task record including status, stdout, stderr, and exit code.",
13
+ parameters: typebox_1.Type.Object({
14
+ backgroundTaskId: typebox_1.Type.String({
15
+ description: "The backgroundTaskId returned when launching a background task",
16
+ }),
17
+ }),
18
+ execute: (_toolCallId, params) => {
19
+ const backgroundTaskId = String(params.backgroundTaskId);
20
+ const record = (0, state_1.getBackgroundRegistry)(options).get(backgroundTaskId);
21
+ if (!record) {
22
+ return (0, results_1.errorResult)(`Background task not found: ${backgroundTaskId}`);
23
+ }
24
+ return (0, results_1.jsonResult)(record);
25
+ },
26
+ },
27
+ {
28
+ name: "background_list",
29
+ label: "List Background Tasks",
30
+ description: "List all tracked background tasks with their current status.",
31
+ parameters: typebox_1.Type.Object({}),
32
+ execute: () => (0, results_1.jsonResult)({
33
+ tasks: (0, state_1.getBackgroundRegistry)(options).list(),
34
+ }),
35
+ },
36
+ ];
37
+ }
@@ -0,0 +1,3 @@
1
+ import type { CustomToolDefinition } from "../types";
2
+ export declare function createBrowserTool(): CustomToolDefinition;
3
+ //# sourceMappingURL=tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../../src/agenticTools/browser/tool.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAoBrD,wBAAgB,iBAAiB,IAAI,oBAAoB,CA+DxD"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createBrowserTool = createBrowserTool;
4
+ const typebox_1 = require("@sinclair/typebox");
5
+ const results_1 = require("../shared/results");
6
+ let browserInstance = null;
7
+ function createBrowserTool() {
8
+ return {
9
+ name: "browser",
10
+ label: "Headless Browser",
11
+ description: "Interact with a headless browser. Actions: navigate, click, type, evaluate, screenshot, close.",
12
+ parameters: typebox_1.Type.Object({
13
+ action: typebox_1.Type.String({
14
+ description: "Action: navigate | click | type | evaluate | screenshot | close",
15
+ }),
16
+ url: typebox_1.Type.Optional(typebox_1.Type.String({ description: "URL to navigate to" })),
17
+ selector: typebox_1.Type.Optional(typebox_1.Type.String({ description: "CSS selector for click/type" })),
18
+ text: typebox_1.Type.Optional(typebox_1.Type.String({ description: "Text to type" })),
19
+ script: typebox_1.Type.Optional(typebox_1.Type.String({ description: "JavaScript to evaluate in page" })),
20
+ options: typebox_1.Type.Optional(typebox_1.Type.Object({}, { additionalProperties: true })),
21
+ }),
22
+ execute: async (_toolCallId, params) => {
23
+ let puppeteer;
24
+ try {
25
+ // eslint-disable-next-line @typescript-eslint/no-implied-eval, @typescript-eslint/no-unsafe-assignment
26
+ puppeteer = await new Function("id", "return import(id)")("puppeteer");
27
+ }
28
+ catch {
29
+ return (0, results_1.errorResult)("puppeteer is not installed. Install it with: npm install puppeteer");
30
+ }
31
+ if (!browserInstance) {
32
+ browserInstance = await puppeteer.launch({
33
+ headless: true,
34
+ args: ["--no-sandbox", "--disable-setuid-sandbox"],
35
+ });
36
+ }
37
+ const browser = browserInstance;
38
+ const page = (await browser.pages())[0] ?? await browser.newPage();
39
+ switch (String(params.action)) {
40
+ case "navigate":
41
+ await page.goto(String(params.url), { waitUntil: "domcontentloaded" });
42
+ return (0, results_1.ok)(`Navigated to ${String(params.url)} — title: ${await page.title()}`);
43
+ case "click":
44
+ await page.click(String(params.selector));
45
+ return (0, results_1.ok)(`Clicked ${String(params.selector)}`);
46
+ case "type":
47
+ await page.type(String(params.selector), String(params.text));
48
+ return (0, results_1.ok)(`Typed into ${String(params.selector)}`);
49
+ case "evaluate":
50
+ return (0, results_1.jsonResult)(await page.evaluate(String(params.script)));
51
+ case "screenshot": {
52
+ const buffer = await page.screenshot({ encoding: "base64" });
53
+ return (0, results_1.ok)(`Screenshot captured (${buffer.length} base64 chars).`);
54
+ }
55
+ case "close":
56
+ await browser.close();
57
+ browserInstance = null;
58
+ return (0, results_1.ok)("Browser closed.");
59
+ default:
60
+ return (0, results_1.errorResult)(`Unknown browser action: ${String(params.action)}`);
61
+ }
62
+ },
63
+ };
64
+ }
@@ -0,0 +1,10 @@
1
+ export declare function resetRunScopedConfig(): void;
2
+ export declare function isValidConfigKey(key: string): boolean;
3
+ export declare function validateConfigValue(key: string, value: unknown): string | null;
4
+ export declare function getConfigValue(key: string): unknown;
5
+ export declare function getConfigDefault(key: string): unknown;
6
+ export declare function listConfigKeys(): string[];
7
+ export declare function getRunScopedConfigEntries(): IterableIterator<[string, unknown]>;
8
+ export declare function setConfigValue(key: string, value: unknown, scope: string): void;
9
+ export declare function resetConfigValue(key?: string): void;
10
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/agenticTools/config/state.ts"],"names":[],"mappings":"AAwDA,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAKrD;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAY9E;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CASnD;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAKrD;AAED,wBAAgB,cAAc,IAAI,MAAM,EAAE,CAMzC;AAED,wBAAgB,yBAAyB,IAAI,gBAAgB,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAE/E;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAU/E;AAED,wBAAgB,gBAAgB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAMnD"}
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resetRunScopedConfig = resetRunScopedConfig;
4
+ exports.isValidConfigKey = isValidConfigKey;
5
+ exports.validateConfigValue = validateConfigValue;
6
+ exports.getConfigValue = getConfigValue;
7
+ exports.getConfigDefault = getConfigDefault;
8
+ exports.listConfigKeys = listConfigKeys;
9
+ exports.getRunScopedConfigEntries = getRunScopedConfigEntries;
10
+ exports.setConfigValue = setConfigValue;
11
+ exports.resetConfigValue = resetConfigValue;
12
+ const babysitter_sdk_1 = require("@a5c-ai/babysitter-sdk");
13
+ const EXTENDED_CONFIG_KEYS = new Set([
14
+ "model",
15
+ "provider",
16
+ "breakpoint.autoApproveAfterN",
17
+ "breakpoint.presentAlwaysApprove",
18
+ ]);
19
+ const BABYSITTER_CONFIG_KEYS = new Set([
20
+ "runsDir",
21
+ "maxIterations",
22
+ "qualityThreshold",
23
+ "timeout",
24
+ "logLevel",
25
+ "allowSecretLogs",
26
+ "hookTimeout",
27
+ "nodeTaskTimeout",
28
+ "clockStepMs",
29
+ "clockStartMs",
30
+ "layoutVersion",
31
+ "largeResultPreviewLimit",
32
+ ]);
33
+ const CONFIG_KEY_TYPES = {
34
+ runsDir: "string",
35
+ maxIterations: "number",
36
+ qualityThreshold: "number",
37
+ timeout: "number",
38
+ logLevel: "string",
39
+ allowSecretLogs: "boolean",
40
+ hookTimeout: "number",
41
+ nodeTaskTimeout: "number",
42
+ clockStepMs: "number",
43
+ clockStartMs: "number",
44
+ layoutVersion: "string",
45
+ largeResultPreviewLimit: "number",
46
+ model: "string",
47
+ provider: "string",
48
+ };
49
+ const VALID_LOG_LEVELS = new Set(["debug", "info", "warn", "error", "silent"]);
50
+ const CONFIG_KEY_TO_ENV = {
51
+ runsDir: babysitter_sdk_1.CONFIG_ENV_VARS.RUNS_DIR,
52
+ maxIterations: babysitter_sdk_1.CONFIG_ENV_VARS.MAX_ITERATIONS,
53
+ qualityThreshold: babysitter_sdk_1.CONFIG_ENV_VARS.QUALITY_THRESHOLD,
54
+ timeout: babysitter_sdk_1.CONFIG_ENV_VARS.TIMEOUT,
55
+ logLevel: babysitter_sdk_1.CONFIG_ENV_VARS.LOG_LEVEL,
56
+ allowSecretLogs: babysitter_sdk_1.CONFIG_ENV_VARS.ALLOW_SECRET_LOGS,
57
+ hookTimeout: babysitter_sdk_1.CONFIG_ENV_VARS.HOOK_TIMEOUT,
58
+ nodeTaskTimeout: babysitter_sdk_1.CONFIG_ENV_VARS.NODE_TASK_TIMEOUT,
59
+ };
60
+ const runScopedConfig = new Map();
61
+ function resetRunScopedConfig() {
62
+ runScopedConfig.clear();
63
+ }
64
+ function isValidConfigKey(key) {
65
+ return BABYSITTER_CONFIG_KEYS.has(key)
66
+ || EXTENDED_CONFIG_KEYS.has(key)
67
+ || key.startsWith("compression.")
68
+ || key.startsWith("breakpoint.");
69
+ }
70
+ function validateConfigValue(key, value) {
71
+ const expectedType = CONFIG_KEY_TYPES[key];
72
+ if (expectedType && typeof value !== expectedType) {
73
+ return `Expected '${key}' to be ${expectedType}, got ${typeof value}.`;
74
+ }
75
+ if (key === "logLevel" && typeof value === "string" && !VALID_LOG_LEVELS.has(value)) {
76
+ return `Invalid logLevel '${value}'. Must be one of: ${[...VALID_LOG_LEVELS].join(", ")}.`;
77
+ }
78
+ if (expectedType === "number" && typeof value === "number" && key !== "clockStartMs" && value <= 0) {
79
+ return `'${key}' must be a positive number.`;
80
+ }
81
+ return null;
82
+ }
83
+ function getConfigValue(key) {
84
+ if (runScopedConfig.has(key)) {
85
+ return runScopedConfig.get(key);
86
+ }
87
+ if (BABYSITTER_CONFIG_KEYS.has(key)) {
88
+ const config = (0, babysitter_sdk_1.getConfig)();
89
+ return config[key];
90
+ }
91
+ return undefined;
92
+ }
93
+ function getConfigDefault(key) {
94
+ if (BABYSITTER_CONFIG_KEYS.has(key)) {
95
+ return babysitter_sdk_1.DEFAULTS[key];
96
+ }
97
+ return undefined;
98
+ }
99
+ function listConfigKeys() {
100
+ return [...new Set([
101
+ ...BABYSITTER_CONFIG_KEYS,
102
+ ...EXTENDED_CONFIG_KEYS,
103
+ ...runScopedConfig.keys(),
104
+ ])];
105
+ }
106
+ function getRunScopedConfigEntries() {
107
+ return runScopedConfig.entries();
108
+ }
109
+ function setConfigValue(key, value, scope) {
110
+ if (scope === "global") {
111
+ const envKey = CONFIG_KEY_TO_ENV[key];
112
+ if (envKey) {
113
+ process.env[envKey] = String(value);
114
+ }
115
+ else {
116
+ process.env[`BABYSITTER_${key.replace(/\./g, "_").toUpperCase()}`] = String(value);
117
+ }
118
+ }
119
+ runScopedConfig.set(key, value);
120
+ }
121
+ function resetConfigValue(key) {
122
+ if (key) {
123
+ runScopedConfig.delete(key);
124
+ return;
125
+ }
126
+ runScopedConfig.clear();
127
+ }
@@ -0,0 +1,3 @@
1
+ import type { CustomToolDefinition } from "../types";
2
+ export declare function createConfigTool(): CustomToolDefinition;
3
+ //# sourceMappingURL=tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../../src/agenticTools/config/tool.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAarD,wBAAgB,gBAAgB,IAAI,oBAAoB,CAuFvD"}
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createConfigTool = createConfigTool;
4
+ const typebox_1 = require("@sinclair/typebox");
5
+ const results_1 = require("../shared/results");
6
+ const state_1 = require("./state");
7
+ function createConfigTool() {
8
+ return {
9
+ name: "config",
10
+ label: "Runtime Config",
11
+ description: "Read and modify babysitter configuration at runtime. Supports get/set/list/reset actions for standard config keys, model/provider selection, and compression settings.",
12
+ parameters: typebox_1.Type.Object({
13
+ action: typebox_1.Type.Union([
14
+ typebox_1.Type.Literal("get"),
15
+ typebox_1.Type.Literal("set"),
16
+ typebox_1.Type.Literal("list"),
17
+ typebox_1.Type.Literal("reset"),
18
+ ], { description: "Action to perform: get, set, list, or reset" }),
19
+ key: typebox_1.Type.Optional(typebox_1.Type.String({ description: "Config key path (dot notation for nested, e.g. 'compression.enabled')" })),
20
+ value: typebox_1.Type.Optional(typebox_1.Type.Unknown({ description: "New value for set action" })),
21
+ scope: typebox_1.Type.Optional(typebox_1.Type.Union([typebox_1.Type.Literal("run"), typebox_1.Type.Literal("global")], {
22
+ description: "Scope: 'run' (default, in-memory) or 'global' (env vars)",
23
+ })),
24
+ }),
25
+ execute: (_toolCallId, params) => {
26
+ const action = params.action;
27
+ if (!action) {
28
+ return (0, results_1.errorResult)("'action' parameter is required (get, set, list, reset).");
29
+ }
30
+ const key = params.key;
31
+ const value = params.value;
32
+ const scope = params.scope ?? "run";
33
+ switch (action) {
34
+ case "get":
35
+ if (!key) {
36
+ const merged = {};
37
+ for (const configKey of (0, state_1.listConfigKeys)()) {
38
+ merged[configKey] = (0, state_1.getConfigValue)(configKey);
39
+ }
40
+ return (0, results_1.jsonResult)(merged);
41
+ }
42
+ if (!(0, state_1.isValidConfigKey)(key)) {
43
+ return (0, results_1.errorResult)(`Error: Unknown config key '${key}'.`);
44
+ }
45
+ return (0, results_1.jsonResult)({ key, value: (0, state_1.getConfigValue)(key) });
46
+ case "set":
47
+ if (!key) {
48
+ return (0, results_1.errorResult)("Error: 'key' parameter is required for set action.");
49
+ }
50
+ if (value === undefined) {
51
+ return (0, results_1.errorResult)("Error: 'value' parameter is required for set action.");
52
+ }
53
+ if (!(0, state_1.isValidConfigKey)(key)) {
54
+ return (0, results_1.errorResult)(`Error: Unknown config key '${key}'.`);
55
+ }
56
+ {
57
+ const validationError = (0, state_1.validateConfigValue)(key, value);
58
+ if (validationError) {
59
+ return (0, results_1.errorResult)(`Error: ${validationError}`);
60
+ }
61
+ }
62
+ (0, state_1.setConfigValue)(key, value, scope);
63
+ return (0, results_1.ok)(`Set '${key}' to ${JSON.stringify(value)} (scope: ${scope}).`);
64
+ case "list": {
65
+ const entries = {};
66
+ for (const configKey of (0, state_1.listConfigKeys)()) {
67
+ entries[configKey] = {
68
+ current: (0, state_1.getConfigValue)(configKey),
69
+ default: (0, state_1.getConfigDefault)(configKey),
70
+ };
71
+ }
72
+ for (const [configKey, configValue] of (0, state_1.getRunScopedConfigEntries)()) {
73
+ if (!entries[configKey]) {
74
+ entries[configKey] = { current: configValue, default: undefined };
75
+ }
76
+ }
77
+ return (0, results_1.jsonResult)(entries);
78
+ }
79
+ case "reset":
80
+ (0, state_1.resetConfigValue)(key);
81
+ return (0, results_1.ok)(key ? `Reset '${key}' to default.` : "Reset all config to defaults.");
82
+ default:
83
+ return (0, results_1.errorResult)(`Error: Unknown action '${action}'. Use get, set, list, or reset.`);
84
+ }
85
+ },
86
+ };
87
+ }
@@ -0,0 +1,3 @@
1
+ import type { AgenticToolOptions, CustomToolDefinition } from "../types";
2
+ export declare function createDiscoveryTools(options: AgenticToolOptions): CustomToolDefinition[];
3
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/agenticTools/discovery/tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAGzE,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,kBAAkB,GAAG,oBAAoB,EAAE,CA0ExF"}
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createDiscoveryTools = createDiscoveryTools;
4
+ const typebox_1 = require("@sinclair/typebox");
5
+ const results_1 = require("../shared/results");
6
+ function createDiscoveryTools(options) {
7
+ return [
8
+ {
9
+ name: "tool_search",
10
+ label: "Search Tools",
11
+ description: "Search available tools by name or description. Returns lightweight entries. Use tool_fetch to get full schema for a specific tool.",
12
+ parameters: typebox_1.Type.Object({
13
+ query: typebox_1.Type.String({ description: "Search query (matched against tool names and descriptions)" }),
14
+ max_results: typebox_1.Type.Optional(typebox_1.Type.Number({ description: "Maximum results to return (default 20)" })),
15
+ }),
16
+ execute: (_toolCallId, params) => {
17
+ const registry = options.deferredToolRegistry;
18
+ if (!registry) {
19
+ return (0, results_1.errorResult)("Tool search is not available — no deferred tool registry configured.");
20
+ }
21
+ const query = String(params.query ?? "");
22
+ const maxResults = typeof params.max_results === "number" ? params.max_results : 20;
23
+ const results = registry.searchTools(query, maxResults);
24
+ return (0, results_1.jsonResult)({
25
+ query,
26
+ resultCount: results.length,
27
+ tools: results.map((tool) => ({
28
+ name: tool.name,
29
+ description: tool.description,
30
+ source: tool.source,
31
+ sourceQualifier: tool.sourceQualifier,
32
+ })),
33
+ });
34
+ },
35
+ },
36
+ {
37
+ name: "tool_fetch",
38
+ label: "Fetch Tool Schema",
39
+ description: "Fetch the full JSON Schema for a tool by name. Returns the complete input/output schema needed to invoke the tool.",
40
+ parameters: typebox_1.Type.Object({
41
+ name: typebox_1.Type.String({ description: "Tool name to fetch schema for" }),
42
+ source: typebox_1.Type.Optional(typebox_1.Type.String({ description: "Source filter: builtin, mcp, plugin, custom" })),
43
+ source_qualifier: typebox_1.Type.Optional(typebox_1.Type.String({ description: "Source qualifier (e.g. MCP server name)" })),
44
+ }),
45
+ execute: async (_toolCallId, params) => {
46
+ const registry = options.deferredToolRegistry;
47
+ if (!registry) {
48
+ return (0, results_1.errorResult)("Tool fetch is not available — no deferred tool registry configured.");
49
+ }
50
+ const toolName = String(params.name ?? "");
51
+ const validSources = new Set(["builtin", "mcp", "plugin", "custom"]);
52
+ const rawSource = typeof params.source === "string" ? params.source : undefined;
53
+ if (rawSource && !validSources.has(rawSource)) {
54
+ return (0, results_1.errorResult)(`Invalid source "${rawSource}". Valid sources: builtin, mcp, plugin, custom.`);
55
+ }
56
+ const resolved = await registry.fetchSchema(toolName, rawSource, typeof params.source_qualifier === "string" ? params.source_qualifier : undefined);
57
+ if (!resolved) {
58
+ return (0, results_1.errorResult)(`Tool "${toolName}" not found or schema could not be loaded.`);
59
+ }
60
+ return (0, results_1.jsonResult)({
61
+ name: resolved.name,
62
+ description: resolved.description,
63
+ source: resolved.source,
64
+ sourceQualifier: resolved.sourceQualifier,
65
+ inputSchema: resolved.schema.inputSchema,
66
+ outputSchema: resolved.schema.outputSchema,
67
+ });
68
+ },
69
+ },
70
+ ];
71
+ }
@@ -0,0 +1,5 @@
1
+ import type { AgenticToolOptions, CustomToolDefinition } from "./types";
2
+ export declare function createAgentCoreToolDefinitions(options: AgenticToolOptions): CustomToolDefinition[];
3
+ export declare function disposeAgentCoreToolDefinitions(definitions: CustomToolDefinition[]): void;
4
+ export declare const createAgenticToolDefinitions: typeof createAgentCoreToolDefinitions;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agenticTools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAexE,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,kBAAkB,GAAG,oBAAoB,EAAE,CAelG;AAED,wBAAgB,+BAA+B,CAAC,WAAW,EAAE,oBAAoB,EAAE,GAAG,IAAI,CAOzF;AAED,eAAO,MAAM,4BAA4B,uCAAiC,CAAC"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createAgenticToolDefinitions = void 0;
4
+ exports.createAgentCoreToolDefinitions = createAgentCoreToolDefinitions;
5
+ exports.disposeAgentCoreToolDefinitions = disposeAgentCoreToolDefinitions;
6
+ const state_1 = require("./background/state");
7
+ const tools_1 = require("./background/tools");
8
+ const tool_1 = require("./browser/tool");
9
+ const tool_2 = require("./config/tool");
10
+ const tools_2 = require("./discovery/tools");
11
+ const results_1 = require("./shared/results");
12
+ const tools_3 = require("./web/tools");
13
+ const code_1 = require("./tools/code");
14
+ const delegation_1 = require("./tools/delegation");
15
+ const execution_1 = require("./tools/execution");
16
+ const fileSystem_1 = require("./tools/fileSystem");
17
+ const toolDefinitionScopes = new WeakMap();
18
+ function createAgentCoreToolDefinitions(options) {
19
+ const tools = [
20
+ ...(0, fileSystem_1.createFileSystemTools)(options),
21
+ ...(0, execution_1.createExecutionTools)(options),
22
+ (0, tool_1.createBrowserTool)(),
23
+ ...(0, delegation_1.createDelegationTools)(options),
24
+ ...(0, code_1.createCodeTools)(options),
25
+ (0, tool_2.createConfigTool)(),
26
+ ...(0, tools_1.createBackgroundTools)(options),
27
+ ...(0, tools_2.createDiscoveryTools)(options),
28
+ ...(0, tools_3.createWebTools)(),
29
+ ].map((tool) => (0, results_1.wrapToolDefinition)(tool, options.onToolUse));
30
+ toolDefinitionScopes.set(tools, options);
31
+ return tools;
32
+ }
33
+ function disposeAgentCoreToolDefinitions(definitions) {
34
+ const options = toolDefinitionScopes.get(definitions);
35
+ if (!options) {
36
+ return;
37
+ }
38
+ (0, state_1.disposeBackgroundRegistry)(options);
39
+ toolDefinitionScopes.delete(definitions);
40
+ }
41
+ exports.createAgenticToolDefinitions = createAgentCoreToolDefinitions;
@@ -0,0 +1,5 @@
1
+ export declare function assertInsideWorkspace(target: string, workspace: string): void;
2
+ export declare function resolveSafe(workspace: string, filePath: string): string;
3
+ export declare function globToRegex(pattern: string): RegExp;
4
+ export declare function walkDir(directory: string, includeHidden: boolean, limit: number, results: string[]): void;
5
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../../src/agenticTools/shared/paths.ts"],"names":[],"mappings":"AAGA,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAU7E;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIvE;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CA2BnD;AAED,wBAAgB,OAAO,CACrB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,OAAO,EACtB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EAAE,GAChB,IAAI,CA2BN"}
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.assertInsideWorkspace = assertInsideWorkspace;
37
+ exports.resolveSafe = resolveSafe;
38
+ exports.globToRegex = globToRegex;
39
+ exports.walkDir = walkDir;
40
+ const fs = __importStar(require("node:fs"));
41
+ const path = __importStar(require("node:path"));
42
+ function assertInsideWorkspace(target, workspace) {
43
+ const resolved = path.resolve(workspace, target);
44
+ const normalizedWorkspace = path.resolve(workspace) + path.sep;
45
+ const normalizedTarget = path.resolve(resolved);
46
+ if (normalizedTarget !== path.resolve(workspace)
47
+ && !normalizedTarget.startsWith(normalizedWorkspace)) {
48
+ throw new Error(`Path "${target}" resolves outside the workspace boundary.`);
49
+ }
50
+ }
51
+ function resolveSafe(workspace, filePath) {
52
+ const resolved = path.resolve(workspace, filePath);
53
+ assertInsideWorkspace(resolved, workspace);
54
+ return resolved;
55
+ }
56
+ function globToRegex(pattern) {
57
+ let regexString = "^";
58
+ let index = 0;
59
+ while (index < pattern.length) {
60
+ const char = pattern[index];
61
+ if (char === "*" && pattern[index + 1] === "*") {
62
+ regexString += ".*";
63
+ index += 2;
64
+ if (pattern[index] === "/" || pattern[index] === "\\") {
65
+ index += 1;
66
+ }
67
+ }
68
+ else if (char === "*") {
69
+ regexString += "[^/\\\\]*";
70
+ index += 1;
71
+ }
72
+ else if (char === "?") {
73
+ regexString += "[^/\\\\]";
74
+ index += 1;
75
+ }
76
+ else if (".+^${}()|[]\\".includes(char)) {
77
+ regexString += "\\" + char;
78
+ index += 1;
79
+ }
80
+ else {
81
+ regexString += char;
82
+ index += 1;
83
+ }
84
+ }
85
+ regexString += "$";
86
+ return new RegExp(regexString, "i");
87
+ }
88
+ function walkDir(directory, includeHidden, limit, results) {
89
+ if (results.length >= limit) {
90
+ return;
91
+ }
92
+ let entries;
93
+ try {
94
+ entries = fs.readdirSync(directory, { withFileTypes: true });
95
+ }
96
+ catch {
97
+ return;
98
+ }
99
+ for (const entry of entries) {
100
+ if (results.length >= limit) {
101
+ return;
102
+ }
103
+ if (!includeHidden && entry.name.startsWith(".")) {
104
+ continue;
105
+ }
106
+ if (entry.name === "node_modules") {
107
+ continue;
108
+ }
109
+ const fullPath = path.join(directory, entry.name);
110
+ if (entry.isDirectory()) {
111
+ walkDir(fullPath, includeHidden, limit, results);
112
+ continue;
113
+ }
114
+ results.push(fullPath);
115
+ }
116
+ }