@gonzih/cc-wire 0.1.1 → 0.1.3
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 +178 -0
- package/dist/cjs/channels.cjs +21 -1
- package/dist/esm/channels.d.ts +16 -0
- package/dist/esm/channels.d.ts.map +1 -1
- package/dist/esm/channels.js +17 -0
- package/dist/esm/channels.js.map +1 -1
- package/dist/esm/channels.test.d.ts +2 -0
- package/dist/esm/channels.test.d.ts.map +1 -0
- package/dist/esm/channels.test.js +46 -0
- package/dist/esm/channels.test.js.map +1 -0
- package/package.json +5 -2
package/README.md
ADDED
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
# @gonzih/cc-wire
|
|
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`).
|
|
4
|
+
|
|
5
|
+
No runtime dependencies. No Redis client. Just constants, builders, and types.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
```sh
|
|
10
|
+
npm install @gonzih/cc-wire
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Usage
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
import {
|
|
17
|
+
wikiKey,
|
|
18
|
+
wikiUpdatedKey,
|
|
19
|
+
notifyChannel,
|
|
20
|
+
notifyListKey,
|
|
21
|
+
jobKey,
|
|
22
|
+
jobIndexKey,
|
|
23
|
+
chatLogKey,
|
|
24
|
+
TTL,
|
|
25
|
+
CAP,
|
|
26
|
+
} from "@gonzih/cc-wire";
|
|
27
|
+
|
|
28
|
+
// Wiki keys
|
|
29
|
+
const hash = wikiKey("org/repo"); // "cca:wiki:org/repo"
|
|
30
|
+
const ts = wikiUpdatedKey("org/repo"); // "cca:wiki:org/repo:updated"
|
|
31
|
+
|
|
32
|
+
// Job keys
|
|
33
|
+
const job = jobKey("abc-123"); // "cca:job:abc-123"
|
|
34
|
+
const idx = jobIndexKey("myns"); // "cca:jobs:myns"
|
|
35
|
+
|
|
36
|
+
// Notify
|
|
37
|
+
const chan = notifyChannel("myns"); // "cca:notify:myns"
|
|
38
|
+
const list = notifyListKey("myns"); // "cca:notify:myns" (same key, dual-purpose)
|
|
39
|
+
|
|
40
|
+
// Constants
|
|
41
|
+
TTL.JOB_SECONDS // 604800
|
|
42
|
+
CAP.CHAT_LOG // 500
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Key Reference
|
|
46
|
+
|
|
47
|
+
### Wiki
|
|
48
|
+
|
|
49
|
+
| Builder | Pattern | Redis type | Description |
|
|
50
|
+
|---|---|---|---|
|
|
51
|
+
| `wikiKey(repoSlug)` | `cca:wiki:{repoSlug}` | HASH | Per-repo wiki pages. Field = page name, value = markdown. |
|
|
52
|
+
| `wikiUpdatedKey(repoSlug)` | `cca:wiki:{repoSlug}:updated` | STRING | ISO timestamp of last wiki update. |
|
|
53
|
+
|
|
54
|
+
### Jobs
|
|
55
|
+
|
|
56
|
+
| Builder | Pattern | Redis type | Description |
|
|
57
|
+
|---|---|---|---|
|
|
58
|
+
| `jobKey(id)` | `cca:job:{id}` | STRING (JSON) | Full JobRecord, TTL 7d. |
|
|
59
|
+
| `jobOutputKey(id)` | `cca:job:{id}:output` | LIST | Log lines (RPUSH/LRANGE), TTL 7d. |
|
|
60
|
+
| `jobSignalKey(id)` | `cca:job:{id}:signal` | STRING | Control signal: `cancel` \| `wake`. |
|
|
61
|
+
| `jobInputKey(id)` | `cca:job:{id}:input` | LIST | In-flight messages (RPUSH/RPOP). |
|
|
62
|
+
| `jobOutputLiveChannel(id)` | `cca:job:{id}:output:live` | CHANNEL | Live output pub/sub. |
|
|
63
|
+
| `jobDoneChannel(id)` | `cca:job:done:{id}` | CHANNEL | Job completion pub/sub. |
|
|
64
|
+
| `jobDoneQueueKey(id)` | `cca:job:done:{id}:queue` | LIST | LPUSH/BLPOP queue for `wait_for_job`, TTL 7d. |
|
|
65
|
+
| `jobIndexKey(ns)` | `cca:jobs:{ns}` | SET | Job IDs per namespace. |
|
|
66
|
+
|
|
67
|
+
### Event Stream
|
|
68
|
+
|
|
69
|
+
| Constant | Value | Description |
|
|
70
|
+
|---|---|---|
|
|
71
|
+
| `EVENT_STREAM` | `cca:event-stream` | Redis Stream — job status events. |
|
|
72
|
+
| `COORDINATOR_GROUP` | `coordinator` | Consumer group name. |
|
|
73
|
+
|
|
74
|
+
### Notify / Chat
|
|
75
|
+
|
|
76
|
+
| Builder | Pattern | Description |
|
|
77
|
+
|---|---|---|
|
|
78
|
+
| `notifyChannel(ns)` | `cca:notify:{ns}` | CHANNEL — coordinator publishes job completion. |
|
|
79
|
+
| `notifyListKey(ns)` | `cca:notify:{ns}` | LIST — delivery queue (RPUSH/RPOP). Same key as channel (safe — Redis pub/sub and list namespaces are independent). |
|
|
80
|
+
| `notifyLogKey(ns)` | `cca:notify-log:{ns}` | LIST — persistent audit log, capped at `CAP.NOTIFY_LOG` (100). |
|
|
81
|
+
| `chatLogKey(ns)` | `cca:chat:log:{ns}` | LIST — chat history, capped at `CAP.CHAT_LOG` (500), LIFO. |
|
|
82
|
+
| `chatIncomingChannel(ns)` | `cca:chat:incoming:{ns}` | CHANNEL — UI → cc-tg. |
|
|
83
|
+
| `chatOutgoingChannel(ns)` | `cca:chat:outgoing:{ns}` | CHANNEL — cc-tg → UI. |
|
|
84
|
+
|
|
85
|
+
### Meta-Agent
|
|
86
|
+
|
|
87
|
+
| Builder | Pattern | Description |
|
|
88
|
+
|---|---|---|
|
|
89
|
+
| `metaKey(ns)` | `cca:meta:{ns}` | STRING (JSON) — MetaAgentInfo state, TTL 30d. |
|
|
90
|
+
| `metaInputKey(ns)` | `cca:meta:{ns}:input` | LIST — input queue (RPUSH/RPOP). |
|
|
91
|
+
| `metaAgentStatusKey(ns)` | `cca:meta-agent:status:{ns}` | STRING (JSON) — live status, TTL 7d. |
|
|
92
|
+
| `META_AGENTS_INDEX` | `cca:meta:agents:index` | SET — canonical registry. |
|
|
93
|
+
|
|
94
|
+
### Wiki
|
|
95
|
+
|
|
96
|
+
| Builder | Pattern | Description |
|
|
97
|
+
|---|---|---|
|
|
98
|
+
| `wikiKey(repoSlug)` | `cca:wiki:{repoSlug}` | HASH — wiki pages. Field = page name, value = markdown. |
|
|
99
|
+
| `wikiUpdatedKey(repoSlug)` | `cca:wiki:{repoSlug}:updated` | STRING — ISO timestamp of last update. |
|
|
100
|
+
|
|
101
|
+
### Profiles
|
|
102
|
+
|
|
103
|
+
| Builder | Pattern | Description |
|
|
104
|
+
|---|---|---|
|
|
105
|
+
| `profileKey(name)` | `cca:profile:{name}` | STRING (JSON) — saved Profile. |
|
|
106
|
+
| `PROFILES_INDEX` | `cca:profiles:index` | SET — profile names. |
|
|
107
|
+
|
|
108
|
+
### Crons
|
|
109
|
+
|
|
110
|
+
| Builder | Pattern | Description |
|
|
111
|
+
|---|---|---|
|
|
112
|
+
| `cronsKey(ns)` | `cca:crons:{ns}` | STRING (JSON array) — cron definitions. |
|
|
113
|
+
| `deletedCronsKey(ns)` | `cca:deleted-crons:{ns}` | SET — tombstone IDs, TTL 7d. |
|
|
114
|
+
|
|
115
|
+
### Learnings
|
|
116
|
+
|
|
117
|
+
| Builder | Pattern | Description |
|
|
118
|
+
|---|---|---|
|
|
119
|
+
| `learningsKey(ns)` | `cca:learnings:{ns}` | LIST — learnings (LPUSH, capped at `CAP.LEARNINGS` = 50), TTL 90d, LIFO. |
|
|
120
|
+
|
|
121
|
+
### Plans / Coordinator
|
|
122
|
+
|
|
123
|
+
| Builder | Pattern | Description |
|
|
124
|
+
|---|---|---|
|
|
125
|
+
| `planKey(id)` | `cca:plan:{id}` | STRING (JSON) — PlanRecord, TTL 30d. |
|
|
126
|
+
| `coordinatorPlanKey(jobId)` | `cca:coordinator:plan:{jobId}` | STRING — coordinator plan JSON. |
|
|
127
|
+
|
|
128
|
+
### Swarm
|
|
129
|
+
|
|
130
|
+
| Builder | Pattern | Description |
|
|
131
|
+
|---|---|---|
|
|
132
|
+
| `swarmKey(id)` | `cca:swarm:{id}` | STRING (JSON) — SwarmRecord. |
|
|
133
|
+
| `SWARM_REQUESTS_KEY` | `cca:swarm:requests` | LIST — task request queue (LPUSH). |
|
|
134
|
+
|
|
135
|
+
### Version / Token
|
|
136
|
+
|
|
137
|
+
| Constant | Value | Description |
|
|
138
|
+
|---|---|---|
|
|
139
|
+
| `CC_AGENT_VERSION_KEY` | `cca:meta:cc-agent:version` | STRING — running cc-agent version. |
|
|
140
|
+
| `CC_TG_VERSION_KEY` | `cca:meta:cc-tg:version` | STRING — running cc-tg version. |
|
|
141
|
+
| `TOKEN_INDEX_KEY` | `cca:token:index` | STRING — token rotation index. |
|
|
142
|
+
|
|
143
|
+
### Voice (cc-tg only)
|
|
144
|
+
|
|
145
|
+
| Constant | Value | Description |
|
|
146
|
+
|---|---|---|
|
|
147
|
+
| `VOICE_PENDING_KEY` | `voice:pending` | LIST — transcription pending queue. |
|
|
148
|
+
| `VOICE_FAILED_KEY` | `voice:failed` | LIST — failure log, TTL 48h. |
|
|
149
|
+
|
|
150
|
+
## Constants
|
|
151
|
+
|
|
152
|
+
```typescript
|
|
153
|
+
TTL.JOB_SECONDS // 604800 (7 days)
|
|
154
|
+
TTL.PLAN_SECONDS // 2592000 (30 days)
|
|
155
|
+
TTL.LEARNINGS_SECONDS // 7776000 (90 days)
|
|
156
|
+
TTL.VOICE_FAILED_SECONDS // 172800 (48 hours)
|
|
157
|
+
|
|
158
|
+
CAP.NOTIFY_LOG // 100
|
|
159
|
+
CAP.CHAT_LOG // 500
|
|
160
|
+
CAP.LEARNINGS // 50
|
|
161
|
+
CAP.EVENT_STREAM // 500
|
|
162
|
+
|
|
163
|
+
TIMING.COORDINATOR_POLL_MS // 2000
|
|
164
|
+
TIMING.DEPENDENCY_TICK_MS // 3000
|
|
165
|
+
TIMING.INPUT_POLL_INTERVAL_MS // 3000
|
|
166
|
+
TIMING.META_AGENT_FLUSH_DELAY_MS // 1500
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## Development
|
|
170
|
+
|
|
171
|
+
```sh
|
|
172
|
+
npm run build # compile ESM + CJS
|
|
173
|
+
npm test # run tests (Node built-in test runner via tsx)
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## License
|
|
177
|
+
|
|
178
|
+
MIT
|
package/dist/cjs/channels.cjs
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
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.deletedCronsKey = exports.cronsKey = exports.learningsKey = exports.metaAgentStatusKey = exports.metaInputKey = exports.metaKey = exports.chatOutgoingChannel = exports.chatIncomingChannel = exports.chatLogKey = exports.notifyLogKey = 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.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.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;
|
|
16
16
|
// ─── Static Keys ─────────────────────────────────────────────────────────────
|
|
17
17
|
/** Redis Stream written by cc-agent on every job status change. */
|
|
18
18
|
exports.EVENT_STREAM = "cca:event-stream";
|
|
@@ -79,6 +79,16 @@ exports.profileKey = profileKey;
|
|
|
79
79
|
/** CHANNEL — job completion notifications published by coordinator (pub/sub). */
|
|
80
80
|
const notifyChannel = (namespace) => `cca:notify:${namespace}`;
|
|
81
81
|
exports.notifyChannel = notifyChannel;
|
|
82
|
+
/**
|
|
83
|
+
* LIST — notification delivery queue (RPUSH by cc-agent, RPOP by cc-tg).
|
|
84
|
+
*
|
|
85
|
+
* Same Redis key as `notifyChannel`; pub/sub channels and list keys occupy
|
|
86
|
+
* separate namespaces in Redis so the dual use is safe. cc-tg polls this
|
|
87
|
+
* list every 5 s via RPOP to catch notifications that arrived while the
|
|
88
|
+
* subscriber was disconnected.
|
|
89
|
+
*/
|
|
90
|
+
const notifyListKey = (namespace) => `cca:notify:${namespace}`;
|
|
91
|
+
exports.notifyListKey = notifyListKey;
|
|
82
92
|
/** LIST — notification log (LPUSH capped at 100, LIFO). */
|
|
83
93
|
const notifyLogKey = (namespace) => `cca:notify-log:${namespace}`;
|
|
84
94
|
exports.notifyLogKey = notifyLogKey;
|
|
@@ -112,6 +122,16 @@ exports.cronsKey = cronsKey;
|
|
|
112
122
|
/** SET — tombstone set of deleted cron IDs for a namespace, TTL 7 days. */
|
|
113
123
|
const deletedCronsKey = (namespace) => `cca:deleted-crons:${namespace}`;
|
|
114
124
|
exports.deletedCronsKey = deletedCronsKey;
|
|
125
|
+
// ─── Wiki Keys (dynamic) ──────────────────────────────────────────────────────
|
|
126
|
+
/**
|
|
127
|
+
* HASH — per-repo wiki pages.
|
|
128
|
+
* field = page name, value = markdown string.
|
|
129
|
+
*/
|
|
130
|
+
const wikiKey = (repoSlug) => `cca:wiki:${repoSlug}`;
|
|
131
|
+
exports.wikiKey = wikiKey;
|
|
132
|
+
/** STRING — ISO timestamp of last update for a repo's wiki. */
|
|
133
|
+
const wikiUpdatedKey = (repoSlug) => `cca:wiki:${repoSlug}:updated`;
|
|
134
|
+
exports.wikiUpdatedKey = wikiUpdatedKey;
|
|
115
135
|
// ─── Swarm Keys (dynamic) ─────────────────────────────────────────────────────
|
|
116
136
|
/** STRING (JSON) — SwarmRecord for a given swarm ID. */
|
|
117
137
|
const swarmKey = (swarmId) => `cca:swarm:${swarmId}`;
|
package/dist/esm/channels.d.ts
CHANGED
|
@@ -58,6 +58,15 @@ export declare const planKey: (planId: string) => string;
|
|
|
58
58
|
export declare const profileKey: (name: string) => string;
|
|
59
59
|
/** CHANNEL — job completion notifications published by coordinator (pub/sub). */
|
|
60
60
|
export declare const notifyChannel: (namespace: string) => string;
|
|
61
|
+
/**
|
|
62
|
+
* LIST — notification delivery queue (RPUSH by cc-agent, RPOP by cc-tg).
|
|
63
|
+
*
|
|
64
|
+
* Same Redis key as `notifyChannel`; pub/sub channels and list keys occupy
|
|
65
|
+
* separate namespaces in Redis so the dual use is safe. cc-tg polls this
|
|
66
|
+
* list every 5 s via RPOP to catch notifications that arrived while the
|
|
67
|
+
* subscriber was disconnected.
|
|
68
|
+
*/
|
|
69
|
+
export declare const notifyListKey: (namespace: string) => string;
|
|
61
70
|
/** LIST — notification log (LPUSH capped at 100, LIFO). */
|
|
62
71
|
export declare const notifyLogKey: (namespace: string) => string;
|
|
63
72
|
/** LIST — chat history (LPUSH capped at 500, LIFO — newest at index 0). */
|
|
@@ -78,6 +87,13 @@ export declare const learningsKey: (namespace: string) => string;
|
|
|
78
87
|
export declare const cronsKey: (namespace: string) => string;
|
|
79
88
|
/** SET — tombstone set of deleted cron IDs for a namespace, TTL 7 days. */
|
|
80
89
|
export declare const deletedCronsKey: (namespace: string) => string;
|
|
90
|
+
/**
|
|
91
|
+
* HASH — per-repo wiki pages.
|
|
92
|
+
* field = page name, value = markdown string.
|
|
93
|
+
*/
|
|
94
|
+
export declare const wikiKey: (repoSlug: string) => `cca:wiki:${string}`;
|
|
95
|
+
/** STRING — ISO timestamp of last update for a repo's wiki. */
|
|
96
|
+
export declare const wikiUpdatedKey: (repoSlug: string) => `cca:wiki:${string}:updated`;
|
|
81
97
|
/** STRING (JSON) — SwarmRecord for a given swarm ID. */
|
|
82
98
|
export declare const swarmKey: (swarmId: string) => string;
|
|
83
99
|
export declare const TTL: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channels.d.ts","sourceRoot":"","sources":["../../src/channels.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,mEAAmE;AACnE,eAAO,MAAM,YAAY,qBAAqB,CAAC;AAE/C,6EAA6E;AAC7E,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAE/C,yDAAyD;AACzD,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,2DAA2D;AAC3D,eAAO,MAAM,YAAY,GAAI,WAAW,MAAM,KAAG,MAClB,CAAC;AAEhC,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,8EAA8E;AAC9E,eAAO,MAAM,YAAY,GAAI,WAAW,MAAM,KAAG,MAClB,CAAC;AAEhC,+EAA+E;AAC/E,eAAO,MAAM,kBAAkB,GAAI,WAAW,MAAM,KAAG,MACjB,CAAC;AAIvC,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,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"}
|
|
1
|
+
{"version":3,"file":"channels.d.ts","sourceRoot":"","sources":["../../src/channels.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/channels.js
CHANGED
|
@@ -64,6 +64,15 @@ export const profileKey = (name) => `cca:profile:${name}`;
|
|
|
64
64
|
// ─── Notify / Chat Keys (dynamic) ────────────────────────────────────────────
|
|
65
65
|
/** CHANNEL — job completion notifications published by coordinator (pub/sub). */
|
|
66
66
|
export const notifyChannel = (namespace) => `cca:notify:${namespace}`;
|
|
67
|
+
/**
|
|
68
|
+
* LIST — notification delivery queue (RPUSH by cc-agent, RPOP by cc-tg).
|
|
69
|
+
*
|
|
70
|
+
* Same Redis key as `notifyChannel`; pub/sub channels and list keys occupy
|
|
71
|
+
* separate namespaces in Redis so the dual use is safe. cc-tg polls this
|
|
72
|
+
* list every 5 s via RPOP to catch notifications that arrived while the
|
|
73
|
+
* subscriber was disconnected.
|
|
74
|
+
*/
|
|
75
|
+
export const notifyListKey = (namespace) => `cca:notify:${namespace}`;
|
|
67
76
|
/** LIST — notification log (LPUSH capped at 100, LIFO). */
|
|
68
77
|
export const notifyLogKey = (namespace) => `cca:notify-log:${namespace}`;
|
|
69
78
|
/** LIST — chat history (LPUSH capped at 500, LIFO — newest at index 0). */
|
|
@@ -87,6 +96,14 @@ export const learningsKey = (namespace) => `cca:learnings:${namespace}`;
|
|
|
87
96
|
export const cronsKey = (namespace) => `cca:crons:${namespace}`;
|
|
88
97
|
/** SET — tombstone set of deleted cron IDs for a namespace, TTL 7 days. */
|
|
89
98
|
export const deletedCronsKey = (namespace) => `cca:deleted-crons:${namespace}`;
|
|
99
|
+
// ─── Wiki Keys (dynamic) ──────────────────────────────────────────────────────
|
|
100
|
+
/**
|
|
101
|
+
* HASH — per-repo wiki pages.
|
|
102
|
+
* field = page name, value = markdown string.
|
|
103
|
+
*/
|
|
104
|
+
export const wikiKey = (repoSlug) => `cca:wiki:${repoSlug}`;
|
|
105
|
+
/** STRING — ISO timestamp of last update for a repo's wiki. */
|
|
106
|
+
export const wikiUpdatedKey = (repoSlug) => `cca:wiki:${repoSlug}:updated`;
|
|
90
107
|
// ─── Swarm Keys (dynamic) ─────────────────────────────────────────────────────
|
|
91
108
|
/** STRING (JSON) — SwarmRecord for a given swarm ID. */
|
|
92
109
|
export const swarmKey = (swarmId) => `cca:swarm:${swarmId}`;
|
package/dist/esm/channels.js.map
CHANGED
|
@@ -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":"AAAA;;;;;;;;;;;GAWG;AAEH,gFAAgF;AAEhF,mEAAmE;AACnE,MAAM,CAAC,MAAM,YAAY,GAAG,kBAAkB,CAAC;AAE/C,6EAA6E;AAC7E,MAAM,CAAC,MAAM,iBAAiB,GAAG,aAAa,CAAC;AAE/C,yDAAyD;AACzD,MAAM,CAAC,MAAM,iBAAiB,GAAG,uBAAuB,CAAC;AAEzD,0CAA0C;AAC1C,MAAM,CAAC,MAAM,cAAc,GAAG,oBAAoB,CAAC;AAEnD,wDAAwD;AACxD,MAAM,CAAC,MAAM,eAAe,GAAG,iBAAiB,CAAC;AAEjD,6CAA6C;AAC7C,MAAM,CAAC,MAAM,oBAAoB,GAAG,2BAA2B,CAAC;AAEhE,qEAAqE;AACrE,MAAM,CAAC,MAAM,cAAc,GAAG,YAAY,CAAC;AAE3C,0EAA0E;AAC1E,MAAM,CAAC,MAAM,gBAAgB,GAAG,WAAW,CAAC;AAE5C,0CAA0C;AAC1C,MAAM,CAAC,MAAM,iBAAiB,GAAG,wBAAwB,CAAC;AAE1D,4EAA4E;AAC5E,MAAM,CAAC,MAAM,iBAAiB,GAAG,eAAe,CAAC;AAEjD,qEAAqE;AACrE,MAAM,CAAC,MAAM,gBAAgB,GAAG,cAAc,CAAC;AAE/C,+CAA+C;AAC/C,MAAM,CAAC,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AAEvD,iFAAiF;AAEjF,2CAA2C;AAC3C,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,SAAiB,EAAU,EAAE,CACvD,YAAY,SAAS,EAAE,CAAC;AAE1B,kDAAkD;AAClD,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAAa,EAAU,EAAE,CAC9C,WAAW,KAAK,EAAE,CAAC;AAErB,oDAAoD;AACpD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAa,EAAU,EAAE,CACpD,WAAW,KAAK,SAAS,CAAC;AAE5B,6EAA6E;AAC7E,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAa,EAAU,EAAE,CACpD,WAAW,KAAK,SAAS,CAAC;AAE5B,uEAAuE;AACvE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAa,EAAU,EAAE,CACnD,WAAW,KAAK,QAAQ,CAAC;AAE3B,uEAAuE;AACvE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAa,EAAU,EAAE,CAC5D,WAAW,KAAK,cAAc,CAAC;AAEjC,uDAAuD;AACvD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAa,EAAU,EAAE,CACtD,gBAAgB,KAAK,EAAE,CAAC;AAE1B,6DAA6D;AAC7D,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAAa,EAAU,EAAE,CACvD,gBAAgB,KAAK,QAAQ,CAAC;AAEhC,iFAAiF;AAEjF,qDAAqD;AACrD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAa,EAAU,EAAE,CAC1D,wBAAwB,KAAK,EAAE,CAAC;AAElC,iFAAiF;AAEjF,+CAA+C;AAC/C,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,MAAc,EAAU,EAAE,CAChD,YAAY,MAAM,EAAE,CAAC;AAEvB,iFAAiF;AAEjF,qCAAqC;AACrC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAU,EAAE,CACjD,eAAe,IAAI,EAAE,CAAC;AAExB,gFAAgF;AAEhF,iFAAiF;AACjF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,SAAiB,EAAU,EAAE,CACzD,cAAc,SAAS,EAAE,CAAC;AAE5B;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,SAAiB,EAAU,EAAE,CACzD,cAAc,SAAS,EAAE,CAAC;AAE5B,2DAA2D;AAC3D,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,SAAiB,EAAU,EAAE,CACxD,kBAAkB,SAAS,EAAE,CAAC;AAEhC,2EAA2E;AAC3E,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,SAAiB,EAAU,EAAE,CACtD,gBAAgB,SAAS,EAAE,CAAC;AAE9B,+CAA+C;AAC/C,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,SAAiB,EAAU,EAAE,CAC/D,qBAAqB,SAAS,EAAE,CAAC;AAEnC,4DAA4D;AAC5D,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,SAAiB,EAAU,EAAE,CAC/D,qBAAqB,SAAS,EAAE,CAAC;AAEnC,gFAAgF;AAEhF,wDAAwD;AACxD,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,SAAiB,EAAU,EAAE,CACnD,YAAY,SAAS,EAAE,CAAC;AAE1B,8EAA8E;AAC9E,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,SAAiB,EAAU,EAAE,CACxD,YAAY,SAAS,QAAQ,CAAC;AAEhC,+EAA+E;AAC/E,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,SAAiB,EAAU,EAAE,CAC9D,yBAAyB,SAAS,EAAE,CAAC;AAEvC,iFAAiF;AAEjF,gFAAgF;AAChF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,SAAiB,EAAU,EAAE,CACxD,iBAAiB,SAAS,EAAE,CAAC;AAE/B,iFAAiF;AAEjF,kEAAkE;AAClE,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,SAAiB,EAAU,EAAE,CACpD,aAAa,SAAS,EAAE,CAAC;AAE3B,2EAA2E;AAC3E,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,SAAiB,EAAU,EAAE,CAC3D,qBAAqB,SAAS,EAAE,CAAC;AAEnC,iFAAiF;AAEjF;;;GAGG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,QAAgB,EAAE,EAAE,CAC1C,YAAY,QAAQ,EAAW,CAAC;AAElC,+DAA+D;AAC/D,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,QAAgB,EAAE,EAAE,CACjD,YAAY,QAAQ,UAAmB,CAAC;AAE1C,iFAAiF;AAEjF,wDAAwD;AACxD,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,OAAe,EAAU,EAAE,CAClD,aAAa,OAAO,EAAE,CAAC;AAEzB,iFAAiF;AAEjF,MAAM,CAAC,MAAM,GAAG,GAAG;IACjB,qFAAqF;IACrF,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;IAC7B,oDAAoD;IACpD,YAAY,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;IAC/B,4CAA4C;IAC5C,iBAAiB,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;IACpC,+CAA+C;IAC/C,oBAAoB,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;CAC1B,CAAC;AAEX,iFAAiF;AAEjF,MAAM,CAAC,MAAM,GAAG,GAAG;IACjB,4DAA4D;IAC5D,UAAU,EAAE,GAAG;IACf,0DAA0D;IAC1D,QAAQ,EAAE,GAAG;IACb,2DAA2D;IAC3D,SAAS,EAAE,EAAE;IACb,4DAA4D;IAC5D,YAAY,EAAE,GAAG;CACT,CAAC;AAEX,iFAAiF;AAEjF,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,6EAA6E;IAC7E,mBAAmB,EAAE,IAAI;IACzB,mEAAmE;IACnE,kBAAkB,EAAE,IAAI;IACxB,gEAAgE;IAChE,sBAAsB,EAAE,IAAI;IAC5B,4EAA4E;IAC5E,yBAAyB,EAAE,IAAI;CACvB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channels.test.d.ts","sourceRoot":"","sources":["../../src/channels.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { strict as assert } from "node:assert";
|
|
2
|
+
import { describe, it } from "node:test";
|
|
3
|
+
import { wikiKey, wikiUpdatedKey, notifyChannel, notifyListKey, notifyLogKey, jobKey, jobIndexKey, chatLogKey, chatIncomingChannel, chatOutgoingChannel, metaKey, cronsKey, swarmKey, planKey, profileKey, learningsKey, TTL, CAP, } from "./channels.js";
|
|
4
|
+
describe("wiki keys", () => {
|
|
5
|
+
it("wikiKey builds correct hash key", () => {
|
|
6
|
+
assert.equal(wikiKey("gonzih/cc-agent"), "cca:wiki:gonzih/cc-agent");
|
|
7
|
+
});
|
|
8
|
+
it("wikiUpdatedKey builds correct timestamp key", () => {
|
|
9
|
+
assert.equal(wikiUpdatedKey("gonzih/cc-agent"), "cca:wiki:gonzih/cc-agent:updated");
|
|
10
|
+
});
|
|
11
|
+
it("wikiKey and wikiUpdatedKey keys are distinct", () => {
|
|
12
|
+
const slug = "org/repo";
|
|
13
|
+
assert.notEqual(wikiKey(slug), wikiUpdatedKey(slug));
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
describe("notify keys", () => {
|
|
17
|
+
it("notifyChannel", () => assert.equal(notifyChannel("myns"), "cca:notify:myns"));
|
|
18
|
+
it("notifyListKey matches notifyChannel (dual-purpose key)", () => assert.equal(notifyListKey("myns"), notifyChannel("myns")));
|
|
19
|
+
it("notifyLogKey", () => assert.equal(notifyLogKey("myns"), "cca:notify-log:myns"));
|
|
20
|
+
});
|
|
21
|
+
describe("job keys", () => {
|
|
22
|
+
it("jobKey", () => assert.equal(jobKey("abc"), "cca:job:abc"));
|
|
23
|
+
it("jobIndexKey", () => assert.equal(jobIndexKey("ns"), "cca:jobs:ns"));
|
|
24
|
+
});
|
|
25
|
+
describe("chat keys", () => {
|
|
26
|
+
it("chatLogKey", () => assert.equal(chatLogKey("ns"), "cca:chat:log:ns"));
|
|
27
|
+
it("chatIncomingChannel", () => assert.equal(chatIncomingChannel("ns"), "cca:chat:incoming:ns"));
|
|
28
|
+
it("chatOutgoingChannel", () => assert.equal(chatOutgoingChannel("ns"), "cca:chat:outgoing:ns"));
|
|
29
|
+
});
|
|
30
|
+
describe("misc keys", () => {
|
|
31
|
+
it("metaKey", () => assert.equal(metaKey("ns"), "cca:meta:ns"));
|
|
32
|
+
it("cronsKey", () => assert.equal(cronsKey("ns"), "cca:crons:ns"));
|
|
33
|
+
it("swarmKey", () => assert.equal(swarmKey("id"), "cca:swarm:id"));
|
|
34
|
+
it("planKey", () => assert.equal(planKey("id"), "cca:plan:id"));
|
|
35
|
+
it("profileKey", () => assert.equal(profileKey("default"), "cca:profile:default"));
|
|
36
|
+
it("learningsKey", () => assert.equal(learningsKey("ns"), "cca:learnings:ns"));
|
|
37
|
+
});
|
|
38
|
+
describe("TTL and CAP constants are positive integers", () => {
|
|
39
|
+
for (const [k, v] of Object.entries(TTL)) {
|
|
40
|
+
it(`TTL.${k} > 0`, () => assert.ok(v > 0, `${k} should be positive`));
|
|
41
|
+
}
|
|
42
|
+
for (const [k, v] of Object.entries(CAP)) {
|
|
43
|
+
it(`CAP.${k} > 0`, () => assert.ok(v > 0, `${k} should be positive`));
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
//# sourceMappingURL=channels.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channels.test.js","sourceRoot":"","sources":["../../src/channels.test.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.
|
|
3
|
+
"version": "0.1.3",
|
|
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": {
|
|
@@ -26,9 +26,12 @@
|
|
|
26
26
|
"scripts": {
|
|
27
27
|
"build": "npm run build:esm && npm run build:cjs",
|
|
28
28
|
"build:esm": "tsc -p tsconfig.json",
|
|
29
|
-
"build:cjs": "tsc -p tsconfig.cjs.json && node scripts/fix-cjs.mjs"
|
|
29
|
+
"build:cjs": "tsc -p tsconfig.cjs.json && node scripts/fix-cjs.mjs",
|
|
30
|
+
"test": "node --import tsx/esm --test src/channels.test.ts"
|
|
30
31
|
},
|
|
31
32
|
"devDependencies": {
|
|
33
|
+
"@types/node": "22.15.21",
|
|
34
|
+
"tsx": "4.19.3",
|
|
32
35
|
"typescript": "5.8.3"
|
|
33
36
|
},
|
|
34
37
|
"keywords": [
|