@llamaventures/cli 2.5.0 → 2.5.1

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 CHANGED
@@ -219,8 +219,25 @@ language is invalid. New scalar Page prose is also invalid; historical scalar
219
219
  prose is read-compatible only. Information and raw Input retain their original
220
220
  language and provenance; do not manufacture a second source quote.
221
221
 
222
- Artifacts use `artifact.put`. Treat them as immutable source material. Read the
223
- artifact, then decide whether its content deserves Information or a Page patch.
222
+ Artifacts use `artifact.put`. Read the Deal files first. To revise an existing
223
+ file, reuse its `artifactId` and send the complete revised file, preserving
224
+ applicable metadata; this adds an immutable version even when the title changes.
225
+ `page.patch` does not edit file bytes. Omit the ID for a new document without a
226
+ title collision; use a fresh UUID explicitly for a distinct same-name source.
227
+ On `409 OCCAM_CONFLICT`, read the candidate documents and select an existing ID
228
+ or intentionally create a distinct source. Do not treat a title as identity or
229
+ rename a file to bypass the check. Ask only when the intended target remains
230
+ unclear after reading. Verify the returned ID and version; preserve old links.
231
+ Reuse the reference when file and metadata are unchanged. Separately decide
232
+ whether its content supports Information or a Page update.
233
+
234
+ Send complete bytes and the actual MIME type through `artifact.put`. Core hosts
235
+ `text/html` in Command; never mirror it to Drive or require a Drive link for
236
+ success. Other source files, including original transcripts and recordings, go
237
+ to the Deal's Drive folder; the database retains metadata and references. Do
238
+ not duplicate source-file bodies in Input, Information, Page or metadata. Save
239
+ extracted facts and summaries with source references, preserve the user's
240
+ request, and verify the exact Artifact version and hash through Command.
224
241
 
225
242
  ## Verification and safety
226
243
 
package/CHANGELOG.md CHANGED
@@ -6,6 +6,18 @@ this project adheres to [Semantic Versioning](https://semver.org).
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [2.5.1] - 2026-09-28
10
+
11
+ ### Fixed
12
+
13
+ - Align CLI help and MCP guidance with Core storage routing: HTML is hosted in Command; non-HTML source files, including transcripts and recordings, live in Drive. Verify exact versions without requiring a Drive link for HTML.
14
+
15
+ ### Changed
16
+
17
+ - Clarify when to append a version to an existing artifact versus create a distinct source, preserving document identity and old links.
18
+
19
+ ## [2.5.0] - 2026-09-10
20
+
9
21
  ### Added
10
22
 
11
23
  - Submit user/agent UX friction with `llama feedback submit` and MCP `feedback_submit`; read your receipt and resolution with `feedback show` / `feedback_show`.
package/README.md CHANGED
@@ -84,7 +84,15 @@ the initial Live Page and Information, and appends Events atomically.
84
84
  - `input.submit` — preserve raw input in the Event Feed.
85
85
  - `information.put` — add or update one structured memory unit.
86
86
  - `page.patch` — update the human-visible Live Deal Page.
87
- - `artifact.put` — add an immutable memo/HTML/source artifact.
87
+ - `artifact.put` — create a file or append an immutable version by reusing its `artifactId`.
88
+
89
+ Read Deal files before uploading revisions. Reuse the existing `artifactId`
90
+ even when renaming; send complete revised bytes and preserve applicable metadata.
91
+ Omitting the ID creates a new file only when no current same-kind/title candidate
92
+ exists. On `409 OCCAM_CONFLICT`, read the candidates and select the intended ID;
93
+ for a genuinely distinct same-name source, explicitly supply a fresh UUID.
94
+ Titles are not document identities. `page.patch` does not edit file bytes.
95
+ Verify the intended ID/version and preserve old source links.
88
96
 
89
97
  When Page prose is human-visible, write one bilingual field value as
90
98
  `{"en":"natural English","zh":"自然中文"}`. The Web language switch selects
package/README.zh-CN.md CHANGED
@@ -82,7 +82,13 @@ Core 会补上 `operation: deal.create`,创建或复用 Drive 文件夹,并
82
82
  - `input.submit`:把完整原始输入保存在 Event Feed;
83
83
  - `information.put`:写入一个结构化工作记忆单元;
84
84
  - `page.patch`:更新人类直接看到的 Live Deal Page;
85
- - `artifact.put`:添加不可变的 memo、HTML 或源文件。
85
+ - `artifact.put`:创建文件,或复用 `artifactId` 为已有文件追加不可变版本。
86
+
87
+ 修改文件前先读项目的文件列表;即使改名,也复用原来的 `artifactId`,
88
+ 上传完整的新文件并保留适用的 metadata。省略 ID 时,只有不存在当前同类型、
89
+ 同标题文件才会新建。遇到 `409 OCCAM_CONFLICT`,读取候选内容来确定目标 ID;
90
+ 确实是另一份同名材料时,明确生成新的 UUID 作为 `artifactId`。
91
+ 标题不是文件身份,`page.patch` 也不修改文件内容。回读核对 ID 和版本,保留旧链接。
86
92
 
87
93
  给人看的 Page 文字必须在写入时同时提供自然的中英文:
88
94
  `{"en":"natural English","zh":"自然中文"}`。Web 的语言开关从同一个
package/bin/llama-mcp.mjs CHANGED
@@ -113,7 +113,7 @@ const writeDealCommandSchema = z.discriminatedUnion("operation", [
113
113
  z.object({
114
114
  operation: z.literal("artifact.put"),
115
115
  dealId: z.string().uuid(),
116
- artifactId: z.string().uuid().optional(),
116
+ artifactId: z.string().uuid().optional().describe("Reuse the existing ID to append a complete file version, including on rename. Omit for a new document without a title collision, or explicitly use a fresh UUID for a distinct same-name source."),
117
117
  kind: z.string().min(1).max(120),
118
118
  title: z.string().min(1).max(500),
119
119
  mimeType: z.string().min(1).max(240),
@@ -189,7 +189,7 @@ server.registerTool(
189
189
  server.registerTool(
190
190
  "write_deal",
191
191
  {
192
- description: "The only Deal mutation tool. Pass one command: input.submit, information.put, page.patch, or artifact.put. All Page content fields are Agent-writable; author controls attribution, not permission. Before page.patch, use get_live_deal_page_schema for the exact fields being changed and write bilingual Page prose. page.patch is JSON Merge Patch: arrays replace whole arrays, so read-modify-write and preserve sibling slots. A Llama user's own judgment is human_subjective_view.people or human_subjective_view.business and must carry value.speaker, value.rawText quoted verbatim from origin.originalUserUtterance, and value.summary (the agent's restatement); it is rejected otherwise.",
192
+ description: "The only Deal mutation tool. Pass one command: input.submit, information.put, page.patch, or artifact.put. Before artifact.put, read Deal files: reuse artifactId for a revision; a same-kind/title collision without an ID returns OCCAM_CONFLICT. Titles are candidates, not identity. Select the intended existing ID from the request/content, or explicitly generate a fresh UUID for a distinct same-name source. Send complete revised bytes, preserve applicable metadata, and verify the ID/version. Core hosts text/html in Command; do not mirror HTML to Drive or require a Drive link. Non-HTML source files, including original transcripts and recordings, go to Drive through artifact.put. Keep source-file bodies out of Input, Information, Page and metadata; save extracted facts and summaries with source references and preserve the user request. page.patch does not edit file bytes. All Page content fields are Agent-writable; author controls attribution, not permission. Before page.patch, use get_live_deal_page_schema for the exact fields being changed and write bilingual Page prose. page.patch is JSON Merge Patch: arrays replace whole arrays, so read-modify-write and preserve sibling slots. A Llama user's own judgment is human_subjective_view.people or human_subjective_view.business and must carry value.speaker, value.rawText quoted verbatim from origin.originalUserUtterance, and value.summary (the agent's restatement); it is rejected otherwise.",
193
193
  // MCP SDK 1.30 only publishes object schemas at the tool root. Nesting one
194
194
  // command preserves the real discriminated union instead of flattening four
195
195
  // incompatible operations into false affordances.
package/bin/llama.mjs CHANGED
@@ -122,11 +122,29 @@ write JSON (CLI derives idempotencyKey when omitted):
122
122
  page.patch: {"operation":"page.patch","dealId":"<uuid>","patch":{"description":{"en":"...","zh":"..."}},"origin":{"kind":"agent"}}
123
123
  artifact.put: {"operation":"artifact.put","dealId":"<uuid>","kind":"deck","title":"deck.pdf","mimeType":"application/pdf","contentBase64":"<file bytes, base64>","origin":{"kind":"user","originalUserUtterance":"..."}}
124
124
 
125
- artifact.put sends the bytes as contentBase64; Core stores them in the Deal's
126
- own Drive folder and derives byteSize and sha256 itself. Do not supply a
127
- folder, storage key or URL for a file you hold. Write the JSON to a file and
128
- pass its path. Only an artifact that already lives elsewhere is referenced
129
- with storageKey (+ optional storageUrl) plus byteSize and sha256 instead.
125
+ Before artifact.put, read the Deal files and distinguish a revision from a new source.
126
+ To revise a document, reuse its artifactId and send the complete new file, even
127
+ if its title changes. This appends a version; page.patch does not edit files.
128
+ For a new document, omit artifactId. A current same-kind/title collision returns
129
+ 409 OCCAM_CONFLICT: read the candidate files and choose the intended existing ID,
130
+ or supply a fresh UUID as artifactId for a genuinely distinct same-name source.
131
+ A title is only a candidate, not identity. Do not rename just to bypass a conflict.
132
+ Preserve applicable metadata and old links. Verify the same artifactId and an
133
+ increased version (or idempotent replay). Reuse an unchanged file's reference.
134
+
135
+ Revision example:
136
+ {"operation":"artifact.put","dealId":"<uuid>","artifactId":"<existing artifact uuid>","kind":"memo","title":"Memo.html","mimeType":"text/html","contentBase64":"<complete revised file, base64>","origin":{"kind":"user","originalUserUtterance":"Revise the memo"}}
137
+
138
+ artifact.put sends complete bytes as contentBase64 with the actual mimeType.
139
+ Core hosts text/html in Command; do not upload or mirror HTML to Drive.
140
+ Non-HTML files, including original transcripts and recordings, go to the Deal's
141
+ Drive folder; the database keeps metadata and references, not the file bytes.
142
+ Do not copy source-file contents into input.submit, Information, Page or metadata.
143
+ Extract facts and summaries with source references; preserve the user's request.
144
+ Core derives byteSize and sha256. Do not supply a folder, storage key or URL for
145
+ a file you hold. Write the JSON to a file and pass its path. Existing non-HTML
146
+ Drive files may use storageKey and storageUrl plus byteSize and sha256 instead.
147
+ Verify the exact Artifact version and hash; hosted HTML needs no Drive link.
130
148
 
131
149
  For Information, origin records who caused the write and preserves user words;
132
150
  value.source records where the evidence came from.
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "format": "llama.cli-build.v1",
3
3
  "packageName": "@llamaventures/cli",
4
- "packageVersion": "2.5.0",
5
- "sourceSha": "2f1d1c40ee4a970fb8c028428aa25c2976222486",
4
+ "packageVersion": "2.5.1",
5
+ "sourceSha": "217090ff9e72abff0a7b9b220016f5638b3d925f",
6
6
  "sourceKind": "github",
7
7
  "sourceDirty": false,
8
8
  "coreApiContract": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@llamaventures/cli",
3
- "version": "2.5.0",
3
+ "version": "2.5.1",
4
4
  "description": "CLI + MCP server for the Llama Ventures investment workbench (command.llamaventures.vc).",
5
5
  "type": "module",
6
6
  "scripts": {