@ours.network/fleet 1.2.0-nightly.53 → 1.2.0-nightly.54
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 +2 -0
- package/dist/agent-ours/bridge.js +10 -3
- package/dist/agent-ours/file-rpc.d.ts +8 -0
- package/dist/agent-ours/file-rpc.js +11 -1
- package/dist/agent-ours/harness.js +47 -3
- package/dist/agent-ours/mcp-endpoint.d.ts +5 -0
- package/dist/agent-ours/mcp-endpoint.js +4 -0
- package/dist/agent-ours/service.d.ts +2 -0
- package/dist/agent-ours/service.js +42 -1
- package/dist/application/conversation-history.d.ts +2 -0
- package/dist/application/conversation-history.js +25 -2
- package/dist/application/supervisor-ours-tools.js +3 -1
- package/dist/build-info.json +4 -4
- package/dist/config.d.ts +9 -0
- package/dist/config.js +13 -2
- package/dist/file-delivery/reader.d.ts +17 -0
- package/dist/file-delivery/reader.js +94 -0
- package/dist/file-delivery/store.d.ts +15 -0
- package/dist/file-delivery/store.js +124 -0
- package/dist/file-delivery/types.d.ts +19 -0
- package/dist/file-delivery/types.js +1 -0
- package/dist/harness/codex-app-server-proxy.js +6 -2
- package/dist/harness/codex-file-inventory.d.ts +15 -0
- package/dist/harness/codex-file-inventory.js +113 -0
- package/dist/harness/codex.js +2 -1
- package/dist/isolation/policy.js +4 -1
- package/dist/runner.js +1 -0
- package/dist/session/acp.d.ts +4 -0
- package/dist/session/acp.js +61 -8
- package/dist/session/conversation-types.d.ts +4 -2
- package/dist/session/types.d.ts +1 -0
- package/dist/web/server.js +24 -0
- package/docs/acp-files.md +102 -0
- package/package.json +4 -3
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# Sending files in an ACP chat
|
|
2
|
+
|
|
3
|
+
An opted-in managed Agent uses the existing Ours `send_file` tool:
|
|
4
|
+
|
|
5
|
+
```json
|
|
6
|
+
{"path":"deliverables/report.pdf"}
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
Omitting `contact` sends to the current ACP chat. Supplying a non-empty contact
|
|
10
|
+
keeps ordinary Ours delivery:
|
|
11
|
+
|
|
12
|
+
```json
|
|
13
|
+
{"contact":"Alice","path":"deliverables/report.pdf"}
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Only an absent contact chooses the chat. Null, empty or whitespace-only contacts,
|
|
17
|
+
unknown fields and unknown recipients fail without falling back to chat. Outside
|
|
18
|
+
opt-in, contact remains required. Current-chat sending accepts `path`, optional
|
|
19
|
+
`filename` and `mime`; inline base64 and Ours reply fields are unsupported.
|
|
20
|
+
|
|
21
|
+
Each call makes one attempt. Failures are returned to the agent. There is no
|
|
22
|
+
request ID, deduplication, automatic retry or recovery of failed sends. If a user
|
|
23
|
+
asks to resend, another tool call makes a new attempt and can produce another
|
|
24
|
+
attachment. UUIDs identify stored attachments; the stored SHA-256 checks integrity.
|
|
25
|
+
Neither is a retry key.
|
|
26
|
+
|
|
27
|
+
Set this on the Agent definition, not manifest defaults or a Brain:
|
|
28
|
+
|
|
29
|
+
```yaml
|
|
30
|
+
file_delivery:
|
|
31
|
+
enabled: true
|
|
32
|
+
directory: deliverables
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
The tool description advertises this directory and the 20 MiB limit to the Agent.
|
|
36
|
+
The directory is a non-hidden subtree of the Agent's working directory. Both
|
|
37
|
+
routes interpret relative paths from that working directory; absolute paths keep
|
|
38
|
+
their usual meaning. Chat sending additionally enforces the export directory.
|
|
39
|
+
The Agent should finish writing the file before calling `send_file`. Symlinks,
|
|
40
|
+
hardlinks, hidden/credential paths, changed files and files over 20 MiB fail.
|
|
41
|
+
|
|
42
|
+
Initial support requires Linux, the managed Ours connector, a stock Codex or
|
|
43
|
+
Claude ACP adapter, and a tracked active turn. Idle, scheduled, steered, cancelled,
|
|
44
|
+
replaced and unsupported sessions cannot export. Existing native tool approval
|
|
45
|
+
and the neutral role permission policy both apply before bytes are read. An
|
|
46
|
+
`ask` decision needs an attached controller; `deny` refuses. A native policy that
|
|
47
|
+
refuses MCP execution (including Codex `never` without a native tool allowance)
|
|
48
|
+
can still refuse before Fleet receives the call.
|
|
49
|
+
|
|
50
|
+
Codex requires native runtime 0.159.0 or newer and Fleet's managed App Server
|
|
51
|
+
proxy. Before each turn, its public exact-thread, paginated MCP inventory must
|
|
52
|
+
show a connected managed `ours` with the expected optional-contact schema.
|
|
53
|
+
Ours aliases, filtered aliases, ambiguous identity, failed discovery and an
|
|
54
|
+
incompatible schema make the turn unavailable. Unrelated identified tools are
|
|
55
|
+
preserved. Explicitly disabled Ours is rejected before replacement. Inherited
|
|
56
|
+
TOML MCP settings, including project/profile sources, are conservatively
|
|
57
|
+
unsupported until their disabling semantics can be qualified before replacement.
|
|
58
|
+
Use a clean Codex configuration home for this initial opt-in.
|
|
59
|
+
|
|
60
|
+
Claude ACP 0.63.0's installed wrapper has no public same-session inventory RPC. Initial
|
|
61
|
+
support therefore requires an operator's explicit restricted MCP configuration:
|
|
62
|
+
|
|
63
|
+
```yaml
|
|
64
|
+
harness_options:
|
|
65
|
+
mcp_servers_only: true
|
|
66
|
+
mcp_servers:
|
|
67
|
+
ours: { command: ours-mcp, args: [proxy] }
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Fleet replaces that connector with its bound bridge. Additional explicit MCP
|
|
71
|
+
servers and custom ACP commands are unsupported for this feature. Default-off
|
|
72
|
+
Agents retain their existing configuration.
|
|
73
|
+
|
|
74
|
+
Successful sends copy complete bytes into private immutable storage and append a
|
|
75
|
+
server-origin `file.attached` event containing the actual session generation,
|
|
76
|
+
ACP session and managed turn. One export can run at a time. Cancellation or
|
|
77
|
+
steering before publication revokes it; cancellation after publication does not
|
|
78
|
+
undo it. Unpublished stored bytes are never replayed or republished. Storage is
|
|
79
|
+
bounded to 100 files and 200 MiB per role incarnation, including incomplete and
|
|
80
|
+
orphaned copies. Exhausted storage fails; no automatic recovery is performed.
|
|
81
|
+
|
|
82
|
+
The App renders persisted file cards from these typed events. HTML and images
|
|
83
|
+
also download as files. Downloads require authentication, the matching role
|
|
84
|
+
incarnation, a published conversation event and intact bytes. Deleted, missing,
|
|
85
|
+
changed or orphaned artifacts return unavailable. Remote workspaces fetch bytes
|
|
86
|
+
using their existing device credential, limit the read to 20 MiB and prevent
|
|
87
|
+
saving after a workspace change.
|
|
88
|
+
|
|
89
|
+
## Release prerequisite and qualification
|
|
90
|
+
|
|
91
|
+
This source requires the companion MCP implementation's
|
|
92
|
+
`MANAGED_FILE_DELIVERY_VERSION = 1`. Fleet pins published
|
|
93
|
+
`@ours.network/mcp@1.2.0-nightly.13`, which includes it. Older MCP packages without
|
|
94
|
+
this capability fail closed when file delivery is enabled. Changes to the MCP
|
|
95
|
+
pin require clean installed-package qualification without a built MCP overlay.
|
|
96
|
+
|
|
97
|
+
The deterministic native fixture uses real ACP adapters, the real managed
|
|
98
|
+
connector and an isolated daemon. A local scripted provider supplies only tool
|
|
99
|
+
intents; approval, read, copy, publication and bytes come from the implementation.
|
|
100
|
+
It does not qualify external-model inference, deployment or arbitrary native
|
|
101
|
+
MCP request-to-ACP tool-call ID mapping. Correlation is the authenticated bridge
|
|
102
|
+
and the actual active Fleet turn, which is revoked by cancellation/steering.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ours.network/fleet",
|
|
3
|
-
"version": "1.2.0-nightly.
|
|
3
|
+
"version": "1.2.0-nightly.54",
|
|
4
4
|
"description": "Harness-agnostic fleet of persistent, identity-bound AI agents. Declarative fleet.yaml, managed native/ACP sessions, supervision, and ours.network messaging.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "FSL-1.1-Apache-2.0",
|
|
@@ -22,7 +22,8 @@
|
|
|
22
22
|
"docs/live-voice.md",
|
|
23
23
|
"docs/room-layouts.md",
|
|
24
24
|
"docs/validation/managed-cli-permissions.md",
|
|
25
|
-
"LICENSE"
|
|
25
|
+
"LICENSE",
|
|
26
|
+
"docs/acp-files.md"
|
|
26
27
|
],
|
|
27
28
|
"engines": {
|
|
28
29
|
"node": ">=22.13.0"
|
|
@@ -43,7 +44,7 @@
|
|
|
43
44
|
"@agentclientprotocol/sdk": "^1.3.0",
|
|
44
45
|
"@fastify/websocket": "^11.2.0",
|
|
45
46
|
"@ours.network/cli": "2.8.1-nightly.15",
|
|
46
|
-
"@ours.network/mcp": "1.2.0-nightly.
|
|
47
|
+
"@ours.network/mcp": "1.2.0-nightly.13",
|
|
47
48
|
"@ours.network/sdk": "3.8.1-nightly.17",
|
|
48
49
|
"commander": "^12.1.0",
|
|
49
50
|
"fastify": "^5.4.0",
|