@besales/mcp 0.45.0 → 0.47.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 (189) hide show
  1. package/README.md +96 -55
  2. package/dist/auth/connection-store.d.ts +21 -1
  3. package/dist/auth/connection-store.js +46 -2
  4. package/dist/auth/connection-store.js.map +1 -1
  5. package/dist/auth/oauth-client.d.ts +5 -1
  6. package/dist/auth/oauth-client.js +22 -12
  7. package/dist/auth/oauth-client.js.map +1 -1
  8. package/dist/cli.js +14 -5
  9. package/dist/cli.js.map +1 -1
  10. package/dist/http/api-client.d.ts +16 -1
  11. package/dist/http/api-client.js +50 -2
  12. package/dist/http/api-client.js.map +1 -1
  13. package/dist/instructions/server-instructions.d.ts +4 -13
  14. package/dist/instructions/server-instructions.js +68 -274
  15. package/dist/instructions/server-instructions.js.map +1 -1
  16. package/dist/prompts/registry.d.ts +15 -0
  17. package/dist/prompts/registry.js +83 -0
  18. package/dist/prompts/registry.js.map +1 -0
  19. package/dist/resources/concepts/feedback-sheets.md +7 -4
  20. package/dist/resources/concepts/handoff.md +4 -1
  21. package/dist/resources/concepts/sandbox.md +14 -5
  22. package/dist/resources/concepts/triggers.md +6 -2
  23. package/dist/resources/concepts/workbook-classification.md +26 -21
  24. package/dist/resources/docs/campaigns.md +20 -0
  25. package/dist/resources/docs/crm-integration.md +3 -1
  26. package/dist/resources/docs/follow-up.md +19 -0
  27. package/dist/resources/docs/platforms.md +2 -2
  28. package/dist/resources/docs/routing.md +18 -0
  29. package/dist/resources/docs/task-state.md +30 -0
  30. package/dist/resources/docs/trigger-actions.md +28 -0
  31. package/dist/resources/docs/variables.md +18 -0
  32. package/dist/resources/registry.js +51 -2
  33. package/dist/resources/registry.js.map +1 -1
  34. package/dist/resources/workflows/compare-models.md +4 -3
  35. package/dist/resources/workflows/connect-crm-from-scratch.md +8 -0
  36. package/dist/resources/workflows/extract-from-document.md +8 -1
  37. package/dist/resources/workflows/iterate-with-sandbox.md +5 -2
  38. package/dist/resources/workflows/platform-setup-from-scratch.md +90 -2
  39. package/dist/resources/workflows/production-readiness-check.md +22 -18
  40. package/dist/schemas/mcp-tools.json +1537 -177
  41. package/dist/server.d.ts +2 -0
  42. package/dist/server.js +8 -2
  43. package/dist/server.js.map +1 -1
  44. package/dist/tasks/task-state-store.d.ts +68 -0
  45. package/dist/tasks/task-state-store.js +278 -0
  46. package/dist/tasks/task-state-store.js.map +1 -0
  47. package/dist/tools/annotations.d.ts +7 -0
  48. package/dist/tools/annotations.js +16 -0
  49. package/dist/tools/annotations.js.map +1 -0
  50. package/dist/tools/contracts.js +7 -1
  51. package/dist/tools/contracts.js.map +1 -1
  52. package/dist/tools/definitions/agent-design.d.ts +49 -20
  53. package/dist/tools/definitions/agent-design.js +192 -19
  54. package/dist/tools/definitions/agent-design.js.map +1 -1
  55. package/dist/tools/definitions/analytics.d.ts +40 -0
  56. package/dist/tools/definitions/analytics.js +233 -0
  57. package/dist/tools/definitions/analytics.js.map +1 -0
  58. package/dist/tools/definitions/broadcast-analytics.d.ts +5 -4
  59. package/dist/tools/definitions/broadcast-analytics.js +26 -4
  60. package/dist/tools/definitions/broadcast-analytics.js.map +1 -1
  61. package/dist/tools/definitions/broadcast-mailing-variants.d.ts +2 -0
  62. package/dist/tools/definitions/broadcast-mailing-variants.js +10 -0
  63. package/dist/tools/definitions/broadcast-mailing-variants.js.map +1 -1
  64. package/dist/tools/definitions/broadcast-scheduler.d.ts +20 -1
  65. package/dist/tools/definitions/broadcast-scheduler.js +134 -8
  66. package/dist/tools/definitions/broadcast-scheduler.js.map +1 -1
  67. package/dist/tools/definitions/contacts.d.ts +15 -0
  68. package/dist/tools/definitions/contacts.js +84 -0
  69. package/dist/tools/definitions/contacts.js.map +1 -0
  70. package/dist/tools/definitions/crm-platform.d.ts +2 -0
  71. package/dist/tools/definitions/crm-platform.js +95 -5
  72. package/dist/tools/definitions/crm-platform.js.map +1 -1
  73. package/dist/tools/definitions/datasource.d.ts +1 -0
  74. package/dist/tools/definitions/datasource.js +16 -1
  75. package/dist/tools/definitions/datasource.js.map +1 -1
  76. package/dist/tools/definitions/dialogue-audit.d.ts +2 -2
  77. package/dist/tools/definitions/dialogue-audit.js +54 -16
  78. package/dist/tools/definitions/dialogue-audit.js.map +1 -1
  79. package/dist/tools/definitions/dialogue-export.d.ts +1 -1
  80. package/dist/tools/definitions/dialogue-export.js +12 -0
  81. package/dist/tools/definitions/dialogue-export.js.map +1 -1
  82. package/dist/tools/definitions/external-api-channels.js +39 -12
  83. package/dist/tools/definitions/external-api-channels.js.map +1 -1
  84. package/dist/tools/definitions/follow-up-funnel-test.js +4 -0
  85. package/dist/tools/definitions/follow-up-funnel-test.js.map +1 -1
  86. package/dist/tools/definitions/follow-up-setup.js +3 -0
  87. package/dist/tools/definitions/follow-up-setup.js.map +1 -1
  88. package/dist/tools/definitions/follow-up.d.ts +1 -1
  89. package/dist/tools/definitions/follow-up.js +6 -0
  90. package/dist/tools/definitions/follow-up.js.map +1 -1
  91. package/dist/tools/definitions/getcourse-anchor-refresh.d.ts +3 -0
  92. package/dist/tools/definitions/getcourse-anchor-refresh.js +29 -2
  93. package/dist/tools/definitions/getcourse-anchor-refresh.js.map +1 -1
  94. package/dist/tools/definitions/getcourse-cold-welcome.d.ts +20 -2
  95. package/dist/tools/definitions/getcourse-cold-welcome.js +128 -7
  96. package/dist/tools/definitions/getcourse-cold-welcome.js.map +1 -1
  97. package/dist/tools/definitions/getcourse-wave.js +14 -0
  98. package/dist/tools/definitions/getcourse-wave.js.map +1 -1
  99. package/dist/tools/definitions/help.d.ts +8 -0
  100. package/dist/tools/definitions/help.js +219 -0
  101. package/dist/tools/definitions/help.js.map +1 -0
  102. package/dist/tools/definitions/knowledge.d.ts +27 -5
  103. package/dist/tools/definitions/knowledge.js +200 -33
  104. package/dist/tools/definitions/knowledge.js.map +1 -1
  105. package/dist/tools/definitions/link-tracking.js +31 -0
  106. package/dist/tools/definitions/link-tracking.js.map +1 -1
  107. package/dist/tools/definitions/model-comparison.js +12 -3
  108. package/dist/tools/definitions/model-comparison.js.map +1 -1
  109. package/dist/tools/definitions/operational-overview.d.ts +3 -0
  110. package/dist/tools/definitions/operational-overview.js +23 -0
  111. package/dist/tools/definitions/operational-overview.js.map +1 -0
  112. package/dist/tools/definitions/operator-workflow.d.ts +20 -0
  113. package/dist/tools/definitions/operator-workflow.js +114 -0
  114. package/dist/tools/definitions/operator-workflow.js.map +1 -0
  115. package/dist/tools/definitions/platform-setup.d.ts +54 -3
  116. package/dist/tools/definitions/platform-setup.js +211 -5
  117. package/dist/tools/definitions/platform-setup.js.map +1 -1
  118. package/dist/tools/definitions/scheduled-tasks.js +2 -0
  119. package/dist/tools/definitions/scheduled-tasks.js.map +1 -1
  120. package/dist/tools/definitions/session.js +103 -5
  121. package/dist/tools/definitions/session.js.map +1 -1
  122. package/dist/tools/definitions/shared.d.ts +272 -10
  123. package/dist/tools/definitions/shared.js +154 -8
  124. package/dist/tools/definitions/shared.js.map +1 -1
  125. package/dist/tools/definitions/task-state.d.ts +76 -0
  126. package/dist/tools/definitions/task-state.js +301 -0
  127. package/dist/tools/definitions/task-state.js.map +1 -0
  128. package/dist/tools/definitions/trigger-contact-claims.d.ts +7 -0
  129. package/dist/tools/definitions/trigger-contact-claims.js +60 -0
  130. package/dist/tools/definitions/trigger-contact-claims.js.map +1 -0
  131. package/dist/tools/definitions.d.ts +334 -35
  132. package/dist/tools/definitions.js +14 -0
  133. package/dist/tools/definitions.js.map +1 -1
  134. package/dist/tools/description-localization.d.ts +2 -0
  135. package/dist/tools/description-localization.js +46 -0
  136. package/dist/tools/description-localization.js.map +1 -0
  137. package/dist/tools/incomplete-list.d.ts +23 -0
  138. package/dist/tools/incomplete-list.js +39 -0
  139. package/dist/tools/incomplete-list.js.map +1 -0
  140. package/dist/tools/inventory.d.ts +10 -0
  141. package/dist/tools/inventory.js +49 -0
  142. package/dist/tools/inventory.js.map +1 -0
  143. package/dist/tools/registry-mapping-cases-core.js +122 -4
  144. package/dist/tools/registry-mapping-cases-core.js.map +1 -1
  145. package/dist/tools/registry-mapping-cases-platform.js +69 -0
  146. package/dist/tools/registry-mapping-cases-platform.js.map +1 -1
  147. package/dist/tools/registry.d.ts +2 -0
  148. package/dist/tools/registry.js +60 -8
  149. package/dist/tools/registry.js.map +1 -1
  150. package/dist/tools/result-envelope.d.ts +46 -0
  151. package/dist/tools/result-envelope.js +184 -0
  152. package/dist/tools/result-envelope.js.map +1 -0
  153. package/dist/tools/result.d.ts +41 -3
  154. package/dist/tools/result.js +229 -27
  155. package/dist/tools/result.js.map +1 -1
  156. package/dist/tools/tool-title.d.ts +2 -0
  157. package/dist/tools/tool-title.js +12 -0
  158. package/dist/tools/tool-title.js.map +1 -0
  159. package/dist/tools/toolsets.d.ts +37 -0
  160. package/dist/tools/toolsets.js +64 -0
  161. package/dist/tools/toolsets.js.map +1 -0
  162. package/dist/tools/trigger-action-config.js +4 -0
  163. package/dist/tools/trigger-action-config.js.map +1 -1
  164. package/dist/tools/verify-with.d.ts +5 -0
  165. package/dist/tools/verify-with.js +36 -0
  166. package/dist/tools/verify-with.js.map +1 -0
  167. package/dist/types/api-contract.gen.d.ts +2612 -332
  168. package/dist/utils/logger.d.ts +11 -0
  169. package/dist/utils/logger.js +64 -8
  170. package/dist/utils/logger.js.map +1 -1
  171. package/docs/agent-usage-guide.full.ru.md +21 -15
  172. package/docs/agent-usage-guide.ru.md +24 -16
  173. package/docs/async-operation-lifecycle.md +46 -0
  174. package/docs/connect.ru.md +120 -0
  175. package/docs/evals/model-behavior-scorecard.md +80 -0
  176. package/docs/failure-semantics.md +56 -0
  177. package/docs/help-navigation.md +48 -0
  178. package/docs/host-compatibility-matrix.md +153 -0
  179. package/docs/host-setup.md +22 -6
  180. package/docs/operation-coverage.md +114 -0
  181. package/docs/pii-policy.md +46 -0
  182. package/docs/response-size-budget.md +150 -0
  183. package/docs/task-state.md +58 -0
  184. package/docs/tool-effects.md +46 -0
  185. package/docs/tool-surface.md +91 -0
  186. package/package.json +6 -2
  187. package/scripts/model-eval-server.js +213 -0
  188. package/scripts/probe-mcp-protocol.js +134 -0
  189. package/scripts/run-model-eval.js +447 -0
package/dist/server.d.ts CHANGED
@@ -1,12 +1,14 @@
1
1
  import { Server } from '@modelcontextprotocol/sdk/server/index.js';
2
2
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
3
  import { type CallToolResult, type ListResourcesResult, type ListToolsResult, type ReadResourceResult } from '@modelcontextprotocol/sdk/types.js';
4
+ import { type RegisteredPrompt } from './prompts/registry.js';
4
5
  import { type RegisteredResource } from './resources/registry.js';
5
6
  import { type RegisteredTool } from './tools/registry.js';
6
7
  export interface StartMcpServerOptions {
7
8
  readonly stdio?: boolean;
8
9
  readonly tools?: readonly RegisteredTool[];
9
10
  readonly resources?: readonly RegisteredResource[];
11
+ readonly prompts?: readonly RegisteredPrompt[];
10
12
  }
11
13
  export interface StartedMcpServer {
12
14
  readonly server: Server;
package/dist/server.js CHANGED
@@ -1,14 +1,16 @@
1
1
  import { Server } from '@modelcontextprotocol/sdk/server/index.js';
2
2
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
- import { CallToolRequestSchema, ErrorCode, ListResourcesRequestSchema, ListToolsRequestSchema, McpError, ReadResourceRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
3
+ import { CallToolRequestSchema, ErrorCode, GetPromptRequestSchema, ListPromptsRequestSchema, ListResourcesRequestSchema, ListToolsRequestSchema, McpError, ReadResourceRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
4
4
  import { SERVER_INSTRUCTIONS } from './instructions/server-instructions.js';
5
5
  import { readPackageVersion } from './package-metadata.js';
6
+ import { getRegisteredPrompt, listRegisteredPrompts, prompts, } from './prompts/registry.js';
6
7
  import { resources } from './resources/registry.js';
7
8
  import { tools } from './tools/registry.js';
8
9
  export function listRegisteredTools(registeredTools = tools) {
9
10
  return {
10
- tools: registeredTools.map(({ name, description, inputSchema, outputSchema, annotations }) => ({
11
+ tools: registeredTools.map(({ name, title, description, inputSchema, outputSchema, annotations }) => ({
11
12
  name,
13
+ title,
12
14
  description,
13
15
  inputSchema,
14
16
  outputSchema,
@@ -48,6 +50,7 @@ export async function readRegisteredResource(uri, registeredResources = resource
48
50
  export function createMcpServer(options = {}) {
49
51
  const registeredTools = options.tools ?? tools;
50
52
  const registeredResources = options.resources ?? resources;
53
+ const registeredPrompts = options.prompts ?? prompts;
51
54
  const server = new Server({
52
55
  name: '@besales/mcp',
53
56
  version: readPackageVersion(),
@@ -56,12 +59,15 @@ export function createMcpServer(options = {}) {
56
59
  capabilities: {
57
60
  tools: {},
58
61
  resources: {},
62
+ prompts: {},
59
63
  },
60
64
  });
61
65
  server.setRequestHandler(ListToolsRequestSchema, async () => listRegisteredTools(registeredTools));
62
66
  server.setRequestHandler(CallToolRequestSchema, async (request) => callRegisteredTool(request.params.name, request.params.arguments ?? {}, registeredTools));
63
67
  server.setRequestHandler(ListResourcesRequestSchema, async () => listRegisteredResources(registeredResources));
64
68
  server.setRequestHandler(ReadResourceRequestSchema, async (request) => readRegisteredResource(request.params.uri, registeredResources));
69
+ server.setRequestHandler(ListPromptsRequestSchema, async () => listRegisteredPrompts(registeredPrompts));
70
+ server.setRequestHandler(GetPromptRequestSchema, async (request) => getRegisteredPrompt(request.params.name, request.params.arguments ?? {}, registeredPrompts));
65
71
  return server;
66
72
  }
67
73
  export async function startMcpServer(options = {}) {
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ export declare const TASK_STATUSES: readonly ["ACTIVE", "COMPLETED", "CANCELLED", "EXPIRED"];
2
+ export type TaskStatus = (typeof TASK_STATUSES)[number];
3
+ export interface TaskObjectRef {
4
+ readonly type: string;
5
+ readonly id: string;
6
+ readonly label?: string;
7
+ }
8
+ export interface TaskCheckpoint {
9
+ readonly key: string;
10
+ readonly label: string;
11
+ readonly status: 'PENDING' | 'COMPLETED' | 'BLOCKED';
12
+ readonly evidence?: string;
13
+ }
14
+ export interface TaskPendingOperation {
15
+ readonly operation: string;
16
+ readonly objectRef?: TaskObjectRef;
17
+ readonly idempotencyKey?: string;
18
+ readonly verifyWith?: string;
19
+ readonly status: 'PLANNED' | 'AWAITING_USER' | 'OUTCOME_UNKNOWN';
20
+ }
21
+ export interface TaskPayload {
22
+ readonly goal: string;
23
+ readonly context?: string;
24
+ readonly constraints: readonly string[];
25
+ readonly objectRefs: readonly TaskObjectRef[];
26
+ readonly checkpoints: readonly TaskCheckpoint[];
27
+ readonly pendingOperations: readonly TaskPendingOperation[];
28
+ readonly expectedUserAction?: string | null;
29
+ }
30
+ export interface StoredTask extends TaskPayload {
31
+ readonly taskId: string;
32
+ readonly workspaceId: string;
33
+ readonly owner: 'local_os_account';
34
+ readonly status: Exclude<TaskStatus, 'EXPIRED'>;
35
+ readonly version: number;
36
+ readonly createdAt: string;
37
+ readonly updatedAt: string;
38
+ readonly expiresAt: string;
39
+ }
40
+ export interface TaskView extends Omit<StoredTask, 'status'> {
41
+ readonly status: TaskStatus;
42
+ }
43
+ export interface TaskStateStoreOptions {
44
+ readonly filePath?: string;
45
+ readonly now?: () => Date;
46
+ }
47
+ export declare class TaskVersionConflictError extends Error {
48
+ constructor(expected: number, actual: number);
49
+ }
50
+ export declare class TaskStateStore {
51
+ private readonly filePath;
52
+ private readonly lockPath;
53
+ private readonly now;
54
+ constructor(options?: TaskStateStoreOptions);
55
+ create(workspaceId: string, payload: TaskPayload, retentionDays?: number): Promise<TaskView>;
56
+ list(workspaceId: string, status?: TaskStatus): Promise<readonly TaskView[]>;
57
+ get(workspaceId: string, taskId: string): Promise<TaskView>;
58
+ update(workspaceId: string, taskId: string, expectedVersion: number, patch: Partial<TaskPayload>): Promise<TaskView>;
59
+ close(workspaceId: string, taskId: string, expectedVersion: number, status: 'COMPLETED' | 'CANCELLED'): Promise<TaskView>;
60
+ delete(workspaceId: string, taskId: string, expectedVersion: number): Promise<void>;
61
+ private assertMutable;
62
+ private requireIndex;
63
+ private view;
64
+ private readDocument;
65
+ private writeDocument;
66
+ private withLock;
67
+ private isStaleLock;
68
+ }
@@ -0,0 +1,278 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { mkdir, open, readFile, rename, rm, stat } from 'node:fs/promises';
3
+ import { homedir } from 'node:os';
4
+ import { dirname, join } from 'node:path';
5
+ const TASK_DOCUMENT_SCHEMA_VERSION = 1;
6
+ const DEFAULT_RETENTION_DAYS = 30;
7
+ const MAX_RETENTION_DAYS = 180;
8
+ const LOCK_RETRY_MS = 25;
9
+ const LOCK_ATTEMPTS = 80;
10
+ const STALE_LOCK_MS = 10_000;
11
+ export const TASK_STATUSES = ['ACTIVE', 'COMPLETED', 'CANCELLED', 'EXPIRED'];
12
+ export class TaskVersionConflictError extends Error {
13
+ constructor(expected, actual) {
14
+ super(`TASK_VERSION_CONFLICT: expected version ${expected}, actual version ${actual}. ` +
15
+ 'Read the task again, reconcile the fresh state, then retry with its version.');
16
+ this.name = 'TaskVersionConflictError';
17
+ }
18
+ }
19
+ export class TaskStateStore {
20
+ filePath;
21
+ lockPath;
22
+ now;
23
+ constructor(options = {}) {
24
+ this.filePath = options.filePath ?? join(homedir(), '.besales-mcp', 'tasks-v1.json');
25
+ this.lockPath = `${this.filePath}.lock`;
26
+ this.now = options.now ?? (() => new Date());
27
+ }
28
+ async create(workspaceId, payload, retentionDays = DEFAULT_RETENTION_DAYS) {
29
+ if (retentionDays < 1 || retentionDays > MAX_RETENTION_DAYS) {
30
+ throw new Error(`retention_days must be between 1 and ${MAX_RETENTION_DAYS}.`);
31
+ }
32
+ return this.withLock(async () => {
33
+ const document = await this.readDocument();
34
+ const now = this.now();
35
+ const task = {
36
+ taskId: randomUUID(),
37
+ workspaceId,
38
+ owner: 'local_os_account',
39
+ status: 'ACTIVE',
40
+ version: 1,
41
+ createdAt: now.toISOString(),
42
+ updatedAt: now.toISOString(),
43
+ expiresAt: new Date(now.getTime() + retentionDays * 24 * 60 * 60 * 1000).toISOString(),
44
+ ...payload,
45
+ };
46
+ await this.writeDocument({ ...document, tasks: [...document.tasks, task] });
47
+ return this.view(task);
48
+ });
49
+ }
50
+ async list(workspaceId, status) {
51
+ const document = await this.readDocument();
52
+ return document.tasks
53
+ .filter((task) => task.workspaceId === workspaceId)
54
+ .map((task) => this.view(task))
55
+ .filter((task) => status === undefined || task.status === status)
56
+ .sort((left, right) => right.updatedAt.localeCompare(left.updatedAt));
57
+ }
58
+ async get(workspaceId, taskId) {
59
+ const task = (await this.readDocument()).tasks.find((candidate) => candidate.workspaceId === workspaceId && candidate.taskId === taskId);
60
+ if (!task)
61
+ throw new Error(`Task ${taskId} was not found in the selected workspace.`);
62
+ return this.view(task);
63
+ }
64
+ async update(workspaceId, taskId, expectedVersion, patch) {
65
+ return this.withLock(async () => {
66
+ const document = await this.readDocument();
67
+ const index = this.requireIndex(document, workspaceId, taskId);
68
+ const current = document.tasks[index];
69
+ this.assertMutable(current, expectedVersion);
70
+ const updated = {
71
+ ...current,
72
+ ...patch,
73
+ version: current.version + 1,
74
+ updatedAt: this.now().toISOString(),
75
+ };
76
+ const tasks = [...document.tasks];
77
+ tasks[index] = updated;
78
+ await this.writeDocument({ ...document, tasks });
79
+ return this.view(updated);
80
+ });
81
+ }
82
+ async close(workspaceId, taskId, expectedVersion, status) {
83
+ return this.withLock(async () => {
84
+ const document = await this.readDocument();
85
+ const index = this.requireIndex(document, workspaceId, taskId);
86
+ const current = document.tasks[index];
87
+ this.assertMutable(current, expectedVersion);
88
+ const updated = {
89
+ ...current,
90
+ status,
91
+ version: current.version + 1,
92
+ updatedAt: this.now().toISOString(),
93
+ };
94
+ const tasks = [...document.tasks];
95
+ tasks[index] = updated;
96
+ await this.writeDocument({ ...document, tasks });
97
+ return this.view(updated);
98
+ });
99
+ }
100
+ async delete(workspaceId, taskId, expectedVersion) {
101
+ return this.withLock(async () => {
102
+ const document = await this.readDocument();
103
+ const index = this.requireIndex(document, workspaceId, taskId);
104
+ const current = document.tasks[index];
105
+ if (current.version !== expectedVersion) {
106
+ throw new TaskVersionConflictError(expectedVersion, current.version);
107
+ }
108
+ await this.writeDocument({
109
+ ...document,
110
+ tasks: document.tasks.filter((_, taskIndex) => taskIndex !== index),
111
+ });
112
+ });
113
+ }
114
+ assertMutable(task, expectedVersion) {
115
+ if (task.version !== expectedVersion) {
116
+ throw new TaskVersionConflictError(expectedVersion, task.version);
117
+ }
118
+ const status = this.view(task).status;
119
+ if (status !== 'ACTIVE') {
120
+ throw new Error(`Task ${task.taskId} is ${status} and cannot be changed or resumed.`);
121
+ }
122
+ }
123
+ requireIndex(document, workspaceId, taskId) {
124
+ const index = document.tasks.findIndex((task) => task.workspaceId === workspaceId && task.taskId === taskId);
125
+ if (index < 0)
126
+ throw new Error(`Task ${taskId} was not found in the selected workspace.`);
127
+ return index;
128
+ }
129
+ view(task) {
130
+ return {
131
+ ...task,
132
+ status: Date.parse(task.expiresAt) <= this.now().getTime() ? 'EXPIRED' : task.status,
133
+ };
134
+ }
135
+ async readDocument() {
136
+ let raw;
137
+ try {
138
+ raw = await readFile(this.filePath, 'utf8');
139
+ }
140
+ catch (error) {
141
+ if (isNodeError(error, 'ENOENT')) {
142
+ return { schemaVersion: TASK_DOCUMENT_SCHEMA_VERSION, tasks: [] };
143
+ }
144
+ throw error;
145
+ }
146
+ const parsed = JSON.parse(raw);
147
+ if (!isTaskDocument(parsed)) {
148
+ throw new Error(`Task state at ${this.filePath} is invalid. It was left untouched; restore or remove it explicitly.`);
149
+ }
150
+ return parsed;
151
+ }
152
+ async writeDocument(document) {
153
+ await mkdir(dirname(this.filePath), { recursive: true, mode: 0o700 });
154
+ const temporaryPath = `${this.filePath}.${process.pid}.${randomUUID()}.tmp`;
155
+ try {
156
+ const handle = await open(temporaryPath, 'wx', 0o600);
157
+ try {
158
+ await handle.writeFile(`${JSON.stringify(document, null, 2)}\n`, 'utf8');
159
+ await handle.sync();
160
+ }
161
+ finally {
162
+ await handle.close();
163
+ }
164
+ await rename(temporaryPath, this.filePath);
165
+ }
166
+ catch (error) {
167
+ await rm(temporaryPath, { force: true });
168
+ throw error;
169
+ }
170
+ }
171
+ async withLock(operation) {
172
+ await mkdir(dirname(this.filePath), { recursive: true, mode: 0o700 });
173
+ for (let attempt = 0; attempt < LOCK_ATTEMPTS; attempt += 1) {
174
+ try {
175
+ await mkdir(this.lockPath, { mode: 0o700 });
176
+ try {
177
+ return await operation();
178
+ }
179
+ finally {
180
+ await rm(this.lockPath, { recursive: true, force: true });
181
+ }
182
+ }
183
+ catch (error) {
184
+ if (!isNodeError(error, 'EEXIST'))
185
+ throw error;
186
+ if (await this.isStaleLock()) {
187
+ await rm(this.lockPath, { recursive: true, force: true });
188
+ continue;
189
+ }
190
+ await new Promise((resolve) => setTimeout(resolve, LOCK_RETRY_MS));
191
+ }
192
+ }
193
+ throw new Error('Task state is busy. Retry the read or update after the other MCP session finishes.');
194
+ }
195
+ async isStaleLock() {
196
+ try {
197
+ const lock = await stat(this.lockPath);
198
+ return this.now().getTime() - lock.mtimeMs > STALE_LOCK_MS;
199
+ }
200
+ catch (error) {
201
+ if (isNodeError(error, 'ENOENT'))
202
+ return false;
203
+ throw error;
204
+ }
205
+ }
206
+ }
207
+ function isTaskDocument(value) {
208
+ if (!value || typeof value !== 'object')
209
+ return false;
210
+ const document = value;
211
+ return (document.schemaVersion === TASK_DOCUMENT_SCHEMA_VERSION &&
212
+ Array.isArray(document.tasks) &&
213
+ document.tasks.every(isStoredTask));
214
+ }
215
+ function isStoredTask(value) {
216
+ if (!value || typeof value !== 'object')
217
+ return false;
218
+ const task = value;
219
+ return (typeof task.taskId === 'string' &&
220
+ typeof task.workspaceId === 'string' &&
221
+ task.owner === 'local_os_account' &&
222
+ ['ACTIVE', 'COMPLETED', 'CANCELLED'].includes(String(task.status)) &&
223
+ Number.isInteger(task.version) &&
224
+ Number(task.version) >= 1 &&
225
+ isNonEmptyString(task.goal) &&
226
+ (task.context === undefined || isNonEmptyString(task.context)) &&
227
+ isIsoDate(task.createdAt) &&
228
+ isIsoDate(task.updatedAt) &&
229
+ isIsoDate(task.expiresAt) &&
230
+ Array.isArray(task.constraints) &&
231
+ task.constraints.every(isNonEmptyString) &&
232
+ Array.isArray(task.objectRefs) &&
233
+ task.objectRefs.every(isTaskObjectRef) &&
234
+ Array.isArray(task.checkpoints) &&
235
+ task.checkpoints.every(isTaskCheckpoint) &&
236
+ Array.isArray(task.pendingOperations) &&
237
+ task.pendingOperations.every(isTaskPendingOperation) &&
238
+ (task.expectedUserAction === undefined ||
239
+ task.expectedUserAction === null ||
240
+ isNonEmptyString(task.expectedUserAction)));
241
+ }
242
+ function isTaskObjectRef(value) {
243
+ if (!value || typeof value !== 'object')
244
+ return false;
245
+ const ref = value;
246
+ return (isNonEmptyString(ref.type) &&
247
+ isNonEmptyString(ref.id) &&
248
+ (ref.label === undefined || isNonEmptyString(ref.label)));
249
+ }
250
+ function isTaskCheckpoint(value) {
251
+ if (!value || typeof value !== 'object')
252
+ return false;
253
+ const checkpoint = value;
254
+ return (isNonEmptyString(checkpoint.key) &&
255
+ isNonEmptyString(checkpoint.label) &&
256
+ ['PENDING', 'COMPLETED', 'BLOCKED'].includes(String(checkpoint.status)) &&
257
+ (checkpoint.evidence === undefined || isNonEmptyString(checkpoint.evidence)));
258
+ }
259
+ function isTaskPendingOperation(value) {
260
+ if (!value || typeof value !== 'object')
261
+ return false;
262
+ const operation = value;
263
+ return (isNonEmptyString(operation.operation) &&
264
+ (operation.objectRef === undefined || isTaskObjectRef(operation.objectRef)) &&
265
+ (operation.idempotencyKey === undefined || isNonEmptyString(operation.idempotencyKey)) &&
266
+ (operation.verifyWith === undefined || isNonEmptyString(operation.verifyWith)) &&
267
+ ['PLANNED', 'AWAITING_USER', 'OUTCOME_UNKNOWN'].includes(String(operation.status)));
268
+ }
269
+ function isNonEmptyString(value) {
270
+ return typeof value === 'string' && value.trim().length > 0;
271
+ }
272
+ function isIsoDate(value) {
273
+ return typeof value === 'string' && Number.isFinite(Date.parse(value));
274
+ }
275
+ function isNodeError(error, code) {
276
+ return error instanceof Error && 'code' in error && error.code === code;
277
+ }
278
+ //# sourceMappingURL=task-state-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-state-store.js","sourceRoot":"","sources":["../../src/tasks/task-state-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { ToolAnnotations } from '@modelcontextprotocol/sdk/types.js';
2
+ import type { ToolDefinition } from './definitions/shared.js';
3
+ /**
4
+ * Умолчания — ХУДШИЙ случай, а не «неизвестно»: ошибочное «только чтение» опаснее пропущенной
5
+ * аннотации, потому что снимает подтверждение там, где оно нужно.
6
+ */
7
+ export declare function toolAnnotations(definition: ToolDefinition<unknown>): ToolAnnotations;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Умолчания — ХУДШИЙ случай, а не «неизвестно»: ошибочное «только чтение» опаснее пропущенной
3
+ * аннотации, потому что снимает подтверждение там, где оно нужно.
4
+ */
5
+ export function toolAnnotations(definition) {
6
+ const readOnly = definition.sideEffect === 'none';
7
+ return {
8
+ readOnlyHint: readOnly,
9
+ // У читающего разрушительность бессмысленна; у пишущего она подразумевается истинной
10
+ // спецификацией MCP, и снять её можно только доказанной обратимостью.
11
+ destructiveHint: readOnly ? false : definition.reversible !== true,
12
+ idempotentHint: definition.idempotent === true,
13
+ openWorldHint: definition.closedWorld !== true,
14
+ };
15
+ }
16
+ //# sourceMappingURL=annotations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"annotations.js","sourceRoot":"","sources":["../../src/tools/annotations.ts"],"names":[],"mappings":"AASA;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,UAAmC;IACjE,MAAM,QAAQ,GAAG,UAAU,CAAC,UAAU,KAAK,MAAM,CAAC;IAElD,OAAO;QACL,YAAY,EAAE,QAAQ;QACtB,qFAAqF;QACrF,sEAAsE;QACtE,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,KAAK,IAAI;QAClE,cAAc,EAAE,UAAU,CAAC,UAAU,KAAK,IAAI;QAC9C,aAAa,EAAE,UAAU,CAAC,WAAW,KAAK,IAAI;KAC/C,CAAC;AACJ,CAAC"}
@@ -1,11 +1,17 @@
1
1
  import { readFileSync } from 'node:fs';
2
+ import { localizeToolContract } from './description-localization.js';
2
3
  let cachedContract = null;
3
4
  export function getMcpToolsContract() {
4
5
  if (cachedContract) {
5
6
  return cachedContract;
6
7
  }
7
8
  const contractUrl = new URL('../schemas/mcp-tools.json', import.meta.url);
8
- cachedContract = JSON.parse(readFileSync(contractUrl, 'utf-8'));
9
+ const parsed = JSON.parse(readFileSync(contractUrl, 'utf-8'));
10
+ cachedContract = {
11
+ ...parsed,
12
+ tools: parsed.tools.map(localizeToolContract),
13
+ deferred_phase4_setup_tools: parsed.deferred_phase4_setup_tools?.map(localizeToolContract),
14
+ };
9
15
  return cachedContract;
10
16
  }
11
17
  export function getActiveToolContracts() {
@@ -1 +1 @@
1
- {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/tools/contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAuBvC,IAAI,cAAc,GAA4B,IAAI,CAAC;AAEnD,MAAM,UAAU,mBAAmB;IACjC,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,2BAA2B,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1E,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAqB,CAAC;IACpF,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,mBAAmB,EAAE,CAAC,KAAK,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,mBAAmB,EAAE,CAAC,SAAS,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,MAAM,QAAQ,GAAG,sBAAsB,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAE7E,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/tools/contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAIvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAqBrE,IAAI,cAAc,GAA4B,IAAI,CAAC;AAEnD,MAAM,UAAU,mBAAmB;IACjC,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,2BAA2B,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1E,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAqB,CAAC;IAClF,cAAc,GAAG;QACf,GAAG,MAAM;QACT,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC;QAC7C,2BAA2B,EAAE,MAAM,CAAC,2BAA2B,EAAE,GAAG,CAAC,oBAAoB,CAAC;KAC3F,CAAC;IACF,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,mBAAmB,EAAE,CAAC,KAAK,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,mBAAmB,EAAE,CAAC,SAAS,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,MAAM,QAAQ,GAAG,sBAAsB,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAE7E,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}