@gonzih/cc-wire 0.1.7 → 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 CHANGED
@@ -1,6 +1,6 @@
1
1
  # @gonzih/cc-wire
2
2
 
3
- Single source of truth for Redis channel names, key patterns, and message shapes across the cc-suite (`cc-agent`, `cc-tg`, `cc-agent-ui`).
3
+ Single source of truth for Redis channel names, key patterns, and message shapes across the cc-suite (`cc-agent`, `cc-discord`, `cc-tg`, `cc-agent-ui`).
4
4
 
5
5
  No runtime dependencies. No Redis client. Just constants, builders, and types.
6
6
 
@@ -10,61 +10,121 @@ No runtime dependencies. No Redis client. Just constants, builders, and types.
10
10
  npm install @gonzih/cc-wire
11
11
  ```
12
12
 
13
+ ## Architecture — Service Ownership
14
+
15
+ ```
16
+ ┌──────────────────────────────────────────────────────────────────┐
17
+ │ cc-wire (this package) │
18
+ │ Owns: Redis key contracts, type definitions │
19
+ └─────────────────────────────────┬────────────────────────────────┘
20
+ │ imported by
21
+ ┌───────────────────────┼───────────────────────┐
22
+ │ │ │
23
+ ▼ ▼ ▼
24
+ ┌─────────────────┐ ┌─────────────────────┐ ┌──────────────────┐
25
+ │ cc-discord │ │ cc-tg │ │ cc-agent │
26
+ │ │ │ │ │ │
27
+ │ Owns: │ │ Owns: │ │ Owns: │
28
+ │ per-namespace │ │ money-brain session│ │ job execution │
29
+ │ Claude sessions│ │ (single session) │ │ (spawn_agent) │
30
+ │ Discord bridge │ │ Telegram bridge │ │ no meta-agent │
31
+ │ │ │ │ │ lifecycle │
32
+ │ Workspace: │ │ Workspace: │ │ │
33
+ │ ~/cc-discord- │ │ ~/money-brain │ │ │
34
+ │ workspace/{ns} │ │ │ │ │
35
+ └─────────────────┘ └─────────────────────┘ └──────────────────┘
36
+ ```
37
+
38
+ **Key principle:** cc-tg and cc-discord are completely isolated — they share no Redis keys,
39
+ no sessions, and no state. cc-agent is a pure job runner; it no longer manages meta-agent
40
+ lifecycle.
41
+
13
42
  ## Usage
14
43
 
15
44
  ```typescript
16
45
  import {
17
- wikiKey,
18
- wikiUpdatedKey,
19
- notifyChannel,
20
- notifyListKey,
21
- notifyPublishCommand,
46
+ // cc-discord service keys
47
+ discordMetaInputKey,
48
+ discordMetaStatusKey,
49
+ discordChatOutgoing,
50
+ discordChatLog,
51
+ discordChatIncoming,
52
+ discordNotify,
53
+ // cc-tg service keys
54
+ tgChatOutgoing,
55
+ tgChatIncoming,
56
+ tgNotify,
57
+ // Service ownership constants
58
+ CC_DISCORD_WORKSPACE_ROOT,
59
+ CC_TG_WORKSPACE,
60
+ // Job keys (cc-agent)
22
61
  jobKey,
23
62
  jobIndexKey,
24
- chatLogKey,
63
+ // Shared utility
64
+ notifyPublishCommand,
25
65
  TTL,
26
66
  CAP,
27
- type Transport,
28
- type NotificationPayload,
67
+ type ChatMessage,
68
+ type SpawnParams,
29
69
  } from "@gonzih/cc-wire";
30
70
 
31
- // Wiki keys
32
- const hash = wikiKey("org/repo"); // "cca:wiki:org/repo"
33
- const ts = wikiUpdatedKey("org/repo"); // "cca:wiki:org/repo:updated"
71
+ // cc-discord — per-namespace session keys
72
+ const inputQueue = discordMetaInputKey("simorgh-mobile-app");
73
+ // => "cca:discord:meta:simorgh-mobile-app:input"
74
+ const statusKey = discordMetaStatusKey("simorgh-mobile-app");
75
+ // => "cca:discord:meta:simorgh-mobile-app:status"
76
+ const notifyChan = discordNotify("simorgh-mobile-app");
77
+ // => "cca:discord:notify:simorgh-mobile-app"
78
+
79
+ // cc-tg — single dedicated money-brain session
80
+ const tgOut = tgChatOutgoing(); // "cca:tg:chat:outgoing"
81
+ const tgIn = tgChatIncoming(); // "cca:tg:chat:incoming"
82
+ const tgNtfy = tgNotify(); // "cca:tg:notify"
83
+
84
+ // Workspace paths
85
+ const discordWs = `${process.env.HOME}/${CC_DISCORD_WORKSPACE_ROOT}/simorgh-mobile-app`;
86
+ const tgWs = `${process.env.HOME}/${CC_TG_WORKSPACE}`;
87
+
88
+ // ChatMessage — with service field
89
+ const msg: ChatMessage = {
90
+ id: crypto.randomUUID(),
91
+ source: "discord",
92
+ service: "cc-discord",
93
+ role: "user",
94
+ content: "deploy the app",
95
+ namespace: "simorgh-mobile-app",
96
+ timestamp: new Date().toISOString(),
97
+ };
98
+ ```
34
99
 
35
- // Job keys
36
- const job = jobKey("abc-123"); // "cca:job:abc-123"
37
- const idx = jobIndexKey("myns"); // "cca:jobs:myns"
100
+ ## Key Reference
38
101
 
39
- // Notify
40
- const chan = notifyChannel("myns"); // "cca:notify:myns"
41
- const list = notifyListKey("myns"); // "cca:notify:myns" (same key, dual-purpose)
102
+ ### cc-discord Keys
42
103
 
43
- // NotificationPayload routing controls which transports deliver the message
44
- const payload: NotificationPayload = {
45
- text: "Build finished ✓",
46
- routing: ["discord"], // omit or leave empty for all transports
47
- };
104
+ cc-discord owns all namespace-scoped Claude sessions. All keys live under `cca:discord:`.
48
105
 
49
- // notifyPublishCommand generate a redis-cli shell command
50
- const cmd = notifyPublishCommand("myns", payload);
51
- // => "redis-cli PUBLISH 'cca:notify:myns' '{\"text\":\"Build finished ✓\",\"routing\":[\"discord\"]}'"
106
+ | Builder | Pattern | Redis type | Owner | Description |
107
+ |---|---|---|---|---|
108
+ | `discordMetaInputKey(ns)` | `cca:discord:meta:{ns}:input` | LIST | cc-discord | Input queue for namespace session (RPUSH/RPOP). |
109
+ | `discordMetaStatusKey(ns)` | `cca:discord:meta:{ns}:status` | STRING (JSON) | cc-discord | Live session status (typing, tool, etc.), TTL 7d. |
110
+ | `discordChatOutgoing(ns)` | `cca:discord:chat:outgoing:{ns}` | CHANNEL | cc-discord | Outgoing messages to UI (pub/sub). |
111
+ | `discordChatLog(ns)` | `cca:discord:chat:log:{ns}` | LIST | cc-discord | Chat history, capped at 500, LIFO. |
112
+ | `discordChatIncoming(ns)` | `cca:discord:chat:incoming:{ns}` | CHANNEL | cc-discord | Incoming messages from UI/Discord (pub/sub). |
113
+ | `discordNotify(ns)` | `cca:discord:notify:{ns}` | CHANNEL + LIST | cc-discord | Job-completion notifications (PUBLISH + RPOP poll). |
52
114
 
53
- // Constants
54
- TTL.JOB_SECONDS // 604800
55
- CAP.CHAT_LOG // 500
56
- ```
115
+ ### cc-tg Keys
57
116
 
58
- ## Key Reference
117
+ cc-tg owns a single dedicated `money-brain` session with no namespace scoping.
59
118
 
60
- ### Wiki
119
+ | Builder | Pattern | Redis type | Owner | Description |
120
+ |---|---|---|---|---|
121
+ | `tgChatOutgoing()` | `cca:tg:chat:outgoing` | CHANNEL | cc-tg | Outgoing messages to UI (pub/sub). |
122
+ | `tgChatIncoming()` | `cca:tg:chat:incoming` | CHANNEL | cc-tg | Incoming messages from UI/Telegram (pub/sub). |
123
+ | `tgNotify()` | `cca:tg:notify` | CHANNEL + LIST | cc-tg | Job-completion notifications (PUBLISH + RPOP poll). |
61
124
 
62
- | Builder | Pattern | Redis type | Description |
63
- |---|---|---|---|
64
- | `wikiKey(repoSlug)` | `cca:wiki:{repoSlug}` | HASH | Per-repo wiki pages. Field = page name, value = markdown. |
65
- | `wikiUpdatedKey(repoSlug)` | `cca:wiki:{repoSlug}:updated` | STRING | ISO timestamp of last wiki update. |
125
+ ### cc-agent Keys (jobs only)
66
126
 
67
- ### Jobs
127
+ cc-agent is a pure job runner. It no longer manages meta-agent lifecycle.
68
128
 
69
129
  | Builder | Pattern | Redis type | Description |
70
130
  |---|---|---|---|
@@ -76,183 +136,80 @@ CAP.CHAT_LOG // 500
76
136
  | `jobDoneChannel(id)` | `cca:job:done:{id}` | CHANNEL | Job completion pub/sub. |
77
137
  | `jobDoneQueueKey(id)` | `cca:job:done:{id}:queue` | LIST | LPUSH/BLPOP queue for `wait_for_job`, TTL 7d. |
78
138
  | `jobIndexKey(ns)` | `cca:jobs:{ns}` | SET | Job IDs per namespace. |
139
+ | `EVENT_STREAM` | `cca:event-stream` | STREAM | Job status events (XADD/XREADGROUP). |
140
+ | `COORDINATOR_GROUP` | `coordinator` | — | Consumer group name. |
79
141
 
80
- ### Event Stream
81
-
82
- | Constant | Value | Description |
83
- |---|---|---|
84
- | `EVENT_STREAM` | `cca:event-stream` | Redis Stream — job status events. |
85
- | `COORDINATOR_GROUP` | `coordinator` | Consumer group name. |
86
-
87
- ### Notify / Chat
88
-
89
- | Builder | Pattern | Description |
90
- |---|---|---|
91
- | `notifyChannel(ns)` | `cca:notify:{ns}` | CHANNEL — coordinator publishes job completion. |
92
- | `notifyListKey(ns)` | `cca:notify:{ns}` | LIST — delivery queue (RPUSH/RPOP). Same key as channel (safe — Redis pub/sub and list namespaces are independent). |
93
- | `notifyLogKey(ns)` | `cca:notify-log:{ns}` | LIST — persistent audit log, capped at `CAP.NOTIFY_LOG` (100). |
94
- | `notifyPublishCommand(ns, payload)` | — | Returns a `redis-cli PUBLISH` shell command string. Useful for cron prompts. |
95
- | `chatLogKey(ns)` | `cca:chat:log:{ns}` | LIST — chat history, capped at `CAP.CHAT_LOG` (500), LIFO. |
96
- | `chatIncomingChannel(ns)` | `cca:chat:incoming:{ns}` | CHANNEL — UI → cc-tg. |
97
- | `chatOutgoingChannel(ns)` | `cca:chat:outgoing:{ns}` | CHANNEL — cc-tg → UI. |
98
-
99
- ### Meta-Agent
100
-
101
- | Builder | Pattern | Description |
102
- |---|---|---|
103
- | `metaKey(ns)` | `cca:meta:{ns}` | STRING (JSON) — MetaAgentInfo state, TTL 30d. |
104
- | `metaInputKey(ns)` | `cca:meta:{ns}:input` | LIST — input queue (RPUSH/RPOP). |
105
- | `metaAgentStatusKey(ns)` | `cca:meta-agent:status:{ns}` | STRING (JSON) — live status, TTL 7d. |
106
- | `META_AGENTS_INDEX` | `cca:meta:agents:index` | SET — canonical registry. |
107
-
108
- ### Wiki
109
-
110
- | Builder | Pattern | Description |
111
- |---|---|---|
112
- | `wikiKey(repoSlug)` | `cca:wiki:{repoSlug}` | HASH — wiki pages. Field = page name, value = markdown. |
113
- | `wikiUpdatedKey(repoSlug)` | `cca:wiki:{repoSlug}:updated` | STRING — ISO timestamp of last update. |
114
-
115
- ### Profiles
116
-
117
- | Builder | Pattern | Description |
118
- |---|---|---|
119
- | `profileKey(name)` | `cca:profile:{name}` | STRING (JSON) — saved Profile. |
120
- | `PROFILES_INDEX` | `cca:profiles:index` | SET — profile names. |
121
-
122
- ### Crons
123
-
124
- | Builder | Pattern | Description |
125
- |---|---|---|
126
- | `cronsKey(ns)` | `cca:crons:{ns}` | STRING (JSON array) — cron definitions. |
127
- | `deletedCronsKey(ns)` | `cca:deleted-crons:{ns}` | SET — tombstone IDs, TTL 7d. |
128
-
129
- ### Learnings
130
-
131
- | Builder | Pattern | Description |
132
- |---|---|---|
133
- | `learningsKey(ns)` | `cca:learnings:{ns}` | LIST — learnings (LPUSH, capped at `CAP.LEARNINGS` = 50), TTL 90d, LIFO. |
134
-
135
- ### Plans / Coordinator
136
-
137
- | Builder | Pattern | Description |
138
- |---|---|---|
139
- | `planKey(id)` | `cca:plan:{id}` | STRING (JSON) — PlanRecord, TTL 30d. |
140
- | `coordinatorPlanKey(jobId)` | `cca:coordinator:plan:{jobId}` | STRING — coordinator plan JSON. |
141
-
142
- ### Swarm
142
+ ### Shared / Utility Keys
143
143
 
144
- | Builder | Pattern | Description |
145
- |---|---|---|
146
- | `swarmKey(id)` | `cca:swarm:{id}` | STRING (JSON) SwarmRecord. |
147
- | `SWARM_REQUESTS_KEY` | `cca:swarm:requests` | LIST — task request queue (LPUSH). |
148
-
149
- ### Version / Token
144
+ | Builder / Constant | Pattern | Redis type | Description |
145
+ |---|---|---|---|
146
+ | `notifyChannel(ns)` | `cca:notify:{ns}` | CHANNEL | Legacy coordinator notify (use service-scoped builders for new code). |
147
+ | `notifyListKey(ns)` | `cca:notify:{ns}` | LIST | Same key delivery queue. |
148
+ | `notifyLogKey(ns)` | `cca:notify-log:{ns}` | LIST | Notification audit log, capped at 100, LIFO. |
149
+ | `notifyPublishCommand(ns, payload)` | — | — | Returns a `redis-cli PUBLISH` shell command string. Useful for cron prompts. |
150
+ | `planKey(id)` | `cca:plan:{id}` | STRING (JSON) | PlanRecord, TTL 30d. |
151
+ | `coordinatorPlanKey(jobId)` | `cca:coordinator:plan:{jobId}` | STRING | Coordinator plan JSON. |
152
+ | `profileKey(name)` | `cca:profile:{name}` | STRING (JSON) | Saved Profile. |
153
+ | `PROFILES_INDEX` | `cca:profiles:index` | SET | Profile names. |
154
+ | `cronsKey(ns)` | `cca:crons:{ns}` | STRING (JSON array) | Cron definitions. |
155
+ | `deletedCronsKey(ns)` | `cca:deleted-crons:{ns}` | SET | Tombstone IDs, TTL 7d. |
156
+ | `learningsKey(ns)` | `cca:learnings:{ns}` | LIST | Learnings (LPUSH, capped at 50), TTL 90d, LIFO. |
157
+ | `wikiKey(repoSlug)` | `cca:wiki:{repoSlug}` | HASH | Wiki pages. Field = page name, value = markdown. |
158
+ | `wikiUpdatedKey(repoSlug)` | `cca:wiki:{repoSlug}:updated` | STRING | ISO timestamp of last wiki update. |
159
+ | `swarmKey(id)` | `cca:swarm:{id}` | STRING (JSON) | SwarmRecord. |
160
+ | `SWARM_REQUESTS_KEY` | `cca:swarm:requests` | LIST | Swarm task request queue (LPUSH). |
161
+ | `CC_AGENT_VERSION_KEY` | `cca:meta:cc-agent:version` | STRING | Running cc-agent version. |
162
+ | `CC_TG_VERSION_KEY` | `cca:meta:cc-tg:version` | STRING | Running cc-tg version. |
163
+ | `TOKEN_INDEX_KEY` | `cca:token:index` | STRING | Token rotation index. |
164
+ | `VOICE_PENDING_KEY` | `voice:pending` | LIST | Transcription pending queue (cc-tg only). |
165
+ | `VOICE_FAILED_KEY` | `voice:failed` | LIST | Failure log, TTL 48h (cc-tg only). |
150
166
 
151
- | Constant | Value | Description |
152
- |---|---|---|
153
- | `CC_AGENT_VERSION_KEY` | `cca:meta:cc-agent:version` | STRING — running cc-agent version. |
154
- | `CC_TG_VERSION_KEY` | `cca:meta:cc-tg:version` | STRING — running cc-tg version. |
155
- | `TOKEN_INDEX_KEY` | `cca:token:index` | STRING — token rotation index. |
167
+ ### Service Ownership Constants
156
168
 
157
- ### Voice (cc-tg only)
169
+ ```typescript
170
+ CC_DISCORD_WORKSPACE_ROOT // "cc-discord-workspace"
171
+ // Usage: `${HOME}/${CC_DISCORD_WORKSPACE_ROOT}/{namespace}`
158
172
 
159
- | Constant | Value | Description |
160
- |---|---|---|
161
- | `VOICE_PENDING_KEY` | `voice:pending` | LIST — transcription pending queue. |
162
- | `VOICE_FAILED_KEY` | `voice:failed` | LIST — failure log, TTL 48h. |
173
+ CC_TG_WORKSPACE // "money-brain"
174
+ // Usage: `${HOME}/${CC_TG_WORKSPACE}`
175
+ ```
163
176
 
164
177
  ## Constants
165
178
 
166
179
  ```typescript
167
- TTL.JOB_SECONDS // 604800 (7 days)
168
- TTL.PLAN_SECONDS // 2592000 (30 days)
169
- TTL.LEARNINGS_SECONDS // 7776000 (90 days)
170
- TTL.VOICE_FAILED_SECONDS // 172800 (48 hours)
171
-
172
- CAP.NOTIFY_LOG // 100
173
- CAP.CHAT_LOG // 500
174
- CAP.LEARNINGS // 50
175
- CAP.EVENT_STREAM // 500
176
-
177
- TIMING.COORDINATOR_POLL_MS // 2000
178
- TIMING.DEPENDENCY_TICK_MS // 3000
179
- TIMING.INPUT_POLL_INTERVAL_MS // 3000
180
- TIMING.META_AGENT_FLUSH_DELAY_MS // 1500
180
+ TTL.JOB_SECONDS // 604800 (7 days)
181
+ TTL.PLAN_SECONDS // 2592000 (30 days)
182
+ TTL.LEARNINGS_SECONDS // 7776000 (90 days)
183
+ TTL.VOICE_FAILED_SECONDS // 172800 (48 hours)
184
+
185
+ CAP.NOTIFY_LOG // 100
186
+ CAP.CHAT_LOG // 500
187
+ CAP.LEARNINGS // 50
188
+ CAP.EVENT_STREAM // 500
189
+
190
+ TIMING.COORDINATOR_POLL_MS // 2000
191
+ TIMING.DEPENDENCY_TICK_MS // 3000
192
+ TIMING.INPUT_POLL_INTERVAL_MS // 3000
193
+ TIMING.META_AGENT_FLUSH_DELAY_MS // 1500
181
194
  ```
182
195
 
183
196
  ## Notification Routing
184
197
 
185
- Job-completion notifications flow through `cca:notify:{namespace}`. The namespace that
186
- receives the notification is determined by `spawning_namespace` on the spawn call:
187
-
188
- ```
189
- coordinator: targetNamespace = job.spawningNamespace ?? coordinator.namespace
190
- ```
191
-
192
- If `spawning_namespace` is absent the notification falls back to the coordinator's own
193
- namespace (typically `"money-brain"`), which is the source of the routing bug described
194
- below.
195
-
196
- ### Broken flow — Discord jobs notify Telegram instead of Discord
198
+ Each service subscribes to its own notify channel for job-completion notifications:
197
199
 
198
- ```
199
- Discord #simorgh-mobile-app
200
- → cc-discord routeToMetaAgent("simorgh-mobile-app")
201
- → RPUSH cca:meta:simorgh-mobile-app:input
202
- → cc-agent meta-agent picks up message
203
- → spawn_agent { repoUrl, task } ← no spawning_namespace
204
- → Coordinator: targetNs = coordinator.namespace = "money-brain"
205
- → PUBLISH cca:notify:money-brain
206
- → cc-tg (subscribed to cca:notify:money-brain) → Telegram ✗
207
- ```
208
-
209
- Two bugs combine to produce this:
210
-
211
- | Bug | Repo | Description |
200
+ | Service | Notify key builder | Pattern |
212
201
  |---|---|---|
213
- | A | `cc-agent` | `spawn_agent` MCP handler does not auto-inject `spawning_namespace` when called from within a meta-agent context. cc-tg works around this by injecting it client-side; meta-agents cannot. |
214
- | B | `cc-discord` | The notifier subscribes only to `cca:notify:{CC_AGENT_NAMESPACE}` (one hardcoded namespace). Even after Bug A is fixed, cc-discord would not hear notifications on `cca:notify:simorgh-mobile-app`. |
202
+ | cc-discord | `discordNotify(ns)` | `cca:discord:notify:{ns}` |
203
+ | cc-tg | `tgNotify()` | `cca:tg:notify` |
215
204
 
216
- ### Correct flow after both fixes
205
+ Both use the same dual-purpose pattern: the coordinator PUBLISHes on the channel (pub/sub)
206
+ and also RPUSHes to the same key as a list (poll fallback). Redis pub/sub and list namespaces
207
+ are independent so this is safe.
217
208
 
218
- ```
219
- Discord #simorgh-mobile-app
220
- → cc-discord routeToMetaAgent("simorgh-mobile-app")
221
- → RPUSH cca:meta:simorgh-mobile-app:input
222
- → cc-agent meta-agent picks up message
223
- → spawn_agent { repoUrl, task }
224
- ← cc-agent MCP injects spawning_namespace = "simorgh-mobile-app"
225
- → Coordinator: targetNs = "simorgh-mobile-app"
226
- → PUBLISH cca:notify:simorgh-mobile-app
227
- → cc-discord (subscribed to cca:notify:simorgh-mobile-app)
228
- → Discord #simorgh-mobile-app ✓
229
- ```
230
-
231
- ### Redis keys involved
232
-
233
- | Step | Key / Channel | Builder |
234
- |---|---|---|
235
- | Input to meta-agent | `cca:meta:{ns}:input` | `metaInputKey(ns)` |
236
- | Job completion pub/sub | `cca:notify:{ns}` | `notifyChannel(ns)` |
237
- | Job completion list (5 s poll fallback) | `cca:notify:{ns}` | `notifyListKey(ns)` |
238
- | Notification audit log | `cca:notify-log:{ns}` | `notifyLogKey(ns)` |
209
+ ### Setting spawning_namespace on spawn calls
239
210
 
240
- ### Required fixes per repo
241
-
242
- **`gonzih/cc-agent`** (Bug A): When the `spawn_agent` MCP tool is called from within a
243
- running meta-agent context, the MCP handler should auto-inject
244
- `spawning_namespace: metaAgentNamespace` if the caller has not already set it. The
245
- meta-agent's namespace is known to cc-agent at the time of the call.
246
-
247
- **`gonzih/cc-discord`** (Bug B): The notifier must subscribe to `cca:notify:{ns}` for
248
- every namespace registered in `routedChannelIds`, and route incoming notifications to
249
- the corresponding Discord channel — not just the single default
250
- `DISCORD_NOTIFY_CHANNEL_ID`.
251
-
252
- ### Setting spawning_namespace on manual spawn calls
253
-
254
- Any caller that spawns jobs and wants notifications routed back to itself must set
255
- `spawning_namespace` on the `SpawnParams`:
211
+ Any caller spawning jobs via cc-agent must set `spawning_namespace` on `SpawnParams` so
212
+ the coordinator routes completion notifications to the right service:
256
213
 
257
214
  ```typescript
258
215
  import type { SpawnParams } from "@gonzih/cc-wire";
@@ -260,10 +217,27 @@ import type { SpawnParams } from "@gonzih/cc-wire";
260
217
  const params: SpawnParams = {
261
218
  repoUrl: "https://github.com/org/repo",
262
219
  task: "fix the build",
263
- spawning_namespace: "simorgh-mobile-app", // notifications routed here
220
+ spawning_namespace: "simorgh-mobile-app", // cc-agent uses this to route the notify
264
221
  };
265
222
  ```
266
223
 
224
+ ## Migration from v0.1.x
225
+
226
+ If you were using the old cc-agent-owned meta-agent keys, replace them:
227
+
228
+ | Old (deprecated) | New | Owner |
229
+ |---|---|---|
230
+ | `metaInputKey(ns)` → `cca:meta:{ns}:input` | `discordMetaInputKey(ns)` → `cca:discord:meta:{ns}:input` | cc-discord |
231
+ | `metaAgentStatusKey(ns)` → `cca:meta-agent:status:{ns}` | `discordMetaStatusKey(ns)` → `cca:discord:meta:{ns}:status` | cc-discord |
232
+ | `META_AGENTS_INDEX` → `cca:meta:agents:index` | — (cc-discord maintains its own registry) | cc-discord |
233
+ | `chatLogKey(ns)` → `cca:chat:log:{ns}` | `discordChatLog(ns)` → `cca:discord:chat:log:{ns}` | cc-discord |
234
+ | `chatOutgoingChannel(ns)` → `cca:chat:outgoing:{ns}` | `discordChatOutgoing(ns)` → `cca:discord:chat:outgoing:{ns}` | cc-discord |
235
+ | `chatIncomingChannel(ns)` → `cca:chat:incoming:{ns}` | `discordChatIncoming(ns)` → `cca:discord:chat:incoming:{ns}` | cc-discord |
236
+ | `notifyChannel(ns)` (Discord use) | `discordNotify(ns)` | cc-discord |
237
+ | `notifyChannel(ns)` / `notifyListKey(ns)` (tg use) | `tgNotify()` | cc-tg |
238
+
239
+ The deprecated exports remain in v0.2.x for migration; they will be removed in v0.3.x.
240
+
267
241
  ## Development
268
242
 
269
243
  ```sh
@@ -12,13 +12,29 @@
12
12
  * All values match the exact strings used in the source repos as of 2026-05.
13
13
  */
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.TIMING = exports.CAP = exports.TTL = exports.swarmKey = exports.wikiUpdatedKey = exports.wikiKey = exports.deletedCronsKey = exports.cronsKey = exports.learningsKey = exports.metaAgentStatusKey = exports.metaInputKey = exports.metaKey = exports.chatOutgoingChannel = exports.chatIncomingChannel = exports.chatLogKey = exports.notifyPublishCommand = exports.notifyLogKey = exports.notifyListKey = exports.notifyChannel = exports.profileKey = exports.planKey = exports.coordinatorPlanKey = exports.jobDoneQueueKey = exports.jobDoneChannel = exports.jobOutputLiveChannel = exports.jobInputKey = exports.jobSignalKey = exports.jobOutputKey = exports.jobKey = exports.jobIndexKey = exports.SWARM_REQUESTS_KEY = exports.VOICE_FAILED_KEY = exports.VOICE_PENDING_KEY = exports.CC_TG_VERSION_KEY = exports.JOB_INDEX_PREFIX = exports.JOB_INDEX_GLOB = exports.CC_AGENT_VERSION_KEY = exports.TOKEN_INDEX_KEY = exports.PROFILES_INDEX = exports.META_AGENTS_INDEX = exports.COORDINATOR_GROUP = exports.EVENT_STREAM = void 0;
15
+ exports.swarmKey = exports.wikiUpdatedKey = exports.wikiKey = exports.deletedCronsKey = exports.cronsKey = exports.learningsKey = exports.tgNotify = exports.tgChatIncoming = exports.tgChatOutgoing = exports.discordNotify = exports.discordChatIncoming = exports.discordChatLog = exports.discordChatOutgoing = exports.discordMetaStatusKey = exports.discordMetaInputKey = exports.metaAgentStatusKey = exports.metaInputKey = exports.metaKey = exports.chatOutgoingChannel = exports.chatIncomingChannel = exports.chatLogKey = exports.notifyPublishCommand = exports.notifyLogKey = exports.notifyListKey = exports.notifyChannel = exports.profileKey = exports.planKey = exports.coordinatorPlanKey = exports.jobDoneQueueKey = exports.jobDoneChannel = exports.jobOutputLiveChannel = exports.jobInputKey = exports.jobSignalKey = exports.jobOutputKey = exports.jobKey = exports.jobIndexKey = exports.SWARM_REQUESTS_KEY = exports.VOICE_FAILED_KEY = exports.VOICE_PENDING_KEY = exports.CC_TG_VERSION_KEY = exports.JOB_INDEX_PREFIX = exports.JOB_INDEX_GLOB = exports.CC_AGENT_VERSION_KEY = exports.TOKEN_INDEX_KEY = exports.PROFILES_INDEX = exports.META_AGENTS_INDEX = exports.COORDINATOR_GROUP = exports.EVENT_STREAM = exports.CC_TG_WORKSPACE = exports.CC_DISCORD_WORKSPACE_ROOT = void 0;
16
+ exports.TIMING = exports.CAP = exports.TTL = void 0;
17
+ // ─── Service Ownership Constants ─────────────────────────────────────────────
18
+ /**
19
+ * Root directory (relative to HOME) where cc-discord checks out per-namespace
20
+ * workspace clones: `~/cc-discord-workspace/{namespace}`.
21
+ */
22
+ exports.CC_DISCORD_WORKSPACE_ROOT = "cc-discord-workspace";
23
+ /**
24
+ * Directory name (relative to HOME) of the money-brain repo used by cc-tg
25
+ * for its dedicated session: `~/money-brain`.
26
+ */
27
+ exports.CC_TG_WORKSPACE = "money-brain";
16
28
  // ─── Static Keys ─────────────────────────────────────────────────────────────
17
29
  /** Redis Stream written by cc-agent on every job status change. */
18
30
  exports.EVENT_STREAM = "cca:event-stream";
19
31
  /** Consumer group name used by the coordinator to read from EVENT_STREAM. */
20
32
  exports.COORDINATOR_GROUP = "coordinator";
21
- /** SET — canonical registry of meta-agent namespaces. */
33
+ /**
34
+ * SET — canonical registry of meta-agent namespaces.
35
+ * @deprecated cc-discord now maintains its own namespace registry.
36
+ * This key is no longer written by the cc-suite; kept for migration only.
37
+ */
22
38
  exports.META_AGENTS_INDEX = "cca:meta:agents:index";
23
39
  /** SET — index of saved profile names. */
24
40
  exports.PROFILES_INDEX = "cca:profiles:index";
@@ -118,12 +134,63 @@ exports.chatOutgoingChannel = chatOutgoingChannel;
118
134
  /** STRING (JSON) — MetaAgentInfo state, TTL 30 days. */
119
135
  const metaKey = (namespace) => `cca:meta:${namespace}`;
120
136
  exports.metaKey = metaKey;
121
- /** LIST — input queue for a meta-agent (RPUSH by cc-tg, RPOP by cc-agent). */
137
+ /**
138
+ * LIST — input queue for a meta-agent (RPUSH by cc-tg, RPOP by cc-agent).
139
+ * @deprecated Use `discordMetaInputKey(ns)` — cc-discord now owns namespace sessions directly.
140
+ */
122
141
  const metaInputKey = (namespace) => `cca:meta:${namespace}:input`;
123
142
  exports.metaInputKey = metaInputKey;
124
- /** STRING (JSON) — live meta-agent status (typing, tool, etc.), TTL 7 days. */
143
+ /**
144
+ * STRING (JSON) — live meta-agent status (typing, tool, etc.), TTL 7 days.
145
+ * @deprecated Use `discordMetaStatusKey(ns)` — cc-discord now owns namespace sessions directly.
146
+ */
125
147
  const metaAgentStatusKey = (namespace) => `cca:meta-agent:status:${namespace}`;
126
148
  exports.metaAgentStatusKey = metaAgentStatusKey;
149
+ // ─── cc-discord Keys (dynamic) ───────────────────────────────────────────────
150
+ //
151
+ // cc-discord owns all namespace-scoped Claude sessions. It reads from the
152
+ // meta input queue, writes status, and publishes/subscribes to chat/notify
153
+ // channels — all under the "cca:discord:" prefix to avoid collisions with
154
+ // the old cc-agent-owned keys.
155
+ /** LIST — input queue for a cc-discord-managed namespace session (RPUSH/RPOP). */
156
+ const discordMetaInputKey = (namespace) => `cca:discord:meta:${namespace}:input`;
157
+ exports.discordMetaInputKey = discordMetaInputKey;
158
+ /** STRING (JSON) — live status for a cc-discord-managed namespace session, TTL 7 days. */
159
+ const discordMetaStatusKey = (namespace) => `cca:discord:meta:${namespace}:status`;
160
+ exports.discordMetaStatusKey = discordMetaStatusKey;
161
+ /** CHANNEL — cc-discord → UI outgoing chat messages (pub/sub). */
162
+ const discordChatOutgoing = (namespace) => `cca:discord:chat:outgoing:${namespace}`;
163
+ exports.discordChatOutgoing = discordChatOutgoing;
164
+ /** LIST — cc-discord chat history (LPUSH capped at 500, LIFO). */
165
+ const discordChatLog = (namespace) => `cca:discord:chat:log:${namespace}`;
166
+ exports.discordChatLog = discordChatLog;
167
+ /** CHANNEL — UI/Discord → cc-discord incoming chat messages (pub/sub). */
168
+ const discordChatIncoming = (namespace) => `cca:discord:chat:incoming:${namespace}`;
169
+ exports.discordChatIncoming = discordChatIncoming;
170
+ /**
171
+ * CHANNEL + LIST — job-completion notifications for a Discord namespace.
172
+ *
173
+ * Same dual-purpose pattern as `notifyChannel`/`notifyListKey`: PUBLISH by
174
+ * coordinator (pub/sub) and RPUSH/RPOP delivery queue; Redis pub/sub and list
175
+ * namespaces are independent so the dual use is safe.
176
+ */
177
+ const discordNotify = (namespace) => `cca:discord:notify:${namespace}`;
178
+ exports.discordNotify = discordNotify;
179
+ // ─── cc-tg Keys (static) ─────────────────────────────────────────────────────
180
+ //
181
+ // cc-tg owns a single dedicated money-brain session with no namespace scoping.
182
+ /** CHANNEL — cc-tg → UI outgoing chat messages (pub/sub). */
183
+ const tgChatOutgoing = () => "cca:tg:chat:outgoing";
184
+ exports.tgChatOutgoing = tgChatOutgoing;
185
+ /** CHANNEL — UI/Telegram → cc-tg incoming chat messages (pub/sub). */
186
+ const tgChatIncoming = () => "cca:tg:chat:incoming";
187
+ exports.tgChatIncoming = tgChatIncoming;
188
+ /**
189
+ * CHANNEL + LIST — job-completion notifications for the cc-tg session.
190
+ * Same dual-purpose pattern (pub/sub + RPOP poll fallback).
191
+ */
192
+ const tgNotify = () => "cca:tg:notify";
193
+ exports.tgNotify = tgNotify;
127
194
  // ─── Learnings Keys (dynamic) ─────────────────────────────────────────────────
128
195
  /** LIST — learnings for a namespace (LPUSH capped at 50, LIFO), TTL 90 days. */
129
196
  const learningsKey = (namespace) => `cca:learnings:${namespace}`;
@@ -11,11 +11,25 @@
11
11
  * All values match the exact strings used in the source repos as of 2026-05.
12
12
  */
13
13
  import type { NotificationPayload } from "./types.js";
14
+ /**
15
+ * Root directory (relative to HOME) where cc-discord checks out per-namespace
16
+ * workspace clones: `~/cc-discord-workspace/{namespace}`.
17
+ */
18
+ export declare const CC_DISCORD_WORKSPACE_ROOT = "cc-discord-workspace";
19
+ /**
20
+ * Directory name (relative to HOME) of the money-brain repo used by cc-tg
21
+ * for its dedicated session: `~/money-brain`.
22
+ */
23
+ export declare const CC_TG_WORKSPACE = "money-brain";
14
24
  /** Redis Stream written by cc-agent on every job status change. */
15
25
  export declare const EVENT_STREAM = "cca:event-stream";
16
26
  /** Consumer group name used by the coordinator to read from EVENT_STREAM. */
17
27
  export declare const COORDINATOR_GROUP = "coordinator";
18
- /** SET — canonical registry of meta-agent namespaces. */
28
+ /**
29
+ * SET — canonical registry of meta-agent namespaces.
30
+ * @deprecated cc-discord now maintains its own namespace registry.
31
+ * This key is no longer written by the cc-suite; kept for migration only.
32
+ */
19
33
  export declare const META_AGENTS_INDEX = "cca:meta:agents:index";
20
34
  /** SET — index of saved profile names. */
21
35
  export declare const PROFILES_INDEX = "cca:profiles:index";
@@ -86,10 +100,43 @@ export declare const chatIncomingChannel: (namespace: string) => string;
86
100
  export declare const chatOutgoingChannel: (namespace: string) => string;
87
101
  /** STRING (JSON) — MetaAgentInfo state, TTL 30 days. */
88
102
  export declare const metaKey: (namespace: string) => string;
89
- /** LIST — input queue for a meta-agent (RPUSH by cc-tg, RPOP by cc-agent). */
103
+ /**
104
+ * LIST — input queue for a meta-agent (RPUSH by cc-tg, RPOP by cc-agent).
105
+ * @deprecated Use `discordMetaInputKey(ns)` — cc-discord now owns namespace sessions directly.
106
+ */
90
107
  export declare const metaInputKey: (namespace: string) => string;
91
- /** STRING (JSON) — live meta-agent status (typing, tool, etc.), TTL 7 days. */
108
+ /**
109
+ * STRING (JSON) — live meta-agent status (typing, tool, etc.), TTL 7 days.
110
+ * @deprecated Use `discordMetaStatusKey(ns)` — cc-discord now owns namespace sessions directly.
111
+ */
92
112
  export declare const metaAgentStatusKey: (namespace: string) => string;
113
+ /** LIST — input queue for a cc-discord-managed namespace session (RPUSH/RPOP). */
114
+ export declare const discordMetaInputKey: (namespace: string) => string;
115
+ /** STRING (JSON) — live status for a cc-discord-managed namespace session, TTL 7 days. */
116
+ export declare const discordMetaStatusKey: (namespace: string) => string;
117
+ /** CHANNEL — cc-discord → UI outgoing chat messages (pub/sub). */
118
+ export declare const discordChatOutgoing: (namespace: string) => string;
119
+ /** LIST — cc-discord chat history (LPUSH capped at 500, LIFO). */
120
+ export declare const discordChatLog: (namespace: string) => string;
121
+ /** CHANNEL — UI/Discord → cc-discord incoming chat messages (pub/sub). */
122
+ export declare const discordChatIncoming: (namespace: string) => string;
123
+ /**
124
+ * CHANNEL + LIST — job-completion notifications for a Discord namespace.
125
+ *
126
+ * Same dual-purpose pattern as `notifyChannel`/`notifyListKey`: PUBLISH by
127
+ * coordinator (pub/sub) and RPUSH/RPOP delivery queue; Redis pub/sub and list
128
+ * namespaces are independent so the dual use is safe.
129
+ */
130
+ export declare const discordNotify: (namespace: string) => string;
131
+ /** CHANNEL — cc-tg → UI outgoing chat messages (pub/sub). */
132
+ export declare const tgChatOutgoing: () => string;
133
+ /** CHANNEL — UI/Telegram → cc-tg incoming chat messages (pub/sub). */
134
+ export declare const tgChatIncoming: () => string;
135
+ /**
136
+ * CHANNEL + LIST — job-completion notifications for the cc-tg session.
137
+ * Same dual-purpose pattern (pub/sub + RPOP poll fallback).
138
+ */
139
+ export declare const tgNotify: () => string;
93
140
  /** LIST — learnings for a namespace (LPUSH capped at 50, LIFO), TTL 90 days. */
94
141
  export declare const learningsKey: (namespace: string) => string;
95
142
  /** STRING (JSON array) — cron job definitions for a namespace. */
@@ -1 +1 @@
1
- {"version":3,"file":"channels.d.ts","sourceRoot":"","sources":["../../src/channels.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"channels.d.ts","sourceRoot":"","sources":["../../src/channels.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAItD;;;GAGG;AACH,eAAO,MAAM,yBAAyB,yBAAyB,CAAC;AAEhE;;;GAGG;AACH,eAAO,MAAM,eAAe,gBAAgB,CAAC;AAI7C,mEAAmE;AACnE,eAAO,MAAM,YAAY,qBAAqB,CAAC;AAE/C,6EAA6E;AAC7E,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAE/C;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,0BAA0B,CAAC;AAEzD,0CAA0C;AAC1C,eAAO,MAAM,cAAc,uBAAuB,CAAC;AAEnD,wDAAwD;AACxD,eAAO,MAAM,eAAe,oBAAoB,CAAC;AAEjD,6CAA6C;AAC7C,eAAO,MAAM,oBAAoB,8BAA8B,CAAC;AAEhE,qEAAqE;AACrE,eAAO,MAAM,cAAc,eAAe,CAAC;AAE3C,0EAA0E;AAC1E,eAAO,MAAM,gBAAgB,cAAc,CAAC;AAE5C,0CAA0C;AAC1C,eAAO,MAAM,iBAAiB,2BAA2B,CAAC;AAE1D,4EAA4E;AAC5E,eAAO,MAAM,iBAAiB,kBAAkB,CAAC;AAEjD,qEAAqE;AACrE,eAAO,MAAM,gBAAgB,iBAAiB,CAAC;AAE/C,+CAA+C;AAC/C,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AAIvD,2CAA2C;AAC3C,eAAO,MAAM,WAAW,GAAI,WAAW,MAAM,KAAG,MACvB,CAAC;AAE1B,kDAAkD;AAClD,eAAO,MAAM,MAAM,GAAI,OAAO,MAAM,KAAG,MACnB,CAAC;AAErB,oDAAoD;AACpD,eAAO,MAAM,YAAY,GAAI,OAAO,MAAM,KAAG,MAClB,CAAC;AAE5B,6EAA6E;AAC7E,eAAO,MAAM,YAAY,GAAI,OAAO,MAAM,KAAG,MAClB,CAAC;AAE5B,uEAAuE;AACvE,eAAO,MAAM,WAAW,GAAI,OAAO,MAAM,KAAG,MAClB,CAAC;AAE3B,uEAAuE;AACvE,eAAO,MAAM,oBAAoB,GAAI,OAAO,MAAM,KAAG,MACrB,CAAC;AAEjC,uDAAuD;AACvD,eAAO,MAAM,cAAc,GAAI,OAAO,MAAM,KAAG,MACtB,CAAC;AAE1B,6DAA6D;AAC7D,eAAO,MAAM,eAAe,GAAI,OAAO,MAAM,KAAG,MACjB,CAAC;AAIhC,qDAAqD;AACrD,eAAO,MAAM,kBAAkB,GAAI,OAAO,MAAM,KAAG,MAClB,CAAC;AAIlC,+CAA+C;AAC/C,eAAO,MAAM,OAAO,GAAI,QAAQ,MAAM,KAAG,MACnB,CAAC;AAIvB,qCAAqC;AACrC,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,KAAG,MACnB,CAAC;AAIxB,iFAAiF;AACjF,eAAO,MAAM,aAAa,GAAI,WAAW,MAAM,KAAG,MACvB,CAAC;AAE5B;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,GAAI,WAAW,MAAM,KAAG,MACvB,CAAC;AAE5B,2DAA2D;AAC3D,eAAO,MAAM,YAAY,GAAI,WAAW,MAAM,KAAG,MAClB,CAAC;AAEhC;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAC/B,WAAW,MAAM,EACjB,SAAS,mBAAmB,KAC3B,MAIF,CAAC;AAEF,2EAA2E;AAC3E,eAAO,MAAM,UAAU,GAAI,WAAW,MAAM,KAAG,MAClB,CAAC;AAE9B,+CAA+C;AAC/C,eAAO,MAAM,mBAAmB,GAAI,WAAW,MAAM,KAAG,MACtB,CAAC;AAEnC,4DAA4D;AAC5D,eAAO,MAAM,mBAAmB,GAAI,WAAW,MAAM,KAAG,MACtB,CAAC;AAInC,wDAAwD;AACxD,eAAO,MAAM,OAAO,GAAI,WAAW,MAAM,KAAG,MACnB,CAAC;AAE1B;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,WAAW,MAAM,KAAG,MAClB,CAAC;AAEhC;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAI,WAAW,MAAM,KAAG,MACjB,CAAC;AASvC,kFAAkF;AAClF,eAAO,MAAM,mBAAmB,GAAI,WAAW,MAAM,KAAG,MACjB,CAAC;AAExC,0FAA0F;AAC1F,eAAO,MAAM,oBAAoB,GAAI,WAAW,MAAM,KAAG,MACjB,CAAC;AAEzC,kEAAkE;AAClE,eAAO,MAAM,mBAAmB,GAAI,WAAW,MAAM,KAAG,MACd,CAAC;AAE3C,kEAAkE;AAClE,eAAO,MAAM,cAAc,GAAI,WAAW,MAAM,KAAG,MACd,CAAC;AAEtC,0EAA0E;AAC1E,eAAO,MAAM,mBAAmB,GAAI,WAAW,MAAM,KAAG,MACd,CAAC;AAE3C;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,GAAI,WAAW,MAAM,KAAG,MACf,CAAC;AAMpC,6DAA6D;AAC7D,eAAO,MAAM,cAAc,QAAO,MAAgC,CAAC;AAEnE,sEAAsE;AACtE,eAAO,MAAM,cAAc,QAAO,MAAgC,CAAC;AAEnE;;;GAGG;AACH,eAAO,MAAM,QAAQ,QAAO,MAAyB,CAAC;AAItD,gFAAgF;AAChF,eAAO,MAAM,YAAY,GAAI,WAAW,MAAM,KAAG,MACnB,CAAC;AAI/B,kEAAkE;AAClE,eAAO,MAAM,QAAQ,GAAI,WAAW,MAAM,KAAG,MACnB,CAAC;AAE3B,2EAA2E;AAC3E,eAAO,MAAM,eAAe,GAAI,WAAW,MAAM,KAAG,MAClB,CAAC;AAInC;;;GAGG;AACH,eAAO,MAAM,OAAO,GAAI,UAAU,MAAM,yBACP,CAAC;AAElC,+DAA+D;AAC/D,eAAO,MAAM,cAAc,GAAI,UAAU,MAAM,iCACN,CAAC;AAI1C,wDAAwD;AACxD,eAAO,MAAM,QAAQ,GAAI,SAAS,MAAM,KAAG,MACnB,CAAC;AAIzB,eAAO,MAAM,GAAG;IACd,qFAAqF;;IAErF,oDAAoD;;IAEpD,4CAA4C;;IAE5C,+CAA+C;;CAEvC,CAAC;AAIX,eAAO,MAAM,GAAG;IACd,4DAA4D;;IAE5D,0DAA0D;;IAE1D,2DAA2D;;IAE3D,4DAA4D;;CAEpD,CAAC;AAIX,eAAO,MAAM,MAAM;IACjB,6EAA6E;;IAE7E,mEAAmE;;IAEnE,gEAAgE;;IAEhE,4EAA4E;;CAEpE,CAAC"}
@@ -10,12 +10,27 @@
10
10
  *
11
11
  * All values match the exact strings used in the source repos as of 2026-05.
12
12
  */
13
+ // ─── Service Ownership Constants ─────────────────────────────────────────────
14
+ /**
15
+ * Root directory (relative to HOME) where cc-discord checks out per-namespace
16
+ * workspace clones: `~/cc-discord-workspace/{namespace}`.
17
+ */
18
+ export const CC_DISCORD_WORKSPACE_ROOT = "cc-discord-workspace";
19
+ /**
20
+ * Directory name (relative to HOME) of the money-brain repo used by cc-tg
21
+ * for its dedicated session: `~/money-brain`.
22
+ */
23
+ export const CC_TG_WORKSPACE = "money-brain";
13
24
  // ─── Static Keys ─────────────────────────────────────────────────────────────
14
25
  /** Redis Stream written by cc-agent on every job status change. */
15
26
  export const EVENT_STREAM = "cca:event-stream";
16
27
  /** Consumer group name used by the coordinator to read from EVENT_STREAM. */
17
28
  export const COORDINATOR_GROUP = "coordinator";
18
- /** SET — canonical registry of meta-agent namespaces. */
29
+ /**
30
+ * SET — canonical registry of meta-agent namespaces.
31
+ * @deprecated cc-discord now maintains its own namespace registry.
32
+ * This key is no longer written by the cc-suite; kept for migration only.
33
+ */
19
34
  export const META_AGENTS_INDEX = "cca:meta:agents:index";
20
35
  /** SET — index of saved profile names. */
21
36
  export const PROFILES_INDEX = "cca:profiles:index";
@@ -96,10 +111,52 @@ export const chatOutgoingChannel = (namespace) => `cca:chat:outgoing:${namespace
96
111
  // ─── Meta-Agent Keys (dynamic) ───────────────────────────────────────────────
97
112
  /** STRING (JSON) — MetaAgentInfo state, TTL 30 days. */
98
113
  export const metaKey = (namespace) => `cca:meta:${namespace}`;
99
- /** LIST — input queue for a meta-agent (RPUSH by cc-tg, RPOP by cc-agent). */
114
+ /**
115
+ * LIST — input queue for a meta-agent (RPUSH by cc-tg, RPOP by cc-agent).
116
+ * @deprecated Use `discordMetaInputKey(ns)` — cc-discord now owns namespace sessions directly.
117
+ */
100
118
  export const metaInputKey = (namespace) => `cca:meta:${namespace}:input`;
101
- /** STRING (JSON) — live meta-agent status (typing, tool, etc.), TTL 7 days. */
119
+ /**
120
+ * STRING (JSON) — live meta-agent status (typing, tool, etc.), TTL 7 days.
121
+ * @deprecated Use `discordMetaStatusKey(ns)` — cc-discord now owns namespace sessions directly.
122
+ */
102
123
  export const metaAgentStatusKey = (namespace) => `cca:meta-agent:status:${namespace}`;
124
+ // ─── cc-discord Keys (dynamic) ───────────────────────────────────────────────
125
+ //
126
+ // cc-discord owns all namespace-scoped Claude sessions. It reads from the
127
+ // meta input queue, writes status, and publishes/subscribes to chat/notify
128
+ // channels — all under the "cca:discord:" prefix to avoid collisions with
129
+ // the old cc-agent-owned keys.
130
+ /** LIST — input queue for a cc-discord-managed namespace session (RPUSH/RPOP). */
131
+ export const discordMetaInputKey = (namespace) => `cca:discord:meta:${namespace}:input`;
132
+ /** STRING (JSON) — live status for a cc-discord-managed namespace session, TTL 7 days. */
133
+ export const discordMetaStatusKey = (namespace) => `cca:discord:meta:${namespace}:status`;
134
+ /** CHANNEL — cc-discord → UI outgoing chat messages (pub/sub). */
135
+ export const discordChatOutgoing = (namespace) => `cca:discord:chat:outgoing:${namespace}`;
136
+ /** LIST — cc-discord chat history (LPUSH capped at 500, LIFO). */
137
+ export const discordChatLog = (namespace) => `cca:discord:chat:log:${namespace}`;
138
+ /** CHANNEL — UI/Discord → cc-discord incoming chat messages (pub/sub). */
139
+ export const discordChatIncoming = (namespace) => `cca:discord:chat:incoming:${namespace}`;
140
+ /**
141
+ * CHANNEL + LIST — job-completion notifications for a Discord namespace.
142
+ *
143
+ * Same dual-purpose pattern as `notifyChannel`/`notifyListKey`: PUBLISH by
144
+ * coordinator (pub/sub) and RPUSH/RPOP delivery queue; Redis pub/sub and list
145
+ * namespaces are independent so the dual use is safe.
146
+ */
147
+ export const discordNotify = (namespace) => `cca:discord:notify:${namespace}`;
148
+ // ─── cc-tg Keys (static) ─────────────────────────────────────────────────────
149
+ //
150
+ // cc-tg owns a single dedicated money-brain session with no namespace scoping.
151
+ /** CHANNEL — cc-tg → UI outgoing chat messages (pub/sub). */
152
+ export const tgChatOutgoing = () => "cca:tg:chat:outgoing";
153
+ /** CHANNEL — UI/Telegram → cc-tg incoming chat messages (pub/sub). */
154
+ export const tgChatIncoming = () => "cca:tg:chat:incoming";
155
+ /**
156
+ * CHANNEL + LIST — job-completion notifications for the cc-tg session.
157
+ * Same dual-purpose pattern (pub/sub + RPOP poll fallback).
158
+ */
159
+ export const tgNotify = () => "cca:tg:notify";
103
160
  // ─── Learnings Keys (dynamic) ─────────────────────────────────────────────────
104
161
  /** LIST — learnings for a namespace (LPUSH capped at 50, LIFO), TTL 90 days. */
105
162
  export const learningsKey = (namespace) => `cca:learnings:${namespace}`;
@@ -1 +1 @@
1
- {"version":3,"file":"channels.js","sourceRoot":"","sources":["../../src/channels.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"channels.js","sourceRoot":"","sources":["../../src/channels.ts"],"names":[],"mappings":"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"}
@@ -127,16 +127,21 @@ export interface NotificationPayload {
127
127
  /**
128
128
  * Shape for all messages written to chat channels and the chat log.
129
129
  *
130
- * Ordering note: `cca:chat:log:{ns}` is LIFO (LPUSH). Consumers must reverse
131
- * the LRANGE result for chronological display.
130
+ * Ordering note: `cca:discord:chat:log:{ns}` and legacy `cca:chat:log:{ns}`
131
+ * are LIFO (LPUSH). Consumers must reverse the LRANGE result for chronological
132
+ * display.
132
133
  */
133
134
  export interface ChatMessage {
134
135
  id: string;
135
- source: "telegram" | "ui" | "claude" | "cc-tg";
136
+ source: "telegram" | "ui" | "claude" | "cc-tg" | "discord";
137
+ /** Which bridge service produced or consumed this message. */
138
+ service?: "cc-discord" | "cc-tg";
136
139
  role: "user" | "assistant" | "tool";
137
140
  content: string;
141
+ /** The namespace (Discord channel slug or "money-brain") this message belongs to. */
142
+ namespace?: string;
138
143
  timestamp: string;
139
- chatId: number;
144
+ chatId?: number;
140
145
  }
141
146
  /**
142
147
  * Persisted meta-agent state stored in `cca:meta:{namespace}`.
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gonzih/cc-wire",
3
- "version": "0.1.7",
3
+ "version": "0.2.0",
4
4
  "description": "Single source of truth for Redis channel names, key patterns, and message shapes across the cc-suite (cc-tg, cc-agent, cc-agent-ui)",
5
5
  "type": "module",
6
6
  "repository": {
@@ -31,7 +31,7 @@
31
31
  },
32
32
  "devDependencies": {
33
33
  "@types/node": "22.15.21",
34
- "tsx": "4.19.3",
34
+ "tsx": "4.22.4",
35
35
  "typescript": "5.8.3"
36
36
  },
37
37
  "keywords": [