agents-can-communicate 0.1.17 → 0.2.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/README.md +76 -138
- package/SECURITY.md +31 -0
- package/bin/acc-hook.mjs +96 -12
- package/bin/acc-mcp.mjs +6 -2
- package/bin/acc.mjs +6 -1
- package/docs/ADAPTER_AUTHORING.md +172 -0
- package/docs/ARCHITECTURE.md +131 -0
- package/docs/CAPABILITIES.md +105 -197
- package/docs/CLI.md +157 -0
- package/docs/CONCEPTS.md +134 -0
- package/docs/CONFIGURATION.md +143 -0
- package/docs/DESIGN_DECISIONS.md +89 -0
- package/docs/GETTING_STARTED.md +145 -0
- package/docs/GLOSSARY.md +26 -0
- package/docs/MCP.md +94 -0
- package/docs/PROTOCOL.md +200 -0
- package/docs/RELEASING.md +109 -0
- package/docs/SECURITY_MODEL.md +131 -0
- package/docs/TROUBLESHOOTING.md +102 -0
- package/docs/WHY_ACC.md +61 -0
- package/docs/index.md +42 -0
- package/node_modules/@agents-can-communicate/adapter-claude-code/certification.json +78 -0
- package/node_modules/@agents-can-communicate/adapter-claude-code/fixtures/PreToolUse-Edit.json +19 -0
- package/node_modules/@agents-can-communicate/adapter-claude-code/fixtures/PreToolUse.json +17 -0
- package/node_modules/@agents-can-communicate/adapter-claude-code/fixtures/SessionEnd.json +8 -0
- package/node_modules/@agents-can-communicate/adapter-claude-code/fixtures/SessionStart.json +7 -0
- package/node_modules/@agents-can-communicate/adapter-claude-code/fixtures/UserPromptSubmit.json +9 -0
- package/node_modules/@agents-can-communicate/adapter-claude-code/fixtures/certification-provenance.json +77 -0
- package/node_modules/@agents-can-communicate/adapter-claude-code/fixtures/delivery/claude-code-2.1.252.json +19 -0
- package/node_modules/@agents-can-communicate/adapter-claude-code/package.json +9 -1
- package/node_modules/@agents-can-communicate/adapter-claude-code/plugin/skills/acc/SKILL.md +80 -160
- package/node_modules/@agents-can-communicate/adapter-claude-code/src/adapter.mjs +15 -5
- package/node_modules/@agents-can-communicate/adapter-codex/certification.json +117 -0
- package/node_modules/@agents-can-communicate/adapter-codex/fixtures/PreToolUse.json +14 -0
- package/node_modules/@agents-can-communicate/adapter-codex/fixtures/SessionEnd.json +7 -0
- package/node_modules/@agents-can-communicate/adapter-codex/fixtures/SessionStart.json +9 -0
- package/node_modules/@agents-can-communicate/adapter-codex/fixtures/UserPromptSubmit.json +10 -0
- package/node_modules/@agents-can-communicate/adapter-codex/fixtures/certification-provenance.json +66 -0
- package/node_modules/@agents-can-communicate/adapter-codex/fixtures/delivery/codex-cli-0.152.0.json +19 -0
- package/node_modules/@agents-can-communicate/adapter-codex/package.json +8 -1
- package/node_modules/@agents-can-communicate/adapter-codex/plugin/.codex-plugin/plugin.json +1 -1
- package/node_modules/@agents-can-communicate/adapter-codex/plugin/skills/acc/SKILL.md +80 -160
- package/node_modules/@agents-can-communicate/adapter-codex/src/adapter.mjs +21 -12
- package/node_modules/@agents-can-communicate/adapter-gemini-cli/certification.json +52 -0
- package/node_modules/@agents-can-communicate/adapter-gemini-cli/extension/gemini-extension.json +1 -1
- package/node_modules/@agents-can-communicate/adapter-gemini-cli/extension/skills/acc/SKILL.md +80 -160
- package/node_modules/@agents-can-communicate/adapter-gemini-cli/fixtures/BeforeAgent.json +8 -0
- package/node_modules/@agents-can-communicate/adapter-gemini-cli/fixtures/BeforeTool-shell.json +12 -0
- package/node_modules/@agents-can-communicate/adapter-gemini-cli/fixtures/BeforeTool.json +12 -0
- package/node_modules/@agents-can-communicate/adapter-gemini-cli/fixtures/SessionEnd.json +8 -0
- package/node_modules/@agents-can-communicate/adapter-gemini-cli/fixtures/SessionStart.json +8 -0
- package/node_modules/@agents-can-communicate/adapter-gemini-cli/fixtures/certification-provenance.json +66 -0
- package/node_modules/@agents-can-communicate/adapter-gemini-cli/package.json +8 -1
- package/node_modules/@agents-can-communicate/adapter-gemini-cli/src/adapter.mjs +10 -4
- package/node_modules/@agents-can-communicate/adapter-gemini-cli/src/install.mjs +4 -2
- package/node_modules/@agents-can-communicate/adapter-grok/certification.json +3 -0
- package/node_modules/@agents-can-communicate/adapter-grok/package.json +14 -0
- package/node_modules/@agents-can-communicate/adapter-grok/plugin/hooks/hooks.json +61 -0
- package/node_modules/@agents-can-communicate/adapter-grok/plugin/skills/acc/SKILL.md +152 -0
- package/node_modules/@agents-can-communicate/adapter-grok/src/adapter.mjs +61 -0
- package/node_modules/@agents-can-communicate/adapter-grok/src/hooks.mjs +127 -0
- package/node_modules/@agents-can-communicate/adapter-grok/src/install.mjs +101 -0
- package/node_modules/@agents-can-communicate/adapter-kimi/certification.json +52 -0
- package/node_modules/@agents-can-communicate/adapter-kimi/fixtures/PreToolUse-Bash.json +12 -0
- package/node_modules/@agents-can-communicate/adapter-kimi/fixtures/PreToolUse-Write.json +12 -0
- package/node_modules/@agents-can-communicate/adapter-kimi/fixtures/SessionHeartbeat.json +7 -0
- package/node_modules/@agents-can-communicate/adapter-kimi/fixtures/SessionStart.json +9 -0
- package/node_modules/@agents-can-communicate/adapter-kimi/fixtures/UserPromptSubmit.json +8 -0
- package/node_modules/@agents-can-communicate/adapter-kimi/fixtures/certification-provenance.json +66 -0
- package/node_modules/@agents-can-communicate/adapter-kimi/package.json +8 -1
- package/node_modules/@agents-can-communicate/adapter-kimi/plugin/skills/acc/SKILL.md +80 -160
- package/node_modules/@agents-can-communicate/adapter-kimi/src/adapter.mjs +10 -4
- package/node_modules/@agents-can-communicate/adapter-sdk/package.json +1 -1
- package/node_modules/@agents-can-communicate/adapter-sdk/src/capabilities.mjs +34 -18
- package/node_modules/@agents-can-communicate/adapter-sdk/src/certification.mjs +158 -0
- package/node_modules/@agents-can-communicate/adapter-sdk/src/context-projector.mjs +139 -224
- package/node_modules/@agents-can-communicate/adapter-sdk/src/hook-shim.mjs +7 -1
- package/node_modules/@agents-can-communicate/adapter-sdk/src/index.mjs +2 -1
- package/node_modules/@agents-can-communicate/adapter-sdk/src/session-binding.mjs +13 -4
- package/node_modules/@agents-can-communicate/cli/package.json +1 -1
- package/node_modules/@agents-can-communicate/cli/src/args.mjs +13 -29
- package/node_modules/@agents-can-communicate/cli/src/doctor-command.mjs +3 -0
- package/node_modules/@agents-can-communicate/cli/src/help.mjs +5 -6
- package/node_modules/@agents-can-communicate/cli/src/install-command.mjs +12 -3
- package/node_modules/@agents-can-communicate/cli/src/main.mjs +109 -109
- package/node_modules/@agents-can-communicate/cli/src/session-owner.mjs +1 -1
- package/node_modules/@agents-can-communicate/core/package.json +1 -1
- package/node_modules/@agents-can-communicate/core/src/attention.mjs +106 -0
- package/node_modules/@agents-can-communicate/core/src/conversations.mjs +276 -0
- package/node_modules/@agents-can-communicate/core/src/delivery-bindings.mjs +81 -0
- package/node_modules/@agents-can-communicate/core/src/finish-retries.mjs +97 -0
- package/node_modules/@agents-can-communicate/core/src/inbox.mjs +118 -0
- package/node_modules/@agents-can-communicate/core/src/index.mjs +3 -2
- package/node_modules/@agents-can-communicate/core/src/intents.mjs +0 -1
- package/node_modules/@agents-can-communicate/core/src/ports.mjs +3 -2
- package/node_modules/@agents-can-communicate/core/src/receipts.mjs +109 -0
- package/node_modules/@agents-can-communicate/core/src/service.mjs +14 -10
- package/node_modules/@agents-can-communicate/core/src/sessions.mjs +70 -20
- package/node_modules/@agents-can-communicate/core/src/status.mjs +11 -9
- package/node_modules/@agents-can-communicate/core/src/sync.mjs +3 -258
- package/node_modules/@agents-can-communicate/delivery-router/package.json +12 -0
- package/node_modules/@agents-can-communicate/delivery-router/src/index.mjs +1 -0
- package/node_modules/@agents-can-communicate/delivery-router/src/router.mjs +117 -0
- package/node_modules/@agents-can-communicate/hook-runner/package.json +1 -1
- package/node_modules/@agents-can-communicate/hook-runner/src/client-version.mjs +20 -0
- package/node_modules/@agents-can-communicate/hook-runner/src/runner.mjs +156 -60
- package/node_modules/@agents-can-communicate/installer/package.json +1 -1
- package/node_modules/@agents-can-communicate/installer/src/apply.mjs +23 -7
- package/node_modules/@agents-can-communicate/installer/src/detect.mjs +20 -5
- package/node_modules/@agents-can-communicate/installer/src/index.mjs +3 -2
- package/node_modules/@agents-can-communicate/installer/src/ownership.mjs +108 -12
- package/node_modules/@agents-can-communicate/installer/src/plan.mjs +19 -2
- package/node_modules/@agents-can-communicate/mcp-server/package.json +1 -1
- package/node_modules/@agents-can-communicate/mcp-server/src/input-validator.mjs +79 -0
- package/node_modules/@agents-can-communicate/mcp-server/src/resources.mjs +23 -28
- package/node_modules/@agents-can-communicate/mcp-server/src/server.mjs +109 -71
- package/node_modules/@agents-can-communicate/mcp-server/src/tools.mjs +74 -93
- package/node_modules/@agents-can-communicate/protocol/package.json +1 -1
- package/node_modules/@agents-can-communicate/protocol/src/config.mjs +1 -1
- package/node_modules/@agents-can-communicate/protocol/src/conversations.mjs +64 -0
- package/node_modules/@agents-can-communicate/protocol/src/index.mjs +4 -1
- package/node_modules/@agents-can-communicate/protocol/src/schema.mjs +49 -90
- package/node_modules/@agents-can-communicate/protocol/src/states.mjs +13 -40
- package/node_modules/@agents-can-communicate/storage-filesystem/package.json +1 -1
- package/node_modules/@agents-can-communicate/storage-filesystem/src/active-journal.mjs +230 -0
- package/node_modules/@agents-can-communicate/storage-filesystem/src/atomic-json.mjs +77 -28
- package/node_modules/@agents-can-communicate/storage-filesystem/src/identity.mjs +1 -1
- package/node_modules/@agents-can-communicate/storage-filesystem/src/journal.mjs +83 -35
- package/node_modules/@agents-can-communicate/storage-filesystem/src/retention.mjs +112 -0
- package/node_modules/@agents-can-communicate/storage-filesystem/src/safe-file.mjs +18 -8
- package/node_modules/@agents-can-communicate/storage-filesystem/src/store.mjs +86 -28
- package/node_modules/@agents-can-communicate/storage-filesystem/src/writer-mutex.mjs +121 -27
- package/package.json +22 -1
- package/node_modules/@agents-can-communicate/core/src/communication.mjs +0 -334
- package/node_modules/@agents-can-communicate/core/src/notify.mjs +0 -95
- package/node_modules/@agents-can-communicate/core/src/tasks.mjs +0 -244
- package/node_modules/@agents-can-communicate/core/src/workstreams.mjs +0 -109
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
import { AccError, EXIT, SCHEMA_VERSION, createId, validateRecord }
|
|
2
|
-
from "@agents-can-communicate/protocol";
|
|
3
|
-
|
|
4
|
-
import { ensureMaterialised } from "./materialisation.mjs";
|
|
5
|
-
import { classifySessionPresence } from "./sessions.mjs";
|
|
6
|
-
|
|
7
|
-
// A workstream groups related collaboration. It may have zero or one
|
|
8
|
-
// coordinator lease, and the coordinator plans - it is never the transport,
|
|
9
|
-
// the durable owner, or an information gatekeeper.
|
|
10
|
-
export function createWorkstreamService(ports, sessions) {
|
|
11
|
-
const { store, clock, ids, pidIsAlive } = ports;
|
|
12
|
-
|
|
13
|
-
async function requireOpenSession(input, action) {
|
|
14
|
-
const existing = await sessions.locateSession(input.sessionId, input.workspaceId);
|
|
15
|
-
if (existing === null || existing.record.state !== "open"
|
|
16
|
-
|| existing.record.generation !== input.generation) {
|
|
17
|
-
throw new AccError(EXIT.CONFLICT, `cannot ${action} from this session generation`,
|
|
18
|
-
{ sessionId: input.sessionId });
|
|
19
|
-
}
|
|
20
|
-
return existing.record;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
async function createWorkstream(input) {
|
|
24
|
-
const session = await requireOpenSession(input, "create a workstream");
|
|
25
|
-
const workspaceId = session.workspaceId;
|
|
26
|
-
await ensureMaterialised(ports, { workspaceId, descriptor: input.descriptor,
|
|
27
|
-
reason: "durable_object" });
|
|
28
|
-
const now = clock.now();
|
|
29
|
-
const workstreamId = createId("workstream");
|
|
30
|
-
const record = validateRecord("workstream", {
|
|
31
|
-
schemaVersion: SCHEMA_VERSION,
|
|
32
|
-
workstreamId,
|
|
33
|
-
workspaceId,
|
|
34
|
-
title: input.title,
|
|
35
|
-
objective: input.objective,
|
|
36
|
-
// A workstream never acquires a coordinator merely by being created.
|
|
37
|
-
coordinatorSessionId: null,
|
|
38
|
-
state: "open",
|
|
39
|
-
createdAt: now,
|
|
40
|
-
});
|
|
41
|
-
await store.transaction(async tx => {
|
|
42
|
-
tx.put("workstream", workstreamId, record);
|
|
43
|
-
tx.append({ schemaVersion: SCHEMA_VERSION, eventId: ids.next("event"), workspaceId,
|
|
44
|
-
actorSessionId: session.sessionId, type: "workstream.created", occurredAt: now,
|
|
45
|
-
payload: { workstreamId } });
|
|
46
|
-
}, { kinds: ["workstream"] });
|
|
47
|
-
return record;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
async function acquireCoordinator(input) {
|
|
51
|
-
const session = await requireOpenSession(input, "coordinate");
|
|
52
|
-
const now = clock.now();
|
|
53
|
-
const snapshot = await store.snapshot(session.workspaceId,
|
|
54
|
-
{ kinds: ["session", "workstream"] });
|
|
55
|
-
let record = null;
|
|
56
|
-
await store.transaction(async tx => {
|
|
57
|
-
const existing = tx.get("workstream", input.workstreamId);
|
|
58
|
-
if (existing === null) {
|
|
59
|
-
throw new AccError(EXIT.CONFLICT, "the workstream does not exist",
|
|
60
|
-
{ workstreamId: input.workstreamId });
|
|
61
|
-
}
|
|
62
|
-
const held = existing.coordinatorSessionId;
|
|
63
|
-
if (held !== null && held !== session.sessionId) {
|
|
64
|
-
const holder = snapshot.sessions.find(item => item.sessionId === held);
|
|
65
|
-
const presence = holder === undefined ? "offline"
|
|
66
|
-
: classifySessionPresence(holder, now, pidIsAlive);
|
|
67
|
-
// A coordinator lease is replaced only when the holder is genuinely
|
|
68
|
-
// gone or policy says so - not because a peer would like the role.
|
|
69
|
-
if (presence !== "offline" && input.authority !== "human"
|
|
70
|
-
&& input.authority !== "policy") {
|
|
71
|
-
throw new AccError(EXIT.CONFLICT, "the workstream already has a coordinator",
|
|
72
|
-
{ workstreamId: input.workstreamId, coordinatorSessionId: held,
|
|
73
|
-
coordinatorPresence: presence });
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
record = { ...existing, coordinatorSessionId: session.sessionId };
|
|
77
|
-
tx.put("workstream", input.workstreamId, record,
|
|
78
|
-
tx.generationOf("workstream", input.workstreamId));
|
|
79
|
-
tx.append({ schemaVersion: SCHEMA_VERSION, eventId: ids.next("event"),
|
|
80
|
-
workspaceId: session.workspaceId, actorSessionId: session.sessionId,
|
|
81
|
-
type: "workstream.coordinator_acquired", occurredAt: now,
|
|
82
|
-
payload: { workstreamId: input.workstreamId, replaced: held } });
|
|
83
|
-
}, { kinds: ["workstream"] });
|
|
84
|
-
return record;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
async function releaseCoordinator(input) {
|
|
88
|
-
const session = await requireOpenSession(input, "release coordination");
|
|
89
|
-
const now = clock.now();
|
|
90
|
-
let record = null;
|
|
91
|
-
await store.transaction(async tx => {
|
|
92
|
-
const existing = tx.get("workstream", input.workstreamId);
|
|
93
|
-
if (existing === null || existing.coordinatorSessionId !== session.sessionId) {
|
|
94
|
-
throw new AccError(EXIT.CONFLICT, "only the coordinator may release the lease",
|
|
95
|
-
{ workstreamId: input.workstreamId });
|
|
96
|
-
}
|
|
97
|
-
record = { ...existing, coordinatorSessionId: null };
|
|
98
|
-
tx.put("workstream", input.workstreamId, record,
|
|
99
|
-
tx.generationOf("workstream", input.workstreamId));
|
|
100
|
-
tx.append({ schemaVersion: SCHEMA_VERSION, eventId: ids.next("event"),
|
|
101
|
-
workspaceId: session.workspaceId, actorSessionId: session.sessionId,
|
|
102
|
-
type: "workstream.coordinator_released", occurredAt: now,
|
|
103
|
-
payload: { workstreamId: input.workstreamId } });
|
|
104
|
-
}, { kinds: ["workstream"] });
|
|
105
|
-
return record;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
return { createWorkstream, acquireCoordinator, releaseCoordinator, requireOpenSession };
|
|
109
|
-
}
|