@companion-ai/feynman 0.5.61 → 0.5.62
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/RELEASES.md +12 -0
- package/package.json +7 -7
- package/prompts/deepresearch.md +4 -4
- package/prompts/summarize.md +2 -2
package/RELEASES.md
CHANGED
|
@@ -6,6 +6,18 @@ GitHub release notes are generated from the matching `## vX.Y.Z` section in this
|
|
|
6
6
|
|
|
7
7
|
## Unreleased
|
|
8
8
|
|
|
9
|
+
## v0.5.62 - 2026-11-03
|
|
10
|
+
|
|
11
|
+
- Parallel researcher subagents in `/deepresearch`, `/lit` and `/summarize` no longer fail with `args.tasks[0] contains unsupported fields: output`. The workflow examples in the prompts and docs no longer put an `output` field on each item; each task names its output path instead.
|
|
12
|
+
- **Pi 1.5.0.**
|
|
13
|
+
- Security: Pi now ships `undici` 8.12.3 and `minimatch` 11.0.3, so the `undici` advisories on Pi 1.4.0's pinned 8.10.2 copy and the `minimatch` advisory ([GHSA-g3hv-75wg-m249](https://github.com/advisories/GHSA-g3hv-75wg-m249)) on its 10.2.6 copy are gone. Feynman's release audit has no exceptions again.
|
|
14
|
+
- Long streamed tool calls and code-heavy answers use much less CPU: arguments are parsed once per delta, and highlighting and rendered Markdown are reused instead of redone on every update.
|
|
15
|
+
- Tool arguments are validated with Pi's new schema library. A single value where a list is expected (for example one paper section) is now wrapped into a list instead of being rejected, and validation errors read `- paper: missing`.
|
|
16
|
+
- Claude sessions no longer fail with `role 'system' must precede an 'assistant' message` after an empty or reasoning-only reply.
|
|
17
|
+
- Failed session writes no longer leave resumed sessions missing earlier history.
|
|
18
|
+
- `pi.exec()` no longer crashes on very large command output or hangs on commands that ignore SIGTERM.
|
|
19
|
+
- GPT-6.1 Terra is available through OpenAI, Azure OpenAI and OpenAI Codex; with only an OpenAI key, Feynman now recommends `openai/gpt-6.1-terra`.
|
|
20
|
+
|
|
9
21
|
## v0.5.61 - 2026-10-30
|
|
10
22
|
|
|
11
23
|
- **`feynman mcp` adds MCP servers.** Pi has built-in MCP support, but its docs say `pi mcp add`, and `feynman mcp list` used to be sent to the model as a chat question. `feynman mcp add|list|remove` now runs Pi's own command with Feynman's settings, saves servers in `~/.feynman/agent/mcp.json`, and every session loads them. For example, to use your Zotero library with [zotero-mcp](https://github.com/54yyyu/zotero-mcp): `feynman mcp add zotero --env ZOTERO_LOCAL=true -- zotero-mcp`. Pi's own output and help still say `pi mcp`; use `feynman mcp` instead.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@companion-ai/feynman",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.62",
|
|
4
4
|
"description": "The open source AI research agent.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -79,9 +79,9 @@
|
|
|
79
79
|
"dependencies": {
|
|
80
80
|
"@clack/prompts": "^1.8.1",
|
|
81
81
|
"@companion-ai/alpha-hub": "0.1.7",
|
|
82
|
-
"@earendil-works/pi-codemode": "1.
|
|
83
|
-
"@earendil-works/pi-mcp": "1.
|
|
84
|
-
"@earendil-works/pi-telemetry": "1.
|
|
82
|
+
"@earendil-works/pi-codemode": "1.5.0",
|
|
83
|
+
"@earendil-works/pi-mcp": "1.5.0",
|
|
84
|
+
"@earendil-works/pi-telemetry": "1.5.0",
|
|
85
85
|
"fast-xml-parser": "5.11.2",
|
|
86
86
|
"pi-btw": "0.8.0",
|
|
87
87
|
"pi-docparser": "4.0.0",
|
|
@@ -91,9 +91,9 @@
|
|
|
91
91
|
"undici": "^8.12.3"
|
|
92
92
|
},
|
|
93
93
|
"peerDependencies": {
|
|
94
|
-
"@earendil-works/pi-agent-core": "1.
|
|
95
|
-
"@earendil-works/pi-ai": "1.
|
|
96
|
-
"@earendil-works/pi-coding-agent": "1.
|
|
94
|
+
"@earendil-works/pi-agent-core": "1.5.0",
|
|
95
|
+
"@earendil-works/pi-ai": "1.5.0",
|
|
96
|
+
"@earendil-works/pi-coding-agent": "1.5.0",
|
|
97
97
|
"@earendil-works/pi-tui": "*",
|
|
98
98
|
"typebox": "*"
|
|
99
99
|
},
|
package/prompts/deepresearch.md
CHANGED
|
@@ -64,7 +64,7 @@ If subagents were chosen:
|
|
|
64
64
|
- Keep `subagent` tool-call JSON small and valid.
|
|
65
65
|
- Do not place multi-paragraph instructions inside the `subagent` JSON.
|
|
66
66
|
- Use only supported `subagent` keys. Do not add extra keys such as `artifacts` unless the tool schema explicitly exposes them.
|
|
67
|
-
- For parallel evidence gathering, write a workflow script that returns `await runs.all(...)` to `outputs/.plans/<slug>-workflow.js` with the write tool. After the write succeeds, in a later tool call (not in parallel with the write), call `subagent` with `workflow: "./outputs/.plans/<slug>-workflow.js"`, `async: true`, and `globalConcurrencyLimit: 4`. Each item needs a unique stable `key`, plus its agent
|
|
67
|
+
- For parallel evidence gathering, write a workflow script that returns `await runs.all(...)` to `outputs/.plans/<slug>-workflow.js` with the write tool. After the write succeeds, in a later tool call (not in parallel with the write), call `subagent` with `workflow: "./outputs/.plans/<slug>-workflow.js"`, `async: true`, and `globalConcurrencyLimit: 4`. Each item needs a unique stable `key`, plus its `agent` and a short `task` that names the output path; items take no `output` field. Do not pass the script text inside the tool call.
|
|
68
68
|
- Read the ordered result array and record each child's `ok`, error, and returned output/artifact paths. Ordinary child failures are collected by `runs.all`; validation or infrastructure failure can still fail the workflow. Do not assume every output exists.
|
|
69
69
|
- Prefer broad guidance such as "use paper search and web search"; if a PDF parser or paper fetch fails, the researcher must continue from metadata, abstracts, and web sources and mark PDF parsing as blocked.
|
|
70
70
|
|
|
@@ -72,8 +72,8 @@ Example shape: `outputs/.plans/<slug>-workflow.js` contains
|
|
|
72
72
|
|
|
73
73
|
```js
|
|
74
74
|
return await runs.all([
|
|
75
|
-
{ key: "web", agent: "researcher", task: "Read outputs/.plans/<slug>-T1.md and write outputs/.drafts/<slug>-research-web.md."
|
|
76
|
-
{ key: "papers", agent: "researcher", task: "Read outputs/.plans/<slug>-T2.md and write outputs/.drafts/<slug>-research-papers.md."
|
|
75
|
+
{ key: "web", agent: "researcher", task: "Read outputs/.plans/<slug>-T1.md and write outputs/.drafts/<slug>-research-web.md." },
|
|
76
|
+
{ key: "papers", agent: "researcher", task: "Read outputs/.plans/<slug>-T2.md and write outputs/.drafts/<slug>-research-papers.md." },
|
|
77
77
|
]);
|
|
78
78
|
```
|
|
79
79
|
|
|
@@ -83,7 +83,7 @@ and the `subagent` call is:
|
|
|
83
83
|
{ "workflow": "./outputs/.plans/<slug>-workflow.js", "async": true, "globalConcurrencyLimit": 4 }
|
|
84
84
|
```
|
|
85
85
|
|
|
86
|
-
Continue independent work after launch, then consume completion results before synthesis. Relative output paths resolve against the workspace, so each child writes its
|
|
86
|
+
Continue independent work after launch, then consume completion results before synthesis. Relative output paths resolve against the workspace, so each child writes the path named in its task; verify each file on disk, and use the returned output reference for any that is missing. After evidence gathering, update the plan ledger and verification log. If research failed, record exactly what failed and proceed with a blocked or partial draft.
|
|
87
87
|
|
|
88
88
|
## Step 4: Draft
|
|
89
89
|
|
package/prompts/summarize.md
CHANGED
|
@@ -116,11 +116,11 @@ Briefly summarize: "Source is ~<chars> chars -> <N> chunks -> <N> researcher sub
|
|
|
116
116
|
|
|
117
117
|
### 3c. Dispatch researcher subagents
|
|
118
118
|
|
|
119
|
-
Use one async workflow with a stable key for each chunk and a concurrency limit of four: write the script to `outputs/.plans/<slug>-workflow.js` with the write tool, then, after the write succeeds, in a later tool call, call `subagent` with `{ "workflow": "./outputs/.plans/<slug>-workflow.js", "async": true, "globalConcurrencyLimit": 4 }`. Expand the example item below for the actual chunk inventory; retain the single-source restriction and
|
|
119
|
+
Use one async workflow with a stable key for each chunk and a concurrency limit of four: write the script to `outputs/.plans/<slug>-workflow.js` with the write tool, then, after the write succeeds, in a later tool call, call `subagent` with `{ "workflow": "./outputs/.plans/<slug>-workflow.js", "async": true, "globalConcurrencyLimit": 4 }`. Expand the example item below for the actual chunk inventory; retain the single-source restriction and name the output path inside every child's task; items take no `output` field.
|
|
120
120
|
|
|
121
121
|
```js
|
|
122
122
|
return await runs.all([
|
|
123
|
-
{ key: "chunk-NNN", agent: "researcher", task: "Read ONLY outputs/.notes/<slug>-chunk-NNN.txt. Extract: (1) key claims, (2) methodology or technical approach, (3) cited evidence. Do NOT use web_search or fetch external URLs — this is single-source summarization. If a claim appears to start or end mid-sentence at the file boundary, mark it BOUNDARY PARTIAL. Write to outputs/.notes/<slug>-summary-chunk-NNN.md."
|
|
123
|
+
{ key: "chunk-NNN", agent: "researcher", task: "Read ONLY outputs/.notes/<slug>-chunk-NNN.txt. Extract: (1) key claims, (2) methodology or technical approach, (3) cited evidence. Do NOT use web_search or fetch external URLs — this is single-source summarization. If a claim appears to start or end mid-sentence at the file boundary, mark it BOUNDARY PARTIAL. Write to outputs/.notes/<slug>-summary-chunk-NNN.md." },
|
|
124
124
|
]);
|
|
125
125
|
```
|
|
126
126
|
|