@infinite-room-labs/claudesync-cli 0.5.1 → 0.5.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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export-all.d.ts","sourceRoot":"","sources":["../../src/commands/export-all.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"export-all.d.ts","sourceRoot":"","sources":["../../src/commands/export-all.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,eAAO,MAAM,gBAAgB,SA+JzB,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import { resolve } from "node:path";
|
|
3
3
|
import { existsSync, rmSync, writeFileSync } from "node:fs";
|
|
4
|
-
import {
|
|
4
|
+
import { exportToGit, fetchAndBuild, syncConversation, safeSlug, displayName, } from "@infinite-room-labs/claudesync-core";
|
|
5
5
|
import { createClient, resolveOrgId } from "../utils.js";
|
|
6
6
|
export const exportAllCommand = new Command("export-all")
|
|
7
7
|
.description("Export entire organization: all projects (with knowledge + conversations) and standalone conversations")
|
|
@@ -33,16 +33,17 @@ export const exportAllCommand = new Command("export-all")
|
|
|
33
33
|
for (let pi = 0; pi < projects.length; pi++) {
|
|
34
34
|
const project = projects[pi];
|
|
35
35
|
const projectProgress = `[project ${pi + 1}/${projects.length}]`;
|
|
36
|
-
const
|
|
36
|
+
const projectLabel = displayName(project.name, project.uuid);
|
|
37
|
+
const projectSlug = safeSlug(project.name, project.uuid);
|
|
37
38
|
const projectPath = resolve(outputRoot, "projects", projectSlug);
|
|
38
39
|
if (options.skipExisting && existsSync(projectPath)) {
|
|
39
|
-
console.log(`${projectProgress} Skipping (exists): ${
|
|
40
|
+
console.log(`${projectProgress} Skipping (exists): ${projectLabel}`);
|
|
40
41
|
const projConvs = await client.getProjectConversations(orgId, project.uuid);
|
|
41
42
|
for (const c of projConvs)
|
|
42
43
|
projectConvUuids.add(c.uuid);
|
|
43
44
|
continue;
|
|
44
45
|
}
|
|
45
|
-
console.log(`${projectProgress} ${
|
|
46
|
+
console.log(`${projectProgress} ${projectLabel}`);
|
|
46
47
|
const docs = await client.getProjectDocs(orgId, project.uuid);
|
|
47
48
|
const projConvs = await client.getProjectConversations(orgId, project.uuid);
|
|
48
49
|
for (const c of projConvs)
|
|
@@ -56,28 +57,26 @@ export const exportAllCommand = new Command("export-all")
|
|
|
56
57
|
projectFiles[`knowledge/${safeName}`] = doc.content;
|
|
57
58
|
}
|
|
58
59
|
commits.push({
|
|
59
|
-
message: `Export project: ${
|
|
60
|
+
message: `Export project: ${projectLabel}`,
|
|
60
61
|
timestamp: project.created_at,
|
|
61
62
|
author,
|
|
62
63
|
files: projectFiles,
|
|
63
64
|
});
|
|
64
|
-
// Conversations within the project:
|
|
65
|
-
//
|
|
66
|
-
//
|
|
67
|
-
// applied at this layer (the project repo is rebuilt as a unit).
|
|
65
|
+
// Conversations within the project: route through fetchAndBuild for
|
|
66
|
+
// identical name/slug fallbacks and tree handling. --skip-same does not
|
|
67
|
+
// apply at this layer (the project repo is rebuilt as a unit each run).
|
|
68
68
|
for (let ci = 0; ci < projConvs.length; ci++) {
|
|
69
69
|
const convSummary = projConvs[ci];
|
|
70
70
|
const convProgress = ` [${ci + 1}/${projConvs.length}]`;
|
|
71
|
-
|
|
72
|
-
const conversation = await client.getConversation(orgId, convSummary.uuid, { tree: true });
|
|
73
|
-
const { artifacts, artifactContents } = await fetchArtifacts(client, orgId, convSummary.uuid, !options.skipArtifacts);
|
|
74
|
-
const subBundle = buildGitBundle(conversation, artifacts, artifactContents, {
|
|
71
|
+
const built = await fetchAndBuild(client, orgId, convSummary, {
|
|
75
72
|
authorName: options.authorName,
|
|
76
73
|
authorEmail: options.authorEmail,
|
|
74
|
+
skipArtifacts: options.skipArtifacts,
|
|
77
75
|
multiBranch: true,
|
|
78
76
|
});
|
|
79
|
-
|
|
80
|
-
|
|
77
|
+
console.log(`${convProgress} ${built.displayName}`);
|
|
78
|
+
const convDir = `conversations/${built.slug}`;
|
|
79
|
+
for (const commit of built.bundle.commits) {
|
|
81
80
|
const remappedFiles = {};
|
|
82
81
|
for (const [p, content] of Object.entries(commit.files)) {
|
|
83
82
|
remappedFiles[`${convDir}/${p}`] = content;
|
|
@@ -88,7 +87,7 @@ export const exportAllCommand = new Command("export-all")
|
|
|
88
87
|
const bundle = {
|
|
89
88
|
metadata: {
|
|
90
89
|
conversationId: project.uuid,
|
|
91
|
-
conversationName:
|
|
90
|
+
conversationName: projectLabel,
|
|
92
91
|
model: null,
|
|
93
92
|
createdAt: project.created_at,
|
|
94
93
|
exportedAt: new Date().toISOString(),
|
|
@@ -97,16 +96,13 @@ export const exportAllCommand = new Command("export-all")
|
|
|
97
96
|
};
|
|
98
97
|
await writeProjectBundle(bundle, projectPath, options.format);
|
|
99
98
|
}
|
|
100
|
-
// 2. Standalone conversations
|
|
101
|
-
// applies per conversation via the orchestrator.
|
|
99
|
+
// 2. Standalone conversations -- --skip-same applies here per conversation.
|
|
102
100
|
const standaloneConvs = allConversations.filter((c) => !c.project_uuid && !projectConvUuids.has(c.uuid));
|
|
103
101
|
console.log(`\n${standaloneConvs.length} standalone conversation(s) to export`);
|
|
104
102
|
for (let ci = 0; ci < standaloneConvs.length; ci++) {
|
|
105
103
|
const convSummary = standaloneConvs[ci];
|
|
106
104
|
const convProgress = `[conv ${ci + 1}/${standaloneConvs.length}]`;
|
|
107
|
-
const
|
|
108
|
-
const convSlug = slugify(convSummary.name) || `unnamed-${convSummary.uuid}`;
|
|
109
|
-
const convPath = resolve(outputRoot, "conversations", convSlug);
|
|
105
|
+
const convPath = resolve(outputRoot, "conversations", safeSlug(convSummary.name, convSummary.uuid));
|
|
110
106
|
try {
|
|
111
107
|
const result = await syncConversation(client, orgId, convSummary, convPath, {
|
|
112
108
|
format: options.format,
|
|
@@ -119,10 +115,11 @@ export const exportAllCommand = new Command("export-all")
|
|
|
119
115
|
const tag = result.action === "skipped" ? "Skipping (same)" :
|
|
120
116
|
result.action === "skipped-existing" ? "Skipping (exists)" :
|
|
121
117
|
result.action === "incremental" ? "Updated" : "Exported";
|
|
122
|
-
console.log(`${convProgress} ${tag}: ${
|
|
118
|
+
console.log(`${convProgress} ${tag}: ${result.displayName}`);
|
|
123
119
|
}
|
|
124
120
|
catch (err) {
|
|
125
|
-
|
|
121
|
+
const fallback = displayName(convSummary.name, convSummary.uuid);
|
|
122
|
+
console.error(`${convProgress} ERROR exporting ${fallback}: ${err instanceof Error ? err.message : String(err)}`);
|
|
126
123
|
}
|
|
127
124
|
}
|
|
128
125
|
console.log(`\nOrg export complete!`);
|
|
@@ -130,25 +127,6 @@ export const exportAllCommand = new Command("export-all")
|
|
|
130
127
|
console.log(` Projects: ${projects.length}`);
|
|
131
128
|
console.log(` Standalone conversations: ${standaloneConvs.length}`);
|
|
132
129
|
});
|
|
133
|
-
async function fetchArtifacts(client, orgId, convId, enabled) {
|
|
134
|
-
const empty = { success: true, files: [], files_metadata: [] };
|
|
135
|
-
if (!enabled)
|
|
136
|
-
return { artifacts: empty, artifactContents: new Map() };
|
|
137
|
-
const artifactContents = new Map();
|
|
138
|
-
let artifacts = empty;
|
|
139
|
-
try {
|
|
140
|
-
artifacts = await client.listArtifacts(orgId, convId);
|
|
141
|
-
for (const meta of artifacts.files_metadata) {
|
|
142
|
-
try {
|
|
143
|
-
const content = await client.downloadArtifact(orgId, convId, meta.path);
|
|
144
|
-
artifactContents.set(meta.path, content);
|
|
145
|
-
}
|
|
146
|
-
catch { }
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
catch { }
|
|
150
|
-
return { artifacts, artifactContents };
|
|
151
|
-
}
|
|
152
130
|
async function writeProjectBundle(bundle, outputPath, format) {
|
|
153
131
|
if (format === "json") {
|
|
154
132
|
writeFileSync(outputPath + ".json", JSON.stringify(bundle, null, 2), "utf-8");
|
|
@@ -162,22 +140,9 @@ async function writeProjectBundle(bundle, outputPath, format) {
|
|
|
162
140
|
rmSync(resolve(outputPath, ".git"), { recursive: true, force: true });
|
|
163
141
|
}
|
|
164
142
|
}
|
|
165
|
-
function slugify(name) {
|
|
166
|
-
return (name ?? "")
|
|
167
|
-
.toLowerCase()
|
|
168
|
-
.replace(/[^a-z0-9]+/g, "-")
|
|
169
|
-
.replace(/^-|-$/g, "")
|
|
170
|
-
.slice(0, 60);
|
|
171
|
-
}
|
|
172
|
-
function displayName(name, uuid) {
|
|
173
|
-
const trimmed = (name ?? "").trim();
|
|
174
|
-
if (trimmed)
|
|
175
|
-
return trimmed;
|
|
176
|
-
return `<unnamed ${uuid}>`;
|
|
177
|
-
}
|
|
178
143
|
function buildProjectReadme(project, docCount, convCount) {
|
|
179
144
|
const lines = [];
|
|
180
|
-
lines.push(`# ${project.name}`);
|
|
145
|
+
lines.push(`# ${displayName(project.name, project.uuid)}`);
|
|
181
146
|
lines.push("");
|
|
182
147
|
if (project.description) {
|
|
183
148
|
lines.push(project.description);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export-all.js","sourceRoot":"","sources":["../../src/commands/export-all.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"export-all.js","sourceRoot":"","sources":["../../src/commands/export-all.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,eAAO,MAAM,aAAa,SAiFtB,CAAC"}
|
package/dist/commands/export.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import { resolve } from "node:path";
|
|
3
|
-
import { syncConversation, } from "@infinite-room-labs/claudesync-core";
|
|
3
|
+
import { syncConversation, safeSlug, displayName, } from "@infinite-room-labs/claudesync-core";
|
|
4
4
|
import { createClient, resolveOrgId } from "../utils.js";
|
|
5
5
|
export const exportCommand = new Command("export")
|
|
6
6
|
.description("Export a conversation to a git repository, file tree, or JSON")
|
|
@@ -29,13 +29,9 @@ export const exportCommand = new Command("export")
|
|
|
29
29
|
process.exit(1);
|
|
30
30
|
return; // unreachable after process.exit, helps the type narrower
|
|
31
31
|
}
|
|
32
|
-
const slug = (summary.name
|
|
33
|
-
.toLowerCase()
|
|
34
|
-
.replace(/[^a-z0-9]+/g, "-")
|
|
35
|
-
.replace(/^-|-$/g, "")
|
|
36
|
-
.slice(0, 60) || `unnamed-${summary.uuid}`;
|
|
32
|
+
const slug = safeSlug(summary.name, summary.uuid);
|
|
37
33
|
const outputPath = resolve(options.output ?? `./${slug}`);
|
|
38
|
-
const label = (summary.name
|
|
34
|
+
const label = displayName(summary.name, summary.uuid);
|
|
39
35
|
console.log(`Syncing conversation ${label} (${summary.uuid})`);
|
|
40
36
|
console.log(` Format: ${options.format}`);
|
|
41
37
|
console.log(` Output: ${outputPath}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,gBAAgB,
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@infinite-room-labs/claudesync-cli",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.2",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "https://github.com/InfiniteRoomLabs/claudesync"
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"ink": "^6.8.0",
|
|
19
19
|
"ink-text-input": "^6.0.0",
|
|
20
20
|
"react": "^19.2.4",
|
|
21
|
-
"@infinite-room-labs/claudesync-core": "0.4.
|
|
21
|
+
"@infinite-room-labs/claudesync-core": "0.4.1"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
24
|
"@types/node": "^25.5.0",
|