zelari-code 1.2.0 → 1.3.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 (43) hide show
  1. package/dist/cli/app.js +3 -1
  2. package/dist/cli/app.js.map +1 -1
  3. package/dist/cli/ast/engine.js +126 -0
  4. package/dist/cli/ast/engine.js.map +1 -0
  5. package/dist/cli/ast/tools.js +71 -0
  6. package/dist/cli/ast/tools.js.map +1 -0
  7. package/dist/cli/browser/driver.js +125 -0
  8. package/dist/cli/browser/driver.js.map +1 -0
  9. package/dist/cli/browser/tools.js +71 -0
  10. package/dist/cli/browser/tools.js.map +1 -0
  11. package/dist/cli/hooks/useSlashDispatch.js +33 -2
  12. package/dist/cli/hooks/useSlashDispatch.js.map +1 -1
  13. package/dist/cli/lsp/client.js +89 -0
  14. package/dist/cli/lsp/client.js.map +1 -0
  15. package/dist/cli/lsp/manager.js +287 -0
  16. package/dist/cli/lsp/manager.js.map +1 -0
  17. package/dist/cli/lsp/protocol.js +83 -0
  18. package/dist/cli/lsp/protocol.js.map +1 -0
  19. package/dist/cli/lsp/servers.js +80 -0
  20. package/dist/cli/lsp/servers.js.map +1 -0
  21. package/dist/cli/lsp/tools.js +125 -0
  22. package/dist/cli/lsp/tools.js.map +1 -0
  23. package/dist/cli/main.bundled.js +1563 -273
  24. package/dist/cli/main.bundled.js.map +4 -4
  25. package/dist/cli/mode.js +32 -0
  26. package/dist/cli/mode.js.map +1 -0
  27. package/dist/cli/semantic/embeddings.js +71 -0
  28. package/dist/cli/semantic/embeddings.js.map +1 -0
  29. package/dist/cli/semantic/index.js +147 -0
  30. package/dist/cli/semantic/index.js.map +1 -0
  31. package/dist/cli/semantic/provider.js +29 -0
  32. package/dist/cli/semantic/provider.js.map +1 -0
  33. package/dist/cli/semantic/store.js +71 -0
  34. package/dist/cli/semantic/store.js.map +1 -0
  35. package/dist/cli/semantic/tools.js +54 -0
  36. package/dist/cli/semantic/tools.js.map +1 -0
  37. package/dist/cli/slashCommands.js +22 -1
  38. package/dist/cli/slashCommands.js.map +1 -1
  39. package/dist/cli/slashHandlers/semantic.js +37 -0
  40. package/dist/cli/slashHandlers/semantic.js.map +1 -0
  41. package/dist/cli/toolRegistry.js +50 -0
  42. package/dist/cli/toolRegistry.js.map +1 -1
  43. package/package.json +3 -3
@@ -0,0 +1,125 @@
1
+ /**
2
+ * lsp/tools — agent-facing LSP navigation tools.
3
+ *
4
+ * These give the agent IDE-grade code intelligence: jump to a definition,
5
+ * find every reference, read the real type/docs under a symbol, list a file's
6
+ * symbols, and preview the blast radius of a rename. They depend only on the
7
+ * `LspProvider` interface, so they're unit-testable with a fake provider (no
8
+ * language server required).
9
+ *
10
+ * Positions are exposed to the model as 1-based `line`/`column` (what editors
11
+ * show) and converted to LSP's 0-based coordinates internally.
12
+ */
13
+ import path from 'node:path';
14
+ import { z } from 'zod';
15
+ import { typedOk } from '@zelari/core/harness/tools/toolTypes';
16
+ import { uriToPath } from './protocol.js';
17
+ function fmtLocation(loc, relativeTo) {
18
+ const file = uriToPath(loc.uri);
19
+ const rel = relativeTo ? relPath(relativeTo, file) : file;
20
+ // LSP ranges are 0-based; present 1-based to match editors.
21
+ const line = (loc.range?.start?.line ?? 0) + 1;
22
+ const col = (loc.range?.start?.character ?? 0) + 1;
23
+ return `${rel}:${line}:${col}`;
24
+ }
25
+ function relPath(from, to) {
26
+ try {
27
+ const r = path.relative(from, to);
28
+ return r && !r.startsWith('..') ? r : to;
29
+ }
30
+ catch {
31
+ return to;
32
+ }
33
+ }
34
+ const PosArgs = z.object({
35
+ path: z.string().min(1).describe('File path (relative to the project root or absolute).'),
36
+ line: z.number().int().positive().describe('1-based line number of the symbol.'),
37
+ column: z.number().int().positive().describe('1-based column of the symbol.'),
38
+ });
39
+ /** Build the LSP tool set from a provider. `root` is used to relativize paths. */
40
+ export function createLspTools(provider, root = process.cwd()) {
41
+ const goToDefinition = {
42
+ name: 'go_to_definition',
43
+ description: 'Jump to where the symbol at a position is defined (via the language server). ' +
44
+ 'Returns the defining file:line:col — use it instead of guessing with grep.',
45
+ permissions: ['read'],
46
+ inputSchema: PosArgs,
47
+ execute: async (args) => {
48
+ const a = args;
49
+ const locs = await provider.definition(a.path, a.line - 1, a.column - 1);
50
+ return typedOk({
51
+ definitions: locs.map((l) => fmtLocation(l, root)),
52
+ count: locs.length,
53
+ });
54
+ },
55
+ };
56
+ const findReferences = {
57
+ name: 'find_references',
58
+ description: 'Find every reference to the symbol at a position across the workspace ' +
59
+ '(via the language server). Returns a list of file:line:col — reliable ' +
60
+ 'where a text grep would miss shadowed names or match strings/comments.',
61
+ permissions: ['read'],
62
+ inputSchema: PosArgs,
63
+ execute: async (args) => {
64
+ const a = args;
65
+ const locs = await provider.references(a.path, a.line - 1, a.column - 1);
66
+ return typedOk({
67
+ references: locs.map((l) => fmtLocation(l, root)),
68
+ count: locs.length,
69
+ });
70
+ },
71
+ };
72
+ const hoverType = {
73
+ name: 'hover_type',
74
+ description: 'Get the resolved type signature and documentation for the symbol at a ' +
75
+ 'position (via the language server) — the real type the compiler sees.',
76
+ permissions: ['read'],
77
+ inputSchema: PosArgs,
78
+ execute: async (args) => {
79
+ const a = args;
80
+ const text = await provider.hover(a.path, a.line - 1, a.column - 1);
81
+ return typedOk({ hover: text ?? '(no hover information)' });
82
+ },
83
+ };
84
+ const documentSymbols = {
85
+ name: 'document_symbols',
86
+ description: 'List the symbols (functions, classes, methods, variables) declared in a ' +
87
+ 'file with their line numbers — a fast structural outline via the language server.',
88
+ permissions: ['read'],
89
+ inputSchema: z.object({
90
+ path: z.string().min(1).describe('File path to outline.'),
91
+ }),
92
+ execute: async (args) => {
93
+ const a = args;
94
+ const symbols = await provider.documentSymbols(a.path);
95
+ return typedOk({
96
+ symbols: symbols.map((s) => `${s.kind} ${s.name} (line ${s.line})`),
97
+ count: symbols.length,
98
+ });
99
+ },
100
+ };
101
+ const renameSymbol = {
102
+ name: 'rename_symbol',
103
+ description: 'PREVIEW a safe, workspace-wide rename of the symbol at a position (via the ' +
104
+ 'language server): returns which files change and how many edits each gets, ' +
105
+ 'so you know the blast radius before touching anything. It does NOT write ' +
106
+ 'files — apply the change yourself with edit_file once the scope looks right.',
107
+ permissions: ['read'],
108
+ inputSchema: PosArgs.extend({
109
+ newName: z.string().min(1).describe('The new symbol name.'),
110
+ }),
111
+ execute: async (args) => {
112
+ const a = args;
113
+ const result = await provider.rename(a.path, a.line - 1, a.column - 1, a.newName);
114
+ if (!result) {
115
+ return typedOk({ preview: 'no rename available at this position (symbol not found or not renameable)' });
116
+ }
117
+ return typedOk({
118
+ totalEdits: result.totalEdits,
119
+ files: result.files.map((f) => `${relPath(root, f.file)} (${f.count} edit${f.count === 1 ? '' : 's'})`),
120
+ });
121
+ },
122
+ };
123
+ return [goToDefinition, findReferences, hoverType, documentSymbols, renameSymbol];
124
+ }
125
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/cli/lsp/tools.ts"],"names":[],"mappings":"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"}