proofscan 0.8.0 → 0.8.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 (40) hide show
  1. package/dist/cli.js +38 -14
  2. package/dist/cli.js.map +1 -1
  3. package/dist/db/connection.d.ts.map +1 -1
  4. package/dist/db/connection.js +74 -3
  5. package/dist/db/connection.js.map +1 -1
  6. package/dist/db/events-store.d.ts +70 -1
  7. package/dist/db/events-store.d.ts.map +1 -1
  8. package/dist/db/events-store.js +162 -0
  9. package/dist/db/events-store.js.map +1 -1
  10. package/dist/db/schema.d.ts +8 -2
  11. package/dist/db/schema.d.ts.map +1 -1
  12. package/dist/db/schema.js +40 -1
  13. package/dist/db/schema.js.map +1 -1
  14. package/dist/db/types.d.ts +12 -0
  15. package/dist/db/types.d.ts.map +1 -1
  16. package/dist/shell/ref-commands.d.ts +32 -0
  17. package/dist/shell/ref-commands.d.ts.map +1 -0
  18. package/dist/shell/ref-commands.js +337 -0
  19. package/dist/shell/ref-commands.js.map +1 -0
  20. package/dist/shell/ref-resolver.d.ts +199 -0
  21. package/dist/shell/ref-resolver.d.ts.map +1 -0
  22. package/dist/shell/ref-resolver.js +423 -0
  23. package/dist/shell/ref-resolver.js.map +1 -0
  24. package/dist/shell/repl.d.ts +18 -0
  25. package/dist/shell/repl.d.ts.map +1 -1
  26. package/dist/shell/repl.js +111 -6
  27. package/dist/shell/repl.js.map +1 -1
  28. package/dist/shell/router-commands.d.ts +9 -1
  29. package/dist/shell/router-commands.d.ts.map +1 -1
  30. package/dist/shell/router-commands.js +139 -2
  31. package/dist/shell/router-commands.js.map +1 -1
  32. package/dist/shell/tool-commands.d.ts +7 -1
  33. package/dist/shell/tool-commands.d.ts.map +1 -1
  34. package/dist/shell/tool-commands.js +187 -5
  35. package/dist/shell/tool-commands.js.map +1 -1
  36. package/dist/shell/types.d.ts +5 -0
  37. package/dist/shell/types.d.ts.map +1 -1
  38. package/dist/shell/types.js +6 -0
  39. package/dist/shell/types.js.map +1 -1
  40. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,iBAAiB,IAAI,CAAC;AACnC,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAGnC,eAAO,MAAM,gBAAgB,66EAoE5B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,0BAA0B,khBAetC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,0BAA0B,mlBAsBtC,CAAC;AAGF,eAAO,MAAM,gBAAgB,klBAmB5B,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,iBAAiB,IAAI,CAAC;AACnC,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAGnC,eAAO,MAAM,gBAAgB,+5FAoF5B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,0BAA0B,khBAetC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,0BAA0B,mlBAsBtC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,0BAA0B,ufAiBtC,CAAC;AAGF,eAAO,MAAM,gBAAgB,klBAmB5B,CAAC"}
package/dist/db/schema.js CHANGED
@@ -2,8 +2,9 @@
2
2
  * Database schema definitions and migrations
3
3
  * Phase 2.1: Schema version 2 with seq, summary, payload_hash
4
4
  * Phase 3.4: Schema version 3 with actor columns, secret_ref_count, actors table
5
+ * Phase 4.1: Schema version 4 with user_refs table for named references
5
6
  */
6
- export const EVENTS_DB_VERSION = 3;
7
+ export const EVENTS_DB_VERSION = 4;
7
8
  export const PROOFS_DB_VERSION = 1;
8
9
  // events.db schema (version 3)
9
10
  export const EVENTS_DB_SCHEMA = `
@@ -74,6 +75,22 @@ CREATE TABLE IF NOT EXISTS actors (
74
75
 
75
76
  CREATE INDEX IF NOT EXISTS idx_actors_kind ON actors(kind);
76
77
  CREATE INDEX IF NOT EXISTS idx_actors_revoked ON actors(revoked_at);
78
+
79
+ -- User refs table (Phase 4.1: named references)
80
+ CREATE TABLE IF NOT EXISTS user_refs (
81
+ name TEXT PRIMARY KEY,
82
+ kind TEXT NOT NULL CHECK(kind IN ('connector', 'session', 'rpc', 'tool_call', 'context')),
83
+ connector TEXT,
84
+ session TEXT,
85
+ rpc TEXT,
86
+ proto TEXT,
87
+ level TEXT,
88
+ captured_at TEXT NOT NULL,
89
+ created_at TEXT NOT NULL
90
+ );
91
+
92
+ CREATE INDEX IF NOT EXISTS idx_user_refs_kind ON user_refs(kind);
93
+ CREATE INDEX IF NOT EXISTS idx_user_refs_created ON user_refs(created_at);
77
94
  `;
78
95
  /**
79
96
  * Migration from version 1 to version 2
@@ -122,6 +139,28 @@ CREATE INDEX IF NOT EXISTS idx_actors_kind ON actors(kind);
122
139
 
123
140
  CREATE INDEX IF NOT EXISTS idx_actors_revoked ON actors(revoked_at);
124
141
  `;
142
+ /**
143
+ * Migration from version 3 to version 4
144
+ * Phase 4.1: Adds user_refs table for named references
145
+ */
146
+ export const EVENTS_DB_MIGRATION_3_TO_4 = `
147
+ -- Create user_refs table for named references
148
+ CREATE TABLE IF NOT EXISTS user_refs (
149
+ name TEXT PRIMARY KEY,
150
+ kind TEXT NOT NULL CHECK(kind IN ('connector', 'session', 'rpc', 'tool_call', 'context')),
151
+ connector TEXT,
152
+ session TEXT,
153
+ rpc TEXT,
154
+ proto TEXT,
155
+ level TEXT,
156
+ captured_at TEXT NOT NULL,
157
+ created_at TEXT NOT NULL
158
+ );
159
+
160
+ CREATE INDEX IF NOT EXISTS idx_user_refs_kind ON user_refs(kind);
161
+
162
+ CREATE INDEX IF NOT EXISTS idx_user_refs_created ON user_refs(created_at);
163
+ `;
125
164
  // proofs.db schema
126
165
  export const PROOFS_DB_SCHEMA = `
127
166
  -- Proofs table (immutable, never pruned)
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AACnC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAEnC,+BAA+B;AAC/B,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoE/B,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG;;;;;;;;;;;;;;;CAezC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG;;;;;;;;;;;;;;;;;;;;;;CAsBzC,CAAC;AAEF,mBAAmB;AACnB,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;CAmB/B,CAAC"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AACnC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAEnC,+BAA+B;AAC/B,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoF/B,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG;;;;;;;;;;;;;;;CAezC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG;;;;;;;;;;;;;;;;;;;;;;CAsBzC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG;;;;;;;;;;;;;;;;;CAiBzC,CAAC;AAEF,mBAAmB;AACnB,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;CAmB/B,CAAC"}
@@ -76,4 +76,16 @@ export interface ArchivePlan {
76
76
  raw_json_to_clear: number;
77
77
  estimated_savings_mb: number;
78
78
  }
79
+ export type RefKind = 'connector' | 'session' | 'rpc' | 'tool_call' | 'context';
80
+ export interface UserRef {
81
+ name: string;
82
+ kind: RefKind;
83
+ connector: string | null;
84
+ session: string | null;
85
+ rpc: string | null;
86
+ proto: string | null;
87
+ level: string | null;
88
+ captured_at: string;
89
+ created_at: string;
90
+ }
79
91
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/db/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/db/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Shell ref commands: ref add, ref ls, ref rm, ref <@target> (Phase 4.1-4.2)
3
+ *
4
+ * These commands manage user-defined references and resolve references.
5
+ *
6
+ * Commands:
7
+ * - ref add <name> @this : Save current context as named reference
8
+ * - ref add <name> @last : Save latest session/rpc as named reference
9
+ * - ref add <name> @rpc:<id> : Save specific RPC as named reference
10
+ * - ref ls : List all user-defined references
11
+ * - ref rm <name> : Remove a user-defined reference
12
+ *
13
+ * Resolve mode (argument starts with @):
14
+ * - ref @this : Resolve and display current context
15
+ * - ref @last : Resolve and display latest session/RPC
16
+ * - ref @rpc:<id> : Resolve and display specific RPC reference
17
+ * - ref @ref:<name> : Resolve and display user-defined reference
18
+ * - ref @... --json : Output RefStruct as JSON
19
+ *
20
+ * Pipe support:
21
+ * - pwd --json | ref add <name> : Save piped JSON as reference
22
+ */
23
+ import type { ShellContext } from './types.js';
24
+ /**
25
+ * Handle 'ref' command
26
+ */
27
+ export declare function handleRef(args: string[], context: ShellContext, configPath: string, stdinData?: string): Promise<void>;
28
+ /**
29
+ * Get ref names for completion
30
+ */
31
+ export declare function getRefNamesForCompletion(configPath: string): Promise<string[]>;
32
+ //# sourceMappingURL=ref-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ref-commands.d.ts","sourceRoot":"","sources":["../../src/shell/ref-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA+C/C;;GAEG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,YAAY,EACrB,UAAU,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAoDf;AA4PD;;GAEG;AACH,wBAAsB,wBAAwB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CASpF"}
@@ -0,0 +1,337 @@
1
+ /**
2
+ * Shell ref commands: ref add, ref ls, ref rm, ref <@target> (Phase 4.1-4.2)
3
+ *
4
+ * These commands manage user-defined references and resolve references.
5
+ *
6
+ * Commands:
7
+ * - ref add <name> @this : Save current context as named reference
8
+ * - ref add <name> @last : Save latest session/rpc as named reference
9
+ * - ref add <name> @rpc:<id> : Save specific RPC as named reference
10
+ * - ref ls : List all user-defined references
11
+ * - ref rm <name> : Remove a user-defined reference
12
+ *
13
+ * Resolve mode (argument starts with @):
14
+ * - ref @this : Resolve and display current context
15
+ * - ref @last : Resolve and display latest session/RPC
16
+ * - ref @rpc:<id> : Resolve and display specific RPC reference
17
+ * - ref @ref:<name> : Resolve and display user-defined reference
18
+ * - ref @... --json : Output RefStruct as JSON
19
+ *
20
+ * Pipe support:
21
+ * - pwd --json | ref add <name> : Save piped JSON as reference
22
+ */
23
+ import { printSuccess, printError, printInfo, dimText } from './prompt.js';
24
+ import { EventsStore } from '../db/events-store.js';
25
+ import { ConfigManager } from '../config/index.js';
26
+ import { RefResolver, createRefDataProvider, createRefFromContext, parseRef, isRef, refFromJson, refToJson, } from './ref-resolver.js';
27
+ /** Max length for reference names */
28
+ const REF_NAME_MAX_LENGTH = 64;
29
+ /** Pattern for valid reference names: alphanumeric, hyphens, underscores */
30
+ const REF_NAME_PATTERN = /^[a-zA-Z0-9_-]+$/;
31
+ /** Reserved names that cannot be used as reference names */
32
+ const RESERVED_NAMES = ['this', 'last', 'rpc', 'session', 'fav', 'ref'];
33
+ /**
34
+ * Validate reference name
35
+ * @returns Error message if invalid, null if valid
36
+ */
37
+ function validateRefName(name) {
38
+ if (!name) {
39
+ return 'Reference name is required';
40
+ }
41
+ if (name.startsWith('@')) {
42
+ return `Name cannot start with @: ${name}`;
43
+ }
44
+ if (name.length > REF_NAME_MAX_LENGTH) {
45
+ return `Name too long (max ${REF_NAME_MAX_LENGTH} chars): ${name}`;
46
+ }
47
+ if (!REF_NAME_PATTERN.test(name)) {
48
+ return `Invalid name. Use only letters, numbers, hyphens, and underscores: ${name}`;
49
+ }
50
+ if (RESERVED_NAMES.includes(name.toLowerCase())) {
51
+ return `Reserved name cannot be used: ${name}`;
52
+ }
53
+ return null;
54
+ }
55
+ /**
56
+ * Handle 'ref' command
57
+ */
58
+ export async function handleRef(args, context, configPath, stdinData) {
59
+ if (args.length === 0) {
60
+ printInfo('Usage: ref <subcommand> or ref <@target>');
61
+ printInfo('');
62
+ printInfo('Subcommands:');
63
+ printInfo(' ref add <name> @this Save current context');
64
+ printInfo(' ref add <name> @last Save latest session/rpc');
65
+ printInfo(' ref add <name> @rpc:<id> Save specific RPC');
66
+ printInfo(' ref ls List all refs');
67
+ printInfo(' ref rm <name> Remove a ref');
68
+ printInfo('');
69
+ printInfo('Resolve mode (@ prefix):');
70
+ printInfo(' ref @this Resolve current context');
71
+ printInfo(' ref @last Resolve latest session/RPC');
72
+ printInfo(' ref @rpc:<id> Resolve specific RPC');
73
+ printInfo(' ref @ref:<name> Resolve saved reference');
74
+ printInfo(' ref @... --json Output as JSON');
75
+ printInfo('');
76
+ printInfo('Pipe support:');
77
+ printInfo(' pwd --json | ref add <name>');
78
+ return;
79
+ }
80
+ const firstArg = args[0];
81
+ // Resolve mode: if first argument starts with @, resolve the reference
82
+ if (isRef(firstArg)) {
83
+ await handleRefResolve(args, context, configPath);
84
+ return;
85
+ }
86
+ const subcommand = firstArg;
87
+ const subArgs = args.slice(1);
88
+ switch (subcommand) {
89
+ case 'add':
90
+ await handleRefAdd(subArgs, context, configPath, stdinData);
91
+ break;
92
+ case 'ls':
93
+ case 'list':
94
+ await handleRefLs(subArgs, configPath);
95
+ break;
96
+ case 'rm':
97
+ case 'remove':
98
+ case 'delete':
99
+ await handleRefRm(subArgs, configPath);
100
+ break;
101
+ default:
102
+ printError(`Unknown subcommand: ${subcommand}`);
103
+ printInfo('Available: add, ls, rm');
104
+ printInfo('Or use: ref @this, ref @last, ref @rpc:<id>, ref @ref:<name>');
105
+ }
106
+ }
107
+ /**
108
+ * Handle 'ref @...' - resolve and display a reference (Phase 4.2)
109
+ *
110
+ * This is "resolve mode" - when the first argument starts with @
111
+ *
112
+ * Examples:
113
+ * ref @this - Show current context as reference
114
+ * ref @last - Show latest session/RPC as reference
115
+ * ref @rpc:abc123 - Show specific RPC reference
116
+ * ref @ref:myname - Show saved user-defined reference
117
+ * ref @this --json - Output as JSON for piping
118
+ */
119
+ async function handleRefResolve(args, context, configPath) {
120
+ const isJson = args.includes('--json');
121
+ const target = args.find(a => !a.startsWith('-') && a.startsWith('@'));
122
+ if (!target) {
123
+ printError('No reference target specified');
124
+ return;
125
+ }
126
+ const manager = new ConfigManager(configPath);
127
+ const eventsStore = new EventsStore(manager.getConfigDir());
128
+ const dataProvider = createRefDataProvider(eventsStore);
129
+ const resolver = new RefResolver(dataProvider);
130
+ // Special handling for @this - use createRefFromContext directly
131
+ const parsed = parseRef(target);
132
+ let ref;
133
+ if (parsed.type === 'this') {
134
+ ref = createRefFromContext(context);
135
+ ref.source = '@this';
136
+ }
137
+ else {
138
+ const result = resolver.resolve(target, context);
139
+ if (!result.success || !result.ref) {
140
+ printError(result.error || `Failed to resolve: ${target}`);
141
+ return;
142
+ }
143
+ ref = result.ref;
144
+ }
145
+ // Output
146
+ if (isJson) {
147
+ console.log(refToJson(ref));
148
+ return;
149
+ }
150
+ // Human-readable format
151
+ console.log();
152
+ console.log(`Reference: ${target}`);
153
+ console.log(` Kind: ${ref.kind}`);
154
+ if (ref.connector)
155
+ console.log(` Connector: ${ref.connector}`);
156
+ if (ref.session)
157
+ console.log(` Session: ${ref.session.slice(0, 8)}...`);
158
+ if (ref.rpc)
159
+ console.log(` RPC: ${ref.rpc}`);
160
+ if (ref.proto)
161
+ console.log(` Proto: ${ref.proto}`);
162
+ if (ref.level)
163
+ console.log(` Level: ${ref.level}`);
164
+ if (ref.captured_at)
165
+ console.log(` Captured: ${ref.captured_at}`);
166
+ console.log();
167
+ printInfo('Tip: Use --json to get JSON output for piping');
168
+ printInfo(' Use "show ..." to view resource details instead of address');
169
+ }
170
+ /**
171
+ * Handle 'ref add' - save a reference
172
+ */
173
+ async function handleRefAdd(args, context, configPath, stdinData) {
174
+ // Check for stdin data first (pipe support)
175
+ if (stdinData) {
176
+ // Format: ref add <name> (with piped JSON)
177
+ const name = args[0];
178
+ if (!name) {
179
+ printError('Usage: ... | ref add <name>');
180
+ return;
181
+ }
182
+ const validationError = validateRefName(name);
183
+ if (validationError) {
184
+ printError(validationError);
185
+ return;
186
+ }
187
+ const ref = refFromJson(stdinData);
188
+ if (!ref) {
189
+ printError('Invalid JSON input');
190
+ printInfo('Expected RefStruct JSON (use pwd --json to generate)');
191
+ return;
192
+ }
193
+ await saveRef(name, ref, configPath);
194
+ return;
195
+ }
196
+ // Format: ref add <name> @ref
197
+ if (args.length < 2) {
198
+ printError('Usage: ref add <name> <@ref>');
199
+ printInfo('Example: ref add myref @this');
200
+ return;
201
+ }
202
+ const name = args[0];
203
+ const refArg = args[1];
204
+ const validationError = validateRefName(name);
205
+ if (validationError) {
206
+ printError(validationError);
207
+ return;
208
+ }
209
+ // Parse and resolve the reference
210
+ const parsed = parseRef(refArg);
211
+ if (parsed.type === 'literal') {
212
+ printError(`Not a valid reference: ${refArg}`);
213
+ printInfo('Valid refs: @this, @last, @rpc:<id>, @session:<id>');
214
+ return;
215
+ }
216
+ const manager = new ConfigManager(configPath);
217
+ const eventsStore = new EventsStore(manager.getConfigDir());
218
+ const dataProvider = createRefDataProvider(eventsStore);
219
+ const resolver = new RefResolver(dataProvider);
220
+ // Handle @this specially - use current context directly
221
+ let ref;
222
+ if (parsed.type === 'this') {
223
+ ref = createRefFromContext(context);
224
+ }
225
+ else {
226
+ const result = resolver.resolve(refArg, context);
227
+ if (!result.success || !result.ref) {
228
+ printError(result.error || `Failed to resolve: ${refArg}`);
229
+ return;
230
+ }
231
+ ref = result.ref;
232
+ }
233
+ await saveRef(name, ref, configPath);
234
+ }
235
+ /**
236
+ * Save a reference to the database
237
+ */
238
+ async function saveRef(name, ref, configPath) {
239
+ const manager = new ConfigManager(configPath);
240
+ const eventsStore = new EventsStore(manager.getConfigDir());
241
+ eventsStore.saveUserRef(name, {
242
+ kind: ref.kind,
243
+ connector: ref.connector,
244
+ session: ref.session,
245
+ rpc: ref.rpc,
246
+ proto: ref.proto,
247
+ level: ref.level,
248
+ captured_at: ref.captured_at,
249
+ });
250
+ printSuccess(`Saved reference: ${name}`);
251
+ printInfo(` Kind: ${ref.kind}`);
252
+ if (ref.connector)
253
+ printInfo(` Connector: ${ref.connector}`);
254
+ if (ref.session)
255
+ printInfo(` Session: ${ref.session.slice(0, 8)}`);
256
+ if (ref.rpc)
257
+ printInfo(` RPC: ${ref.rpc}`);
258
+ }
259
+ /**
260
+ * Handle 'ref ls' - list all references
261
+ */
262
+ async function handleRefLs(args, configPath) {
263
+ const isJson = args.includes('--json');
264
+ const manager = new ConfigManager(configPath);
265
+ const eventsStore = new EventsStore(manager.getConfigDir());
266
+ const refs = eventsStore.listUserRefs();
267
+ if (refs.length === 0) {
268
+ printInfo('No user-defined references');
269
+ printInfo('Create one with: ref add <name> @this');
270
+ return;
271
+ }
272
+ if (isJson) {
273
+ console.log(JSON.stringify(refs, null, 2));
274
+ return;
275
+ }
276
+ // Table format
277
+ const isTTY = process.stdout.isTTY;
278
+ console.log();
279
+ // Calculate column widths
280
+ const maxName = Math.max(8, ...refs.map(r => r.name.length));
281
+ // Header
282
+ console.log(dimText('Name', isTTY).padEnd(isTTY ? maxName + 9 : maxName) + ' ' +
283
+ dimText('Kind', isTTY).padEnd(isTTY ? 17 : 10) + ' ' +
284
+ dimText('Target', isTTY));
285
+ console.log(dimText('-'.repeat(maxName + 50), isTTY));
286
+ // Rows
287
+ for (const ref of refs) {
288
+ let target = '';
289
+ if (ref.connector)
290
+ target = ref.connector;
291
+ if (ref.session)
292
+ target += '/' + ref.session.slice(0, 8);
293
+ if (ref.rpc)
294
+ target += '/' + ref.rpc.slice(0, 8);
295
+ if (!target)
296
+ target = '(root)';
297
+ console.log(ref.name.padEnd(maxName) + ' ' +
298
+ ref.kind.padEnd(10) + ' ' +
299
+ target);
300
+ }
301
+ console.log();
302
+ printInfo(`${refs.length} reference(s). Use: @ref:<name> to reference`);
303
+ }
304
+ /**
305
+ * Handle 'ref rm' - remove a reference
306
+ */
307
+ async function handleRefRm(args, configPath) {
308
+ const name = args.find(a => !a.startsWith('-'));
309
+ if (!name) {
310
+ printError('Usage: ref rm <name>');
311
+ return;
312
+ }
313
+ const manager = new ConfigManager(configPath);
314
+ const eventsStore = new EventsStore(manager.getConfigDir());
315
+ const deleted = eventsStore.deleteUserRef(name);
316
+ if (deleted) {
317
+ printSuccess(`Deleted reference: ${name}`);
318
+ }
319
+ else {
320
+ printError(`Reference not found: ${name}`);
321
+ }
322
+ }
323
+ /**
324
+ * Get ref names for completion
325
+ */
326
+ export async function getRefNamesForCompletion(configPath) {
327
+ try {
328
+ const manager = new ConfigManager(configPath);
329
+ const eventsStore = new EventsStore(manager.getConfigDir());
330
+ const refs = eventsStore.listUserRefs();
331
+ return refs.map(r => r.name);
332
+ }
333
+ catch {
334
+ return [];
335
+ }
336
+ }
337
+ //# sourceMappingURL=ref-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ref-commands.js","sourceRoot":"","sources":["../../src/shell/ref-commands.ts"],"names":[],"mappings":"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"}