codebase-cli 2.0.0-pre.0 → 2.0.0-pre.10
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 +16 -1
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/config.js +102 -15
- package/dist/agent/config.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 +22 -5
- package/dist/auth/cli.js.map +1 -1
- package/dist/auth/credentials.js +5 -1
- package/dist/auth/credentials.js.map +1 -1
- package/dist/auth/flow.js +174 -41
- package/dist/auth/flow.js.map +1 -1
- package/dist/cli.js +60 -3
- package/dist/cli.js.map +1 -1
- package/dist/commands/builtins.js +272 -1
- package/dist/commands/builtins.js.map +1 -1
- package/dist/config/store.js +125 -0
- package/dist/config/store.js.map +1 -0
- package/dist/config/types.js +2 -0
- package/dist/config/types.js.map +1 -0
- package/dist/headless/run.js +129 -21
- package/dist/headless/run.js.map +1 -1
- package/dist/permissions/store.js +105 -3
- package/dist/permissions/store.js.map +1 -1
- 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/config.js +74 -0
- package/dist/tools/config.js.map +1 -0
- package/dist/tools/dispatch-agent.js +16 -0
- package/dist/tools/dispatch-agent.js.map +1 -1
- package/dist/tools/registry.js +4 -0
- package/dist/tools/registry.js.map +1 -1
- package/dist/ui/App.js +23 -10
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/FirstRunSetup.js +239 -0
- package/dist/ui/FirstRunSetup.js.map +1 -0
- package/dist/ui/Message.js +80 -1
- package/dist/ui/Message.js.map +1 -1
- package/dist/ui/Status.js +13 -2
- package/dist/ui/Status.js.map +1 -1
- package/package.json +3 -1
package/dist/agent/agent.js
CHANGED
|
@@ -2,6 +2,7 @@ import { homedir } from "node:os";
|
|
|
2
2
|
import { isAbsolute, join, resolve } from "node:path";
|
|
3
3
|
import { Agent } from "@earendil-works/pi-agent-core";
|
|
4
4
|
import { CompactionEngine } from "../compaction/engine.js";
|
|
5
|
+
import { ConfigStore } from "../config/store.js";
|
|
5
6
|
import { DiagnosticsEngine, formatDiagnostics } from "../diagnostics/engine.js";
|
|
6
7
|
import { GlueClient, resolveGlueModels } from "../glue/client.js";
|
|
7
8
|
import { HookManager } from "../hooks/manager.js";
|
|
@@ -38,7 +39,12 @@ export function createAgent(opts = {}) {
|
|
|
38
39
|
const { model, apiKey, source } = resolveConfig();
|
|
39
40
|
const cwd = opts.cwd ?? process.cwd();
|
|
40
41
|
const systemPrompt = opts.systemPrompt ?? buildSystemPrompt(cwd);
|
|
41
|
-
const
|
|
42
|
+
const config = new ConfigStore({ cwd });
|
|
43
|
+
const permissions = new PermissionStore({
|
|
44
|
+
allowPatterns: config.allowPatterns(),
|
|
45
|
+
denyPatterns: config.denyPatterns(),
|
|
46
|
+
autoApprove: opts.autoApprove,
|
|
47
|
+
});
|
|
42
48
|
const userQueries = new UserQueryStore();
|
|
43
49
|
const planMode = new PlanModeStore();
|
|
44
50
|
const memory = new MemoryStore({ cwd });
|
|
@@ -61,6 +67,7 @@ export function createAgent(opts = {}) {
|
|
|
61
67
|
userQueries,
|
|
62
68
|
planMode,
|
|
63
69
|
memory,
|
|
70
|
+
hooks,
|
|
64
71
|
spawnSubagent: ({ systemPrompt: subPrompt, tools: subTools }) => new Agent({
|
|
65
72
|
initialState: { model, systemPrompt: subPrompt, tools: subTools },
|
|
66
73
|
getApiKey: () => apiKey,
|
|
@@ -80,7 +87,15 @@ export function createAgent(opts = {}) {
|
|
|
80
87
|
transformContext: async (messages, signal) => {
|
|
81
88
|
if (!compaction.needsCompaction(messages))
|
|
82
89
|
return messages;
|
|
90
|
+
await hooks.dispatch("PreCompact", { event: "PreCompact", workingDir: cwd, messageCount: messages.length }, signal);
|
|
83
91
|
const result = await compaction.compact(messages, signal);
|
|
92
|
+
await hooks.dispatch("PostCompact", {
|
|
93
|
+
event: "PostCompact",
|
|
94
|
+
workingDir: cwd,
|
|
95
|
+
messageCount: result.messages.length,
|
|
96
|
+
collapsedMessageCount: result.details.collapsedMessageCount,
|
|
97
|
+
truncatedTokens: result.details.truncatedTokens,
|
|
98
|
+
}, signal);
|
|
84
99
|
return result.messages;
|
|
85
100
|
},
|
|
86
101
|
beforeToolCall: async (ctx, signal) => {
|
package/dist/agent/agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/agent/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,KAAK,EAAmB,MAAM,+BAA+B,CAAC;AAEvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAuB,aAAa,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,gBAAgB,GAAwB,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC;AAElH;;;;;GAKG;AACH,MAAM,iBAAiB,GAAwB,IAAI,GAAG,CAAC;IACtD,YAAY;IACZ,WAAW;IACX,YAAY;IACZ,eAAe;IACf,OAAO;IACP,YAAY;IACZ,YAAY;IACZ,gBAAgB;IAChB,eAAe;CACf,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/agent/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/config.js
CHANGED
|
@@ -14,7 +14,12 @@ import { CredentialsStore } from "../auth/credentials.js";
|
|
|
14
14
|
* pi-ai's `getEnvApiKey` already handles every quirky case: OAuth-only
|
|
15
15
|
* providers, Vertex ADC, AWS multi-source. We just trust it.
|
|
16
16
|
*/
|
|
17
|
-
|
|
17
|
+
// The web's inference proxy lives under /api/inference/* — see
|
|
18
|
+
// docs/oauth-web-alignment-2026-05-08.md. pi-ai's per-protocol path
|
|
19
|
+
// appending lands the request on /api/inference/v1/messages
|
|
20
|
+
// (Anthropic) or /api/inference/chat (OpenAI-compat) once baseUrl
|
|
21
|
+
// points here.
|
|
22
|
+
const DEFAULT_PROXY_BASE = "https://codebase.design/api/inference";
|
|
18
23
|
const AUTO_DETECT_ORDER = [
|
|
19
24
|
"anthropic",
|
|
20
25
|
"openai",
|
|
@@ -35,7 +40,7 @@ const DEFAULT_MODELS = {
|
|
|
35
40
|
deepseek: "deepseek-chat",
|
|
36
41
|
cerebras: "llama-3.3-70b",
|
|
37
42
|
xai: "grok-4",
|
|
38
|
-
openrouter: "anthropic/claude-sonnet-4
|
|
43
|
+
openrouter: "anthropic/claude-sonnet-4",
|
|
39
44
|
};
|
|
40
45
|
export class ConfigError extends Error {
|
|
41
46
|
}
|
|
@@ -43,16 +48,39 @@ export function resolveConfig(envOrOpts = process.env) {
|
|
|
43
48
|
const opts = isProcessEnv(envOrOpts) ? { env: envOrOpts } : envOrOpts;
|
|
44
49
|
const env = opts.env ?? process.env;
|
|
45
50
|
const credentials = opts.credentials ?? new CredentialsStore();
|
|
46
|
-
// 1.
|
|
51
|
+
// 1. Saved credentials. Routing depends on the source:
|
|
52
|
+
// - codebase / manual → proxy through codebase.design
|
|
53
|
+
// - byok → direct call against the provider's own API
|
|
47
54
|
const useProxy = env.CODEBASE_DISABLE_PROXY !== "1";
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
if (creds &&
|
|
55
|
+
const creds = credentials.load();
|
|
56
|
+
if (creds && !credentials.isExpired(creds)) {
|
|
57
|
+
if (creds.source === "byok" && creds.provider) {
|
|
58
|
+
const byok = buildByokConfig(creds.provider, creds.accessToken);
|
|
59
|
+
if (byok)
|
|
60
|
+
return byok;
|
|
61
|
+
}
|
|
62
|
+
else if (useProxy) {
|
|
51
63
|
const proxied = buildProxiedConfig(env, creds.accessToken);
|
|
52
64
|
if (proxied)
|
|
53
65
|
return proxied;
|
|
54
66
|
}
|
|
55
67
|
}
|
|
68
|
+
// 2. OpenAI-compatible custom endpoint. Triggers when the user has
|
|
69
|
+
// set OPENAI_BASE_URL alongside an api key — that combination
|
|
70
|
+
// only makes sense for a custom Chat Completions backend (Groq,
|
|
71
|
+
// Ollama, MiniMax in-house, Qwen in-house, vLLM, …). pi-ai's
|
|
72
|
+
// registry only knows about a fixed set of providers/models, so
|
|
73
|
+
// we synthesize a Model object on the fly using a known
|
|
74
|
+
// chat-completions template and overriding id + baseUrl.
|
|
75
|
+
if (env.OPENAI_BASE_URL && env.OPENAI_API_KEY && env.OPENAI_MODEL) {
|
|
76
|
+
const compat = buildOpenAiCompatConfig({
|
|
77
|
+
baseUrl: env.OPENAI_BASE_URL,
|
|
78
|
+
modelId: env.OPENAI_MODEL,
|
|
79
|
+
apiKey: env.OPENAI_API_KEY,
|
|
80
|
+
});
|
|
81
|
+
if (compat)
|
|
82
|
+
return compat;
|
|
83
|
+
}
|
|
56
84
|
const explicitProvider = env.CODEBASE_PROVIDER;
|
|
57
85
|
const explicitModel = env.CODEBASE_MODEL;
|
|
58
86
|
if (explicitProvider && explicitModel) {
|
|
@@ -85,26 +113,85 @@ export function resolveConfig(envOrOpts = process.env) {
|
|
|
85
113
|
"Or set CODEBASE_PROVIDER + CODEBASE_MODEL explicitly.");
|
|
86
114
|
}
|
|
87
115
|
/**
|
|
88
|
-
* Build a model
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
*
|
|
116
|
+
* Build a model that routes through codebase.design's inference proxy.
|
|
117
|
+
*
|
|
118
|
+
* Default when signed in via OAuth: "Codebase Auto" — the in-house
|
|
119
|
+
* MiniMax-M2.7 served via the openai-compat protocol. This matches
|
|
120
|
+
* what the web app calls the same model (`codebase` provider in
|
|
121
|
+
* web/backend/providers/registry.js).
|
|
122
|
+
*
|
|
123
|
+
* Override via env: CODEBASE_PROVIDER + CODEBASE_MODEL still pick a
|
|
124
|
+
* specific upstream from pi-ai's registry, also routed through the
|
|
125
|
+
* proxy. The proxy dispatches by the model id in the request body +
|
|
126
|
+
* the bearer scope on the token, so this works for any model the
|
|
127
|
+
* user's account has access to.
|
|
93
128
|
*/
|
|
94
129
|
function buildProxiedConfig(env, accessToken) {
|
|
95
130
|
const explicitProvider = env.CODEBASE_PROVIDER;
|
|
96
131
|
const explicitModel = env.CODEBASE_MODEL;
|
|
97
|
-
const
|
|
98
|
-
|
|
132
|
+
const proxyBase = (env.CODEBASE_PROXY_BASE_URL ?? DEFAULT_PROXY_BASE).replace(/\/+$/, "");
|
|
133
|
+
// Default: "Codebase Auto" — synthesized openai-compat model.
|
|
134
|
+
// Can't use pi-ai's registry here because "codebase" isn't a
|
|
135
|
+
// KnownProvider; clone a known chat-completions model and override.
|
|
136
|
+
if (!explicitProvider) {
|
|
137
|
+
const template = getModel("groq", "llama-3.3-70b-versatile");
|
|
138
|
+
if (!template)
|
|
139
|
+
return null;
|
|
140
|
+
const model = {
|
|
141
|
+
...template,
|
|
142
|
+
id: "MiniMax-M2.7",
|
|
143
|
+
name: "Codebase Auto",
|
|
144
|
+
baseUrl: proxyBase,
|
|
145
|
+
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
|
146
|
+
};
|
|
147
|
+
return { model, apiKey: accessToken, source: "proxy" };
|
|
148
|
+
}
|
|
149
|
+
const modelId = explicitModel ?? DEFAULT_MODELS[explicitProvider];
|
|
99
150
|
if (!modelId)
|
|
100
151
|
return null;
|
|
101
|
-
const baseModel = getModel(
|
|
152
|
+
const baseModel = getModel(explicitProvider, modelId);
|
|
102
153
|
if (!baseModel)
|
|
103
154
|
return null;
|
|
104
|
-
const proxyBase = (env.CODEBASE_PROXY_BASE_URL ?? DEFAULT_PROXY_BASE).replace(/\/+$/, "");
|
|
105
155
|
const proxiedModel = { ...baseModel, baseUrl: proxyBase };
|
|
106
156
|
return { model: proxiedModel, apiKey: accessToken, source: "proxy" };
|
|
107
157
|
}
|
|
158
|
+
/**
|
|
159
|
+
* OpenAI Chat-Completions compatible custom endpoint. Used by
|
|
160
|
+
* MiniMax in-house, Qwen in-house, Groq custom URLs, Ollama, vLLM,
|
|
161
|
+
* any tinybox running a Chat Completions server. Synthesizes a
|
|
162
|
+
* Model<"openai-completions"> by cloning a known model from the
|
|
163
|
+
* registry and overriding the id + baseUrl. Cost is unknown so we
|
|
164
|
+
* zero it — /cost will report $0 for these runs, which is honest
|
|
165
|
+
* (we don't know the rate) rather than wrong.
|
|
166
|
+
*/
|
|
167
|
+
function buildOpenAiCompatConfig(opts) {
|
|
168
|
+
// groq's llama-3.3-70b-versatile uses "openai-completions" — the
|
|
169
|
+
// closest match for what MiniMax / Qwen in-house actually serve.
|
|
170
|
+
const template = getModel("groq", "llama-3.3-70b-versatile");
|
|
171
|
+
if (!template)
|
|
172
|
+
return null;
|
|
173
|
+
const model = {
|
|
174
|
+
...template,
|
|
175
|
+
id: opts.modelId,
|
|
176
|
+
name: opts.modelId,
|
|
177
|
+
baseUrl: opts.baseUrl.replace(/\/+$/, ""),
|
|
178
|
+
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
|
179
|
+
};
|
|
180
|
+
return { model, apiKey: opts.apiKey, source: "explicit" };
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* BYOK mode: caller has saved a provider's own API key. Use the
|
|
184
|
+
* provider's normal baseUrl from pi-ai's registry — no proxy.
|
|
185
|
+
*/
|
|
186
|
+
function buildByokConfig(provider, apiKey) {
|
|
187
|
+
const modelId = DEFAULT_MODELS[provider];
|
|
188
|
+
if (!modelId)
|
|
189
|
+
return null;
|
|
190
|
+
const model = getModel(provider, modelId);
|
|
191
|
+
if (!model)
|
|
192
|
+
return null;
|
|
193
|
+
return { model, apiKey, source: "byok" };
|
|
194
|
+
}
|
|
108
195
|
function isProcessEnv(value) {
|
|
109
196
|
if (!value)
|
|
110
197
|
return true;
|
package/dist/agent/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/agent/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAkC,MAAM,uBAAuB,CAAC;AAC/F,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D;;;;;;;;;;;;;GAaG;AAEH,MAAM,kBAAkB,GAAG,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/agent/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export function isCommand(value) {
|
|
2
|
+
return typeof value === "object" && value !== null && typeof value.type === "string";
|
|
3
|
+
}
|
|
4
|
+
export function buildErrorResponse(id, command, error) {
|
|
5
|
+
return { id, type: "response", command, success: false, error };
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/app-server/protocol.ts"],"names":[],"mappings":"AA4HA,MAAM,UAAU,SAAS,CAAC,KAAc;IACvC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,OAAQ,KAA4B,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC9G,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,EAAsB,EAAE,OAAe,EAAE,KAAa;IACxF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AACjE,CAAC"}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import { createInterface } from "node:readline";
|
|
2
|
+
import { createAgent } from "../agent/agent.js";
|
|
3
|
+
import { ConfigError } from "../agent/config.js";
|
|
4
|
+
import { buildErrorResponse, isCommand, } from "./protocol.js";
|
|
5
|
+
const USER_AGENT = "codebase-cli/app-server";
|
|
6
|
+
const EMPTY_USAGE = {
|
|
7
|
+
input: 0,
|
|
8
|
+
output: 0,
|
|
9
|
+
cacheRead: 0,
|
|
10
|
+
cacheWrite: 0,
|
|
11
|
+
totalTokens: 0,
|
|
12
|
+
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Start the JSON-RPC server on stdio.
|
|
16
|
+
*
|
|
17
|
+
* One connection = one agent instance = one session. The function
|
|
18
|
+
* resolves when stdin is closed; the caller (cli.tsx) exits with the
|
|
19
|
+
* returned exit code.
|
|
20
|
+
*/
|
|
21
|
+
export async function runAppServer(opts = {}) {
|
|
22
|
+
const stdin = opts.stdin ?? process.stdin;
|
|
23
|
+
const stdout = opts.stdout ?? process.stdout;
|
|
24
|
+
const stderr = opts.stderr ?? process.stderr;
|
|
25
|
+
function send(message) {
|
|
26
|
+
stdout.write(`${JSON.stringify(message)}\n`);
|
|
27
|
+
}
|
|
28
|
+
function fatal(error) {
|
|
29
|
+
send({ type: "event", event: { type: "server_error", message: error } });
|
|
30
|
+
return 1;
|
|
31
|
+
}
|
|
32
|
+
let bundle;
|
|
33
|
+
try {
|
|
34
|
+
bundle = createAgent({ resume: opts.resume, autoApprove: opts.autoApprove });
|
|
35
|
+
}
|
|
36
|
+
catch (e) {
|
|
37
|
+
const msg = e instanceof ConfigError ? e.message : e instanceof Error ? e.message : String(e);
|
|
38
|
+
stderr.write(`app-server: ${msg}\n`);
|
|
39
|
+
return fatal(msg);
|
|
40
|
+
}
|
|
41
|
+
let totalUsage = { ...EMPTY_USAGE, cost: { ...EMPTY_USAGE.cost } };
|
|
42
|
+
let status = "idle";
|
|
43
|
+
let pendingPermission;
|
|
44
|
+
let inFlightPrompt = null;
|
|
45
|
+
// ─── outbound: forward agent events + track status ──────────────────
|
|
46
|
+
const unsubscribeAgent = bundle.subscribe((event) => {
|
|
47
|
+
// Update local status mirror for get_state queries.
|
|
48
|
+
if (event.type === "agent_start" || event.type === "turn_start") {
|
|
49
|
+
status = "thinking";
|
|
50
|
+
}
|
|
51
|
+
else if (event.type === "message_update" && event.message.role === "assistant") {
|
|
52
|
+
status = "streaming";
|
|
53
|
+
}
|
|
54
|
+
else if (event.type === "tool_execution_start") {
|
|
55
|
+
status = "tool";
|
|
56
|
+
}
|
|
57
|
+
else if (event.type === "tool_execution_end") {
|
|
58
|
+
status = "thinking";
|
|
59
|
+
}
|
|
60
|
+
else if (event.type === "agent_end") {
|
|
61
|
+
status = "idle";
|
|
62
|
+
}
|
|
63
|
+
// Accumulate usage from message_end events (pi-agent-core
|
|
64
|
+
// emits per-message usage there).
|
|
65
|
+
if (event.type === "message_end") {
|
|
66
|
+
const candidate = event.message.usage;
|
|
67
|
+
if (candidate) {
|
|
68
|
+
totalUsage = mergeUsage(totalUsage, candidate);
|
|
69
|
+
send({ type: "event", event: { type: "usage_update", usage: totalUsage } });
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
send({ type: "event", event });
|
|
73
|
+
});
|
|
74
|
+
// ─── permission requests: forward to the extension ─────────────────
|
|
75
|
+
const unsubscribePerms = bundle.permissions.subscribe((req) => {
|
|
76
|
+
if (!req) {
|
|
77
|
+
if (pendingPermission) {
|
|
78
|
+
pendingPermission = undefined;
|
|
79
|
+
send({ type: "event", event: { type: "permission_cleared" } });
|
|
80
|
+
}
|
|
81
|
+
status = inFlightPrompt ? "thinking" : "idle";
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
pendingPermission = {
|
|
85
|
+
id: req.id,
|
|
86
|
+
tool: req.tool,
|
|
87
|
+
summary: req.summary,
|
|
88
|
+
detail: req.detail,
|
|
89
|
+
risk: req.risk,
|
|
90
|
+
};
|
|
91
|
+
status = "awaiting-permission";
|
|
92
|
+
send({
|
|
93
|
+
type: "event",
|
|
94
|
+
event: { type: "permission_request", request: pendingPermission },
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
// ─── inbound: line-by-line JSONL on stdin ───────────────────────────
|
|
98
|
+
const reader = createInterface({ input: stdin, crlfDelay: Infinity });
|
|
99
|
+
send({ type: "event", event: { type: "server_ready" } });
|
|
100
|
+
let initialized = false;
|
|
101
|
+
for await (const line of reader) {
|
|
102
|
+
const trimmed = line.trim();
|
|
103
|
+
if (!trimmed)
|
|
104
|
+
continue;
|
|
105
|
+
let command;
|
|
106
|
+
try {
|
|
107
|
+
command = JSON.parse(trimmed);
|
|
108
|
+
}
|
|
109
|
+
catch (e) {
|
|
110
|
+
send(buildErrorResponse(undefined, "parse", `JSON parse error: ${e instanceof Error ? e.message : String(e)}`));
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
if (!isCommand(command)) {
|
|
114
|
+
send(buildErrorResponse(undefined, "parse", "command must be an object with a `type` field"));
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
const c = command;
|
|
118
|
+
// Gate everything except initialize until we're initialized.
|
|
119
|
+
if (!initialized && c.type !== "initialize") {
|
|
120
|
+
send(buildErrorResponse(c.id, c.type, "send `initialize` first"));
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
try {
|
|
124
|
+
const response = await dispatch(c);
|
|
125
|
+
if (response)
|
|
126
|
+
send(response);
|
|
127
|
+
}
|
|
128
|
+
catch (e) {
|
|
129
|
+
send(buildErrorResponse(c.id, c.type, e instanceof Error ? e.message : String(e)));
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
unsubscribeAgent();
|
|
133
|
+
unsubscribePerms();
|
|
134
|
+
return 0;
|
|
135
|
+
// ─── command dispatch ──────────────────────────────────────────────
|
|
136
|
+
async function dispatch(c) {
|
|
137
|
+
switch (c.type) {
|
|
138
|
+
case "initialize": {
|
|
139
|
+
initialized = true;
|
|
140
|
+
const model = modelInfo();
|
|
141
|
+
return {
|
|
142
|
+
id: c.id,
|
|
143
|
+
type: "response",
|
|
144
|
+
command: "initialize",
|
|
145
|
+
success: true,
|
|
146
|
+
data: { userAgent: USER_AGENT, model, source: bundle.source },
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
case "prompt": {
|
|
150
|
+
if (inFlightPrompt) {
|
|
151
|
+
return buildErrorResponse(c.id, c.type, "a prompt is already in flight — abort first");
|
|
152
|
+
}
|
|
153
|
+
// Fire-and-forget; the response just acknowledges receipt.
|
|
154
|
+
// The real work surfaces via the agent event stream. Pi's
|
|
155
|
+
// `prompt(text, images?)` overload handles multimodal input
|
|
156
|
+
// transparently — base64-encoded image bytes plus mimeType.
|
|
157
|
+
const images = c.images && c.images.length > 0 ? [...c.images] : undefined;
|
|
158
|
+
inFlightPrompt = bundle.agent
|
|
159
|
+
.prompt(c.message, images)
|
|
160
|
+
.catch((err) => {
|
|
161
|
+
send(buildErrorResponse(undefined, "prompt", err instanceof Error ? err.message : String(err)));
|
|
162
|
+
})
|
|
163
|
+
.finally(() => {
|
|
164
|
+
inFlightPrompt = null;
|
|
165
|
+
});
|
|
166
|
+
return { id: c.id, type: "response", command: "prompt", success: true };
|
|
167
|
+
}
|
|
168
|
+
case "abort": {
|
|
169
|
+
bundle.agent.abort();
|
|
170
|
+
return { id: c.id, type: "response", command: "abort", success: true };
|
|
171
|
+
}
|
|
172
|
+
case "get_state": {
|
|
173
|
+
return {
|
|
174
|
+
id: c.id,
|
|
175
|
+
type: "response",
|
|
176
|
+
command: "get_state",
|
|
177
|
+
success: true,
|
|
178
|
+
data: buildState(),
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
case "get_messages": {
|
|
182
|
+
return {
|
|
183
|
+
id: c.id,
|
|
184
|
+
type: "response",
|
|
185
|
+
command: "get_messages",
|
|
186
|
+
success: true,
|
|
187
|
+
data: { messages: bundle.agent.state.messages },
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
case "set_model": {
|
|
191
|
+
// Light-touch: pi-agent-core's Agent exposes a `state.model`
|
|
192
|
+
// setter, but switching mid-session requires careful handling
|
|
193
|
+
// of in-flight requests. For now we reject — the user picks
|
|
194
|
+
// the model at startup via env vars and we just report it.
|
|
195
|
+
return buildErrorResponse(c.id, c.type, "set_model is not yet supported in app-server mode — set CODEBASE_PROVIDER + CODEBASE_MODEL before launch");
|
|
196
|
+
}
|
|
197
|
+
case "permission_respond": {
|
|
198
|
+
if (!pendingPermission || pendingPermission.id !== c.requestId) {
|
|
199
|
+
return buildErrorResponse(c.id, c.type, "no matching pending permission request");
|
|
200
|
+
}
|
|
201
|
+
bundle.permissions.respond(c.requestId, c.choice);
|
|
202
|
+
return { id: c.id, type: "response", command: "permission_respond", success: true };
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
function modelInfo() {
|
|
207
|
+
return {
|
|
208
|
+
provider: bundle.model.provider,
|
|
209
|
+
id: bundle.model.id,
|
|
210
|
+
name: bundle.model.name,
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
function buildState() {
|
|
214
|
+
return {
|
|
215
|
+
model: modelInfo(),
|
|
216
|
+
source: bundle.source,
|
|
217
|
+
status,
|
|
218
|
+
messageCount: bundle.agent.state.messages.length,
|
|
219
|
+
usage: totalUsage,
|
|
220
|
+
cwd: bundle.toolContext.cwd,
|
|
221
|
+
pendingPermission,
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
function mergeUsage(a, b) {
|
|
226
|
+
return {
|
|
227
|
+
input: a.input + b.input,
|
|
228
|
+
output: a.output + b.output,
|
|
229
|
+
cacheRead: a.cacheRead + b.cacheRead,
|
|
230
|
+
cacheWrite: a.cacheWrite + b.cacheWrite,
|
|
231
|
+
totalTokens: a.totalTokens + b.totalTokens,
|
|
232
|
+
cost: {
|
|
233
|
+
input: a.cost.input + b.cost.input,
|
|
234
|
+
output: a.cost.output + b.cost.output,
|
|
235
|
+
cacheRead: a.cost.cacheRead + b.cost.cacheRead,
|
|
236
|
+
cacheWrite: a.cost.cacheWrite + b.cost.cacheWrite,
|
|
237
|
+
total: a.cost.total + b.cost.total,
|
|
238
|
+
},
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/app-server/server.ts"],"names":[],"mappings":"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"}
|
package/dist/auth/cli.js
CHANGED
|
@@ -1,13 +1,30 @@
|
|
|
1
1
|
import { CredentialsStore } from "./credentials.js";
|
|
2
2
|
import { refreshAccessToken, revokeToken, runOAuthLogin } from "./flow.js";
|
|
3
|
-
const DEFAULT_AUTH_BASE = "https://codebase.
|
|
3
|
+
const DEFAULT_AUTH_BASE = "https://codebase.design";
|
|
4
|
+
/**
|
|
5
|
+
* Resolves the OAuth config the CLI uses against the codebase web app.
|
|
6
|
+
*
|
|
7
|
+
* The endpoint shapes come from the web's source-of-truth in
|
|
8
|
+
* `web/backend/routes/oauth.js` (and were re-confirmed in
|
|
9
|
+
* `docs/oauth-web-alignment-2026-05-08.md`):
|
|
10
|
+
*
|
|
11
|
+
* • authorizationUrl → `${base}/login` — the Next.js page that
|
|
12
|
+
* POSTs PKCE params to /oauth/authorize on the user's behalf and
|
|
13
|
+
* redirects back to the CLI's localhost callback.
|
|
14
|
+
* • tokenUrl + refreshUrl → `${base}/api/oauth/token` — single
|
|
15
|
+
* endpoint, two grant types (`authorization_code` + `refresh_token`).
|
|
16
|
+
* • revokeUrl → `${base}/api/oauth/revoke`.
|
|
17
|
+
*
|
|
18
|
+
* codebase.design and codebase.foundation both alias to the same Next
|
|
19
|
+
* app; the user-facing brand is .design so it's the default.
|
|
20
|
+
*/
|
|
4
21
|
function defaultOAuthConfig(env = process.env) {
|
|
5
22
|
const base = (env.CODEBASE_AUTH_BASE_URL ?? DEFAULT_AUTH_BASE).replace(/\/+$/, "");
|
|
6
23
|
return {
|
|
7
|
-
authorizationUrl: `${base}/
|
|
8
|
-
tokenUrl: `${base}/api/
|
|
9
|
-
refreshUrl: `${base}/api/
|
|
10
|
-
revokeUrl: `${base}/api/
|
|
24
|
+
authorizationUrl: `${base}/login`,
|
|
25
|
+
tokenUrl: `${base}/api/oauth/token`,
|
|
26
|
+
refreshUrl: `${base}/api/oauth/token`,
|
|
27
|
+
revokeUrl: `${base}/api/oauth/revoke`,
|
|
11
28
|
clientId: env.CODEBASE_CLIENT_ID ?? "codebase-cli",
|
|
12
29
|
scopes: (env.CODEBASE_SCOPES ?? "inference projects credits").split(/\s+/).filter(Boolean),
|
|
13
30
|
};
|
package/dist/auth/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/auth/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAoB,kBAAkB,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE7F,MAAM,iBAAiB,GAAG,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/auth/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAoB,kBAAkB,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE7F,MAAM,iBAAiB,GAAG,yBAAyB,CAAC;AAEpD;;;;;;;;;;;;;;;;GAgBG;AACH,SAAS,kBAAkB,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC/D,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,sBAAsB,IAAI,iBAAiB,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACnF,OAAO;QACN,gBAAgB,EAAE,GAAG,IAAI,QAAQ;QACjC,QAAQ,EAAE,GAAG,IAAI,kBAAkB;QACnC,UAAU,EAAE,GAAG,IAAI,kBAAkB;QACrC,SAAS,EAAE,GAAG,IAAI,mBAAmB;QACrC,QAAQ,EAAE,GAAG,CAAC,kBAAkB,IAAI,cAAc;QAClD,MAAM,EAAE,CAAC,GAAG,CAAC,eAAe,IAAI,4BAA4B,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;KAC1F,CAAC;AACH,CAAC;AASD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAc,EAAE,UAA0B,EAAE;IACnF,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,gBAAgB,EAAE,CAAC;IACtD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,kBAAkB,EAAE,CAAC;IACtD,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACtE,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAEtE,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC;IAEvC,IAAI,CAAC;QACJ,QAAQ,UAAU,EAAE,CAAC;YACpB,KAAK,QAAQ;gBACZ,OAAO,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAE9B,KAAK,OAAO;gBACX,OAAO,MAAM,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAEhD,KAAK,QAAQ;gBACZ,OAAO,MAAM,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;YAE5C,KAAK,SAAS;gBACb,OAAO,MAAM,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAElD,OAAO,CAAC,CAAC,CAAC;gBACT,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBAChC,GAAG,CAAC,iBAAiB,UAAU,EAAE,CAAC,CAAC;oBACnC,OAAO,CAAC,CAAC;gBACV,CAAC;gBACD,4BAA4B;gBAC5B,OAAO,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;YAC7C,CAAC;QACF,CAAC;IACF,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACZ,GAAG,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD,OAAO,CAAC,CAAC;IACV,CAAC;AACF,CAAC;AAED,SAAS,SAAS,CAAC,KAAuB,EAAE,GAAwB;IACnE,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,GAAG,CAAC,eAAe,CAAC,CAAC;QACrB,GAAG,CAAC,0BAA0B,CAAC,CAAC;QAChC,OAAO,CAAC,CAAC;IACV,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS;QAC7B,CAAC,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE;QACnG,CAAC,CAAC,WAAW,CAAC;IACf,GAAG,CAAC,iBAAiB,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACrC,IAAI,KAAK,CAAC,KAAK;QAAE,GAAG,CAAC,aAAa,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACjD,IAAI,KAAK,CAAC,MAAM;QAAE,GAAG,CAAC,aAAa,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACnD,GAAG,CAAC,aAAa,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3C,GAAG,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC;IACnB,GAAG,CAAC,aAAa,KAAK,CAAC,QAAQ,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7E,OAAO,CAAC,CAAC;AACV,CAAC;AAED,KAAK,UAAU,QAAQ,CACtB,KAAuB,EACvB,MAAmB,EACnB,GAAwB,EACxB,GAAwB;IAExB,GAAG,CAAC,kCAAkC,CAAC,CAAC;IACxC,GAAG,CAAC,+CAA+C,CAAC,CAAC;IACrD,IAAI,CAAC;QACJ,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,GAAG,CAAC,YAAY,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC5D,OAAO,CAAC,CAAC;IACV,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACZ,GAAG,CAAC,iBAAiB,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACnE,OAAO,CAAC,CAAC;IACV,CAAC;AACF,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,KAAuB,EAAE,MAAmB,EAAE,GAAwB;IAC9F,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAC1C,MAAM,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IAC9C,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IAC9B,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC;IAC3D,OAAO,CAAC,CAAC;AACV,CAAC;AAED,KAAK,UAAU,UAAU,CACxB,KAAuB,EACvB,MAAmB,EACnB,GAAwB,EACxB,GAAwB;IAExB,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,GAAG,CAAC,eAAe,CAAC,CAAC;QACrB,OAAO,CAAC,CAAC;IACV,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;QACzB,GAAG,CAAC,6DAA6D,CAAC,CAAC;QACnE,OAAO,CAAC,CAAC;IACV,CAAC;IACD,IAAI,CAAC;QACJ,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;QAClE,KAAK,CAAC,IAAI,CAAC;YACV,GAAG,IAAI;YACP,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK;YAChC,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM;SACnC,CAAC,CAAC;QACH,GAAG,CAAC,WAAW,CAAC,CAAC;QACjB,OAAO,CAAC,CAAC;IACV,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACZ,GAAG,CAAC,mBAAmB,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrE,OAAO,CAAC,CAAC;IACV,CAAC;AACF,CAAC;AAED,SAAS,YAAY,CAAC,KAAuB,EAAE,GAAW,EAAE,GAAwB;IACnF,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;IACvF,CAAC;IACD,KAAK,CAAC,IAAI,CAAC;QACV,WAAW,EAAE,GAAG;QAChB,MAAM,EAAE,CAAC,WAAW,CAAC;QACrB,MAAM,EAAE,QAAQ;KAChB,CAAC,CAAC;IACH,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACtB,OAAO,CAAC,CAAC;AACV,CAAC"}
|
package/dist/auth/credentials.js
CHANGED
|
@@ -45,8 +45,12 @@ export class CredentialsStore {
|
|
|
45
45
|
return null;
|
|
46
46
|
if (!Array.isArray(parsed.scopes))
|
|
47
47
|
return null;
|
|
48
|
-
if (parsed.source !== "codebase" && parsed.source !== "manual")
|
|
48
|
+
if (parsed.source !== "codebase" && parsed.source !== "manual" && parsed.source !== "byok") {
|
|
49
49
|
return null;
|
|
50
|
+
}
|
|
51
|
+
if (parsed.source === "byok" && (typeof parsed.provider !== "string" || !parsed.provider)) {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
50
54
|
return parsed;
|
|
51
55
|
}
|
|
52
56
|
save(credentials) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/auth/credentials.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/G,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/auth/credentials.ts"],"names":[],"mappings":"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"}
|