@llamaventures/cli 1.24.0 → 1.25.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/CHANGELOG.md +6 -0
- package/README.md +12 -0
- package/README.zh-CN.md +12 -0
- package/bin/llama.mjs +27 -5
- package/contracts/core-api.json +4 -4
- package/contracts/required-operations.json +4 -0
- package/lib/build-manifest.json +4 -4
- package/lib/workflow-remediation.mjs +45 -0
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,12 @@ this project adheres to [Semantic Versioning](https://semver.org).
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [1.25.0] - 2026-08-05
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
- Add preview-first, revision-fenced `llama admin workflow remediate` for the
|
|
13
|
+
two allowlisted Workflow V2 false-green intake checks in Llama Command 3.26.0.
|
|
14
|
+
|
|
9
15
|
## [1.24.0] - 2026-08-05
|
|
10
16
|
|
|
11
17
|
### Added
|
package/README.md
CHANGED
|
@@ -121,6 +121,18 @@ llama admin workflow audit --deal <dealId>
|
|
|
121
121
|
llama admin workflow audit --all
|
|
122
122
|
```
|
|
123
123
|
|
|
124
|
+
For the two supported false-green intake checks, remediation is preview-first
|
|
125
|
+
and one deal at a time. Apply requires the exact revision returned by preview:
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
llama admin workflow remediate --deal <dealId> --guard intake.reason_why
|
|
129
|
+
llama admin workflow remediate --deal <dealId> --guard intake.reason_why \
|
|
130
|
+
--apply --expected-revision <revision> --reason "Confirmed missing canonical evidence"
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
The server can only invalidate a system-generated green. It cannot advance a
|
|
134
|
+
deal, satisfy a check, change status/ownership, or override a human resolution.
|
|
135
|
+
|
|
124
136
|
Status vocabulary — `Interested`: tracked before any contact ·
|
|
125
137
|
`Outreached`: contacted, no response yet · `Sourced`: real relationship
|
|
126
138
|
signal exists. `sourceDirection` is separate: `Inbound` came to the firm,
|
package/README.zh-CN.md
CHANGED
|
@@ -142,6 +142,18 @@ llama admin workflow audit --deal <dealId>
|
|
|
142
142
|
llama admin workflow audit --all
|
|
143
143
|
```
|
|
144
144
|
|
|
145
|
+
对当前支持的两个 intake 假绿检查,修复必须先 preview,并且一次只处理一个 deal。
|
|
146
|
+
Apply 必须携带 preview 返回的精确 revision:
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
llama admin workflow remediate --deal <dealId> --guard intake.reason_why
|
|
150
|
+
llama admin workflow remediate --deal <dealId> --guard intake.reason_why \
|
|
151
|
+
--apply --expected-revision <revision> --reason "已确认 canonical 证据缺失"
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
服务端只能把系统生成的绿灯改回未满足;不能推进 deal、把检查改成已满足、修改
|
|
155
|
+
status/owner,也不能覆盖人工 resolution。
|
|
156
|
+
|
|
145
157
|
Status 语义——`Interested`:接触前先记录关注 · `Outreached`:已联系、
|
|
146
158
|
尚无回应 · `Sourced`:已有真实关系信号。`sourceDirection` 是独立维度:
|
|
147
159
|
`Inbound` 流入,`Outbound` 我们主动。
|
package/bin/llama.mjs
CHANGED
|
@@ -37,6 +37,10 @@ import { deleteBundle, detectBackend, readBundle, writeBundle } from "../lib/oau
|
|
|
37
37
|
import { maybeNudgeUpdate, getUpdateNudge } from "../lib/version-check.mjs";
|
|
38
38
|
import { getBuildInfo } from "../lib/build-info.mjs";
|
|
39
39
|
import { workflowAuditPath } from "../lib/workflow-audit.mjs";
|
|
40
|
+
import {
|
|
41
|
+
WORKFLOW_REMEDIATION_PATH,
|
|
42
|
+
workflowRemediationBody,
|
|
43
|
+
} from "../lib/workflow-remediation.mjs";
|
|
40
44
|
|
|
41
45
|
const requireFromHere = createRequire(import.meta.url);
|
|
42
46
|
const { version: PKG_VERSION } = requireFromHere("../package.json");
|
|
@@ -605,6 +609,8 @@ Deal page HTML (hand-authored sandboxed pages on /deals/<id>/browse/<slug>):
|
|
|
605
609
|
|
|
606
610
|
Admin (system admin only — server returns 403 for non-admin tokens):
|
|
607
611
|
llama admin workflow audit --deal <uuid> | --all
|
|
612
|
+
llama admin workflow remediate --deal <uuid> --guard intake.reason_why[,intake.founder_identity]
|
|
613
|
+
[--apply --expected-revision <n> --reason "..."]
|
|
608
614
|
llama admin auth-events [--kind X] [--actor email] [--subject email] [--since 24h|7d|30d|<ISO>] [--limit 100]
|
|
609
615
|
llama admin deal-events [--kind X] [--actor email] [--deal <uuid>] [--since 24h] [--limit 100]
|
|
610
616
|
llama admin agent-events [--kind tool_call|loop_stalled|max_turns_reached] [--agent-kind deal|secretary|main|inbox]
|
|
@@ -2412,12 +2418,28 @@ Routing — is this the right command?
|
|
|
2412
2418
|
);
|
|
2413
2419
|
}
|
|
2414
2420
|
if (sub === "workflow") {
|
|
2415
|
-
if (rest[0]
|
|
2416
|
-
throw new Error("Usage: llama admin workflow audit
|
|
2421
|
+
if (!["audit", "remediate"].includes(rest[0])) {
|
|
2422
|
+
throw new Error("Usage: llama admin workflow audit|remediate ...");
|
|
2423
|
+
}
|
|
2424
|
+
if (rest[0] === "audit") {
|
|
2425
|
+
const { flags } = parseFlags(rest.slice(1), ["deal", "all"]);
|
|
2426
|
+
// @core-api-operation GET /api/admin/workflow-audit
|
|
2427
|
+
print(await request("GET", workflowAuditPath(flags)));
|
|
2428
|
+
return;
|
|
2417
2429
|
}
|
|
2418
|
-
const { flags } = parseFlags(rest.slice(1), [
|
|
2419
|
-
|
|
2420
|
-
|
|
2430
|
+
const { flags } = parseFlags(rest.slice(1), [
|
|
2431
|
+
"deal",
|
|
2432
|
+
"guard",
|
|
2433
|
+
"apply",
|
|
2434
|
+
"expected-revision",
|
|
2435
|
+
"reason",
|
|
2436
|
+
]);
|
|
2437
|
+
const body = workflowRemediationBody(
|
|
2438
|
+
flags,
|
|
2439
|
+
flags.apply === true ? `cli-workflow-remediation-${randomUUID()}` : undefined,
|
|
2440
|
+
);
|
|
2441
|
+
// @core-api-operation POST /api/admin/workflow-remediation
|
|
2442
|
+
print(await request("POST", WORKFLOW_REMEDIATION_PATH, body));
|
|
2421
2443
|
return;
|
|
2422
2444
|
}
|
|
2423
2445
|
const { flags } = parseFlags(rest);
|
package/contracts/core-api.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"format": "llama.core-api-contract.v1",
|
|
3
3
|
"name": "llama-core-api",
|
|
4
|
-
"apiVersion": "3.
|
|
4
|
+
"apiVersion": "3.26.0",
|
|
5
5
|
"openapiVersion": "3.0.3",
|
|
6
|
-
"sha256": "
|
|
7
|
-
"pathCount":
|
|
8
|
-
"operationCount":
|
|
6
|
+
"sha256": "1ab4db8774b6dc0d94d6d6b4dd79f8272c6a405a3474710ac4162cc8a0dc6981",
|
|
7
|
+
"pathCount": 236,
|
|
8
|
+
"operationCount": 307
|
|
9
9
|
}
|
package/lib/build-manifest.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"format": "llama.cli-build.v1",
|
|
3
3
|
"packageName": "@llamaventures/cli",
|
|
4
|
-
"packageVersion": "1.
|
|
5
|
-
"sourceSha": "
|
|
4
|
+
"packageVersion": "1.25.0",
|
|
5
|
+
"sourceSha": "4b70d873886c521d02cc7c75659425ed6e2989f6",
|
|
6
6
|
"sourceKind": "github",
|
|
7
7
|
"sourceDirty": false,
|
|
8
8
|
"coreApiContract": {
|
|
9
9
|
"format": "llama.core-api-contract.v1",
|
|
10
10
|
"name": "llama-core-api",
|
|
11
|
-
"apiVersion": "3.
|
|
11
|
+
"apiVersion": "3.26.0",
|
|
12
12
|
"openapiVersion": "3.0.3",
|
|
13
|
-
"sha256": "
|
|
13
|
+
"sha256": "1ab4db8774b6dc0d94d6d6b4dd79f8272c6a405a3474710ac4162cc8a0dc6981"
|
|
14
14
|
}
|
|
15
15
|
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export const WORKFLOW_REMEDIATION_PATH = "/api/admin/workflow-remediation";
|
|
2
|
+
export const WORKFLOW_REMEDIATION_GUARDS = [
|
|
3
|
+
"intake.founder_identity",
|
|
4
|
+
"intake.reason_why",
|
|
5
|
+
];
|
|
6
|
+
|
|
7
|
+
export function workflowRemediationBody(flags, requestId) {
|
|
8
|
+
const dealId = typeof flags.deal === "string" ? flags.deal.trim() : "";
|
|
9
|
+
const rawGuards = typeof flags.guard === "string" ? flags.guard : "";
|
|
10
|
+
const guardKeys = [...new Set(
|
|
11
|
+
rawGuards.split(",").map((value) => value.trim()).filter(Boolean),
|
|
12
|
+
)];
|
|
13
|
+
if (!dealId || guardKeys.length < 1 || guardKeys.length > 2 ||
|
|
14
|
+
guardKeys.some((key) => !WORKFLOW_REMEDIATION_GUARDS.includes(key))) {
|
|
15
|
+
throw new Error(
|
|
16
|
+
"Usage: llama admin workflow remediate --deal <uuid> " +
|
|
17
|
+
"--guard intake.reason_why[,intake.founder_identity] " +
|
|
18
|
+
"[--apply --expected-revision <n> --reason \"...\"]",
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
if (flags.apply !== true) {
|
|
23
|
+
if (flags["expected-revision"] !== undefined || flags.reason !== undefined) {
|
|
24
|
+
throw new Error("--expected-revision and --reason require --apply");
|
|
25
|
+
}
|
|
26
|
+
return { action: "preview", dealId, guardKeys };
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const expectedRevision = Number(flags["expected-revision"]);
|
|
30
|
+
const reason = typeof flags.reason === "string" ? flags.reason.trim() : "";
|
|
31
|
+
if (!Number.isInteger(expectedRevision) || expectedRevision < 0 || !reason) {
|
|
32
|
+
throw new Error("--apply requires --expected-revision <n> from preview and --reason \"...\"");
|
|
33
|
+
}
|
|
34
|
+
if (typeof requestId !== "string" || !requestId) {
|
|
35
|
+
throw new Error("workflow remediation apply requires a request ID");
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
action: "apply",
|
|
39
|
+
dealId,
|
|
40
|
+
guardKeys,
|
|
41
|
+
expectedRevision,
|
|
42
|
+
requestId,
|
|
43
|
+
reason,
|
|
44
|
+
};
|
|
45
|
+
}
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@llamaventures/cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.25.0",
|
|
4
4
|
"description": "CLI + MCP server for the Llama Ventures investment workbench (command.llamaventures.vc).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"test": "npm run test:agent-routing && npm run test:contract",
|
|
8
8
|
"test:agent-routing": "node scripts/verify-agent-routing.mjs",
|
|
9
|
-
"test:contract": "node --test scripts/build-manifest.test.mjs scripts/core-api-call-sites.test.mjs scripts/investment-workflow-contract.test.mjs scripts/server-compatibility.test.mjs scripts/verify-core-api-contract.test.mjs scripts/workflow-audit.test.mjs && node scripts/verify-core-api-contract.mjs",
|
|
9
|
+
"test:contract": "node --test scripts/build-manifest.test.mjs scripts/core-api-call-sites.test.mjs scripts/investment-workflow-contract.test.mjs scripts/server-compatibility.test.mjs scripts/verify-core-api-contract.test.mjs scripts/workflow-audit.test.mjs scripts/workflow-remediation.test.mjs && node scripts/verify-core-api-contract.mjs",
|
|
10
10
|
"verify:artifact": "node scripts/verify-release-artifact.mjs",
|
|
11
11
|
"verify:release": "npm test && npm run verify:artifact && node scripts/verify-tarball-clean.mjs",
|
|
12
12
|
"prepack": "node scripts/prepare-build-manifest.mjs",
|