@penclipai/adapter-codebuddy-local 2026.402.0-canary.3

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 (58) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cli/format-event.d.ts +2 -0
  3. package/dist/cli/format-event.d.ts.map +1 -0
  4. package/dist/cli/format-event.js +219 -0
  5. package/dist/cli/format-event.js.map +1 -0
  6. package/dist/cli/index.d.ts +2 -0
  7. package/dist/cli/index.d.ts.map +1 -0
  8. package/dist/cli/index.js +2 -0
  9. package/dist/cli/index.js.map +1 -0
  10. package/dist/index.d.ts +10 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +45 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/server/execute.d.ts +3 -0
  15. package/dist/server/execute.d.ts.map +1 -0
  16. package/dist/server/execute.js +391 -0
  17. package/dist/server/execute.js.map +1 -0
  18. package/dist/server/index.d.ts +8 -0
  19. package/dist/server/index.d.ts.map +1 -0
  20. package/dist/server/index.js +63 -0
  21. package/dist/server/index.js.map +1 -0
  22. package/dist/server/models.d.ts +20 -0
  23. package/dist/server/models.d.ts.map +1 -0
  24. package/dist/server/models.js +147 -0
  25. package/dist/server/models.js.map +1 -0
  26. package/dist/server/parse.d.ts +13 -0
  27. package/dist/server/parse.d.ts.map +1 -0
  28. package/dist/server/parse.js +181 -0
  29. package/dist/server/parse.js.map +1 -0
  30. package/dist/server/skills.d.ts +19 -0
  31. package/dist/server/skills.d.ts.map +1 -0
  32. package/dist/server/skills.js +122 -0
  33. package/dist/server/skills.js.map +1 -0
  34. package/dist/server/test.d.ts +3 -0
  35. package/dist/server/test.d.ts.map +1 -0
  36. package/dist/server/test.js +155 -0
  37. package/dist/server/test.js.map +1 -0
  38. package/dist/shared/permissions.d.ts +2 -0
  39. package/dist/shared/permissions.d.ts.map +1 -0
  40. package/dist/shared/permissions.js +7 -0
  41. package/dist/shared/permissions.js.map +1 -0
  42. package/dist/shared/stream.d.ts +5 -0
  43. package/dist/shared/stream.d.ts.map +1 -0
  44. package/dist/shared/stream.js +13 -0
  45. package/dist/shared/stream.js.map +1 -0
  46. package/dist/ui/build-config.d.ts +3 -0
  47. package/dist/ui/build-config.d.ts.map +1 -0
  48. package/dist/ui/build-config.js +116 -0
  49. package/dist/ui/build-config.js.map +1 -0
  50. package/dist/ui/index.d.ts +3 -0
  51. package/dist/ui/index.d.ts.map +1 -0
  52. package/dist/ui/index.js +3 -0
  53. package/dist/ui/index.js.map +1 -0
  54. package/dist/ui/parse-stdout.d.ts +3 -0
  55. package/dist/ui/parse-stdout.d.ts.map +1 -0
  56. package/dist/ui/parse-stdout.js +295 -0
  57. package/dist/ui/parse-stdout.js.map +1 -0
  58. package/package.json +54 -0
@@ -0,0 +1,155 @@
1
+ import { asBoolean, asNumber, asString, asStringArray, ensureAbsoluteDirectory, ensureCommandResolvable, ensurePathInEnv, parseObject, runChildProcess, } from "@penclipai/adapter-utils/server-utils";
2
+ import { DEFAULT_CODEBUDDY_LOCAL_MODEL, DEFAULT_CODEBUDDY_LOCAL_SKIP_PERMISSIONS, } from "../index.js";
3
+ import { hasCodeBuddyPermissionsBypassArg } from "../shared/permissions.js";
4
+ import { parseCodeBuddyJsonl } from "./parse.js";
5
+ function summarizeStatus(checks) {
6
+ if (checks.some((check) => check.level === "error"))
7
+ return "fail";
8
+ if (checks.some((check) => check.level === "warn"))
9
+ return "warn";
10
+ return "pass";
11
+ }
12
+ function firstNonEmptyLine(text) {
13
+ return (text
14
+ .split(/\r?\n/)
15
+ .map((line) => line.trim())
16
+ .find(Boolean) ?? "");
17
+ }
18
+ function summarizeProbeDetail(stdout, stderr, parsedError) {
19
+ const raw = parsedError?.trim() || firstNonEmptyLine(stderr) || firstNonEmptyLine(stdout);
20
+ if (!raw)
21
+ return null;
22
+ const clean = raw.replace(/\s+/g, " ").trim();
23
+ const max = 240;
24
+ return clean.length > max ? `${clean.slice(0, max - 1)}...` : clean;
25
+ }
26
+ const CODEBUDDY_AUTH_REQUIRED_RE = /(?:authentication\s+required|not\s+authenticated|not\s+logged\s+in|please\s+log\s+in|login\s+required|unauthorized|token\s+(?:is\s+)?invalid|需要登录|请先登录|未登录|未认证)/i;
27
+ export async function testEnvironment(ctx) {
28
+ const checks = [];
29
+ const config = parseObject(ctx.config);
30
+ const command = asString(config.command, "codebuddy");
31
+ const cwd = asString(config.cwd, process.cwd());
32
+ try {
33
+ await ensureAbsoluteDirectory(cwd, { createIfMissing: true });
34
+ checks.push({
35
+ code: "codebuddy_cwd_valid",
36
+ level: "info",
37
+ message: `Working directory is valid: ${cwd}`,
38
+ });
39
+ }
40
+ catch (err) {
41
+ checks.push({
42
+ code: "codebuddy_cwd_invalid",
43
+ level: "error",
44
+ message: err instanceof Error ? err.message : "Invalid working directory",
45
+ detail: cwd,
46
+ });
47
+ }
48
+ const envConfig = parseObject(config.env);
49
+ const env = {};
50
+ for (const [key, value] of Object.entries(envConfig)) {
51
+ if (typeof value === "string")
52
+ env[key] = value;
53
+ }
54
+ const runtimeEnv = ensurePathInEnv({ ...process.env, ...env });
55
+ try {
56
+ await ensureCommandResolvable(command, cwd, runtimeEnv);
57
+ checks.push({
58
+ code: "codebuddy_command_resolvable",
59
+ level: "info",
60
+ message: `Command is executable: ${command}`,
61
+ });
62
+ }
63
+ catch (err) {
64
+ checks.push({
65
+ code: "codebuddy_command_unresolvable",
66
+ level: "error",
67
+ message: err instanceof Error ? err.message : "Command is not executable",
68
+ detail: command,
69
+ });
70
+ }
71
+ const canRunProbe = checks.every((check) => check.code !== "codebuddy_cwd_invalid" && check.code !== "codebuddy_command_unresolvable");
72
+ if (canRunProbe) {
73
+ const model = asString(config.model, DEFAULT_CODEBUDDY_LOCAL_MODEL).trim();
74
+ const extraArgs = (() => {
75
+ const fromExtraArgs = asStringArray(config.extraArgs);
76
+ if (fromExtraArgs.length > 0)
77
+ return fromExtraArgs;
78
+ return asStringArray(config.args);
79
+ })();
80
+ const allowSkipPermissions = asBoolean(config.dangerouslySkipPermissions, DEFAULT_CODEBUDDY_LOCAL_SKIP_PERMISSIONS);
81
+ const autoPermissionsEnabled = allowSkipPermissions && !hasCodeBuddyPermissionsBypassArg(extraArgs);
82
+ const maxTurnsPerRun = Math.max(1, asNumber(config.maxTurnsPerRun, 1));
83
+ const effort = asString(config.effort, "").trim().toLowerCase();
84
+ const args = ["-p", "--output-format", "stream-json", "--max-turns", String(maxTurnsPerRun)];
85
+ if (model)
86
+ args.push("--model", model);
87
+ if (effort)
88
+ args.push("--effort", effort);
89
+ if (autoPermissionsEnabled)
90
+ args.push("-y");
91
+ if (extraArgs.length > 0)
92
+ args.push(...extraArgs);
93
+ const probe = await runChildProcess(`codebuddy-envtest-${Date.now()}-${Math.random().toString(16).slice(2)}`, command, args, {
94
+ cwd,
95
+ env,
96
+ timeoutSec: 45,
97
+ graceSec: 5,
98
+ stdin: "Respond with hello.",
99
+ onLog: async () => { },
100
+ });
101
+ const parsed = parseCodeBuddyJsonl(probe.stdout);
102
+ const detail = summarizeProbeDetail(probe.stdout, probe.stderr, parsed.errorMessage);
103
+ const authEvidence = `${parsed.errorMessage ?? ""}\n${probe.stdout}\n${probe.stderr}`.trim();
104
+ if (probe.timedOut) {
105
+ checks.push({
106
+ code: "codebuddy_hello_probe_timed_out",
107
+ level: "warn",
108
+ message: "CodeBuddy hello probe timed out.",
109
+ hint: "Retry the probe. If this persists, verify `codebuddy -p --output-format stream-json --max-turns 1` manually.",
110
+ });
111
+ }
112
+ else if ((probe.exitCode ?? 0) === 0 && !parsed.errorMessage) {
113
+ const summary = parsed.summary.trim();
114
+ const hasHello = /\bhello\b/i.test(summary);
115
+ checks.push({
116
+ code: hasHello ? "codebuddy_hello_probe_passed" : "codebuddy_hello_probe_unexpected_output",
117
+ level: hasHello ? "info" : "warn",
118
+ message: hasHello
119
+ ? "CodeBuddy hello probe succeeded."
120
+ : "CodeBuddy probe ran but did not return `hello` as expected.",
121
+ ...(summary ? { detail: summary.replace(/\s+/g, " ").trim().slice(0, 240) } : {}),
122
+ ...(hasHello
123
+ ? {}
124
+ : {
125
+ hint: "Try piping `Respond with hello.` into `codebuddy -p --output-format stream-json --max-turns 1` manually to inspect full output.",
126
+ }),
127
+ });
128
+ }
129
+ else if (CODEBUDDY_AUTH_REQUIRED_RE.test(authEvidence)) {
130
+ checks.push({
131
+ code: "codebuddy_hello_probe_auth_required",
132
+ level: "warn",
133
+ message: "CodeBuddy CLI is installed, but authentication is not ready.",
134
+ ...(detail ? { detail } : {}),
135
+ hint: "Open `codebuddy` once and complete authentication, then retry the probe.",
136
+ });
137
+ }
138
+ else {
139
+ checks.push({
140
+ code: "codebuddy_hello_probe_failed",
141
+ level: "error",
142
+ message: "CodeBuddy hello probe failed.",
143
+ ...(detail ? { detail } : {}),
144
+ hint: "Pipe `Respond with hello.` into `codebuddy -p --output-format stream-json --max-turns 1` manually in this working directory to debug.",
145
+ });
146
+ }
147
+ }
148
+ return {
149
+ adapterType: ctx.adapterType,
150
+ status: summarizeStatus(checks),
151
+ checks,
152
+ testedAt: new Date().toISOString(),
153
+ };
154
+ }
155
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/server/test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function hasCodeBuddyPermissionsBypassArg(args: readonly string[]): boolean;
2
+ //# sourceMappingURL=permissions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../src/shared/permissions.ts"],"names":[],"mappings":"AAAA,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAQjF"}
@@ -0,0 +1,7 @@
1
+ export function hasCodeBuddyPermissionsBypassArg(args) {
2
+ return args.some((arg) => arg === "-y" ||
3
+ arg === "--dangerously-skip-permissions" ||
4
+ arg === "--permission-mode" ||
5
+ arg.startsWith("--permission-mode="));
6
+ }
7
+ //# sourceMappingURL=permissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/shared/permissions.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,gCAAgC,CAAC,IAAuB;IACtE,OAAO,IAAI,CAAC,IAAI,CACd,CAAC,GAAG,EAAE,EAAE,CACN,GAAG,KAAK,IAAI;QACZ,GAAG,KAAK,gCAAgC;QACxC,GAAG,KAAK,mBAAmB;QAC3B,GAAG,CAAC,UAAU,CAAC,oBAAoB,CAAC,CACvC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare function normalizeCodeBuddyStreamLine(rawLine: string): {
2
+ stream: "stdout" | "stderr" | null;
3
+ line: string;
4
+ };
5
+ //# sourceMappingURL=stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/shared/stream.ts"],"names":[],"mappings":"AAAA,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG;IAC7D,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC;IACnC,IAAI,EAAE,MAAM,CAAC;CACd,CAYA"}
@@ -0,0 +1,13 @@
1
+ export function normalizeCodeBuddyStreamLine(rawLine) {
2
+ const trimmed = rawLine.trim();
3
+ if (!trimmed)
4
+ return { stream: null, line: "" };
5
+ const prefixed = trimmed.match(/^(stdout|stderr)\s*[:=]?\s*([\[{].*)$/i);
6
+ if (!prefixed) {
7
+ return { stream: null, line: trimmed };
8
+ }
9
+ const stream = prefixed[1]?.toLowerCase() === "stderr" ? "stderr" : "stdout";
10
+ const line = (prefixed[2] ?? "").trim();
11
+ return { stream, line };
12
+ }
13
+ //# sourceMappingURL=stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/shared/stream.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,4BAA4B,CAAC,OAAe;IAI1D,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC/B,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IAEhD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;IACzE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IACzC,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC7E,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACxC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { CreateConfigValues } from "@penclipai/adapter-utils";
2
+ export declare function buildCodeBuddyLocalConfig(v: CreateConfigValues): Record<string, unknown>;
3
+ //# sourceMappingURL=build-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-config.d.ts","sourceRoot":"","sources":["../../src/ui/build-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAoEnE,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAsCxF"}
@@ -0,0 +1,116 @@
1
+ import { DEFAULT_CODEBUDDY_LOCAL_MODEL, DEFAULT_CODEBUDDY_LOCAL_SKIP_PERMISSIONS, } from "../index.js";
2
+ function parseCommaArgs(value) {
3
+ return value
4
+ .split(",")
5
+ .map((item) => item.trim())
6
+ .filter(Boolean);
7
+ }
8
+ function parseEnvVars(text) {
9
+ const env = {};
10
+ for (const line of text.split(/\r?\n/)) {
11
+ const trimmed = line.trim();
12
+ if (!trimmed || trimmed.startsWith("#"))
13
+ continue;
14
+ const eq = trimmed.indexOf("=");
15
+ if (eq <= 0)
16
+ continue;
17
+ const key = trimmed.slice(0, eq).trim();
18
+ const value = trimmed.slice(eq + 1);
19
+ if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key))
20
+ continue;
21
+ env[key] = value;
22
+ }
23
+ return env;
24
+ }
25
+ function parseEnvBindings(bindings) {
26
+ if (typeof bindings !== "object" || bindings === null || Array.isArray(bindings))
27
+ return {};
28
+ const env = {};
29
+ for (const [key, raw] of Object.entries(bindings)) {
30
+ if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key))
31
+ continue;
32
+ if (typeof raw === "string") {
33
+ env[key] = { type: "plain", value: raw };
34
+ continue;
35
+ }
36
+ if (typeof raw !== "object" || raw === null || Array.isArray(raw))
37
+ continue;
38
+ const rec = raw;
39
+ if (rec.type === "plain" && typeof rec.value === "string") {
40
+ env[key] = { type: "plain", value: rec.value };
41
+ continue;
42
+ }
43
+ if (rec.type === "secret_ref" && typeof rec.secretId === "string") {
44
+ env[key] = {
45
+ type: "secret_ref",
46
+ secretId: rec.secretId,
47
+ ...(typeof rec.version === "number" || rec.version === "latest"
48
+ ? { version: rec.version }
49
+ : {}),
50
+ };
51
+ }
52
+ }
53
+ return env;
54
+ }
55
+ function parseJsonObject(text) {
56
+ const trimmed = text.trim();
57
+ if (!trimmed)
58
+ return null;
59
+ try {
60
+ const parsed = JSON.parse(trimmed);
61
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed))
62
+ return null;
63
+ return parsed;
64
+ }
65
+ catch {
66
+ return null;
67
+ }
68
+ }
69
+ export function buildCodeBuddyLocalConfig(v) {
70
+ const ac = {};
71
+ if (v.cwd)
72
+ ac.cwd = v.cwd;
73
+ if (v.instructionsFilePath)
74
+ ac.instructionsFilePath = v.instructionsFilePath;
75
+ if (v.promptTemplate)
76
+ ac.promptTemplate = v.promptTemplate;
77
+ if (v.bootstrapPrompt)
78
+ ac.bootstrapPromptTemplate = v.bootstrapPrompt;
79
+ ac.model = v.model || DEFAULT_CODEBUDDY_LOCAL_MODEL;
80
+ if (v.thinkingEffort)
81
+ ac.effort = v.thinkingEffort;
82
+ ac.timeoutSec = 0;
83
+ ac.graceSec = 15;
84
+ const env = parseEnvBindings(v.envBindings);
85
+ const legacy = parseEnvVars(v.envVars);
86
+ for (const [key, value] of Object.entries(legacy)) {
87
+ if (!Object.prototype.hasOwnProperty.call(env, key)) {
88
+ env[key] = { type: "plain", value };
89
+ }
90
+ }
91
+ if (Object.keys(env).length > 0)
92
+ ac.env = env;
93
+ ac.maxTurnsPerRun = v.maxTurnsPerRun;
94
+ ac.dangerouslySkipPermissions =
95
+ typeof v.dangerouslySkipPermissions === "boolean"
96
+ ? v.dangerouslySkipPermissions
97
+ : DEFAULT_CODEBUDDY_LOCAL_SKIP_PERMISSIONS;
98
+ if (v.workspaceStrategyType === "git_worktree") {
99
+ ac.workspaceStrategy = {
100
+ type: "git_worktree",
101
+ ...(v.workspaceBaseRef ? { baseRef: v.workspaceBaseRef } : {}),
102
+ ...(v.workspaceBranchTemplate ? { branchTemplate: v.workspaceBranchTemplate } : {}),
103
+ ...(v.worktreeParentDir ? { worktreeParentDir: v.worktreeParentDir } : {}),
104
+ };
105
+ }
106
+ const runtimeServices = parseJsonObject(v.runtimeServicesJson ?? "");
107
+ if (runtimeServices && Array.isArray(runtimeServices.services)) {
108
+ ac.workspaceRuntime = runtimeServices;
109
+ }
110
+ if (v.command)
111
+ ac.command = v.command;
112
+ if (v.extraArgs)
113
+ ac.extraArgs = parseCommaArgs(v.extraArgs);
114
+ return ac;
115
+ }
116
+ //# sourceMappingURL=build-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-config.js","sourceRoot":"","sources":["../../src/ui/build-config.ts"],"names":[],"mappings":"AACA,OAAO,EACL,6BAA6B,EAC7B,wCAAwC,GACzC,MAAM,aAAa,CAAC;AAErB,SAAS,cAAc,CAAC,KAAa;IACnC,OAAO,KAAK;SACT,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAClD,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,EAAE,IAAI,CAAC;YAAE,SAAS;QACtB,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,SAAS;QACpD,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACnB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAiB;IACzC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAC;IAC5F,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,SAAS;QACpD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;YACzC,SAAS;QACX,CAAC;QACD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;YAAE,SAAS;QAC5E,MAAM,GAAG,GAAG,GAA8B,CAAC;QAC3C,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC1D,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;YAC/C,SAAS;QACX,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAClE,GAAG,CAAC,GAAG,CAAC,GAAG;gBACT,IAAI,EAAE,YAAY;gBAClB,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,GAAG,CAAC,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,KAAK,QAAQ;oBAC7D,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE;oBAC1B,CAAC,CAAC,EAAE,CAAC;aACR,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAC;QACxF,OAAO,MAAiC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,CAAqB;IAC7D,MAAM,EAAE,GAA4B,EAAE,CAAC;IACvC,IAAI,CAAC,CAAC,GAAG;QAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;IAC1B,IAAI,CAAC,CAAC,oBAAoB;QAAE,EAAE,CAAC,oBAAoB,GAAG,CAAC,CAAC,oBAAoB,CAAC;IAC7E,IAAI,CAAC,CAAC,cAAc;QAAE,EAAE,CAAC,cAAc,GAAG,CAAC,CAAC,cAAc,CAAC;IAC3D,IAAI,CAAC,CAAC,eAAe;QAAE,EAAE,CAAC,uBAAuB,GAAG,CAAC,CAAC,eAAe,CAAC;IACtE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,6BAA6B,CAAC;IACpD,IAAI,CAAC,CAAC,cAAc;QAAE,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,cAAc,CAAC;IACnD,EAAE,CAAC,UAAU,GAAG,CAAC,CAAC;IAClB,EAAE,CAAC,QAAQ,GAAG,EAAE,CAAC;IACjB,MAAM,GAAG,GAAG,gBAAgB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACvC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;YACpD,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACtC,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC;QAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC;IAC9C,EAAE,CAAC,cAAc,GAAG,CAAC,CAAC,cAAc,CAAC;IACrC,EAAE,CAAC,0BAA0B;QAC3B,OAAO,CAAC,CAAC,0BAA0B,KAAK,SAAS;YAC/C,CAAC,CAAC,CAAC,CAAC,0BAA0B;YAC9B,CAAC,CAAC,wCAAwC,CAAC;IAC/C,IAAI,CAAC,CAAC,qBAAqB,KAAK,cAAc,EAAE,CAAC;QAC/C,EAAE,CAAC,iBAAiB,GAAG;YACrB,IAAI,EAAE,cAAc;YACpB,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,GAAG,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnF,GAAG,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC3E,CAAC;IACJ,CAAC;IACD,MAAM,eAAe,GAAG,eAAe,CAAC,CAAC,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC;IACrE,IAAI,eAAe,IAAI,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/D,EAAE,CAAC,gBAAgB,GAAG,eAAe,CAAC;IACxC,CAAC;IACD,IAAI,CAAC,CAAC,OAAO;QAAE,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;IACtC,IAAI,CAAC,CAAC,SAAS;QAAE,EAAE,CAAC,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC5D,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { parseCodeBuddyStdoutLine } from "./parse-stdout.js";
2
+ export { buildCodeBuddyLocalConfig } from "./build-config.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { parseCodeBuddyStdoutLine } from "./parse-stdout.js";
2
+ export { buildCodeBuddyLocalConfig } from "./build-config.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { TranscriptEntry } from "@penclipai/adapter-utils";
2
+ export declare function parseCodeBuddyStdoutLine(line: string, ts: string): TranscriptEntry[];
3
+ //# sourceMappingURL=parse-stdout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-stdout.d.ts","sourceRoot":"","sources":["../../src/ui/parse-stdout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAoPhE,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,eAAe,EAAE,CAkFpF"}