trellis 2.0.13 → 2.1.2

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 (96) hide show
  1. package/dist/cli/index.js +1 -1
  2. package/dist/embeddings/index.js +1 -1
  3. package/dist/{index-7gvjxt27.js → index-2917tjd8.js} +1 -1
  4. package/package.json +2 -10
  5. package/dist/transformers.node-bx3q9d7k.js +0 -33130
  6. package/src/cli/index.ts +0 -3356
  7. package/src/core/agents/harness.ts +0 -380
  8. package/src/core/agents/index.ts +0 -18
  9. package/src/core/agents/types.ts +0 -90
  10. package/src/core/index.ts +0 -118
  11. package/src/core/kernel/middleware.ts +0 -44
  12. package/src/core/kernel/trellis-kernel.ts +0 -593
  13. package/src/core/ontology/builtins.ts +0 -248
  14. package/src/core/ontology/index.ts +0 -34
  15. package/src/core/ontology/registry.ts +0 -209
  16. package/src/core/ontology/types.ts +0 -124
  17. package/src/core/ontology/validator.ts +0 -382
  18. package/src/core/persist/backend.ts +0 -74
  19. package/src/core/persist/sqlite-backend.ts +0 -298
  20. package/src/core/plugins/index.ts +0 -17
  21. package/src/core/plugins/registry.ts +0 -322
  22. package/src/core/plugins/types.ts +0 -126
  23. package/src/core/query/datalog.ts +0 -188
  24. package/src/core/query/engine.ts +0 -370
  25. package/src/core/query/index.ts +0 -34
  26. package/src/core/query/parser.ts +0 -481
  27. package/src/core/query/types.ts +0 -200
  28. package/src/core/store/eav-store.ts +0 -467
  29. package/src/decisions/auto-capture.ts +0 -136
  30. package/src/decisions/hooks.ts +0 -163
  31. package/src/decisions/index.ts +0 -261
  32. package/src/decisions/types.ts +0 -103
  33. package/src/embeddings/auto-embed.ts +0 -248
  34. package/src/embeddings/chunker.ts +0 -327
  35. package/src/embeddings/index.ts +0 -48
  36. package/src/embeddings/model.ts +0 -112
  37. package/src/embeddings/search.ts +0 -305
  38. package/src/embeddings/store.ts +0 -313
  39. package/src/embeddings/types.ts +0 -92
  40. package/src/engine.ts +0 -1125
  41. package/src/garden/cluster.ts +0 -330
  42. package/src/garden/garden.ts +0 -306
  43. package/src/garden/index.ts +0 -29
  44. package/src/git/git-exporter.ts +0 -286
  45. package/src/git/git-importer.ts +0 -329
  46. package/src/git/git-reader.ts +0 -189
  47. package/src/git/index.ts +0 -22
  48. package/src/identity/governance.ts +0 -211
  49. package/src/identity/identity.ts +0 -224
  50. package/src/identity/index.ts +0 -30
  51. package/src/identity/signing-middleware.ts +0 -97
  52. package/src/index.ts +0 -29
  53. package/src/links/index.ts +0 -49
  54. package/src/links/lifecycle.ts +0 -400
  55. package/src/links/parser.ts +0 -484
  56. package/src/links/ref-index.ts +0 -186
  57. package/src/links/resolver.ts +0 -314
  58. package/src/links/types.ts +0 -108
  59. package/src/mcp/index.ts +0 -22
  60. package/src/mcp/server.ts +0 -1278
  61. package/src/semantic/csharp-parser.ts +0 -493
  62. package/src/semantic/go-parser.ts +0 -585
  63. package/src/semantic/index.ts +0 -34
  64. package/src/semantic/java-parser.ts +0 -456
  65. package/src/semantic/python-parser.ts +0 -659
  66. package/src/semantic/ruby-parser.ts +0 -446
  67. package/src/semantic/rust-parser.ts +0 -784
  68. package/src/semantic/semantic-merge.ts +0 -210
  69. package/src/semantic/ts-parser.ts +0 -681
  70. package/src/semantic/types.ts +0 -175
  71. package/src/sync/http-transport.ts +0 -144
  72. package/src/sync/index.ts +0 -43
  73. package/src/sync/memory-transport.ts +0 -66
  74. package/src/sync/multi-repo.ts +0 -200
  75. package/src/sync/reconciler.ts +0 -237
  76. package/src/sync/sync-engine.ts +0 -258
  77. package/src/sync/types.ts +0 -104
  78. package/src/sync/ws-transport.ts +0 -145
  79. package/src/ui/client.html +0 -695
  80. package/src/ui/server.ts +0 -419
  81. package/src/vcs/blob-store.ts +0 -124
  82. package/src/vcs/branch.ts +0 -150
  83. package/src/vcs/checkpoint.ts +0 -64
  84. package/src/vcs/decompose.ts +0 -469
  85. package/src/vcs/diff.ts +0 -409
  86. package/src/vcs/engine-context.ts +0 -26
  87. package/src/vcs/index.ts +0 -23
  88. package/src/vcs/issue.ts +0 -800
  89. package/src/vcs/merge.ts +0 -425
  90. package/src/vcs/milestone.ts +0 -124
  91. package/src/vcs/ops.ts +0 -59
  92. package/src/vcs/types.ts +0 -213
  93. package/src/vcs/vcs-middleware.ts +0 -81
  94. package/src/watcher/fs-watcher.ts +0 -255
  95. package/src/watcher/index.ts +0 -9
  96. package/src/watcher/ingestion.ts +0 -116
@@ -1,314 +0,0 @@
1
- /**
2
- * Entity Reference Resolver
3
- *
4
- * Resolves parsed EntityRefs to TrellisVCS entities by querying
5
- * the EAV store, tracked files, semantic parser, milestones, and identities.
6
- *
7
- * @see TRL-12
8
- */
9
-
10
- import type { EntityRef, ResolvedRef, RefNamespace } from './types.js';
11
-
12
- // ---------------------------------------------------------------------------
13
- // Resolver Context — interface for engine capabilities
14
- // ---------------------------------------------------------------------------
15
-
16
- /**
17
- * Abstract interface for the engine capabilities the resolver needs.
18
- * This allows testing with mocks without a real TrellisVcsEngine.
19
- */
20
- export interface ResolverContext {
21
- /** Get a tracked file by path. Returns true if the file exists in the op stream. */
22
- hasTrackedFile(path: string): boolean;
23
-
24
- /** Look up an issue by ID (e.g. "TRL-5"). Returns title if found. */
25
- getIssueTitle(id: string): string | undefined;
26
-
27
- /** Look up a milestone by ID or message fragment. Returns message if found. */
28
- getMilestoneTitle(idOrMessage: string): string | undefined;
29
-
30
- /** Check if a symbol exists in a file. Returns true if found. */
31
- hasSymbol(filePath: string, symbolName: string): boolean;
32
-
33
- /** Check if an identity/agent ID exists. Returns true if known. */
34
- hasIdentity(id: string): boolean;
35
-
36
- /** List all known agent IDs (from ops). */
37
- getKnownAgentIds(): string[];
38
-
39
- /** List all tracked file paths. */
40
- getTrackedFilePaths(): string[];
41
-
42
- /** List all issue IDs. */
43
- getIssueIds(): string[];
44
-
45
- /** List all milestone IDs. */
46
- getMilestoneIds(): string[];
47
-
48
- /** Check if a decision exists by ID (e.g. "DEC-1"). */
49
- hasDecision(id: string): boolean;
50
-
51
- /** Get a decision's tool name as a human-readable title. */
52
- getDecisionTitle(id: string): string | undefined;
53
-
54
- /** Get all symbol names for a file. */
55
- getSymbolNames(filePath: string): string[];
56
- }
57
-
58
- // ---------------------------------------------------------------------------
59
- // Public API
60
- // ---------------------------------------------------------------------------
61
-
62
- /**
63
- * Resolve a single EntityRef against the resolver context.
64
- */
65
- export function resolveRef(ref: EntityRef, ctx: ResolverContext): ResolvedRef {
66
- switch (ref.namespace) {
67
- case 'issue':
68
- return resolveIssue(ref, ctx);
69
- case 'file':
70
- return resolveFile(ref, ctx);
71
- case 'symbol':
72
- return resolveSymbol(ref, ctx);
73
- case 'identity':
74
- return resolveIdentity(ref, ctx);
75
- case 'milestone':
76
- return resolveMilestone(ref, ctx);
77
- case 'decision':
78
- return resolveDecision(ref, ctx);
79
- default:
80
- return { ...ref, state: 'broken' };
81
- }
82
- }
83
-
84
- /**
85
- * Resolve multiple EntityRefs in batch.
86
- */
87
- export function resolveRefs(
88
- refs: EntityRef[],
89
- ctx: ResolverContext,
90
- ): ResolvedRef[] {
91
- return refs.map((ref) => resolveRef(ref, ctx));
92
- }
93
-
94
- // ---------------------------------------------------------------------------
95
- // Namespace-specific resolvers
96
- // ---------------------------------------------------------------------------
97
-
98
- function resolveIssue(ref: EntityRef, ctx: ResolverContext): ResolvedRef {
99
- const title = ctx.getIssueTitle(ref.target);
100
- if (title !== undefined) {
101
- return {
102
- ...ref,
103
- state: 'resolved',
104
- entityId: `issue:${ref.target}`,
105
- title,
106
- };
107
- }
108
- return { ...ref, state: 'broken' };
109
- }
110
-
111
- function resolveFile(ref: EntityRef, ctx: ResolverContext): ResolvedRef {
112
- if (ctx.hasTrackedFile(ref.target)) {
113
- return {
114
- ...ref,
115
- state: 'resolved',
116
- entityId: `file:${ref.target}`,
117
- title: ref.target,
118
- };
119
- }
120
- return { ...ref, state: 'broken' };
121
- }
122
-
123
- function resolveSymbol(ref: EntityRef, ctx: ResolverContext): ResolvedRef {
124
- // First check the file exists
125
- if (!ctx.hasTrackedFile(ref.target)) {
126
- return { ...ref, state: 'broken' };
127
- }
128
-
129
- // Then check the symbol exists in that file
130
- if (ref.anchor && ctx.hasSymbol(ref.target, ref.anchor)) {
131
- return {
132
- ...ref,
133
- state: 'resolved',
134
- entityId: `symbol:${ref.target}#${ref.anchor}`,
135
- title: `${ref.anchor} in ${ref.target}`,
136
- };
137
- }
138
-
139
- // File exists but symbol not found
140
- if (ref.anchor) {
141
- return { ...ref, state: 'broken' };
142
- }
143
-
144
- // No anchor — resolve as file
145
- return {
146
- ...ref,
147
- state: 'resolved',
148
- entityId: `file:${ref.target}`,
149
- title: ref.target,
150
- };
151
- }
152
-
153
- function resolveIdentity(ref: EntityRef, ctx: ResolverContext): ResolvedRef {
154
- if (ctx.hasIdentity(ref.target)) {
155
- return {
156
- ...ref,
157
- state: 'resolved',
158
- entityId: `identity:${ref.target}`,
159
- title: ref.target,
160
- };
161
- }
162
- return { ...ref, state: 'broken' };
163
- }
164
-
165
- function resolveMilestone(ref: EntityRef, ctx: ResolverContext): ResolvedRef {
166
- const title = ctx.getMilestoneTitle(ref.target);
167
- if (title !== undefined) {
168
- return {
169
- ...ref,
170
- state: 'resolved',
171
- entityId: `milestone:${ref.target}`,
172
- title,
173
- };
174
- }
175
- return { ...ref, state: 'broken' };
176
- }
177
-
178
- function resolveDecision(ref: EntityRef, ctx: ResolverContext): ResolvedRef {
179
- if (ctx.hasDecision(ref.target)) {
180
- return {
181
- ...ref,
182
- state: 'resolved',
183
- entityId: `decision:${ref.target}`,
184
- title: ctx.getDecisionTitle(ref.target) ?? ref.target,
185
- };
186
- }
187
- return { ...ref, state: 'broken' };
188
- }
189
-
190
- // ---------------------------------------------------------------------------
191
- // Engine Adapter — creates a ResolverContext from a TrellisVcsEngine
192
- // ---------------------------------------------------------------------------
193
-
194
- /**
195
- * Minimal engine interface for building a ResolverContext.
196
- * Accepts anything that quacks like TrellisVcsEngine.
197
- */
198
- export interface Enginelike {
199
- trackedFiles(): Array<{ path: string; contentHash: string | undefined }>;
200
- getIssue(id: string): { title?: string } | null;
201
- listIssues(filters?: any): Array<{ id: string }>;
202
- listMilestones(): Array<{ id: string; message?: string }>;
203
- parseFile(
204
- content: string,
205
- filePath: string,
206
- ): { declarations: Array<{ name: string }> } | null;
207
- getOps(): Array<{ agentId: string }>;
208
- getRootPath(): string;
209
- getDecision?(id: string): { id: string; toolName: string } | null;
210
- queryDecisions?(filter?: any): Array<{ id: string; toolName: string }>;
211
- }
212
-
213
- /**
214
- * Build a ResolverContext from an engine-like object.
215
- * The symbol resolution reads files from disk and parses them.
216
- */
217
- export function createResolverContext(engine: Enginelike): ResolverContext {
218
- // Cache tracked files
219
- const trackedSet = new Set(engine.trackedFiles().map((f) => f.path));
220
-
221
- // Cache agent IDs from ops
222
- const agentIds = new Set(engine.getOps().map((op) => op.agentId));
223
-
224
- // Cache issue IDs
225
- const issues = engine.listIssues();
226
-
227
- // Cache milestones
228
- const milestones = engine.listMilestones();
229
-
230
- return {
231
- hasTrackedFile(path: string): boolean {
232
- return trackedSet.has(path);
233
- },
234
-
235
- getIssueTitle(id: string): string | undefined {
236
- const issue = engine.getIssue(id);
237
- return issue?.title;
238
- },
239
-
240
- getMilestoneTitle(idOrMessage: string): string | undefined {
241
- // Try exact ID match first
242
- const byId = milestones.find((m) => m.id === idOrMessage);
243
- if (byId) return byId.message;
244
-
245
- // Try matching by message content
246
- const byMsg = milestones.find(
247
- (m) =>
248
- m.message &&
249
- m.message.toLowerCase().includes(idOrMessage.toLowerCase()),
250
- );
251
- return byMsg?.message;
252
- },
253
-
254
- hasSymbol(filePath: string, symbolName: string): boolean {
255
- try {
256
- const { readFileSync } = require('fs');
257
- const { join } = require('path');
258
- const absPath = join(engine.getRootPath(), filePath);
259
- const content = readFileSync(absPath, 'utf-8');
260
- const result = engine.parseFile(content, filePath);
261
- if (!result) return false;
262
- return result.declarations.some((d) => d.name === symbolName);
263
- } catch {
264
- return false;
265
- }
266
- },
267
-
268
- hasIdentity(id: string): boolean {
269
- // Check if this agent ID appears in any ops
270
- return agentIds.has(id) || agentIds.has(`agent:${id}`);
271
- },
272
-
273
- getKnownAgentIds(): string[] {
274
- return [...agentIds];
275
- },
276
-
277
- getTrackedFilePaths(): string[] {
278
- return [...trackedSet];
279
- },
280
-
281
- getIssueIds(): string[] {
282
- return issues.map((i) => i.id);
283
- },
284
-
285
- getMilestoneIds(): string[] {
286
- return milestones.map((m) => m.id);
287
- },
288
-
289
- hasDecision(id: string): boolean {
290
- if (!engine.getDecision) return false;
291
- return engine.getDecision(id) !== null;
292
- },
293
-
294
- getDecisionTitle(id: string): string | undefined {
295
- if (!engine.getDecision) return undefined;
296
- const d = engine.getDecision(id);
297
- return d?.toolName;
298
- },
299
-
300
- getSymbolNames(filePath: string): string[] {
301
- try {
302
- const { readFileSync } = require('fs');
303
- const { join } = require('path');
304
- const absPath = join(engine.getRootPath(), filePath);
305
- const content = readFileSync(absPath, 'utf-8');
306
- const result = engine.parseFile(content, filePath);
307
- if (!result) return [];
308
- return result.declarations.map((d) => d.name);
309
- } catch {
310
- return [];
311
- }
312
- },
313
- };
314
- }
@@ -1,108 +0,0 @@
1
- /**
2
- * Linked Markdown — Type Definitions
3
- *
4
- * Types for wiki-link parsing, entity reference resolution,
5
- * and bidirectional reference indexing.
6
- *
7
- * @see TRL-11
8
- */
9
-
10
- // ---------------------------------------------------------------------------
11
- // Reference Namespaces
12
- // ---------------------------------------------------------------------------
13
-
14
- export type RefNamespace =
15
- | 'issue'
16
- | 'file'
17
- | 'symbol'
18
- | 'identity'
19
- | 'milestone'
20
- | 'decision';
21
-
22
- // ---------------------------------------------------------------------------
23
- // Entity Reference (parsed from [[...]] syntax)
24
- // ---------------------------------------------------------------------------
25
-
26
- export interface EntityRef {
27
- /** Full matched text inside [[ ]], e.g. "issue:TRL-5|the parser ticket" */
28
- raw: string;
29
- /** Resolved or inferred namespace */
30
- namespace: RefNamespace;
31
- /** Target identifier, e.g. "TRL-5", "src/engine.ts" */
32
- target: string;
33
- /** Optional anchor for symbol refs, e.g. "createIssue" in [[src/engine.ts#createIssue]] */
34
- anchor?: string;
35
- /** Optional display alias, e.g. "the parser ticket" in [[TRL-5|the parser ticket]] */
36
- alias?: string;
37
- /** Where this reference was found */
38
- source: RefSource;
39
- }
40
-
41
- // ---------------------------------------------------------------------------
42
- // Reference Source Location
43
- // ---------------------------------------------------------------------------
44
-
45
- export interface RefSource {
46
- /** File containing the reference */
47
- filePath: string;
48
- /** 1-indexed line number */
49
- line: number;
50
- /** 0-indexed column offset of the opening [[ */
51
- col: number;
52
- /** Context in which the ref was found */
53
- context: RefContext;
54
- }
55
-
56
- export type RefContext = 'markdown' | 'jsdoc' | 'pydoc' | 'rustdoc' | 'godoc' | 'comment';
57
-
58
- // ---------------------------------------------------------------------------
59
- // Resolved Reference
60
- // ---------------------------------------------------------------------------
61
-
62
- export type RefState = 'resolved' | 'stale' | 'broken';
63
-
64
- export interface ResolvedRef extends EntityRef {
65
- /** Whether the reference target was found */
66
- state: RefState;
67
- /** EAV entity ID if resolved (e.g. "issue:TRL-5", "file:src/engine.ts") */
68
- entityId?: string;
69
- /** Human-readable label from the resolved entity */
70
- title?: string;
71
- /** For stale refs: the op hash that caused the ref to become stale */
72
- staleOpHash?: string;
73
- /** For stale refs: reason it became stale */
74
- staleReason?: 'renamed' | 'deleted';
75
- }
76
-
77
- // ---------------------------------------------------------------------------
78
- // Reference Index
79
- // ---------------------------------------------------------------------------
80
-
81
- export interface RefIndex {
82
- /** Forward: source file → refs it contains */
83
- outgoing: Map<string, EntityRef[]>;
84
- /** Backward: target entity ID → sources that reference it */
85
- incoming: Map<string, RefSource[]>;
86
- }
87
-
88
- // ---------------------------------------------------------------------------
89
- // Ref Update Proposal (for rename prompts)
90
- // ---------------------------------------------------------------------------
91
-
92
- export interface RefUpdateProposal {
93
- /** The rename that triggered this proposal */
94
- oldTarget: string;
95
- newTarget: string;
96
- /** Files that would be modified */
97
- affectedFiles: string[];
98
- /** Individual ref rewrites */
99
- rewrites: RefRewrite[];
100
- }
101
-
102
- export interface RefRewrite {
103
- filePath: string;
104
- line: number;
105
- col: number;
106
- oldText: string;
107
- newText: string;
108
- }
package/src/mcp/index.ts DELETED
@@ -1,22 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * TrellisVCS MCP Server — stdio entry point
4
- *
5
- * Run with: bun run src/mcp/index.ts
6
- * Or via MCP config: { "command": "bun", "args": ["run", "src/mcp/index.ts"] }
7
- */
8
-
9
- import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
10
- import { createTrellisMcpServer } from './server.js';
11
-
12
- async function main() {
13
- const server = createTrellisMcpServer();
14
- const transport = new StdioServerTransport();
15
- await server.connect(transport);
16
- console.error('TrellisVCS MCP Server running on stdio');
17
- }
18
-
19
- main().catch((error) => {
20
- console.error('Fatal error:', error);
21
- process.exit(1);
22
- });