@alsdd/t3-import 0.0.0-stage → 0.1.1-alsd.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.
Files changed (97) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/LICENSE +21 -0
  3. package/README.md +141 -2
  4. package/assets/fork-demo.gif +0 -0
  5. package/assets/fork-demo.png +0 -0
  6. package/dist/cli.d.ts +2 -0
  7. package/dist/cli.js +399 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/core/checkpoint.d.ts +25 -0
  10. package/dist/core/checkpoint.js +82 -0
  11. package/dist/core/checkpoint.js.map +1 -0
  12. package/dist/core/errors.d.ts +12 -0
  13. package/dist/core/errors.js +17 -0
  14. package/dist/core/errors.js.map +1 -0
  15. package/dist/core/jsonl.d.ts +7 -0
  16. package/dist/core/jsonl.js +37 -0
  17. package/dist/core/jsonl.js.map +1 -0
  18. package/dist/core/providers.d.ts +6 -0
  19. package/dist/core/providers.js +17 -0
  20. package/dist/core/providers.js.map +1 -0
  21. package/dist/core/types.d.ts +247 -0
  22. package/dist/core/types.js +4 -0
  23. package/dist/core/types.js.map +1 -0
  24. package/dist/core/util.d.ts +14 -0
  25. package/dist/core/util.js +61 -0
  26. package/dist/core/util.js.map +1 -0
  27. package/dist/sources/claude.d.ts +6 -0
  28. package/dist/sources/claude.js +576 -0
  29. package/dist/sources/claude.js.map +1 -0
  30. package/dist/sources/codex.d.ts +11 -0
  31. package/dist/sources/codex.js +603 -0
  32. package/dist/sources/codex.js.map +1 -0
  33. package/dist/sources/codexAppServer.d.ts +24 -0
  34. package/dist/sources/codexAppServer.js +190 -0
  35. package/dist/sources/codexAppServer.js.map +1 -0
  36. package/dist/sources/files.d.ts +1 -0
  37. package/dist/sources/files.js +24 -0
  38. package/dist/sources/files.js.map +1 -0
  39. package/dist/sources/index.d.ts +3 -0
  40. package/dist/sources/index.js +15 -0
  41. package/dist/sources/index.js.map +1 -0
  42. package/dist/sources/opencode.d.ts +6 -0
  43. package/dist/sources/opencode.js +443 -0
  44. package/dist/sources/opencode.js.map +1 -0
  45. package/dist/target/cache.d.ts +14 -0
  46. package/dist/target/cache.js +155 -0
  47. package/dist/target/cache.js.map +1 -0
  48. package/dist/target/config.d.ts +22 -0
  49. package/dist/target/config.js +90 -0
  50. package/dist/target/config.js.map +1 -0
  51. package/dist/target/destination.d.ts +21 -0
  52. package/dist/target/destination.js +77 -0
  53. package/dist/target/destination.js.map +1 -0
  54. package/dist/target/importer.d.ts +86 -0
  55. package/dist/target/importer.js +597 -0
  56. package/dist/target/importer.js.map +1 -0
  57. package/dist/target/launch.d.ts +6 -0
  58. package/dist/target/launch.js +77 -0
  59. package/dist/target/launch.js.map +1 -0
  60. package/dist/target/ledger.d.ts +35 -0
  61. package/dist/target/ledger.js +174 -0
  62. package/dist/target/ledger.js.map +1 -0
  63. package/dist/target/reconciliation.d.ts +60 -0
  64. package/dist/target/reconciliation.js +259 -0
  65. package/dist/target/reconciliation.js.map +1 -0
  66. package/dist/target/replace.d.ts +9 -0
  67. package/dist/target/replace.js +341 -0
  68. package/dist/target/replace.js.map +1 -0
  69. package/dist/target/schema.d.ts +22 -0
  70. package/dist/target/schema.js +108 -0
  71. package/dist/target/schema.js.map +1 -0
  72. package/dist/target/sync.d.ts +34 -0
  73. package/dist/target/sync.js +879 -0
  74. package/dist/target/sync.js.map +1 -0
  75. package/dist/target/syncAll.d.ts +4 -0
  76. package/dist/target/syncAll.js +98 -0
  77. package/dist/target/syncAll.js.map +1 -0
  78. package/dist/target/v2.d.ts +18 -0
  79. package/dist/target/v2.js +267 -0
  80. package/dist/target/v2.js.map +1 -0
  81. package/dist/target/v2Profiles.d.ts +5 -0
  82. package/dist/target/v2Profiles.js +14 -0
  83. package/dist/target/v2Profiles.js.map +1 -0
  84. package/dist/tui.d.ts +49 -0
  85. package/dist/tui.js +560 -0
  86. package/dist/tui.js.map +1 -0
  87. package/package.json +93 -4
  88. package/vendor/t3-v010/LICENSE +21 -0
  89. package/vendor/t3-v010/THIRD-PARTY-NOTICES.txt +2274 -0
  90. package/vendor/t3-v010/reference.json +6 -0
  91. package/vendor/t3-v010/runtime.mjs +60364 -0
  92. package/vendor/t3-v010/schema-columns.json +568 -0
  93. package/vendor/t3-v011/LICENSE +21 -0
  94. package/vendor/t3-v011/THIRD-PARTY-NOTICES.txt +2274 -0
  95. package/vendor/t3-v011/reference.json +6 -0
  96. package/vendor/t3-v011/runtime.mjs +60993 -0
  97. package/vendor/t3-v011/schema-columns.json +526 -0
@@ -0,0 +1,24 @@
1
+ export declare class CodexAppServerSession {
2
+ private readonly child;
3
+ private readonly client;
4
+ private readonly stderr;
5
+ private closed;
6
+ private constructor();
7
+ static connect(): Promise<CodexAppServerSession>;
8
+ list(workspace?: string): Promise<CodexThreadMetadata[]>;
9
+ read(threadId: string): Promise<Record<string, unknown> | null>;
10
+ close(): Promise<void>;
11
+ }
12
+ export interface CodexThreadMetadata {
13
+ id: string;
14
+ name?: string;
15
+ preview?: string;
16
+ cwd?: string;
17
+ model?: string;
18
+ createdAt?: number;
19
+ updatedAt?: number;
20
+ parentThreadId?: string;
21
+ raw?: Record<string, unknown>;
22
+ }
23
+ export declare function listFromCodexAppServer(workspace?: string): Promise<CodexThreadMetadata[]>;
24
+ export declare function readFromCodexAppServer(threadId: string): Promise<Record<string, unknown> | null>;
@@ -0,0 +1,190 @@
1
+ import { spawn } from "node:child_process";
2
+ import { existsSync } from "node:fs";
3
+ import { delimiter, extname, join } from "node:path";
4
+ import { createInterface } from "node:readline";
5
+ import { isObject } from "../core/util.js";
6
+ class CodexRpcClient {
7
+ child;
8
+ nextId = 1;
9
+ pending = new Map();
10
+ constructor(child) {
11
+ this.child = child;
12
+ const rejectPending = (error) => {
13
+ for (const request of this.pending.values())
14
+ request.reject(error);
15
+ this.pending.clear();
16
+ };
17
+ const lines = createInterface({ input: child.stdout, crlfDelay: Infinity });
18
+ lines.on("line", (line) => {
19
+ try {
20
+ const message = JSON.parse(line);
21
+ if (!isObject(message) || typeof message.id !== "number")
22
+ return;
23
+ const pending = this.pending.get(message.id);
24
+ if (!pending)
25
+ return;
26
+ this.pending.delete(message.id);
27
+ if (message.error !== undefined)
28
+ pending.reject(new Error(JSON.stringify(message.error)));
29
+ else
30
+ pending.resolve(message.result);
31
+ }
32
+ catch {
33
+ // Notifications and non-JSON diagnostics are irrelevant to read-only discovery.
34
+ }
35
+ });
36
+ child.once("exit", (code) => {
37
+ rejectPending(new Error(`codex app-server exited with code ${String(code)}`));
38
+ });
39
+ child.once("error", (cause) => {
40
+ rejectPending(new Error(`Unable to start codex app-server: ${cause.message}`, { cause }));
41
+ });
42
+ // A failed or abruptly closed child can also surface EPIPE on stdin.
43
+ child.stdin.on("error", () => { });
44
+ }
45
+ request(method, params, timeoutMs = 8_000) {
46
+ const id = this.nextId++;
47
+ return new Promise((resolve, reject) => {
48
+ const timer = setTimeout(() => {
49
+ this.pending.delete(id);
50
+ reject(new Error(`codex app-server request timed out: ${method}`));
51
+ }, timeoutMs);
52
+ this.pending.set(id, {
53
+ resolve: (value) => { clearTimeout(timer); resolve(value); },
54
+ reject: (error) => { clearTimeout(timer); reject(error); },
55
+ });
56
+ this.child.stdin.write(`${JSON.stringify({ method, id, params })}\n`);
57
+ });
58
+ }
59
+ notify(method, params) {
60
+ this.child.stdin.write(`${JSON.stringify({ method, params })}\n`);
61
+ }
62
+ }
63
+ function launchCommand() {
64
+ const configured = process.env.CODEX_BIN?.trim();
65
+ if (configured)
66
+ return { executable: configured, shell: process.platform === "win32" && [".cmd", ".bat"].includes(extname(configured).toLowerCase()) };
67
+ if (process.platform === "win32") {
68
+ const directories = (process.env.PATH ?? "").split(delimiter).filter(Boolean);
69
+ const executable = directories.map((directory) => join(directory.replace(/^"|"$/gu, ""), "codex.exe")).find(existsSync);
70
+ if (executable)
71
+ return { executable, shell: false };
72
+ const shim = directories.map((directory) => join(directory.replace(/^"|"$/gu, ""), "codex.cmd")).find(existsSync);
73
+ if (shim)
74
+ return { executable: shim, shell: true };
75
+ }
76
+ return { executable: "codex", shell: false };
77
+ }
78
+ async function waitForExit(child, timeoutMs) {
79
+ if (child.exitCode !== null)
80
+ return true;
81
+ return new Promise((resolve) => {
82
+ const timer = setTimeout(() => resolve(false), timeoutMs);
83
+ child.once("exit", () => { clearTimeout(timer); resolve(true); });
84
+ });
85
+ }
86
+ export class CodexAppServerSession {
87
+ child;
88
+ client;
89
+ stderr;
90
+ closed = false;
91
+ constructor(child, client, stderr) {
92
+ this.child = child;
93
+ this.client = client;
94
+ this.stderr = stderr;
95
+ }
96
+ static async connect() {
97
+ const command = launchCommand();
98
+ const child = spawn(command.executable, ["app-server"], {
99
+ stdio: ["pipe", "pipe", "pipe"],
100
+ windowsHide: true,
101
+ shell: command.shell,
102
+ });
103
+ const stderr = { value: "" };
104
+ child.stderr.setEncoding("utf8");
105
+ child.stderr.on("data", (chunk) => { stderr.value += chunk; });
106
+ const session = new CodexAppServerSession(child, new CodexRpcClient(child), stderr);
107
+ try {
108
+ await session.client.request("initialize", {
109
+ clientInfo: { name: "t3_import", title: "T3 Import", version: "0.4.1" },
110
+ capabilities: { experimentalApi: true },
111
+ });
112
+ session.client.notify("initialized", {});
113
+ return session;
114
+ }
115
+ catch (error) {
116
+ if (stderr.value.trim() && error instanceof Error)
117
+ error.message += `\n${stderr.value.trim()}`;
118
+ await session.close();
119
+ throw error;
120
+ }
121
+ }
122
+ async list(workspace) {
123
+ const output = [];
124
+ let cursor = null;
125
+ do {
126
+ const result = await this.client.request("thread/list", {
127
+ cursor,
128
+ limit: 100,
129
+ sortKey: "updated_at",
130
+ ...(workspace ? { cwd: [workspace] } : {}),
131
+ }, 30_000);
132
+ if (!isObject(result) || !Array.isArray(result.data))
133
+ break;
134
+ for (const value of result.data) {
135
+ if (!isObject(value) || typeof value.id !== "string")
136
+ continue;
137
+ output.push({
138
+ id: value.id,
139
+ ...(typeof value.name === "string" && value.name.trim() ? { name: value.name } : {}),
140
+ ...(typeof value.preview === "string" ? { preview: value.preview } : {}),
141
+ ...(typeof value.cwd === "string" ? { cwd: value.cwd } : {}),
142
+ ...(typeof value.model === "string" ? { model: value.model } : {}),
143
+ ...(typeof value.createdAt === "number" ? { createdAt: value.createdAt } : {}),
144
+ ...(typeof value.updatedAt === "number" ? { updatedAt: value.updatedAt } : {}),
145
+ ...(typeof value.parentThreadId === "string" ? { parentThreadId: value.parentThreadId } : {}),
146
+ raw: value,
147
+ });
148
+ }
149
+ cursor = typeof result.nextCursor === "string" ? result.nextCursor : null;
150
+ } while (cursor);
151
+ return output;
152
+ }
153
+ async read(threadId) {
154
+ const result = await this.client.request("thread/read", { threadId, includeTurns: true }, 12_000);
155
+ return isObject(result) && isObject(result.thread) ? result.thread : null;
156
+ }
157
+ async close() {
158
+ if (this.closed)
159
+ return;
160
+ this.closed = true;
161
+ try {
162
+ this.child.stdin.end();
163
+ }
164
+ catch { /* process never started */ }
165
+ if (!await waitForExit(this.child, 750) && this.child.exitCode === null)
166
+ this.child.kill();
167
+ if (!await waitForExit(this.child, 750) && this.child.exitCode === null)
168
+ this.child.kill("SIGKILL");
169
+ this.child.stdin.destroy();
170
+ this.child.stdout.destroy();
171
+ this.child.stderr.destroy();
172
+ this.child.unref();
173
+ }
174
+ }
175
+ async function withSession(operation) {
176
+ const session = await CodexAppServerSession.connect();
177
+ try {
178
+ return await operation(session);
179
+ }
180
+ finally {
181
+ await session.close();
182
+ }
183
+ }
184
+ export async function listFromCodexAppServer(workspace) {
185
+ return withSession((session) => session.list(workspace));
186
+ }
187
+ export async function readFromCodexAppServer(threadId) {
188
+ return withSession((session) => session.read(threadId));
189
+ }
190
+ //# sourceMappingURL=codexAppServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codexAppServer.js","sourceRoot":"","sources":["../../src/sources/codexAppServer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function walkFiles(root: string, extension: string): Promise<string[]>;
@@ -0,0 +1,24 @@
1
+ import { readdir } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ export async function walkFiles(root, extension) {
4
+ const output = [];
5
+ const visit = async (directory) => {
6
+ let entries;
7
+ try {
8
+ entries = await readdir(directory, { withFileTypes: true });
9
+ }
10
+ catch {
11
+ return;
12
+ }
13
+ await Promise.all(entries.map(async (entry) => {
14
+ const path = join(directory, entry.name);
15
+ if (entry.isDirectory())
16
+ await visit(path);
17
+ else if (entry.isFile() && entry.name.endsWith(extension))
18
+ output.push(path);
19
+ }));
20
+ };
21
+ await visit(root);
22
+ return output;
23
+ }
24
+ //# sourceMappingURL=files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/sources/files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAY,EAAE,SAAiB;IAC7D,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,KAAK,EAAE,SAAiB,EAAiB,EAAE;QACvD,IAAI,OAAO,CAAC;QACZ,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QACD,MAAM,OAAO,CAAC,GAAG,CACf,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACzC,IAAI,KAAK,CAAC,WAAW,EAAE;gBAAE,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;iBACtC,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/E,CAAC,CAAC,CACH,CAAC;IACJ,CAAC,CAAC;IACF,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;IAClB,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { SourceAdapter, SourceName } from "../core/types.js";
2
+ export declare function sourceAdapter(name: SourceName): SourceAdapter;
3
+ export declare function disposeSourceAdapters(): Promise<void>;
@@ -0,0 +1,15 @@
1
+ import { ClaudeSource } from "./claude.js";
2
+ import { CodexSource } from "./codex.js";
3
+ import { OpenCodeSource } from "./opencode.js";
4
+ const adapters = {
5
+ codex: new CodexSource(),
6
+ claude: new ClaudeSource(),
7
+ opencode: new OpenCodeSource(),
8
+ };
9
+ export function sourceAdapter(name) {
10
+ return adapters[name];
11
+ }
12
+ export async function disposeSourceAdapters() {
13
+ await Promise.all(Object.values(adapters).map((adapter) => adapter.dispose?.()));
14
+ }
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sources/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,MAAM,QAAQ,GAAsC;IAClD,KAAK,EAAE,IAAI,WAAW,EAAE;IACxB,MAAM,EAAE,IAAI,YAAY,EAAE;IAC1B,QAAQ,EAAE,IAAI,cAAc,EAAE;CAC/B,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,IAAgB;IAC5C,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AACnF,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { CanonicalConversation, DiscoveryOptions, SourceAdapter, SourceSummary } from "../core/types.js";
2
+ export declare class OpenCodeSource implements SourceAdapter {
3
+ readonly name: SourceAdapter["name"];
4
+ discover(options: DiscoveryOptions): Promise<SourceSummary[]>;
5
+ load(summary: SourceSummary, options: DiscoveryOptions): Promise<CanonicalConversation>;
6
+ }