@opentabs-dev/mcp-server 0.0.67 → 0.0.68
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/dist/browser-tools/extension-get-logs.d.ts +2 -2
- package/dist/browser-tools/get-console-logs.d.ts +2 -2
- package/package.json +1 -1
- package/dist/browser-tool-names.d.ts +0 -14
- package/dist/browser-tool-names.d.ts.map +0 -1
- package/dist/browser-tool-names.js +0 -55
- package/dist/browser-tool-names.js.map +0 -1
- package/dist/discovery-legacy.d.ts +0 -32
- package/dist/discovery-legacy.d.ts.map +0 -1
- package/dist/discovery-legacy.js +0 -415
- package/dist/discovery-legacy.js.map +0 -1
- package/dist/manifest-schema.d.ts +0 -14
- package/dist/manifest-schema.d.ts.map +0 -1
- package/dist/manifest-schema.js +0 -51
- package/dist/manifest-schema.js.map +0 -1
- package/dist/mcp-prompts.d.ts +0 -71
- package/dist/mcp-prompts.d.ts.map +0 -1
- package/dist/mcp-prompts.js +0 -248
- package/dist/mcp-prompts.js.map +0 -1
- package/dist/mcp-resources.d.ts +0 -53
- package/dist/mcp-resources.d.ts.map +0 -1
- package/dist/mcp-resources.js +0 -139
- package/dist/mcp-resources.js.map +0 -1
- package/dist/permissions.d.ts +0 -59
- package/dist/permissions.d.ts.map +0 -1
- package/dist/permissions.js +0 -144
- package/dist/permissions.js.map +0 -1
- package/dist/prompts/audit-ai-docs.d.ts +0 -6
- package/dist/prompts/audit-ai-docs.d.ts.map +0 -1
- package/dist/prompts/audit-ai-docs.js +0 -155
- package/dist/prompts/audit-ai-docs.js.map +0 -1
- package/dist/prompts/build-plugin.d.ts +0 -3
- package/dist/prompts/build-plugin.d.ts.map +0 -1
- package/dist/prompts/build-plugin.js +0 -455
- package/dist/prompts/build-plugin.js.map +0 -1
- package/dist/prompts/contribute-learnings.d.ts +0 -12
- package/dist/prompts/contribute-learnings.d.ts.map +0 -1
- package/dist/prompts/contribute-learnings.js +0 -107
- package/dist/prompts/contribute-learnings.js.map +0 -1
- package/dist/prompts/plugin-icon.d.ts +0 -5
- package/dist/prompts/plugin-icon.d.ts.map +0 -1
- package/dist/prompts/plugin-icon.js +0 -147
- package/dist/prompts/plugin-icon.js.map +0 -1
- package/dist/prompts/setup-plugin.d.ts +0 -3
- package/dist/prompts/setup-plugin.d.ts.map +0 -1
- package/dist/prompts/setup-plugin.js +0 -197
- package/dist/prompts/setup-plugin.js.map +0 -1
- package/dist/prompts/troubleshoot.d.ts +0 -3
- package/dist/prompts/troubleshoot.d.ts.map +0 -1
- package/dist/prompts/troubleshoot.js +0 -191
- package/dist/prompts/troubleshoot.js.map +0 -1
- package/dist/resources/browser-tools.d.ts +0 -3
- package/dist/resources/browser-tools.d.ts.map +0 -1
- package/dist/resources/browser-tools.js +0 -100
- package/dist/resources/browser-tools.js.map +0 -1
- package/dist/resources/cli.d.ts +0 -3
- package/dist/resources/cli.d.ts.map +0 -1
- package/dist/resources/cli.js +0 -217
- package/dist/resources/cli.js.map +0 -1
- package/dist/resources/plugin-development.d.ts +0 -3
- package/dist/resources/plugin-development.d.ts.map +0 -1
- package/dist/resources/plugin-development.js +0 -596
- package/dist/resources/plugin-development.js.map +0 -1
- package/dist/resources/quick-start.d.ts +0 -3
- package/dist/resources/quick-start.d.ts.map +0 -1
- package/dist/resources/quick-start.js +0 -210
- package/dist/resources/quick-start.js.map +0 -1
- package/dist/resources/sdk-api.d.ts +0 -3
- package/dist/resources/sdk-api.d.ts.map +0 -1
- package/dist/resources/sdk-api.js +0 -199
- package/dist/resources/sdk-api.js.map +0 -1
- package/dist/resources/self-improvement.d.ts +0 -10
- package/dist/resources/self-improvement.d.ts.map +0 -1
- package/dist/resources/self-improvement.js +0 -91
- package/dist/resources/self-improvement.js.map +0 -1
- package/dist/resources/status.d.ts +0 -5
- package/dist/resources/status.d.ts.map +0 -1
- package/dist/resources/status.js +0 -27
- package/dist/resources/status.js.map +0 -1
- package/dist/resources/troubleshooting.d.ts +0 -3
- package/dist/resources/troubleshooting.d.ts.map +0 -1
- package/dist/resources/troubleshooting.js +0 -167
- package/dist/resources/troubleshooting.js.map +0 -1
- package/dist/sanitize-tool-output.d.ts +0 -20
- package/dist/sanitize-tool-output.d.ts.map +0 -1
- package/dist/sanitize-tool-output.js +0 -52
- package/dist/sanitize-tool-output.js.map +0 -1
- package/dist/skip-confirmation.d.ts +0 -15
- package/dist/skip-confirmation.d.ts.map +0 -1
- package/dist/skip-confirmation.js +0 -16
- package/dist/skip-confirmation.js.map +0 -1
- package/dist/skip-permissions.d.ts +0 -11
- package/dist/skip-permissions.d.ts.map +0 -1
- package/dist/skip-permissions.js +0 -12
- package/dist/skip-permissions.js.map +0 -1
- package/dist/skip-sanitization.d.ts +0 -17
- package/dist/skip-sanitization.d.ts.map +0 -1
- package/dist/skip-sanitization.js +0 -18
- package/dist/skip-sanitization.js.map +0 -1
- package/dist/skip-verification.d.ts +0 -11
- package/dist/skip-verification.d.ts.map +0 -1
- package/dist/skip-verification.js +0 -12
- package/dist/skip-verification.js.map +0 -1
- package/dist/verify-plugin.d.ts +0 -53
- package/dist/verify-plugin.d.ts.map +0 -1
- package/dist/verify-plugin.js +0 -123
- package/dist/verify-plugin.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"manifest-schema.js","sourceRoot":"","sources":["../src/manifest-schema.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,uBAAuB,CAAC;IAChD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,8BAA8B,CAAC;IAC9D,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,EAAE,8BAA8B,CAAC;SACtC,GAAG,CAAC,IAAI,EAAE,kDAAkD,CAAC;IAChE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,uBAAuB,CAAC;IAChD,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IAC/C,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;CACjD,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAG,CAAC,CAAC,WAAW,CAAC;IACzC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,yBAAyB,CAAC;IAClD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,4BAA4B,CAAC;IACxD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,gCAAgC,CAAC;IAChE,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,EAAE,gCAAgC,CAAC;SACxC,GAAG,CAAC,GAAG,EAAE,mDAAmD,CAAC;IAChE,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,sCAAsC,CAAC;IAChF,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,+BAA+B,CAAC;IAC1E,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACnC,CAAC,CAAC;AAMH;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,GAAW,EAAE,UAAkB,EAAkB,EAAE;IAC/E,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,+BAA+B,UAAU,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,MAAM,GAAG,oBAAoB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACtD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5G,MAAM,IAAI,KAAK,CAAC,8BAA8B,UAAU,MAAM,MAAM,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC,CAAC"}
|
package/dist/mcp-prompts.d.ts
DELETED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MCP prompt definitions for the OpenTabs server.
|
|
3
|
-
*
|
|
4
|
-
* Prompts are pre-built templates that help AI agents accomplish specific tasks.
|
|
5
|
-
* Unlike instructions (sent on every session), prompts are pull-based — clients
|
|
6
|
-
* fetch them on demand via `prompts/get` when the user invokes them.
|
|
7
|
-
*
|
|
8
|
-
* Each prompt resolver returns messages that combine:
|
|
9
|
-
* 1. A user-role text message with the workflow/task instructions
|
|
10
|
-
* 2. Embedded resource content blocks for relevant guides and references
|
|
11
|
-
*
|
|
12
|
-
* Embedding resources directly into prompt messages ensures that MCP clients
|
|
13
|
-
* automatically receive the full context they need — they do not need to
|
|
14
|
-
* separately fetch resources via resources/read. This is the MCP-native
|
|
15
|
-
* mechanism for composing prompts with reference material.
|
|
16
|
-
*
|
|
17
|
-
* Current prompts:
|
|
18
|
-
* - `build_plugin`: Full workflow for building a new OpenTabs plugin
|
|
19
|
-
* - `troubleshoot`: Guided debugging workflow for diagnosing platform issues
|
|
20
|
-
* - `setup_plugin`: Step-by-step workflow for installing and configuring a plugin
|
|
21
|
-
* - `plugin_icon`: Add or update an SVG icon for a plugin
|
|
22
|
-
* - `audit_ai_docs`: Audit and improve AI-facing documentation (instructions, resources, prompts)
|
|
23
|
-
*/
|
|
24
|
-
/** A single prompt argument definition */
|
|
25
|
-
interface PromptArgument {
|
|
26
|
-
name: string;
|
|
27
|
-
description: string;
|
|
28
|
-
required?: boolean;
|
|
29
|
-
}
|
|
30
|
-
/** A prompt definition for MCP prompts/list */
|
|
31
|
-
export interface PromptDefinition {
|
|
32
|
-
name: string;
|
|
33
|
-
title?: string;
|
|
34
|
-
description: string;
|
|
35
|
-
arguments: PromptArgument[];
|
|
36
|
-
}
|
|
37
|
-
/** Text content block in a prompt message */
|
|
38
|
-
interface TextContent {
|
|
39
|
-
type: 'text';
|
|
40
|
-
text: string;
|
|
41
|
-
}
|
|
42
|
-
/** Embedded resource content block in a prompt message (MCP 2025-06-18 spec) */
|
|
43
|
-
interface EmbeddedResourceContent {
|
|
44
|
-
type: 'resource';
|
|
45
|
-
resource: {
|
|
46
|
-
uri: string;
|
|
47
|
-
mimeType: string;
|
|
48
|
-
text: string;
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
/** Content types that can appear in prompt messages */
|
|
52
|
-
type PromptContent = TextContent | EmbeddedResourceContent;
|
|
53
|
-
/** A resolved prompt message for MCP prompts/get */
|
|
54
|
-
export interface PromptMessage {
|
|
55
|
-
role: 'user' | 'assistant';
|
|
56
|
-
content: PromptContent;
|
|
57
|
-
}
|
|
58
|
-
/** Result of resolving a prompt */
|
|
59
|
-
export interface PromptResult {
|
|
60
|
-
description: string;
|
|
61
|
-
messages: PromptMessage[];
|
|
62
|
-
}
|
|
63
|
-
/** All registered prompts */
|
|
64
|
-
export declare const PROMPTS: PromptDefinition[];
|
|
65
|
-
/**
|
|
66
|
-
* Resolve a prompt by name with the given arguments.
|
|
67
|
-
* Returns null if the prompt name is not recognized.
|
|
68
|
-
*/
|
|
69
|
-
export declare const resolvePrompt: (name: string, args: Record<string, string>) => PromptResult | null;
|
|
70
|
-
export {};
|
|
71
|
-
//# sourceMappingURL=mcp-prompts.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-prompts.d.ts","sourceRoot":"","sources":["../src/mcp-prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAUH,0CAA0C;AAC1C,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,+CAA+C;AAC/C,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,cAAc,EAAE,CAAC;CAC7B;AAED,6CAA6C;AAC7C,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,gFAAgF;AAChF,UAAU,uBAAuB;IAC/B,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,uDAAuD;AACvD,KAAK,aAAa,GAAG,WAAW,GAAG,uBAAuB,CAAC;AAE3D,oDAAoD;AACpD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,aAAa,CAAC;CACxB;AAED,mCAAmC;AACnC,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,6BAA6B;AAC7B,eAAO,MAAM,OAAO,EAAE,gBAAgB,EA+FrC,CAAC;AAgCF;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAG,YAAY,GAAG,IAoBzF,CAAC"}
|
package/dist/mcp-prompts.js
DELETED
|
@@ -1,248 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MCP prompt definitions for the OpenTabs server.
|
|
3
|
-
*
|
|
4
|
-
* Prompts are pre-built templates that help AI agents accomplish specific tasks.
|
|
5
|
-
* Unlike instructions (sent on every session), prompts are pull-based — clients
|
|
6
|
-
* fetch them on demand via `prompts/get` when the user invokes them.
|
|
7
|
-
*
|
|
8
|
-
* Each prompt resolver returns messages that combine:
|
|
9
|
-
* 1. A user-role text message with the workflow/task instructions
|
|
10
|
-
* 2. Embedded resource content blocks for relevant guides and references
|
|
11
|
-
*
|
|
12
|
-
* Embedding resources directly into prompt messages ensures that MCP clients
|
|
13
|
-
* automatically receive the full context they need — they do not need to
|
|
14
|
-
* separately fetch resources via resources/read. This is the MCP-native
|
|
15
|
-
* mechanism for composing prompts with reference material.
|
|
16
|
-
*
|
|
17
|
-
* Current prompts:
|
|
18
|
-
* - `build_plugin`: Full workflow for building a new OpenTabs plugin
|
|
19
|
-
* - `troubleshoot`: Guided debugging workflow for diagnosing platform issues
|
|
20
|
-
* - `setup_plugin`: Step-by-step workflow for installing and configuring a plugin
|
|
21
|
-
* - `plugin_icon`: Add or update an SVG icon for a plugin
|
|
22
|
-
* - `audit_ai_docs`: Audit and improve AI-facing documentation (instructions, resources, prompts)
|
|
23
|
-
*/
|
|
24
|
-
import { getStaticResourceContent } from './mcp-resources.js';
|
|
25
|
-
import { auditAiDocsPromptText } from './prompts/audit-ai-docs.js';
|
|
26
|
-
import { buildPluginPromptText } from './prompts/build-plugin.js';
|
|
27
|
-
import { contributeLearningsPromptText } from './prompts/contribute-learnings.js';
|
|
28
|
-
import { pluginIconPromptText } from './prompts/plugin-icon.js';
|
|
29
|
-
import { setupPluginPromptText } from './prompts/setup-plugin.js';
|
|
30
|
-
import { troubleshootPromptText } from './prompts/troubleshoot.js';
|
|
31
|
-
/** All registered prompts */
|
|
32
|
-
export const PROMPTS = [
|
|
33
|
-
{
|
|
34
|
-
name: 'build_plugin',
|
|
35
|
-
title: 'Build a Plugin',
|
|
36
|
-
description: 'Step-by-step workflow for building a new OpenTabs plugin for a web application. ' +
|
|
37
|
-
'Covers site analysis, auth discovery, API mapping, scaffolding, implementation, and testing. ' +
|
|
38
|
-
'Use this when you want to create a plugin that gives AI agents access to a web app.',
|
|
39
|
-
arguments: [
|
|
40
|
-
{
|
|
41
|
-
name: 'url',
|
|
42
|
-
description: 'URL of the target web application (e.g., "https://app.example.com")',
|
|
43
|
-
required: true,
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
name: 'name',
|
|
47
|
-
description: 'Plugin name in kebab-case (e.g., "my-app"). Derived from the URL if omitted.',
|
|
48
|
-
required: false,
|
|
49
|
-
},
|
|
50
|
-
],
|
|
51
|
-
},
|
|
52
|
-
{
|
|
53
|
-
name: 'troubleshoot',
|
|
54
|
-
title: 'Troubleshoot Issues',
|
|
55
|
-
description: 'Guided debugging workflow for diagnosing OpenTabs platform issues. ' +
|
|
56
|
-
'Walks through extension connectivity, plugin state, tab readiness, permissions, ' +
|
|
57
|
-
'and common error scenarios with specific tool calls at each step. ' +
|
|
58
|
-
'Use this when tools fail, the extension is disconnected, or the platform misbehaves.',
|
|
59
|
-
arguments: [
|
|
60
|
-
{
|
|
61
|
-
name: 'error',
|
|
62
|
-
description: 'The error message or symptom to diagnose (e.g., "Extension not connected", "Tab closed"). ' +
|
|
63
|
-
'If omitted, runs a general health check workflow.',
|
|
64
|
-
required: false,
|
|
65
|
-
},
|
|
66
|
-
],
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
name: 'setup_plugin',
|
|
70
|
-
title: 'Set Up a Plugin',
|
|
71
|
-
description: 'Step-by-step workflow for installing, configuring, reviewing, and testing an existing ' +
|
|
72
|
-
'OpenTabs plugin from npm. Covers search, install, review flow, permission configuration, ' +
|
|
73
|
-
'and verification. Use this when you want to add a plugin to the platform.',
|
|
74
|
-
arguments: [
|
|
75
|
-
{
|
|
76
|
-
name: 'name',
|
|
77
|
-
description: 'Plugin name or npm package name (e.g., "slack" or "@opentabs-dev/opentabs-plugin-slack")',
|
|
78
|
-
required: true,
|
|
79
|
-
},
|
|
80
|
-
],
|
|
81
|
-
},
|
|
82
|
-
{
|
|
83
|
-
name: 'plugin_icon',
|
|
84
|
-
title: 'Add Plugin Icon',
|
|
85
|
-
description: 'Step-by-step workflow for adding or updating an SVG icon for an OpenTabs plugin. ' +
|
|
86
|
-
'Covers obtaining the brand SVG, preparing it (square viewBox, size constraints), ' +
|
|
87
|
-
'placing it, building, and verifying in the side panel.',
|
|
88
|
-
arguments: [
|
|
89
|
-
{
|
|
90
|
-
name: 'plugin',
|
|
91
|
-
description: 'Plugin name (e.g., "slack", "discord"). Used to locate the plugin directory.',
|
|
92
|
-
required: true,
|
|
93
|
-
},
|
|
94
|
-
],
|
|
95
|
-
},
|
|
96
|
-
{
|
|
97
|
-
name: 'audit_ai_docs',
|
|
98
|
-
title: 'Audit AI Documentation',
|
|
99
|
-
description: 'Audit and improve AI-facing documentation served by the MCP server. ' +
|
|
100
|
-
'Verifies accuracy of instructions, resources, and prompts against the actual codebase. ' +
|
|
101
|
-
'Identifies gaps, stale content, and drift. Use this to keep AI docs up to date.',
|
|
102
|
-
arguments: [],
|
|
103
|
-
},
|
|
104
|
-
{
|
|
105
|
-
name: 'contribute_learnings',
|
|
106
|
-
title: 'Contribute Learnings',
|
|
107
|
-
description: 'Write new patterns, gotchas, and techniques back into MCP server source code after completing any task. ' +
|
|
108
|
-
'Edits to these source files compile into the resources and prompts served to every future AI session, ' +
|
|
109
|
-
'creating a self-improving loop. Invoke this after plugin development, troubleshooting, or any task that surfaced new knowledge.',
|
|
110
|
-
arguments: [
|
|
111
|
-
{
|
|
112
|
-
name: 'task',
|
|
113
|
-
description: 'Brief description of the task you completed (e.g., "built a plugin for Linear", "fixed CORS issue with Notion API"). ' +
|
|
114
|
-
'If omitted, reviews the entire session for learnings.',
|
|
115
|
-
required: false,
|
|
116
|
-
},
|
|
117
|
-
],
|
|
118
|
-
},
|
|
119
|
-
];
|
|
120
|
-
/** Prompt name → definition for O(1) lookup */
|
|
121
|
-
const PROMPT_MAP = new Map(PROMPTS.map(p => [p.name, p]));
|
|
122
|
-
/**
|
|
123
|
-
* Build an embedded resource content block from a resource URI.
|
|
124
|
-
* Returns null if the resource content is not available (dynamic or unknown).
|
|
125
|
-
*/
|
|
126
|
-
const embedResource = (uri, mimeType) => {
|
|
127
|
-
const text = getStaticResourceContent(uri);
|
|
128
|
-
if (!text)
|
|
129
|
-
return null;
|
|
130
|
-
return { type: 'resource', resource: { uri, mimeType, text } };
|
|
131
|
-
};
|
|
132
|
-
/**
|
|
133
|
-
* Build prompt messages: a primary text message followed by embedded resources.
|
|
134
|
-
* Resources that fail to resolve (dynamic resources, unknown URIs) are silently skipped.
|
|
135
|
-
*/
|
|
136
|
-
const buildMessages = (text, resourceUris) => {
|
|
137
|
-
const messages = [{ role: 'user', content: { type: 'text', text } }];
|
|
138
|
-
for (const { uri, mimeType } of resourceUris) {
|
|
139
|
-
const embedded = embedResource(uri, mimeType);
|
|
140
|
-
if (embedded) {
|
|
141
|
-
messages.push({ role: 'user', content: embedded });
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
return messages;
|
|
145
|
-
};
|
|
146
|
-
/**
|
|
147
|
-
* Resolve a prompt by name with the given arguments.
|
|
148
|
-
* Returns null if the prompt name is not recognized.
|
|
149
|
-
*/
|
|
150
|
-
export const resolvePrompt = (name, args) => {
|
|
151
|
-
const def = PROMPT_MAP.get(name);
|
|
152
|
-
if (!def)
|
|
153
|
-
return null;
|
|
154
|
-
switch (name) {
|
|
155
|
-
case 'build_plugin':
|
|
156
|
-
return resolveBuildPlugin(args);
|
|
157
|
-
case 'troubleshoot':
|
|
158
|
-
return resolveTroubleshoot(args);
|
|
159
|
-
case 'setup_plugin':
|
|
160
|
-
return resolveSetupPlugin(args);
|
|
161
|
-
case 'plugin_icon':
|
|
162
|
-
return resolvePluginIcon(args);
|
|
163
|
-
case 'audit_ai_docs':
|
|
164
|
-
return resolveAuditAiDocs();
|
|
165
|
-
case 'contribute_learnings':
|
|
166
|
-
return resolveContributeLearnings(args);
|
|
167
|
-
default:
|
|
168
|
-
return null;
|
|
169
|
-
}
|
|
170
|
-
};
|
|
171
|
-
// ---------------------------------------------------------------------------
|
|
172
|
-
// build_plugin prompt
|
|
173
|
-
// ---------------------------------------------------------------------------
|
|
174
|
-
const resolveBuildPlugin = (args) => {
|
|
175
|
-
const url = args.url ?? 'https://example.com';
|
|
176
|
-
const name = args.name ?? '';
|
|
177
|
-
return {
|
|
178
|
-
description: `Build an OpenTabs plugin for ${url}`,
|
|
179
|
-
messages: buildMessages(buildPluginPromptText(url, name), [
|
|
180
|
-
{ uri: 'opentabs://guide/plugin-development', mimeType: 'text/markdown' },
|
|
181
|
-
{ uri: 'opentabs://reference/sdk-api', mimeType: 'text/markdown' },
|
|
182
|
-
]),
|
|
183
|
-
};
|
|
184
|
-
};
|
|
185
|
-
// ---------------------------------------------------------------------------
|
|
186
|
-
// troubleshoot prompt
|
|
187
|
-
// ---------------------------------------------------------------------------
|
|
188
|
-
const resolveTroubleshoot = (args) => {
|
|
189
|
-
const error = args.error ?? '';
|
|
190
|
-
return {
|
|
191
|
-
description: error ? `Troubleshoot OpenTabs issue: ${error}` : 'Run a general OpenTabs health check',
|
|
192
|
-
messages: buildMessages(troubleshootPromptText(error), [
|
|
193
|
-
{ uri: 'opentabs://guide/troubleshooting', mimeType: 'text/markdown' },
|
|
194
|
-
]),
|
|
195
|
-
};
|
|
196
|
-
};
|
|
197
|
-
// ---------------------------------------------------------------------------
|
|
198
|
-
// setup_plugin prompt
|
|
199
|
-
// ---------------------------------------------------------------------------
|
|
200
|
-
const resolveSetupPlugin = (args) => {
|
|
201
|
-
const name = args.name ?? 'my-plugin';
|
|
202
|
-
return {
|
|
203
|
-
description: `Set up the ${name} OpenTabs plugin`,
|
|
204
|
-
messages: buildMessages(setupPluginPromptText(name), [
|
|
205
|
-
{ uri: 'opentabs://guide/quick-start', mimeType: 'text/markdown' },
|
|
206
|
-
]),
|
|
207
|
-
};
|
|
208
|
-
};
|
|
209
|
-
// ---------------------------------------------------------------------------
|
|
210
|
-
// plugin_icon prompt
|
|
211
|
-
// ---------------------------------------------------------------------------
|
|
212
|
-
const resolvePluginIcon = (args) => {
|
|
213
|
-
const plugin = args.plugin ?? 'my-plugin';
|
|
214
|
-
return {
|
|
215
|
-
description: `Add or update icon for the ${plugin} plugin`,
|
|
216
|
-
messages: buildMessages(pluginIconPromptText(plugin), []),
|
|
217
|
-
};
|
|
218
|
-
};
|
|
219
|
-
// ---------------------------------------------------------------------------
|
|
220
|
-
// audit_ai_docs prompt
|
|
221
|
-
// ---------------------------------------------------------------------------
|
|
222
|
-
const resolveAuditAiDocs = () => ({
|
|
223
|
-
description: 'Audit and improve AI-facing documentation',
|
|
224
|
-
messages: buildMessages(auditAiDocsPromptText(), [
|
|
225
|
-
{ uri: 'opentabs://guide/quick-start', mimeType: 'text/markdown' },
|
|
226
|
-
{ uri: 'opentabs://guide/plugin-development', mimeType: 'text/markdown' },
|
|
227
|
-
{ uri: 'opentabs://guide/troubleshooting', mimeType: 'text/markdown' },
|
|
228
|
-
{ uri: 'opentabs://guide/self-improvement', mimeType: 'text/markdown' },
|
|
229
|
-
{ uri: 'opentabs://reference/sdk-api', mimeType: 'text/markdown' },
|
|
230
|
-
{ uri: 'opentabs://reference/cli', mimeType: 'text/markdown' },
|
|
231
|
-
{ uri: 'opentabs://reference/browser-tools', mimeType: 'text/markdown' },
|
|
232
|
-
]),
|
|
233
|
-
});
|
|
234
|
-
// ---------------------------------------------------------------------------
|
|
235
|
-
// contribute_learnings prompt
|
|
236
|
-
// ---------------------------------------------------------------------------
|
|
237
|
-
const resolveContributeLearnings = (args) => {
|
|
238
|
-
const task = args.task ?? '';
|
|
239
|
-
return {
|
|
240
|
-
description: task ? `Contribute learnings from: ${task}` : 'Contribute learnings from recent session',
|
|
241
|
-
messages: buildMessages(contributeLearningsPromptText(task), [
|
|
242
|
-
{ uri: 'opentabs://guide/self-improvement', mimeType: 'text/markdown' },
|
|
243
|
-
{ uri: 'opentabs://guide/plugin-development', mimeType: 'text/markdown' },
|
|
244
|
-
{ uri: 'opentabs://guide/troubleshooting', mimeType: 'text/markdown' },
|
|
245
|
-
]),
|
|
246
|
-
};
|
|
247
|
-
};
|
|
248
|
-
//# sourceMappingURL=mcp-prompts.js.map
|
package/dist/mcp-prompts.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-prompts.js","sourceRoot":"","sources":["../src/mcp-prompts.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp-resources.d.ts
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MCP resource definitions for the OpenTabs server.
|
|
3
|
-
*
|
|
4
|
-
* Resources are static or dynamic documents that AI clients can fetch on demand
|
|
5
|
-
* via `resources/read`. Unlike instructions (sent on every session), resources
|
|
6
|
-
* are pull-based — clients discover them via `resources/list` and fetch content
|
|
7
|
-
* when they need deeper context.
|
|
8
|
-
*
|
|
9
|
-
* Static resources return pre-built markdown content (guides, references).
|
|
10
|
-
* The `opentabs://status` resource is dynamic — built from ServerState at read time.
|
|
11
|
-
*
|
|
12
|
-
* Resources include MCP annotations (audience, priority) that help AI clients
|
|
13
|
-
* decide which resources to auto-include and which to present to users:
|
|
14
|
-
* - audience: ['assistant'] — content intended for the AI model
|
|
15
|
-
* - audience: ['user', 'assistant'] — content useful for both parties
|
|
16
|
-
* - priority: 0.0–1.0 — importance hint (1.0 = effectively required)
|
|
17
|
-
*/
|
|
18
|
-
import type { ServerState } from './state.js';
|
|
19
|
-
/** MCP resource annotations per the 2025-06-18 spec */
|
|
20
|
-
interface ResourceAnnotations {
|
|
21
|
-
audience?: Array<'user' | 'assistant'>;
|
|
22
|
-
priority?: number;
|
|
23
|
-
}
|
|
24
|
-
/** A resource definition for MCP resources/list */
|
|
25
|
-
export interface ResourceDefinition {
|
|
26
|
-
uri: string;
|
|
27
|
-
name: string;
|
|
28
|
-
title?: string;
|
|
29
|
-
description: string;
|
|
30
|
-
mimeType: string;
|
|
31
|
-
annotations?: ResourceAnnotations;
|
|
32
|
-
}
|
|
33
|
-
/** A resolved resource for MCP resources/read */
|
|
34
|
-
export interface ResolvedResource {
|
|
35
|
-
uri: string;
|
|
36
|
-
mimeType: string;
|
|
37
|
-
text: string;
|
|
38
|
-
}
|
|
39
|
-
/** Return all resource definitions for resources/list, including annotations. */
|
|
40
|
-
export declare const getAllResources: (_state: ServerState) => ResourceDefinition[];
|
|
41
|
-
/**
|
|
42
|
-
* Resolve a resource by URI, returning its content.
|
|
43
|
-
* Returns null if the URI is not recognized.
|
|
44
|
-
*/
|
|
45
|
-
export declare const resolveResource: (state: ServerState, uri: string) => ResolvedResource | null;
|
|
46
|
-
/**
|
|
47
|
-
* Get the text content of a static resource by URI (without needing ServerState).
|
|
48
|
-
* Returns null for dynamic or unknown resources. Used by prompt resolvers to
|
|
49
|
-
* embed resource content directly into prompt messages.
|
|
50
|
-
*/
|
|
51
|
-
export declare const getStaticResourceContent: (uri: string) => string | null;
|
|
52
|
-
export {};
|
|
53
|
-
//# sourceMappingURL=mcp-resources.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-resources.d.ts","sourceRoot":"","sources":["../src/mcp-resources.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAUH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,uDAAuD;AACvD,UAAU,mBAAmB;IAC3B,QAAQ,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,mDAAmD;AACnD,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,mBAAmB,CAAC;CACnC;AAED,iDAAiD;AACjD,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAsFD,iFAAiF;AACjF,eAAO,MAAM,eAAe,GAAI,QAAQ,WAAW,KAAG,kBAAkB,EAQnE,CAAC;AAEN;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,WAAW,EAAE,KAAK,MAAM,KAAG,gBAAgB,GAAG,IAepF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,GAAI,KAAK,MAAM,KAAG,MAAM,GAAG,IAAoC,CAAC"}
|
package/dist/mcp-resources.js
DELETED
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MCP resource definitions for the OpenTabs server.
|
|
3
|
-
*
|
|
4
|
-
* Resources are static or dynamic documents that AI clients can fetch on demand
|
|
5
|
-
* via `resources/read`. Unlike instructions (sent on every session), resources
|
|
6
|
-
* are pull-based — clients discover them via `resources/list` and fetch content
|
|
7
|
-
* when they need deeper context.
|
|
8
|
-
*
|
|
9
|
-
* Static resources return pre-built markdown content (guides, references).
|
|
10
|
-
* The `opentabs://status` resource is dynamic — built from ServerState at read time.
|
|
11
|
-
*
|
|
12
|
-
* Resources include MCP annotations (audience, priority) that help AI clients
|
|
13
|
-
* decide which resources to auto-include and which to present to users:
|
|
14
|
-
* - audience: ['assistant'] — content intended for the AI model
|
|
15
|
-
* - audience: ['user', 'assistant'] — content useful for both parties
|
|
16
|
-
* - priority: 0.0–1.0 — importance hint (1.0 = effectively required)
|
|
17
|
-
*/
|
|
18
|
-
import { BROWSER_TOOLS_CONTENT } from './resources/browser-tools.js';
|
|
19
|
-
import { CLI_CONTENT } from './resources/cli.js';
|
|
20
|
-
import { PLUGIN_DEVELOPMENT_CONTENT } from './resources/plugin-development.js';
|
|
21
|
-
import { QUICK_START_CONTENT } from './resources/quick-start.js';
|
|
22
|
-
import { SDK_API_CONTENT } from './resources/sdk-api.js';
|
|
23
|
-
import { SELF_IMPROVEMENT_CONTENT } from './resources/self-improvement.js';
|
|
24
|
-
import { buildStatusResource } from './resources/status.js';
|
|
25
|
-
import { TROUBLESHOOTING_CONTENT } from './resources/troubleshooting.js';
|
|
26
|
-
/** All registered resources */
|
|
27
|
-
const RESOURCES = [
|
|
28
|
-
{
|
|
29
|
-
uri: 'opentabs://guide/quick-start',
|
|
30
|
-
name: 'quick-start',
|
|
31
|
-
title: 'Quick Start Guide',
|
|
32
|
-
description: 'Installation, configuration, and first tool call',
|
|
33
|
-
mimeType: 'text/markdown',
|
|
34
|
-
annotations: { audience: ['user', 'assistant'], priority: 0.7 },
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
uri: 'opentabs://guide/plugin-development',
|
|
38
|
-
name: 'plugin-development',
|
|
39
|
-
title: 'Plugin Development Guide',
|
|
40
|
-
description: 'Full guide to building OpenTabs plugins (SDK, patterns, conventions)',
|
|
41
|
-
mimeType: 'text/markdown',
|
|
42
|
-
annotations: { audience: ['assistant'], priority: 0.9 },
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
uri: 'opentabs://guide/troubleshooting',
|
|
46
|
-
name: 'troubleshooting',
|
|
47
|
-
title: 'Troubleshooting Guide',
|
|
48
|
-
description: 'Common errors and resolution steps',
|
|
49
|
-
mimeType: 'text/markdown',
|
|
50
|
-
annotations: { audience: ['assistant'], priority: 0.6 },
|
|
51
|
-
},
|
|
52
|
-
{
|
|
53
|
-
uri: 'opentabs://reference/sdk-api',
|
|
54
|
-
name: 'sdk-api',
|
|
55
|
-
title: 'SDK API Reference',
|
|
56
|
-
description: 'Plugin SDK API reference (utilities, errors, lifecycle hooks)',
|
|
57
|
-
mimeType: 'text/markdown',
|
|
58
|
-
annotations: { audience: ['assistant'], priority: 0.8 },
|
|
59
|
-
},
|
|
60
|
-
{
|
|
61
|
-
uri: 'opentabs://reference/cli',
|
|
62
|
-
name: 'cli',
|
|
63
|
-
title: 'CLI Reference',
|
|
64
|
-
description: 'CLI command reference (opentabs, opentabs-plugin)',
|
|
65
|
-
mimeType: 'text/markdown',
|
|
66
|
-
annotations: { audience: ['user', 'assistant'], priority: 0.5 },
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
uri: 'opentabs://reference/browser-tools',
|
|
70
|
-
name: 'browser-tools',
|
|
71
|
-
title: 'Browser Tools Reference',
|
|
72
|
-
description: 'All browser tools organized by category',
|
|
73
|
-
mimeType: 'text/markdown',
|
|
74
|
-
annotations: { audience: ['assistant'], priority: 0.5 },
|
|
75
|
-
},
|
|
76
|
-
{
|
|
77
|
-
uri: 'opentabs://guide/self-improvement',
|
|
78
|
-
name: 'self-improvement',
|
|
79
|
-
title: 'Self-Improvement Guide',
|
|
80
|
-
description: 'How the MCP server content forms a self-improving loop — file-to-content mapping, ' +
|
|
81
|
-
'contribution rules, and bootstrapping architecture',
|
|
82
|
-
mimeType: 'text/markdown',
|
|
83
|
-
annotations: { audience: ['assistant'], priority: 0.8 },
|
|
84
|
-
},
|
|
85
|
-
{
|
|
86
|
-
uri: 'opentabs://status',
|
|
87
|
-
name: 'status',
|
|
88
|
-
title: 'Server Status',
|
|
89
|
-
description: 'Live server state: loaded plugins, extension connectivity, tab states',
|
|
90
|
-
mimeType: 'application/json',
|
|
91
|
-
annotations: { audience: ['assistant'], priority: 0.4 },
|
|
92
|
-
},
|
|
93
|
-
];
|
|
94
|
-
/** Resource URI → definition for O(1) lookup */
|
|
95
|
-
const RESOURCE_MAP = new Map(RESOURCES.map(r => [r.uri, r]));
|
|
96
|
-
/** URI → content for static resources */
|
|
97
|
-
const CONTENT_MAP = new Map([
|
|
98
|
-
['opentabs://guide/quick-start', QUICK_START_CONTENT],
|
|
99
|
-
['opentabs://guide/plugin-development', PLUGIN_DEVELOPMENT_CONTENT],
|
|
100
|
-
['opentabs://guide/troubleshooting', TROUBLESHOOTING_CONTENT],
|
|
101
|
-
['opentabs://guide/self-improvement', SELF_IMPROVEMENT_CONTENT],
|
|
102
|
-
['opentabs://reference/sdk-api', SDK_API_CONTENT],
|
|
103
|
-
['opentabs://reference/cli', CLI_CONTENT],
|
|
104
|
-
['opentabs://reference/browser-tools', BROWSER_TOOLS_CONTENT],
|
|
105
|
-
]);
|
|
106
|
-
/** Return all resource definitions for resources/list, including annotations. */
|
|
107
|
-
export const getAllResources = (_state) => RESOURCES.map(r => ({
|
|
108
|
-
uri: r.uri,
|
|
109
|
-
name: r.name,
|
|
110
|
-
...(r.title ? { title: r.title } : {}),
|
|
111
|
-
description: r.description,
|
|
112
|
-
mimeType: r.mimeType,
|
|
113
|
-
...(r.annotations ? { annotations: r.annotations } : {}),
|
|
114
|
-
}));
|
|
115
|
-
/**
|
|
116
|
-
* Resolve a resource by URI, returning its content.
|
|
117
|
-
* Returns null if the URI is not recognized.
|
|
118
|
-
*/
|
|
119
|
-
export const resolveResource = (state, uri) => {
|
|
120
|
-
const def = RESOURCE_MAP.get(uri);
|
|
121
|
-
if (!def)
|
|
122
|
-
return null;
|
|
123
|
-
if (uri === 'opentabs://status') {
|
|
124
|
-
return { uri, mimeType: 'application/json', text: buildStatusResource(state) };
|
|
125
|
-
}
|
|
126
|
-
const content = CONTENT_MAP.get(uri);
|
|
127
|
-
if (content) {
|
|
128
|
-
return { uri, mimeType: def.mimeType, text: content };
|
|
129
|
-
}
|
|
130
|
-
// Static resources without content yet return a placeholder
|
|
131
|
-
return { uri, mimeType: def.mimeType, text: `# ${def.name}\n\nContent coming soon.` };
|
|
132
|
-
};
|
|
133
|
-
/**
|
|
134
|
-
* Get the text content of a static resource by URI (without needing ServerState).
|
|
135
|
-
* Returns null for dynamic or unknown resources. Used by prompt resolvers to
|
|
136
|
-
* embed resource content directly into prompt messages.
|
|
137
|
-
*/
|
|
138
|
-
export const getStaticResourceContent = (uri) => CONTENT_MAP.get(uri) ?? null;
|
|
139
|
-
//# sourceMappingURL=mcp-resources.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-resources.js","sourceRoot":"","sources":["../src/mcp-resources.ts"],"names":[],"mappings":"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"}
|
package/dist/permissions.d.ts
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Browser tool permission evaluation engine.
|
|
3
|
-
*
|
|
4
|
-
* Classifies browser tools into three security tiers (observe, interact,
|
|
5
|
-
* sensitive) and evaluates whether a tool call should be auto-allowed,
|
|
6
|
-
* require human confirmation, or be denied outright.
|
|
7
|
-
*
|
|
8
|
-
* The evaluation order (first match wins):
|
|
9
|
-
* 1. domainToolPolicy[domain][tool] — per-domain per-tool override
|
|
10
|
-
* 2. sensitiveDomains match → 'ask'
|
|
11
|
-
* 3. toolPolicy[tool] — global per-tool override
|
|
12
|
-
* 4. Tool tier default (observe=allow, interact=ask, sensitive=ask)
|
|
13
|
-
* 5. trustedDomains match → override 'ask' to 'allow' (does NOT override 'deny')
|
|
14
|
-
*/
|
|
15
|
-
import type { ToolPermission } from './config.js';
|
|
16
|
-
import type { ServerState } from './state.js';
|
|
17
|
-
/** Security tier for browser tools */
|
|
18
|
-
type ToolTier = 'observe' | 'interact' | 'sensitive';
|
|
19
|
-
/**
|
|
20
|
-
* Browser tool → security tier mapping.
|
|
21
|
-
*
|
|
22
|
-
* - observe: read-only tools that list or inspect without accessing sensitive data
|
|
23
|
-
* - interact: tools that modify page state (click, type, navigate, screenshot)
|
|
24
|
-
* - sensitive: tools that access credentials, execute arbitrary code, or modify auth state
|
|
25
|
-
*/
|
|
26
|
-
declare const TOOL_TIERS: Record<string, ToolTier>;
|
|
27
|
-
/** Default permission for each tier */
|
|
28
|
-
declare const TIER_DEFAULTS: Record<ToolTier, ToolPermission>;
|
|
29
|
-
/**
|
|
30
|
-
* Match a hostname against a domain pattern.
|
|
31
|
-
*
|
|
32
|
-
* Supports:
|
|
33
|
-
* - Exact match: 'example.com' matches 'example.com'
|
|
34
|
-
* - Wildcard prefix: '*.example.com' matches 'sub.example.com' and 'a.b.example.com'
|
|
35
|
-
* but NOT 'example.com' itself
|
|
36
|
-
*/
|
|
37
|
-
declare const matchDomain: (hostname: string, pattern: string) => boolean;
|
|
38
|
-
/** Check if a hostname matches any pattern in a domain list */
|
|
39
|
-
declare const matchesDomainList: (hostname: string, patterns: string[]) => boolean;
|
|
40
|
-
/**
|
|
41
|
-
* Get the security tier for a browser tool by looking up the TOOL_TIERS map.
|
|
42
|
-
* Tools not in the map default to 'interact' (safe middle ground).
|
|
43
|
-
*
|
|
44
|
-
* @param toolName - Browser tool name (e.g., 'browser_execute_script')
|
|
45
|
-
* @returns The tool's security tier: 'observe', 'interact', or 'sensitive'
|
|
46
|
-
*/
|
|
47
|
-
export declare const getToolTier: (toolName: string) => ToolTier;
|
|
48
|
-
/**
|
|
49
|
-
* Evaluate the permission for a browser tool call.
|
|
50
|
-
*
|
|
51
|
-
* @param toolName - Browser tool name (e.g., 'browser_execute_script')
|
|
52
|
-
* @param domain - Target domain hostname (e.g., 'mail.google.com'), or null for tools with no target
|
|
53
|
-
* @param state - Server state (for skipPermissions flag and permissions config)
|
|
54
|
-
* @returns 'allow', 'ask', or 'deny'
|
|
55
|
-
*/
|
|
56
|
-
export declare const evaluatePermission: (toolName: string, domain: string | null, state: ServerState) => ToolPermission;
|
|
57
|
-
export { TOOL_TIERS, TIER_DEFAULTS, matchDomain, matchesDomainList };
|
|
58
|
-
export type { ToolTier };
|
|
59
|
-
//# sourceMappingURL=permissions.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../src/permissions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,sCAAsC;AACtC,KAAK,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,WAAW,CAAC;AAErD;;;;;;GAMG;AACH,QAAA,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CA8CxC,CAAC;AAEF,uCAAuC;AACvC,QAAA,MAAM,aAAa,EAAE,MAAM,CAAC,QAAQ,EAAE,cAAc,CAInD,CAAC;AAEF;;;;;;;GAOG;AACH,QAAA,MAAM,WAAW,GAAI,UAAU,MAAM,EAAE,SAAS,MAAM,KAAG,OAOxD,CAAC;AAEF,+DAA+D;AAC/D,QAAA,MAAM,iBAAiB,GAAI,UAAU,MAAM,EAAE,UAAU,MAAM,EAAE,KAAG,OACpB,CAAC;AAE/C;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,GAAI,UAAU,MAAM,KAAG,QAA8C,CAAC;AAE9F;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,GAAI,UAAU,MAAM,EAAE,QAAQ,MAAM,GAAG,IAAI,EAAE,OAAO,WAAW,KAAG,cAsChG,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC;AACrE,YAAY,EAAE,QAAQ,EAAE,CAAC"}
|