@agentteams/cli 0.1.85 → 0.1.87

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 (47) hide show
  1. package/.eslintcache +1 -1
  2. package/dist/api/comment.d.ts +23 -8
  3. package/dist/api/comment.d.ts.map +1 -1
  4. package/dist/api/comment.js +19 -8
  5. package/dist/api/comment.js.map +1 -1
  6. package/dist/api/document.d.ts +16 -2
  7. package/dist/api/document.d.ts.map +1 -1
  8. package/dist/api/document.js +7 -2
  9. package/dist/api/document.js.map +1 -1
  10. package/dist/commands/comment.d.ts.map +1 -1
  11. package/dist/commands/comment.js +32 -6
  12. package/dist/commands/comment.js.map +1 -1
  13. package/dist/commands/convention.d.ts.map +1 -1
  14. package/dist/commands/convention.js +60 -5
  15. package/dist/commands/convention.js.map +1 -1
  16. package/dist/commands/document.d.ts +3 -0
  17. package/dist/commands/document.d.ts.map +1 -1
  18. package/dist/commands/document.js +25 -2
  19. package/dist/commands/document.js.map +1 -1
  20. package/dist/index.js +11 -2
  21. package/dist/index.js.map +1 -1
  22. package/dist/mcp/context.d.ts +9 -0
  23. package/dist/mcp/context.d.ts.map +1 -1
  24. package/dist/mcp/context.js +5 -1
  25. package/dist/mcp/context.js.map +1 -1
  26. package/dist/mcp/guides.d.ts +50 -0
  27. package/dist/mcp/guides.d.ts.map +1 -0
  28. package/dist/mcp/guides.js +142 -0
  29. package/dist/mcp/guides.js.map +1 -0
  30. package/dist/mcp/resources.d.ts +4 -3
  31. package/dist/mcp/resources.d.ts.map +1 -1
  32. package/dist/mcp/resources.js +1 -1
  33. package/dist/mcp/resources.js.map +1 -1
  34. package/dist/mcp/server.d.ts.map +1 -1
  35. package/dist/mcp/server.js +20 -5
  36. package/dist/mcp/server.js.map +1 -1
  37. package/dist/mcp/tools.d.ts.map +1 -1
  38. package/dist/mcp/tools.js +3 -1
  39. package/dist/mcp/tools.js.map +1 -1
  40. package/dist/mcp/writeTools.d.ts +25 -0
  41. package/dist/mcp/writeTools.d.ts.map +1 -0
  42. package/dist/mcp/writeTools.js +391 -0
  43. package/dist/mcp/writeTools.js.map +1 -0
  44. package/dist/utils/errors.d.ts.map +1 -1
  45. package/dist/utils/errors.js +20 -1
  46. package/dist/utils/errors.js.map +1 -1
  47. package/package.json +2 -2
@@ -1,6 +1,7 @@
1
1
  import { getPersonalTokenClient } from '../auth/personalTokenClient.js';
2
2
  import { getConfigurationNotFoundMessage, loadConfigWithCredential, loadProjectConfig } from '../utils/config.js';
3
3
  import { buildAuthHeaders, buildConfigOverrides, resolveApiContext } from '../utils/apiContext.js';
4
+ import { findGuideProjectRoot } from './guides.js';
4
5
  /**
5
6
  * MCP clients substitute `${VAR}` references in their server config before
6
7
  * spawning the process. When that substitution does not happen (unsupported
@@ -63,13 +64,16 @@ export async function resolveMcpToolContext(options = {}) {
63
64
  bindingSource,
64
65
  });
65
66
  const { apiUrl, headers } = resolveApiContext(config);
67
+ // Only a checkout that names this very project may serve local guides.
68
+ const projectRoot = localProjectId === config.projectId ? (findGuideProjectRoot() ?? undefined) : undefined;
66
69
  if (config.credentialSource !== 'personal-token') {
67
- return { apiUrl, projectId: config.projectId, headers };
70
+ return { apiUrl, projectId: config.projectId, projectRoot, headers };
68
71
  }
69
72
  const client = getPersonalTokenClient(apiUrl);
70
73
  return {
71
74
  apiUrl,
72
75
  projectId: config.projectId,
76
+ projectRoot,
73
77
  headers,
74
78
  resolveHeaders: async () => {
75
79
  const accessToken = await client.getAccessToken();
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/mcp/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,+BAA+B,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAClH,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAuBnG;;;;;;GAMG;AACH,MAAM,sBAAsB,GAAG,aAAa,CAAC;AAE7C,MAAM,oBAAoB,GAA2B;IACnD,MAAM,EAAE,oBAAoB;IAC5B,SAAS,EAAE,uBAAuB;IAClC,MAAM,EAAE,oBAAoB;CAC7B,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,+BAA+B,CAAC;AAGtE,MAAM,UAAU,uBAAuB,CAAC,KAIvC;IACC,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,aAAa,KAAK,UAAU,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS;QAAE,OAAO;IAC7G,IAAI,KAAK,CAAC,cAAc,KAAK,KAAK,CAAC,cAAc;QAAE,OAAO;IAE1D,MAAM,IAAI,KAAK,CACb,0DAA0D,KAAK,CAAC,cAAc,mBAAmB,KAAK,CAAC,cAAc,IAAI;QACvH,oIAAoI,CACvI,CAAC;AACJ,CAAC;AAED,SAAS,8BAA8B,CAAC,WAAmC;IACzE,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;SAC1C,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACzD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IAEvB,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEnC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzF,MAAM,IAAI,KAAK,CACb,oDAAoD,KAAK,IAAI;QAC3D,gFAAgF;QAChF,2GAA2G,CAC9G,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,UAAmC,EAAE;IAC/E,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7E,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,+BAA+B,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,8BAA8B,CAAC;QAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC,CAAC;IAEH,MAAM,aAAa,GACjB,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ;QACnC,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,KAAK,SAAS;YACjD,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,MAAM,CAAC;IACf,MAAM,cAAc,GAAG,iBAAiB,EAAE,EAAE,SAAS,CAAC;IACtD,uBAAuB,CAAC;QACtB,cAAc,EAAE,OAAO,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS;QAC/E,cAAc,EAAE,MAAM,CAAC,SAAS;QAChC,aAAa;KACd,CAAC,CAAC;IAEH,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAEtD,IAAI,MAAM,CAAC,gBAAgB,KAAK,gBAAgB,EAAE,CAAC;QACjD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC;IAC1D,CAAC;IAED,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC9C,OAAO;QACL,MAAM;QACN,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,OAAO;QACP,cAAc,EAAE,KAAK,IAAI,EAAE;YACzB,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC;YAClD,0EAA0E;YAC1E,yEAAyE;YACzE,4EAA4E;YAC5E,+BAA+B;YAC/B,IAAI,CAAC,WAAW;gBAAE,OAAO,OAAO,CAAC;YACjC,OAAO,EAAE,GAAG,gBAAgB,CAAC,WAAW,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;QAClF,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/mcp/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /** Record kinds whose guide can be handed to an agent. These are the write-enabled kinds. */
2
+ export declare const GUIDE_RECORD_KINDS: readonly ["document", "comment"];
3
+ export type GuideRecordKind = (typeof GUIDE_RECORD_KINDS)[number];
4
+ export interface LoadedGuide {
5
+ recordKind: GuideRecordKind;
6
+ fileName: string;
7
+ /** Where the body came from: the local sync, or a live server read. */
8
+ source: 'local' | 'server';
9
+ /** Absolute path of the local file the body came from. Absent for a server read. */
10
+ filePath?: string;
11
+ content: string;
12
+ /**
13
+ * The hash to send as `guideHash`. `null` when the local manifest predates
14
+ * per-guide hashes — callers must then omit `guideHash` rather than invent one.
15
+ */
16
+ guideHash: string | null;
17
+ }
18
+ /** Project root = the directory containing `.agentteams/config.json`. */
19
+ export declare function findGuideProjectRoot(cwd?: string): string | null;
20
+ /**
21
+ * Load one platform guide from a local project copy.
22
+ *
23
+ * Returns `null` when this session has no usable local copy — the caller then
24
+ * falls back to the server rather than failing, so a session bound to a project
25
+ * it does not sit in can still follow the guide-first contract.
26
+ */
27
+ export declare function loadLocalPlatformGuide(recordKind: GuideRecordKind, projectRoot: string | null): LoadedGuide | null;
28
+ /** Read one guide straight from the server, where body and hash always match. */
29
+ export declare function fetchPlatformGuide(recordKind: GuideRecordKind, apiUrl: string, headers: Record<string, string>): Promise<LoadedGuide>;
30
+ /**
31
+ * Resolve the guide an agent must follow before a write: local copy first,
32
+ * server otherwise.
33
+ *
34
+ * `projectRoot` is the root this MCP session is actually bound to. It is passed
35
+ * in (not discovered here) so a cwd that happens to sit in some *other* project
36
+ * cannot feed that project's stale hash into this project's write — which would
37
+ * produce a `GUIDE_OUTDATED` 409 whose documented fix (`convention download`)
38
+ * does not resolve it.
39
+ */
40
+ export declare function resolvePlatformGuide(recordKind: GuideRecordKind, options: {
41
+ projectRoot?: string | null;
42
+ apiUrl: string;
43
+ headers: Record<string, string>;
44
+ }): Promise<LoadedGuide>;
45
+ /**
46
+ * Human-readable note explaining why `guideHash` is absent, so an agent reading
47
+ * the tool output knows the freshness check is not being enforced for this call.
48
+ */
49
+ export declare function describeMissingGuideHash(guide: LoadedGuide): string | null;
50
+ //# sourceMappingURL=guides.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guides.d.ts","sourceRoot":"","sources":["../../src/mcp/guides.ts"],"names":[],"mappings":"AA6BA,6FAA6F;AAC7F,eAAO,MAAM,kBAAkB,kCAAmC,CAAC;AACnE,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAOlE,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,eAAe,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,uEAAuE;IACvE,MAAM,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC3B,oFAAoF;IACpF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAYD,yEAAyE;AACzE,wBAAgB,oBAAoB,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI,CAM/E;AA0BD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,WAAW,GAAG,IAAI,CAqBlH;AAED,iFAAiF;AACjF,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,eAAe,EAC3B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,OAAO,CAAC,WAAW,CAAC,CAkBtB;AAED;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,eAAe,EAC3B,OAAO,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GACxF,OAAO,CAAC,WAAW,CAAC,CAgBtB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAQ1E"}
@@ -0,0 +1,142 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { join, resolve } from 'node:path';
3
+ import { findProjectConfig } from '../utils/config.js';
4
+ import httpClient from '../utils/httpClient.js';
5
+ /**
6
+ * Platform-guide loader for the MCP write path.
7
+ *
8
+ * Guides are read from the local `.agentteams/platform/` copy when this session
9
+ * actually sits in the bound project: the write contract only needs the body
10
+ * plus the hash the server will compare against, and both are written by
11
+ * `agentteams convention download`.
12
+ *
13
+ * That local copy cannot be assumed, though. `context.ts` resolves credentials
14
+ * and `projectId` from CLI options and `AGENTTEAMS_*` env vars precisely because
15
+ * an externally spawned MCP server's cwd may sit outside the project — or inside
16
+ * a *different* one. So the local path is used only when the caller hands over a
17
+ * verified project root, and the server is the fallback: `GET /api/platform/guides`
18
+ * returns body and hash together, which is always a consistent pair.
19
+ *
20
+ * This module must not import the MCP SDK (see `test/mcp-boundary.test.ts`).
21
+ */
22
+ const CONVENTION_DIR = '.agentteams';
23
+ const PLATFORM_DIR = 'platform';
24
+ const MANIFEST_FILE = 'conventions.manifest.json';
25
+ const RESYNC_HINT = "Run 'agentteams convention download' and retry.";
26
+ /** Record kinds whose guide can be handed to an agent. These are the write-enabled kinds. */
27
+ export const GUIDE_RECORD_KINDS = ['document', 'comment'];
28
+ const GUIDE_FILE_NAMES = {
29
+ document: 'document-guide.md',
30
+ comment: 'comment-guide.md',
31
+ };
32
+ /** Project root = the directory containing `.agentteams/config.json`. */
33
+ export function findGuideProjectRoot(cwd = process.cwd()) {
34
+ const configPath = findProjectConfig(cwd);
35
+ if (!configPath) {
36
+ return null;
37
+ }
38
+ return resolve(configPath, '..', '..');
39
+ }
40
+ function readManifestHashes(projectRoot) {
41
+ const manifestPath = join(projectRoot, CONVENTION_DIR, MANIFEST_FILE);
42
+ if (!existsSync(manifestPath)) {
43
+ return null;
44
+ }
45
+ try {
46
+ const parsed = JSON.parse(readFileSync(manifestPath, 'utf-8'));
47
+ return parsed?.platformGuideHashes ?? null;
48
+ }
49
+ catch {
50
+ // A corrupt manifest is indistinguishable from a missing one for this purpose:
51
+ // both mean "the local hash is unknown", and both are fixed by re-syncing.
52
+ return null;
53
+ }
54
+ }
55
+ function resolveGuideFileName(recordKind) {
56
+ const fileName = GUIDE_FILE_NAMES[recordKind];
57
+ if (!fileName) {
58
+ throw new Error(`Unknown guide record kind: ${recordKind}. Supported: ${GUIDE_RECORD_KINDS.join(', ')}`);
59
+ }
60
+ return fileName;
61
+ }
62
+ /**
63
+ * Load one platform guide from a local project copy.
64
+ *
65
+ * Returns `null` when this session has no usable local copy — the caller then
66
+ * falls back to the server rather than failing, so a session bound to a project
67
+ * it does not sit in can still follow the guide-first contract.
68
+ */
69
+ export function loadLocalPlatformGuide(recordKind, projectRoot) {
70
+ const fileName = resolveGuideFileName(recordKind);
71
+ if (!projectRoot) {
72
+ return null;
73
+ }
74
+ const filePath = join(projectRoot, CONVENTION_DIR, PLATFORM_DIR, fileName);
75
+ if (!existsSync(filePath)) {
76
+ return null;
77
+ }
78
+ const hashes = readManifestHashes(projectRoot);
79
+ return {
80
+ recordKind,
81
+ fileName,
82
+ source: 'local',
83
+ filePath,
84
+ content: readFileSync(filePath, 'utf-8'),
85
+ guideHash: hashes?.[fileName] ?? null,
86
+ };
87
+ }
88
+ /** Read one guide straight from the server, where body and hash always match. */
89
+ export async function fetchPlatformGuide(recordKind, apiUrl, headers) {
90
+ const fileName = resolveGuideFileName(recordKind);
91
+ const normalizedApiUrl = apiUrl.endsWith('/') ? apiUrl.slice(0, -1) : apiUrl;
92
+ const response = await httpClient.get(`${normalizedApiUrl}/api/platform/guides`, { headers });
93
+ const guides = (response.data?.data ?? []);
94
+ const guide = Array.isArray(guides) ? guides.find((item) => item?.fileName === fileName) : undefined;
95
+ if (!guide || typeof guide.content !== 'string') {
96
+ throw new Error(`Platform guide ${fileName} is not published by ${normalizedApiUrl}.`);
97
+ }
98
+ return {
99
+ recordKind,
100
+ fileName,
101
+ source: 'server',
102
+ content: guide.content,
103
+ guideHash: typeof guide.hash === 'string' && guide.hash.length > 0 ? guide.hash : null,
104
+ };
105
+ }
106
+ /**
107
+ * Resolve the guide an agent must follow before a write: local copy first,
108
+ * server otherwise.
109
+ *
110
+ * `projectRoot` is the root this MCP session is actually bound to. It is passed
111
+ * in (not discovered here) so a cwd that happens to sit in some *other* project
112
+ * cannot feed that project's stale hash into this project's write — which would
113
+ * produce a `GUIDE_OUTDATED` 409 whose documented fix (`convention download`)
114
+ * does not resolve it.
115
+ */
116
+ export async function resolvePlatformGuide(recordKind, options) {
117
+ const local = loadLocalPlatformGuide(recordKind, options.projectRoot ?? null);
118
+ if (local) {
119
+ return local;
120
+ }
121
+ try {
122
+ return await fetchPlatformGuide(recordKind, options.apiUrl, options.headers);
123
+ }
124
+ catch (error) {
125
+ const reason = error instanceof Error ? error.message : String(error);
126
+ throw new Error(`Could not load the ${resolveGuideFileName(recordKind)} platform guide. ` +
127
+ `No local copy is available for this session, and reading it from the server failed: ${reason}. ` +
128
+ `Run 'agentteams convention download' in the project, or check the API connection.`);
129
+ }
130
+ }
131
+ /**
132
+ * Human-readable note explaining why `guideHash` is absent, so an agent reading
133
+ * the tool output knows the freshness check is not being enforced for this call.
134
+ */
135
+ export function describeMissingGuideHash(guide) {
136
+ if (guide.guideHash) {
137
+ return null;
138
+ }
139
+ return (`No recorded hash for ${guide.fileName} — this project's manifest predates per-guide hashes. ` +
140
+ `Writes will skip the guide freshness check. ${RESYNC_HINT}`);
141
+ }
142
+ //# sourceMappingURL=guides.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guides.js","sourceRoot":"","sources":["../../src/mcp/guides.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,10 @@
1
1
  import type { McpToolContext } from './context.js';
2
2
  /**
3
3
  * SDK-agnostic resource-template description. The handler receives the URI
4
- * template variables and returns the upstream payload verbatim; only the SDK
5
- * adapter (`server.ts`) may build `ResourceTemplate` instances or the
6
- * `contents` envelope.
4
+ * template variables and returns the matching tool payload; only the SDK adapter
5
+ * (`server.ts`) may build `ResourceTemplate` instances or the `contents`
6
+ * envelope. Entity-specific tool projections still apply, so document reads
7
+ * omit the derived editor-only `bodyTiptap` mirror.
7
8
  */
8
9
  export interface McpResourceSpec {
9
10
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../src/mcp/resources.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAGnD;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC3F;AAgCD,4FAA4F;AAC5F,wBAAgB,gBAAgB,IAAI,eAAe,EAAE,CA0BpD"}
1
+ {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../src/mcp/resources.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAGnD;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC3F;AAgCD,4FAA4F;AAC5F,wBAAgB,gBAAgB,IAAI,eAAe,EAAE,CA2BpD"}
@@ -35,7 +35,7 @@ export function getResourceSpecs() {
35
35
  name: 'agentteams-document',
36
36
  uriTemplate: 'agentteams://document/{id}',
37
37
  title: 'AgentTeams Document',
38
- description: 'Full document (body included) as JSON. Same payload as the agentteams_document_get tool.',
38
+ description: 'Full document Markdown body as JSON, without the derived editor-only bodyTiptap mirror. Same payload as the agentteams_document_get tool.',
39
39
  toolName: 'agentteams_document_get',
40
40
  }),
41
41
  createEntityResourceSpec({
@@ -1 +1 @@
1
- {"version":3,"file":"resources.js","sourceRoot":"","sources":["../../src/mcp/resources.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,YAAY,EAAoB,MAAM,YAAY,CAAC;AAgBzF,SAAS,YAAY,CAAC,IAAY;IAChC,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAC/D,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,mDAAmD,IAAI,EAAE,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,SAAS,wBAAwB,CAAC,OAMjC;IACC,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAChD,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,OAAO,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,2BAA2B,CAAC,OAAO,CAAC,CAAC;KAC9G,CAAC;AACJ,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,gBAAgB;IAC9B,OAAO;QACL,wBAAwB,CAAC;YACvB,IAAI,EAAE,iBAAiB;YACvB,WAAW,EAAE,wBAAwB;YACrC,KAAK,EAAE,iBAAiB;YACxB,WAAW,EACT,0HAA0H;YAC5H,QAAQ,EAAE,qBAAqB;SAChC,CAAC;QACF,wBAAwB,CAAC;YACvB,IAAI,EAAE,qBAAqB;YAC3B,WAAW,EAAE,4BAA4B;YACzC,KAAK,EAAE,qBAAqB;YAC5B,WAAW,EAAE,0FAA0F;YACvG,QAAQ,EAAE,yBAAyB;SACpC,CAAC;QACF,wBAAwB,CAAC;YACvB,IAAI,EAAE,uBAAuB;YAC7B,WAAW,EAAE,8BAA8B;YAC3C,KAAK,EAAE,uBAAuB;YAC9B,WAAW,EACT,yGAAyG;YAC3G,QAAQ,EAAE,2BAA2B;SACtC,CAAC;KACH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"resources.js","sourceRoot":"","sources":["../../src/mcp/resources.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,YAAY,EAAoB,MAAM,YAAY,CAAC;AAiBzF,SAAS,YAAY,CAAC,IAAY;IAChC,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAC/D,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,mDAAmD,IAAI,EAAE,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,SAAS,wBAAwB,CAAC,OAMjC;IACC,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAChD,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,OAAO,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,2BAA2B,CAAC,OAAO,CAAC,CAAC;KAC9G,CAAC;AACJ,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,gBAAgB;IAC9B,OAAO;QACL,wBAAwB,CAAC;YACvB,IAAI,EAAE,iBAAiB;YACvB,WAAW,EAAE,wBAAwB;YACrC,KAAK,EAAE,iBAAiB;YACxB,WAAW,EACT,0HAA0H;YAC5H,QAAQ,EAAE,qBAAqB;SAChC,CAAC;QACF,wBAAwB,CAAC;YACvB,IAAI,EAAE,qBAAqB;YAC3B,WAAW,EAAE,4BAA4B;YACzC,KAAK,EAAE,qBAAqB;YAC5B,WAAW,EACT,2IAA2I;YAC7I,QAAQ,EAAE,yBAAyB;SACpC,CAAC;QACF,wBAAwB,CAAC;YACvB,IAAI,EAAE,uBAAuB;YAC7B,WAAW,EAAE,8BAA8B;YAC3C,KAAK,EAAE,uBAAuB;YAC9B,WAAW,EACT,yGAAyG;YAC3G,QAAQ,EAAE,2BAA2B;SACtC,CAAC;KACH,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAoB,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAc,KAAK,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAExF,OAAO,EAAyB,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAO1E,eAAO,MAAM,eAAe,oBAAoB,CAAC;AAEjD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,GAAE,MAAoB,GAAG,SAAS,CAOjG;AAyED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAetG"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAoB,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAc,KAAK,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAExF,OAAO,EAAyB,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAQ1E,eAAO,MAAM,eAAe,oBAAoB,CAAC;AAEjD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,GAAE,MAAoB,GAAG,SAAS,CAOjG;AAwFD;;;GAGG;AACH,wBAAsB,cAAc,CAAC,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAetG"}
@@ -5,6 +5,7 @@ import { handleError } from '../utils/errors.js';
5
5
  import { resolveMcpToolContext } from './context.js';
6
6
  import { getResourceSpecs } from './resources.js';
7
7
  import { createCliContextToolsClient, getToolSpecs } from './tools.js';
8
+ import { getWriteToolSpecs } from './writeTools.js';
8
9
  const require = createRequire(import.meta.url);
9
10
  const pkg = require('../../package.json');
10
11
  export const MCP_SERVER_NAME = '@agentteams/cli';
@@ -18,17 +19,31 @@ export const MCP_SERVER_NAME = '@agentteams/cli';
18
19
  * pinned beta only touches this adapter.
19
20
  */
20
21
  export function createMcpServer(context, version = pkg.version) {
21
- // Read-only surface: tools plus single-entity resource templates. Prompts
22
- // and Extensions stay out of scope for Phase 1.
22
+ // Tools (read + document writes) plus single-entity resource templates.
23
+ // Prompts and Extensions stay out of scope.
23
24
  const server = new McpServer({ name: MCP_SERVER_NAME, version }, { capabilities: { tools: {}, resources: {} } });
24
25
  registerTools(server, context);
25
26
  registerResources(server, context);
26
27
  return server;
27
28
  }
28
- /** The single `registerTool` loop — tool envelopes are assembled only here. */
29
+ /**
30
+ * The single `registerTool` loop — tool envelopes are assembled only here.
31
+ *
32
+ * Read specs come from the shared `@agentteams/context-tools` package; write
33
+ * specs are CLI-local by design (see `writeTools.ts`). Both are flattened to the
34
+ * same `(args) => unknown` shape first so there is still exactly one loop.
35
+ */
29
36
  function registerTools(server, context) {
30
37
  const client = createCliContextToolsClient(context);
31
- for (const spec of getToolSpecs()) {
38
+ const readTools = getToolSpecs().map((spec) => ({
39
+ ...spec,
40
+ invoke: (args) => spec.handler(args, client),
41
+ }));
42
+ const writeTools = getWriteToolSpecs().map((spec) => ({
43
+ ...spec,
44
+ invoke: (args) => spec.handler(args, context),
45
+ }));
46
+ for (const spec of [...readTools, ...writeTools]) {
32
47
  server.registerTool(spec.name, {
33
48
  title: spec.title,
34
49
  description: spec.description,
@@ -37,7 +52,7 @@ function registerTools(server, context) {
37
52
  try {
38
53
  // The SDK has already validated `args` against `spec.inputSchema`
39
54
  // before this callback runs, so the record cast is safe.
40
- const result = await spec.handler(args, client);
55
+ const result = await spec.invoke(args);
41
56
  return { content: [{ type: 'text', text: JSON.stringify(result) }] };
42
57
  }
43
58
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,gBAAgB,EAEhB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACrB,MAAM,2BAA2B,CAAC;AAUnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAC5B,MAAM,MAAM,WAAW,GAAG,eAAe,CAAC;AAe1C;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,cAAc,GAAG,kBAAkB,CAiCvF;AAED,gEAAgE;AAChE,wBAAgB,YAAY,IAAI,WAAW,EAAE,CAE5C"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,gBAAgB,EAEhB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACrB,MAAM,2BAA2B,CAAC;AAiBnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAC5B,MAAM,MAAM,WAAW,GAAG,eAAe,CAAC;AAe1C;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,cAAc,GAAG,kBAAkB,CAoCvF;AAED,gEAAgE;AAChE,wBAAgB,YAAY,IAAI,WAAW,EAAE,CAE5C"}
package/dist/mcp/tools.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { getContextToolSpecs, SEARCH_TOOL_NAME, } from '@agentteams/context-tools';
2
2
  import { getCoAction, listCoActions } from '../api/coaction.js';
3
3
  import { getCodeReview, getCodeReviewFinding, listCodeReviews } from '../api/codeReview.js';
4
- import { getComment, listComments, listFindingComments, listTaskComments } from '../api/comment.js';
4
+ import { getComment, getReply, listComments, listFindingComments, listReplies, listTaskComments, } from '../api/comment.js';
5
5
  import { getConvention, listConventions } from '../api/convention.js';
6
6
  import { getDocument, listDocumentComments, listDocuments } from '../api/document.js';
7
7
  import { getPlanRunbook, listPlans } from '../api/plan.js';
@@ -48,6 +48,8 @@ export function createCliContextToolsClient(context) {
48
48
  listTaskComments: async (taskId, params) => listTaskComments(apiUrl, projectId, await auth(), taskId, scalarListParams(params)),
49
49
  listDocumentComments: async (documentId, params) => listDocumentComments(apiUrl, projectId, await auth(), documentId, scalarListParams(params)),
50
50
  getComment: async (id) => getComment(apiUrl, projectId, await auth(), id),
51
+ listCommentReplies: async (commentId, params) => listReplies(apiUrl, projectId, await auth(), commentId, scalarListParams(params)),
52
+ getCommentReply: async (replyId) => getReply(apiUrl, projectId, await auth(), replyId),
51
53
  getCodeReviewFinding: async (id, codeReviewId) => getCodeReviewFinding(apiUrl, projectId, await auth(), id, codeReviewId),
52
54
  };
53
55
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { z } from 'zod';
2
+ import type { McpToolContext } from './context.js';
3
+ /**
4
+ * MCP **write** tools. CLI-only on purpose.
5
+ *
6
+ * These are deliberately *not* added to `@agentteams/context-tools`:
7
+ * `desktop/src/main/localAgent/directRunner.ts` advertises every context-tool
8
+ * definition to the model without filtering, so a write tool placed there would
9
+ * be handed to Direct BYOK conversations — the exact `DESKTOP_LIMITED` boundary
10
+ * that must not grant blanket project write access.
11
+ *
12
+ * The spec shape mirrors `ContextToolSpec`, but is declared locally so the shared
13
+ * read package stays read-only. No MCP SDK import belongs here — `server.ts` is
14
+ * the only adapter (see `test/mcp-boundary.test.ts`).
15
+ */
16
+ export interface McpWriteToolSpec {
17
+ name: string;
18
+ title: string;
19
+ description: string;
20
+ inputSchema: z.ZodType<Record<string, unknown>>;
21
+ handler(args: Record<string, unknown>, context: McpToolContext): Promise<unknown>;
22
+ }
23
+ /** Every write tool the CLI MCP server exposes, in registration order. */
24
+ export declare function getWriteToolSpecs(): McpWriteToolSpec[];
25
+ //# sourceMappingURL=writeTools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writeTools.d.ts","sourceRoot":"","sources":["../../src/mcp/writeTools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAYxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAGnD;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACnF;AAudD,0EAA0E;AAC1E,wBAAgB,iBAAiB,IAAI,gBAAgB,EAAE,CAatD"}