@llamaventures/cli 1.17.0 → 1.17.2
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/AGENT_BRIEFING.md +6 -1
- package/CHANGELOG.md +25 -1
- package/README.md +47 -19
- package/README.zh-CN.md +57 -21
- package/bin/llama-mcp.mjs +5 -4
- package/bin/llama.mjs +3 -3
- package/package.json +2 -2
- package/scripts/verify-agent-routing.mjs +5 -5
package/AGENT_BRIEFING.md
CHANGED
|
@@ -8,6 +8,7 @@ You are not just an AI assistant. You're an **extension of a team member** — w
|
|
|
8
8
|
|
|
9
9
|
- **Your access scope is whatever your token allows.** Run `llama auth status` first; the response shows your role, identity, and active token source.
|
|
10
10
|
- **All your writes are logged.** `auth_events` and `deal_events` capture everything. Pipeline data can always be traced back to who/what changed it.
|
|
11
|
+
- **Public surfaces stay clean.** Anything that leaves the workspace — public repos, npm packages, external artifacts, shared links — must not leak internal people, deals, private URLs, or workflow nuance.
|
|
11
12
|
- **Be direct, terse, action-oriented.** Save your words for the genuine judgment calls.
|
|
12
13
|
- **Critical when thinking, helpful when executing.** Push back on weak logic, then ship the work cleanly.
|
|
13
14
|
|
|
@@ -39,6 +40,7 @@ Any time the user mentions a company name or founder name:
|
|
|
39
40
|
1. **Run `llama deal search "<name>"` BEFORE web search.** Always. No exceptions.
|
|
40
41
|
2. If pipeline has it → pull the data, integrate into your reply silently.
|
|
41
42
|
3. If pipeline doesn't have it → ask once: "New name. Add to pipeline? (Y/n)". On yes, `llama deal create`.
|
|
43
|
+
- Use `--status Interested` when Llama wants to record/track the company before any outreach, intro, response, deck submission, or meeting.
|
|
42
44
|
- Use `--status Outreached` when we only contacted/logged the company and have no response or effective relationship yet.
|
|
43
45
|
- Use `--status Sourced` only once there is a response, intro, meeting, or another real relationship signal.
|
|
44
46
|
- Also set `--source-direction Inbound` if the deal came into the firm; set `--source-direction Outbound` if Llama found/listed/reached out first.
|
|
@@ -205,6 +207,7 @@ llama deal show <dealId>
|
|
|
205
207
|
llama deal list [--owner ...] [--status ...]
|
|
206
208
|
|
|
207
209
|
# Pipeline — write
|
|
210
|
+
llama deal create "Company" --description "..." --source-direction Outbound --status Interested
|
|
208
211
|
llama deal create "Company" --description "..." --source-direction Outbound --status Outreached
|
|
209
212
|
llama deal create "Company" --description "..." --source-direction Inbound --status Sourced
|
|
210
213
|
llama deal update <dealId> <field> <value>
|
|
@@ -213,7 +216,9 @@ llama deal update <dealId> <field> <value>
|
|
|
213
216
|
# foundedYear leadInvestor investors (each write logs a deal_events row)
|
|
214
217
|
|
|
215
218
|
# Our Stage vocabulary starts with:
|
|
216
|
-
# Outreached → Sourced → First Meeting → Diligence → Partner Meeting → Term Sheet → Invested
|
|
219
|
+
# Interested → Outreached → Sourced → First Meeting → Diligence → Partner Meeting → Term Sheet → Invested
|
|
220
|
+
# `Interested` is pre-contact intent to track. Do not use `manualTags=Interested`
|
|
221
|
+
# for new writes.
|
|
217
222
|
# `Outreached` is relationship memory only. Do not inflate it to `Sourced`
|
|
218
223
|
# unless a real relationship signal exists.
|
|
219
224
|
# `sourceDirection` is separate: Inbound = came into the firm; Outbound =
|
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,29 @@ this project adheres to [Semantic Versioning](https://semver.org).
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [1.17.2] - 2026-07-01
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
- README (en + zh): new "Integrate your AI system" section — the recommended
|
|
13
|
+
path for wiring external agents/LLM apps through the CLI/MCP layer instead
|
|
14
|
+
of the raw HTTP API; corrected tool count (58) and command count (100+);
|
|
15
|
+
de-duplicated the CLI tour examples; removed an obsolete migration note;
|
|
16
|
+
the zh auth section now documents `llama auth login` (OAuth) as the
|
|
17
|
+
recommended method, matching en.
|
|
18
|
+
- MCP tool descriptions now defer server-configured option lists to runtime
|
|
19
|
+
discovery via `agent_bootstrap` instead of hardcoding them in tool text.
|
|
20
|
+
- Agent briefing: added a public-surfaces hygiene rule from the server-owned
|
|
21
|
+
contract.
|
|
22
|
+
- CI/publish pipeline: additional automated release-gate checks.
|
|
23
|
+
|
|
24
|
+
## [1.17.1] - 2026-06-29
|
|
25
|
+
|
|
26
|
+
### Changed
|
|
27
|
+
- Documented `Interested` as the canonical pre-outreach Our Stage across CLI
|
|
28
|
+
help, MCP tool schemas, README examples, and the bundled agent briefing.
|
|
29
|
+
Agents should use `status=Interested` for "record/track before contact" and
|
|
30
|
+
avoid writing new `manualTags=Interested` records.
|
|
31
|
+
|
|
9
32
|
## [1.17.0] - 2026-06-23
|
|
10
33
|
|
|
11
34
|
### Added
|
|
@@ -457,7 +480,8 @@ assistant-drafted (🤖) and enforces the AI trust ceiling.
|
|
|
457
480
|
|
|
458
481
|
---
|
|
459
482
|
|
|
460
|
-
[Unreleased]: https://github.com/Llama-Ventures/llama-cli/compare/v1.17.
|
|
483
|
+
[Unreleased]: https://github.com/Llama-Ventures/llama-cli/compare/v1.17.1...HEAD
|
|
484
|
+
[1.17.1]: https://github.com/Llama-Ventures/llama-cli/compare/v1.17.0...v1.17.1
|
|
461
485
|
[1.17.0]: https://github.com/Llama-Ventures/llama-cli/compare/v1.16.0...v1.17.0
|
|
462
486
|
[1.16.0]: https://github.com/Llama-Ventures/llama-cli/compare/v1.15.1...v1.16.0
|
|
463
487
|
[1.15.1]: https://github.com/Llama-Ventures/llama-cli/compare/v1.15.0...v1.15.1
|
package/README.md
CHANGED
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
<p align="center">
|
|
28
28
|
<a href="#install">Install</a> ·
|
|
29
29
|
<a href="#authenticate">Authenticate</a> ·
|
|
30
|
+
<a href="#integrate-your-ai-system">Integrate your AI</a> ·
|
|
30
31
|
<a href="#cli-tour">CLI</a> ·
|
|
31
32
|
<a href="#mcp-server">MCP</a> ·
|
|
32
33
|
<a href="#external-pitch-no-llama-account-required">External pitch</a> ·
|
|
@@ -48,7 +49,7 @@
|
|
|
48
49
|
```
|
|
49
50
|
@llamaventures/cli
|
|
50
51
|
├── bin/llama interactive CLI for humans + bash
|
|
51
|
-
└── bin/llama-mcp stdio MCP server,
|
|
52
|
+
└── bin/llama-mcp stdio MCP server, 58 typed tools — for any MCP-native agent
|
|
52
53
|
```
|
|
53
54
|
|
|
54
55
|
Both binaries share `lib/client.mjs` — the **same** auth chain, **same** HTTP
|
|
@@ -89,12 +90,6 @@ llama auth status # round-trips against /api/me
|
|
|
89
90
|
|
|
90
91
|
The same install puts `llama-mcp` on your `PATH` for the MCP server — no second package.
|
|
91
92
|
|
|
92
|
-
> **Upgrading from `npm link`?** The CLI used to live in the `llama-os/cli/`
|
|
93
|
-
> directory and was distributed via `npm link`. As of CLI v1.x it ships as
|
|
94
|
-
> `@llamaventures/cli`. Run `npm i -g @llamaventures/cli@latest`; the legacy
|
|
95
|
-
> directory keeps working during the soak window but is no longer the source
|
|
96
|
-
> of truth. See [`llama-os/cli/DEPRECATED.md`](https://github.com/SoujiOkita98/llama-os/blob/main/cli/DEPRECATED.md).
|
|
97
|
-
|
|
98
93
|
---
|
|
99
94
|
|
|
100
95
|
## Authenticate
|
|
@@ -166,6 +161,39 @@ llama deal search acme-ai # ready
|
|
|
166
161
|
|
|
167
162
|
---
|
|
168
163
|
|
|
164
|
+
## Integrate your AI system
|
|
165
|
+
|
|
166
|
+
This package is the **supported integration surface** for Llama Command. If
|
|
167
|
+
you're wiring an in-house agent, a coding assistant, or any LLM app into the
|
|
168
|
+
workbench, come through here — **not the raw HTTP API**. The CLI/MCP layer owns
|
|
169
|
+
the auth chain, the stable `Error[…]` contract, and forward-compatibility
|
|
170
|
+
across server schema changes ([SemVer](#stability)); raw API routes carry no
|
|
171
|
+
such promise and can change without notice.
|
|
172
|
+
|
|
173
|
+
The five-minute path:
|
|
174
|
+
|
|
175
|
+
1. **Get credentials** — a team account signs in with `llama auth login`; for
|
|
176
|
+
headless systems, have the admin mint a PAT at
|
|
177
|
+
[`/settings/tokens`](https://command.llamaventures.vc/settings/tokens) and
|
|
178
|
+
set it via `llama token set` or `$LLAMA_TOKEN`.
|
|
179
|
+
2. **Install** — `npm i -g @llamaventures/cli` (Node 18+).
|
|
180
|
+
3. **Wire it in:**
|
|
181
|
+
- **MCP-native agent** (Claude, Cursor, any stdio client) → point it at
|
|
182
|
+
`llama-mcp`: 58 typed tools, no generic passthrough.
|
|
183
|
+
See [MCP server](#mcp-server) for per-client config.
|
|
184
|
+
- **Anything else** → shell out to `llama …`. Output is agent-friendly
|
|
185
|
+
plain text; failures use the stable
|
|
186
|
+
[`Error[…]` prefixes](#error-codes--for-agents).
|
|
187
|
+
4. **Onboard the agent** — have it run `llama agent-onboard` (or fetch the MCP
|
|
188
|
+
`agent_briefing` prompt) at session start. It returns the **server-owned
|
|
189
|
+
Agent Runtime Contract** — current workflow rules, attribution grammar,
|
|
190
|
+
error recovery — always in sync with the live server, so this README never
|
|
191
|
+
becomes your integration bottleneck.
|
|
192
|
+
5. **Verify** — `llama auth status` round-trips the resolved identity;
|
|
193
|
+
`llama deal search "<anything>"` proves read access.
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
169
197
|
## CLI tour
|
|
170
198
|
|
|
171
199
|
The CLI is the canonical interface. The HTTP API beneath it is stable, but the
|
|
@@ -180,14 +208,12 @@ llama token show
|
|
|
180
208
|
|
|
181
209
|
# Pipeline — read
|
|
182
210
|
llama deal search "acme ai"
|
|
183
|
-
llama deal list --owner alex --status
|
|
184
|
-
llama deal list --source-direction Outbound --status Outreached
|
|
185
|
-
llama deal list --owner alex --status Diligence
|
|
211
|
+
llama deal list --owner alex --status Diligence # same filters as search
|
|
186
212
|
llama deal show <dealId>
|
|
213
|
+
llama deal feed <dealId> # every contribution, newest first
|
|
187
214
|
|
|
188
215
|
# Pipeline — write
|
|
189
|
-
llama deal create "Acme AI" --description "..." --source
|
|
190
|
-
llama deal create "Acme AI" --description "..." --source Gavin --source-direction Inbound --status Sourced
|
|
216
|
+
llama deal create "Acme AI" --description "..." --source alex --source-direction Outbound --status Interested
|
|
191
217
|
llama deal update <dealId> status Diligence
|
|
192
218
|
llama deal enrich <dealId> --dry-run
|
|
193
219
|
llama deal enrich <dealId> --apply --executor server_agent
|
|
@@ -197,6 +223,7 @@ llama deal delete <dealId> # soft (audit-logged)
|
|
|
197
223
|
llama deal restore <dealId>
|
|
198
224
|
|
|
199
225
|
# Status semantics
|
|
226
|
+
# Interested = record/track before outreach, intro, response, deck submission, or meeting.
|
|
200
227
|
# Outreached = contact/logged, but no response or effective relationship yet.
|
|
201
228
|
# Sourced = response, intro, meeting, or another real relationship signal exists.
|
|
202
229
|
# sourceDirection is separate:
|
|
@@ -245,10 +272,11 @@ llama mentions
|
|
|
245
272
|
llama mentions resolve <mentionId>
|
|
246
273
|
```
|
|
247
274
|
|
|
248
|
-
Run `llama --help` for the
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
and
|
|
275
|
+
Run `llama --help` for the group index, or `llama help all` for the full
|
|
276
|
+
reference — 100+ commands across deals, briefs, facts, ownership, timeline,
|
|
277
|
+
wiki, memos, deal-scoped HTML artifacts, mentions, skill corrections, evals,
|
|
278
|
+
and admin event feeds. Soft-delete is the default everywhere — every removal
|
|
279
|
+
is reversible and audit-logged via `deal_events`.
|
|
252
280
|
|
|
253
281
|
### Error codes — for agents
|
|
254
282
|
|
|
@@ -416,9 +444,9 @@ intake agent extracts the structured fields and produces the verdict.
|
|
|
416
444
|
the `Error[…]` prefixes are part of the public contract and won't change
|
|
417
445
|
inside a major version.
|
|
418
446
|
- **Server schema drift:** When the API gains an endpoint, the CLI / MCP gain
|
|
419
|
-
a typed wrapper in the next minor release.
|
|
420
|
-
|
|
421
|
-
|
|
447
|
+
a typed wrapper in the next minor release. There is deliberately no raw-API
|
|
448
|
+
passthrough — if a wrapper you need hasn't landed yet, open an issue rather
|
|
449
|
+
than calling the HTTP API directly.
|
|
422
450
|
|
|
423
451
|
See [`CHANGELOG.md`](CHANGELOG.md) for the per-version log.
|
|
424
452
|
|
package/README.zh-CN.md
CHANGED
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
|
|
27
27
|
<p align="center">
|
|
28
28
|
<a href="#给华人创业者-向-llama-pitch">🚀 向 Llama pitch(无需账号)</a> ·
|
|
29
|
+
<a href="#接入你的-ai-系统">接入你的 AI</a> ·
|
|
29
30
|
<a href="#安装">安装</a> ·
|
|
30
31
|
<a href="#认证">认证</a> ·
|
|
31
32
|
<a href="#cli-速览">CLI</a> ·
|
|
@@ -48,7 +49,7 @@
|
|
|
48
49
|
```
|
|
49
50
|
@llamaventures/cli
|
|
50
51
|
├── bin/llama 给人 + bash 用的交互式 CLI
|
|
51
|
-
└── bin/llama-mcp 给 MCP 原生 agent 用的 stdio MCP server,
|
|
52
|
+
└── bin/llama-mcp 给 MCP 原生 agent 用的 stdio MCP server,58 个类型化工具
|
|
52
53
|
```
|
|
53
54
|
|
|
54
55
|
两个 binary 共享 `lib/client.mjs`——**同一**认证链、**同一** HTTP 客户端、
|
|
@@ -133,12 +134,6 @@ llama auth status # 会跑一次 /api/me 验证
|
|
|
133
134
|
|
|
134
135
|
同一次安装会把 `llama-mcp` 也放到 `PATH` 上——MCP server 不用单独装包。
|
|
135
136
|
|
|
136
|
-
> **从 `npm link` 升级过来?** CLI 以前住在 `llama-os/cli/` 目录,靠 `npm link`
|
|
137
|
-
> 分发。从 v1.x 起改名 `@llamaventures/cli` 走 npm。
|
|
138
|
-
> 跑一次 `npm i -g @llamaventures/cli@latest` 就完事;旧目录在 soak 期间
|
|
139
|
-
> 还能用,但已经不是 source of truth。详见
|
|
140
|
-
> [`llama-os/cli/DEPRECATED.md`](https://github.com/SoujiOkita98/llama-os/blob/main/cli/DEPRECATED.md)。
|
|
141
|
-
|
|
142
137
|
---
|
|
143
138
|
|
|
144
139
|
## 认证
|
|
@@ -147,16 +142,29 @@ llama auth status # 会跑一次 /api/me 验证
|
|
|
147
142
|
|
|
148
143
|
| # | 来源 | 发送的 header | 适合谁 |
|
|
149
144
|
|---|------|--------------|--------|
|
|
150
|
-
| 1 | `
|
|
151
|
-
| 2 |
|
|
152
|
-
| 3 |
|
|
153
|
-
| 4 | `~/.llama
|
|
145
|
+
| 1 | `llama auth login`(OAuth 2.1,存 OS Keychain) | `Authorization: Bearer …` | **所有人的推荐方式。** 浏览器一次登录,token 自动刷新、重启不丢 |
|
|
146
|
+
| 2 | `gcloud auth print-identity-token` | `Authorization: Bearer …` | 已经配好 gcloud 的工作机(零配置) |
|
|
147
|
+
| 3 | `$LLAMA_TOKEN` 环境变量 | `X-Llama-Token` | CI runner、云上 sandbox agent |
|
|
148
|
+
| 4 | `~/.llama/token`(mode `0600`) | `X-Llama-Token` | 本地常驻安装(长期 PAT) |
|
|
149
|
+
| 5 | `~/.llama-command/config.json` | `X-Llama-Token` | CLI v0.1 老路径——首次读取自动迁移到 `~/.llama/token` |
|
|
154
150
|
|
|
155
151
|
如果 Bearer 和 X-Llama-Token 同时存在,两个一起发。服务器先验 Bearer,
|
|
156
152
|
失败后回退到 X-Llama-Token。任何时候都可以用 `llama auth status`
|
|
157
153
|
看当前认证身份。
|
|
158
154
|
|
|
159
|
-
###
|
|
155
|
+
### 浏览器登录 —— 推荐
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
llama auth login # 打开浏览器 → Google 登录 → 授权 → 完成
|
|
159
|
+
llama auth status # → activeMethod=oauth,显示身份与 scope
|
|
160
|
+
llama deal search acme-ai # 直接用
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
OAuth 2.1 PKCE 流程,token 存 OS Keychain(macOS Keychain / Windows
|
|
164
|
+
Credential Manager / Linux Secret Service),自动刷新。
|
|
165
|
+
`llama auth logout` 会在服务端吊销并清空本地存储。
|
|
166
|
+
|
|
167
|
+
### gcloud —— 已配好 gcloud 的机器
|
|
160
168
|
|
|
161
169
|
```bash
|
|
162
170
|
gcloud auth login # 一次性,选你的 @llamaventures.vc 账号
|
|
@@ -188,6 +196,34 @@ llama deal search acme-ai # 直接用
|
|
|
188
196
|
|
|
189
197
|
---
|
|
190
198
|
|
|
199
|
+
## 接入你的 AI 系统
|
|
200
|
+
|
|
201
|
+
这个包是 Llama Command 的**官方集成面**。要把自研 agent、编程助手或任何
|
|
202
|
+
LLM 应用接进工作台,请从这里走——**不要直接调 HTTP API**。CLI/MCP 层
|
|
203
|
+
负责认证链、稳定的 `Error[…]` 错误契约、以及服务端 schema 变化时的
|
|
204
|
+
前向兼容([SemVer](#稳定性));裸 API 路由没有这些承诺,随时可能变。
|
|
205
|
+
|
|
206
|
+
五分钟接入路径:
|
|
207
|
+
|
|
208
|
+
1. **拿凭证** —— 团队账号直接 `llama auth login`;无人值守系统请管理员在
|
|
209
|
+
[`/settings/tokens`](https://command.llamaventures.vc/settings/tokens)
|
|
210
|
+
mint 一个 PAT,再用 `llama token set` 或 `$LLAMA_TOKEN` 配置。
|
|
211
|
+
2. **安装** —— `npm i -g @llamaventures/cli`(Node 18+)。
|
|
212
|
+
3. **接线:**
|
|
213
|
+
- **MCP 原生 agent**(Claude、Cursor、任何 stdio 客户端)→ 指向
|
|
214
|
+
`llama-mcp`:58 个类型化工具,无通用 passthrough。
|
|
215
|
+
各客户端配置见 [MCP server](#mcp-server)。
|
|
216
|
+
- **其它形态** → 子进程调用 `llama …`。输出是 agent 友好的纯文本;
|
|
217
|
+
失败带稳定的 `Error[…]` 前缀。
|
|
218
|
+
4. **让 agent 自我入职** —— 会话开始时跑一次 `llama agent-onboard`
|
|
219
|
+
(或取 MCP 的 `agent_briefing` prompt),拿到**服务端下发的 Agent
|
|
220
|
+
Runtime Contract**——最新的工作流规则、署名规范、错误恢复——
|
|
221
|
+
与线上服务器永远同步,README 永远不会成为集成瓶颈。
|
|
222
|
+
5. **验证** —— `llama auth status` 回环确认身份;
|
|
223
|
+
`llama deal search "<随便什么>"` 证明读权限通了。
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
191
227
|
## CLI 速览
|
|
192
228
|
|
|
193
229
|
CLI 是 canonical 接口。底下的 HTTP API 也稳定,但 CLI 帮你处理了认证、错误格式、
|
|
@@ -201,14 +237,12 @@ llama token show
|
|
|
201
237
|
|
|
202
238
|
# Pipeline——读
|
|
203
239
|
llama deal search "acme ai"
|
|
204
|
-
llama deal list --owner alex --status
|
|
205
|
-
llama deal list --source-direction Outbound --status Outreached
|
|
206
|
-
llama deal list --owner alex --status Diligence
|
|
240
|
+
llama deal list --owner alex --status Diligence # 与 search 同一套过滤参数
|
|
207
241
|
llama deal show <dealId>
|
|
242
|
+
llama deal feed <dealId> # 该 deal 的全部贡献,最新在前
|
|
208
243
|
|
|
209
244
|
# Pipeline——写
|
|
210
|
-
llama deal create "Acme AI" --description "..." --source
|
|
211
|
-
llama deal create "Acme AI" --description "..." --source Gavin --source-direction Inbound --status Sourced
|
|
245
|
+
llama deal create "Acme AI" --description "..." --source alex --source-direction Outbound --status Interested
|
|
212
246
|
llama deal update <dealId> status Diligence
|
|
213
247
|
llama deal enrich <dealId> --dry-run
|
|
214
248
|
llama deal enrich <dealId> --apply --executor server_agent
|
|
@@ -218,6 +252,7 @@ llama deal delete <dealId> # 软删除(审计日志记录)
|
|
|
218
252
|
llama deal restore <dealId>
|
|
219
253
|
|
|
220
254
|
# Status 语义
|
|
255
|
+
# Interested = 先记录/关注,还没有 outreach、intro、回复、deck submission 或 meeting。
|
|
221
256
|
# Outreached = 只是联系/记录了,还没有回复或有效关系。
|
|
222
257
|
# Sourced = 已有回复、intro、会议,或其它真实关系信号。
|
|
223
258
|
# sourceDirection 是单独维度:
|
|
@@ -257,8 +292,9 @@ llama mentions
|
|
|
257
292
|
llama mentions resolve <mentionId>
|
|
258
293
|
```
|
|
259
294
|
|
|
260
|
-
跑 `llama --help`
|
|
261
|
-
|
|
295
|
+
跑 `llama --help` 看分组索引,`llama help all` 看完整命令参考——100+ 个命令,
|
|
296
|
+
覆盖 deals、briefs、facts、ownership、timeline、wiki、memo、deal 级 HTML
|
|
297
|
+
artifacts、mentions、skill corrections、evals、admin event feeds。
|
|
262
298
|
所有删除默认软删除——可恢复,且通过 `deal_events` 留下审计痕迹。
|
|
263
299
|
|
|
264
300
|
### 错误码(给 agent 用)
|
|
@@ -372,8 +408,8 @@ claude mcp add llama -- llama-mcp
|
|
|
372
408
|
- **向后兼容:** wire format(Bearer / X-Llama-Token)和 `Error[…]` 前缀
|
|
373
409
|
是公开契约,major 版本内不会变。
|
|
374
410
|
- **服务端 schema 漂移:** 当 API 多了一个端点,下一个 minor 版本会带
|
|
375
|
-
typed wrapper
|
|
376
|
-
|
|
411
|
+
typed wrapper。这个包**故意不提供**裸 API passthrough——如果你需要的
|
|
412
|
+
wrapper 还没落地,开 issue,不要直接调 HTTP API。
|
|
377
413
|
|
|
378
414
|
详见 [`CHANGELOG.md`](CHANGELOG.md)。
|
|
379
415
|
|
package/bin/llama-mcp.mjs
CHANGED
|
@@ -369,7 +369,7 @@ server.registerTool(
|
|
|
369
369
|
.string()
|
|
370
370
|
.optional()
|
|
371
371
|
.describe(
|
|
372
|
-
"exact match on 'Our Stage' (Outreached, Sourced, First Meeting, Diligence, Partner Meeting, Term Sheet, Invested, Passed, Stalled, Future, Unknown). Outreached means contact was logged but no effective relationship/response exists yet."
|
|
372
|
+
"exact match on 'Our Stage' (Interested, Outreached, Sourced, First Meeting, Diligence, Partner Meeting, Term Sheet, Invested, Passed, Stalled, Future, Unknown). Interested means we want to record/track before contact; Outreached means contact was logged but no effective relationship/response exists yet."
|
|
373
373
|
),
|
|
374
374
|
theirStage: z.string().optional().describe("exact match on 'Their Stage'"),
|
|
375
375
|
stage: z
|
|
@@ -434,7 +434,7 @@ server.registerTool(
|
|
|
434
434
|
.string()
|
|
435
435
|
.optional()
|
|
436
436
|
.describe(
|
|
437
|
-
"Our Stage workflow position. Use Outreached when we
|
|
437
|
+
"Our Stage workflow position. Use Interested when we want to record/track before contact; use Outreached when we contacted/logged them and have no response/effective relationship; use Sourced only once there is a response, intro, meeting, or other real relationship signal."
|
|
438
438
|
),
|
|
439
439
|
source: z.string().optional().describe("free-form sourced-by; recommend nominating a user"),
|
|
440
440
|
sourceDirection: z
|
|
@@ -1032,8 +1032,9 @@ server.registerTool(
|
|
|
1032
1032
|
"deal_refresh_persona",
|
|
1033
1033
|
{
|
|
1034
1034
|
description:
|
|
1035
|
-
"Regenerate one persona's analysis section for a deal. persona
|
|
1036
|
-
"
|
|
1035
|
+
"Regenerate one persona's analysis section for a deal. persona = a server-configured " +
|
|
1036
|
+
"persona key (unknown keys are rejected; discover the roster via agent_bootstrap). " +
|
|
1037
|
+
"Returns a runId (or null if debounced).",
|
|
1037
1038
|
inputSchema: {
|
|
1038
1039
|
dealId: z.string(),
|
|
1039
1040
|
persona: z.string(),
|
package/bin/llama.mjs
CHANGED
|
@@ -390,7 +390,7 @@ auto-detects \`gcloud auth print-identity-token\` and uses Bearer auth.
|
|
|
390
390
|
Manually-set \`llc_\` tokens are used as a fallback.
|
|
391
391
|
|
|
392
392
|
Deals:
|
|
393
|
-
llama deal create "Company" --source <name> --source-direction Inbound|Outbound --description "..." --status Outreached|Sourced --website https://...
|
|
393
|
+
llama deal create "Company" --source <name> --source-direction Inbound|Outbound --description "..." --status Interested|Outreached|Sourced --website https://...
|
|
394
394
|
llama deal show <dealId>
|
|
395
395
|
llama deal feed <dealId> # every contribution (facts + notes), human-typed or assistant-drafted, newest first
|
|
396
396
|
llama deal update <dealId> <field> <value>
|
|
@@ -399,7 +399,7 @@ Deals:
|
|
|
399
399
|
roundSize, valuation, deckLink, folderUrl, sector, subsector,
|
|
400
400
|
foundedYear, leadInvestor, investors, agentActive.
|
|
401
401
|
e.g. llama deal update <dealId> website https://acme.ai
|
|
402
|
-
llama deal update <dealId> status
|
|
402
|
+
llama deal update <dealId> status Interested
|
|
403
403
|
llama deal update <dealId> sector "Developer Tools"
|
|
404
404
|
llama deal update <dealId> foundedYear 2024
|
|
405
405
|
llama deal update <dealId> leadInvestor "Acme Capital"
|
|
@@ -413,7 +413,7 @@ Deals:
|
|
|
413
413
|
JSON when possible ('{"a":1}', 'true', '3'), else stored as a
|
|
414
414
|
string. Audited to deal_events as field_change "extra.<key>".
|
|
415
415
|
llama deal extra unset <dealId> <key> # delete the key (admin)
|
|
416
|
-
llama deal search <query> [--founder name] [--owner <user-key>] [--status
|
|
416
|
+
llama deal search <query> [--founder name] [--owner <user-key>] [--status Interested]
|
|
417
417
|
[--theirStage Raising] [--stage Seed] [--source-direction Inbound]
|
|
418
418
|
[--limit 200] [--offset 0]
|
|
419
419
|
llama deal list [--owner ...] [--status ...] [...same flags as search]
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@llamaventures/cli",
|
|
3
|
-
"version": "1.17.
|
|
3
|
+
"version": "1.17.2",
|
|
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",
|
|
8
8
|
"test:agent-routing": "node scripts/verify-agent-routing.mjs",
|
|
9
|
-
"verify:release": "npm test && npm pack --dry-run"
|
|
9
|
+
"verify:release": "npm test && node scripts/verify-tarball-clean.mjs && npm pack --dry-run"
|
|
10
10
|
},
|
|
11
11
|
"bin": {
|
|
12
12
|
"llama": "bin/llama.mjs",
|
|
@@ -14,8 +14,8 @@ const repoRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."
|
|
|
14
14
|
const packageJson = JSON.parse(readFileSync(path.join(repoRoot, "package.json"), "utf8"));
|
|
15
15
|
assert.equal(
|
|
16
16
|
packageJson.scripts?.["verify:release"],
|
|
17
|
-
"npm test && npm pack --dry-run",
|
|
18
|
-
"CLI release gate must run agent routing tests and npm pack dry-run",
|
|
17
|
+
"npm test && node scripts/verify-tarball-clean.mjs && npm pack --dry-run",
|
|
18
|
+
"CLI release gate must run agent routing tests, the publish-surface hygiene scan, and npm pack dry-run",
|
|
19
19
|
);
|
|
20
20
|
assert.equal(
|
|
21
21
|
existsSync(path.join(repoRoot, "docs/agent-skills.bundle.json")),
|
|
@@ -201,13 +201,13 @@ const server = createServer(async (req, res) => {
|
|
|
201
201
|
objectId: "missing-page",
|
|
202
202
|
status: "deleted",
|
|
203
203
|
title: "Missing Page",
|
|
204
|
-
detail: "Deleted by
|
|
204
|
+
detail: "Deleted by Alex Chen",
|
|
205
205
|
url: "https://command.llamaventures.vc/wiki/missing-page",
|
|
206
206
|
},
|
|
207
207
|
lifecycle: [
|
|
208
208
|
{
|
|
209
209
|
action: "deleted",
|
|
210
|
-
actor_label: "
|
|
210
|
+
actor_label: "Alex Chen",
|
|
211
211
|
created_at: "2026-06-15T19:02:00Z",
|
|
212
212
|
reason: "user_deleted",
|
|
213
213
|
},
|
|
@@ -543,7 +543,7 @@ try {
|
|
|
543
543
|
resetCalls();
|
|
544
544
|
const explainRun = await runCli(["explain", "https://command.llamaventures.vc/wiki/missing-page"], baseUrl, homeDir);
|
|
545
545
|
assert.match(explainRun.stdout, /Status: deleted/);
|
|
546
|
-
assert.match(explainRun.stdout, /Deleted by
|
|
546
|
+
assert.match(explainRun.stdout, /Deleted by Alex Chen/);
|
|
547
547
|
assert.deepEqual(paths(), ["GET /api/agent/explain"]);
|
|
548
548
|
assert.equal(businessCalls()[0].query.q, "https://command.llamaventures.vc/wiki/missing-page");
|
|
549
549
|
|