@open-code-review/cli 1.10.4 → 2.0.0

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 (65) hide show
  1. package/README.md +31 -5
  2. package/dist/dashboard/client/assets/{_basePickBy-DbLJVCA4.js → _basePickBy-B3ALyupE.js} +1 -1
  3. package/dist/dashboard/client/assets/{_baseUniq-IXEG0cJJ.js → _baseUniq-b2RALAWc.js} +1 -1
  4. package/dist/dashboard/client/assets/{arc-lsKxmOJY.js → arc-DcSVvhUd.js} +1 -1
  5. package/dist/dashboard/client/assets/{architectureDiagram-VXUJARFQ-DfMlzFJX.js → architectureDiagram-VXUJARFQ-BNUlmSCS.js} +1 -1
  6. package/dist/dashboard/client/assets/{blockDiagram-VD42YOAC-bSpnd26J.js → blockDiagram-VD42YOAC-BmhiQVwa.js} +1 -1
  7. package/dist/dashboard/client/assets/{c4Diagram-YG6GDRKO-DPYmVhCZ.js → c4Diagram-YG6GDRKO-jyJ3WOv5.js} +1 -1
  8. package/dist/dashboard/client/assets/channel-D3J8-GF_.js +1 -0
  9. package/dist/dashboard/client/assets/{chunk-4BX2VUAB-CI9zC4lV.js → chunk-4BX2VUAB-x1dQU_s3.js} +1 -1
  10. package/dist/dashboard/client/assets/{chunk-55IACEB6-BqUdJdx5.js → chunk-55IACEB6-CwbsE2XQ.js} +1 -1
  11. package/dist/dashboard/client/assets/{chunk-B4BG7PRW-DymQrTp-.js → chunk-B4BG7PRW-BaE7c-ti.js} +1 -1
  12. package/dist/dashboard/client/assets/{chunk-DI55MBZ5-lZ_9LKGJ.js → chunk-DI55MBZ5-Bw5PUaMK.js} +1 -1
  13. package/dist/dashboard/client/assets/{chunk-FMBD7UC4-DC5rgLNm.js → chunk-FMBD7UC4-B7cF6P3s.js} +1 -1
  14. package/dist/dashboard/client/assets/{chunk-QN33PNHL-BrygpHrX.js → chunk-QN33PNHL-OY4evNHd.js} +1 -1
  15. package/dist/dashboard/client/assets/{chunk-QZHKN3VN-CWJqBdNg.js → chunk-QZHKN3VN-BpjQwIWz.js} +1 -1
  16. package/dist/dashboard/client/assets/{chunk-TZMSLE5B-BACgM5pG.js → chunk-TZMSLE5B-D8b_Oq9B.js} +1 -1
  17. package/dist/dashboard/client/assets/classDiagram-2ON5EDUG-tkFUL-1Y.js +1 -0
  18. package/dist/dashboard/client/assets/classDiagram-v2-WZHVMYZB-tkFUL-1Y.js +1 -0
  19. package/dist/dashboard/client/assets/clone-CkY5ajLr.js +1 -0
  20. package/dist/dashboard/client/assets/{cose-bilkent-S5V4N54A-BYvGIfo0.js → cose-bilkent-S5V4N54A-C-sfP8PN.js} +1 -1
  21. package/dist/dashboard/client/assets/{dagre-6UL2VRFP-B1rZyiLJ.js → dagre-6UL2VRFP-Cqfo0NRg.js} +1 -1
  22. package/dist/dashboard/client/assets/{diagram-PSM6KHXK-Dvl5dQMd.js → diagram-PSM6KHXK-BR3ppxqI.js} +1 -1
  23. package/dist/dashboard/client/assets/{diagram-QEK2KX5R-Cmntmhht.js → diagram-QEK2KX5R-Dvcx6x3R.js} +1 -1
  24. package/dist/dashboard/client/assets/{diagram-S2PKOQOG-BqZcpG85.js → diagram-S2PKOQOG-DoyBLnVN.js} +1 -1
  25. package/dist/dashboard/client/assets/{erDiagram-Q2GNP2WA-Cw7BALso.js → erDiagram-Q2GNP2WA-hy77l1cL.js} +1 -1
  26. package/dist/dashboard/client/assets/{flowDiagram-NV44I4VS-B_amTHzQ.js → flowDiagram-NV44I4VS-Bz0B1rKM.js} +1 -1
  27. package/dist/dashboard/client/assets/{ganttDiagram-JELNMOA3-B1j2-sTo.js → ganttDiagram-JELNMOA3-CLgrZPoC.js} +1 -1
  28. package/dist/dashboard/client/assets/{gitGraphDiagram-V2S2FVAM-D5BkfAMt.js → gitGraphDiagram-V2S2FVAM-DwJ-1f-v.js} +1 -1
  29. package/dist/dashboard/client/assets/{graph-B_v15DHv.js → graph-DDBMM_t2.js} +1 -1
  30. package/dist/dashboard/client/assets/index-Cr9yEo_B.js +576 -0
  31. package/dist/dashboard/client/assets/index-Z1pPudAt.css +1 -0
  32. package/dist/dashboard/client/assets/{infoDiagram-HS3SLOUP-C4dtIkj3.js → infoDiagram-HS3SLOUP-Bhn1FmAk.js} +1 -1
  33. package/dist/dashboard/client/assets/{journeyDiagram-XKPGCS4Q-hha4Am8v.js → journeyDiagram-XKPGCS4Q-CzGbjX1y.js} +1 -1
  34. package/dist/dashboard/client/assets/{kanban-definition-3W4ZIXB7-1EY8l7Ng.js → kanban-definition-3W4ZIXB7-Da77-WYk.js} +1 -1
  35. package/dist/dashboard/client/assets/{layout-7SmAbjFT.js → layout-CVwSB-GS.js} +1 -1
  36. package/dist/dashboard/client/assets/{linear-BfjSBezh.js → linear-CTRAc5Jn.js} +1 -1
  37. package/dist/dashboard/client/assets/{mermaid-renderer-PPIt-kY4.js → mermaid-renderer-Bjo170ax.js} +4 -4
  38. package/dist/dashboard/client/assets/{mindmap-definition-VGOIOE7T-BFpjN9LY.js → mindmap-definition-VGOIOE7T-B55C2odl.js} +1 -1
  39. package/dist/dashboard/client/assets/{pieDiagram-ADFJNKIX-GBbQtDBQ.js → pieDiagram-ADFJNKIX-5lrQLrSz.js} +1 -1
  40. package/dist/dashboard/client/assets/{quadrantDiagram-AYHSOK5B-Dm0vOhOw.js → quadrantDiagram-AYHSOK5B-Bg55gC30.js} +1 -1
  41. package/dist/dashboard/client/assets/{requirementDiagram-UZGBJVZJ-BrKONIV8.js → requirementDiagram-UZGBJVZJ-CyR4YFJY.js} +1 -1
  42. package/dist/dashboard/client/assets/{sankeyDiagram-TZEHDZUN-IOobtmDc.js → sankeyDiagram-TZEHDZUN-BVWKr9_-.js} +1 -1
  43. package/dist/dashboard/client/assets/{sequenceDiagram-WL72ISMW-Dnb0bOW5.js → sequenceDiagram-WL72ISMW-D0AJg_tE.js} +1 -1
  44. package/dist/dashboard/client/assets/{stateDiagram-FKZM4ZOC-C9-bf7bn.js → stateDiagram-FKZM4ZOC-BuHpTgim.js} +1 -1
  45. package/dist/dashboard/client/assets/stateDiagram-v2-4FDKWEC3-DwAPhteN.js +1 -0
  46. package/dist/dashboard/client/assets/{timeline-definition-IT6M3QCI-tJogDEHB.js → timeline-definition-IT6M3QCI-LDhpAmDd.js} +1 -1
  47. package/dist/dashboard/client/assets/{treemap-GDKQZRPO-DQY6HADq.js → treemap-GDKQZRPO-Dd4gjvUl.js} +1 -1
  48. package/dist/dashboard/client/assets/{xychartDiagram-PRI3JC2R-DfxeQmTO.js → xychartDiagram-PRI3JC2R-B9RDod39.js} +1 -1
  49. package/dist/dashboard/client/index.html +2 -2
  50. package/dist/dashboard/server.js +10297 -878
  51. package/dist/index.js +10441 -913
  52. package/dist/lib/db/index.js +984 -58
  53. package/dist/lib/models.js +85 -0
  54. package/dist/lib/runtime-config.js +39 -0
  55. package/dist/lib/team-config.js +175 -0
  56. package/dist/lib/vendor-resume.js +31 -0
  57. package/package.json +29 -4
  58. package/dist/dashboard/client/assets/channel-C--wY_Wd.js +0 -1
  59. package/dist/dashboard/client/assets/classDiagram-2ON5EDUG-DoxmMlnf.js +0 -1
  60. package/dist/dashboard/client/assets/classDiagram-v2-WZHVMYZB-DoxmMlnf.js +0 -1
  61. package/dist/dashboard/client/assets/clone-BgvweD4v.js +0 -1
  62. package/dist/dashboard/client/assets/index-UkJZZdYD.js +0 -548
  63. package/dist/dashboard/client/assets/index-Zl---B_3.css +0 -1
  64. package/dist/dashboard/client/assets/stateDiagram-v2-4FDKWEC3-C8Gr4khP.js +0 -1
  65. package/dist/package.json +0 -61
@@ -0,0 +1,85 @@
1
+ // ../shared/platform/src/index.ts
2
+ import {
3
+ execFile,
4
+ execFileSync,
5
+ spawn
6
+ } from "node:child_process";
7
+ import { promisify } from "node:util";
8
+ var execFilePromise = promisify(execFile);
9
+ var isWindows = process.platform === "win32";
10
+ function execBinary(binary, args, opts) {
11
+ return execFileSync(binary, args, {
12
+ ...opts,
13
+ shell: isWindows
14
+ });
15
+ }
16
+
17
+ // src/lib/models.ts
18
+ var BUNDLED_CLAUDE_MODELS = [
19
+ { id: "claude-opus-4-7", displayName: "Claude Opus 4.7" },
20
+ { id: "claude-sonnet-4-6", displayName: "Claude Sonnet 4.6" },
21
+ { id: "claude-haiku-4-5-20251001", displayName: "Claude Haiku 4.5" }
22
+ ];
23
+ var BUNDLED_OPENCODE_MODELS = [
24
+ { id: "anthropic/claude-opus-4-7", provider: "anthropic" },
25
+ { id: "anthropic/claude-sonnet-4-6", provider: "anthropic" },
26
+ { id: "anthropic/claude-haiku-4-5-20251001", provider: "anthropic" }
27
+ ];
28
+ function detectActiveVendor() {
29
+ for (const vendor of ["claude", "opencode"]) {
30
+ try {
31
+ execBinary(vendor, ["--version"], {
32
+ encoding: "utf-8",
33
+ timeout: 3e3,
34
+ stdio: ["ignore", "pipe", "ignore"]
35
+ });
36
+ return vendor;
37
+ } catch {
38
+ }
39
+ }
40
+ return null;
41
+ }
42
+ function tryNativeEnumeration(vendor) {
43
+ try {
44
+ const output = execBinary(vendor, ["models", "--json"], {
45
+ encoding: "utf-8",
46
+ timeout: 5e3,
47
+ stdio: ["ignore", "pipe", "ignore"]
48
+ });
49
+ const parsed = JSON.parse(output);
50
+ if (!Array.isArray(parsed)) return null;
51
+ const models = [];
52
+ for (const item of parsed) {
53
+ if (typeof item === "string") {
54
+ models.push({ id: item });
55
+ } else if (typeof item === "object" && item !== null && "id" in item && typeof item.id === "string") {
56
+ const obj = item;
57
+ const desc = { id: obj.id };
58
+ if (typeof obj.displayName === "string") desc.displayName = obj.displayName;
59
+ if (typeof obj.provider === "string") desc.provider = obj.provider;
60
+ if (Array.isArray(obj.tags)) {
61
+ desc.tags = obj.tags.filter((t) => typeof t === "string");
62
+ }
63
+ models.push(desc);
64
+ }
65
+ }
66
+ return models.length > 0 ? models : null;
67
+ } catch {
68
+ return null;
69
+ }
70
+ }
71
+ function bundledForVendor(vendor) {
72
+ if (vendor === "claude") return BUNDLED_CLAUDE_MODELS;
73
+ return BUNDLED_OPENCODE_MODELS;
74
+ }
75
+ function listModelsForVendor(vendor) {
76
+ const native = tryNativeEnumeration(vendor);
77
+ if (native) {
78
+ return { vendor, source: "native", models: native };
79
+ }
80
+ return { vendor, source: "bundled", models: bundledForVendor(vendor) };
81
+ }
82
+ export {
83
+ detectActiveVendor,
84
+ listModelsForVendor
85
+ };
@@ -0,0 +1,39 @@
1
+ // src/lib/runtime-config.ts
2
+ import { existsSync, readFileSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ var DEFAULT_AGENT_HEARTBEAT_SECONDS = 60;
5
+ function getAgentHeartbeatSeconds(ocrDir) {
6
+ const configPath = join(ocrDir, "config.yaml");
7
+ if (!existsSync(configPath)) {
8
+ return DEFAULT_AGENT_HEARTBEAT_SECONDS;
9
+ }
10
+ let content;
11
+ try {
12
+ content = readFileSync(configPath, "utf-8");
13
+ } catch {
14
+ return DEFAULT_AGENT_HEARTBEAT_SECONDS;
15
+ }
16
+ const blockMatch = content.match(
17
+ /^runtime:\s*\n(?:\s+[^\n]*\n)*?\s+agent_heartbeat_seconds:\s*([^\s#\n]+)/m
18
+ );
19
+ const inlineMatch = content.match(
20
+ /^runtime:\s*\{[^}]*\bagent_heartbeat_seconds:\s*([^\s,}]+)/m
21
+ );
22
+ const raw = blockMatch?.[1] ?? inlineMatch?.[1];
23
+ if (!raw) {
24
+ return DEFAULT_AGENT_HEARTBEAT_SECONDS;
25
+ }
26
+ const parsed = Number(raw);
27
+ if (!Number.isFinite(parsed) || parsed <= 0 || !Number.isInteger(parsed)) {
28
+ process.stderr.write(
29
+ `[ocr] runtime.agent_heartbeat_seconds is not a positive integer (got "${raw}"); falling back to ${DEFAULT_AGENT_HEARTBEAT_SECONDS}s.
30
+ `
31
+ );
32
+ return DEFAULT_AGENT_HEARTBEAT_SECONDS;
33
+ }
34
+ return parsed;
35
+ }
36
+ export {
37
+ DEFAULT_AGENT_HEARTBEAT_SECONDS,
38
+ getAgentHeartbeatSeconds
39
+ };
@@ -0,0 +1,175 @@
1
+ // src/lib/team-config.ts
2
+ import { existsSync, readFileSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ import { parse as parseYaml } from "yaml";
5
+ function loadTeamConfig(ocrDir) {
6
+ const configPath = join(ocrDir, "config.yaml");
7
+ if (!existsSync(configPath)) {
8
+ return { team: [], aliases: {}, defaultModel: null };
9
+ }
10
+ const content = readFileSync(configPath, "utf-8");
11
+ return parseTeamConfigYaml(content);
12
+ }
13
+ function parseTeamConfigYaml(content) {
14
+ let parsed;
15
+ try {
16
+ parsed = parseYaml(content);
17
+ } catch (err) {
18
+ throw new Error(
19
+ `Failed to parse .ocr/config.yaml: ${err instanceof Error ? err.message : String(err)}`
20
+ );
21
+ }
22
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
23
+ return { team: [], aliases: {}, defaultModel: null };
24
+ }
25
+ const root = parsed;
26
+ const aliases = readAliases(root);
27
+ const defaultModel = readDefaultModel(root);
28
+ const teamEntries = root["default_team"];
29
+ if (!teamEntries) {
30
+ return { team: [], aliases, defaultModel };
31
+ }
32
+ if (typeof teamEntries !== "object" || Array.isArray(teamEntries)) {
33
+ throw new Error("default_team must be a mapping of persona names to entries");
34
+ }
35
+ const team = [];
36
+ for (const [persona, entry] of Object.entries(teamEntries)) {
37
+ const instances = parseEntry(persona, entry);
38
+ for (let i = 0; i < instances.length; i++) {
39
+ const inst = instances[i];
40
+ const resolvedModel = resolveModel(
41
+ inst.model,
42
+ inst.teamModel ?? null,
43
+ aliases,
44
+ defaultModel
45
+ );
46
+ team.push({
47
+ persona,
48
+ instance_index: i + 1,
49
+ name: inst.name ?? `${persona}-${i + 1}`,
50
+ model: resolvedModel
51
+ });
52
+ }
53
+ }
54
+ return { team, aliases, defaultModel };
55
+ }
56
+ function parseEntry(persona, entry) {
57
+ if (typeof entry === "number") {
58
+ if (!Number.isInteger(entry) || entry < 1) {
59
+ throw new Error(
60
+ `default_team.${persona}: count must be a positive integer (got ${entry})`
61
+ );
62
+ }
63
+ return Array.from({ length: entry }, () => ({}));
64
+ }
65
+ if (Array.isArray(entry)) {
66
+ if (entry.length === 0) {
67
+ throw new Error(
68
+ `default_team.${persona}: list form must contain at least one instance`
69
+ );
70
+ }
71
+ return entry.map((item, idx) => parseListItem(persona, idx, item));
72
+ }
73
+ if (entry && typeof entry === "object") {
74
+ const obj = entry;
75
+ const hasInstancesField = "instances" in obj;
76
+ if (hasInstancesField) {
77
+ throw new Error(
78
+ `default_team.${persona}: 'instances' field is not allowed. Use the list form directly (e.g. ${persona}: [{ ... }, { ... }]) \u2014 mixing 'count' and 'instances' is rejected.`
79
+ );
80
+ }
81
+ if (!("count" in obj)) {
82
+ throw new Error(
83
+ `default_team.${persona}: object form requires a 'count' field`
84
+ );
85
+ }
86
+ const count = obj["count"];
87
+ if (typeof count !== "number" || !Number.isInteger(count) || count < 1) {
88
+ throw new Error(
89
+ `default_team.${persona}: count must be a positive integer (got ${String(count)})`
90
+ );
91
+ }
92
+ const teamModel = readOptionalString(obj, "model", `default_team.${persona}.model`);
93
+ return Array.from({ length: count }, () => ({ teamModel }));
94
+ }
95
+ throw new Error(
96
+ `default_team.${persona}: must be a number, object with 'count', or list of instance configs`
97
+ );
98
+ }
99
+ function parseListItem(persona, idx, item) {
100
+ if (!item || typeof item !== "object" || Array.isArray(item)) {
101
+ throw new Error(
102
+ `default_team.${persona}[${idx}]: each instance must be an object (got ${typeof item})`
103
+ );
104
+ }
105
+ const obj = item;
106
+ const result = {};
107
+ const model = readOptionalString(obj, "model", `default_team.${persona}[${idx}].model`);
108
+ if (model !== null) {
109
+ result.model = model;
110
+ }
111
+ const name = readOptionalString(obj, "name", `default_team.${persona}[${idx}].name`);
112
+ if (name !== null) {
113
+ result.name = name;
114
+ }
115
+ return result;
116
+ }
117
+ function readOptionalString(obj, key, pathLabel) {
118
+ if (!(key in obj)) return null;
119
+ const value = obj[key];
120
+ if (value === null || value === void 0) return null;
121
+ if (typeof value !== "string") {
122
+ throw new Error(`${pathLabel}: must be a string (got ${typeof value})`);
123
+ }
124
+ return value;
125
+ }
126
+ function readAliases(root) {
127
+ const models = root["models"];
128
+ if (!models || typeof models !== "object" || Array.isArray(models)) return {};
129
+ const aliasesRaw = models["aliases"];
130
+ if (!aliasesRaw || typeof aliasesRaw !== "object" || Array.isArray(aliasesRaw)) {
131
+ return {};
132
+ }
133
+ const out = {};
134
+ for (const [k, v] of Object.entries(aliasesRaw)) {
135
+ if (typeof v === "string") out[k] = v;
136
+ }
137
+ return out;
138
+ }
139
+ function readDefaultModel(root) {
140
+ const models = root["models"];
141
+ if (!models || typeof models !== "object" || Array.isArray(models)) return null;
142
+ const value = models["default"];
143
+ return typeof value === "string" ? value : null;
144
+ }
145
+ function resolveModel(instanceModel, teamModel, aliases, defaultModel) {
146
+ const candidate = instanceModel ?? teamModel ?? defaultModel ?? null;
147
+ if (!candidate) return null;
148
+ return aliases[candidate] ?? candidate;
149
+ }
150
+ function resolveTeamComposition(team, override) {
151
+ if (!override || override.length === 0) return team;
152
+ const byKey = /* @__PURE__ */ new Map();
153
+ for (const inst of team) {
154
+ byKey.set(`${inst.persona}#${inst.instance_index}`, inst);
155
+ }
156
+ const overridden = /* @__PURE__ */ new Map();
157
+ for (const inst of override) {
158
+ overridden.set(`${inst.persona}#${inst.instance_index}`, inst);
159
+ }
160
+ const overriddenPersonas = new Set([...overridden.keys()].map((k) => k.split("#")[0]));
161
+ const result = [];
162
+ for (const inst of team) {
163
+ if (overriddenPersonas.has(inst.persona)) continue;
164
+ result.push(inst);
165
+ }
166
+ for (const inst of override) {
167
+ result.push(inst);
168
+ }
169
+ return result;
170
+ }
171
+ export {
172
+ loadTeamConfig,
173
+ parseTeamConfigYaml,
174
+ resolveTeamComposition
175
+ };
@@ -0,0 +1,31 @@
1
+ // src/lib/vendor-resume.ts
2
+ var VENDOR_BINARIES = {
3
+ claude: "claude",
4
+ opencode: "opencode"
5
+ };
6
+ function buildResumeArgs(vendor, vendorSessionId) {
7
+ if (vendor === "claude") {
8
+ return ["--resume", vendorSessionId];
9
+ }
10
+ if (vendor === "opencode") {
11
+ return ["--session", vendorSessionId];
12
+ }
13
+ throw new Error(
14
+ `Unknown vendor "${vendor}". OCR knows how to resume Claude Code and OpenCode.`
15
+ );
16
+ }
17
+ function shellQuote(token) {
18
+ if (token === "") return "''";
19
+ if (/^[A-Za-z0-9_./:=@-]+$/.test(token)) return token;
20
+ return `'${token.replace(/'/g, "'\\''")}'`;
21
+ }
22
+ function buildResumeCommand(vendor, vendorSessionId) {
23
+ const binary = VENDOR_BINARIES[vendor] ?? vendor;
24
+ const args = buildResumeArgs(vendor, vendorSessionId);
25
+ return [binary, ...args].map(shellQuote).join(" ");
26
+ }
27
+ export {
28
+ VENDOR_BINARIES,
29
+ buildResumeArgs,
30
+ buildResumeCommand
31
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@open-code-review/cli",
3
- "version": "1.10.4",
3
+ "version": "2.0.0",
4
4
  "description": "CLI for Open Code Review - Multi-environment setup and progress tracking",
5
5
  "type": "module",
6
6
  "bin": {
@@ -18,6 +18,30 @@
18
18
  "source": "./src/lib/db/index.ts",
19
19
  "import": "./dist/lib/db/index.js",
20
20
  "default": "./dist/lib/db/index.js"
21
+ },
22
+ "./runtime-config": {
23
+ "types": "./src/lib/runtime-config.ts",
24
+ "source": "./src/lib/runtime-config.ts",
25
+ "import": "./dist/lib/runtime-config.js",
26
+ "default": "./dist/lib/runtime-config.js"
27
+ },
28
+ "./team-config": {
29
+ "types": "./src/lib/team-config.ts",
30
+ "source": "./src/lib/team-config.ts",
31
+ "import": "./dist/lib/team-config.js",
32
+ "default": "./dist/lib/team-config.js"
33
+ },
34
+ "./models": {
35
+ "types": "./src/lib/models.ts",
36
+ "source": "./src/lib/models.ts",
37
+ "import": "./dist/lib/models.js",
38
+ "default": "./dist/lib/models.js"
39
+ },
40
+ "./vendor-resume": {
41
+ "types": "./src/lib/vendor-resume.ts",
42
+ "source": "./src/lib/vendor-resume.ts",
43
+ "import": "./dist/lib/vendor-resume.js",
44
+ "default": "./dist/lib/vendor-resume.js"
21
45
  }
22
46
  },
23
47
  "files": [
@@ -49,14 +73,15 @@
49
73
  "log-update": "^7.0.2",
50
74
  "ora": "^8.1.1",
51
75
  "socket.io": "^4.8",
52
- "sql.js": "^1.14.1",
53
- "@open-code-review/agents": "1.10.4"
76
+ "better-sqlite3": "^11.8.1",
77
+ "yaml": "^2.8.3",
78
+ "@open-code-review/agents": "2.0.0"
54
79
  },
55
80
  "publishConfig": {
56
81
  "access": "public"
57
82
  },
58
83
  "devDependencies": {
59
- "@types/sql.js": "^1.4.9",
84
+ "@types/better-sqlite3": "^7.6.12",
60
85
  "@open-code-review/platform": "0.0.0"
61
86
  }
62
87
  }
@@ -1 +0,0 @@
1
- import{ap as o,aq as n}from"./mermaid-renderer-PPIt-kY4.js";const t=(a,r)=>o.lang.round(n.parse(a)[r]);export{t as c};
@@ -1 +0,0 @@
1
- import{s as a,c as s,a as e,C as t}from"./chunk-B4BG7PRW-DymQrTp-.js";import{_ as i}from"./mermaid-renderer-PPIt-kY4.js";import"./chunk-FMBD7UC4-DC5rgLNm.js";import"./chunk-55IACEB6-BqUdJdx5.js";import"./chunk-QN33PNHL-BrygpHrX.js";import"./index-UkJZZdYD.js";var u={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{u as diagram};
@@ -1 +0,0 @@
1
- import{s as a,c as s,a as e,C as t}from"./chunk-B4BG7PRW-DymQrTp-.js";import{_ as i}from"./mermaid-renderer-PPIt-kY4.js";import"./chunk-FMBD7UC4-DC5rgLNm.js";import"./chunk-55IACEB6-BqUdJdx5.js";import"./chunk-QN33PNHL-BrygpHrX.js";import"./index-UkJZZdYD.js";var u={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{u as diagram};
@@ -1 +0,0 @@
1
- import{b as r}from"./_baseUniq-IXEG0cJJ.js";var e=4;function a(o){return r(o,e)}export{a as c};