@tokenrip/cli 1.1.8 → 1.2.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.
- package/AGENTS.md +9 -2
- package/README.md +31 -584
- package/SKILL.md +14 -2
- package/dist/cjs/client.js +9 -3
- package/dist/cjs/client.js.map +1 -1
- package/dist/cjs/commands/auth.js +2 -1
- package/dist/cjs/commands/auth.js.map +1 -1
- package/dist/cjs/commands/collection.js +4 -5
- package/dist/cjs/commands/collection.js.map +1 -1
- package/dist/cjs/commands/config.js +15 -0
- package/dist/cjs/commands/config.js.map +1 -1
- package/dist/cjs/commands/msg.js +2 -1
- package/dist/cjs/commands/msg.js.map +1 -1
- package/dist/cjs/commands/operator-link.js +75 -7
- package/dist/cjs/commands/operator-link.js.map +1 -1
- package/dist/cjs/commands/publish.js +56 -9
- package/dist/cjs/commands/publish.js.map +1 -1
- package/dist/cjs/commands/share.js +1 -1
- package/dist/cjs/commands/share.js.map +1 -1
- package/dist/cjs/commands/thread.js +19 -12
- package/dist/cjs/commands/thread.js.map +1 -1
- package/dist/cjs/commands/tour.js +60 -0
- package/dist/cjs/commands/tour.js.map +1 -0
- package/dist/cjs/commands/update.js +1 -1
- package/dist/cjs/commands/update.js.map +1 -1
- package/dist/cjs/commands/upload.js +3 -2
- package/dist/cjs/commands/upload.js.map +1 -1
- package/dist/cjs/config.js +18 -2
- package/dist/cjs/config.js.map +1 -1
- package/dist/cjs/formatters.js +22 -6
- package/dist/cjs/formatters.js.map +1 -1
- package/dist/cjs/json.js +30 -0
- package/dist/cjs/json.js.map +1 -0
- package/dist/cjs/output.js +15 -5
- package/dist/cjs/output.js.map +1 -1
- package/dist/cjs/refs.js +21 -0
- package/dist/cjs/refs.js.map +1 -0
- package/dist/cjs/state.js +1 -0
- package/dist/cjs/state.js.map +1 -1
- package/dist/cjs/tour/agent-script.js +34 -0
- package/dist/cjs/tour/agent-script.js.map +1 -0
- package/dist/cjs/tour/state.js +39 -0
- package/dist/cjs/tour/state.js.map +1 -0
- package/dist/cjs/tour/steps.js +132 -0
- package/dist/cjs/tour/steps.js.map +1 -0
- package/dist/cli.js +58 -21
- package/dist/cli.js.map +1 -1
- package/dist/client.js +9 -3
- package/dist/client.js.map +1 -1
- package/dist/commands/auth.js +2 -1
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/collection.js +4 -5
- package/dist/commands/collection.js.map +1 -1
- package/dist/commands/config.d.ts +1 -0
- package/dist/commands/config.js +15 -1
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/msg.js +2 -1
- package/dist/commands/msg.js.map +1 -1
- package/dist/commands/operator-link.d.ts +10 -0
- package/dist/commands/operator-link.js +75 -9
- package/dist/commands/operator-link.js.map +1 -1
- package/dist/commands/publish.d.ts +2 -1
- package/dist/commands/publish.js +56 -9
- package/dist/commands/publish.js.map +1 -1
- package/dist/commands/share.js +2 -2
- package/dist/commands/share.js.map +1 -1
- package/dist/commands/thread.d.ts +3 -0
- package/dist/commands/thread.js +20 -13
- package/dist/commands/thread.js.map +1 -1
- package/dist/commands/tour.d.ts +5 -0
- package/dist/commands/tour.js +55 -0
- package/dist/commands/tour.js.map +1 -0
- package/dist/commands/update.js +1 -1
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/upload.js +3 -2
- package/dist/commands/upload.js.map +1 -1
- package/dist/config.d.ts +2 -1
- package/dist/config.js +18 -2
- package/dist/config.js.map +1 -1
- package/dist/formatters.js +22 -6
- package/dist/formatters.js.map +1 -1
- package/dist/json.d.ts +3 -0
- package/dist/json.js +25 -0
- package/dist/json.js.map +1 -0
- package/dist/output.d.ts +1 -0
- package/dist/output.js +14 -5
- package/dist/output.js.map +1 -1
- package/dist/refs.d.ts +5 -0
- package/dist/refs.js +18 -0
- package/dist/refs.js.map +1 -0
- package/dist/state.js +1 -0
- package/dist/state.js.map +1 -1
- package/dist/tour/agent-script.d.ts +1 -0
- package/dist/tour/agent-script.js +31 -0
- package/dist/tour/agent-script.js.map +1 -0
- package/dist/tour/state.d.ts +10 -0
- package/dist/tour/state.js +30 -0
- package/dist/tour/state.js.map +1 -0
- package/dist/tour/steps.d.ts +21 -0
- package/dist/tour/steps.js +128 -0
- package/dist/tour/steps.js.map +1 -0
- package/package.json +4 -4
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
import { createHttpClient } from '../client.js';
|
|
2
|
+
export interface OperatorLinkIssue {
|
|
3
|
+
code: string;
|
|
4
|
+
message: string;
|
|
5
|
+
}
|
|
1
6
|
export declare function operatorLink(options: {
|
|
2
7
|
expires?: string;
|
|
3
8
|
}): Promise<void>;
|
|
9
|
+
export declare function shouldRecoverLinkCodeError(error: unknown): boolean;
|
|
10
|
+
export declare function recoverAuthClient(agentId: string, secretKey: string, apiUrl: string): Promise<{
|
|
11
|
+
client: ReturnType<typeof createHttpClient>;
|
|
12
|
+
warning: OperatorLinkIssue | null;
|
|
13
|
+
}>;
|
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto';
|
|
2
2
|
import { loadIdentity } from '../identity.js';
|
|
3
3
|
import { signPayload } from '../crypto.js';
|
|
4
|
-
import { getFrontendUrl } from '../config.js';
|
|
4
|
+
import { getFrontendUrl, loadConfig, saveConfig } from '../config.js';
|
|
5
5
|
import { requireAuthClient } from '../auth-client.js';
|
|
6
|
-
import { CliError } from '../errors.js';
|
|
6
|
+
import { CliError, toCliError } from '../errors.js';
|
|
7
7
|
import { outputSuccess } from '../output.js';
|
|
8
|
+
import { createHttpClient } from '../client.js';
|
|
8
9
|
import { parseDuration } from './share.js';
|
|
9
10
|
export async function operatorLink(options) {
|
|
10
11
|
const identity = loadIdentity();
|
|
11
12
|
if (!identity) {
|
|
12
13
|
throw new CliError('NO_IDENTITY', 'No agent identity found. Run `rip auth register` first.');
|
|
13
14
|
}
|
|
14
|
-
const
|
|
15
|
-
|
|
15
|
+
const auth = requireAuthClient();
|
|
16
|
+
let client = auth.client;
|
|
17
|
+
const frontendUrl = getFrontendUrl(auth.config);
|
|
16
18
|
// Generate signed link (local, no server call)
|
|
17
19
|
const exp = options.expires
|
|
18
20
|
? parseDuration(options.expires)
|
|
@@ -21,23 +23,41 @@ export async function operatorLink(options) {
|
|
|
21
23
|
const url = `${frontendUrl}/operator/auth?token=${encodeURIComponent(token)}`;
|
|
22
24
|
// Generate short code (server call, for MCP auth / cross-device)
|
|
23
25
|
let code = null;
|
|
24
|
-
let
|
|
26
|
+
let codeError = null;
|
|
27
|
+
let warning = null;
|
|
25
28
|
try {
|
|
26
|
-
const { data } = await client
|
|
29
|
+
const { data } = await createLinkCode(client);
|
|
27
30
|
code = data.data.code;
|
|
28
|
-
codeExpiresAt = data.data.expires_at;
|
|
29
31
|
}
|
|
30
|
-
catch {
|
|
31
|
-
|
|
32
|
+
catch (initialError) {
|
|
33
|
+
if (shouldRecoverLinkCodeError(initialError)) {
|
|
34
|
+
try {
|
|
35
|
+
const recovered = await recoverAuthClient(identity.agentId, identity.secretKey, auth.apiUrl);
|
|
36
|
+
client = recovered.client;
|
|
37
|
+
warning = recovered.warning;
|
|
38
|
+
const { data } = await createLinkCode(client);
|
|
39
|
+
code = data.data.code;
|
|
40
|
+
}
|
|
41
|
+
catch (retryError) {
|
|
42
|
+
codeError = getErrorDetails(retryError);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
codeError = getErrorDetails(initialError);
|
|
47
|
+
}
|
|
32
48
|
}
|
|
33
49
|
const expiresAt = new Date(exp * 1000).toISOString();
|
|
34
50
|
outputSuccess({
|
|
35
51
|
url,
|
|
36
52
|
code,
|
|
53
|
+
code_error: codeError,
|
|
54
|
+
warning,
|
|
37
55
|
agent_id: identity.agentId,
|
|
38
56
|
expires_at: expiresAt,
|
|
39
57
|
...(code && { link_page: `${frontendUrl}/link` }),
|
|
40
58
|
}, (data) => {
|
|
59
|
+
const codeError = data.code_error;
|
|
60
|
+
const warning = data.warning;
|
|
41
61
|
const lines = [
|
|
42
62
|
'',
|
|
43
63
|
`Operator link for ${data.agent_id}:`,
|
|
@@ -50,9 +70,55 @@ export async function operatorLink(options) {
|
|
|
50
70
|
lines.push(`Enter at ${data.link_page} — expires in 10 minutes`);
|
|
51
71
|
lines.push('');
|
|
52
72
|
}
|
|
73
|
+
else if (codeError?.message) {
|
|
74
|
+
lines.push(`Link code unavailable: ${codeError.message}`);
|
|
75
|
+
lines.push('');
|
|
76
|
+
}
|
|
77
|
+
if (warning?.message) {
|
|
78
|
+
lines.push(`Warning: ${warning.message}`);
|
|
79
|
+
lines.push('');
|
|
80
|
+
}
|
|
53
81
|
lines.push(`Expires: ${data.expires_at}`);
|
|
54
82
|
lines.push('');
|
|
55
83
|
return lines.join('\n');
|
|
56
84
|
});
|
|
57
85
|
}
|
|
86
|
+
async function createLinkCode(client) {
|
|
87
|
+
return client.post('/v0/auth/link-code');
|
|
88
|
+
}
|
|
89
|
+
export function shouldRecoverLinkCodeError(error) {
|
|
90
|
+
const cliError = toCliError(error);
|
|
91
|
+
return cliError.code === 'UNAUTHORIZED';
|
|
92
|
+
}
|
|
93
|
+
export async function recoverAuthClient(agentId, secretKey, apiUrl) {
|
|
94
|
+
const exp = Math.floor(Date.now() / 1000) + 300;
|
|
95
|
+
const token = signPayload({ sub: 'key-recovery', iss: agentId, exp, jti: randomUUID() }, secretKey);
|
|
96
|
+
const recoveryClient = createHttpClient({ baseUrl: apiUrl });
|
|
97
|
+
const { data } = await recoveryClient.post('/v0/agents/recover-key', { token });
|
|
98
|
+
const apiKey = data.data.api_key;
|
|
99
|
+
let warning = null;
|
|
100
|
+
try {
|
|
101
|
+
const config = loadConfig();
|
|
102
|
+
config.apiKey = apiKey;
|
|
103
|
+
saveConfig(config);
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
const details = error instanceof Error ? error.message : String(error);
|
|
107
|
+
warning = {
|
|
108
|
+
code: 'KEY_SAVE_FAILED',
|
|
109
|
+
message: `Recovered a replacement API key but could not save it locally (${details}).`,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
return {
|
|
113
|
+
client: createHttpClient({ baseUrl: apiUrl, apiKey }),
|
|
114
|
+
warning,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
function getErrorDetails(error) {
|
|
118
|
+
const cliError = toCliError(error);
|
|
119
|
+
return {
|
|
120
|
+
code: cliError.code || 'UNKNOWN_ERROR',
|
|
121
|
+
message: cliError.message,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
58
124
|
//# sourceMappingURL=operator-link.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operator-link.js","sourceRoot":"","sources":["../../src/commands/operator-link.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"operator-link.js","sourceRoot":"","sources":["../../src/commands/operator-link.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/publish.js
CHANGED
|
@@ -4,11 +4,58 @@ import { requireAuthClient } from '../auth-client.js';
|
|
|
4
4
|
import { CliError } from '../errors.js';
|
|
5
5
|
import { outputSuccess } from '../output.js';
|
|
6
6
|
import { formatAssetCreated } from '../formatters.js';
|
|
7
|
+
import { parseJsonOption } from '../json.js';
|
|
8
|
+
import { getFrontendUrl } from '../config.js';
|
|
7
9
|
const VALID_TYPES = ['markdown', 'html', 'chart', 'code', 'text', 'json', 'collection', 'csv'];
|
|
8
10
|
export async function publish(filePath, options) {
|
|
9
11
|
if (!VALID_TYPES.includes(options.type)) {
|
|
10
12
|
throw new CliError('INVALID_TYPE', `Type must be one of: ${VALID_TYPES.join(', ')}`);
|
|
11
13
|
}
|
|
14
|
+
// Validate: exactly one of {filePath, --content}. We treat empty string the
|
|
15
|
+
// same as missing so `publish('', ...)` behaves like the no-arg case.
|
|
16
|
+
const hasFile = filePath !== undefined && filePath !== '';
|
|
17
|
+
const hasContent = options.content !== undefined;
|
|
18
|
+
if (hasFile && hasContent) {
|
|
19
|
+
throw new CliError('INVALID_ARGS', 'Provide either a file or --content, not both.');
|
|
20
|
+
}
|
|
21
|
+
if (!hasFile && !hasContent) {
|
|
22
|
+
throw new CliError('INVALID_ARGS', 'Provide either a file or --content.');
|
|
23
|
+
}
|
|
24
|
+
// Inline content path: skip all filesystem reads and send the string directly.
|
|
25
|
+
// Collections / CSV import still need a file, so this branch is text-like types only.
|
|
26
|
+
if (hasContent) {
|
|
27
|
+
if (!options.title) {
|
|
28
|
+
throw new CliError('INVALID_ARGS', '--title is required when using --content.');
|
|
29
|
+
}
|
|
30
|
+
if (options.dryRun) {
|
|
31
|
+
outputSuccess({
|
|
32
|
+
dryRun: true,
|
|
33
|
+
action: 'would publish inline',
|
|
34
|
+
title: options.title,
|
|
35
|
+
type: options.type,
|
|
36
|
+
size: options.content.length,
|
|
37
|
+
}, formatAssetCreated);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const { client, config } = requireAuthClient();
|
|
41
|
+
const body = {
|
|
42
|
+
type: options.type,
|
|
43
|
+
content: options.content,
|
|
44
|
+
title: options.title,
|
|
45
|
+
};
|
|
46
|
+
if (options.alias)
|
|
47
|
+
body.alias = options.alias;
|
|
48
|
+
if (options.parent)
|
|
49
|
+
body.parentAssetId = options.parent;
|
|
50
|
+
if (options.context)
|
|
51
|
+
body.creatorContext = options.context;
|
|
52
|
+
if (options.refs)
|
|
53
|
+
body.inputReferences = options.refs.split(',').map((r) => r.trim());
|
|
54
|
+
const { data } = await client.post('/v0/assets', body);
|
|
55
|
+
const url = data.data.url || `${getFrontendUrl(config)}/s/${data.data.id}`;
|
|
56
|
+
outputSuccess({ id: data.data.id, url, title: data.data.title, type: data.data.type }, formatAssetCreated);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
12
59
|
// Collection → CSV import path: single-command creation of a collection from a CSV file
|
|
13
60
|
if (options.type === 'collection' && options.fromCsv) {
|
|
14
61
|
const absPath = path.resolve(filePath);
|
|
@@ -30,7 +77,7 @@ export async function publish(filePath, options) {
|
|
|
30
77
|
if (options.headers)
|
|
31
78
|
body.headers = true;
|
|
32
79
|
if (options.schema)
|
|
33
|
-
body.schema =
|
|
80
|
+
body.schema = parseJsonOption(options.schema, '--schema');
|
|
34
81
|
if (options.alias)
|
|
35
82
|
body.alias = options.alias;
|
|
36
83
|
if (options.parent)
|
|
@@ -39,9 +86,9 @@ export async function publish(filePath, options) {
|
|
|
39
86
|
body.creatorContext = options.context;
|
|
40
87
|
if (options.refs)
|
|
41
88
|
body.inputReferences = options.refs.split(',').map((r) => r.trim());
|
|
42
|
-
const { client } = requireAuthClient();
|
|
89
|
+
const { client, config } = requireAuthClient();
|
|
43
90
|
const { data } = await client.post('/v0/assets', body);
|
|
44
|
-
const url = data.data.url ||
|
|
91
|
+
const url = data.data.url || `${getFrontendUrl(config)}/s/${data.data.id}`;
|
|
45
92
|
outputSuccess({ id: data.data.id, url, title: data.data.title, type: data.data.type }, formatAssetCreated);
|
|
46
93
|
return;
|
|
47
94
|
}
|
|
@@ -49,21 +96,21 @@ export async function publish(filePath, options) {
|
|
|
49
96
|
if (options.type === 'collection') {
|
|
50
97
|
let schema;
|
|
51
98
|
if (options.schema) {
|
|
52
|
-
schema =
|
|
99
|
+
schema = parseJsonOption(options.schema, '--schema');
|
|
53
100
|
}
|
|
54
101
|
else {
|
|
55
102
|
const absPath = path.resolve(filePath);
|
|
56
103
|
if (!fs.existsSync(absPath)) {
|
|
57
104
|
throw new CliError('FILE_NOT_FOUND', `File not found: ${absPath}`);
|
|
58
105
|
}
|
|
59
|
-
schema =
|
|
106
|
+
schema = parseJsonOption(fs.readFileSync(absPath, 'utf-8'), filePath);
|
|
60
107
|
}
|
|
61
108
|
const title = options.title || 'Untitled Collection';
|
|
62
109
|
if (options.dryRun) {
|
|
63
110
|
outputSuccess({ dryRun: true, action: 'would create collection', title, schema }, formatAssetCreated);
|
|
64
111
|
return;
|
|
65
112
|
}
|
|
66
|
-
const { client } = requireAuthClient();
|
|
113
|
+
const { client, config } = requireAuthClient();
|
|
67
114
|
const body = { type: 'collection', title, schema };
|
|
68
115
|
if (options.alias)
|
|
69
116
|
body.alias = options.alias;
|
|
@@ -74,7 +121,7 @@ export async function publish(filePath, options) {
|
|
|
74
121
|
if (options.refs)
|
|
75
122
|
body.inputReferences = options.refs.split(',').map((r) => r.trim());
|
|
76
123
|
const { data } = await client.post('/v0/assets', body);
|
|
77
|
-
const url = data.data.url ||
|
|
124
|
+
const url = data.data.url || `${getFrontendUrl(config)}/s/${data.data.id}`;
|
|
78
125
|
outputSuccess({ id: data.data.id, url, title: data.data.title, type: data.data.type }, formatAssetCreated);
|
|
79
126
|
return;
|
|
80
127
|
}
|
|
@@ -88,7 +135,7 @@ export async function publish(filePath, options) {
|
|
|
88
135
|
outputSuccess({ dryRun: true, action: 'would publish', file: absPath, title, type: options.type, size }, formatAssetCreated);
|
|
89
136
|
return;
|
|
90
137
|
}
|
|
91
|
-
const { client } = requireAuthClient();
|
|
138
|
+
const { client, config } = requireAuthClient();
|
|
92
139
|
const content = fs.readFileSync(absPath, 'utf-8');
|
|
93
140
|
const body = {
|
|
94
141
|
type: options.type,
|
|
@@ -104,7 +151,7 @@ export async function publish(filePath, options) {
|
|
|
104
151
|
if (options.refs)
|
|
105
152
|
body.inputReferences = options.refs.split(',').map((r) => r.trim());
|
|
106
153
|
const { data } = await client.post('/v0/assets', body);
|
|
107
|
-
const url = data.data.url ||
|
|
154
|
+
const url = data.data.url || `${getFrontendUrl(config)}/s/${data.data.id}`;
|
|
108
155
|
outputSuccess({
|
|
109
156
|
id: data.data.id,
|
|
110
157
|
url,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/share.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { loadIdentity } from '../identity.js';
|
|
2
2
|
import { createCapabilityToken } from '../crypto.js';
|
|
3
|
-
import { getFrontendUrl } from '../config.js';
|
|
3
|
+
import { getFrontendUrl, loadConfig } from '../config.js';
|
|
4
4
|
import { CliError } from '../errors.js';
|
|
5
5
|
import { outputSuccess } from '../output.js';
|
|
6
6
|
import { formatShareLink } from '../formatters.js';
|
|
@@ -22,7 +22,7 @@ export async function share(assetId, options) {
|
|
|
22
22
|
const exp = options.expires ? parseDuration(options.expires) : undefined;
|
|
23
23
|
const aud = options.for || undefined;
|
|
24
24
|
const token = createCapabilityToken({ sub: `asset:${assetId}`, iss: identity.agentId, perm, exp, aud }, identity.secretKey);
|
|
25
|
-
const frontendUrl = getFrontendUrl();
|
|
25
|
+
const frontendUrl = getFrontendUrl(loadConfig());
|
|
26
26
|
const url = `${frontendUrl}/s/${assetId}?cap=${encodeURIComponent(token)}`;
|
|
27
27
|
outputSuccess({ url, token, assetId, perm, exp: exp ?? null, aud: aud ?? null }, formatShareLink);
|
|
28
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"share.js","sourceRoot":"","sources":["../../src/commands/share.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"share.js","sourceRoot":"","sources":["../../src/commands/share.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,UAAU,aAAa,CAAC,CAAS;IACrC,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC1C,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,wBAAwB,CAAC,CAAC;IACnG,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,WAAW,GAA2B,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;IAC/E,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,KAAK,CACzB,OAAe,EACf,OAAkE;IAElE,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAChC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,QAAQ,CAAC,aAAa,EAAE,yDAAyD,CAAC,CAAC;IAC/F,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;IAC/E,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,SAAS,CAAC;IAErC,MAAM,KAAK,GAAG,qBAAqB,CACjC,EAAE,GAAG,EAAE,SAAS,OAAO,EAAE,EAAE,GAAG,EAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAClE,QAAQ,CAAC,SAAS,CACnB,CAAC;IAEF,MAAM,WAAW,GAAG,cAAc,CAAC,UAAU,EAAE,CAAC,CAAC;IACjD,MAAM,GAAG,GAAG,GAAG,WAAW,MAAM,OAAO,QAAQ,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;IAE3E,aAAa,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,EAAE,EAAE,eAAe,CAAC,CAAC;AACpG,CAAC"}
|
|
@@ -6,6 +6,9 @@ export declare function threadCreate(options: {
|
|
|
6
6
|
participants?: string;
|
|
7
7
|
message?: string;
|
|
8
8
|
refs?: string;
|
|
9
|
+
asset?: string;
|
|
10
|
+
title?: string;
|
|
11
|
+
tourWelcome?: boolean;
|
|
9
12
|
}): Promise<void>;
|
|
10
13
|
export declare function threadShare(threadId: string, options: {
|
|
11
14
|
expires?: string;
|
package/dist/commands/thread.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { requireAuthClient } from '../auth-client.js';
|
|
2
2
|
import { loadIdentity } from '../identity.js';
|
|
3
3
|
import { createCapabilityToken } from '../crypto.js';
|
|
4
|
-
import { getFrontendUrl } from '../config.js';
|
|
4
|
+
import { getFrontendUrl, loadConfig } from '../config.js';
|
|
5
5
|
import { CliError } from '../errors.js';
|
|
6
6
|
import { outputSuccess } from '../output.js';
|
|
7
7
|
import { formatThreadCreated, formatThreadList, formatShareLink, formatThreadDetails, formatThreadClosed, formatParticipantAdded, formatRefsAdded, formatRefRemoved } from '../formatters.js';
|
|
8
8
|
import { resolveRecipient, resolveRecipients } from '../contacts.js';
|
|
9
9
|
import { parseDuration } from './share.js';
|
|
10
|
+
import { parseRefList } from '../refs.js';
|
|
10
11
|
export async function threadList(options) {
|
|
11
12
|
const { client } = requireAuthClient();
|
|
12
13
|
const params = {};
|
|
@@ -18,22 +19,31 @@ export async function threadList(options) {
|
|
|
18
19
|
outputSuccess(data.data, formatThreadList);
|
|
19
20
|
}
|
|
20
21
|
export async function threadCreate(options) {
|
|
21
|
-
const { client } = requireAuthClient();
|
|
22
|
+
const { client, config } = requireAuthClient();
|
|
22
23
|
const payload = {};
|
|
24
|
+
const metadata = {};
|
|
23
25
|
if (options.participants) {
|
|
24
26
|
payload.participants = resolveRecipients(options.participants.split(',').map((p) => p.trim()));
|
|
25
27
|
}
|
|
26
28
|
if (options.refs) {
|
|
27
|
-
payload.refs = options.refs
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
}
|
|
29
|
+
payload.refs = parseRefList(options.refs);
|
|
30
|
+
}
|
|
31
|
+
else if (options.asset) {
|
|
32
|
+
payload.refs = [{ type: 'asset', target_id: options.asset }];
|
|
31
33
|
}
|
|
32
34
|
if (options.message) {
|
|
33
35
|
payload.message = { body: options.message };
|
|
34
36
|
}
|
|
37
|
+
if (options.title)
|
|
38
|
+
metadata.title = options.title;
|
|
39
|
+
if (options.tourWelcome)
|
|
40
|
+
metadata.tour_welcome = true;
|
|
41
|
+
if (Object.keys(metadata).length > 0)
|
|
42
|
+
payload.metadata = metadata;
|
|
35
43
|
const { data } = await client.post('/v0/threads', payload);
|
|
36
|
-
|
|
44
|
+
const frontendUrl = getFrontendUrl(config);
|
|
45
|
+
const thread = data.data;
|
|
46
|
+
outputSuccess({ ...thread, url: `${frontendUrl}/operator/threads/${thread.id}` }, formatThreadCreated);
|
|
37
47
|
}
|
|
38
48
|
export async function threadShare(threadId, options) {
|
|
39
49
|
const identity = loadIdentity();
|
|
@@ -44,7 +54,7 @@ export async function threadShare(threadId, options) {
|
|
|
44
54
|
const exp = options.expires ? parseDuration(options.expires) : undefined;
|
|
45
55
|
const aud = options.for || undefined;
|
|
46
56
|
const token = createCapabilityToken({ sub: `thread:${threadId}`, iss: identity.agentId, perm, exp, aud }, identity.secretKey);
|
|
47
|
-
const frontendUrl = getFrontendUrl();
|
|
57
|
+
const frontendUrl = getFrontendUrl(loadConfig());
|
|
48
58
|
const url = `${frontendUrl}/threads/${threadId}?cap=${encodeURIComponent(token)}`;
|
|
49
59
|
outputSuccess({ url, token, threadId, perm, exp: exp ?? null, aud: aud ?? null }, formatShareLink);
|
|
50
60
|
}
|
|
@@ -58,7 +68,7 @@ export async function threadClose(threadId, options) {
|
|
|
58
68
|
const resolution = { closed: true };
|
|
59
69
|
if (options.resolution)
|
|
60
70
|
resolution.message = options.resolution;
|
|
61
|
-
const { data } = await client.patch(`/v0/threads/${threadId}`, { resolution });
|
|
71
|
+
const { data } = await client.patch(`/v0/threads/${threadId}`, { state: 'closed', resolution });
|
|
62
72
|
outputSuccess(data.data, formatThreadClosed);
|
|
63
73
|
}
|
|
64
74
|
export async function threadAddParticipant(threadId, agent) {
|
|
@@ -69,10 +79,7 @@ export async function threadAddParticipant(threadId, agent) {
|
|
|
69
79
|
}
|
|
70
80
|
export async function threadAddRefs(threadId, refs) {
|
|
71
81
|
const { client } = requireAuthClient();
|
|
72
|
-
const refList = refs
|
|
73
|
-
const v = r.trim();
|
|
74
|
-
return { type: 'url', target_id: v };
|
|
75
|
-
});
|
|
82
|
+
const refList = parseRefList(refs);
|
|
76
83
|
const { data } = await client.post(`/v0/threads/${threadId}/refs`, { refs: refList });
|
|
77
84
|
outputSuccess(data.data, formatRefsAdded);
|
|
78
85
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thread.js","sourceRoot":"","sources":["../../src/commands/thread.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"thread.js","sourceRoot":"","sources":["../../src/commands/thread.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,eAAe,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC9L,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAGhC;IACC,MAAM,EAAE,MAAM,EAAE,GAAG,iBAAiB,EAAE,CAAC;IAEvC,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,IAAI,OAAO,CAAC,KAAK;QAAE,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAChD,IAAI,OAAO,CAAC,KAAK;QAAE,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAEhD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7D,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAOlC;IACC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,iBAAiB,EAAE,CAAC;IAE/C,MAAM,OAAO,GAA4B,EAAE,CAAC;IAC5C,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAE7C,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,OAAO,CAAC,YAAY,GAAG,iBAAiB,CACtC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CACrD,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;SAAM,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;IAC9C,CAAC;IAED,IAAI,OAAO,CAAC,KAAK;QAAE,QAAQ,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAClD,IAAI,OAAO,CAAC,WAAW;QAAE,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC;IACtD,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAElE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAC3D,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;IACzB,aAAa,CACX,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,WAAW,qBAAqB,MAAM,CAAC,EAAE,EAAE,EAAE,EAClE,mBAAmB,CACpB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,QAAgB,EAChB,OAA2C;IAE3C,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAChC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,QAAQ,CAAC,aAAa,EAAE,yDAAyD,CAAC,CAAC;IAC/F,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;IACzB,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,SAAS,CAAC;IAErC,MAAM,KAAK,GAAG,qBAAqB,CACjC,EAAE,GAAG,EAAE,UAAU,QAAQ,EAAE,EAAE,GAAG,EAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EACpE,QAAQ,CAAC,SAAS,CACnB,CAAC;IAEF,MAAM,WAAW,GAAG,cAAc,CAAC,UAAU,EAAE,CAAC,CAAC;IACjD,MAAM,GAAG,GAAG,GAAG,WAAW,YAAY,QAAQ,QAAQ,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;IAElF,aAAa,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,EAAE,EAAE,eAAe,CAAC,CAAC;AACrG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,QAAgB;IAC9C,MAAM,EAAE,MAAM,EAAE,GAAG,iBAAiB,EAAE,CAAC;IACvC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,eAAe,QAAQ,EAAE,CAAC,CAAC;IAC7D,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,QAAgB,EAChB,OAAgC;IAEhC,MAAM,EAAE,MAAM,EAAE,GAAG,iBAAiB,EAAE,CAAC;IAEvC,MAAM,UAAU,GAA4B,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC7D,IAAI,OAAO,CAAC,UAAU;QAAE,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAEhE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,eAAe,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;IAChG,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,QAAgB,EAChB,KAAa;IAEb,MAAM,EAAE,MAAM,EAAE,GAAG,iBAAiB,EAAE,CAAC;IACvC,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,eAAe,QAAQ,eAAe,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IAClG,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,QAAgB,EAChB,IAAY;IAEZ,MAAM,EAAE,MAAM,EAAE,GAAG,iBAAiB,EAAE,CAAC;IACvC,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,eAAe,QAAQ,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACtF,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,QAAgB,EAChB,KAAa;IAEb,MAAM,EAAE,MAAM,EAAE,GAAG,iBAAiB,EAAE,CAAC;IACvC,MAAM,MAAM,CAAC,MAAM,CAAC,eAAe,QAAQ,SAAS,KAAK,EAAE,CAAC,CAAC;IAC7D,aAAa,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,gBAAgB,CAAC,CAAC;AAC1E,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { CliError } from '../errors.js';
|
|
2
|
+
import { loadTourState, saveTourState, clearTourState } from '../tour/state.js';
|
|
3
|
+
import { STEPS, TOTAL_STEPS, renderCurrentStep } from '../tour/steps.js';
|
|
4
|
+
import { AGENT_SCRIPT } from '../tour/agent-script.js';
|
|
5
|
+
export async function tour(options) {
|
|
6
|
+
if (options.agent) {
|
|
7
|
+
process.stdout.write(AGENT_SCRIPT);
|
|
8
|
+
process.stdout.write('\n');
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
let state = loadTourState();
|
|
12
|
+
if (!state) {
|
|
13
|
+
state = {
|
|
14
|
+
step: 1,
|
|
15
|
+
assetId: null,
|
|
16
|
+
threadId: null,
|
|
17
|
+
startedAt: new Date().toISOString(),
|
|
18
|
+
};
|
|
19
|
+
saveTourState(state);
|
|
20
|
+
process.stdout.write(`Welcome to Tokenrip. Let's take the tour — ${TOTAL_STEPS} steps, about 2 minutes.\n\n`);
|
|
21
|
+
}
|
|
22
|
+
process.stdout.write(renderCurrentStep(state));
|
|
23
|
+
process.stdout.write('\n');
|
|
24
|
+
}
|
|
25
|
+
export async function tourNext(id) {
|
|
26
|
+
const state = loadTourState();
|
|
27
|
+
if (!state) {
|
|
28
|
+
throw new CliError('NO_TOUR', 'No tour in progress. Run `rip tour` to start.');
|
|
29
|
+
}
|
|
30
|
+
const currentStep = STEPS[state.step - 1];
|
|
31
|
+
if (!currentStep) {
|
|
32
|
+
throw new CliError('INVALID_STATE', `Unexpected step number: ${state.step}`);
|
|
33
|
+
}
|
|
34
|
+
if (currentStep.expectsIdOnNext && !id) {
|
|
35
|
+
const label = currentStep.collectsAs === 'assetId' ? 'asset id' : 'thread id';
|
|
36
|
+
throw new CliError('MISSING_ID', `This step needs the ${label} from the previous command. Run: rip tour next <${label.replace(' ', '-')}>`);
|
|
37
|
+
}
|
|
38
|
+
if (currentStep.collectsAs && id) {
|
|
39
|
+
state[currentStep.collectsAs] = id;
|
|
40
|
+
}
|
|
41
|
+
if (state.step >= TOTAL_STEPS) {
|
|
42
|
+
clearTourState();
|
|
43
|
+
process.stdout.write("You've reached the end of the tour. Run `rip tour` again any time.\n");
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
state.step += 1;
|
|
47
|
+
saveTourState(state);
|
|
48
|
+
process.stdout.write(renderCurrentStep(state));
|
|
49
|
+
process.stdout.write('\n');
|
|
50
|
+
}
|
|
51
|
+
export async function tourRestart() {
|
|
52
|
+
clearTourState();
|
|
53
|
+
await tour({});
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=tour.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tour.js","sourceRoot":"","sources":["../../src/commands/tour.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAkB,MAAM,kBAAkB,CAAC;AAChG,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,OAA4B;IACrD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACnC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,IAAI,KAAK,GAAG,aAAa,EAAE,CAAC;IAC5B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,KAAK,GAAG;YACN,IAAI,EAAE,CAAC;YACP,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QACF,aAAa,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,8CAA8C,WAAW,8BAA8B,CAAC,CAAC;IAChH,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,EAAsB;IACnD,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;IAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE,+CAA+C,CAAC,CAAC;IACjF,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;IAC1C,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,QAAQ,CAAC,eAAe,EAAE,2BAA2B,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,IAAI,WAAW,CAAC,eAAe,IAAI,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,WAAW,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC;QAC9E,MAAM,IAAI,QAAQ,CAChB,YAAY,EACZ,uBAAuB,KAAK,mDAAmD,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAC1G,CAAC;IACJ,CAAC;IAED,IAAI,WAAW,CAAC,UAAU,IAAI,EAAE,EAAE,CAAC;QACjC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;IACrC,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC;QAC9B,cAAc,EAAE,CAAC;QACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAC;QAC7F,OAAO;IACT,CAAC;IAED,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC;IAChB,aAAa,CAAC,KAAK,CAAC,CAAC;IAErB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,cAAc,EAAE,CAAC;IACjB,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;AACjB,CAAC"}
|
package/dist/commands/update.js
CHANGED
|
@@ -5,7 +5,7 @@ import { requireAuthClient } from '../auth-client.js';
|
|
|
5
5
|
import { CliError } from '../errors.js';
|
|
6
6
|
import { outputSuccess } from '../output.js';
|
|
7
7
|
import { formatVersionCreated } from '../formatters.js';
|
|
8
|
-
const VALID_TYPES = ['markdown', 'html', 'chart', 'code', 'text'];
|
|
8
|
+
const VALID_TYPES = ['markdown', 'html', 'chart', 'code', 'text', 'json', 'csv'];
|
|
9
9
|
export async function update(uuid, filePath, options) {
|
|
10
10
|
const absPath = path.resolve(filePath);
|
|
11
11
|
if (!fs.existsSync(absPath)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,QAAQ,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExD,MAAM,WAAW,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/upload.js
CHANGED
|
@@ -6,6 +6,7 @@ import { requireAuthClient } from '../auth-client.js';
|
|
|
6
6
|
import { CliError } from '../errors.js';
|
|
7
7
|
import { outputSuccess } from '../output.js';
|
|
8
8
|
import { formatAssetCreated } from '../formatters.js';
|
|
9
|
+
import { getFrontendUrl } from '../config.js';
|
|
9
10
|
export async function upload(filePath, options) {
|
|
10
11
|
const absPath = path.resolve(filePath);
|
|
11
12
|
if (!fs.existsSync(absPath)) {
|
|
@@ -18,7 +19,7 @@ export async function upload(filePath, options) {
|
|
|
18
19
|
outputSuccess({ dryRun: true, action: 'would upload', file: absPath, title, mimeType, size }, formatAssetCreated);
|
|
19
20
|
return;
|
|
20
21
|
}
|
|
21
|
-
const { client } = requireAuthClient();
|
|
22
|
+
const { client, config } = requireAuthClient();
|
|
22
23
|
const form = new FormData();
|
|
23
24
|
form.append('file', fs.createReadStream(absPath));
|
|
24
25
|
form.append('type', 'file');
|
|
@@ -35,7 +36,7 @@ export async function upload(filePath, options) {
|
|
|
35
36
|
maxContentLength: Infinity,
|
|
36
37
|
maxBodyLength: Infinity,
|
|
37
38
|
});
|
|
38
|
-
const url = data.data.url ||
|
|
39
|
+
const url = data.data.url || `${getFrontendUrl(config)}/s/${data.data.id}`;
|
|
39
40
|
outputSuccess({
|
|
40
41
|
id: data.data.id,
|
|
41
42
|
url,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../src/commands/upload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,IAAI,MAAM,YAAY,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../src/commands/upload.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -3,10 +3,11 @@ export interface TokenripConfig {
|
|
|
3
3
|
configVersion?: number;
|
|
4
4
|
apiKey?: string;
|
|
5
5
|
apiUrl?: string;
|
|
6
|
+
frontendUrl?: string;
|
|
6
7
|
preferences: Record<string, unknown>;
|
|
7
8
|
}
|
|
8
9
|
export declare function loadConfig(): TokenripConfig;
|
|
9
10
|
export declare function saveConfig(config: TokenripConfig): void;
|
|
10
11
|
export declare function getApiUrl(config: TokenripConfig): string;
|
|
11
12
|
export declare function getApiKey(config: TokenripConfig): string | undefined;
|
|
12
|
-
export declare function getFrontendUrl(): string;
|
|
13
|
+
export declare function getFrontendUrl(config?: TokenripConfig): string;
|