@open-code-review/cli 2.2.1 → 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-BAlGnwHG.js → _basePickBy-CyrHyeyN.js} +1 -1
- package/dist/dashboard/client/assets/{_baseUniq-CoauyOeL.js → _baseUniq-Bg7NJSGS.js} +1 -1
- package/dist/dashboard/client/assets/{arc-DtS0aHfP.js → arc-zDGAKMur.js} +1 -1
- package/dist/dashboard/client/assets/{architectureDiagram-VXUJARFQ-CnWmtRTh.js → architectureDiagram-VXUJARFQ-BxlGxm0Q.js} +1 -1
- package/dist/dashboard/client/assets/{blockDiagram-VD42YOAC-DgPp4oGV.js → blockDiagram-VD42YOAC-BskTNyX5.js} +1 -1
- package/dist/dashboard/client/assets/{c4Diagram-YG6GDRKO--LV4qQaE.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-BRglpc7Z.js → chunk-4BX2VUAB-xq9xoCTv.js} +1 -1
- package/dist/dashboard/client/assets/{chunk-55IACEB6-Bgx06_CV.js → chunk-55IACEB6-DYdXYVh5.js} +1 -1
- package/dist/dashboard/client/assets/{chunk-B4BG7PRW-D6HN3Yiy.js → chunk-B4BG7PRW-BGAyFRFS.js} +1 -1
- package/dist/dashboard/client/assets/{chunk-DI55MBZ5-NH9EgN9T.js → chunk-DI55MBZ5-C5ul9stk.js} +1 -1
- package/dist/dashboard/client/assets/{chunk-FMBD7UC4-xriO6WNP.js → chunk-FMBD7UC4-BSaPo2xa.js} +1 -1
- package/dist/dashboard/client/assets/{chunk-QN33PNHL-CV1h6_Zl.js → chunk-QN33PNHL-CyzabUv0.js} +1 -1
- package/dist/dashboard/client/assets/{chunk-QZHKN3VN-CV4VzxNq.js → chunk-QZHKN3VN-CceRbxt_.js} +1 -1
- package/dist/dashboard/client/assets/{chunk-TZMSLE5B-isdklocW.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-CCzlFSJf.js → cose-bilkent-S5V4N54A-DEdXBrCt.js} +1 -1
- package/dist/dashboard/client/assets/{dagre-6UL2VRFP-DVN3PkjZ.js → dagre-6UL2VRFP-DRdIiP58.js} +1 -1
- package/dist/dashboard/client/assets/{diagram-PSM6KHXK-SzJVoSsb.js → diagram-PSM6KHXK-Bo7Q2VlK.js} +1 -1
- package/dist/dashboard/client/assets/{diagram-QEK2KX5R-CgGn7ts-.js → diagram-QEK2KX5R-2Fmc2o5x.js} +1 -1
- package/dist/dashboard/client/assets/{diagram-S2PKOQOG-Bz1ukSx8.js → diagram-S2PKOQOG-5WE8f0p7.js} +1 -1
- package/dist/dashboard/client/assets/{erDiagram-Q2GNP2WA-CpstUTMZ.js → erDiagram-Q2GNP2WA-DD-iXWd_.js} +1 -1
- package/dist/dashboard/client/assets/{flowDiagram-NV44I4VS-aYVydGhp.js → flowDiagram-NV44I4VS-CCWo8Ue9.js} +1 -1
- package/dist/dashboard/client/assets/{ganttDiagram-JELNMOA3-Cb2DUSRk.js → ganttDiagram-JELNMOA3-CNY4d5UK.js} +1 -1
- package/dist/dashboard/client/assets/{gitGraphDiagram-V2S2FVAM-BUOnwA2w.js → gitGraphDiagram-V2S2FVAM-Dq5SBEJJ.js} +1 -1
- package/dist/dashboard/client/assets/{graph-4X5ddhLp.js → graph-BTt9lokK.js} +1 -1
- package/dist/dashboard/client/assets/{index-CKWqYAfu.js → index-B0k81q2b.js} +138 -138
- package/dist/dashboard/client/assets/index-Czwdh6UA.css +1 -0
- package/dist/dashboard/client/assets/{infoDiagram-HS3SLOUP-BlMqcrwm.js → infoDiagram-HS3SLOUP-AnKZja-G.js} +1 -1
- package/dist/dashboard/client/assets/{journeyDiagram-XKPGCS4Q-DF2ew7ju.js → journeyDiagram-XKPGCS4Q-nC-_WjPN.js} +1 -1
- package/dist/dashboard/client/assets/{kanban-definition-3W4ZIXB7-BKQMx0-n.js → kanban-definition-3W4ZIXB7-BEY73sWU.js} +1 -1
- package/dist/dashboard/client/assets/{layout-DNcn2g9w.js → layout-D4DfNpzH.js} +1 -1
- package/dist/dashboard/client/assets/{linear-Bqy9gvqb.js → linear-ZpGvKjeP.js} +1 -1
- package/dist/dashboard/client/assets/{mermaid-renderer-dJ71wgld.js → mermaid-renderer-BCDxmS9g.js} +4 -4
- package/dist/dashboard/client/assets/{mindmap-definition-VGOIOE7T-BARc8sqJ.js → mindmap-definition-VGOIOE7T-MzAaKESA.js} +1 -1
- package/dist/dashboard/client/assets/{pieDiagram-ADFJNKIX-CULlNZTd.js → pieDiagram-ADFJNKIX-B_X1kySF.js} +1 -1
- package/dist/dashboard/client/assets/{quadrantDiagram-AYHSOK5B-BJEZPVe9.js → quadrantDiagram-AYHSOK5B-CMoIEMLN.js} +1 -1
- package/dist/dashboard/client/assets/{requirementDiagram-UZGBJVZJ-BhMsmUIs.js → requirementDiagram-UZGBJVZJ-v4CRsn1w.js} +1 -1
- package/dist/dashboard/client/assets/{sankeyDiagram-TZEHDZUN-BYbNgogG.js → sankeyDiagram-TZEHDZUN-CPcyN8Jj.js} +1 -1
- package/dist/dashboard/client/assets/{sequenceDiagram-WL72ISMW-MoM_NwWk.js → sequenceDiagram-WL72ISMW-CTg0Vx1H.js} +1 -1
- package/dist/dashboard/client/assets/{stateDiagram-FKZM4ZOC-ditrlbM3.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-DOAJyjuz.js → timeline-definition-IT6M3QCI-B8xFcSGb.js} +1 -1
- package/dist/dashboard/client/assets/{treemap-GDKQZRPO-BBJkjnJl.js → treemap-GDKQZRPO-HQQuGl9w.js} +1 -1
- package/dist/dashboard/client/assets/{xychartDiagram-PRI3JC2R-CPW4s5vm.js → xychartDiagram-PRI3JC2R-Drz0SW3I.js} +1 -1
- package/dist/dashboard/client/index.html +2 -2
- package/dist/dashboard/server.js +910 -461
- package/dist/index.js +1257 -321
- package/package.json +6 -39
- package/dist/dashboard/client/assets/channel-BU2129fl.js +0 -1
- package/dist/dashboard/client/assets/classDiagram-2ON5EDUG-CVftFGiR.js +0 -1
- package/dist/dashboard/client/assets/classDiagram-v2-WZHVMYZB-CVftFGiR.js +0 -1
- package/dist/dashboard/client/assets/clone-DC6LEEC5.js +0 -1
- package/dist/dashboard/client/assets/index-CzxeSSaQ.css +0 -1
- package/dist/dashboard/client/assets/stateDiagram-v2-4FDKWEC3-SqoG2LCn.js +0 -1
- package/dist/lib/db/index.js +0 -2177
- package/dist/lib/models.js +0 -160
- 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/models.js
DELETED
|
@@ -1,160 +0,0 @@
|
|
|
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
|
-
async function execBinaryAsync(binary, args, opts) {
|
|
11
|
-
return execFilePromise(binary, args, {
|
|
12
|
-
...opts,
|
|
13
|
-
shell: isWindows
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
// src/lib/models.ts
|
|
18
|
-
function parseOpenCodeModelList(stdout) {
|
|
19
|
-
const models = [];
|
|
20
|
-
for (const rawLine of stdout.split(/\r?\n/)) {
|
|
21
|
-
const line = rawLine.trim();
|
|
22
|
-
if (!/^[^\s:]+\/\S+$/.test(line)) continue;
|
|
23
|
-
const provider = line.slice(0, line.indexOf("/"));
|
|
24
|
-
models.push({ id: line, provider });
|
|
25
|
-
}
|
|
26
|
-
return models.length > 0 ? models : null;
|
|
27
|
-
}
|
|
28
|
-
var VENDOR_MODEL_STRATEGIES = {
|
|
29
|
-
claude: {
|
|
30
|
-
displayName: "Claude Code",
|
|
31
|
-
native: {
|
|
32
|
-
// Verified against Claude Code 2.1.x: the CLI has no model-listing
|
|
33
|
-
// subcommand (`claude models --json` → "unknown option"). Revisit if
|
|
34
|
-
// a future release adds one.
|
|
35
|
-
unavailableReason: "Claude Code does not provide a model-listing command; showing its documented model aliases instead"
|
|
36
|
-
},
|
|
37
|
-
// Vendor-documented aliases that always track the latest generation —
|
|
38
|
-
// dated ids here would go stale by construction (the exact bug class of
|
|
39
|
-
// issue #39). Pinned dated ids remain available via free-text entry.
|
|
40
|
-
bundled: [
|
|
41
|
-
{ id: "opus", displayName: "Claude Opus (latest)" },
|
|
42
|
-
{ id: "sonnet", displayName: "Claude Sonnet (latest)" },
|
|
43
|
-
{ id: "haiku", displayName: "Claude Haiku (latest)" }
|
|
44
|
-
]
|
|
45
|
-
},
|
|
46
|
-
opencode: {
|
|
47
|
-
displayName: "OpenCode",
|
|
48
|
-
native: {
|
|
49
|
-
// Plain `opencode models` — newline-delimited ids. (`--json` is not a
|
|
50
|
-
// real flag, and `--verbose` interleaves JSON metadata blocks that
|
|
51
|
-
// defeat line parsing.)
|
|
52
|
-
args: ["models"],
|
|
53
|
-
parse: parseOpenCodeModelList
|
|
54
|
-
},
|
|
55
|
-
bundled: [
|
|
56
|
-
{ id: "anthropic/claude-opus-4-8", provider: "anthropic" },
|
|
57
|
-
{ id: "anthropic/claude-sonnet-4-6", provider: "anthropic" },
|
|
58
|
-
{ id: "anthropic/claude-haiku-4-5", provider: "anthropic" }
|
|
59
|
-
]
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
var SUPPORTED_VENDORS = Object.keys(
|
|
63
|
-
VENDOR_MODEL_STRATEGIES
|
|
64
|
-
);
|
|
65
|
-
function isModelVendor(value) {
|
|
66
|
-
return Object.hasOwn(VENDOR_MODEL_STRATEGIES, value);
|
|
67
|
-
}
|
|
68
|
-
async function detectActiveVendor() {
|
|
69
|
-
for (const vendor of SUPPORTED_VENDORS) {
|
|
70
|
-
try {
|
|
71
|
-
await execBinaryAsync(vendor, ["--version"], {
|
|
72
|
-
encoding: "utf-8",
|
|
73
|
-
timeout: 3e3
|
|
74
|
-
});
|
|
75
|
-
return vendor;
|
|
76
|
-
} catch {
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
return null;
|
|
80
|
-
}
|
|
81
|
-
function describeProbeFailure(vendor, args, err) {
|
|
82
|
-
const command = `${vendor} ${args.join(" ")}`;
|
|
83
|
-
const e = err;
|
|
84
|
-
if (e.code === "ENOENT") {
|
|
85
|
-
return `\`${vendor}\` is not installed or not on PATH`;
|
|
86
|
-
}
|
|
87
|
-
if (e.killed) {
|
|
88
|
-
return `\`${command}\` timed out or exceeded output limits`;
|
|
89
|
-
}
|
|
90
|
-
const stderr = typeof e.stderr === "string" ? e.stderr.trim() : "";
|
|
91
|
-
const firstLine = (stderr.split(/\r?\n/)[0] ?? "").replace(/\u001b\[[0-9;]*[A-Za-z]/g, "").replace(/[\u0000-\u001f\u007f]/g, "").slice(0, 200);
|
|
92
|
-
const detail = firstLine ? `: ${firstLine}` : "";
|
|
93
|
-
const exit = typeof e.code === "number" ? ` with exit code ${e.code}` : "";
|
|
94
|
-
return `\`${command}\` failed${exit}${detail}`;
|
|
95
|
-
}
|
|
96
|
-
async function tryNativeEnumeration(vendor, probe) {
|
|
97
|
-
let stdout;
|
|
98
|
-
try {
|
|
99
|
-
const result = await execBinaryAsync(vendor, probe.args, {
|
|
100
|
-
encoding: "utf-8",
|
|
101
|
-
timeout: 5e3
|
|
102
|
-
});
|
|
103
|
-
stdout = result.stdout;
|
|
104
|
-
} catch (err) {
|
|
105
|
-
return { models: null, reason: describeProbeFailure(vendor, probe.args, err) };
|
|
106
|
-
}
|
|
107
|
-
const models = probe.parse(stdout);
|
|
108
|
-
if (!models) {
|
|
109
|
-
return {
|
|
110
|
-
models: null,
|
|
111
|
-
reason: `\`${vendor} ${probe.args.join(" ")}\` output did not contain any model identifiers`
|
|
112
|
-
};
|
|
113
|
-
}
|
|
114
|
-
return { models };
|
|
115
|
-
}
|
|
116
|
-
var SUCCESS_TTL_MS = 6e4;
|
|
117
|
-
var FAILURE_TTL_MS = 1e4;
|
|
118
|
-
var cache = /* @__PURE__ */ new Map();
|
|
119
|
-
function clearModelListCache() {
|
|
120
|
-
cache.clear();
|
|
121
|
-
}
|
|
122
|
-
async function listModelsForVendor(vendor) {
|
|
123
|
-
const cached = cache.get(vendor);
|
|
124
|
-
if (cached && cached.expiresAt > Date.now()) {
|
|
125
|
-
return cached.result;
|
|
126
|
-
}
|
|
127
|
-
const strategy = VENDOR_MODEL_STRATEGIES[vendor];
|
|
128
|
-
if (!strategy) {
|
|
129
|
-
throw new Error(`Unknown vendor: ${vendor}`);
|
|
130
|
-
}
|
|
131
|
-
let result;
|
|
132
|
-
if ("unavailableReason" in strategy.native) {
|
|
133
|
-
result = {
|
|
134
|
-
vendor,
|
|
135
|
-
source: "bundled",
|
|
136
|
-
models: strategy.bundled,
|
|
137
|
-
nativeUnavailableReason: strategy.native.unavailableReason
|
|
138
|
-
};
|
|
139
|
-
} else {
|
|
140
|
-
const native = await tryNativeEnumeration(vendor, strategy.native);
|
|
141
|
-
result = native.models ? { vendor, source: "native", models: native.models } : {
|
|
142
|
-
vendor,
|
|
143
|
-
source: "bundled",
|
|
144
|
-
models: strategy.bundled,
|
|
145
|
-
nativeUnavailableReason: native.reason
|
|
146
|
-
};
|
|
147
|
-
}
|
|
148
|
-
const ttl = result.source === "native" ? SUCCESS_TTL_MS : FAILURE_TTL_MS;
|
|
149
|
-
cache.set(vendor, { result, expiresAt: Date.now() + ttl });
|
|
150
|
-
return result;
|
|
151
|
-
}
|
|
152
|
-
export {
|
|
153
|
-
SUPPORTED_VENDORS,
|
|
154
|
-
VENDOR_MODEL_STRATEGIES,
|
|
155
|
-
clearModelListCache,
|
|
156
|
-
detectActiveVendor,
|
|
157
|
-
isModelVendor,
|
|
158
|
-
listModelsForVendor,
|
|
159
|
-
parseOpenCodeModelList
|
|
160
|
-
};
|
|
@@ -1,55 +0,0 @@
|
|
|
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
|
-
var DEFAULT_WORKFLOW_HARD_DEADLINE_MINUTES = 60;
|
|
6
|
-
function readRuntimePositiveInt(ocrDir, key, defaultValue) {
|
|
7
|
-
const configPath = join(ocrDir, "config.yaml");
|
|
8
|
-
if (!existsSync(configPath)) return defaultValue;
|
|
9
|
-
let content;
|
|
10
|
-
try {
|
|
11
|
-
content = readFileSync(configPath, "utf-8");
|
|
12
|
-
} catch {
|
|
13
|
-
return defaultValue;
|
|
14
|
-
}
|
|
15
|
-
const blockMatch = content.match(
|
|
16
|
-
new RegExp(
|
|
17
|
-
String.raw`^runtime:\s*\n(?:\s+[^\n]*\n)*?\s+${key}:\s*([^\s#\n]+)`,
|
|
18
|
-
"m"
|
|
19
|
-
)
|
|
20
|
-
);
|
|
21
|
-
const inlineMatch = content.match(
|
|
22
|
-
new RegExp(String.raw`^runtime:\s*\{[^}]*\b${key}:\s*([^\s,}]+)`, "m")
|
|
23
|
-
);
|
|
24
|
-
const raw = blockMatch?.[1] ?? inlineMatch?.[1];
|
|
25
|
-
if (!raw) return defaultValue;
|
|
26
|
-
const parsed = Number(raw);
|
|
27
|
-
if (!Number.isFinite(parsed) || parsed <= 0 || !Number.isInteger(parsed)) {
|
|
28
|
-
process.stderr.write(
|
|
29
|
-
`[ocr] runtime.${key} is not a positive integer (got "${raw}"); falling back to ${defaultValue}.
|
|
30
|
-
`
|
|
31
|
-
);
|
|
32
|
-
return defaultValue;
|
|
33
|
-
}
|
|
34
|
-
return parsed;
|
|
35
|
-
}
|
|
36
|
-
function getAgentHeartbeatSeconds(ocrDir) {
|
|
37
|
-
return readRuntimePositiveInt(
|
|
38
|
-
ocrDir,
|
|
39
|
-
"agent_heartbeat_seconds",
|
|
40
|
-
DEFAULT_AGENT_HEARTBEAT_SECONDS
|
|
41
|
-
);
|
|
42
|
-
}
|
|
43
|
-
function getWorkflowHardDeadlineMs(ocrDir) {
|
|
44
|
-
return readRuntimePositiveInt(
|
|
45
|
-
ocrDir,
|
|
46
|
-
"workflow_hard_deadline_minutes",
|
|
47
|
-
DEFAULT_WORKFLOW_HARD_DEADLINE_MINUTES
|
|
48
|
-
) * 60 * 1e3;
|
|
49
|
-
}
|
|
50
|
-
export {
|
|
51
|
-
DEFAULT_AGENT_HEARTBEAT_SECONDS,
|
|
52
|
-
DEFAULT_WORKFLOW_HARD_DEADLINE_MINUTES,
|
|
53
|
-
getAgentHeartbeatSeconds,
|
|
54
|
-
getWorkflowHardDeadlineMs
|
|
55
|
-
};
|