proofscan 0.8.2 → 0.9.1
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.
- package/dist/commands/connectors.d.ts.map +1 -1
- package/dist/commands/connectors.js +91 -20
- package/dist/commands/connectors.js.map +1 -1
- package/dist/config/import.d.ts +12 -0
- package/dist/config/import.d.ts.map +1 -1
- package/dist/config/import.js +73 -0
- package/dist/config/import.js.map +1 -1
- package/dist/shell/inscribe-commands.d.ts +32 -0
- package/dist/shell/inscribe-commands.d.ts.map +1 -0
- package/dist/shell/inscribe-commands.js +461 -0
- package/dist/shell/inscribe-commands.js.map +1 -0
- package/dist/shell/repl.d.ts +11 -1
- package/dist/shell/repl.d.ts.map +1 -1
- package/dist/shell/repl.js +66 -7
- package/dist/shell/repl.js.map +1 -1
- package/dist/shell/router-commands.d.ts +9 -0
- package/dist/shell/router-commands.d.ts.map +1 -1
- package/dist/shell/router-commands.js +84 -1
- package/dist/shell/router-commands.js.map +1 -1
- package/dist/shell/types.d.ts +5 -0
- package/dist/shell/types.d.ts.map +1 -1
- package/dist/shell/types.js +5 -0
- package/dist/shell/types.js.map +1 -1
- package/dist/types/config.d.ts +13 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js.map +1 -1
- package/package.json +1 -1
|
@@ -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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"}
|
package/dist/shell/repl.d.ts
CHANGED
|
@@ -79,9 +79,19 @@ export declare class ShellRepl {
|
|
|
79
79
|
private parsePipe;
|
|
80
80
|
/**
|
|
81
81
|
* Handle piped commands
|
|
82
|
-
*
|
|
82
|
+
* Supports:
|
|
83
|
+
* pwd --json | ref add <name>
|
|
84
|
+
* show @rpc:<id> --json | inscribe
|
|
83
85
|
*/
|
|
84
86
|
private handlePipe;
|
|
87
|
+
/**
|
|
88
|
+
* Handle: show --json | inscribe
|
|
89
|
+
*/
|
|
90
|
+
private handlePipeToInscribe;
|
|
91
|
+
/**
|
|
92
|
+
* Handle: pwd --json | ref add <name>
|
|
93
|
+
*/
|
|
94
|
+
private handlePipeToRefAdd;
|
|
85
95
|
/**
|
|
86
96
|
* Execute a pfscan command
|
|
87
97
|
*/
|
package/dist/shell/repl.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../../src/shell/repl.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../../src/shell/repl.ts"],"names":[],"mappings":"AAAA;;GAEG;AAyCH;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAG/C;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAwBrF;AAUD;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,EAAE,CAAmC;IAC7C,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAS;IAGxB,OAAO,CAAC,eAAe,CAAqC;IAC5D,OAAO,CAAC,aAAa,CAAgD;IACrE,OAAO,CAAC,SAAS,CAAgD;gBAErD,UAAU,EAAE,MAAM;IAY9B;;OAEG;IACH,OAAO,CAAC,eAAe;IAMvB;;OAEG;IACH,OAAO,CAAC,eAAe;IAwDvB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA4D5B;;OAEG;YACW,WAAW;IAiEzB;;OAEG;YACW,mBAAmB;IAkBjC;;OAEG;YACW,aAAa;IAiC3B;;OAEG;IACH,OAAO,CAAC,QAAQ;IAsEhB;;OAEG;IACH,OAAO,CAAC,WAAW;IAQnB;;OAEG;YACW,SAAS;IA+IvB;;OAEG;IACH,OAAO,CAAC,YAAY;IAOpB;;OAEG;IACH,OAAO,CAAC,SAAS;IAIjB;;;;;OAKG;YACW,UAAU;IA8BxB;;OAEG;YACW,oBAAoB;IAmClC;;OAEG;YACW,kBAAkB;IAkChC;;OAEG;YACW,cAAc;CAuE7B"}
|
package/dist/shell/repl.js
CHANGED
|
@@ -15,6 +15,7 @@ import { ConfigManager } from '../config/index.js';
|
|
|
15
15
|
import { getCurrentSession, setCurrentSession, clearCurrentSession, } from '../utils/state.js';
|
|
16
16
|
import { handleTool, handleSend } from './tool-commands.js';
|
|
17
17
|
import { handleRef } from './ref-commands.js';
|
|
18
|
+
import { handleInscribe } from './inscribe-commands.js';
|
|
18
19
|
// Cache TTL in milliseconds (5 seconds)
|
|
19
20
|
const CACHE_TTL_MS = 5000;
|
|
20
21
|
/**
|
|
@@ -238,6 +239,11 @@ export class ShellRepl {
|
|
|
238
239
|
await handleRef(args, this.context, this.configPath);
|
|
239
240
|
return;
|
|
240
241
|
}
|
|
242
|
+
// Handle inscribe command (shell-native, Phase 4.3)
|
|
243
|
+
if (command === 'inscribe') {
|
|
244
|
+
await handleInscribe(args, this.context, this.configPath);
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
241
247
|
// Handle built-in commands
|
|
242
248
|
if (SHELL_BUILTINS.includes(command)) {
|
|
243
249
|
await this.handleBuiltin(command, args);
|
|
@@ -350,6 +356,12 @@ Tool Commands:
|
|
|
350
356
|
send @last Replay last RPC call
|
|
351
357
|
send @ref:<name> Replay from saved reference
|
|
352
358
|
|
|
359
|
+
Inscribe Commands:
|
|
360
|
+
inscribe @rpc:<id> Inscribe RPC to blockchain
|
|
361
|
+
inscribe @ref:<name> Inscribe from saved reference
|
|
362
|
+
inscribe @last Inscribe latest RPC
|
|
363
|
+
show @rpc:<id> --json | inscribe Inscribe via pipe
|
|
364
|
+
|
|
353
365
|
Shell Commands:
|
|
354
366
|
help [command] Show help
|
|
355
367
|
clear Clear screen
|
|
@@ -520,7 +532,9 @@ Tips:
|
|
|
520
532
|
}
|
|
521
533
|
/**
|
|
522
534
|
* Handle piped commands
|
|
523
|
-
*
|
|
535
|
+
* Supports:
|
|
536
|
+
* pwd --json | ref add <name>
|
|
537
|
+
* show @rpc:<id> --json | inscribe
|
|
524
538
|
*/
|
|
525
539
|
async handlePipe(leftCmd, rightCmd) {
|
|
526
540
|
const leftTokens = leftCmd.split(/\s+/).filter(t => t !== '');
|
|
@@ -529,16 +543,61 @@ Tips:
|
|
|
529
543
|
printError('Invalid pipe syntax');
|
|
530
544
|
return;
|
|
531
545
|
}
|
|
532
|
-
// Currently only support: pwd --json | ref add <name>
|
|
533
546
|
const leftCommand = leftTokens[0];
|
|
534
547
|
const rightCommand = rightTokens[0];
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
548
|
+
// Handle: show --json | inscribe
|
|
549
|
+
if (rightCommand === 'inscribe') {
|
|
550
|
+
await this.handlePipeToInscribe(leftTokens, rightTokens);
|
|
551
|
+
return;
|
|
552
|
+
}
|
|
553
|
+
// Handle: pwd --json | ref add <name>
|
|
554
|
+
if (rightCommand === 'ref' && rightTokens[1] === 'add') {
|
|
555
|
+
await this.handlePipeToRefAdd(leftTokens, rightTokens);
|
|
556
|
+
return;
|
|
557
|
+
}
|
|
558
|
+
printError('Unsupported pipe command');
|
|
559
|
+
printInfo('Supported pipes:');
|
|
560
|
+
printInfo(' pwd --json | ref add <name>');
|
|
561
|
+
printInfo(' show @rpc:<id> --json | inscribe');
|
|
562
|
+
}
|
|
563
|
+
/**
|
|
564
|
+
* Handle: show --json | inscribe
|
|
565
|
+
*/
|
|
566
|
+
async handlePipeToInscribe(leftTokens, rightTokens) {
|
|
567
|
+
const leftCommand = leftTokens[0];
|
|
568
|
+
// Validate left side is show --json
|
|
569
|
+
if (leftCommand !== 'show' || !leftTokens.includes('--json')) {
|
|
570
|
+
printError('Pipe to inscribe requires: show <@ref> --json');
|
|
571
|
+
printInfo('Example: show @rpc:1 --json | inscribe');
|
|
572
|
+
return;
|
|
573
|
+
}
|
|
574
|
+
// Get target reference from show command
|
|
575
|
+
const target = leftTokens.find(t => t.startsWith('@'));
|
|
576
|
+
if (!target) {
|
|
577
|
+
printError('show command requires a reference target');
|
|
578
|
+
printInfo('Example: show @rpc:1 --json | inscribe');
|
|
579
|
+
return;
|
|
580
|
+
}
|
|
581
|
+
// Get RPC detail JSON by calling show internally
|
|
582
|
+
const { getRpcDetailJson } = await import('./router-commands.js');
|
|
583
|
+
const { ConfigManager } = await import('../config/index.js');
|
|
584
|
+
const manager = new ConfigManager(this.configPath);
|
|
585
|
+
const jsonOutput = await getRpcDetailJson(target, this.context, manager.getConfigDir());
|
|
586
|
+
if (!jsonOutput) {
|
|
587
|
+
printError('Failed to get RPC detail for inscribe');
|
|
538
588
|
return;
|
|
539
589
|
}
|
|
540
|
-
|
|
541
|
-
|
|
590
|
+
// Call inscribe with JSON as stdin data
|
|
591
|
+
const inscribeArgs = rightTokens.slice(1); // args after 'inscribe'
|
|
592
|
+
await handleInscribe(inscribeArgs, this.context, this.configPath, jsonOutput);
|
|
593
|
+
}
|
|
594
|
+
/**
|
|
595
|
+
* Handle: pwd --json | ref add <name>
|
|
596
|
+
*/
|
|
597
|
+
async handlePipeToRefAdd(leftTokens, rightTokens) {
|
|
598
|
+
const leftCommand = leftTokens[0];
|
|
599
|
+
if (leftCommand !== 'pwd' || !leftTokens.includes('--json')) {
|
|
600
|
+
printError('Pipe source must be: pwd --json');
|
|
542
601
|
printInfo('Example: pwd --json | ref add myref');
|
|
543
602
|
return;
|
|
544
603
|
}
|