proofscan 0.8.1 → 0.9.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 (45) hide show
  1. package/dist/db/connection.d.ts.map +1 -1
  2. package/dist/db/connection.js +74 -3
  3. package/dist/db/connection.js.map +1 -1
  4. package/dist/db/events-store.d.ts +70 -1
  5. package/dist/db/events-store.d.ts.map +1 -1
  6. package/dist/db/events-store.js +162 -0
  7. package/dist/db/events-store.js.map +1 -1
  8. package/dist/db/schema.d.ts +8 -2
  9. package/dist/db/schema.d.ts.map +1 -1
  10. package/dist/db/schema.js +40 -1
  11. package/dist/db/schema.js.map +1 -1
  12. package/dist/db/types.d.ts +12 -0
  13. package/dist/db/types.d.ts.map +1 -1
  14. package/dist/shell/inscribe-commands.d.ts +32 -0
  15. package/dist/shell/inscribe-commands.d.ts.map +1 -0
  16. package/dist/shell/inscribe-commands.js +461 -0
  17. package/dist/shell/inscribe-commands.js.map +1 -0
  18. package/dist/shell/ref-commands.d.ts +32 -0
  19. package/dist/shell/ref-commands.d.ts.map +1 -0
  20. package/dist/shell/ref-commands.js +337 -0
  21. package/dist/shell/ref-commands.js.map +1 -0
  22. package/dist/shell/ref-resolver.d.ts +199 -0
  23. package/dist/shell/ref-resolver.d.ts.map +1 -0
  24. package/dist/shell/ref-resolver.js +423 -0
  25. package/dist/shell/ref-resolver.js.map +1 -0
  26. package/dist/shell/repl.d.ts +28 -0
  27. package/dist/shell/repl.d.ts.map +1 -1
  28. package/dist/shell/repl.js +170 -6
  29. package/dist/shell/repl.js.map +1 -1
  30. package/dist/shell/router-commands.d.ts +18 -1
  31. package/dist/shell/router-commands.d.ts.map +1 -1
  32. package/dist/shell/router-commands.js +222 -2
  33. package/dist/shell/router-commands.js.map +1 -1
  34. package/dist/shell/tool-commands.d.ts +7 -1
  35. package/dist/shell/tool-commands.d.ts.map +1 -1
  36. package/dist/shell/tool-commands.js +187 -5
  37. package/dist/shell/tool-commands.js.map +1 -1
  38. package/dist/shell/types.d.ts +10 -0
  39. package/dist/shell/types.d.ts.map +1 -1
  40. package/dist/shell/types.js +11 -0
  41. package/dist/shell/types.js.map +1 -1
  42. package/dist/types/config.d.ts +13 -0
  43. package/dist/types/config.d.ts.map +1 -1
  44. package/dist/types/config.js.map +1 -1
  45. package/package.json +1 -1
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Shell inscribe commands (Phase 4.3)
3
+ *
4
+ * Inscribes RPC call details to an external inscribe-mcp server.
5
+ *
6
+ * Usage:
7
+ * - inscribe @rpc:<id> Inscribe a specific RPC call
8
+ * - inscribe @ref:<name> Inscribe from saved reference
9
+ * - inscribe @last Inscribe the latest RPC call
10
+ * - show @rpc:<id> --json | inscribe Inscribe from piped JSON
11
+ *
12
+ * Options:
13
+ * - --dry-run Show payload without sending
14
+ * - --json Output receipt as JSON
15
+ */
16
+ import type { ShellContext } from './types.js';
17
+ /**
18
+ * Redact secrets in an object for inscription
19
+ * Uses existing redactDeep but with "***" as the redaction placeholder
20
+ *
21
+ * @param value - Value to redact
22
+ * @returns Redacted value and count
23
+ */
24
+ export declare function redactForInscribe(value: unknown): {
25
+ value: unknown;
26
+ count: number;
27
+ };
28
+ /**
29
+ * Handle 'inscribe' command
30
+ */
31
+ export declare function handleInscribe(args: string[], context: ShellContext, configPath: string, stdinData?: string): Promise<void>;
32
+ //# sourceMappingURL=inscribe-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inscribe-commands.d.ts","sourceRoot":"","sources":["../../src/shell/inscribe-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAiE/C;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CASnF;AAwKD;;GAEG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,YAAY,EACrB,UAAU,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAqCf"}
@@ -0,0 +1,461 @@
1
+ /**
2
+ * Shell inscribe commands (Phase 4.3)
3
+ *
4
+ * Inscribes RPC call details to an external inscribe-mcp server.
5
+ *
6
+ * Usage:
7
+ * - inscribe @rpc:<id> Inscribe a specific RPC call
8
+ * - inscribe @ref:<name> Inscribe from saved reference
9
+ * - inscribe @last Inscribe the latest RPC call
10
+ * - show @rpc:<id> --json | inscribe Inscribe from piped JSON
11
+ *
12
+ * Options:
13
+ * - --dry-run Show payload without sending
14
+ * - --json Output receipt as JSON
15
+ */
16
+ import { printSuccess, printError, printInfo, dimText } from './prompt.js';
17
+ import { ConfigManager } from '../config/index.js';
18
+ import { EventsStore } from '../db/events-store.js';
19
+ import { RefResolver, createRefDataProvider, parseRef, isRef, } from './ref-resolver.js';
20
+ import { getConnector, listTools, callTool, } from '../tools/adapter.js';
21
+ import { redactDeep } from '../secrets/redaction.js';
22
+ /** Default inscriber connector ID */
23
+ const DEFAULT_INSCRIBER_CONNECTOR = 'inscribe';
24
+ /** Default inscriber tool name */
25
+ const DEFAULT_INSCRIBER_TOOL = 'inscribe';
26
+ /** Default inscription type */
27
+ const DEFAULT_INSCRIPTION_TYPE = 'proofscan.rpc';
28
+ /** Custom redaction placeholder for inscribe payloads */
29
+ const INSCRIBE_REDACTED = '***';
30
+ /**
31
+ * Redact secrets in an object for inscription
32
+ * Uses existing redactDeep but with "***" as the redaction placeholder
33
+ *
34
+ * @param value - Value to redact
35
+ * @returns Redacted value and count
36
+ */
37
+ export function redactForInscribe(value) {
38
+ // Use redactDeep with custom options for "***" placeholder
39
+ const result = redactDeep(value, {
40
+ redactSecretKeys: true,
41
+ redactSecretRefs: true,
42
+ redactedValue: INSCRIBE_REDACTED,
43
+ redactedRef: INSCRIBE_REDACTED,
44
+ });
45
+ return result;
46
+ }
47
+ /**
48
+ * Build inscribe payload from RPC data
49
+ */
50
+ function buildPayload(ref, rpcData) {
51
+ // Parse request/response JSON
52
+ let requestJson = null;
53
+ let responseJson = null;
54
+ if (rpcData.request?.raw_json) {
55
+ try {
56
+ requestJson = JSON.parse(rpcData.request.raw_json);
57
+ }
58
+ catch {
59
+ requestJson = rpcData.request.raw_json;
60
+ }
61
+ }
62
+ if (rpcData.response?.raw_json) {
63
+ try {
64
+ responseJson = JSON.parse(rpcData.response.raw_json);
65
+ }
66
+ catch {
67
+ responseJson = rpcData.response.raw_json;
68
+ }
69
+ }
70
+ // Build payload
71
+ const rawPayload = {
72
+ ref: {
73
+ kind: ref.kind,
74
+ connector: ref.connector,
75
+ session: ref.session,
76
+ rpc: ref.rpc,
77
+ proto: ref.proto,
78
+ level: ref.level,
79
+ captured_at: ref.captured_at,
80
+ },
81
+ rpc: {
82
+ request: requestJson,
83
+ response: responseJson,
84
+ method: rpcData.rpc.method,
85
+ },
86
+ meta: {
87
+ source: 'proofscan',
88
+ proto: ref.proto || 'mcp',
89
+ captured_at: ref.captured_at || rpcData.rpc.request_ts,
90
+ replay: false,
91
+ },
92
+ };
93
+ // Redact secrets
94
+ const { value: redactedPayload, count } = redactForInscribe(rawPayload);
95
+ return {
96
+ payload: redactedPayload,
97
+ redactedCount: count,
98
+ };
99
+ }
100
+ /**
101
+ * Build payload from stdin JSON (show --json output)
102
+ *
103
+ * Expected format: RPC detail JSON with request_json/response_json
104
+ */
105
+ function buildPayloadFromStdin(stdinJson) {
106
+ let parsed;
107
+ try {
108
+ parsed = JSON.parse(stdinJson);
109
+ }
110
+ catch {
111
+ return { error: 'Invalid JSON input' };
112
+ }
113
+ if (!parsed || typeof parsed !== 'object') {
114
+ return { error: 'Input must be a JSON object' };
115
+ }
116
+ const data = parsed;
117
+ // Check if this is RPC detail JSON (has request_json/response_json)
118
+ if (!('request_json' in data)) {
119
+ // Check if it's a RefStruct (only has kind, connector, session, etc.)
120
+ if ('kind' in data && !('rpc' in data && typeof data.rpc === 'object')) {
121
+ return {
122
+ error: 'RefStruct input not supported for inscribe. Use: show @rpc:<id> --json | inscribe',
123
+ };
124
+ }
125
+ return { error: 'Input must be RPC detail JSON (use: show @rpc:<id> --json)' };
126
+ }
127
+ // Extract required fields
128
+ const rpcId = data.rpc_id;
129
+ const sessionId = data.session_id;
130
+ const connectorId = data.connector_id;
131
+ const method = data.method;
132
+ const requestTs = data.request_ts;
133
+ if (!method) {
134
+ return { error: 'Missing method in RPC detail JSON' };
135
+ }
136
+ // Build ref
137
+ const ref = {
138
+ kind: 'rpc',
139
+ connector: connectorId,
140
+ session: sessionId,
141
+ rpc: rpcId,
142
+ proto: 'mcp',
143
+ captured_at: requestTs || new Date().toISOString(),
144
+ };
145
+ // Build payload
146
+ const rawPayload = {
147
+ ref,
148
+ rpc: {
149
+ request: data.request_json,
150
+ response: data.response_json ?? null,
151
+ method,
152
+ },
153
+ meta: {
154
+ source: 'proofscan',
155
+ proto: 'mcp',
156
+ captured_at: requestTs || new Date().toISOString(),
157
+ replay: false,
158
+ },
159
+ };
160
+ // Redact secrets
161
+ const { value: redactedPayload, count } = redactForInscribe(rawPayload);
162
+ return {
163
+ payload: redactedPayload,
164
+ redactedCount: count,
165
+ };
166
+ }
167
+ /**
168
+ * Parse inscribe receipt from MCP response
169
+ *
170
+ * inscribe-mcp returns: { content: [{ type: 'text', text: JSON.stringify(result) }] }
171
+ */
172
+ function parseReceipt(content) {
173
+ if (!content || !Array.isArray(content) || content.length === 0) {
174
+ return { receipt: { success: false }, raw: 'Empty response' };
175
+ }
176
+ const firstItem = content[0];
177
+ if (firstItem?.type !== 'text' || !firstItem.text) {
178
+ return { receipt: { success: false }, raw: JSON.stringify(content) };
179
+ }
180
+ try {
181
+ const parsed = JSON.parse(firstItem.text);
182
+ return { receipt: parsed };
183
+ }
184
+ catch {
185
+ return { receipt: { success: false }, raw: firstItem.text };
186
+ }
187
+ }
188
+ /**
189
+ * Handle 'inscribe' command
190
+ */
191
+ export async function handleInscribe(args, context, configPath, stdinData) {
192
+ const isJson = args.includes('--json');
193
+ const isDryRun = args.includes('--dry-run');
194
+ const target = args.find(a => !a.startsWith('-'));
195
+ // Handle stdin input (pipe mode)
196
+ if (stdinData) {
197
+ await handleInscribeFromStdin(stdinData, configPath, isJson, isDryRun);
198
+ return;
199
+ }
200
+ // Require target reference
201
+ if (!target) {
202
+ printInfo('Usage: inscribe <@ref> [options]');
203
+ printInfo('');
204
+ printInfo('Inscribe RPC call details to blockchain:');
205
+ printInfo(' inscribe @rpc:<id> Inscribe specific RPC');
206
+ printInfo(' inscribe @ref:<name> Inscribe from saved reference');
207
+ printInfo(' inscribe @last Inscribe latest RPC');
208
+ printInfo('');
209
+ printInfo('Pipe mode:');
210
+ printInfo(' show @rpc:<id> --json | inscribe');
211
+ printInfo('');
212
+ printInfo('Options:');
213
+ printInfo(' --dry-run Show payload without sending');
214
+ printInfo(' --json Output receipt as JSON');
215
+ return;
216
+ }
217
+ // Validate target is a reference
218
+ if (!isRef(target)) {
219
+ printError(`Not a valid reference: ${target}`);
220
+ printInfo('Use: @rpc:<id>, @ref:<name>, or @last');
221
+ return;
222
+ }
223
+ await handleInscribeFromRef(target, context, configPath, isJson, isDryRun);
224
+ }
225
+ /**
226
+ * Handle inscribe from reference target
227
+ */
228
+ async function handleInscribeFromRef(refString, context, configPath, isJson, isDryRun) {
229
+ const manager = new ConfigManager(configPath);
230
+ const eventsStore = new EventsStore(manager.getConfigDir());
231
+ const dataProvider = createRefDataProvider(eventsStore);
232
+ const resolver = new RefResolver(dataProvider);
233
+ // Resolve the reference
234
+ const parsed = parseRef(refString);
235
+ let rpcId;
236
+ let sessionId;
237
+ let connectorId;
238
+ if (parsed.type === 'last') {
239
+ const result = resolver.resolveLast(context);
240
+ if (!result.success || !result.ref) {
241
+ printError(result.error || 'Failed to resolve @last');
242
+ return;
243
+ }
244
+ if (result.ref.kind !== 'rpc' || !result.ref.rpc) {
245
+ printError('@last did not resolve to an RPC call');
246
+ printInfo('Only RPC references can be inscribed. Use: show @rpc:<id> to locate an RPC');
247
+ return;
248
+ }
249
+ rpcId = result.ref.rpc;
250
+ sessionId = result.ref.session;
251
+ connectorId = result.ref.connector;
252
+ }
253
+ else if (parsed.type === 'rpc' && parsed.id) {
254
+ rpcId = parsed.id;
255
+ sessionId = context.session;
256
+ connectorId = context.connector;
257
+ }
258
+ else if (parsed.type === 'ref' && parsed.id) {
259
+ const result = resolver.resolveUserRef(parsed.id);
260
+ if (!result.success || !result.ref) {
261
+ printError(result.error || `Failed to resolve @ref:${parsed.id}`);
262
+ return;
263
+ }
264
+ if (result.ref.kind !== 'rpc' || !result.ref.rpc) {
265
+ printError(`Reference @ref:${parsed.id} is not an RPC reference`);
266
+ printInfo('Only RPC references can be inscribed.');
267
+ return;
268
+ }
269
+ rpcId = result.ref.rpc;
270
+ sessionId = result.ref.session;
271
+ connectorId = result.ref.connector;
272
+ }
273
+ else if (parsed.type === 'session') {
274
+ printError('Cannot inscribe a session directly');
275
+ printInfo('Only RPC references can be inscribed. Hint: use show to locate an RPC, then inscribe @rpc:<id>');
276
+ return;
277
+ }
278
+ else {
279
+ printError(`Cannot inscribe from reference: ${refString}`);
280
+ printInfo('Supported: @last, @rpc:<id>, @ref:<name>');
281
+ return;
282
+ }
283
+ // Validate rpcId is set
284
+ if (!rpcId) {
285
+ printError('Failed to resolve RPC ID from reference');
286
+ return;
287
+ }
288
+ // Get RPC data
289
+ const rpcData = eventsStore.getRpcWithEvents(rpcId, sessionId);
290
+ if (!rpcData) {
291
+ printError(`RPC not found: ${rpcId}`);
292
+ return;
293
+ }
294
+ // Build ref structure
295
+ const ref = {
296
+ kind: 'rpc',
297
+ connector: connectorId,
298
+ session: rpcData.rpc.session_id,
299
+ rpc: rpcId,
300
+ proto: context.proto || 'mcp',
301
+ captured_at: rpcData.rpc.request_ts,
302
+ };
303
+ // Build payload
304
+ const { payload, redactedCount } = buildPayload(ref, rpcData);
305
+ console.log();
306
+ printInfo(`Inscribing: ${rpcData.rpc.method}`);
307
+ printInfo(`RPC: ${rpcId.slice(0, 8)}`);
308
+ if (redactedCount > 0) {
309
+ printInfo(`Secrets redacted: ${redactedCount}`);
310
+ }
311
+ if (isDryRun) {
312
+ console.log();
313
+ printInfo('Dry run - payload:');
314
+ console.log(JSON.stringify(payload, null, 2));
315
+ return;
316
+ }
317
+ // Send to inscriber
318
+ await sendToInscriber(payload, configPath, eventsStore, isJson);
319
+ }
320
+ /**
321
+ * Handle inscribe from stdin JSON
322
+ */
323
+ async function handleInscribeFromStdin(stdinJson, configPath, isJson, isDryRun) {
324
+ const result = buildPayloadFromStdin(stdinJson);
325
+ if ('error' in result) {
326
+ printError(result.error);
327
+ return;
328
+ }
329
+ const { payload, redactedCount } = result;
330
+ console.log();
331
+ printInfo(`Inscribing: ${payload.rpc.method}`);
332
+ if (payload.ref.rpc) {
333
+ printInfo(`RPC: ${payload.ref.rpc.slice(0, 8)}`);
334
+ }
335
+ if (redactedCount > 0) {
336
+ printInfo(`Secrets redacted: ${redactedCount}`);
337
+ }
338
+ if (isDryRun) {
339
+ console.log();
340
+ printInfo('Dry run - payload:');
341
+ console.log(JSON.stringify(payload, null, 2));
342
+ return;
343
+ }
344
+ const manager = new ConfigManager(configPath);
345
+ const eventsStore = new EventsStore(manager.getConfigDir());
346
+ await sendToInscriber(payload, configPath, eventsStore, isJson);
347
+ }
348
+ /**
349
+ * Send payload to inscriber connector
350
+ */
351
+ async function sendToInscriber(payload, configPath, eventsStore, isJson) {
352
+ const manager = new ConfigManager(configPath);
353
+ const config = await manager.load();
354
+ // Get inscriber config
355
+ const inscriberConfig = config.inscriber || {};
356
+ const inscriberConnectorId = inscriberConfig.connectorId || DEFAULT_INSCRIBER_CONNECTOR;
357
+ const inscriberToolName = inscriberConfig.toolName || DEFAULT_INSCRIBER_TOOL;
358
+ const inscriptionType = inscriberConfig.type || DEFAULT_INSCRIPTION_TYPE;
359
+ // Get inscriber connector
360
+ const connector = await getConnector(configPath, inscriberConnectorId);
361
+ if (!connector) {
362
+ printError(`Inscriber connector not found: ${inscriberConnectorId}`);
363
+ printInfo('Configure inscriber in config file:');
364
+ printInfo(' inscriber:');
365
+ printInfo(' connectorId: inscribe');
366
+ printInfo('Or add a connector with id "inscribe"');
367
+ return;
368
+ }
369
+ if (!connector.enabled) {
370
+ printError(`Inscriber connector is disabled: ${inscriberConnectorId}`);
371
+ printInfo(`Enable it with: pfscan connectors enable --id ${inscriberConnectorId}`);
372
+ return;
373
+ }
374
+ const ctx = {
375
+ connectorId: inscriberConnectorId,
376
+ configDir: manager.getConfigDir(),
377
+ };
378
+ // Check if tool exists
379
+ printInfo('Connecting to inscriber...');
380
+ const toolsResult = await listTools(ctx, connector, { timeout: 30 });
381
+ if (toolsResult.error) {
382
+ printError(`Failed to connect to inscriber: ${toolsResult.error}`);
383
+ return;
384
+ }
385
+ const tool = toolsResult.tools.find(t => t.name === inscriberToolName);
386
+ if (!tool) {
387
+ printError(`Tool not found on inscriber: ${inscriberToolName}`);
388
+ if (toolsResult.tools.length > 0) {
389
+ printInfo('Available tools:');
390
+ for (const t of toolsResult.tools) {
391
+ printInfo(` ${t.name}`);
392
+ }
393
+ }
394
+ return;
395
+ }
396
+ // Call inscribe tool
397
+ printInfo('Inscribing...');
398
+ // Record outgoing event (return value intentionally unused - event is persisted)
399
+ eventsStore.saveEvent(toolsResult.sessionId, 'client_to_server', 'request', {
400
+ summary: `inscribe: ${payload.rpc.method}`,
401
+ rawJson: JSON.stringify({
402
+ tool: inscriberToolName,
403
+ args: {
404
+ content: '<payload>',
405
+ type: inscriptionType,
406
+ },
407
+ }),
408
+ });
409
+ const callResult = await callTool(ctx, connector, inscriberToolName, {
410
+ content: JSON.stringify(payload),
411
+ type: inscriptionType,
412
+ });
413
+ if (!callResult.success) {
414
+ printError(`Inscription failed: ${callResult.error}`);
415
+ // Record error response
416
+ eventsStore.saveEvent(callResult.sessionId, 'server_to_client', 'response', {
417
+ summary: `inscribe error: ${callResult.error}`,
418
+ rawJson: JSON.stringify({ error: callResult.error }),
419
+ });
420
+ return;
421
+ }
422
+ // Parse receipt
423
+ const { receipt, raw } = parseReceipt(callResult.content || []);
424
+ // Record success response
425
+ eventsStore.saveEvent(callResult.sessionId, 'server_to_client', 'response', {
426
+ summary: `inscribe ${receipt.success ? 'success' : 'failed'}${receipt.inscription_id ? `: ${receipt.inscription_id}` : ''}`,
427
+ rawJson: JSON.stringify(receipt),
428
+ });
429
+ // Display result
430
+ console.log();
431
+ if (receipt.success) {
432
+ printSuccess('Inscription successful!');
433
+ }
434
+ else {
435
+ printError('Inscription returned non-success status');
436
+ }
437
+ if (isJson) {
438
+ console.log(JSON.stringify(receipt, null, 2));
439
+ }
440
+ else {
441
+ const isTTY = process.stdout.isTTY;
442
+ if (receipt.inscription_id) {
443
+ console.log(`${dimText('Inscription ID:', isTTY)} ${receipt.inscription_id}`);
444
+ }
445
+ if (receipt.verify_url) {
446
+ console.log(`${dimText('Verify URL:', isTTY)} ${receipt.verify_url}`);
447
+ }
448
+ if (raw) {
449
+ console.log(`${dimText('Raw response:', isTTY)} ${raw}`);
450
+ }
451
+ // Show other fields
452
+ for (const [key, value] of Object.entries(receipt)) {
453
+ if (!['success', 'inscription_id', 'verify_url'].includes(key)) {
454
+ console.log(`${dimText(key + ':', isTTY)} ${JSON.stringify(value)}`);
455
+ }
456
+ }
457
+ }
458
+ console.log();
459
+ printInfo(`Session: ${callResult.sessionId.slice(0, 8)}`);
460
+ }
461
+ //# sourceMappingURL=inscribe-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inscribe-commands.js","sourceRoot":"","sources":["../../src/shell/inscribe-commands.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"}