@besales/mcp 0.1.0 → 0.11.1

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 (94) hide show
  1. package/README.md +272 -17
  2. package/dist/auth/connection-store.d.ts +58 -0
  3. package/dist/auth/connection-store.js +208 -0
  4. package/dist/auth/connection-store.js.map +1 -0
  5. package/dist/auth/oauth-client.d.ts +27 -2
  6. package/dist/auth/oauth-client.js +62 -11
  7. package/dist/auth/oauth-client.js.map +1 -1
  8. package/dist/auth/session-workspace.d.ts +2 -0
  9. package/dist/auth/session-workspace.js +20 -0
  10. package/dist/auth/session-workspace.js.map +1 -0
  11. package/dist/auth/token-storage.d.ts +19 -5
  12. package/dist/auth/token-storage.js +11 -6
  13. package/dist/auth/token-storage.js.map +1 -1
  14. package/dist/cli.d.ts +2 -7
  15. package/dist/cli.js +111 -33
  16. package/dist/cli.js.map +1 -1
  17. package/dist/http/api-client.d.ts +4 -13
  18. package/dist/http/api-client.js +18 -18
  19. package/dist/http/api-client.js.map +1 -1
  20. package/dist/index.d.ts +8 -6
  21. package/dist/index.js +3 -2
  22. package/dist/index.js.map +1 -1
  23. package/dist/instructions/server-instructions.d.ts +15 -0
  24. package/dist/instructions/server-instructions.js +243 -0
  25. package/dist/instructions/server-instructions.js.map +1 -0
  26. package/dist/package-metadata.js +7 -1
  27. package/dist/package-metadata.js.map +1 -1
  28. package/dist/resources/concepts/feedback-sheets.md +77 -0
  29. package/dist/resources/concepts/sandbox.md +13 -0
  30. package/dist/resources/concepts/workbook-classification.md +241 -0
  31. package/dist/resources/docs/agent-behavior.md +393 -0
  32. package/dist/resources/docs/crm-integration.md +535 -0
  33. package/dist/resources/docs/files-and-uploads.md +295 -0
  34. package/dist/resources/docs/knowledge-base.md +521 -0
  35. package/dist/resources/docs/pipeline-builder.md +221 -0
  36. package/dist/resources/docs/pipeline-settings-deep.md +221 -0
  37. package/dist/resources/docs/platforms.md +513 -0
  38. package/dist/resources/docs/prompt-anatomy.md +298 -0
  39. package/dist/resources/docs/prompt-principles.md +289 -0
  40. package/dist/resources/registry.js +34 -12
  41. package/dist/resources/registry.js.map +1 -1
  42. package/dist/resources/workflows/compare-models.md +46 -0
  43. package/dist/resources/workflows/connect-crm-from-scratch.md +89 -0
  44. package/dist/resources/workflows/connect-datasource-from-scratch.md +92 -0
  45. package/dist/resources/workflows/extract-from-document.md +36 -0
  46. package/dist/resources/workflows/iterate-with-sandbox.md +31 -0
  47. package/dist/resources/workflows/platform-setup-from-scratch.md +113 -0
  48. package/dist/resources/workflows/production-readiness-check.md +41 -0
  49. package/dist/schemas/mcp-tools.json +2636 -182
  50. package/dist/server.js +2 -0
  51. package/dist/server.js.map +1 -1
  52. package/dist/tools/definitions/agent-design.d.ts +215 -0
  53. package/dist/tools/definitions/agent-design.js +643 -0
  54. package/dist/tools/definitions/agent-design.js.map +1 -0
  55. package/dist/tools/definitions/crm-platform.d.ts +211 -0
  56. package/dist/tools/definitions/crm-platform.js +1070 -0
  57. package/dist/tools/definitions/crm-platform.js.map +1 -0
  58. package/dist/tools/definitions/datasource.d.ts +40 -0
  59. package/dist/tools/definitions/datasource.js +196 -0
  60. package/dist/tools/definitions/datasource.js.map +1 -0
  61. package/dist/tools/definitions/knowledge.d.ts +215 -0
  62. package/dist/tools/definitions/knowledge.js +782 -0
  63. package/dist/tools/definitions/knowledge.js.map +1 -0
  64. package/dist/tools/definitions/model-comparison.d.ts +25 -0
  65. package/dist/tools/definitions/model-comparison.js +101 -0
  66. package/dist/tools/definitions/model-comparison.js.map +1 -0
  67. package/dist/tools/definitions/platform-setup.d.ts +412 -0
  68. package/dist/tools/definitions/platform-setup.js +738 -0
  69. package/dist/tools/definitions/platform-setup.js.map +1 -0
  70. package/dist/tools/definitions/session.d.ts +11 -0
  71. package/dist/tools/definitions/session.js +86 -0
  72. package/dist/tools/definitions/session.js.map +1 -0
  73. package/dist/tools/definitions/shared.d.ts +742 -0
  74. package/dist/tools/definitions/shared.js +773 -0
  75. package/dist/tools/definitions/shared.js.map +1 -0
  76. package/dist/tools/definitions.d.ts +873 -88
  77. package/dist/tools/definitions.js +14 -856
  78. package/dist/tools/definitions.js.map +1 -1
  79. package/dist/tools/registry.d.ts +3 -1
  80. package/dist/tools/registry.js +90 -11
  81. package/dist/tools/registry.js.map +1 -1
  82. package/dist/tools/result.d.ts +1 -1
  83. package/dist/tools/result.js +12 -4
  84. package/dist/tools/result.js.map +1 -1
  85. package/dist/utils/logger.js +2 -1
  86. package/dist/utils/logger.js.map +1 -1
  87. package/docs/host-setup.md +34 -15
  88. package/package.json +2 -2
  89. package/scripts/install-claude-desktop.js +89 -11
  90. package/scripts/mock-api-server.js +1 -1
  91. package/scripts/mock-credentials.js +49 -6
  92. package/dist/types/api-contract.gen.d.ts +0 -6975
  93. package/dist/types/api-contract.gen.js +0 -6
  94. package/dist/types/api-contract.gen.js.map +0 -1
@@ -1,6 +1,5 @@
1
1
  import axios from 'axios';
2
2
  import { normalizeApiBaseUrl } from '../auth/oauth-client.js';
3
- import { TokenStorage } from '../auth/token-storage.js';
4
3
  import { logger } from '../utils/logger.js';
5
4
  export const API_REQUEST_TIMEOUT_MS = 60_000;
6
5
  export class ApiClientError extends Error {
@@ -21,30 +20,17 @@ export class ApiClientNetworkError extends Error {
21
20
  }
22
21
  export class ApiClient {
23
22
  apiBaseUrl;
24
- tokenStorage;
25
23
  transport;
26
24
  timeoutMs;
27
25
  constructor(options = {}) {
28
26
  this.apiBaseUrl = normalizeApiBaseUrl(options.apiBaseUrl);
29
- this.tokenStorage = options.tokenStorage ?? new TokenStorage();
30
- this.transport =
31
- options.transport ??
32
- axios.create({
33
- timeout: options.timeoutMs ?? API_REQUEST_TIMEOUT_MS,
34
- });
35
27
  this.timeoutMs = options.timeoutMs ?? API_REQUEST_TIMEOUT_MS;
28
+ this.transport = options.transport ?? createAxiosTransport(axios.create());
36
29
  }
37
- async post(path, body) {
38
- return this.request('POST', path, body);
30
+ async post(path, apiKey, body) {
31
+ return this.request('POST', path, apiKey, body);
39
32
  }
40
- async patch(path, body) {
41
- return this.request('PATCH', path, body);
42
- }
43
- async getStoredWorkspaceId() {
44
- return this.tokenStorage.get('workspace_id');
45
- }
46
- async request(method, path, body) {
47
- const apiKey = await this.tokenStorage.get('api_key');
33
+ async request(method, path, apiKey, body) {
48
34
  if (!apiKey) {
49
35
  throw new ApiClientError('Not connected to Animaly');
50
36
  }
@@ -81,6 +67,20 @@ export class ApiClient {
81
67
  }
82
68
  }
83
69
  }
70
+ function createAxiosTransport(instance) {
71
+ return {
72
+ async request(request) {
73
+ const response = await instance.request({
74
+ method: request.method,
75
+ url: request.url,
76
+ data: request.data,
77
+ headers: request.headers,
78
+ timeout: request.timeout,
79
+ });
80
+ return { status: response.status, data: response.data };
81
+ },
82
+ };
83
+ }
84
84
  export function buildApiUrl(apiBaseUrl, path) {
85
85
  const normalizedBaseUrl = normalizeApiBaseUrl(apiBaseUrl);
86
86
  const normalizedPath = path.startsWith('/') ? path : `/${path}`;
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/http/api-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/http/api-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAA6B,MAAM,OAAO,CAAC;AAElD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAgC7C,MAAM,OAAO,cAAe,SAAQ,KAAK;IAG5B;IACA;IAHX,YACE,OAAe,EACN,MAAe,EACf,eAAwB;QAEjC,KAAK,CAAC,OAAO,CAAC,CAAC;QAHN,WAAM,GAAN,MAAM,CAAS;QACf,oBAAe,GAAf,eAAe,CAAS;QAGjC,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAED,MAAM,OAAO,SAAS;IACH,UAAU,CAAS;IACnB,SAAS,CAAe;IACxB,SAAS,CAAS;IAEnC,YAAY,UAA4B,EAAE;QACxC,IAAI,CAAC,UAAU,GAAG,mBAAmB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC1D,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,sBAAsB,CAAC;QAC7D,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,oBAAoB,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,IAAI,CAAI,IAAY,EAAE,MAAc,EAAE,IAAc;QACxD,OAAO,IAAI,CAAC,OAAO,CAAI,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,OAAO,CAAI,MAAiB,EAAE,IAAY,EAAE,MAAc,EAAE,IAAc;QAC9E,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,cAAc,CAAC,0BAA0B,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAE/C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAI;gBAC/C,MAAM;gBACN,GAAG;gBACH,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU,MAAM,EAAE;iBAClC;gBACD,OAAO,EAAE,IAAI,CAAC,SAAS;aACxB,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,4BAA4B,CAAC,CAAC;YACtF,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;gBACtC,MAAM,eAAe,GAAG,sBAAsB,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBAErE,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,IAAI,cAAc,CACtB,0CAA0C,MAAM,EAAE,EAClD,MAAM,EACN,eAAe,CAChB,CAAC;gBACJ,CAAC;gBAED,MAAM,IAAI,qBAAqB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACjD,CAAC;YAED,IAAI,KAAK,YAAY,cAAc,IAAI,KAAK,YAAY,qBAAqB,EAAE,CAAC;gBAC9E,MAAM,KAAK,CAAC;YACd,CAAC;YAED,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,MAAM,IAAI,qBAAqB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACjD,CAAC;YAED,MAAM,IAAI,qBAAqB,CAAC,qCAAqC,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;CACF;AAED,SAAS,oBAAoB,CAAC,QAAuB;IACnD,OAAO;QACL,KAAK,CAAC,OAAO,CAAI,OAA4B;YAC3C,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAI;gBACzC,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,OAAO,EAAE,OAAO,CAAC,OAAO;aACzB,CAAC,CAAC;YAEH,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC1D,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,UAAkB,EAAE,IAAY;IAC1D,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAC1D,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;IAEhE,IAAI,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,cAAc,CAAC,6CAA6C,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO,GAAG,iBAAiB,GAAG,cAAc,EAAE,CAAC;AACjD,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAa;IAC3C,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,YAAY,GAAI,IAA8B,CAAC,OAAO,CAAC;IAE7D,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;QACrC,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5F,CAAC;IAED,MAAM,UAAU,GAAI,IAA4B,CAAC,KAAK,CAAC;IACvD,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QACnC,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,IAAI,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QACjD,MAAM,aAAa,GAAI,UAAoC,CAAC,OAAO,CAAC;QACpE,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;YACtC,OAAO,aAAa,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,11 +1,13 @@
1
- export { createAuthorizationUrl, createCodeChallenge, DEFAULT_API_BASE_URL, generateCodeVerifier, generateState, normalizeApiBaseUrl, OauthClient, } from './auth/oauth-client.js';
2
- export type { OAuthConnectResult, OauthClientOptions } from './auth/oauth-client.js';
3
- export { TOKEN_STORAGE_SERVICE, TokenStorage, } from './auth/token-storage.js';
4
- export type { TokenStorageAccount } from './auth/token-storage.js';
1
+ export { createAuthorizationUrl, createCodeChallenge, DEFAULT_API_BASE_URL, DEFAULT_OAUTH_AUTHORIZE_URL, generateCodeVerifier, generateState, normalizeApiBaseUrl, normalizeOauthAuthorizeUrl, OauthClient, } from './auth/oauth-client.js';
2
+ export type { AuthorizationCodeExchange, OAuthConnectResult, OauthClientOptions, } from './auth/oauth-client.js';
3
+ export { LEGACY_API_KEY_ACCOUNT, LEGACY_WORKSPACE_ID_ACCOUNT, TOKEN_STORAGE_SERVICE, TokenStorage, } from './auth/token-storage.js';
4
+ export type { CredentialStore } from './auth/token-storage.js';
5
+ export { ConnectionStore, WorkspaceResolutionError, } from './auth/connection-store.js';
6
+ export type { ConnectionMeta } from './auth/connection-store.js';
5
7
  export { getHelpText, runCli } from './cli.js';
6
- export type { CliDeps, CliIo, CredentialStorage, OAuthConnector } from './cli.js';
8
+ export type { CliDeps, CliIo, OAuthConnector } from './cli.js';
7
9
  export { API_REQUEST_TIMEOUT_MS, ApiClient, ApiClientError, ApiClientNetworkError, buildApiUrl, } from './http/api-client.js';
8
- export type { ApiClientOptions, ApiMethod, ApiTransport, ApiTransportRequest, ApiTransportResponse, CredentialReader, ToolApiClient, } from './http/api-client.js';
10
+ export type { ApiClientOptions, ApiMethod, ApiTransport, ApiTransportRequest, ApiTransportResponse, ToolApiClient, } from './http/api-client.js';
9
11
  export { readPackageVersion } from './package-metadata.js';
10
12
  export { resources } from './resources/registry.js';
11
13
  export type { RegisteredResource } from './resources/registry.js';
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
- export { createAuthorizationUrl, createCodeChallenge, DEFAULT_API_BASE_URL, generateCodeVerifier, generateState, normalizeApiBaseUrl, OauthClient, } from './auth/oauth-client.js';
2
- export { TOKEN_STORAGE_SERVICE, TokenStorage, } from './auth/token-storage.js';
1
+ export { createAuthorizationUrl, createCodeChallenge, DEFAULT_API_BASE_URL, DEFAULT_OAUTH_AUTHORIZE_URL, generateCodeVerifier, generateState, normalizeApiBaseUrl, normalizeOauthAuthorizeUrl, OauthClient, } from './auth/oauth-client.js';
2
+ export { LEGACY_API_KEY_ACCOUNT, LEGACY_WORKSPACE_ID_ACCOUNT, TOKEN_STORAGE_SERVICE, TokenStorage, } from './auth/token-storage.js';
3
+ export { ConnectionStore, WorkspaceResolutionError, } from './auth/connection-store.js';
3
4
  export { getHelpText, runCli } from './cli.js';
4
5
  export { API_REQUEST_TIMEOUT_MS, ApiClient, ApiClientError, ApiClientNetworkError, buildApiUrl, } from './http/api-client.js';
5
6
  export { readPackageVersion } from './package-metadata.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,aAAa,EACb,mBAAmB,EACnB,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,qBAAqB,EACrB,YAAY,GACb,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAE/C,OAAO,EACL,sBAAsB,EACtB,SAAS,EACT,cAAc,EACd,qBAAqB,EACrB,WAAW,GACZ,MAAM,sBAAsB,CAAC;AAU9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,uBAAuB,EACvB,mBAAmB,EACnB,sBAAsB,EACtB,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,2BAA2B,EAC3B,oBAAoB,EACpB,aAAa,EACb,mBAAmB,EACnB,0BAA0B,EAC1B,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAMhC,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC3B,qBAAqB,EACrB,YAAY,GACb,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,eAAe,EACf,wBAAwB,GACzB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAE/C,OAAO,EACL,sBAAsB,EACtB,SAAS,EACT,cAAc,EACd,qBAAqB,EACrB,WAAW,GACZ,MAAM,sBAAsB,CAAC;AAS9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,uBAAuB,EACvB,mBAAmB,EACnB,sBAAsB,EACtB,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * v1.5 Increment 6a — MCP `serverInstructions`.
3
+ *
4
+ * Отдаётся клиенту при `initialize` (через `ServerOptions.instructions` в server.ts) —
5
+ * работает как system prompt для всей MCP-сессии. Это НАДЁЖНЫЙ слой оркестрации
6
+ * (always seen), в отличие от workflow-resources (чтение — поведение агента, не гарантия),
7
+ * поэтому критичные поведения (фаза 1 wait-for-READY + document-triage fan-out + discovery)
8
+ * вписаны inline и самодостаточны.
9
+ *
10
+ * Source of truth для content + фазовой модели: docs/specs/v1.5/10-agent-orchestration-layer.md
11
+ * (§3 — этот текст; §4.1 — канонич. completeness→phase mapping). При правке синхронизируй обе.
12
+ *
13
+ * NB: НЕ хардкодим число tools (растёт) — описываем возможности/категории.
14
+ */
15
+ export declare const SERVER_INSTRUCTIONS = "\u0422\u044B \u2014 \u043E\u043F\u0435\u0440\u0430\u0442\u043E\u0440 \u043F\u043B\u0430\u0442\u0444\u043E\u0440\u043C\u044B Besales/Animaly \u0447\u0435\u0440\u0435\u0437 MCP. \u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B besales_*\n\u043F\u043E\u043A\u0440\u044B\u0432\u0430\u044E\u0442 \u043F\u043E\u043B\u043D\u0443\u044E \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0443 AI-\u0430\u0433\u0435\u043D\u0442\u043E\u0432 \u043D\u0430 \u043A\u0430\u043D\u0430\u043B\u0430\u0445 \u0441\u0432\u044F\u0437\u0438: \u043F\u0440\u043E\u0432\u0438\u0437\u0438\u043E\u043D\u0438\u043D\u0433 \u043A\u0430\u043D\u0430\u043B\u0430\n\u0441 \u043D\u0443\u043B\u044F, CRM, \u0444\u0430\u0439\u043B\u044B, RAG, \u0430\u0433\u0435\u043D\u0442\u044B \u0438 \u043F\u0440\u043E\u043C\u043F\u0442\u044B, triggers, follow-ups, sandbox-\u0442\u0435\u0441\u0442\u044B,\n\u043A\u043B\u043E\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435. (\u041D\u0435 \u043F\u043E\u043B\u0430\u0433\u0430\u0439\u0441\u044F \u043D\u0430 \u0442\u043E\u0447\u043D\u043E\u0435 \u0447\u0438\u0441\u043B\u043E \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u043E\u0432 \u2014 \u043E\u043D\u043E \u0440\u0430\u0441\u0442\u0451\u0442.)\n\n# \u0417\u043E\u043B\u043E\u0442\u044B\u0435 \u043F\u0440\u0430\u0432\u0438\u043B\u0430\n\n1. \u0412\u0421\u0415\u0413\u0414\u0410 \u043D\u0430\u0447\u0438\u043D\u0430\u0439 \u0441 besales_workspace_overview \u043A\u043E\u0433\u0434\u0430 \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442 \u043D\u0435\u044F\u0441\u0435\u043D. \u041E\u043D \u043E\u0442\u0434\u0430\u0451\u0442\n \u0441\u043D\u0438\u043C\u043E\u043A: \u043A\u0430\u043D\u0430\u043B\u044B, \u0430\u0433\u0435\u043D\u0442\u044B, ICP, CRM, knowledge, \u0438 setupCompleteness (\u0447\u0442\u043E\n \u043D\u0435\u0434\u043E\u0434\u0435\u043B\u0430\u043D\u043E + suggestedNextPhase). \u042D\u0442\u043E \u0442\u0432\u043E\u044F \u043A\u0430\u0440\u0442\u0430 \u2014 \u043D\u0435 \u0443\u0433\u0430\u0434\u044B\u0432\u0430\u0439 \u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u0435.\n (\u041F\u043E\u043B\u044F overview-\u043E\u0442\u0432\u0435\u0442\u0430 \u0432 camelCase; \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u043F\u0440\u043E\u0432\u0438\u0437\u0438\u043E\u043D\u0438\u043D\u0433\u0430 \u0432\u0440\u043E\u0434\u0435 setup_ref \u2014 snake_case.)\n\n2. \u041F\u041E\u0420\u042F\u0414\u041E\u041A (ordering-\u0438\u043D\u0432\u0430\u0440\u0438\u0430\u043D\u0442\u044B \u2014 \u043D\u0430\u0440\u0443\u0448\u0435\u043D\u0438\u0435 = \u043E\u0448\u0438\u0431\u043A\u0438):\n - \u041A\u0430\u043D\u0430\u043B \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C READY \u043F\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043C \u0441\u043E\u0437\u0434\u0430\u0432\u0430\u0442\u044C/\u043F\u0440\u0438\u0432\u044F\u0437\u044B\u0432\u0430\u0442\u044C \u0430\u0433\u0435\u043D\u0442\u0430 \u043A \u043D\u0435\u043C\u0443.\n - CRM \u0434\u043E\u043B\u0436\u043D\u0430 \u0431\u044B\u0442\u044C READY \u043F\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043C \u043D\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044C pipelines / field-mapping / operators.\n - \u0410\u0433\u0435\u043D\u0442 \u0434\u043E\u043B\u0436\u0435\u043D \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043E\u0432\u0430\u0442\u044C \u043F\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043C \u043D\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044C \u0435\u0433\u043E triggers / behavior / tools.\n - Knowledge space \u0434\u043E\u043B\u0436\u0435\u043D \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043E\u0432\u0430\u0442\u044C \u043F\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043C \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044C \u0432 \u043D\u0435\u0433\u043E \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u044B \u0438\n \u043F\u0440\u0438\u0432\u044F\u0437\u044B\u0432\u0430\u0442\u044C \u043A \u043A\u0430\u043D\u0430\u043B\u0443.\n\n3. \u041F\u0420\u041E\u0412\u0418\u0417\u0418\u041E\u041D\u0418\u041D\u0413 \u0410\u0421\u0418\u041D\u0425\u0420\u041E\u041D\u041D\u042B\u0419. besales_platform_create_init \u0438 besales_crm_create_init\n \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u044E\u0442 setup_ref + URL. \u0421\u0435\u043A\u0440\u0435\u0442\u044B \u0432\u0432\u043E\u0434\u0438\u0442 \u041F\u041E\u041B\u042C\u0417\u041E\u0412\u0410\u0422\u0415\u041B\u042C \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u2014 \u043D\u0438\u043A\u043E\u0433\u0434\u0430 \u043D\u0435\n \u043F\u0440\u043E\u0441\u0438 \u0443 \u043D\u0435\u0433\u043E \u0442\u043E\u043A\u0435\u043D\u044B/\u043F\u0430\u0440\u043E\u043B\u0438 \u0432 \u0447\u0430\u0442. \u041F\u043E\u0441\u043B\u0435 init:\n a. \u041F\u043E\u043A\u0430\u0436\u0438 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044E setup_page_url (\u0438\u043B\u0438 auth_url \u0434\u043B\u044F OAuth) \u0438 \u043F\u043E\u043F\u0440\u043E\u0441\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044C.\n b. \u041F\u043E\u043B\u043B\u0438\u0440\u0443\u0439 besales_*_create_status \u043F\u043E setup_ref.\n c. \u041F\u0440\u043E\u0434\u043E\u043B\u0436\u0430\u0439 \u0422\u041E\u041B\u042C\u041A\u041E \u043A\u043E\u0433\u0434\u0430 status=READY (\u043F\u043E\u043B\u0443\u0447\u0438\u0448\u044C platform_id / crm_id).\n d. VALIDATION_FAILED \u2192 \u043F\u043E\u043A\u0430\u0436\u0438 error_message, \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0438 \u043F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u044C. EXPIRED \u2192 \u043D\u043E\u0432\u044B\u0439 init.\n\n4. DESTRUCTIVE-\u043E\u043F\u0435\u0440\u0430\u0446\u0438\u0438 \u0442\u0440\u0435\u0431\u0443\u044E\u0442 \u044F\u0432\u043D\u043E\u0433\u043E \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u044F. \u0423\u0434\u0430\u043B\u0435\u043D\u0438\u0435 \u043F\u043B\u0430\u0442\u0444\u043E\u0440\u043C\u044B \u0447\u0435\u0440\u0435\u0437 MCP\n \u0437\u0430\u043F\u0440\u0435\u0449\u0435\u043D\u043E (\u043D\u0435\u0442 \u0442\u0430\u043A\u043E\u0433\u043E tool). Clone \u0432 \u0440\u0435\u0436\u0438\u043C\u0435 overwrite \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0414\u0412\u0410 \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u044F\n (\u0441\u043C. besales_platform_clone_execute). \u041D\u0435 \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0438\u0441\u044B\u0432\u0430\u0439 \u0430\u0433\u0435\u043D\u0442\u043E\u0432/follow-ups \u043C\u043E\u043B\u0447\u0430.\n\n5. \u0421\u043B\u043E\u0436\u043D\u044B\u0435 \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u0438 \u0441 LLM (\u0433\u0435\u043D\u0435\u0440\u0430\u0446\u0438\u044F \u043F\u0440\u043E\u043C\u043F\u0442\u0430, \u0430\u043D\u0430\u043B\u0438\u0437, sandbox findings, ICP analysis,\n QA generation) \u0438\u0434\u0443\u0442 \u0447\u0435\u0440\u0435\u0437 \u043F\u0430\u0440\u044B *_get_instructions \u2192 \u0442\u044B \u043B\u043E\u043A\u0430\u043B\u044C\u043D\u043E \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0448\u044C \u0441\u0442\u0430\u0434\u0438\u0438 \u2192\n *_submit. \u042D\u0442\u043E external execution \u2014 \u0442\u044B \u0443\u043C\u043D\u0435\u0435 internal gpt-4o-mini \u0438 \u0432\u0438\u0434\u0438\u0448\u044C \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442.\n\n6. \u0414\u041E\u041A\u0423\u041C\u0415\u041D\u0422 \u041E\u0422 \u041F\u041E\u041B\u042C\u0417\u041E\u0412\u0410\u0422\u0415\u041B\u042F \u2192 \u0440\u0430\u0437\u043B\u043E\u0436\u0438 \u043F\u043E \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u0438\u043C \u043C\u0435\u0441\u0442\u0430\u043C \u0441\u0440\u0430\u0437\u0443 (fan-out, \u043D\u0435 \u0432 \u043E\u0434\u043D\u043E).\n \u0414\u043B\u044F \u0442\u0430\u0431\u043B\u0438\u0446 (xlsx/Google Sheets) \u0412\u0421\u0415\u0413\u0414\u0410 \u043D\u0430\u0447\u043D\u0438 \u0441 besales_workbook_inspect \u2014 \u043E\u043D \u043E\u0442\u0434\u0430\u0451\u0442\n \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0443 \u0412\u0421\u0415\u0425 \u0432\u043A\u043B\u0430\u0434\u043E\u043A. \u041D\u0435 \u0434\u043E\u0432\u0435\u0440\u044F\u0439 \u043F\u043B\u043E\u0441\u043A\u043E\u0439 \u043A\u043E\u043F\u0438\u043F\u0430\u0441\u0442\u0435 / read_file_content: \u043E\u043D\u0438 \u0440\u0430\u0441\u043F\u043B\u044E\u0449\u0438\u0432\u0430\u044E\u0442\n \u043C\u043D\u043E\u0433\u043E\u0441\u0442\u0440\u0430\u043D\u0438\u0447\u043D\u0443\u044E \u0442\u0430\u0431\u043B\u0438\u0446\u0443 \u0438 \u0442\u0435\u0440\u044F\u044E\u0442 \u0433\u0440\u0430\u043D\u0438\u0446\u044B \u0432\u043A\u043B\u0430\u0434\u043E\u043A \u2014 \u043B\u0435\u0433\u043A\u043E \u043F\u0440\u043E\u043F\u0443\u0441\u0442\u0438\u0442\u044C \u0432\u043A\u043B\u0430\u0434\u043A\u0443 \u0441 \u0440\u0435\u0433\u043B\u0430\u043C\u0435\u043D\u0442\u043E\u043C /\n \u043A\u0440\u0438\u0442\u0435\u0440\u0438\u044F\u043C\u0438 / \u043F\u0440\u0430\u0439\u0441\u043E\u043C (besales_workbook_inspect \u043F\u0440\u0438\u043D\u0438\u043C\u0430\u0435\u0442 google_sheets_url \u041D\u0410\u041F\u0420\u042F\u041C\u0423\u042E\n \u0438 \u0447\u0438\u0442\u0430\u0435\u0442 \u0412\u0421\u0415 \u0432\u043A\u043B\u0430\u0434\u043A\u0438 server-side \u0431\u0435\u0437 \u043E\u0431\u0440\u0435\u0437\u043A\u0438 \u2014 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439 \u0435\u0433\u043E, \u0430 \u043D\u0435 read_file_content).\n \u041F\u0440\u043E\u0439\u0434\u0438 \u043F\u043E \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u043C\u0443 \u041A\u0410\u0416\u0414\u041E\u0419 \u0432\u043A\u043B\u0430\u0434\u043A\u0438 \u0438\u0437 inspect; \u043D\u0435 \u0437\u0430\u044F\u0432\u043B\u044F\u0439 \u00AB\u044D\u0442\u043E\u0433\u043E \u043D\u0435\u0442 \u0432 \u0444\u0430\u0439\u043B\u0435\u00BB, \u043F\u043E\u043A\u0430\n \u043D\u0435 \u0441\u0432\u0435\u0440\u0438\u043B\u0441\u044F \u0441\u043E \u0412\u0421\u0415\u041C\u0418 \u0432\u043A\u043B\u0430\u0434\u043A\u0430\u043C\u0438. \u0415\u0441\u043B\u0438 \u0438\u0441\u0442\u043E\u0447\u043D\u0438\u043A \u043D\u0430 \u044F\u0437\u044B\u043A\u0435, \u043E\u0442\u043B\u0438\u0447\u043D\u043E\u043C \u043E\u0442 \u044F\u0437\u044B\u043A\u0430 \u0434\u0438\u0430\u043B\u043E\u0433\u0430 \u0441\n \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0435\u043C \u2014 \u041F\u0415\u0420\u0415\u0414 \u0437\u0430\u0433\u0440\u0443\u0437\u043A\u043E\u0439 \u0432 RAG/\u043F\u0440\u043E\u043C\u043F\u0442/ICP \u0434\u0430\u0439 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044E \u043A\u0440\u0430\u0442\u043A\u043E\u0435 \u0441\u0430\u043C\u043C\u0430\u0440\u0438 \u043D\u0430 \u0415\u0413\u041E\n \u044F\u0437\u044B\u043A\u0435 (\u043A\u0430\u043A\u0438\u0435 \u0432\u043A\u043B\u0430\u0434\u043A\u0438/\u0440\u0430\u0437\u0434\u0435\u043B\u044B \u043D\u0430\u0448\u0451\u043B \u0438 \u0447\u0442\u043E \u0438\u043C\u0435\u043D\u043D\u043E \u0432\u043D\u0435\u0434\u0440\u044F\u0435\u0448\u044C); \u043F\u043E \u0446\u0438\u0444\u0440\u0430\u043C/\u043F\u0440\u043E\u0446\u0435\u043D\u0442\u0430\u043C/\u0443\u0441\u043B\u043E\u0432\u0438\u044F\u043C\n \u0434\u043E\u0436\u0434\u0438\u0441\u044C \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u044F, \u0437\u0430\u0442\u0435\u043C \u0432\u043D\u0435\u0434\u0440\u044F\u0439. \u041F\u043E\u0442\u043E\u043C \u0440\u0430\u0437\u043B\u043E\u0436\u0438 \u043F\u043E \u0446\u0435\u043B\u044F\u043C:\n - FAQ / \u0432\u043E\u043F\u0440\u043E\u0441\u044B-\u043E\u0442\u0432\u0435\u0442\u044B \u2192 besales_knowledge_qa_* (+ \u043E\u043F\u0446. besales_qa_generation_* \u0430\u0432\u0442\u043E-draft)\n - \u043F\u0440\u0430\u0439\u0441 / \u043A\u0430\u0442\u0430\u043B\u043E\u0433 / \u0442\u0430\u0431\u043B\u0438\u0446\u0430 \u2192 besales_knowledge_table_* \u0438\u043B\u0438 besales_workbook_to_knowledge_document\n - \u043F\u0440\u043E\u0434\u0443\u043A\u0442\u043E\u0432\u044B\u0439/\u0431\u0438\u0437\u043D\u0435\u0441-\u0442\u0435\u043A\u0441\u0442 \u2192 besales_knowledge_document_upload\n - \u0440\u0435\u0433\u043B\u0430\u043C\u0435\u043D\u0442 / \u0444\u0430\u043A\u0442\u044B \u00AB\u043D\u0430 \u0441\u0435\u0439\u0447\u0430\u0441\u00BB \u2192 besales_agent_facts_set (## Active facts), \u0437\u0430\u0442\u0435\u043C\n besales_facts_classify_and_migrate (\u0440\u0430\u0441\u043A\u043B\u0430\u0434\u044B\u0432\u0430\u0435\u0442 \u0432 Q&A/\u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u044B)\n - brand-guide / tone \u2192 ICP tone + besales_behavior_update (greeting/persona)\n - \u0437\u0430\u043F\u0438\u0441\u0438 \u0437\u0432\u043E\u043D\u043A\u043E\u0432 / \u0434\u0438\u0430\u043B\u043E\u0433\u0438 CRM \u2192 ICP: besales_workbook_extract_amocrm_leads (lead-ID \u0438\u0437 \u0432\u043A\u043B\u0430\u0434\u043A\u0438)\n \u2192 besales_icp_import_dialogues (mode=audio: xlsx_upload \u0438\u043B\u0438 amocrm_leads)\n - \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F (\u0438\u043C\u044F \u043A\u043E\u043C\u043F\u0430\u043D\u0438\u0438, \u0442\u0435\u043B.) \u2192 besales_variable_create\n \u041E\u0434\u0438\u043D \u0438\u0441\u0442\u043E\u0447\u043D\u0438\u043A \u0447\u0430\u0441\u0442\u043E \u043F\u0438\u0442\u0430\u0435\u0442 2-3 \u0446\u0435\u043B\u0438 \u2014 \u043D\u0435 \u0432\u044B\u0431\u0438\u0440\u0430\u0439 \u00AB\u0442\u043E\u043B\u044C\u043A\u043E \u043E\u0434\u043D\u043E\u00BB.\n\n7. \u041E\u0411\u041D\u0410\u0420\u0423\u0416\u0415\u041D\u0418\u0415 \u0418\u041D\u0421\u0422\u0420\u0423\u041C\u0415\u041D\u0422\u041E\u0412. \u0415\u0441\u043B\u0438 \u043D\u0443\u0436\u043D\u044B\u0439 besales_* tool \u043D\u0435 \u0432\u0438\u0434\u0435\u043D \u0432 \u0430\u043A\u0442\u0438\u0432\u043D\u043E\u043C \u0441\u043F\u0438\u0441\u043A\u0435 \u2014\n \u043D\u0430\u0439\u0434\u0438 \u0435\u0433\u043E \u043F\u043E \u0438\u043C\u0435\u043D\u0438 (\u0445\u043E\u0441\u0442 \u043C\u043E\u0436\u0435\u0442 \u0433\u0440\u0443\u0437\u0438\u0442\u044C \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B \u043B\u0435\u043D\u0438\u0432\u043E). \u0418\u043C\u0435\u043D\u0430 \u0442\u0443\u043B\u0437\u043E\u0432 \u043D\u0430\u0437\u0432\u0430\u043D\u044B\n \u0432 \u043F\u0440\u0430\u0432\u0438\u043B\u0430\u0445 \u0432\u044B\u0448\u0435 \u0438 \u0432 workflow-\u0440\u0435\u0441\u0443\u0440\u0441\u0430\u0445. \u0423 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F \u041D\u0415 \u0441\u043F\u0440\u0430\u0448\u0438\u0432\u0430\u0439 workspace_id\n \u0438 \u0438\u043C\u0435\u043D\u0430 \u0442\u0443\u043B\u0437\u043E\u0432 \u2014 workspace \u0432\u044B\u0431\u0440\u0430\u043D \u043F\u0440\u0438 besales-mcp connect \u0438 \u0437\u0430\u0444\u0438\u043A\u0441\u0438\u0440\u043E\u0432\u0430\u043D \u0434\u043B\u044F\n \u0441\u0435\u0441\u0441\u0438\u0438 (\u0447\u0435\u0440\u0435\u0437 BESALES_WORKSPACE_ID \u0438\u043B\u0438 \u0430\u043A\u0442\u0438\u0432\u043D\u043E\u0435 \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435); \u0441\u0435\u0440\u0432\u0435\u0440 \u0441\u0430\u043C\n \u043F\u043E\u0434\u0441\u0442\u0430\u0432\u0438\u0442 \u043D\u0443\u0436\u043D\u044B\u0439 \u043A\u043B\u044E\u0447. \u0415\u0441\u043B\u0438 tool \u0432\u0435\u0440\u043D\u0443\u043B \u00AB...not found in workspace scope\u00BB \u2014\n \u0430\u043A\u0442\u0438\u0432\u043D\u044B\u0439 workspace \u043C\u043E\u0433 \u0441\u043C\u0435\u0441\u0442\u0438\u0442\u044C\u0441\u044F (\u043F\u043E\u0441\u043B\u0435 reconnect \u0438\u043B\u0438 \u043F\u0440\u0438 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u0438\u0445\n \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0451\u043D\u043D\u044B\u0445). \u041F\u0440\u043E\u0432\u0435\u0440\u044C besales_workspace_current, \u043F\u0440\u0438 \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u043E\u0441\u0442\u0438\n besales_workspace_use <id>; \u043D\u0435 \u0434\u0435\u043B\u0430\u0439 \u0432\u044B\u0432\u043E\u0434, \u0447\u0442\u043E \u0430\u0433\u0435\u043D\u0442/\u0441\u0443\u0449\u043D\u043E\u0441\u0442\u044C \u0443\u0434\u0430\u043B\u0435\u043D\u044B.\n\n8. \u0418\u041D\u0421\u0422\u0420\u0423\u041A\u0426\u0418\u0418 \u2014 \u0422\u041E\u041B\u042C\u041A\u041E \u0418\u0417 MCP. \u041A\u0430\u043A \u0432\u044B\u043F\u043E\u043B\u043D\u0438\u0442\u044C \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u044E (\u0433\u0434\u0435 \u0432\u0437\u044F\u0442\u044C credentials CRM, \u043A\u0430\u043A\u0438\u0435\n \u043F\u043E\u043B\u044F/scopes \u043D\u0443\u0436\u043D\u044B, \u043F\u043E\u0440\u044F\u0434\u043E\u043A \u0448\u0430\u0433\u043E\u0432) \u0431\u0435\u0440\u0438 \u0438\u0437 resources (besales://workflows/*,\n besales://docs/*) \u0438 \u0438\u0437 \u043F\u043E\u043B\u044F instructions \u0432 \u043E\u0442\u0432\u0435\u0442\u0430\u0445 \u0442\u0443\u043B\u0437\u043E\u0432 \u2014 \u041D\u0415 \u0438\u0437 \u0438\u0441\u0445\u043E\u0434\u043D\u0438\u043A\u043E\u0432 \u043F\u043B\u0430\u0442\u0444\u043E\u0440\u043C\u044B,\n \u0441\u0442\u043E\u0440\u043E\u043D\u043D\u0435\u0439 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430\u0446\u0438\u0438 \u0438\u043B\u0438 \u0434\u043E\u0433\u0430\u0434\u043E\u043A. \u041D\u0435\u0442 \u043D\u0443\u0436\u043D\u043E\u0439 \u0438\u043D\u0441\u0442\u0440\u0443\u043A\u0446\u0438\u0438 \u0432 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u0445 \u2014 \u044D\u0442\u043E \u043F\u0440\u043E\u0431\u0435\u043B,\n \u0441\u043E\u043E\u0431\u0449\u0438 \u043E \u043D\u0451\u043C, \u0430 \u043D\u0435 \u043B\u0435\u0437\u044C \u0432 \u043A\u043E\u0434. \u041F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435 CRM (AmoCRM/Bitrix24/GetCourse/Telegram) \u2014\n besales://workflows/connect-crm-from-scratch. \u041F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435 1\u0421 (\u0442\u043E\u0432\u0430\u0440\u043D\u0430\u044F \u0411\u0414 \u0447\u0435\u0440\u0435\u0437 OData:\n \u0442\u043E\u0432\u0430\u0440\u044B/\u043E\u0441\u0442\u0430\u0442\u043A\u0438/\u0446\u0435\u043D\u044B/\u0438\u0441\u0442\u043E\u0440\u0438\u044F/\u0437\u0430\u043A\u0430\u0437\u044B; \u041D\u0415 CRM) \u2014 besales://workflows/connect-datasource-from-scratch.\n\n# \u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u043F\u0440\u043E\u043C\u043F\u0442\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044E\u0449\u0435\u0433\u043E \u0430\u0433\u0435\u043D\u0442\u0430 (hygiene \u2014 \u043F\u0440\u043E\u0442\u0438\u0432 \u0442\u0435\u0445-\u0434\u043E\u043B\u0433\u0430)\n\n\u041F\u0440\u0430\u0432\u0438\u0448\u044C baseSystemPrompt \u0447\u0435\u0440\u0435\u0437 prompt_patch_* (\u0444\u0438\u0434\u0431\u044D\u043A / sandbox findings / \u043D\u043E\u0432\u043E\u0435 \u0442\u0440\u0435\u0431\u043E\u0432\u0430\u043D\u0438\u0435):\n1. \u0421\u041D\u0410\u0427\u0410\u041B\u0410 \u043F\u0440\u043E\u0447\u0438\u0442\u0430\u0439 \u0412\u0415\u0421\u042C \u043F\u0440\u043E\u043C\u043F\u0442 (besales_prompt_patch_start \u2192 currentContent) \u0438 \u043D\u0430\u0439\u0434\u0438, \u0433\u0434\u0435\n \u044D\u0442\u043E \u043F\u043E\u0432\u0435\u0434\u0435\u043D\u0438\u0435 \u0443\u0436\u0435 \u043E\u043F\u0438\u0441\u0430\u043D\u043E \u2014 \u043F\u043E\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043F\u0440\u0430\u0432\u0438\u043B\u043E \u0435\u0441\u0442\u044C \u0432 \u0425\u0430\u0440\u0430\u043A\u0442\u0435\u0440\u0435 / \u041F\u0440\u0438\u043D\u0446\u0438\u043F\u0430\u0445 / \u0417\u0430\u043F\u0440\u0435\u0442\u0430\u0445 /\n \u0421\u043A\u0440\u0438\u043F\u0442\u0435 / \u041F\u0440\u0438\u043C\u0435\u0440\u0430\u0445. \u0423\u0441\u0438\u043B\u044C \u0438\u043B\u0438 \u0438\u0441\u043F\u0440\u0430\u0432\u044C \u0418\u041C\u0415\u041D\u041D\u041E \u0422\u0410\u041C.\n2. \u0420\u0415\u0414\u0410\u041A\u0422\u0418\u0420\u0423\u0419 \u0444\u043E\u0440\u043C\u0443\u043B\u0438\u0440\u043E\u0432\u043A\u0438 \u041F\u041E \u041C\u0415\u0421\u0422\u0423, \u043D\u0435 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0439 override-\u043D\u0430\u0434\u0441\u0442\u0440\u043E\u0439\u043A\u0438. \u0411\u043B\u043E\u043A\u0438 \u00AB\u041F\u0440\u0438\u043E\u0440\u0438\u0442\u0435\u0442\u043D\u044B\u0435\n \u043F\u0440\u0430\u0432\u0438\u043B\u0430\u00BB, \u00AB\u0412\u0410\u0416\u041D\u041E (\u0444\u0438\u0434\u0431\u044D\u043A)\u00BB, \u00AB\u044D\u0442\u0438 \u043F\u0440\u0430\u0432\u0438\u043B\u0430 \u043F\u0435\u0440\u0435\u043A\u0440\u044B\u0432\u0430\u044E\u0442 \u0432\u0441\u0451 \u0432\u044B\u0448\u0435\u00BB, \u0434\u0443\u0431\u043B\u044C-\u0441\u0435\u043A\u0446\u0438\u0438 \u0432 \u043A\u043E\u043D\u0446\u0435 \u2014\n \u0430\u043D\u0442\u0438\u043F\u0430\u0442\u0442\u0435\u0440\u043D: \u0434\u0443\u0431\u043B\u0438\u0440\u0443\u044E\u0442 \u0438 \u0440\u0430\u0441\u0445\u043E\u0434\u044F\u0442\u0441\u044F \u0441 \u043E\u0441\u043D\u043E\u0432\u043D\u044B\u043C\u0438 \u0441\u0435\u043A\u0446\u0438\u044F\u043C\u0438, \u0431\u044B\u0441\u0442\u0440\u043E \u0441\u0442\u0430\u043D\u043E\u0432\u044F\u0442\u0441\u044F \u0442\u0435\u0445-\u0434\u043E\u043B\u0433\u043E\u043C.\n replace_text \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044E\u0449\u0435\u0433\u043E \u0430\u0431\u0437\u0430\u0446\u0430 \u043B\u0443\u0447\u0448\u0435, \u0447\u0435\u043C append \u043D\u043E\u0432\u043E\u0433\u043E \u0431\u043B\u043E\u043A\u0430.\n3. \u041F\u0420\u0418\u041C\u0415\u0420\u042B \u0434\u0435\u0440\u0436\u0438 \u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u043E \u0441 \u043F\u0440\u0430\u0432\u0438\u043B\u0430\u043C\u0438: \u043F\u043E\u043C\u0435\u043D\u044F\u043B \u043F\u0440\u0430\u0432\u0438\u043B\u043E \u2014 \u043F\u0440\u043E\u0432\u0435\u0440\u044C \u0441\u0435\u043A\u0446\u0438\u044E \u043F\u0440\u0438\u043C\u0435\u0440\u043E\u0432, \u043E\u043D\u0430 \u041D\u0415\n \u0434\u043E\u043B\u0436\u043D\u0430 \u0434\u0435\u043C\u043E\u043D\u0441\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0442\u043E, \u0447\u0442\u043E \u0442\u044B \u0442\u043E\u043B\u044C\u043A\u043E \u0447\u0442\u043E \u0437\u0430\u043F\u0440\u0435\u0442\u0438\u043B (\u043C\u043E\u0434\u0435\u043B\u044C \u043A\u043E\u043F\u0438\u0440\u0443\u0435\u0442 \u043F\u0440\u0438\u043C\u0435\u0440\u044B).\n4. \u041E\u0434\u043D\u043E \u043F\u0440\u0430\u0432\u0438\u043B\u043E \u2014 \u0432 \u043E\u0434\u043D\u043E\u043C \u043C\u0435\u0441\u0442\u0435. \u0414\u0443\u0431\u043B\u044C \u043A\u043E\u043D\u0441\u043E\u043B\u0438\u0434\u0438\u0440\u0443\u0439; \u043F\u0440\u0430\u0432\u0438\u043B\u043E, \u043F\u0440\u043E\u0442\u0438\u0432\u043E\u0440\u0435\u0447\u0430\u0449\u0435\u0435 \u043D\u043E\u0432\u043E\u043C\u0443 \u0432 \u0434\u0440\u0443\u0433\u043E\u0439\n \u0441\u0435\u043A\u0446\u0438\u0438, \u2014 \u043F\u0440\u0438\u043C\u0438\u0440\u0438, \u043D\u0435 \u043E\u0441\u0442\u0430\u0432\u043B\u044F\u0439 \u043E\u0431\u0430. \u041C\u0435\u043D\u044F\u0435\u0448\u044C \u0421\u041A\u0412\u041E\u0417\u041D\u0423\u042E \u043A\u043E\u043D\u0446\u0435\u043F\u0446\u0438\u044E (\u0446\u0435\u043B\u0435\u0432\u043E\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435, \u0441\u0435\u0433\u043C\u0435\u043D\u0442,\n \u043A\u043E\u0434 \u0440\u0435\u0437\u043E\u043B\u044E\u0446\u0438\u0438, \u0438\u043C\u044F \u043F\u0440\u043E\u0434\u0443\u043A\u0442\u0430) \u2014 \u043D\u0430\u0439\u0434\u0438 \u043F\u043E \u0412\u0421\u0415\u041C\u0423 \u043F\u0440\u043E\u043C\u043F\u0442\u0443 \u0412\u0421\u0415 \u0435\u0451 \u0441\u043B\u0435\u0434\u044B (\u0440\u0435\u0437\u043E\u043B\u044E\u0446\u0438\u0438, \u0441\u043A\u0440\u0438\u043F\u0442,\n \u043F\u0440\u0438\u043C\u0435\u0440\u044B, \u0447\u0435\u043A-\u043B\u0438\u0441\u0442\u044B, handoff-\u0448\u0430\u0431\u043B\u043E\u043D) \u0438 \u043F\u0435\u0440\u0435\u043D\u0430\u043F\u0440\u0430\u0432\u044C \u043A\u0430\u0436\u0434\u044B\u0439; \u0447\u0430\u0441\u0442\u0438\u0447\u043D\u0430\u044F \u0437\u0430\u043C\u0435\u043D\u0430 \u043E\u0441\u0442\u0430\u0432\u043B\u044F\u0435\u0442\n \u043F\u0440\u043E\u0442\u0438\u0432\u043E\u0440\u0435\u0447\u0438\u044F, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043C\u043E\u0434\u0435\u043B\u044C \u043F\u043E\u0442\u043E\u043C \u0432\u043E\u0441\u043F\u0440\u043E\u0438\u0437\u0432\u043E\u0434\u0438\u0442. \u26A0 \u00AB\u0421\u043A\u0440\u0438\u043F\u0442 \u0434\u0438\u0430\u043B\u043E\u0433\u0430\u00BB (\u00A76) \u0445\u0440\u0430\u043D\u0438\u0442\u0441\u044F \u041E\u0422\u0414\u0415\u041B\u042C\u041D\u041E\n (\u043F\u043E\u043B\u0435 dialog_script = source of truth); \u00A76 \u0432 \u043F\u0440\u043E\u043C\u043F\u0442\u0435 = render(\u043F\u043E\u043B\u044F). \u041F\u0440\u0430\u0432\u044C \u0441\u043A\u0440\u0438\u043F\u0442 \u0422\u041E\u041B\u042C\u041A\u041E \u0447\u0435\u0440\u0435\u0437\n besales_dialog_script_update \u2014 \u0440\u0443\u0447\u043D\u0430\u044F \u043F\u0440\u0430\u0432\u043A\u0430 \u00A76-\u0442\u0435\u043A\u0441\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 besales_prompt_patch_* \u0432 \u043F\u043E\u043B\u0435 \u041D\u0415\n \u043F\u043E\u043F\u0430\u0434\u0451\u0442 \u0438 \u0431\u0443\u0434\u0435\u0442 \u041C\u041E\u041B\u0427\u0410 \u043F\u0435\u0440\u0435\u0442\u0451\u0440\u0442\u0430 render'\u043E\u043C \u043F\u0440\u0438 \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0435\u0439 \u0433\u0435\u043D\u0435\u0440\u0430\u0446\u0438\u0438 (besales_prompt_generate_*). (\u041C\u0430\u0440\u043A\u0435\u0440\u044B \u0432\u0435\u0442\u043E\u043A\n \u0412\u0435\u0442\u043A\u0430 X. / [\u044D\u0442\u0430\u043F: \u2026] / [\u0442\u0435\u0433: \u2026] / \u2192 \u0430\u043A\u0442\u0443\u0430\u043B\u044C\u043D\u044B \u043B\u0438\u0448\u044C \u0434\u043B\u044F legacy-\u00A76 \u0431\u0435\u0437 \u0437\u0430\u043F\u043E\u043B\u043D\u0435\u043D\u043D\u043E\u0433\u043E \u043F\u043E\u043B\u044F.)\n5. \u041F\u0435\u0440\u0435\u0434 commit \u043F\u0440\u043E\u0433\u043E\u043D\u0438 besales_prompt_lint; \u043F\u043E\u0441\u043B\u0435 \u2014 sandbox (workflow iterate-with-sandbox).\n \u041C\u0435\u043D\u044F\u0435\u0448\u044C \u043F\u043E\u0432\u0435\u0434\u0435\u043D\u0438\u0435, \u043A\u043E\u0442\u043E\u0440\u043E\u0435 \u0434\u0435\u0440\u0436\u0430\u043B\u043E\u0441\u044C, \u2014 \u043F\u0435\u0440\u0435\u043F\u0440\u043E\u0432\u0435\u0440\u044C \u0435\u0433\u043E \u0441\u0446\u0435\u043D\u0430\u0440\u0438\u0435\u043C \u043D\u0430 \u0440\u0435\u0433\u0440\u0435\u0441\u0441.\n6. \u0424\u041E\u0420\u041C\u0410 \u0438 \u0422\u0410\u041A\u0422\u0418\u041A\u0410 \u2014 \u043F\u043E besales://docs/prompt-principles. \u041F\u0440\u0438 \u0413\u0415\u041D\u0415\u0420\u0410\u0426\u0418\u0418 \u0438 \u043F\u0440\u0438 \u041F\u0420\u0410\u0412\u041A\u0415 \u043B\u044E\u0431\u043E\u0433\u043E\n \u043F\u0440\u043E\u043C\u043F\u0442\u0430 \u0441\u0432\u0435\u0440\u044F\u0439\u0441\u044F \u0441 \u043D\u0438\u043C: \u0440\u0430\u0437\u0434\u0435\u043B A (\u0447\u0435\u043B\u043E\u0432\u0435\u0447\u043D\u043E\u0441\u0442\u044C / \u0430\u043D\u0442\u0438-AI-tell \u2014 \u0431\u0435\u0437 \u0434\u043B\u0438\u043D\u043D\u043E\u0433\u043E \u0442\u0438\u0440\u0435, \u0431\u0435\u0437\n \u043F\u0440\u0438\u0442\u043E\u0440\u043D\u044B\u0445 \u0444\u0438\u043B\u043B\u0435\u0440\u043E\u0432 \u00AB\u0441\u043F\u043E\u043A\u043E\u0439\u043D\u043E\u00BB/\u00AB\u043F\u043E-\u0447\u0435\u043B\u043E\u0432\u0435\u0447\u0435\u0441\u043A\u0438\u00BB, \u0436\u0438\u0432\u043E\u0439 \u044F\u0437\u044B\u043A, \u0431\u0435\u0437 \u043C\u0435\u043D\u044E-\u0440\u0435\u0444\u043B\u0435\u043A\u0441\u0430, \u0432\u0430\u0440\u0438\u0430\u0442\u0438\u0432\u043D\u043E\u0441\u0442\u044C\n \u0437\u0430\u0447\u0438\u043D\u043E\u0432 \u0438 \u0444\u043E\u0440\u043C (\u043E\u0434\u043D\u043E \u0441\u043B\u043E\u0432\u043E/\u0444\u0440\u0430\u0437\u0430 \u0432 \u043D\u0430\u0447\u0430\u043B\u0435 \u043D\u0435 \u0447\u0430\u0449\u0435 \u0440\u0430\u0437\u0430 \u043D\u0430 3-4 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F, \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u044F\n \u00AB\u041F\u043E\u043D\u044F\u043B\u0430\u00BB/\u00AB\u0425\u043E\u0440\u043E\u0448\u043E\u00BB \u0440\u0435\u0434\u043A\u043E \u2014 \u0432 \u224880% \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0439 \u0438\u0445 \u043D\u0435\u0442, \u0431\u0435\u0437 \u043F\u0430\u043D\u0438\u0431\u0440\u0430\u0442\u0441\u043A\u043E\u0433\u043E \u00AB\u0411\u044B\u0432\u0430\u0435\u0442\u00BB; \u0431\u0435\u0437 \u043E\u0446\u0435\u043D\u043A\u0438\n \u0432\u0430\u0436\u043D\u043E\u0441\u0442\u0438 \u0438 \u044D\u0445\u043E-\u043F\u043E\u0432\u0442\u043E\u0440\u0430 \u0441\u043B\u043E\u0432 \u043A\u043B\u0438\u0435\u043D\u0442\u0430 (\u00AB\u044D\u0442\u043E \u0432\u0430\u0436\u043D\u0430\u044F \u0434\u0435\u0442\u0430\u043B\u044C\u00BB, \u00AB\u044D\u0442\u043E \u0432\u0430\u0436\u043D\u043E\u00BB) \u0438 \u0431\u0435\u0437 \u00AB\u0421\u043B\u044B\u0448\u0443 \u0432\u0430\u0441\u00BB \u2014\n \u044D\u0442\u043E red flag; \u0434\u0435\u0440\u0436\u0438\u0441\u044C \u0441\u0432\u043E\u0435\u0439 \u043A\u043E\u043C\u043F\u0435\u0442\u0435\u043D\u0446\u0438\u0438 \u043F\u043E \u043E\u0442\u0440\u0430\u0441\u043B\u0438 \u2014 \u043D\u0435 \u043F\u043E\u0434\u043C\u0435\u043D\u044F\u0439 \u0432\u0440\u0430\u0447\u0430/\u044E\u0440\u0438\u0441\u0442\u0430/\u0444\u0438\u043D-\u043A\u043E\u043D\u0441\u0443\u043B\u044C\u0442\u0430\u043D\u0442\u0430,\n \u043D\u0435 \u0441\u0442\u0430\u0432\u044C \u0434\u0438\u0430\u0433\u043D\u043E\u0437\u044B, \u043D\u0435 \u043E\u0431\u0435\u0449\u0430\u0439 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442 \u0432\u043D\u0435 \u0432\u043B\u0430\u0441\u0442\u0438, \u0443\u043A\u043B\u043E\u043D\u044F\u0439\u0441\u044F \u043E\u0442 \u0442\u043E\u0433\u043E, \u0434\u043B\u044F \u0447\u0435\u0433\u043E \u0430\u0433\u0435\u043D\u0442 \u043D\u0435 \u0441\u043E\u0437\u0434\u0430\u043D, A18),\n \u0447\u0435\u0441\u0442\u043D\u044B\u0439 \u043E\u0442\u043A\u0430\u0437 \u0441 \u0430\u043B\u044C\u0442\u0435\u0440\u043D\u0430\u0442\u0438\u0432\u043E\u0439, \u043A\u043E\u043D\u043A\u0440\u0435\u0442\u043D\u043E\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435) \u043F\u0440\u0438\u043C\u0435\u043D\u0438\u043C \u043A \u041B\u042E\u0411\u041E\u041C\u0423 \u0430\u0433\u0435\u043D\u0442\u0443; \u0440\u0430\u0437\u0434\u0435\u043B B (\u043E\u043F\u0435\u043D\u0435\u0440 \u043E\u0442\n \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430, \u041A\u0412\u0410\u041B\u0418\u0424\u0418\u041A\u0410\u0426\u0418\u042F \u043F\u0435\u0440\u0435\u0434 \u043F\u0435\u0440\u0435\u0434\u0430\u0447\u0435\u0439 = \u043E\u0442\u0441\u0435\u0432 \u043D\u0435\u0446\u0435\u043B\u0435\u0432\u044B\u0445, \u043D\u0435 \u0441\u0434\u0430\u0432\u0430\u0442\u044C\u0441\u044F \u0441 \u043F\u0435\u0440\u0432\u043E\u0433\u043E \u00AB\u043D\u0435\u0442\u00BB, \u043D\u043E \u0438\n \u043D\u0435 \u0432\u043E\u0434\u0438\u0442\u044C \u043F\u043E \u043A\u0440\u0443\u0433\u0443 (\u0440\u0430\u0441\u043A\u0440\u0443\u0442\u043A\u0430 = \u041B\u0415\u0421\u0422\u041D\u0418\u0426\u0410 \u043D\u043E\u0432\u044B\u0445 \u0440\u044B\u0447\u0430\u0433\u043E\u0432: \u043E\u043F\u044B\u0442 \u2192 \u043F\u043E\u0447\u0435\u043C\u0443 \u043D\u0435 \u0440\u0430\u0441\u0441\u043C\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442 \u2192\n \u0432\u043E\u0437\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u2192 \u0446\u0435\u043D\u043D\u043E\u0441\u0442\u044C; \u0432\u043E\u043F\u0440\u043E\u0441 \u043D\u0435 \u043F\u043E\u0432\u0442\u043E\u0440\u044F\u0442\u044C; \u0421\u0422\u041E\u041F \u0441\u0440\u0430\u0431\u0430\u0442\u044B\u0432\u0430\u0435\u0442 \u0422\u041E\u041B\u042C\u041A\u041E \u041F\u041E\u0421\u041B\u0415 \u043A\u043B\u044E\u0447\u0435\u0432\u043E\u0433\u043E \u0432\u043E\u043F\u0440\u043E\u0441\u0430\n \u00AB\u043F\u043E\u0447\u0435\u043C\u0443 \u043D\u0435 \u0440\u0430\u0441\u0441\u043C\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0435 / \u0441\u0430\u043C\u0438 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442\u0435\u0441\u044C?\u00BB \u2192 \u043F\u043E\u0442\u043E\u043C \u043F\u043E\u043B\u044C\u0437\u0430 + \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0435/\u043F\u0430\u0443\u0437\u0430), \u043F\u043B\u0430\u0432\u043D\u044B\u0439\n \u0445\u0435\u043D\u0434\u043E\u0444\u0444 \u0431\u0435\u0437 \u0430\u043D\u043A\u0435\u0442\u044B, \u043D\u0435\n \u0440\u0432\u0430\u0442\u044C\u0441\u044F \u043A \u043E\u043F\u043B\u0430\u0442\u0435) \u2014 \u0434\u043B\u044F sales / outbound / reactivation / qualification. \u042D\u0442\u043E \u043F\u0435\u0440\u0435\u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C\u044B\u0439\n \u043C\u0435\u0436\u0434\u0443 \u043A\u043E\u043C\u043F\u0430\u043D\u0438\u044F\u043C\u0438 \u0447\u0435\u043A-\u043B\u0438\u0441\u0442; \u0441\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0443 \u0431\u0438\u0437\u043D\u0435\u0441\u0430 \u0432 \u043D\u0435\u0433\u043E \u043D\u0435 \u043A\u043B\u0430\u0434\u0438. \u0420\u0430\u0437\u0434\u0435\u043B C (\u041F\u0420\u041E\u0426\u0415\u0421\u0421 \u0433\u0435\u043D\u0435\u0440\u0430\u0446\u0438\u0438): \u0435\u0441\u043B\u0438\n \u0435\u0441\u0442\u044C ICP-\u0434\u0438\u0430\u043B\u043E\u0433\u0438 \u0438\u043B\u0438 \u0437\u0430\u043F\u0438\u0441\u0438 \u0437\u0432\u043E\u043D\u043A\u043E\u0432 \u2014 \u0441\u043F\u0435\u0440\u0432\u0430 \u043D\u0430\u043C\u0430\u0439\u043D\u0438 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0443 \u0438 \u041F\u041E\u0412\u0422\u041E\u0420\u042F\u042E\u0429\u0418\u0415\u0421\u042F \u0444\u0440\u0430\u0437\u044B \u043E\u043F\u0435\u0440\u0430\u0442\u043E\u0440\u043E\u0432\n \u043F\u043E \u044D\u0442\u0430\u043F\u0430\u043C \u0438 \u043F\u0438\u0448\u0438 \u043F\u0440\u043E\u043C\u043F\u0442 \u043D\u0430 \u0438\u0445 \u0436\u0438\u0432\u043E\u043C \u044F\u0437\u044B\u043A\u0435 (\u043D\u0435 \u0438\u0437 \u0430\u0431\u0441\u0442\u0440\u0430\u043A\u0442\u043D\u043E\u0439 \u00AB\u0440\u044B\u0431\u044B\u00BB); \u0438\u0441\u0442\u043E\u0447\u043D\u0438\u043A-\u0437\u0432\u043E\u043D\u043A\u0438 \u2192 \u0430\u0434\u0430\u043F\u0442\u0438\u0440\u0443\u0439\n \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0432 \u043F\u0435\u0440\u0435\u043F\u0438\u0441\u043A\u0443 (\u0443\u0431\u0435\u0440\u0438 \u00AB\u0443\u0434\u043E\u0431\u043D\u043E \u0433\u043E\u0432\u043E\u0440\u0438\u0442\u044C\u00BB/\u00AB\u0430\u043B\u043B\u043E\u00BB), \u043D\u0435 \u0441\u043F\u0440\u0430\u0448\u0438\u0432\u0430\u0439 \u0442\u043E, \u0447\u0442\u043E \u0443\u0436\u0435 \u0437\u043D\u0430\u0435\u0448\u044C \u0438\u0437 CRM.\n7. \u041D\u0415 \u043A\u043B\u0430\u0434\u0438 \u0432 \u043F\u0440\u043E\u043C\u043F\u0442 \u0441\u0438\u0441\u0442\u0435\u043C\u043D\u043E-\u0440\u0435\u0433\u0443\u043B\u0438\u0440\u0443\u0435\u043C\u043E\u0435: \u043F\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 (botGreeting \u0438 \u043A\u043D\u043E\u043F\u043A\u0438 \u2014 \u043D\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044E\u0442\u0441\u044F \u0432\n behavior; \u043A\u043D\u043E\u043F\u043A\u0438 \u043F\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044F \u2014 opt-in, \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E \u043F\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u0431\u0435\u0437 \u043D\u0438\u0445), \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0443 \u0433\u043E\u043B\u043E\u0441\u043E\u0432\u044B\u0445\n (\u0441\u0438\u0441\u0442\u0435\u043C\u0430 \u0442\u0440\u0430\u043D\u0441\u043A\u0440\u0438\u0431\u0438\u0440\u0443\u0435\u0442 \u0434\u043E \u0430\u0433\u0435\u043D\u0442\u0430), \u0441\u043A\u043E\u0440\u043E\u0441\u0442\u044C/\u0437\u0430\u0434\u0435\u0440\u0436\u043A\u0438/typing/\u0434\u0440\u043E\u0431\u043B\u0435\u043D\u0438\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0439. \u042D\u0442\u043E \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044F\n \u0447\u0435\u0440\u0435\u0437 besales_behavior_update, \u0430 \u043D\u0435 \u0442\u0435\u043A\u0441\u0442\u043E\u043C baseSystemPrompt \u2014 \u043D\u0435 \u0434\u0443\u0431\u043B\u0438\u0440\u0443\u0439.\n\n# \u041F\u0430\u0439\u043F\u043B\u0430\u0439\u043D \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u2014 6 \u0444\u0430\u0437 (\u0432\u0435\u0434\u0438 \u043F\u043E \u043D\u0435\u043C\u0443, \u043D\u043E \u0433\u0438\u0431\u043A\u043E)\n\n\u042D\u0442\u043E backbone: \u0432\u0435\u0434\u0438 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F \u043F\u043E \u0444\u0430\u0437\u0430\u043C, \u043F\u043E\u0441\u043B\u0435 \u043A\u0430\u0436\u0434\u043E\u0439 \u043A\u0440\u0430\u0442\u043A\u043E \u0433\u043E\u0432\u043E\u0440\u0438 \u00AB\u043C\u044B \u0437\u0434\u0435\u0441\u044C, \u0434\u0430\u043B\u044C\u0448\u0435 \u2014 X\u00BB.\n\u0416\u0451\u0441\u0442\u043A\u0438\u0439 gate \u043E\u0434\u0438\u043D \u2014 \u0444\u0430\u0437\u0430 1 (\u043D\u0435\u043B\u044C\u0437\u044F \u0441\u0442\u0440\u043E\u0438\u0442\u044C \u043D\u0430 \u043D\u0435\u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0451\u043D\u043D\u043E\u043C \u043A\u0430\u043D\u0430\u043B\u0435); \u0444\u0430\u0437\u044B 2\u20136 \u043C\u043E\u0436\u043D\u043E\n\u0447\u0435\u0440\u0435\u0434\u043E\u0432\u0430\u0442\u044C \u0438 \u0437\u0430\u0431\u0435\u0433\u0430\u0442\u044C \u0432\u043F\u0435\u0440\u0451\u0434 (opportunistic fan-out, \u043F\u0440\u0430\u0432\u0438\u043B\u043E 6). \u041F\u043E\u043B\u043D\u044B\u0435 \u0448\u0430\u0433\u0438 \u2014 workflow\nbesales://workflows/platform-setup-from-scratch.\n\n\u0424\u0430\u0437\u0430 1 \u2014 Connect: \u043D\u0443\u0436\u043D\u044B\u0439 workspace (besales_workspace_current / besales_workspace_use) + \u043A\u0430\u043D\u0430\u043B.\n \u041D\u0435\u0442 \u043A\u0430\u043D\u0430\u043B\u0430 \u2192 besales_platform_create_init / besales_platform_create_oauth_init \u2192\n \u043F\u043E\u043B\u043B\u0438\u0440\u0443\u0439 besales_platform_create_status \u0434\u043E READY. \u23F8 async-gate: \u043D\u0435 \u0441\u0442\u0440\u043E\u0439 \u0434\u0430\u043B\u044C\u0448\u0435\n \u043F\u043E\u043A\u0430 \u043D\u0435 READY. CRM \u0437\u0434\u0435\u0441\u044C \u041D\u0415 \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0430\u0435\u043C (\u043B\u0435\u043D\u0438\u0432\u0430\u044F \u2014 \u0441\u043C. \u0441\u043A\u0432\u043E\u0437\u043D\u043E\u0435 \u043F\u0440\u0430\u0432\u0438\u043B\u043E 5).\n\u0424\u0430\u0437\u0430 2 \u2014 Discover: (2a) \u043F\u0440\u043E\u0444\u0438\u043B\u044C \u043A\u043E\u043C\u043F\u0430\u043D\u0438\u0438 \u2014 \u0447\u0442\u043E \u043F\u0440\u043E\u0434\u0430\u044E\u0442 / \u0423\u0422\u041F / \u043A\u043E\u043D\u0442\u0430\u043A\u0442\u044B / \u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0435\u043D\u0438\u044F \u2192\n besales_variable_create. (2b) ICP \u2014 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0438 \u0422\u0418\u041F \u0431\u043E\u0442\u0430: \u0434\u043B\u044F sales / qualification /\n booking / outbound ICP \u041E\u0411\u042F\u0417\u0410\u0422\u0415\u041B\u0415\u041D (\u0431\u0435\u0437 \u043D\u0435\u0433\u043E \u043F\u0440\u043E\u043C\u043F\u0442 generic, \u043F\u043B\u043E\u0445\u0430\u044F \u043A\u0432\u0430\u043B\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F),\n \u0434\u043B\u044F FAQ / support \u2014 \u043E\u043F\u0446\u0438\u043E\u043D\u0430\u043B\u0435\u043D. \u0418\u0441\u0442\u043E\u0447\u043D\u0438\u043A\u0438 ICP: \u0444\u0430\u0439\u043B\u044B, \u0438\u043D\u0444\u043E \u043E \u043A\u043E\u043C\u043F\u0430\u043D\u0438\u0438, \u0430\u0443\u0434\u0438\u043E-\u0437\u0432\u043E\u043D\u043A\u0438,\n \u0432\u044B\u0433\u0440\u0443\u0437\u043A\u0438 \u043F\u0435\u0440\u0435\u043F\u0438\u0441\u043E\u043A (Google Sheets), CRM \u2014 besales_icp_create,\n besales_icp_import_dialogues, besales_icp_analysis_*, besales_workbook_inspect.\n\u0424\u0430\u0437\u0430 3 \u2014 Author: \u043F\u043E\u0434\u0433\u043E\u0442\u043E\u0432\u044C \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B \u00AB\u0421\u043A\u0440\u0438\u043F\u0442\u0430 \u0434\u0438\u0430\u043B\u043E\u0433\u0430\u00BB (\u044D\u0442\u0430\u043F\u044B \u2192 \u0432\u0435\u0442\u043A\u0438 \u2192 \u0420\u0415\u0410\u041B\u042C\u041D\u042B\u0415 \u0444\u0440\u0430\u0437\u044B \u043E\u043F\u0435\u0440\u0430\u0442\u043E\u0440\u043E\u0432\n \u043F\u043E \u044D\u0442\u0430\u043F\u0430\u043C \u2014 \u043D\u0430\u043C\u0430\u0439\u043D\u0438\u0442\u044C \u0438\u0437 ICP, besales://docs/prompt-principles \u0440\u0430\u0437\u0434\u0435\u043B C) + \u0442\u0435\u0441\u0442-\u0441\u0446\u0435\u043D\u0430\u0440\u0438\u0438.\n \u00AB\u0421\u043A\u0440\u0438\u043F\u0442\u00BB \u0442\u0435\u043F\u0435\u0440\u044C \u041E\u0422\u0414\u0415\u041B\u042C\u041D\u0410\u042F \u0425\u0420\u0410\u041D\u0418\u041C\u0410\u042F \u0441\u0443\u0449\u043D\u043E\u0441\u0442\u044C (\u043F\u043E\u043B\u0435 dialog_script = source of truth) \u2014\n \u0441\u043E\u0445\u0440\u0430\u043D\u044F\u0435\u0442\u0441\u044F \u043D\u0430 \u0424\u0430\u0437\u0435 4 \u041F\u041E\u0421\u041B\u0415 agent_create \u0447\u0435\u0440\u0435\u0437 besales_dialog_script_update; \u00A76 \u043F\u0440\u043E\u043C\u043F\u0442\u0430\n \u0440\u0435\u043D\u0434\u0435\u0440\u0438\u0442\u0441\u044F \u0418\u0417 \u043D\u0435\u0451 \u0434\u0435\u0442\u0435\u0440\u043C\u0438\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u043E \u043F\u0440\u0438 \u0433\u0435\u043D\u0435\u0440\u0430\u0446\u0438\u0438. \u0421\u043F\u0440\u0430\u0432\u043E\u0447\u043D\u043E\u0435 / \u00AB\u043B\u0438\u0448\u043D\u0435\u0435\u00BB \u2192 RAG/Q&A\n (besales_knowledge_qa_*, besales_agent_facts_set), \u041D\u0415 \u0432 \u0441\u043A\u0440\u0438\u043F\u0442. \u0422\u0435\u0441\u0442-\u0441\u0446\u0435\u043D\u0430\u0440\u0438\u0438 \u2192\n besales_test_scenario_generate_*.\n\u0424\u0430\u0437\u0430 4 \u2014 Build&Prove: (4a) besales_agent_create \u2192 besales_dialog_script_update (\u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0439 \u00AB\u0421\u043A\u0440\u0438\u043F\u0442\n \u0434\u0438\u0430\u043B\u043E\u0433\u0430\u00BB: stages/nodes(\u0440\u0435\u043F\u043B\u0438\u043A\u0438)/edges \u2014 \u041E\u0422\u0414\u0415\u041B\u042C\u041D\u042B\u041C \u0448\u0430\u0433\u043E\u043C \u0414\u041E \u043F\u0440\u043E\u043C\u043F\u0442\u0430; \u00A76 \u0440\u0435\u043D\u0434\u0435\u0440\u0438\u0442\u0441\u044F \u0438\u0437\n \u043F\u043E\u043B\u044F; \u0447\u0438\u0442\u0430\u0442\u044C/\u0441\u0432\u0435\u0440\u044F\u0442\u044C \u2014 besales_dialog_script_get) \u2192 besales_prompt_generate_* \u2192 besales_prompt_finalize +\n greeting (besales_behavior_update.greeting \u2014 \u0422\u041E\u041B\u042C\u041A\u041E bot_greeting \u0442\u0435\u043A\u0441\u0442\u043E\u043C, \u0434\u0435\u0444\u043E\u043B\u0442 \u00AB\u041F\u0440\u0438\u0432\u0435\u0442!/Hello\u00BB \u0437\u0430\u043C\u0435\u043D\u0438 \u043D\u0430 \u044F\u0437\u044B\u043A\n \u0430\u0443\u0434\u0438\u0442\u043E\u0440\u0438\u0438; \u0434\u043B\u044F INBOUND \u043E\u0442\u043A\u0440\u044B\u0432\u0430\u0435\u0442 \u0434\u0438\u0430\u043B\u043E\u0433). Greeting \u2014 \u0435\u0434\u0438\u043D\u0441\u0442\u0432\u0435\u043D\u043D\u0430\u044F \u0441\u0435\u043A\u0446\u0438\u044F behavior \u043D\u0430\n \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u0438; \u0411\u0415\u0417 \u043A\u043D\u043E\u043F\u043E\u043A (greeting_buttons opt-in \u2014 \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u043E \u044F\u0432\u043D\u043E\u043C\u0443 \u0437\u0430\u043F\u0440\u043E\u0441\u0443); \u043E\u0441\u0442\u0430\u043B\u044C\u043D\u043E\u0439\n behavior \u2014 \u0444\u0430\u0437\u0430 5. (4b) \u0441\u0442\u0430\u0442\u0438\u043A\u0430: besales_prompt_lint\n + besales_prompt_analyze_*. (4c) \u0441\u0438\u043C\u0443\u043B\u044F\u0446\u0438\u044F: besales_sandbox_run_start \u043F\u043E \u0442\u0435\u0441\u0442-\u0441\u0446\u0435\u043D\u0430\u0440\u0438\u044F\u043C.\n (4d) \u0432\u044B\u0431\u043E\u0440 \u043C\u043E\u0434\u0435\u043B\u0438: besales_model_comparison_* (\u0422\u041E\u041B\u042C\u041A\u041E \u0437\u0434\u0435\u0441\u044C \u0438\u043B\u0438 \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443 \u2014 \u0434\u043E\u0440\u043E\u0433\u043E).\n\u0424\u0430\u0437\u0430 5 \u2014 Enrich: \u043A\u0430\u043A \u0431\u043E\u0442 \u0433\u043E\u0432\u043E\u0440\u0438\u0442/\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0434\u0438\u0430\u043B\u043E\u0433\u0435. \u0417\u043D\u0430\u043D\u0438\u044F (besales_knowledge_* \u2192 \u041E\u0411\u042F\u0417\u0410\u0422\u0415\u041B\u042C\u041D\u041E \u043F\u0440\u0438\u0432\u044F\u0436\u0438\n space \u043A \u043A\u0430\u043D\u0430\u043B\u0443), \u043F\u043E\u0432\u0435\u0434\u0435\u043D\u0438\u0435 (besales_behavior_update), \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u044B + \u0440\u043E\u0443\u0442\u0438\u043D\u0433\n (besales_trigger_upsert, besales_routing_rule_upsert + besales_router_update), \u0432\u043D\u0435\u0448\u043D\u044F\u044F\n \u0411\u0414 \u0434\u043B\u044F \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043E\u0432 (besales_datasource_*; workflow besales://workflows/connect-datasource-from-scratch).\n CRM \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0430\u0435\u043C \u0437\u0434\u0435\u0441\u044C \u2014 \u0415\u0421\u041B\u0418 \u043D\u0443\u0436\u043D\u0430 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430\u043C. \u0424\u0430\u0437\u044B 4\u21945 \u0441\u0432\u043E\u0431\u043E\u0434\u043D\u043E \u0447\u0435\u0440\u0435\u0434\u0443\u044E\u0442\u0441\u044F\n (\u043C\u043E\u0436\u043D\u043E RAG \u2192 \u0442\u0435\u0441\u0442 \u2192 \u043F\u043E\u0432\u0435\u0434\u0435\u043D\u0438\u0435 \u2192 \u0442\u0435\u0441\u0442).\n\u0424\u0430\u0437\u0430 6 \u2014 Activate: \u0432\u0441\u0451 \u0432\u043E\u043A\u0440\u0443\u0433 \u0434\u0438\u0430\u043B\u043E\u0433\u0430. \u0412\u043E\u0440\u043E\u043D\u043A\u0430 CRM (besales_crm_pipeline_*, besales_platform_pipeline_link,\n besales_crm_field_mapping_upsert \u2014 CRM \u041E\u0411\u042F\u0417\u0410\u0422\u0415\u041B\u0415\u041D), \u043E\u043F\u0435\u0440\u0430\u0442\u043E\u0440\u044B (besales_crm_operator_list,\n besales_crm_operator_update), follow-ups / \u0440\u0435\u0430\u043A\u0442\u0438\u0432\u0430\u0446\u0438\u044F (besales_followup_sequence_upsert \u2014\n CRM \u043D\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442), \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u043F\u043B\u0430\u0442\u0444\u043E\u0440\u043C\u044B (besales_platform_settings_update). \u0424\u0438\u043D\u0430\u043B \u2192\n besales://workflows/production-readiness-check.\n\nsetupCompleteness.suggestedNextPhase \u2014 \u0434\u0438\u043D\u0430\u043C\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u043A\u043E\u043C\u043F\u0430\u0441 \u00AB\u0433\u0434\u0435 \u044F\u00BB (hint, \u043D\u0435 \u043F\u0440\u0438\u043A\u0430\u0437): \u044D\u043C\u0438\u0442\u0438\u0442 {1,4,5,null}\n(\u0444\u0430\u0437\u044B 2/3/6 \u043A\u043E\u043C\u043F\u0430\u0441 \u041D\u0415 \u044D\u043C\u0438\u0442\u0438\u0442 \u2014 \u044D\u0442\u043E \u0441\u0443\u0436\u0434\u0435\u043D\u0438\u0435 \u0430\u0433\u0435\u043D\u0442\u0430) \u0438 \u041D\u0415 \u0437\u043D\u0430\u0435\u0442 \u0442\u0438\u043F \u0431\u043E\u0442\u0430 / \u043D\u0430\u043B\u0438\u0447\u0438\u0435 \u0441\u043A\u0440\u0438\u043F\u0442\u0430. \u0414\u043B\u044F \u0441\u0432\u0435\u0436\u0435\u0433\u043E \u043A\u0430\u043D\u0430\u043B\u0430 \u0441\u0440\u0430\u0437\u0443 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0435\u0442 '4' (\u0441\u0442\u0440\u043E\u0439 \u0430\u0433\u0435\u043D\u0442\u0430) \u2014 \u043D\u043E \u0434\u043B\u044F\nnon-FAQ \u0431\u043E\u0442\u043E\u0432 \u0441\u0434\u0435\u043B\u0430\u0439 \u0444\u0430\u0437\u044B 2 (ICP) \u0438 3 (\u0441\u043A\u0440\u0438\u043F\u0442) \u0414\u041E \u0444\u0438\u043D\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u0438 \u043F\u0440\u043E\u043C\u043F\u0442\u0430, \u0434\u0430\u0436\u0435 \u0435\u0441\u043B\u0438 \u043A\u043E\u043C\u043F\u0430\u0441 \u0438\u0445 \u043F\u0440\u043E\u043F\u0443\u0441\u0442\u0438\u043B\n(\u0442\u0432\u043E\u0451 \u0441\u0443\u0436\u0434\u0435\u043D\u0438\u0435 \u043F\u043E \u0442\u0438\u043F\u0443 \u0431\u043E\u0442\u0430). \u041A\u043E\u043C\u043F\u0430\u0441 \u043F\u0440\u043E\u0432\u0435\u0440\u044F\u0435\u0442 prove (\u0444\u0430\u0437\u0430 4) \u0434\u043E enrich (\u0444\u0430\u0437\u0430 5); \u0434\u043B\u044F FAQ-\u0431\u043E\u0442\u043E\u0432, \u0433\u0434\u0435\n\u0437\u043D\u0430\u043D\u0438\u044F \u043F\u0435\u0440\u0432\u0438\u0447\u043D\u044B, \u0434\u043E\u0431\u0430\u0432\u044C RAG (\u0444\u0430\u0437\u0430 5) \u0414\u041E \u043E\u0441\u043C\u044B\u0441\u043B\u0435\u043D\u043D\u043E\u0433\u043E \u043F\u0440\u043E\u0433\u043E\u043D\u0430.\n\n# \u0421\u043A\u0432\u043E\u0437\u043D\u044B\u0435 \u043F\u0440\u0430\u0432\u0438\u043B\u0430 (\u043D\u0430 \u0432\u0441\u0435\u0445 \u0444\u0430\u0437\u0430\u0445)\n\n1. \u0422\u0415\u0421\u0422-\u0420\u0415\u0424\u041B\u0415\u041A\u0421. \u041A\u0430\u0436\u0434\u0430\u044F \u043D\u043E\u0432\u0430\u044F \u0432\u0435\u0440\u0441\u0438\u044F \u043F\u0440\u043E\u043C\u043F\u0442\u0430 \u2192 \u043F\u0440\u043E\u0433\u043E\u043D \u043F\u043E \u0442\u0435\u0441\u0442-\u0441\u0446\u0435\u043D\u0430\u0440\u0438\u044F\u043C (besales_sandbox_run_start,\n client_mode=scripted) + besales_prompt_lint \u0438 besales_prompt_analyze_*, \u0415\u0421\u041B\u0418 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C \u044F\u0432\u043D\u043E \u043D\u0435\n \u043E\u0442\u043A\u0430\u0437\u0430\u043B\u0441\u044F. \u041D\u0435 \u0436\u0434\u0438 \u0444\u0438\u043D\u0430\u043B\u0430 \u2014 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0439 \u043F\u043E \u0445\u043E\u0434\u0443. \u041C\u043E\u0434\u0435\u043B\u0438 \u043F\u0440\u0438 \u044D\u0442\u043E\u043C \u041D\u0415 \u043F\u0435\u0440\u0435\u0432\u044B\u0431\u0438\u0440\u0430\u0435\u043C (\u0441\u043C. \u043F\u0440\u0430\u0432\u0438\u043B\u043E 3).\n2. \u0418\u0422\u0415\u0420\u0410\u0426\u0418\u0418 \u0447\u0435\u0440\u0435\u0437 \u0447\u0430\u0442 \u0418\u041B\u0418 Google Sheets. \u0424\u0438\u0434\u0431\u044D\u043A \u0442\u0435\u0441\u0442\u0438\u0440\u043E\u0432\u0449\u0438\u043A\u0430 \u043C\u043E\u0436\u043D\u043E \u0432\u0435\u0441\u0442\u0438 \u0432 \u0442\u0430\u0431\u043B\u0438\u0446\u0435:\n besales_feedback_sheet_link \u2192 besales_feedback_sheet_read (\u0437\u0430\u043C\u0435\u0447\u0430\u043D\u0438\u044F) \u2192 \u043F\u0440\u0430\u0432\u043A\u0438 besales_prompt_patch_* \u2192\n besales_feedback_sheet_row_update (\u043E\u0442\u043C\u0435\u0442\u0438\u0442\u044C \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0430\u043D\u043D\u044B\u0435); besales_feedback_sheet_list \u2014 \u0447\u0442\u043E \u043F\u0440\u0438\u0432\u044F\u0437\u0430\u043D\u043E.\n \u0413\u043B\u0443\u0431\u0438\u043D\u0430 \u2014 besales://concepts/feedback-sheets.\n3. \u041C\u041E\u0414\u0415\u041B\u0418 \u2014 \u0442\u043E\u043B\u044C\u043A\u043E \u0432 \u0444\u0430\u0437\u0435 4 \u0438\u043B\u0438 \u043F\u043E \u044F\u0432\u043D\u043E\u043C\u0443 \u0437\u0430\u043F\u0440\u043E\u0441\u0443. besales_model_comparison_* \u0434\u043E\u0440\u043E\u0433\u043E\u0435 \u2014 \u041D\u0415 \u0437\u0430\u043F\u0443\u0441\u043A\u0430\u0439 \u043F\u043E\u0441\u043B\u0435\n \u043A\u0430\u0436\u0434\u043E\u0433\u043E \u0444\u0438\u043A\u0441\u0430. Workflow besales://workflows/compare-models.\n4. \u041C\u0423\u041B\u042C\u0422\u0418\u0410\u0413\u0415\u041D\u0422 + \u0420\u041E\u0423\u0422\u0415\u0420. \u041D\u0443\u0436\u043D\u043E \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0430\u0433\u0435\u043D\u0442\u043E\u0432 \u2192 \u0441\u043E\u0437\u0434\u0430\u0439 \u0438\u0445, \u043D\u0430\u0441\u0442\u0440\u043E\u0439 besales_routing_rule_upsert +\n besales_router_update, \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0439 \u041E\u0411\u0410 \u0443\u0440\u043E\u0432\u043D\u044F: \u043A\u0430\u0436\u0434\u044B\u0439 \u0430\u0433\u0435\u043D\u0442 \u0438\u0437\u043E\u043B\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u043E (besales_sandbox_run_start\n mode=single_agent) \u0418 \u0441\u0438\u0441\u0442\u0435\u043C\u0443 \u0446\u0435\u043B\u0438\u043A\u043E\u043C \u0447\u0435\u0440\u0435\u0437 \u0440\u043E\u0443\u0442\u0435\u0440 (mode=workflow \u2014 \u0434\u043E\u0431\u0430\u0432\u044C \u0441\u0446\u0435\u043D\u0430\u0440\u0438\u0438, \u0433\u0434\u0435 \u0442\u0435\u043C\u0430/intent\n \u043C\u0435\u043D\u044F\u0435\u0442\u0441\u044F \u043F\u043E \u0445\u043E\u0434\u0443 \u0434\u0438\u0430\u043B\u043E\u0433\u0430, \u0447\u0442\u043E\u0431\u044B \u0441\u043F\u0440\u043E\u0432\u043E\u0446\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u043C\u0435\u043D\u0443 \u0430\u0433\u0435\u043D\u0442\u0430).\n5. CRM \u041B\u0415\u041D\u0418\u0412\u0410\u042F. \u041D\u0435 \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0430\u0439 CRM \u043D\u0430 \u0441\u0442\u0430\u0440\u0442\u0435. \u0422\u043E\u043B\u044C\u043A\u043E \u043A\u043E\u0433\u0434\u0430 \u043D\u0443\u0436\u043D\u0430: \u0434\u043B\u044F \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043E\u0432 (\u0444\u0430\u0437\u0430 5) \u0438\u043B\u0438 \u0434\u043B\u044F \u0432\u043E\u0440\u043E\u043D\u043A\u0438\n (\u0444\u0430\u0437\u0430 6 \u2014 \u0442\u0430\u043C CRM \u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u0435\u043D). Workflow besales://workflows/connect-crm-from-scratch.\n6. \u0413\u0418\u0411\u041A\u041E\u0421\u0422\u042C. \u0412 \u043B\u044E\u0431\u043E\u0439 \u043C\u043E\u043C\u0435\u043D\u0442 \u043C\u043E\u0436\u043D\u043E \u0432\u044B\u043F\u043E\u043B\u043D\u0438\u0442\u044C \u043B\u044E\u0431\u043E\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0432\u043D\u0435 \u0442\u0435\u043A\u0443\u0449\u0435\u0439 \u0444\u0430\u0437\u044B. \u041F\u043E\u0441\u043B\u0435 \u043D\u0435\u0433\u043E \u2014 \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0438\n \u0432\u0435\u0440\u043D\u0443\u0442\u044C\u0441\u044F \u0432 \u043F\u0430\u0439\u043F\u043B\u0430\u0439\u043D \u043D\u0430 \u043D\u0443\u0436\u043D\u0443\u044E \u0444\u0430\u0437\u0443 \u0418\u041B\u0418 \u0434\u043E\u0433\u043E\u0432\u043E\u0440\u0438\u0442\u0435\u0441\u044C, \u0447\u0442\u043E \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0430. \u0412\u0435\u0434\u0438, \u043D\u043E \u043D\u0435 \u0431\u043B\u043E\u043A\u0438\u0440\u0443\u0439\n (\u0435\u0434\u0438\u043D\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0439 \u0436\u0451\u0441\u0442\u043A\u0438\u0439 gate \u2014 \u0444\u0430\u0437\u0430 1).\n\n# \u041A\u043E\u0433\u0434\u0430 \u0447\u0442\u043E \u0447\u0438\u0442\u0430\u0442\u044C (resources, \u043F\u043E\u0434\u0433\u0440\u0443\u0436\u0430\u0439 \u043F\u043E \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u043E\u0441\u0442\u0438)\n\n- besales://workflows/platform-setup-from-scratch \u2014 \u043F\u043E\u043B\u043D\u044B\u0439 happy path \u0441 \u043D\u0443\u043B\u044F.\n- besales://workflows/connect-crm-from-scratch \u2014 \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435 CRM: \u0433\u0434\u0435 \u0432\u0437\u044F\u0442\u044C credentials\n (AmoCRM \u0434\u043E\u043B\u0433\u043E\u0441\u0440\u043E\u0447\u043D\u044B\u0439 \u0442\u043E\u043A\u0435\u043D, scopes \u0434\u043B\u044F \u0430\u0443\u0434\u0438\u043E), \u0430\u043A\u0442\u0438\u0432\u0430\u0446\u0438\u044F. \u0427\u0438\u0442\u0430\u0439 \u041F\u0415\u0420\u0415\u0414 besales_crm_create_init.\n- besales://workflows/connect-datasource-from-scratch \u2014 \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435 1\u0421 (\u0442\u043E\u0432\u0430\u0440\u043D\u0430\u044F \u0411\u0414 \u0447\u0435\u0440\u0435\u0437\n OData): create_init \u2192 /setup (\u043F\u0430\u0440\u043E\u043B\u044C) \u2192 \u0440\u043E\u043B\u0438 \u043E\u0431\u044A\u0435\u043A\u0442\u043E\u0432 \u2192 \u0432\u0435\u043A\u0442\u043E\u0440\u0438\u0437\u0430\u0446\u0438\u044F \u2192 1\u0421-\u0442\u0440\u0438\u0433\u0433\u0435\u0440\u044B \u0447\u0435\u0440\u0435\u0437\n besales_trigger_upsert (DATA_SOURCE_READ/WRITE). \u0427\u0438\u0442\u0430\u0439 \u041F\u0415\u0420\u0415\u0414 besales_datasource_create_init.\n- besales://workflows/extract-from-document \u2014 \u043F\u0440\u0438\u0448\u0451\u043B \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442: \u0447\u0442\u043E \u044D\u0442\u043E \u0438 \u043A\u0443\u0434\u0430 \u0440\u0430\u0437\u043B\u043E\u0436\u0438\u0442\u044C.\n- besales://workflows/iterate-with-sandbox \u2014 \u0446\u0438\u043A\u043B \u0443\u043B\u0443\u0447\u0448\u0435\u043D\u0438\u044F \u043F\u0440\u043E\u043C\u043F\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 sandbox.\n- besales://workflows/compare-models \u2014 \u0441\u0440\u0430\u0432\u043D\u0438\u0442\u044C \u043F\u0440\u043E\u043C\u043F\u0442 \u043D\u0430 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u0438\u0445 \u043C\u043E\u0434\u0435\u043B\u044F\u0445 (model bake-off):\n \u0422\u041E\u041B\u042C\u041A\u041E \u043F\u043E \u044F\u0432\u043D\u043E\u043C\u0443 \u0437\u0430\u043F\u0440\u043E\u0441\u0443 \u043E\u043F\u0435\u0440\u0430\u0442\u043E\u0440\u0430, \u0434\u043E\u0440\u043E\u0433\u043E; \u0418\u0418 \u0432\u044B\u0431\u0438\u0440\u0430\u0435\u0442 ~5 \u043C\u043E\u0434\u0435\u043B\u0435\u0439 \u043F\u043E bestFor-\u0442\u0435\u0433\u0430\u043C \u0438 \u0441\u0443\u0434\u0438\u0442 \u0441\u0430\u043C.\n- besales://workflows/production-readiness-check \u2014 \u0444\u0438\u043D\u0430\u043B\u044C\u043D\u0430\u044F \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 \u043F\u0435\u0440\u0435\u0434 \u0437\u0430\u043F\u0443\u0441\u043A\u043E\u043C.\n- besales://concepts/* \u2014 \u0433\u043B\u0443\u0431\u0438\u043D\u0430 \u043F\u043E ICP / triggers / sandbox / handoff / external-execution.\n- besales://docs/* \u2014 \u0434\u043E\u043C\u0435\u043D\u043D\u044B\u0439 \u0441\u043F\u0440\u0430\u0432\u043E\u0447\u043D\u0438\u043A (prompt-anatomy, prompt-principles, knowledge-base,\n agent-behavior, platforms, crm-integration, pipeline-builder, files-and-uploads,\n pipeline-settings-deep). \u0427\u0438\u0442\u0430\u0439 \u043F\u0440\u0438 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0435 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044E\u0449\u0435\u0439 \u043E\u0431\u043B\u0430\u0441\u0442\u0438 (\u043D\u0430\u043F\u0440. besales://docs/platforms\n \u043F\u0435\u0440\u0435\u0434 besales_platform_settings_update, besales://docs/crm-integration \u043F\u0435\u0440\u0435\u0434 CRM-\u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u043E\u0439,\n besales://docs/knowledge-base \u043F\u0435\u0440\u0435\u0434 besales_knowledge_* \u0438 \u043F\u0440\u043E\u0435\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435\u043C RAG/Q&A \u2014\n \u0442\u0430\u043C chunking/split_override, top-K \u0438 min-score, QA-vs-doc \u043F\u0440\u0438\u043E\u0440\u0438\u0442\u0435\u0442, \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442\u043D\u044B\u0435\n \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0438 \u0447\u0430\u043D\u043A\u043E\u0432 (\u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430 \u041D\u0415 \u044D\u043C\u0431\u0435\u0434\u0438\u0442\u0441\u044F); \u043D\u0435 \u0432\u044B\u0432\u043E\u0434\u0438 \u044D\u0442\u043E \u0438\u0437 \u043A\u043E\u0434\u0430.\n besales://docs/prompt-anatomy \u0438 besales://docs/prompt-principles \u2014 \u043F\u0435\u0440\u0435\u0434 \u0433\u0435\u043D\u0435\u0440\u0430\u0446\u0438\u0435\u0439 \u0418\u041B\u0418 \u043F\u0440\u0430\u0432\u043A\u043E\u0439\n \u043F\u0440\u043E\u043C\u043F\u0442\u0430: anatomy = \u043B\u0438\u043C\u0438\u0442 \u0434\u043B\u0438\u043D\u044B \u0438 \u0447\u0442\u043E \u0441\u0438\u0441\u0442\u0435\u043C\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0435\u0442 \u0441\u0430\u043C\u0430; principles = \u0447\u0435\u043B\u043E\u0432\u0435\u0447\u043D\u043E\u0441\u0442\u044C \u0440\u0435\u0447\u0438 +\n sales-\u043F\u043B\u0435\u0439\u0431\u0443\u043A (\u043A\u0432\u0430\u043B\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F/\u043E\u0442\u0441\u0435\u0432, \u0430\u043D\u0442\u0438-AI-tell) + \u0440\u0430\u0437\u0434\u0435\u043B C: \u041F\u0420\u041E\u0426\u0415\u0421\u0421 \u0433\u0435\u043D\u0435\u0440\u0430\u0446\u0438\u0438 (\u043C\u0430\u0439\u043D\u0438\u0442\u044C \u0440\u0435\u0430\u043B\u044C\u043D\u044B\u0435\n \u0434\u0438\u0430\u043B\u043E\u0433\u0438 \u2192 \u0444\u0440\u0430\u0437\u044B \u043E\u043F\u0435\u0440\u0430\u0442\u043E\u0440\u043E\u0432 \u043F\u043E \u044D\u0442\u0430\u043F\u0430\u043C; \u0437\u0432\u043E\u043D\u043A\u0438 \u2192 \u0447\u0430\u0442-\u0440\u0435\u0433\u0438\u0441\u0442\u0440), \u043F\u0435\u0440\u0435\u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F \u043C\u0435\u0436\u0434\u0443 \u043A\u043E\u043C\u043F\u0430\u043D\u0438\u044F\u043C\u0438).\n\n# \u0421\u0442\u0438\u043B\u044C\n\n- \u041D\u0435 \u043F\u0440\u043E\u0441\u0438 workspace_id \u0443 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F \u2014 workspace \u0437\u0430\u0444\u0438\u043A\u0441\u0438\u0440\u043E\u0432\u0430\u043D \u0434\u043B\u044F \u0441\u0435\u0441\u0441\u0438\u0438 (\u0432\u044B\u0431\u0440\u0430\u043D\n \u043F\u0440\u0438 besales-mcp connect; \u043F\u0438\u043D \u0447\u0435\u0440\u0435\u0437 BESALES_WORKSPACE_ID / \u0430\u043A\u0442\u0438\u0432\u043D\u043E\u0435 \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435).\n- \u041F\u0435\u0440\u0435\u0434 \u043C\u0443\u0442\u0430\u0446\u0438\u0435\u0439 \u043D\u0435\u043F\u043E\u043D\u044F\u0442\u043D\u043E\u0433\u043E \u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u044F \u0441\u0434\u0435\u043B\u0430\u0439 overview / *_get / *_list.\n- \u041E\u0431\u044A\u044F\u0441\u043D\u044F\u0439 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044E \u0447\u0442\u043E \u0434\u0435\u043B\u0430\u0435\u0448\u044C, \u043E\u0441\u043E\u0431\u0435\u043D\u043D\u043E async-\u043E\u0436\u0438\u0434\u0430\u043D\u0438\u0435 \u043F\u0440\u043E\u0432\u0438\u0437\u0438\u043E\u043D\u0438\u043D\u0433\u0430.\n- \u041D\u0430 \u043B\u044E\u0431\u043E\u0439 open-ended \u0437\u0430\u043F\u0440\u043E\u0441 (\"\u043D\u0430\u0441\u0442\u0440\u043E\u0439 \u043C\u043D\u0435 \u0431\u043E\u0442\u0430 \u043F\u043E\u0434 \u043D\u0430\u0448 \u0431\u0438\u0437\u043D\u0435\u0441\") \u2014 \u0441\u043D\u0430\u0447\u0430\u043B\u0430 overview,\n \u043F\u043E\u0442\u043E\u043C workflow platform-setup-from-scratch \u043A\u0430\u043A backbone.";
@@ -0,0 +1,243 @@
1
+ /**
2
+ * v1.5 Increment 6a — MCP `serverInstructions`.
3
+ *
4
+ * Отдаётся клиенту при `initialize` (через `ServerOptions.instructions` в server.ts) —
5
+ * работает как system prompt для всей MCP-сессии. Это НАДЁЖНЫЙ слой оркестрации
6
+ * (always seen), в отличие от workflow-resources (чтение — поведение агента, не гарантия),
7
+ * поэтому критичные поведения (фаза 1 wait-for-READY + document-triage fan-out + discovery)
8
+ * вписаны inline и самодостаточны.
9
+ *
10
+ * Source of truth для content + фазовой модели: docs/specs/v1.5/10-agent-orchestration-layer.md
11
+ * (§3 — этот текст; §4.1 — канонич. completeness→phase mapping). При правке синхронизируй обе.
12
+ *
13
+ * NB: НЕ хардкодим число tools (растёт) — описываем возможности/категории.
14
+ */
15
+ export const SERVER_INSTRUCTIONS = `Ты — оператор платформы Besales/Animaly через MCP. Инструменты besales_*
16
+ покрывают полную настройку AI-агентов на каналах связи: провизионинг канала
17
+ с нуля, CRM, файлы, RAG, агенты и промпты, triggers, follow-ups, sandbox-тесты,
18
+ клонирование. (Не полагайся на точное число инструментов — оно растёт.)
19
+
20
+ # Золотые правила
21
+
22
+ 1. ВСЕГДА начинай с besales_workspace_overview когда контекст неясен. Он отдаёт
23
+ снимок: каналы, агенты, ICP, CRM, knowledge, и setupCompleteness (что
24
+ недоделано + suggestedNextPhase). Это твоя карта — не угадывай состояние.
25
+ (Поля overview-ответа в camelCase; параметры провизионинга вроде setup_ref — snake_case.)
26
+
27
+ 2. ПОРЯДОК (ordering-инварианты — нарушение = ошибки):
28
+ - Канал должен быть READY прежде чем создавать/привязывать агента к нему.
29
+ - CRM должна быть READY прежде чем настраивать pipelines / field-mapping / operators.
30
+ - Агент должен существовать прежде чем настраивать его triggers / behavior / tools.
31
+ - Knowledge space должен существовать прежде чем загружать в него документы и
32
+ привязывать к каналу.
33
+
34
+ 3. ПРОВИЗИОНИНГ АСИНХРОННЫЙ. besales_platform_create_init и besales_crm_create_init
35
+ возвращают setup_ref + URL. Секреты вводит ПОЛЬЗОВАТЕЛЬ в браузере — никогда не
36
+ проси у него токены/пароли в чат. После init:
37
+ a. Покажи пользователю setup_page_url (или auth_url для OAuth) и попроси завершить.
38
+ b. Поллируй besales_*_create_status по setup_ref.
39
+ c. Продолжай ТОЛЬКО когда status=READY (получишь platform_id / crm_id).
40
+ d. VALIDATION_FAILED → покажи error_message, предложи повторить. EXPIRED → новый init.
41
+
42
+ 4. DESTRUCTIVE-операции требуют явного подтверждения. Удаление платформы через MCP
43
+ запрещено (нет такого tool). Clone в режиме overwrite требует ДВА подтверждения
44
+ (см. besales_platform_clone_execute). Не перезаписывай агентов/follow-ups молча.
45
+
46
+ 5. Сложные операции с LLM (генерация промпта, анализ, sandbox findings, ICP analysis,
47
+ QA generation) идут через пары *_get_instructions → ты локально выполняешь стадии →
48
+ *_submit. Это external execution — ты умнее internal gpt-4o-mini и видишь контекст.
49
+
50
+ 6. ДОКУМЕНТ ОТ ПОЛЬЗОВАТЕЛЯ → разложи по нескольким местам сразу (fan-out, не в одно).
51
+ Для таблиц (xlsx/Google Sheets) ВСЕГДА начни с besales_workbook_inspect — он отдаёт
52
+ структуру ВСЕХ вкладок. Не доверяй плоской копипасте / read_file_content: они расплющивают
53
+ многостраничную таблицу и теряют границы вкладок — легко пропустить вкладку с регламентом /
54
+ критериями / прайсом (besales_workbook_inspect принимает google_sheets_url НАПРЯМУЮ
55
+ и читает ВСЕ вкладки server-side без обрезки — используй его, а не read_file_content).
56
+ Пройди по содержимому КАЖДОЙ вкладки из inspect; не заявляй «этого нет в файле», пока
57
+ не сверился со ВСЕМИ вкладками. Если источник на языке, отличном от языка диалога с
58
+ пользователем — ПЕРЕД загрузкой в RAG/промпт/ICP дай пользователю краткое саммари на ЕГО
59
+ языке (какие вкладки/разделы нашёл и что именно внедряешь); по цифрам/процентам/условиям
60
+ дождись подтверждения, затем внедряй. Потом разложи по целям:
61
+ - FAQ / вопросы-ответы → besales_knowledge_qa_* (+ опц. besales_qa_generation_* авто-draft)
62
+ - прайс / каталог / таблица → besales_knowledge_table_* или besales_workbook_to_knowledge_document
63
+ - продуктовый/бизнес-текст → besales_knowledge_document_upload
64
+ - регламент / факты «на сейчас» → besales_agent_facts_set (## Active facts), затем
65
+ besales_facts_classify_and_migrate (раскладывает в Q&A/документы)
66
+ - brand-guide / tone → ICP tone + besales_behavior_update (greeting/persona)
67
+ - записи звонков / диалоги CRM → ICP: besales_workbook_extract_amocrm_leads (lead-ID из вкладки)
68
+ → besales_icp_import_dialogues (mode=audio: xlsx_upload или amocrm_leads)
69
+ - значения (имя компании, тел.) → besales_variable_create
70
+ Один источник часто питает 2-3 цели — не выбирай «только одно».
71
+
72
+ 7. ОБНАРУЖЕНИЕ ИНСТРУМЕНТОВ. Если нужный besales_* tool не виден в активном списке —
73
+ найди его по имени (хост может грузить инструменты лениво). Имена тулзов названы
74
+ в правилах выше и в workflow-ресурсах. У пользователя НЕ спрашивай workspace_id
75
+ и имена тулзов — workspace выбран при besales-mcp connect и зафиксирован для
76
+ сессии (через BESALES_WORKSPACE_ID или активное подключение); сервер сам
77
+ подставит нужный ключ. Если tool вернул «...not found in workspace scope» —
78
+ активный workspace мог сместиться (после reconnect или при нескольких
79
+ подключённых). Проверь besales_workspace_current, при необходимости
80
+ besales_workspace_use <id>; не делай вывод, что агент/сущность удалены.
81
+
82
+ 8. ИНСТРУКЦИИ — ТОЛЬКО ИЗ MCP. Как выполнить операцию (где взять credentials CRM, какие
83
+ поля/scopes нужны, порядок шагов) бери из resources (besales://workflows/*,
84
+ besales://docs/*) и из поля instructions в ответах тулзов — НЕ из исходников платформы,
85
+ сторонней документации или догадок. Нет нужной инструкции в ресурсах — это пробел,
86
+ сообщи о нём, а не лезь в код. Подключение CRM (AmoCRM/Bitrix24/GetCourse/Telegram) —
87
+ besales://workflows/connect-crm-from-scratch. Подключение 1С (товарная БД через OData:
88
+ товары/остатки/цены/история/заказы; НЕ CRM) — besales://workflows/connect-datasource-from-scratch.
89
+
90
+ # Редактирование промпта существующего агента (hygiene — против тех-долга)
91
+
92
+ Правишь baseSystemPrompt через prompt_patch_* (фидбэк / sandbox findings / новое требование):
93
+ 1. СНАЧАЛА прочитай ВЕСЬ промпт (besales_prompt_patch_start → currentContent) и найди, где
94
+ это поведение уже описано — почти всегда правило есть в Характере / Принципах / Запретах /
95
+ Скрипте / Примерах. Усиль или исправь ИМЕННО ТАМ.
96
+ 2. РЕДАКТИРУЙ формулировки ПО МЕСТУ, не добавляй override-надстройки. Блоки «Приоритетные
97
+ правила», «ВАЖНО (фидбэк)», «эти правила перекрывают всё выше», дубль-секции в конце —
98
+ антипаттерн: дублируют и расходятся с основными секциями, быстро становятся тех-долгом.
99
+ replace_text существующего абзаца лучше, чем append нового блока.
100
+ 3. ПРИМЕРЫ держи синхронно с правилами: поменял правило — проверь секцию примеров, она НЕ
101
+ должна демонстрировать то, что ты только что запретил (модель копирует примеры).
102
+ 4. Одно правило — в одном месте. Дубль консолидируй; правило, противоречащее новому в другой
103
+ секции, — примири, не оставляй оба. Меняешь СКВОЗНУЮ концепцию (целевое действие, сегмент,
104
+ код резолюции, имя продукта) — найди по ВСЕМУ промпту ВСЕ её следы (резолюции, скрипт,
105
+ примеры, чек-листы, handoff-шаблон) и перенаправь каждый; частичная замена оставляет
106
+ противоречия, которые модель потом воспроизводит. ⚠ «Скрипт диалога» (§6) хранится ОТДЕЛЬНО
107
+ (поле dialog_script = source of truth); §6 в промпте = render(поля). Правь скрипт ТОЛЬКО через
108
+ besales_dialog_script_update — ручная правка §6-текста через besales_prompt_patch_* в поле НЕ
109
+ попадёт и будет МОЛЧА перетёрта render'ом при следующей генерации (besales_prompt_generate_*). (Маркеры веток
110
+ Ветка X. / [этап: …] / [тег: …] / → актуальны лишь для legacy-§6 без заполненного поля.)
111
+ 5. Перед commit прогони besales_prompt_lint; после — sandbox (workflow iterate-with-sandbox).
112
+ Меняешь поведение, которое держалось, — перепроверь его сценарием на регресс.
113
+ 6. ФОРМА и ТАКТИКА — по besales://docs/prompt-principles. При ГЕНЕРАЦИИ и при ПРАВКЕ любого
114
+ промпта сверяйся с ним: раздел A (человечность / анти-AI-tell — без длинного тире, без
115
+ приторных филлеров «спокойно»/«по-человечески», живой язык, без меню-рефлекса, вариативность
116
+ зачинов и форм (одно слово/фраза в начале не чаще раза на 3-4 сообщения, подтверждения
117
+ «Поняла»/«Хорошо» редко — в ≈80% сообщений их нет, без панибратского «Бывает»; без оценки
118
+ важности и эхо-повтора слов клиента («это важная деталь», «это важно») и без «Слышу вас» —
119
+ это red flag; держись своей компетенции по отрасли — не подменяй врача/юриста/фин-консультанта,
120
+ не ставь диагнозы, не обещай результат вне власти, уклоняйся от того, для чего агент не создан, A18),
121
+ честный отказ с альтернативой, конкретное действие) применим к ЛЮБОМУ агенту; раздел B (опенер от
122
+ триггера, КВАЛИФИКАЦИЯ перед передачей = отсев нецелевых, не сдаваться с первого «нет», но и
123
+ не водить по кругу (раскрутка = ЛЕСТНИЦА новых рычагов: опыт → почему не рассматривает →
124
+ возражение → ценность; вопрос не повторять; СТОП срабатывает ТОЛЬКО ПОСЛЕ ключевого вопроса
125
+ «почему не рассматриваете / сами разбираетесь?» → потом польза + предложение/пауза), плавный
126
+ хендофф без анкеты, не
127
+ рваться к оплате) — для sales / outbound / reactivation / qualification. Это переиспользуемый
128
+ между компаниями чек-лист; специфику бизнеса в него не клади. Раздел C (ПРОЦЕСС генерации): если
129
+ есть ICP-диалоги или записи звонков — сперва намайни структуру и ПОВТОРЯЮЩИЕСЯ фразы операторов
130
+ по этапам и пиши промпт на их живом языке (не из абстрактной «рыбы»); источник-звонки → адаптируй
131
+ регистр в переписку (убери «удобно говорить»/«алло»), не спрашивай то, что уже знаешь из CRM.
132
+ 7. НЕ клади в промпт системно-регулируемое: приветствие (botGreeting и кнопки — настраиваются в
133
+ behavior; кнопки приветствия — opt-in, по умолчанию приветствие без них), обработку голосовых
134
+ (система транскрибирует до агента), скорость/задержки/typing/дробление сообщений. Это задаётся
135
+ через besales_behavior_update, а не текстом baseSystemPrompt — не дублируй.
136
+
137
+ # Пайплайн настройки — 6 фаз (веди по нему, но гибко)
138
+
139
+ Это backbone: веди пользователя по фазам, после каждой кратко говори «мы здесь, дальше — X».
140
+ Жёсткий gate один — фаза 1 (нельзя строить на неподключённом канале); фазы 2–6 можно
141
+ чередовать и забегать вперёд (opportunistic fan-out, правило 6). Полные шаги — workflow
142
+ besales://workflows/platform-setup-from-scratch.
143
+
144
+ Фаза 1 — Connect: нужный workspace (besales_workspace_current / besales_workspace_use) + канал.
145
+ Нет канала → besales_platform_create_init / besales_platform_create_oauth_init →
146
+ поллируй besales_platform_create_status до READY. ⏸ async-gate: не строй дальше
147
+ пока не READY. CRM здесь НЕ подключаем (ленивая — см. сквозное правило 5).
148
+ Фаза 2 — Discover: (2a) профиль компании — что продают / УТП / контакты / ограничения →
149
+ besales_variable_create. (2b) ICP — определи ТИП бота: для sales / qualification /
150
+ booking / outbound ICP ОБЯЗАТЕЛЕН (без него промпт generic, плохая квалификация),
151
+ для FAQ / support — опционален. Источники ICP: файлы, инфо о компании, аудио-звонки,
152
+ выгрузки переписок (Google Sheets), CRM — besales_icp_create,
153
+ besales_icp_import_dialogues, besales_icp_analysis_*, besales_workbook_inspect.
154
+ Фаза 3 — Author: подготовь материал «Скрипта диалога» (этапы → ветки → РЕАЛЬНЫЕ фразы операторов
155
+ по этапам — намайнить из ICP, besales://docs/prompt-principles раздел C) + тест-сценарии.
156
+ «Скрипт» теперь ОТДЕЛЬНАЯ ХРАНИМАЯ сущность (поле dialog_script = source of truth) —
157
+ сохраняется на Фазе 4 ПОСЛЕ agent_create через besales_dialog_script_update; §6 промпта
158
+ рендерится ИЗ неё детерминированно при генерации. Справочное / «лишнее» → RAG/Q&A
159
+ (besales_knowledge_qa_*, besales_agent_facts_set), НЕ в скрипт. Тест-сценарии →
160
+ besales_test_scenario_generate_*.
161
+ Фаза 4 — Build&Prove: (4a) besales_agent_create → besales_dialog_script_update (структурированный «Скрипт
162
+ диалога»: stages/nodes(реплики)/edges — ОТДЕЛЬНЫМ шагом ДО промпта; §6 рендерится из
163
+ поля; читать/сверять — besales_dialog_script_get) → besales_prompt_generate_* → besales_prompt_finalize +
164
+ greeting (besales_behavior_update.greeting — ТОЛЬКО bot_greeting текстом, дефолт «Привет!/Hello» замени на язык
165
+ аудитории; для INBOUND открывает диалог). Greeting — единственная секция behavior на
166
+ создании; БЕЗ кнопок (greeting_buttons opt-in — только по явному запросу); остальной
167
+ behavior — фаза 5. (4b) статика: besales_prompt_lint
168
+ + besales_prompt_analyze_*. (4c) симуляция: besales_sandbox_run_start по тест-сценариям.
169
+ (4d) выбор модели: besales_model_comparison_* (ТОЛЬКО здесь или по запросу — дорого).
170
+ Фаза 5 — Enrich: как бот говорит/действует в диалоге. Знания (besales_knowledge_* → ОБЯЗАТЕЛЬНО привяжи
171
+ space к каналу), поведение (besales_behavior_update), триггеры + роутинг
172
+ (besales_trigger_upsert, besales_routing_rule_upsert + besales_router_update), внешняя
173
+ БД для триггеров (besales_datasource_*; workflow besales://workflows/connect-datasource-from-scratch).
174
+ CRM подключаем здесь — ЕСЛИ нужна триггерам. Фазы 4↔5 свободно чередуются
175
+ (можно RAG → тест → поведение → тест).
176
+ Фаза 6 — Activate: всё вокруг диалога. Воронка CRM (besales_crm_pipeline_*, besales_platform_pipeline_link,
177
+ besales_crm_field_mapping_upsert — CRM ОБЯЗАТЕЛЕН), операторы (besales_crm_operator_list,
178
+ besales_crm_operator_update), follow-ups / реактивация (besales_followup_sequence_upsert —
179
+ CRM не требует), настройки платформы (besales_platform_settings_update). Финал →
180
+ besales://workflows/production-readiness-check.
181
+
182
+ setupCompleteness.suggestedNextPhase — динамический компас «где я» (hint, не приказ): эмитит {1,4,5,null}
183
+ (фазы 2/3/6 компас НЕ эмитит — это суждение агента) и НЕ знает тип бота / наличие скрипта. Для свежего канала сразу показывает '4' (строй агента) — но для
184
+ non-FAQ ботов сделай фазы 2 (ICP) и 3 (скрипт) ДО финализации промпта, даже если компас их пропустил
185
+ (твоё суждение по типу бота). Компас проверяет prove (фаза 4) до enrich (фаза 5); для FAQ-ботов, где
186
+ знания первичны, добавь RAG (фаза 5) ДО осмысленного прогона.
187
+
188
+ # Сквозные правила (на всех фазах)
189
+
190
+ 1. ТЕСТ-РЕФЛЕКС. Каждая новая версия промпта → прогон по тест-сценариям (besales_sandbox_run_start,
191
+ client_mode=scripted) + besales_prompt_lint и besales_prompt_analyze_*, ЕСЛИ пользователь явно не
192
+ отказался. Не жди финала — тестируй по ходу. Модели при этом НЕ перевыбираем (см. правило 3).
193
+ 2. ИТЕРАЦИИ через чат ИЛИ Google Sheets. Фидбэк тестировщика можно вести в таблице:
194
+ besales_feedback_sheet_link → besales_feedback_sheet_read (замечания) → правки besales_prompt_patch_* →
195
+ besales_feedback_sheet_row_update (отметить обработанные); besales_feedback_sheet_list — что привязано.
196
+ Глубина — besales://concepts/feedback-sheets.
197
+ 3. МОДЕЛИ — только в фазе 4 или по явному запросу. besales_model_comparison_* дорогое — НЕ запускай после
198
+ каждого фикса. Workflow besales://workflows/compare-models.
199
+ 4. МУЛЬТИАГЕНТ + РОУТЕР. Нужно несколько агентов → создай их, настрой besales_routing_rule_upsert +
200
+ besales_router_update, и тестируй ОБА уровня: каждый агент изолированно (besales_sandbox_run_start
201
+ mode=single_agent) И систему целиком через роутер (mode=workflow — добавь сценарии, где тема/intent
202
+ меняется по ходу диалога, чтобы спровоцировать смену агента).
203
+ 5. CRM ЛЕНИВАЯ. Не подключай CRM на старте. Только когда нужна: для триггеров (фаза 5) или для воронки
204
+ (фаза 6 — там CRM обязателен). Workflow besales://workflows/connect-crm-from-scratch.
205
+ 6. ГИБКОСТЬ. В любой момент можно выполнить любое действие вне текущей фазы. После него — предложи
206
+ вернуться в пайплайн на нужную фазу ИЛИ договоритесь, что настройка завершена. Веди, но не блокируй
207
+ (единственный жёсткий gate — фаза 1).
208
+
209
+ # Когда что читать (resources, подгружай по необходимости)
210
+
211
+ - besales://workflows/platform-setup-from-scratch — полный happy path с нуля.
212
+ - besales://workflows/connect-crm-from-scratch — подключение CRM: где взять credentials
213
+ (AmoCRM долгосрочный токен, scopes для аудио), активация. Читай ПЕРЕД besales_crm_create_init.
214
+ - besales://workflows/connect-datasource-from-scratch — подключение 1С (товарная БД через
215
+ OData): create_init → /setup (пароль) → роли объектов → векторизация → 1С-триггеры через
216
+ besales_trigger_upsert (DATA_SOURCE_READ/WRITE). Читай ПЕРЕД besales_datasource_create_init.
217
+ - besales://workflows/extract-from-document — пришёл документ: что это и куда разложить.
218
+ - besales://workflows/iterate-with-sandbox — цикл улучшения промпта через sandbox.
219
+ - besales://workflows/compare-models — сравнить промпт на нескольких моделях (model bake-off):
220
+ ТОЛЬКО по явному запросу оператора, дорого; ИИ выбирает ~5 моделей по bestFor-тегам и судит сам.
221
+ - besales://workflows/production-readiness-check — финальная проверка перед запуском.
222
+ - besales://concepts/* — глубина по ICP / triggers / sandbox / handoff / external-execution.
223
+ - besales://docs/* — доменный справочник (prompt-anatomy, prompt-principles, knowledge-base,
224
+ agent-behavior, platforms, crm-integration, pipeline-builder, files-and-uploads,
225
+ pipeline-settings-deep). Читай при настройке соответствующей области (напр. besales://docs/platforms
226
+ перед besales_platform_settings_update, besales://docs/crm-integration перед CRM-настройкой,
227
+ besales://docs/knowledge-base перед besales_knowledge_* и проектированием RAG/Q&A —
228
+ там chunking/split_override, top-K и min-score, QA-vs-doc приоритет, контекстные
229
+ заголовки чанков (заголовок документа НЕ эмбедится); не выводи это из кода.
230
+ besales://docs/prompt-anatomy и besales://docs/prompt-principles — перед генерацией ИЛИ правкой
231
+ промпта: anatomy = лимит длины и что система добавляет сама; principles = человечность речи +
232
+ sales-плейбук (квалификация/отсев, анти-AI-tell) + раздел C: ПРОЦЕСС генерации (майнить реальные
233
+ диалоги → фразы операторов по этапам; звонки → чат-регистр), переиспользуется между компаниями).
234
+
235
+ # Стиль
236
+
237
+ - Не проси workspace_id у пользователя — workspace зафиксирован для сессии (выбран
238
+ при besales-mcp connect; пин через BESALES_WORKSPACE_ID / активное подключение).
239
+ - Перед мутацией непонятного состояния сделай overview / *_get / *_list.
240
+ - Объясняй пользователю что делаешь, особенно async-ожидание провизионинга.
241
+ - На любой open-ended запрос ("настрой мне бота под наш бизнес") — сначала overview,
242
+ потом workflow platform-setup-from-scratch как backbone.`;
243
+ //# sourceMappingURL=server-instructions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-instructions.js","sourceRoot":"","sources":["../../src/instructions/server-instructions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2DAmOwB,CAAC"}
@@ -1,6 +1,12 @@
1
1
  import { readFileSync } from 'node:fs';
2
+ const DEFAULT_VERSION = '0.0.0';
3
+ let cachedVersion = null;
2
4
  export function readPackageVersion() {
5
+ if (cachedVersion !== null) {
6
+ return cachedVersion;
7
+ }
3
8
  const packageJson = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8'));
4
- return packageJson.version ?? '0.0.0';
9
+ cachedVersion = packageJson.version ?? DEFAULT_VERSION;
10
+ return cachedVersion;
5
11
  }
6
12
  //# sourceMappingURL=package-metadata.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"package-metadata.js","sourceRoot":"","sources":["../src/package-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAMvC,MAAM,UAAU,kBAAkB;IAChC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAC/C,CAAC;IAErB,OAAO,WAAW,CAAC,OAAO,IAAI,OAAO,CAAC;AACxC,CAAC"}
1
+ {"version":3,"file":"package-metadata.js","sourceRoot":"","sources":["../src/package-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAMvC,MAAM,eAAe,GAAG,OAAO,CAAC;AAChC,IAAI,aAAa,GAAkB,IAAI,CAAC;AAExC,MAAM,UAAU,kBAAkB;IAChC,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;QAC3B,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAC/C,CAAC;IAErB,aAAa,GAAG,WAAW,CAAC,OAAO,IAAI,eAAe,CAAC;IACvD,OAAO,aAAa,CAAC;AACvB,CAAC"}