@open-code-review/cli 2.2.0 → 2.3.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.
- package/README.md +9 -0
- package/dist/dashboard/client/assets/{_basePickBy-BBPb8BJA.js → _basePickBy-CyrHyeyN.js} +1 -1
- package/dist/dashboard/client/assets/{_baseUniq-CFHdos6T.js → _baseUniq-Bg7NJSGS.js} +1 -1
- package/dist/dashboard/client/assets/{arc-BKGGWA2F.js → arc-zDGAKMur.js} +1 -1
- package/dist/dashboard/client/assets/{architectureDiagram-VXUJARFQ-B_ovNjX1.js → architectureDiagram-VXUJARFQ-BxlGxm0Q.js} +1 -1
- package/dist/dashboard/client/assets/{blockDiagram-VD42YOAC-C2M-avVp.js → blockDiagram-VD42YOAC-BskTNyX5.js} +1 -1
- package/dist/dashboard/client/assets/{c4Diagram-YG6GDRKO-BtOBpAzH.js → c4Diagram-YG6GDRKO-Dr9QQ-dn.js} +1 -1
- package/dist/dashboard/client/assets/channel-BUnm_-UQ.js +1 -0
- package/dist/dashboard/client/assets/{chunk-4BX2VUAB-Cz2EbHPl.js → chunk-4BX2VUAB-xq9xoCTv.js} +1 -1
- package/dist/dashboard/client/assets/{chunk-55IACEB6-C8xpXw9G.js → chunk-55IACEB6-DYdXYVh5.js} +1 -1
- package/dist/dashboard/client/assets/{chunk-B4BG7PRW-BSRfOovX.js → chunk-B4BG7PRW-BGAyFRFS.js} +1 -1
- package/dist/dashboard/client/assets/{chunk-DI55MBZ5-CEUbYQWn.js → chunk-DI55MBZ5-C5ul9stk.js} +1 -1
- package/dist/dashboard/client/assets/{chunk-FMBD7UC4-5xWP6GRj.js → chunk-FMBD7UC4-BSaPo2xa.js} +1 -1
- package/dist/dashboard/client/assets/{chunk-QN33PNHL-DfNCVcy8.js → chunk-QN33PNHL-CyzabUv0.js} +1 -1
- package/dist/dashboard/client/assets/{chunk-QZHKN3VN--OdToKKu.js → chunk-QZHKN3VN-CceRbxt_.js} +1 -1
- package/dist/dashboard/client/assets/{chunk-TZMSLE5B-B_0K0Qso.js → chunk-TZMSLE5B-Bjg9IoOQ.js} +1 -1
- package/dist/dashboard/client/assets/classDiagram-2ON5EDUG-D_fkmNvU.js +1 -0
- package/dist/dashboard/client/assets/classDiagram-v2-WZHVMYZB-D_fkmNvU.js +1 -0
- package/dist/dashboard/client/assets/clone-DTyrNOLZ.js +1 -0
- package/dist/dashboard/client/assets/{cose-bilkent-S5V4N54A-Cc_Dmnxz.js → cose-bilkent-S5V4N54A-DEdXBrCt.js} +1 -1
- package/dist/dashboard/client/assets/{dagre-6UL2VRFP-DaAfvUXU.js → dagre-6UL2VRFP-DRdIiP58.js} +1 -1
- package/dist/dashboard/client/assets/{diagram-PSM6KHXK-7idwN0rC.js → diagram-PSM6KHXK-Bo7Q2VlK.js} +1 -1
- package/dist/dashboard/client/assets/{diagram-QEK2KX5R-D9j9H13n.js → diagram-QEK2KX5R-2Fmc2o5x.js} +1 -1
- package/dist/dashboard/client/assets/{diagram-S2PKOQOG-SMF5SB0K.js → diagram-S2PKOQOG-5WE8f0p7.js} +1 -1
- package/dist/dashboard/client/assets/{erDiagram-Q2GNP2WA-EVJ4Qa2F.js → erDiagram-Q2GNP2WA-DD-iXWd_.js} +1 -1
- package/dist/dashboard/client/assets/{flowDiagram-NV44I4VS-tZ7SFE77.js → flowDiagram-NV44I4VS-CCWo8Ue9.js} +1 -1
- package/dist/dashboard/client/assets/{ganttDiagram-JELNMOA3-DFSqguY7.js → ganttDiagram-JELNMOA3-CNY4d5UK.js} +1 -1
- package/dist/dashboard/client/assets/{gitGraphDiagram-V2S2FVAM-CqHdP3HE.js → gitGraphDiagram-V2S2FVAM-Dq5SBEJJ.js} +1 -1
- package/dist/dashboard/client/assets/{graph-C0XnkNkk.js → graph-BTt9lokK.js} +1 -1
- package/dist/dashboard/client/assets/index-B0k81q2b.js +581 -0
- package/dist/dashboard/client/assets/index-Czwdh6UA.css +1 -0
- package/dist/dashboard/client/assets/{infoDiagram-HS3SLOUP-DlXZo9U2.js → infoDiagram-HS3SLOUP-AnKZja-G.js} +1 -1
- package/dist/dashboard/client/assets/{journeyDiagram-XKPGCS4Q-CgC8_7eN.js → journeyDiagram-XKPGCS4Q-nC-_WjPN.js} +1 -1
- package/dist/dashboard/client/assets/{kanban-definition-3W4ZIXB7-BMAw_jNp.js → kanban-definition-3W4ZIXB7-BEY73sWU.js} +1 -1
- package/dist/dashboard/client/assets/{layout-XjM3Q-ka.js → layout-D4DfNpzH.js} +1 -1
- package/dist/dashboard/client/assets/{linear-CMUrrr1X.js → linear-ZpGvKjeP.js} +1 -1
- package/dist/dashboard/client/assets/{mermaid-renderer-D2jYNs7K.js → mermaid-renderer-BCDxmS9g.js} +4 -4
- package/dist/dashboard/client/assets/{mindmap-definition-VGOIOE7T-CL4hv-vg.js → mindmap-definition-VGOIOE7T-MzAaKESA.js} +1 -1
- package/dist/dashboard/client/assets/{pieDiagram-ADFJNKIX-DTqv-1h1.js → pieDiagram-ADFJNKIX-B_X1kySF.js} +1 -1
- package/dist/dashboard/client/assets/{quadrantDiagram-AYHSOK5B-BpFlSW9N.js → quadrantDiagram-AYHSOK5B-CMoIEMLN.js} +1 -1
- package/dist/dashboard/client/assets/{requirementDiagram-UZGBJVZJ-BqYqqXL4.js → requirementDiagram-UZGBJVZJ-v4CRsn1w.js} +1 -1
- package/dist/dashboard/client/assets/{sankeyDiagram-TZEHDZUN-kEI9kntR.js → sankeyDiagram-TZEHDZUN-CPcyN8Jj.js} +1 -1
- package/dist/dashboard/client/assets/{sequenceDiagram-WL72ISMW-Cnu_1j-N.js → sequenceDiagram-WL72ISMW-CTg0Vx1H.js} +1 -1
- package/dist/dashboard/client/assets/{stateDiagram-FKZM4ZOC-BoC-rqoG.js → stateDiagram-FKZM4ZOC-BMWBN6Nq.js} +1 -1
- package/dist/dashboard/client/assets/stateDiagram-v2-4FDKWEC3-C9Jk1xd0.js +1 -0
- package/dist/dashboard/client/assets/{timeline-definition-IT6M3QCI-CXMWuzDL.js → timeline-definition-IT6M3QCI-B8xFcSGb.js} +1 -1
- package/dist/dashboard/client/assets/{treemap-GDKQZRPO-o9ZFgpbJ.js → treemap-GDKQZRPO-HQQuGl9w.js} +1 -1
- package/dist/dashboard/client/assets/{xychartDiagram-PRI3JC2R-CfIuUpeA.js → xychartDiagram-PRI3JC2R-Drz0SW3I.js} +1 -1
- package/dist/dashboard/client/index.html +2 -2
- package/dist/dashboard/server.js +1085 -632
- package/dist/index.js +1395 -383
- package/package.json +6 -39
- package/dist/dashboard/client/assets/channel-rgw7C1e7.js +0 -1
- package/dist/dashboard/client/assets/classDiagram-2ON5EDUG-DTGi7d9X.js +0 -1
- package/dist/dashboard/client/assets/classDiagram-v2-WZHVMYZB-DTGi7d9X.js +0 -1
- package/dist/dashboard/client/assets/clone-Cz7hswqi.js +0 -1
- package/dist/dashboard/client/assets/index-C3NEq704.js +0 -571
- package/dist/dashboard/client/assets/index-CzxeSSaQ.css +0 -1
- package/dist/dashboard/client/assets/stateDiagram-v2-4FDKWEC3-COR3QD3v.js +0 -1
- package/dist/lib/db/index.js +0 -2177
- package/dist/lib/models.js +0 -85
- package/dist/lib/runtime-config.js +0 -55
- package/dist/lib/state/index.js +0 -2196
- package/dist/lib/team-config.js +0 -175
- package/dist/lib/vendor-resume.js +0 -31
package/dist/lib/team-config.js
DELETED
|
@@ -1,175 +0,0 @@
|
|
|
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
|
-
};
|
|
@@ -1,31 +0,0 @@
|
|
|
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
|
-
};
|