yandecode 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/dist/bin.d.ts +3 -0
  2. package/dist/bin.d.ts.map +1 -0
  3. package/dist/bin.js +9 -0
  4. package/dist/bin.js.map +1 -0
  5. package/dist/cli.d.ts +6 -0
  6. package/dist/cli.d.ts.map +1 -0
  7. package/dist/cli.js +21 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/commands/doctor.d.ts +2 -0
  10. package/dist/commands/doctor.d.ts.map +1 -0
  11. package/dist/commands/doctor.js +19 -0
  12. package/dist/commands/doctor.js.map +1 -0
  13. package/dist/commands/hook.d.ts +2 -0
  14. package/dist/commands/hook.d.ts.map +1 -0
  15. package/dist/commands/hook.js +23 -0
  16. package/dist/commands/hook.js.map +1 -0
  17. package/dist/commands/index-cmd.d.ts +2 -0
  18. package/dist/commands/index-cmd.d.ts.map +1 -0
  19. package/dist/commands/index-cmd.js +47 -0
  20. package/dist/commands/index-cmd.js.map +1 -0
  21. package/dist/commands/index.d.ts +13 -0
  22. package/dist/commands/index.d.ts.map +1 -0
  23. package/dist/commands/index.js +15 -0
  24. package/dist/commands/index.js.map +1 -0
  25. package/dist/commands/init.d.ts +2 -0
  26. package/dist/commands/init.d.ts.map +1 -0
  27. package/dist/commands/init.js +22 -0
  28. package/dist/commands/init.js.map +1 -0
  29. package/dist/commands/mcp.d.ts +2 -0
  30. package/dist/commands/mcp.d.ts.map +1 -0
  31. package/dist/commands/mcp.js +71 -0
  32. package/dist/commands/mcp.js.map +1 -0
  33. package/dist/commands/rag.d.ts +2 -0
  34. package/dist/commands/rag.d.ts.map +1 -0
  35. package/dist/commands/rag.js +27 -0
  36. package/dist/commands/rag.js.map +1 -0
  37. package/dist/commands/start.d.ts +6 -0
  38. package/dist/commands/start.d.ts.map +1 -0
  39. package/dist/commands/start.js +76 -0
  40. package/dist/commands/start.js.map +1 -0
  41. package/dist/commands/status.d.ts +2 -0
  42. package/dist/commands/status.d.ts.map +1 -0
  43. package/dist/commands/status.js +29 -0
  44. package/dist/commands/status.js.map +1 -0
  45. package/dist/commands/statusline.d.ts +2 -0
  46. package/dist/commands/statusline.d.ts.map +1 -0
  47. package/dist/commands/statusline.js +90 -0
  48. package/dist/commands/statusline.js.map +1 -0
  49. package/dist/commands/swarm.d.ts +4 -0
  50. package/dist/commands/swarm.d.ts.map +1 -0
  51. package/dist/commands/swarm.js +48 -0
  52. package/dist/commands/swarm.js.map +1 -0
  53. package/dist/commands/uninstall.d.ts +2 -0
  54. package/dist/commands/uninstall.d.ts.map +1 -0
  55. package/dist/commands/uninstall.js +16 -0
  56. package/dist/commands/uninstall.js.map +1 -0
  57. package/dist/context.d.ts +13 -0
  58. package/dist/context.d.ts.map +1 -0
  59. package/dist/context.js +31 -0
  60. package/dist/context.js.map +1 -0
  61. package/dist/doctor/checks.d.ts +18 -0
  62. package/dist/doctor/checks.d.ts.map +1 -0
  63. package/dist/doctor/checks.js +269 -0
  64. package/dist/doctor/checks.js.map +1 -0
  65. package/dist/hooks/handlers.d.ts +21 -0
  66. package/dist/hooks/handlers.d.ts.map +1 -0
  67. package/dist/hooks/handlers.js +191 -0
  68. package/dist/hooks/handlers.js.map +1 -0
  69. package/dist/index.d.ts +9 -0
  70. package/dist/index.d.ts.map +1 -0
  71. package/dist/index.js +9 -0
  72. package/dist/index.js.map +1 -0
  73. package/dist/integration/claude-md.d.ts +6 -0
  74. package/dist/integration/claude-md.d.ts.map +1 -0
  75. package/dist/integration/claude-md.js +30 -0
  76. package/dist/integration/claude-md.js.map +1 -0
  77. package/dist/integration/gitignore.d.ts +3 -0
  78. package/dist/integration/gitignore.d.ts.map +1 -0
  79. package/dist/integration/gitignore.js +13 -0
  80. package/dist/integration/gitignore.js.map +1 -0
  81. package/dist/integration/init.d.ts +17 -0
  82. package/dist/integration/init.d.ts.map +1 -0
  83. package/dist/integration/init.js +86 -0
  84. package/dist/integration/init.js.map +1 -0
  85. package/dist/integration/json-utils.d.ts +13 -0
  86. package/dist/integration/json-utils.d.ts.map +1 -0
  87. package/dist/integration/json-utils.js +33 -0
  88. package/dist/integration/json-utils.js.map +1 -0
  89. package/dist/integration/manifest.d.ts +17 -0
  90. package/dist/integration/manifest.d.ts.map +1 -0
  91. package/dist/integration/manifest.js +26 -0
  92. package/dist/integration/manifest.js.map +1 -0
  93. package/dist/integration/materialize.d.ts +9 -0
  94. package/dist/integration/materialize.d.ts.map +1 -0
  95. package/dist/integration/materialize.js +21 -0
  96. package/dist/integration/materialize.js.map +1 -0
  97. package/dist/integration/mcp-config.d.ts +4 -0
  98. package/dist/integration/mcp-config.d.ts.map +1 -0
  99. package/dist/integration/mcp-config.js +11 -0
  100. package/dist/integration/mcp-config.js.map +1 -0
  101. package/dist/integration/settings.d.ts +7 -0
  102. package/dist/integration/settings.d.ts.map +1 -0
  103. package/dist/integration/settings.js +70 -0
  104. package/dist/integration/settings.js.map +1 -0
  105. package/dist/integration/uninstall.d.ts +10 -0
  106. package/dist/integration/uninstall.d.ts.map +1 -0
  107. package/dist/integration/uninstall.js +71 -0
  108. package/dist/integration/uninstall.js.map +1 -0
  109. package/dist/launcher.d.ts +8 -0
  110. package/dist/launcher.d.ts.map +1 -0
  111. package/dist/launcher.js +18 -0
  112. package/dist/launcher.js.map +1 -0
  113. package/dist/mcp/server.d.ts +27 -0
  114. package/dist/mcp/server.d.ts.map +1 -0
  115. package/dist/mcp/server.js +311 -0
  116. package/dist/mcp/server.js.map +1 -0
  117. package/dist/plugin-content.d.ts +21 -0
  118. package/dist/plugin-content.d.ts.map +1 -0
  119. package/dist/plugin-content.js +67 -0
  120. package/dist/plugin-content.js.map +1 -0
  121. package/dist/rag/format.d.ts +3 -0
  122. package/dist/rag/format.d.ts.map +1 -0
  123. package/dist/rag/format.js +12 -0
  124. package/dist/rag/format.js.map +1 -0
  125. package/dist/retrieval-runtime.d.ts +21 -0
  126. package/dist/retrieval-runtime.d.ts.map +1 -0
  127. package/dist/retrieval-runtime.js +47 -0
  128. package/dist/retrieval-runtime.js.map +1 -0
  129. package/dist/status-line/git.d.ts +3 -0
  130. package/dist/status-line/git.d.ts.map +1 -0
  131. package/dist/status-line/git.js +34 -0
  132. package/dist/status-line/git.js.map +1 -0
  133. package/dist/status-line/render.d.ts +29 -0
  134. package/dist/status-line/render.d.ts.map +1 -0
  135. package/dist/status-line/render.js +72 -0
  136. package/dist/status-line/render.js.map +1 -0
  137. package/dist/swarm-runtime.d.ts +11 -0
  138. package/dist/swarm-runtime.d.ts.map +1 -0
  139. package/dist/swarm-runtime.js +76 -0
  140. package/dist/swarm-runtime.js.map +1 -0
  141. package/dist/version.d.ts +2 -0
  142. package/dist/version.d.ts.map +1 -0
  143. package/dist/version.js +5 -0
  144. package/dist/version.js.map +1 -0
  145. package/package.json +43 -0
@@ -0,0 +1,70 @@
1
+ import { launcherCommandLine } from '../launcher.js';
2
+ const YANDECODE_HOOK = /\byandecode hook (\w+)\b/;
3
+ function isYandecodeGroup(group) {
4
+ if (typeof group !== 'object' || group === null)
5
+ return false;
6
+ const hooks = group.hooks;
7
+ return (Array.isArray(hooks) && hooks.length > 0 && hooks.every((h) => YANDECODE_HOOK.test(h.command)));
8
+ }
9
+ export function hookEntriesFor(launcher, pluginHooksJson) {
10
+ const source = pluginHooksJson.hooks;
11
+ const out = {};
12
+ for (const [event, groups] of Object.entries(source)) {
13
+ out[event] = groups.map((g) => ({
14
+ ...g,
15
+ hooks: g.hooks.map((h) => {
16
+ const m = YANDECODE_HOOK.exec(h.command);
17
+ return m ? { ...h, command: launcherCommandLine(launcher, 'hook', m[1]) } : h;
18
+ }),
19
+ }));
20
+ }
21
+ return out;
22
+ }
23
+ export function removeHooks(settings) {
24
+ const hooks = (settings.hooks ?? {});
25
+ const cleaned = {};
26
+ for (const [event, groups] of Object.entries(hooks)) {
27
+ const kept = groups.filter((g) => !isYandecodeGroup(g));
28
+ if (kept.length > 0)
29
+ cleaned[event] = kept;
30
+ }
31
+ const next = { ...settings };
32
+ if (Object.keys(cleaned).length > 0)
33
+ next.hooks = cleaned;
34
+ else
35
+ delete next.hooks;
36
+ return next;
37
+ }
38
+ export function mergeHooks(settings, entries) {
39
+ const base = removeHooks(settings);
40
+ const hooks = { ...(base.hooks ?? {}) };
41
+ for (const [event, groups] of Object.entries(entries)) {
42
+ hooks[event] = [...(hooks[event] ?? []), ...groups];
43
+ }
44
+ return { ...base, hooks };
45
+ }
46
+ const YANDECODE_STATUSLINE = /\byandecode statusline\b/;
47
+ function isYandecodeStatusLine(value) {
48
+ return (typeof value === 'object' &&
49
+ value !== null &&
50
+ typeof value.command === 'string' &&
51
+ YANDECODE_STATUSLINE.test(value.command));
52
+ }
53
+ export function mergeStatusLine(settings, launcher) {
54
+ const existing = settings.statusLine;
55
+ // A statusLine we didn't set is the user's own choice - never overwrite it.
56
+ if (existing !== undefined && !isYandecodeStatusLine(existing))
57
+ return settings;
58
+ return {
59
+ ...settings,
60
+ statusLine: { type: 'command', command: launcherCommandLine(launcher, 'statusline') },
61
+ };
62
+ }
63
+ export function removeStatusLine(settings) {
64
+ if (!isYandecodeStatusLine(settings.statusLine))
65
+ return settings;
66
+ const next = { ...settings };
67
+ delete next.statusLine;
68
+ return next;
69
+ }
70
+ //# sourceMappingURL=settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/integration/settings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface UninstallOptions {
2
+ purge?: boolean;
3
+ }
4
+ export interface UninstallReport {
5
+ removed: string[];
6
+ skipped: string[];
7
+ purged: boolean;
8
+ }
9
+ export declare function runUninstall(cwd: string, options?: UninstallOptions): Promise<UninstallReport>;
10
+ //# sourceMappingURL=uninstall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../src/integration/uninstall.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;CACjB;AAWD,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,eAAe,CAAC,CAyD1B"}
@@ -0,0 +1,71 @@
1
+ import { existsSync, readFileSync, readdirSync, rmSync, unlinkSync } from 'node:fs';
2
+ import { dirname, join } from 'node:path';
3
+ import { resolveInsideRoot, sha256, workspacePathsFor, writeFileAtomic } from '@yandecode/core';
4
+ import { removeBlock } from './claude-md.js';
5
+ import { removeGitignoreEntry } from './gitignore.js';
6
+ import { readJsonSafe } from './json-utils.js';
7
+ import { readManifest } from './manifest.js';
8
+ import { removeMcpServer } from './mcp-config.js';
9
+ import { removeHooks, removeStatusLine } from './settings.js';
10
+ function removeEmptyDirsUpTo(dir, stopAt) {
11
+ let current = dir;
12
+ while (current.startsWith(stopAt) && current !== stopAt) {
13
+ if (!existsSync(current) || readdirSync(current).length > 0)
14
+ return;
15
+ rmSync(current, { recursive: true });
16
+ current = dirname(current);
17
+ }
18
+ }
19
+ export function runUninstall(cwd, options = {}) {
20
+ const root = cwd;
21
+ const paths = workspacePathsFor(root);
22
+ const manifest = readManifest(paths.managedManifest);
23
+ const removed = [];
24
+ const skipped = [];
25
+ for (const file of manifest?.files ?? []) {
26
+ const abs = resolveInsideRoot(root, file.path);
27
+ if (!existsSync(abs))
28
+ continue;
29
+ if (sha256(readFileSync(abs)) !== file.hash) {
30
+ skipped.push(file.path);
31
+ continue;
32
+ }
33
+ unlinkSync(abs);
34
+ removed.push(file.path);
35
+ removeEmptyDirsUpTo(dirname(abs), join(root, '.claude'));
36
+ }
37
+ const settingsFile = join(root, '.claude', 'settings.json');
38
+ if (existsSync(settingsFile)) {
39
+ // A malformed settings.json must not abort the rest of uninstall (which
40
+ // still has CLAUDE.md/.gitignore/yandecode.json cleanup to do): skip
41
+ // rewriting this one file rather than throwing.
42
+ const parsed = readJsonSafe(settingsFile, null);
43
+ if (parsed) {
44
+ const next = removeStatusLine(removeHooks(parsed));
45
+ writeFileAtomic(settingsFile, `${JSON.stringify(next, null, 2)}\n`);
46
+ }
47
+ }
48
+ const mcpFile = join(root, '.mcp.json');
49
+ if (existsSync(mcpFile)) {
50
+ const parsed = readJsonSafe(mcpFile, null);
51
+ if (parsed) {
52
+ const next = removeMcpServer(parsed);
53
+ writeFileAtomic(mcpFile, `${JSON.stringify(next, null, 2)}\n`);
54
+ }
55
+ }
56
+ const claudeMd = join(root, 'CLAUDE.md');
57
+ if (existsSync(claudeMd))
58
+ writeFileAtomic(claudeMd, removeBlock(readFileSync(claudeMd, 'utf8')));
59
+ const gitignore = join(root, '.gitignore');
60
+ if (existsSync(gitignore))
61
+ writeFileAtomic(gitignore, removeGitignoreEntry(readFileSync(gitignore, 'utf8'), '.yandecode/'));
62
+ if (existsSync(paths.configFile))
63
+ unlinkSync(paths.configFile);
64
+ const purged = options.purge ?? false;
65
+ if (purged)
66
+ rmSync(paths.yandecodeDir, { recursive: true, force: true });
67
+ else if (existsSync(paths.managedManifest))
68
+ unlinkSync(paths.managedManifest);
69
+ return Promise.resolve({ removed, skipped, purged });
70
+ }
71
+ //# sourceMappingURL=uninstall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/integration/uninstall.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface Launcher {
2
+ command: string;
3
+ args: string[];
4
+ }
5
+ export declare function defaultProbe(command: string): boolean;
6
+ export declare function resolveLauncher(probe?: (cmd: string) => boolean): Launcher;
7
+ export declare function launcherCommandLine(launcher: Launcher, ...rest: string[]): string;
8
+ //# sourceMappingURL=launcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../src/launcher.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAOrD;AAED,wBAAgB,eAAe,CAAC,KAAK,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAsB,GAAG,QAAQ,CAIxF;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAEjF"}
@@ -0,0 +1,18 @@
1
+ import { spawnSync } from 'node:child_process';
2
+ export function defaultProbe(command) {
3
+ const result = spawnSync(command, ['--version'], {
4
+ stdio: 'ignore',
5
+ timeout: 5000,
6
+ shell: process.platform === 'win32',
7
+ });
8
+ return result.status === 0;
9
+ }
10
+ export function resolveLauncher(probe = defaultProbe) {
11
+ return probe('yandecode')
12
+ ? { command: 'yandecode', args: [] }
13
+ : { command: 'npx', args: ['yandecode'] };
14
+ }
15
+ export function launcherCommandLine(launcher, ...rest) {
16
+ return [launcher.command, ...launcher.args, ...rest].join(' ');
17
+ }
18
+ //# sourceMappingURL=launcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"launcher.js","sourceRoot":"","sources":["../src/launcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAO/C,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE;QAC/C,KAAK,EAAE,QAAQ;QACf,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO;KACpC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAAkC,YAAY;IAC5E,OAAO,KAAK,CAAC,WAAW,CAAC;QACvB,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE;QACpC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,QAAkB,EAAE,GAAG,IAAc;IACvE,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACjE,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { MessageRepository } from '@yandecode/core';
3
+ import type { MemoryRetriever, MemoryService, SwarmService } from '@yandecode/swarm';
4
+ import type { RuntimeContext } from '../context.js';
5
+ export interface RagHit {
6
+ path: string;
7
+ startLine: number;
8
+ endLine: number;
9
+ symbol: string | null;
10
+ score: number;
11
+ content: string;
12
+ }
13
+ export type RagSearchFn = (query: string, options: {
14
+ limit: number;
15
+ }) => Promise<RagHit[]>;
16
+ export interface McpDeps {
17
+ rt: RuntimeContext;
18
+ search?: RagSearchFn;
19
+ note?: () => string | null;
20
+ swarmService?: SwarmService;
21
+ messages?: MessageRepository;
22
+ memoryService?: MemoryService;
23
+ memoryRetriever?: MemoryRetriever;
24
+ }
25
+ export declare function formatHits(query: string, hits: RagHit[]): string;
26
+ export declare function createMcpServer(deps: McpDeps): McpServer;
27
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAc,MAAM,iBAAiB,CAAC;AACrE,OAAO,KAAK,EACV,eAAe,EACf,aAAa,EACb,YAAY,EAEb,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGpD,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AAE3F,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,cAAc,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAuCD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAUhE;AAqBD,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,CA6UxD"}
@@ -0,0 +1,311 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { z } from 'zod';
3
+ import { VERSION } from '../version.js';
4
+ const NOT_AVAILABLE = 'RAG index not available. Run "yandecode index" in the project root.';
5
+ const TASK_STATUSES = [
6
+ 'planned',
7
+ 'ready',
8
+ 'claimed',
9
+ 'running',
10
+ 'blocked',
11
+ 'review',
12
+ 'completed',
13
+ 'failed',
14
+ 'cancelled',
15
+ ];
16
+ const MESSAGE_TYPES = ['finding', 'question', 'answer', 'dependency', 'warning', 'result'];
17
+ const SWARM_NOT_AVAILABLE = 'Swarm orchestration not available: this session was not opened with swarm support.';
18
+ const MEMORY_NAMESPACES = [
19
+ 'decisions',
20
+ 'patterns',
21
+ 'solutions',
22
+ 'failures',
23
+ 'tasks',
24
+ 'feedback',
25
+ ];
26
+ const MEMORY_NOT_AVAILABLE = 'Memory not available: this session was not opened with memory support.';
27
+ function jsonResult(value) {
28
+ return { content: [{ type: 'text', text: JSON.stringify(value) }] };
29
+ }
30
+ function unavailable(message) {
31
+ return { isError: true, content: [{ type: 'text', text: message }] };
32
+ }
33
+ export function formatHits(query, hits) {
34
+ const lines = [`UNTRUSTED_REPOSITORY_CONTEXT — ${hits.length} results for "${query}"`];
35
+ for (const h of hits) {
36
+ lines.push(`--- ${h.path}:${h.startLine}-${h.endLine} [${h.symbol ?? '-'}] score=${h.score.toFixed(3)}`);
37
+ lines.push(h.content);
38
+ }
39
+ lines.push('--- end UNTRUSTED_REPOSITORY_CONTEXT');
40
+ return `${lines.join('\n')}\n`;
41
+ }
42
+ function status(rt) {
43
+ const counts = rt.index.counts();
44
+ return {
45
+ documents: counts.documents,
46
+ chunks: counts.chunks,
47
+ dirtyFiles: rt.index.listDirty().length,
48
+ generation: rt.index.getMeta('repository')?.generation ?? 0,
49
+ model: rt.config.rag.embeddingModel,
50
+ ready: counts.chunks > 0,
51
+ };
52
+ }
53
+ export function createMcpServer(deps) {
54
+ const { rt } = deps;
55
+ const server = new McpServer({ name: 'yandecode', version: VERSION });
56
+ server.registerTool('rag_status', {
57
+ description: 'Report the state of the YandeCode repository index (documents, chunks, dirty files, generation, readiness).',
58
+ inputSchema: {},
59
+ }, () => Promise.resolve({ content: [{ type: 'text', text: JSON.stringify(status(rt)) }] }));
60
+ server.registerTool('rag_search', {
61
+ description: 'Hybrid (lexical + semantic) search over the indexed repository. Returns candidate chunks with path:start-end attribution inside an UNTRUSTED_REPOSITORY_CONTEXT envelope. Verify important results with Read.',
62
+ inputSchema: {
63
+ query: z.string().min(1).max(2000).describe('Natural-language or identifier query'),
64
+ limit: z
65
+ .number()
66
+ .int()
67
+ .min(1)
68
+ .max(12)
69
+ .optional()
70
+ .describe('Max results (default from yandecode.json rag.maxResults)'),
71
+ },
72
+ }, async ({ query, limit }) => {
73
+ const s = status(rt);
74
+ if (!deps.search || !s.ready) {
75
+ return { isError: true, content: [{ type: 'text', text: NOT_AVAILABLE }] };
76
+ }
77
+ const hits = await deps.search(query, { limit: limit ?? rt.config.rag.maxResults });
78
+ await rt.events.emit({ event: 'rag_search', data: { query, results: hits.length } });
79
+ const note = deps.note?.();
80
+ const text = note ? `${note}\n\n${formatHits(query, hits)}` : formatHits(query, hits);
81
+ return { content: [{ type: 'text', text }] };
82
+ });
83
+ server.registerTool('swarm_create', {
84
+ description: 'Create a new swarm for a coordinated multi-task effort.',
85
+ inputSchema: {
86
+ title: z.string().min(1).max(200),
87
+ goal: z.string().min(1).max(2000),
88
+ strategy: z.enum(['adaptive', 'pipeline', 'star']).default('adaptive'),
89
+ maxAgents: z.number().int().min(1).max(8).optional(),
90
+ },
91
+ }, async ({ title, goal, strategy, maxAgents }) => {
92
+ if (!deps.swarmService)
93
+ return unavailable(SWARM_NOT_AVAILABLE);
94
+ // The MCP server process and the SessionStart/SessionEnd hook processes are separate short-
95
+ // lived CLI invocations with no shared in-memory state, so "the current session" can only be
96
+ // resolved by reading the sessions table for whichever session is still open (SessionStart
97
+ // wrote it, SessionEnd hasn't closed it yet). This is what makes SessionEnd's swarm cleanup
98
+ // (packages/cli/src/hooks/handlers.ts) able to find and cancel this swarm later.
99
+ const openSession = deps.rt.sessions.getMostRecentOpen();
100
+ const swarm = await deps.swarmService.createSwarm({
101
+ title,
102
+ goal,
103
+ strategy,
104
+ ...(maxAgents !== undefined ? { maxAgents } : {}),
105
+ sessionId: openSession?.claudeSessionId ?? null,
106
+ });
107
+ return jsonResult(swarm);
108
+ });
109
+ server.registerTool('swarm_status', {
110
+ description: 'Report a swarm and its task counts by status.',
111
+ inputSchema: { swarmId: z.string().min(1) },
112
+ }, ({ swarmId }) => {
113
+ if (!deps.swarmService)
114
+ return Promise.resolve(unavailable(SWARM_NOT_AVAILABLE));
115
+ const tasks = deps.swarmService.taskList(swarmId);
116
+ const taskCounts = {};
117
+ for (const t of tasks)
118
+ taskCounts[t.status] = (taskCounts[t.status] ?? 0) + 1;
119
+ const swarm = deps.swarmService.getSwarm(swarmId);
120
+ return Promise.resolve(jsonResult({ ...swarm, taskCounts }));
121
+ });
122
+ server.registerTool('swarm_next', {
123
+ description: 'Get the next batch of ready tasks to spawn as workers.',
124
+ inputSchema: { swarmId: z.string().min(1) },
125
+ }, async ({ swarmId }) => {
126
+ if (!deps.swarmService)
127
+ return unavailable(SWARM_NOT_AVAILABLE);
128
+ return jsonResult(await deps.swarmService.swarmNext(swarmId));
129
+ });
130
+ server.registerTool('swarm_cancel', {
131
+ description: 'Cancel every non-terminal task in a swarm and release its leases.',
132
+ inputSchema: { swarmId: z.string().min(1) },
133
+ }, async ({ swarmId }) => {
134
+ if (!deps.swarmService)
135
+ return unavailable(SWARM_NOT_AVAILABLE);
136
+ return jsonResult(await deps.swarmService.swarmCancel(swarmId));
137
+ });
138
+ server.registerTool('task_create', {
139
+ description: 'Create one or more tasks (optionally interdependent) in a swarm.',
140
+ inputSchema: {
141
+ swarmId: z.string().min(1),
142
+ tasks: z
143
+ .array(z.object({
144
+ ref: z.string().min(1),
145
+ title: z.string().min(1).max(200),
146
+ description: z.string().min(1).max(4000),
147
+ role: z.string().min(1),
148
+ priority: z.number().int().optional(),
149
+ maxAttempts: z.number().int().min(1).max(5).optional(),
150
+ needsWorktree: z.boolean().optional(),
151
+ dependsOn: z.array(z.string()).optional(),
152
+ paths: z.array(z.string()).optional(),
153
+ }))
154
+ .min(1)
155
+ .max(50),
156
+ },
157
+ }, async ({ swarmId, tasks }) => {
158
+ if (!deps.swarmService)
159
+ return unavailable(SWARM_NOT_AVAILABLE);
160
+ const inputs = tasks.map((t) => ({
161
+ ref: t.ref,
162
+ title: t.title,
163
+ description: t.description,
164
+ role: t.role,
165
+ ...(t.priority !== undefined ? { priority: t.priority } : {}),
166
+ ...(t.maxAttempts !== undefined ? { maxAttempts: t.maxAttempts } : {}),
167
+ ...(t.needsWorktree !== undefined ? { needsWorktree: t.needsWorktree } : {}),
168
+ ...(t.dependsOn !== undefined ? { dependsOn: t.dependsOn } : {}),
169
+ ...(t.paths !== undefined ? { paths: t.paths } : {}),
170
+ }));
171
+ return jsonResult(await deps.swarmService.taskCreate(swarmId, inputs));
172
+ });
173
+ server.registerTool('task_list', {
174
+ description: 'List tasks in a swarm, optionally filtered by status.',
175
+ inputSchema: {
176
+ swarmId: z.string().min(1),
177
+ statuses: z.array(z.enum(TASK_STATUSES)).optional(),
178
+ },
179
+ }, ({ swarmId, statuses }) => {
180
+ if (!deps.swarmService)
181
+ return Promise.resolve(unavailable(SWARM_NOT_AVAILABLE));
182
+ return Promise.resolve(jsonResult(deps.swarmService.taskList(swarmId, statuses)));
183
+ });
184
+ server.registerTool('task_update', {
185
+ description: "Update a task's status, optionally recording its owner, workspace, or result.",
186
+ inputSchema: {
187
+ taskId: z.string().min(1),
188
+ status: z.enum(TASK_STATUSES),
189
+ ownerAgent: z.string().optional(),
190
+ workspaceId: z.string().optional(),
191
+ resultJson: z.string().max(4096).optional(),
192
+ },
193
+ }, async ({ taskId, status, ownerAgent, workspaceId, resultJson }) => {
194
+ if (!deps.swarmService)
195
+ return unavailable(SWARM_NOT_AVAILABLE);
196
+ return jsonResult(await deps.swarmService.taskUpdate(taskId, status, {
197
+ ...(ownerAgent !== undefined ? { ownerAgent } : {}),
198
+ ...(workspaceId !== undefined ? { workspaceId } : {}),
199
+ ...(resultJson !== undefined ? { resultJson } : {}),
200
+ }));
201
+ });
202
+ server.registerTool('message_send', {
203
+ description: 'Send a structured message to another agent in the same swarm.',
204
+ inputSchema: {
205
+ swarmId: z.string().min(1),
206
+ from: z.string().min(1),
207
+ to: z.string().min(1),
208
+ type: z.enum(MESSAGE_TYPES),
209
+ payload: z.unknown(),
210
+ },
211
+ }, async ({ swarmId, from, to, type, payload }) => {
212
+ if (!deps.messages)
213
+ return unavailable(SWARM_NOT_AVAILABLE);
214
+ return jsonResult(await deps.messages.send({ swarmId, from, to, type, payload }));
215
+ });
216
+ server.registerTool('message_read', {
217
+ description: 'Read and mark-as-read every unread message addressed to an agent in a swarm.',
218
+ inputSchema: { swarmId: z.string().min(1), toAgent: z.string().min(1) },
219
+ }, async ({ swarmId, toAgent }) => {
220
+ if (!deps.messages)
221
+ return unavailable(SWARM_NOT_AVAILABLE);
222
+ const unread = deps.messages.listUnreadFor(swarmId, toAgent);
223
+ for (const m of unread)
224
+ await deps.messages.markRead(m.id);
225
+ return jsonResult(unread);
226
+ });
227
+ server.registerTool('workspace_reserve', {
228
+ description: 'Reserve one or more file-path patterns for a task, failing atomically if any pattern conflicts with an active lease.',
229
+ inputSchema: {
230
+ swarmId: z.string().min(1),
231
+ taskId: z.string().min(1),
232
+ patterns: z.array(z.string().min(1)).min(1).max(20),
233
+ holderAgent: z.string().min(1),
234
+ },
235
+ }, async ({ swarmId, taskId, patterns, holderAgent }) => {
236
+ if (!deps.swarmService)
237
+ return unavailable(SWARM_NOT_AVAILABLE);
238
+ return jsonResult(await deps.swarmService.workspaceReserve({ swarmId, taskId, patterns, holderAgent }));
239
+ });
240
+ server.registerTool('workspace_release', {
241
+ description: 'Release every path reservation a task currently holds.',
242
+ inputSchema: { taskId: z.string().min(1) },
243
+ }, async ({ taskId }) => {
244
+ if (!deps.swarmService)
245
+ return unavailable(SWARM_NOT_AVAILABLE);
246
+ await deps.swarmService.workspaceRelease(taskId);
247
+ return jsonResult({ released: true });
248
+ });
249
+ server.registerTool('memory_store', {
250
+ description: 'Store a durable memory (a decision, pattern, solution, failure, task note, or feedback) with evidence, for future sessions to retrieve.',
251
+ inputSchema: {
252
+ namespace: z.enum(MEMORY_NAMESPACES),
253
+ content: z.string().min(1).max(4000),
254
+ summary: z.string().max(500).optional(),
255
+ confidence: z.number().min(0).max(1).default(0.5),
256
+ evidence: z.string().min(1).optional(),
257
+ sourceSwarmId: z.string().optional(),
258
+ sourceTaskId: z.string().optional(),
259
+ },
260
+ }, async ({ namespace, content, summary, confidence, evidence, sourceSwarmId, sourceTaskId }) => {
261
+ if (!deps.memoryService)
262
+ return unavailable(MEMORY_NOT_AVAILABLE);
263
+ const result = await deps.memoryService.store({
264
+ namespace,
265
+ content,
266
+ summary: summary ?? null,
267
+ sourceSwarmId: sourceSwarmId ?? null,
268
+ sourceTaskId: sourceTaskId ?? null,
269
+ confidence,
270
+ evidence: evidence ?? null,
271
+ });
272
+ return jsonResult(result);
273
+ });
274
+ server.registerTool('memory_search', {
275
+ description: 'Search stored memories by relevance, optionally scoped to one namespace.',
276
+ inputSchema: {
277
+ query: z.string().min(1),
278
+ namespace: z.enum(MEMORY_NAMESPACES).optional(),
279
+ limit: z.number().int().min(1).max(20).optional(),
280
+ },
281
+ }, async ({ query, namespace, limit }) => {
282
+ if (!deps.memoryRetriever)
283
+ return unavailable(MEMORY_NOT_AVAILABLE);
284
+ const hits = await deps.memoryRetriever.search(query, {
285
+ namespace: namespace ?? null,
286
+ ...(limit !== undefined ? { limit } : {}),
287
+ });
288
+ return jsonResult(hits);
289
+ });
290
+ server.registerTool('memory_feedback', {
291
+ description: "Report whether a previously-retrieved memory was helpful, wrong, or stale - adjusts its confidence for future searches. This is what closes the learning loop: memory_store alone never updates a memory's confidence.",
292
+ inputSchema: {
293
+ memoryId: z.string().min(1),
294
+ verdict: z.enum(['helpful', 'wrong', 'stale']),
295
+ taskId: z.string().optional(),
296
+ note: z.string().max(1000).optional(),
297
+ },
298
+ }, async ({ memoryId, verdict, taskId, note }) => {
299
+ if (!deps.memoryService)
300
+ return unavailable(MEMORY_NOT_AVAILABLE);
301
+ const result = await deps.memoryService.feedback({
302
+ memoryId,
303
+ verdict,
304
+ taskId: taskId ?? null,
305
+ note: note ?? null,
306
+ });
307
+ return jsonResult(result);
308
+ });
309
+ return server;
310
+ }
311
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export declare const AGENT_NAMES: readonly ["yandecode-dispatcher", "yandecode-scout", "yandecode-implementer", "yandecode-tester", "yandecode-reviewer", "yandecode-security", "yandecode-researcher"];
2
+ export declare const SKILL_NAMES: readonly ["yandecode-context-rules", "yandecode-delegation", "yandecode-swarm-protocol", "yandecode-worker-contract"];
3
+ export declare const HOOK_EVENTS: readonly ["SessionStart", "PostToolUse", "SessionEnd", "SubagentStop", "WorktreeCreate", "WorktreeRemove"];
4
+ export interface PluginContent {
5
+ root: string;
6
+ agents: {
7
+ name: string;
8
+ file: string;
9
+ }[];
10
+ skills: {
11
+ name: string;
12
+ dir: string;
13
+ file: string;
14
+ }[];
15
+ hooksFile: string;
16
+ mcpFile: string;
17
+ manifestFile: string;
18
+ }
19
+ export declare function loadPluginContent(root?: string): PluginContent;
20
+ export declare function parseFrontmatter(markdown: string): Record<string, string>;
21
+ //# sourceMappingURL=plugin-content.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-content.d.ts","sourceRoot":"","sources":["../src/plugin-content.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,WAAW,uKAQd,CAAC;AAEX,eAAO,MAAM,WAAW,uHAKd,CAAC;AAEX,eAAO,MAAM,WAAW,4GAOd,CAAC;AAEX,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACzC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACtD,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,GAAE,MAAmB,GAAG,aAAa,CA4B1E;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUzE"}