codebase-cli 2.0.0-pre.4 → 2.0.0-pre.40
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/agent/agent.js +43 -15
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/config.js +61 -20
- package/dist/agent/config.js.map +1 -1
- package/dist/agent/events.bench.js +84 -0
- package/dist/agent/events.bench.js.map +1 -0
- package/dist/agent/prompt-suggestion.js +141 -0
- package/dist/agent/prompt-suggestion.js.map +1 -0
- package/dist/agent/system-prompt.js +15 -0
- package/dist/agent/system-prompt.js.map +1 -1
- package/dist/app-server/protocol.js +7 -0
- package/dist/app-server/protocol.js.map +1 -0
- package/dist/app-server/server.js +241 -0
- package/dist/app-server/server.js.map +1 -0
- package/dist/auth/cli.js +1 -1
- package/dist/auth/cli.js.map +1 -1
- package/dist/auth/credentials.js +33 -2
- package/dist/auth/credentials.js.map +1 -1
- package/dist/auth/flow.js +145 -24
- package/dist/auth/flow.js.map +1 -1
- package/dist/auth/token-manager.js +73 -0
- package/dist/auth/token-manager.js.map +1 -0
- package/dist/cli.js +56 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/builtins.js +160 -14
- package/dist/commands/builtins.js.map +1 -1
- package/dist/commands/registry.js +46 -1
- package/dist/commands/registry.js.map +1 -1
- package/dist/compaction/monitor.js +38 -0
- package/dist/compaction/monitor.js.map +1 -0
- package/dist/config/types.js.map +1 -1
- package/dist/glue/client.js +12 -2
- package/dist/glue/client.js.map +1 -1
- package/dist/hooks/manager.js +8 -2
- package/dist/hooks/manager.js.map +1 -1
- package/dist/memory/store.js +2 -3
- package/dist/memory/store.js.map +1 -1
- package/dist/plan/run-flow.js +89 -0
- package/dist/plan/run-flow.js.map +1 -0
- package/dist/projects/cli.js +92 -0
- package/dist/projects/cli.js.map +1 -0
- package/dist/projects/client.js +120 -0
- package/dist/projects/client.js.map +1 -0
- package/dist/projects/types.js +2 -0
- package/dist/projects/types.js.map +1 -0
- package/dist/skills/platform-loader.js +133 -38
- package/dist/skills/platform-loader.js.map +1 -1
- package/dist/tools/__test__/mock-tool-context.js +31 -0
- package/dist/tools/__test__/mock-tool-context.js.map +1 -0
- package/dist/tools/file-state-cache.js.map +1 -1
- package/dist/tools/read-file.js +7 -2
- package/dist/tools/read-file.js.map +1 -1
- package/dist/ui/App.js +109 -110
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/CompactionBanner.js +23 -0
- package/dist/ui/CompactionBanner.js.map +1 -0
- package/dist/ui/FirstRunSetup.js +66 -14
- package/dist/ui/FirstRunSetup.js.map +1 -1
- package/dist/ui/Input.js +370 -20
- package/dist/ui/Input.js.map +1 -1
- package/dist/ui/Markdown.js +286 -0
- package/dist/ui/Markdown.js.map +1 -0
- package/dist/ui/Message.js +110 -48
- package/dist/ui/Message.js.map +1 -1
- package/dist/ui/MessageList.js +100 -3
- package/dist/ui/MessageList.js.map +1 -1
- package/dist/ui/Permission.js +43 -20
- package/dist/ui/Permission.js.map +1 -1
- package/dist/ui/PixelC.js +25 -0
- package/dist/ui/PixelC.js.map +1 -0
- package/dist/ui/Status.js +267 -7
- package/dist/ui/Status.js.map +1 -1
- package/dist/ui/Throbber.js +11 -7
- package/dist/ui/Throbber.js.map +1 -1
- package/dist/ui/Welcome.js +59 -0
- package/dist/ui/Welcome.js.map +1 -0
- package/dist/ui/attachments.js +68 -0
- package/dist/ui/attachments.js.map +1 -0
- package/dist/ui/debug-input.js +44 -0
- package/dist/ui/debug-input.js.map +1 -0
- package/dist/ui/diff-summary.js +171 -0
- package/dist/ui/diff-summary.js.map +1 -0
- package/dist/ui/highlight.js +324 -0
- package/dist/ui/highlight.js.map +1 -0
- package/dist/ui/history-store.js +60 -0
- package/dist/ui/history-store.js.map +1 -0
- package/dist/ui/input-state.js +125 -1
- package/dist/ui/input-state.js.map +1 -1
- package/dist/ui/path-complete.js +102 -0
- package/dist/ui/path-complete.js.map +1 -0
- package/dist/ui/paths.js +41 -0
- package/dist/ui/paths.js.map +1 -0
- package/dist/ui/shell-escape.js +42 -0
- package/dist/ui/shell-escape.js.map +1 -0
- package/dist/ui/terminal-restore.js +83 -0
- package/dist/ui/terminal-restore.js.map +1 -0
- package/dist/ui/terminal-title.js +21 -0
- package/dist/ui/terminal-title.js.map +1 -0
- package/dist/ui/tool-call-line.js +83 -0
- package/dist/ui/tool-call-line.js.map +1 -0
- package/dist/ui/tool-labels.js +194 -0
- package/dist/ui/tool-labels.js.map +1 -0
- package/dist/ui/truncated-output.js +42 -0
- package/dist/ui/truncated-output.js.map +1 -0
- package/dist/ui/use-coalesced-agent-events.js +70 -0
- package/dist/ui/use-coalesced-agent-events.js.map +1 -0
- package/dist/ui/use-prompt-suggestion.js +52 -0
- package/dist/ui/use-prompt-suggestion.js.map +1 -0
- package/dist/ui/wrapped-lines.js +18 -0
- package/dist/ui/wrapped-lines.js.map +1 -0
- package/package.json +4 -1
package/dist/glue/client.js
CHANGED
|
@@ -11,11 +11,12 @@ export class GlueClient {
|
|
|
11
11
|
return this.complete(this.options.smartModel, prompt, system, signal);
|
|
12
12
|
}
|
|
13
13
|
async complete(model, prompt, system, signal) {
|
|
14
|
+
const apiKey = await this.options.getApiKey();
|
|
14
15
|
const message = await completeSimple(model, {
|
|
15
16
|
systemPrompt: system,
|
|
16
17
|
messages: [{ role: "user", content: prompt, timestamp: Date.now() }],
|
|
17
18
|
}, {
|
|
18
|
-
apiKey
|
|
19
|
+
apiKey,
|
|
19
20
|
signal,
|
|
20
21
|
maxTokens: this.options.maxTokens ?? 8000,
|
|
21
22
|
});
|
|
@@ -42,6 +43,15 @@ export function parseGlueRef(ref, fallback) {
|
|
|
42
43
|
return fallback;
|
|
43
44
|
const [maybeProvider, maybeId] = trimmed.includes(":") ? trimmed.split(":", 2) : [fallback.provider, trimmed];
|
|
44
45
|
const found = getModel(maybeProvider, maybeId);
|
|
45
|
-
|
|
46
|
+
if (found)
|
|
47
|
+
return found;
|
|
48
|
+
// Lookup miss — typo or unknown model. Falling back is correct, but
|
|
49
|
+
// silent fallback meant users who set GLUE_SMART_MODEL=foo-typo
|
|
50
|
+
// thought they were getting their smart model and were actually
|
|
51
|
+
// getting the parent. Make it visible under CODEBASE_DEBUG=1.
|
|
52
|
+
if (process.env.CODEBASE_DEBUG === "1") {
|
|
53
|
+
process.stderr.write(`[glue] no model matched "${trimmed}" — falling back to ${fallback.provider}/${fallback.id}\n`);
|
|
54
|
+
}
|
|
55
|
+
return fallback;
|
|
46
56
|
}
|
|
47
57
|
//# sourceMappingURL=client.js.map
|
package/dist/glue/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/glue/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAkC,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/glue/client.ts"],"names":[],"mappings":"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"}
|
package/dist/hooks/manager.js
CHANGED
|
@@ -62,8 +62,14 @@ export class HookManager {
|
|
|
62
62
|
let ranCount = 0;
|
|
63
63
|
for (const config of matching) {
|
|
64
64
|
if (config.async) {
|
|
65
|
-
runHook(config, context, signal).catch(() => {
|
|
66
|
-
// fire-and-forget
|
|
65
|
+
runHook(config, context, signal).catch((err) => {
|
|
66
|
+
// async hooks fire-and-forget by design, but a hook that's
|
|
67
|
+
// silently throwing on every event will mystify the user
|
|
68
|
+
// who configured it. Surface to stderr under CODEBASE_DEBUG
|
|
69
|
+
// so it's visible when someone is actually looking.
|
|
70
|
+
if (process.env.CODEBASE_DEBUG === "1") {
|
|
71
|
+
process.stderr.write(`[hook async event=${event}] ${err instanceof Error ? err.message : String(err)}\n`);
|
|
72
|
+
}
|
|
67
73
|
});
|
|
68
74
|
ranCount++;
|
|
69
75
|
continue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/hooks/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;;;;;;;GAQG;AACH,MAAM,OAAO,WAAW;IACN,OAAO,GAAiB,EAAE,CAAC;IAE5C;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,KAA6B;QACxC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,IAAI,IAAY,CAAC;YACjB,IAAI,CAAC;gBACJ,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACnC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACd,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,CAAC;gBACjD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACvB,OAAO,CAAC,IAAI,CAAC,yBAAyB,IAAI,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC1E,CAAC;gBACD,SAAS;YACV,CAAC;YACD,IAAI,MAAiB,CAAC;YACtB,IAAI,CAAC;gBACJ,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAc,CAAC;YACxC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACd,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,uBAAwB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC5E,SAAS;YACV,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClC,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,kCAAkC,CAAC,CAAC;gBAC/D,SAAS;YACV,CAAC;YACD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACnC,IAAI,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC;oBAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3D,CAAC;QACF,CAAC;IACF,CAAC;IAED,sDAAsD;IACtD,GAAG;QACF,OAAO,IAAI,CAAC,OAAO,CAAC;IACrB,CAAC;IAED,QAAQ,CAAC,KAAgB,EAAE,OAAyB;QACnD,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IACzF,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,KAAgB,EAAE,OAAyB,EAAE,MAAoB;QAC/E,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC/C,IAAI,QAAQ,GAAG,CAAC,CAAC;QAEjB,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBAClB,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/hooks/manager.ts"],"names":[],"mappings":"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"}
|
package/dist/memory/store.js
CHANGED
|
@@ -107,9 +107,8 @@ export class MemoryStore {
|
|
|
107
107
|
/**
|
|
108
108
|
* MEMORY.md content trimmed to fit a system-prompt injection budget.
|
|
109
109
|
* Line cut first (≤200 lines), then byte cut at the next newline so
|
|
110
|
-
* we never split a list entry mid-line.
|
|
111
|
-
*
|
|
112
|
-
* cache boundaries.
|
|
110
|
+
* we never split a list entry mid-line. Keeps injection length stable
|
|
111
|
+
* across saves so prompt-cache boundaries don't shift.
|
|
113
112
|
*/
|
|
114
113
|
truncatedIndex() {
|
|
115
114
|
const raw = this.index();
|
package/dist/memory/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/memory/store.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/memory/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { UserQueryCancelled } from "../user-queries/store.js";
|
|
2
|
+
import { buildAgentPrompt, generatePlan, generateQuestion, MAX_QUESTIONS, parseAnswer, revisePlan } from "./flow.js";
|
|
3
|
+
import { ANSWER_START_BUILDING } from "./types.js";
|
|
4
|
+
/**
|
|
5
|
+
* Plan-mode flow:
|
|
6
|
+
* 1. Q&A loop (up to MAX_QUESTIONS, with the start-building escape).
|
|
7
|
+
* 2. Generate plan, render as a synthetic assistant message so the
|
|
8
|
+
* user can read it in chat.
|
|
9
|
+
* 3. Approve / Revise / Cancel via the UserQuery primitive.
|
|
10
|
+
* 4. On approve, hand the original prompt + plan + Q&A to the agent
|
|
11
|
+
* with the canonical buildAgentPrompt wrapper so weaker models
|
|
12
|
+
* stick to the plan instead of re-planning mid-execution.
|
|
13
|
+
*/
|
|
14
|
+
export async function runPlanFlow(bundle, originalPrompt, handlers) {
|
|
15
|
+
const { onReply, onError } = handlers;
|
|
16
|
+
const qaHistory = [];
|
|
17
|
+
try {
|
|
18
|
+
for (let i = 0; i < MAX_QUESTIONS; i++) {
|
|
19
|
+
const result = await generateQuestion(bundle.glue, originalPrompt, qaHistory, i);
|
|
20
|
+
if (result.done || !result.question)
|
|
21
|
+
break;
|
|
22
|
+
const q = result.question;
|
|
23
|
+
const optionLabels = q.options?.map((o) => o.label);
|
|
24
|
+
const answer = await bundle.userQueries.ask({
|
|
25
|
+
question: q.question,
|
|
26
|
+
options: optionLabels,
|
|
27
|
+
placeholder: optionLabels ? `1-${optionLabels.length}, or type a free-form answer` : undefined,
|
|
28
|
+
});
|
|
29
|
+
const resolved = parseAnswer(answer, q);
|
|
30
|
+
if (resolved === ANSWER_START_BUILDING)
|
|
31
|
+
break;
|
|
32
|
+
qaHistory.push({ question: q.question, answer: resolved });
|
|
33
|
+
}
|
|
34
|
+
let plan = await generatePlan(bundle.glue, originalPrompt, qaHistory);
|
|
35
|
+
while (true) {
|
|
36
|
+
onReply(plan);
|
|
37
|
+
const decision = await bundle.userQueries.ask({
|
|
38
|
+
question: "Approve this plan and run it?",
|
|
39
|
+
options: ["Yes — run it", "Revise", "Cancel"],
|
|
40
|
+
});
|
|
41
|
+
const choice = matchOption(decision, ["Yes — run it", "Revise", "Cancel"]);
|
|
42
|
+
if (choice === "Yes — run it") {
|
|
43
|
+
const finalPrompt = buildAgentPrompt(originalPrompt, plan, qaHistory);
|
|
44
|
+
bundle.agent.prompt(finalPrompt).catch((err) => {
|
|
45
|
+
onError(err instanceof Error ? err.message : String(err));
|
|
46
|
+
});
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
if (choice === "Cancel") {
|
|
50
|
+
onReply("(plan cancelled)");
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const feedback = await bundle.userQueries.ask({
|
|
54
|
+
question: "What should change about the plan?",
|
|
55
|
+
placeholder: "describe the revision",
|
|
56
|
+
});
|
|
57
|
+
plan = await revisePlan(bundle.glue, plan, feedback);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
if (err instanceof UserQueryCancelled) {
|
|
62
|
+
onReply("(plan cancelled)");
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
onError(`plan flow failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Resolve a user's typed answer to one of the supplied options.
|
|
70
|
+
* Accepts the option label (case-insensitive), a 1-based index,
|
|
71
|
+
* or the leading word of the label. Falls back to the raw input
|
|
72
|
+
* if nothing matches — caller decides what to do with that.
|
|
73
|
+
*/
|
|
74
|
+
function matchOption(answer, options) {
|
|
75
|
+
const trimmed = answer.trim();
|
|
76
|
+
const idx = Number.parseInt(trimmed, 10);
|
|
77
|
+
if (Number.isFinite(idx) && idx >= 1 && idx <= options.length) {
|
|
78
|
+
return options[idx - 1];
|
|
79
|
+
}
|
|
80
|
+
const lower = trimmed.toLowerCase();
|
|
81
|
+
for (const option of options) {
|
|
82
|
+
if (option.toLowerCase() === lower)
|
|
83
|
+
return option;
|
|
84
|
+
if (option.toLowerCase().startsWith(lower) && lower.length >= 3)
|
|
85
|
+
return option;
|
|
86
|
+
}
|
|
87
|
+
return trimmed;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=run-flow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-flow.js","sourceRoot":"","sources":["../../src/plan/run-flow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { defaultDownloadPath, NotAuthenticatedError, ProjectClient, ProjectClientError } from "./client.js";
|
|
2
|
+
/**
|
|
3
|
+
* Dispatch a `codebase project …` subcommand. Returns the exit code
|
|
4
|
+
* to surface from the parent process.
|
|
5
|
+
*
|
|
6
|
+
* Recognized argv (relative to the entry point — argv[0] is the
|
|
7
|
+
* "project" word that the dispatcher already matched):
|
|
8
|
+
* project → list (default)
|
|
9
|
+
* project list → list
|
|
10
|
+
* project pull <id> → pull project to ~/.codebase/pulls/<id>.zip
|
|
11
|
+
* project pull <id> <dest> → pull to <dest>
|
|
12
|
+
*/
|
|
13
|
+
export async function runProjectSubcommand(argv, options = {}) {
|
|
14
|
+
const out = options.stdout ?? ((m) => process.stdout.write(`${m}\n`));
|
|
15
|
+
const err = options.stderr ?? ((m) => process.stderr.write(`${m}\n`));
|
|
16
|
+
const client = options.client ?? new ProjectClient();
|
|
17
|
+
const subcommand = argv[1] ?? "list";
|
|
18
|
+
try {
|
|
19
|
+
switch (subcommand) {
|
|
20
|
+
case "list":
|
|
21
|
+
case "ls":
|
|
22
|
+
return await listCmd(client, out);
|
|
23
|
+
case "pull":
|
|
24
|
+
return await pullCmd(client, argv[2], argv[3], out, err);
|
|
25
|
+
default:
|
|
26
|
+
err(`unknown subcommand: ${subcommand}`);
|
|
27
|
+
err("usage: codebase project [list | pull <id> [dest]]");
|
|
28
|
+
return 2;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
catch (e) {
|
|
32
|
+
if (e instanceof NotAuthenticatedError) {
|
|
33
|
+
err(e.message);
|
|
34
|
+
return 1;
|
|
35
|
+
}
|
|
36
|
+
if (e instanceof ProjectClientError) {
|
|
37
|
+
err(`error: ${e.message}`);
|
|
38
|
+
return e.status === 404 ? 4 : 1;
|
|
39
|
+
}
|
|
40
|
+
err(`error: ${e instanceof Error ? e.message : String(e)}`);
|
|
41
|
+
return 1;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
async function listCmd(client, out) {
|
|
45
|
+
const projects = await client.list();
|
|
46
|
+
if (projects.length === 0) {
|
|
47
|
+
out("(no projects yet — build one at https://codebase.design or pull an existing one)");
|
|
48
|
+
return 0;
|
|
49
|
+
}
|
|
50
|
+
out(`${projects.length} project${projects.length === 1 ? "" : "s"}:`);
|
|
51
|
+
out("");
|
|
52
|
+
for (const p of projects) {
|
|
53
|
+
out(formatProjectLine(p));
|
|
54
|
+
}
|
|
55
|
+
out("");
|
|
56
|
+
out("pull one with: codebase project pull <id>");
|
|
57
|
+
return 0;
|
|
58
|
+
}
|
|
59
|
+
async function pullCmd(client, projectId, dest, out, err) {
|
|
60
|
+
if (!projectId) {
|
|
61
|
+
err("usage: codebase project pull <id> [dest]");
|
|
62
|
+
return 2;
|
|
63
|
+
}
|
|
64
|
+
if (!client.hasCredentials()) {
|
|
65
|
+
throw new NotAuthenticatedError();
|
|
66
|
+
}
|
|
67
|
+
const target = dest ?? defaultDownloadPath(projectId);
|
|
68
|
+
out(`pulling ${projectId} → ${target}`);
|
|
69
|
+
const result = await client.pull(projectId, dest);
|
|
70
|
+
const kb = (result.bytes / 1024).toFixed(1);
|
|
71
|
+
out(`✓ wrote ${result.path} (${kb} KB)`);
|
|
72
|
+
out("");
|
|
73
|
+
out(`unzip with: unzip -d ./${projectId} ${result.path}`);
|
|
74
|
+
return 0;
|
|
75
|
+
}
|
|
76
|
+
function formatProjectLine(p) {
|
|
77
|
+
const id = p.id.padEnd(36);
|
|
78
|
+
const title = (p.title ?? "(untitled)").padEnd(28);
|
|
79
|
+
const sourceTag = p.source === "storage-only" ? " [storage]" : "";
|
|
80
|
+
const date = p.publishedAt
|
|
81
|
+
? ` · published ${shortDate(p.publishedAt)}`
|
|
82
|
+
: p.createdAt
|
|
83
|
+
? ` · created ${shortDate(p.createdAt)}`
|
|
84
|
+
: "";
|
|
85
|
+
return ` ${id} ${title}${sourceTag}${date}`;
|
|
86
|
+
}
|
|
87
|
+
function shortDate(iso) {
|
|
88
|
+
// Strip the time portion for the listing — full ISO is verbose
|
|
89
|
+
// and the user just wants to scan dates.
|
|
90
|
+
return iso.slice(0, 10);
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/projects/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { createWriteStream, mkdirSync, statSync } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
4
|
+
import { Readable } from "node:stream";
|
|
5
|
+
import { pipeline } from "node:stream/promises";
|
|
6
|
+
import { CredentialsStore } from "../auth/credentials.js";
|
|
7
|
+
const DEFAULT_BASE = "https://codebase.design";
|
|
8
|
+
export class NotAuthenticatedError extends Error {
|
|
9
|
+
constructor() {
|
|
10
|
+
super("not signed in to codebase.design. Run `codebase auth login`, or use BYOK by setting an *_API_KEY env var.");
|
|
11
|
+
this.name = "NotAuthenticatedError";
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export class ProjectClientError extends Error {
|
|
15
|
+
status;
|
|
16
|
+
constructor(message, status) {
|
|
17
|
+
super(message);
|
|
18
|
+
this.status = status;
|
|
19
|
+
this.name = "ProjectClientError";
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Read-only client for the `/cli/projects` endpoints on
|
|
24
|
+
* codebase.design. Both endpoints require the `projects` scope on
|
|
25
|
+
* the access token — already requested by the OAuth flow's default
|
|
26
|
+
* scopes (`inference projects credits`).
|
|
27
|
+
*/
|
|
28
|
+
export class ProjectClient {
|
|
29
|
+
baseUrl;
|
|
30
|
+
credStore;
|
|
31
|
+
fetchFn;
|
|
32
|
+
constructor(opts = {}) {
|
|
33
|
+
this.baseUrl = (opts.baseUrl ?? DEFAULT_BASE).replace(/\/+$/, "");
|
|
34
|
+
this.credStore = opts.credentials ?? new CredentialsStore();
|
|
35
|
+
this.fetchFn = opts.fetchFn ?? globalThis.fetch.bind(globalThis);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* List the user's projects. Merges the Convex-sourced list with
|
|
39
|
+
* raw storage-only entries the backend reports separately, so the
|
|
40
|
+
* CLI sees both indexed-and-published projects and any work-in-
|
|
41
|
+
* progress trees that haven't been published yet.
|
|
42
|
+
*/
|
|
43
|
+
async list() {
|
|
44
|
+
const token = this.requireToken();
|
|
45
|
+
const res = await this.fetchFn(`${this.baseUrl}/api/cli/projects`, {
|
|
46
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
47
|
+
});
|
|
48
|
+
if (res.status === 401)
|
|
49
|
+
throw new NotAuthenticatedError();
|
|
50
|
+
if (!res.ok) {
|
|
51
|
+
throw new ProjectClientError(`list projects failed: ${res.status} ${await res.text().catch(() => "")}`.trim(), res.status);
|
|
52
|
+
}
|
|
53
|
+
const body = (await res.json());
|
|
54
|
+
const indexed = (body.projects ?? []).map((p) => ({
|
|
55
|
+
...p,
|
|
56
|
+
source: "convex",
|
|
57
|
+
}));
|
|
58
|
+
const indexedIds = new Set(indexed.map((p) => p.id));
|
|
59
|
+
const storageOnly = [];
|
|
60
|
+
for (const id of body.s3Projects ?? []) {
|
|
61
|
+
if (indexedIds.has(id))
|
|
62
|
+
continue;
|
|
63
|
+
storageOnly.push({ id, source: "storage-only" });
|
|
64
|
+
}
|
|
65
|
+
return [...indexed, ...storageOnly];
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Download a project as a ZIP and stream-write it to `destPath`
|
|
69
|
+
* (or `~/.codebase/pulls/<id>.zip` if not given). Returns the path
|
|
70
|
+
* the bytes were written to plus the file size on disk so the
|
|
71
|
+
* caller can surface it.
|
|
72
|
+
*/
|
|
73
|
+
async pull(projectId, destPath) {
|
|
74
|
+
const token = this.requireToken();
|
|
75
|
+
const res = await this.fetchFn(`${this.baseUrl}/api/cli/projects/${encodeURIComponent(projectId)}/pull`, {
|
|
76
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
77
|
+
});
|
|
78
|
+
if (res.status === 401)
|
|
79
|
+
throw new NotAuthenticatedError();
|
|
80
|
+
if (res.status === 404) {
|
|
81
|
+
throw new ProjectClientError(`project not found: ${projectId}`, 404);
|
|
82
|
+
}
|
|
83
|
+
if (!res.ok) {
|
|
84
|
+
throw new ProjectClientError(`pull failed: ${res.status} ${await res.text().catch(() => "")}`.trim(), res.status);
|
|
85
|
+
}
|
|
86
|
+
const finalPath = destPath ?? defaultPullPath(projectId);
|
|
87
|
+
mkdirSync(dirname(finalPath), { recursive: true });
|
|
88
|
+
if (!res.body) {
|
|
89
|
+
throw new ProjectClientError("pull response had no body", res.status);
|
|
90
|
+
}
|
|
91
|
+
await pipeline(Readable.fromWeb(res.body), createWriteStream(finalPath));
|
|
92
|
+
const bytes = statSync(finalPath).size;
|
|
93
|
+
return { path: finalPath, bytes };
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Convenience: returns the loaded credential, or null if none.
|
|
97
|
+
* Useful for slash commands that want to gracefully degrade
|
|
98
|
+
* instead of throwing.
|
|
99
|
+
*/
|
|
100
|
+
hasCredentials() {
|
|
101
|
+
const creds = this.credStore.load();
|
|
102
|
+
return !!creds && !this.credStore.isExpired(creds);
|
|
103
|
+
}
|
|
104
|
+
requireToken() {
|
|
105
|
+
const creds = this.credStore.load();
|
|
106
|
+
if (!creds || this.credStore.isExpired(creds)) {
|
|
107
|
+
throw new NotAuthenticatedError();
|
|
108
|
+
}
|
|
109
|
+
return creds.accessToken;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function defaultPullPath(projectId) {
|
|
113
|
+
const safe = projectId.replace(/[^a-zA-Z0-9._-]/g, "_");
|
|
114
|
+
return join(homedir(), ".codebase", "pulls", `${safe}.zip`);
|
|
115
|
+
}
|
|
116
|
+
/** Re-export so callers can pre-check the destination path. */
|
|
117
|
+
export function defaultDownloadPath(projectId) {
|
|
118
|
+
return defaultPullPath(projectId);
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/projects/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/projects/types.ts"],"names":[],"mappings":""}
|