@essentialai/cogent-server 2.0.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/.env.example +68 -0
- package/CHANGELOG.md +16 -0
- package/Caddyfile +8 -0
- package/Dockerfile +46 -0
- package/LICENSE +190 -0
- package/README.md +89 -0
- package/config.json.example +16 -0
- package/dist/__tests__/helpers.d.ts +56 -0
- package/dist/__tests__/helpers.d.ts.map +1 -0
- package/dist/__tests__/helpers.js +138 -0
- package/dist/__tests__/helpers.js.map +1 -0
- package/dist/app.d.ts +38 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +60 -0
- package/dist/app.js.map +1 -0
- package/dist/config.d.ts +88 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +148 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +102 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/auth.d.ts +15 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +47 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/middleware/error-handler.d.ts +14 -0
- package/dist/middleware/error-handler.d.ts.map +1 -0
- package/dist/middleware/error-handler.js +26 -0
- package/dist/middleware/error-handler.js.map +1 -0
- package/dist/middleware/not-found.d.ts +8 -0
- package/dist/middleware/not-found.d.ts.map +1 -0
- package/dist/middleware/not-found.js +12 -0
- package/dist/middleware/not-found.js.map +1 -0
- package/dist/middleware/request-logger.d.ts +17 -0
- package/dist/middleware/request-logger.d.ts.map +1 -0
- package/dist/middleware/request-logger.js +65 -0
- package/dist/middleware/request-logger.js.map +1 -0
- package/dist/middleware/ws-auth.d.ts +21 -0
- package/dist/middleware/ws-auth.d.ts.map +1 -0
- package/dist/middleware/ws-auth.js +59 -0
- package/dist/middleware/ws-auth.js.map +1 -0
- package/dist/routes/health.d.ts +11 -0
- package/dist/routes/health.d.ts.map +1 -0
- package/dist/routes/health.js +34 -0
- package/dist/routes/health.js.map +1 -0
- package/dist/routes/messages.d.ts +19 -0
- package/dist/routes/messages.d.ts.map +1 -0
- package/dist/routes/messages.js +154 -0
- package/dist/routes/messages.js.map +1 -0
- package/dist/routes/peers.d.ts +17 -0
- package/dist/routes/peers.d.ts.map +1 -0
- package/dist/routes/peers.js +169 -0
- package/dist/routes/peers.js.map +1 -0
- package/dist/routes/poll.d.ts +15 -0
- package/dist/routes/poll.d.ts.map +1 -0
- package/dist/routes/poll.js +97 -0
- package/dist/routes/poll.js.map +1 -0
- package/dist/routes/sessions.d.ts +14 -0
- package/dist/routes/sessions.d.ts.map +1 -0
- package/dist/routes/sessions.js +113 -0
- package/dist/routes/sessions.js.map +1 -0
- package/dist/routes/ui.d.ts +21 -0
- package/dist/routes/ui.d.ts.map +1 -0
- package/dist/routes/ui.js +173 -0
- package/dist/routes/ui.js.map +1 -0
- package/dist/routes/validation-hook.d.ts +18 -0
- package/dist/routes/validation-hook.d.ts.map +1 -0
- package/dist/routes/validation-hook.js +24 -0
- package/dist/routes/validation-hook.js.map +1 -0
- package/dist/services/auth-service.d.ts +48 -0
- package/dist/services/auth-service.d.ts.map +1 -0
- package/dist/services/auth-service.js +63 -0
- package/dist/services/auth-service.js.map +1 -0
- package/dist/services/connection-manager.d.ts +108 -0
- package/dist/services/connection-manager.d.ts.map +1 -0
- package/dist/services/connection-manager.js +216 -0
- package/dist/services/connection-manager.js.map +1 -0
- package/dist/services/message-queue.d.ts +56 -0
- package/dist/services/message-queue.d.ts.map +1 -0
- package/dist/services/message-queue.js +164 -0
- package/dist/services/message-queue.js.map +1 -0
- package/dist/services/peer-cleanup.d.ts +39 -0
- package/dist/services/peer-cleanup.d.ts.map +1 -0
- package/dist/services/peer-cleanup.js +96 -0
- package/dist/services/peer-cleanup.js.map +1 -0
- package/dist/services/session-cleanup.d.ts +44 -0
- package/dist/services/session-cleanup.d.ts.map +1 -0
- package/dist/services/session-cleanup.js +100 -0
- package/dist/services/session-cleanup.js.map +1 -0
- package/dist/services/session-store.d.ts +103 -0
- package/dist/services/session-store.d.ts.map +1 -0
- package/dist/services/session-store.js +292 -0
- package/dist/services/session-store.js.map +1 -0
- package/dist/services/stats-service.d.ts +48 -0
- package/dist/services/stats-service.d.ts.map +1 -0
- package/dist/services/stats-service.js +77 -0
- package/dist/services/stats-service.js.map +1 -0
- package/dist/types.d.ts +60 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/ui/components/Footer.d.ts +7 -0
- package/dist/ui/components/Footer.d.ts.map +1 -0
- package/dist/ui/components/Footer.js +17 -0
- package/dist/ui/components/Footer.js.map +1 -0
- package/dist/ui/components/Layout.d.ts +13 -0
- package/dist/ui/components/Layout.d.ts.map +1 -0
- package/dist/ui/components/Layout.js +11 -0
- package/dist/ui/components/Layout.js.map +1 -0
- package/dist/ui/components/NavBar.d.ts +12 -0
- package/dist/ui/components/NavBar.d.ts.map +1 -0
- package/dist/ui/components/NavBar.js +60 -0
- package/dist/ui/components/NavBar.js.map +1 -0
- package/dist/ui/components/StatCard.d.ts +14 -0
- package/dist/ui/components/StatCard.d.ts.map +1 -0
- package/dist/ui/components/StatCard.js +32 -0
- package/dist/ui/components/StatCard.js.map +1 -0
- package/dist/ui/components/Terminal.d.ts +13 -0
- package/dist/ui/components/Terminal.d.ts.map +1 -0
- package/dist/ui/components/Terminal.js +37 -0
- package/dist/ui/components/Terminal.js.map +1 -0
- package/dist/ui/pages/AdminDashboard.d.ts +13 -0
- package/dist/ui/pages/AdminDashboard.d.ts.map +1 -0
- package/dist/ui/pages/AdminDashboard.js +59 -0
- package/dist/ui/pages/AdminDashboard.js.map +1 -0
- package/dist/ui/pages/HowToPage.d.ts +8 -0
- package/dist/ui/pages/HowToPage.d.ts.map +1 -0
- package/dist/ui/pages/HowToPage.js +312 -0
- package/dist/ui/pages/HowToPage.js.map +1 -0
- package/dist/ui/pages/LandingPage.d.ts +13 -0
- package/dist/ui/pages/LandingPage.d.ts.map +1 -0
- package/dist/ui/pages/LandingPage.js +160 -0
- package/dist/ui/pages/LandingPage.js.map +1 -0
- package/dist/ui/pages/MessageLog.d.ts +25 -0
- package/dist/ui/pages/MessageLog.d.ts.map +1 -0
- package/dist/ui/pages/MessageLog.js +146 -0
- package/dist/ui/pages/MessageLog.js.map +1 -0
- package/dist/ui/pages/SessionDetail.d.ts +14 -0
- package/dist/ui/pages/SessionDetail.d.ts.map +1 -0
- package/dist/ui/pages/SessionDetail.js +165 -0
- package/dist/ui/pages/SessionDetail.js.map +1 -0
- package/dist/ui/pages/SessionList.d.ts +22 -0
- package/dist/ui/pages/SessionList.d.ts.map +1 -0
- package/dist/ui/pages/SessionList.js +88 -0
- package/dist/ui/pages/SessionList.js.map +1 -0
- package/dist/ui/styles/theme.d.ts +35 -0
- package/dist/ui/styles/theme.d.ts.map +1 -0
- package/dist/ui/styles/theme.js +65 -0
- package/dist/ui/styles/theme.js.map +1 -0
- package/dist/ws/frames.d.ts +82 -0
- package/dist/ws/frames.d.ts.map +1 -0
- package/dist/ws/frames.js +68 -0
- package/dist/ws/frames.js.map +1 -0
- package/dist/ws/handler.d.ts +26 -0
- package/dist/ws/handler.d.ts.map +1 -0
- package/dist/ws/handler.js +72 -0
- package/dist/ws/handler.js.map +1 -0
- package/dist/ws/heartbeat.d.ts +18 -0
- package/dist/ws/heartbeat.d.ts.map +1 -0
- package/dist/ws/heartbeat.js +39 -0
- package/dist/ws/heartbeat.js.map +1 -0
- package/docker-compose.yml +38 -0
- package/nginx.conf.example +63 -0
- package/package.json +61 -0
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "hono/jsx/jsx-runtime";
|
|
2
|
+
import { css } from "hono/css";
|
|
3
|
+
import { Layout } from "../components/Layout.js";
|
|
4
|
+
import { Terminal } from "../components/Terminal.js";
|
|
5
|
+
import { colors } from "../styles/theme.js";
|
|
6
|
+
// --- Styles ---
|
|
7
|
+
const container = css `
|
|
8
|
+
max-width: 960px;
|
|
9
|
+
margin: 0 auto;
|
|
10
|
+
padding: 2rem 1.5rem;
|
|
11
|
+
`;
|
|
12
|
+
const heroSection = css `
|
|
13
|
+
text-align: center;
|
|
14
|
+
padding: 2rem 0 1.5rem;
|
|
15
|
+
`;
|
|
16
|
+
const heroTitle = css `
|
|
17
|
+
font-size: 2rem;
|
|
18
|
+
font-weight: 700;
|
|
19
|
+
color: ${colors.green};
|
|
20
|
+
margin: 0 0 0.75rem 0;
|
|
21
|
+
`;
|
|
22
|
+
const heroSubtitle = css `
|
|
23
|
+
font-size: 0.95rem;
|
|
24
|
+
color: ${colors.textMuted};
|
|
25
|
+
margin: 0 0 0.5rem 0;
|
|
26
|
+
line-height: 1.6;
|
|
27
|
+
max-width: 700px;
|
|
28
|
+
margin-left: auto;
|
|
29
|
+
margin-right: auto;
|
|
30
|
+
`;
|
|
31
|
+
const backLink = css `
|
|
32
|
+
display: inline-block;
|
|
33
|
+
color: ${colors.cyan};
|
|
34
|
+
font-size: 0.85rem;
|
|
35
|
+
margin-bottom: 1.5rem;
|
|
36
|
+
&:hover {
|
|
37
|
+
text-decoration: underline;
|
|
38
|
+
}
|
|
39
|
+
`;
|
|
40
|
+
const toc = css `
|
|
41
|
+
background: ${colors.bgCard};
|
|
42
|
+
border: 1px solid ${colors.border};
|
|
43
|
+
border-radius: 8px;
|
|
44
|
+
padding: 1.5rem 2rem;
|
|
45
|
+
margin-bottom: 3rem;
|
|
46
|
+
`;
|
|
47
|
+
const tocTitle = css `
|
|
48
|
+
font-size: 0.9rem;
|
|
49
|
+
color: ${colors.amber};
|
|
50
|
+
font-weight: 700;
|
|
51
|
+
margin: 0 0 1rem 0;
|
|
52
|
+
text-transform: uppercase;
|
|
53
|
+
letter-spacing: 0.08em;
|
|
54
|
+
`;
|
|
55
|
+
const tocList = css `
|
|
56
|
+
list-style: none;
|
|
57
|
+
padding: 0;
|
|
58
|
+
margin: 0;
|
|
59
|
+
display: grid;
|
|
60
|
+
grid-template-columns: 1fr 1fr;
|
|
61
|
+
gap: 0.5rem;
|
|
62
|
+
@media (max-width: 640px) {
|
|
63
|
+
grid-template-columns: 1fr;
|
|
64
|
+
}
|
|
65
|
+
`;
|
|
66
|
+
const tocItem = css `
|
|
67
|
+
font-size: 0.85rem;
|
|
68
|
+
color: ${colors.cyan};
|
|
69
|
+
&:hover {
|
|
70
|
+
text-decoration: underline;
|
|
71
|
+
}
|
|
72
|
+
& a {
|
|
73
|
+
color: ${colors.cyan};
|
|
74
|
+
}
|
|
75
|
+
`;
|
|
76
|
+
const tocNumber = css `
|
|
77
|
+
color: ${colors.amber};
|
|
78
|
+
margin-right: 0.5rem;
|
|
79
|
+
font-weight: 700;
|
|
80
|
+
`;
|
|
81
|
+
const section = css `
|
|
82
|
+
margin-bottom: 3rem;
|
|
83
|
+
`;
|
|
84
|
+
const sectionAnchor = css `
|
|
85
|
+
display: block;
|
|
86
|
+
position: relative;
|
|
87
|
+
top: -1rem;
|
|
88
|
+
visibility: hidden;
|
|
89
|
+
`;
|
|
90
|
+
const sectionTitle = css `
|
|
91
|
+
font-size: 1.2rem;
|
|
92
|
+
color: ${colors.green};
|
|
93
|
+
margin: 0 0 0.5rem 0;
|
|
94
|
+
font-weight: 700;
|
|
95
|
+
`;
|
|
96
|
+
const sectionSubtitle = css `
|
|
97
|
+
font-size: 0.85rem;
|
|
98
|
+
color: ${colors.amber};
|
|
99
|
+
margin: 0 0 1rem 0;
|
|
100
|
+
font-style: italic;
|
|
101
|
+
`;
|
|
102
|
+
const paragraph = css `
|
|
103
|
+
color: ${colors.text};
|
|
104
|
+
font-size: 0.9rem;
|
|
105
|
+
line-height: 1.7;
|
|
106
|
+
margin: 0.75rem 0;
|
|
107
|
+
`;
|
|
108
|
+
const highlight = css `
|
|
109
|
+
color: ${colors.green};
|
|
110
|
+
font-weight: 700;
|
|
111
|
+
`;
|
|
112
|
+
const codeBlock = css `
|
|
113
|
+
background: ${colors.bg};
|
|
114
|
+
border: 1px solid ${colors.border};
|
|
115
|
+
border-radius: 4px;
|
|
116
|
+
padding: 1rem;
|
|
117
|
+
color: ${colors.green};
|
|
118
|
+
font-size: 0.85rem;
|
|
119
|
+
overflow-x: auto;
|
|
120
|
+
white-space: pre;
|
|
121
|
+
margin: 0.75rem 0;
|
|
122
|
+
line-height: 1.5;
|
|
123
|
+
`;
|
|
124
|
+
const inlineCode = css `
|
|
125
|
+
background: ${colors.bg};
|
|
126
|
+
border: 1px solid ${colors.border};
|
|
127
|
+
border-radius: 3px;
|
|
128
|
+
padding: 0.15rem 0.4rem;
|
|
129
|
+
color: ${colors.green};
|
|
130
|
+
font-size: 0.85em;
|
|
131
|
+
`;
|
|
132
|
+
const noteText = css `
|
|
133
|
+
color: ${colors.textMuted};
|
|
134
|
+
font-size: 0.85rem;
|
|
135
|
+
margin: 0.75rem 0;
|
|
136
|
+
line-height: 1.6;
|
|
137
|
+
`;
|
|
138
|
+
const stepNumber = css `
|
|
139
|
+
color: ${colors.amber};
|
|
140
|
+
font-weight: 700;
|
|
141
|
+
`;
|
|
142
|
+
const stepCommand = css `
|
|
143
|
+
color: ${colors.green};
|
|
144
|
+
`;
|
|
145
|
+
const promptChar = css `
|
|
146
|
+
color: ${colors.textMuted};
|
|
147
|
+
margin-right: 0.5rem;
|
|
148
|
+
`;
|
|
149
|
+
const commentLine = css `
|
|
150
|
+
color: ${colors.textMuted};
|
|
151
|
+
`;
|
|
152
|
+
const scenarioBox = css `
|
|
153
|
+
background: ${colors.bgCard};
|
|
154
|
+
border-left: 3px solid ${colors.amber};
|
|
155
|
+
border-radius: 0 6px 6px 0;
|
|
156
|
+
padding: 1rem 1.25rem;
|
|
157
|
+
margin: 1rem 0;
|
|
158
|
+
`;
|
|
159
|
+
const scenarioLabel = css `
|
|
160
|
+
font-size: 0.75rem;
|
|
161
|
+
color: ${colors.amber};
|
|
162
|
+
text-transform: uppercase;
|
|
163
|
+
letter-spacing: 0.1em;
|
|
164
|
+
margin: 0 0 0.5rem 0;
|
|
165
|
+
font-weight: 700;
|
|
166
|
+
`;
|
|
167
|
+
const outcomeBox = css `
|
|
168
|
+
background: ${colors.bgCard};
|
|
169
|
+
border-left: 3px solid ${colors.green};
|
|
170
|
+
border-radius: 0 6px 6px 0;
|
|
171
|
+
padding: 1rem 1.25rem;
|
|
172
|
+
margin: 1rem 0;
|
|
173
|
+
`;
|
|
174
|
+
const outcomeLabel = css `
|
|
175
|
+
font-size: 0.75rem;
|
|
176
|
+
color: ${colors.green};
|
|
177
|
+
text-transform: uppercase;
|
|
178
|
+
letter-spacing: 0.1em;
|
|
179
|
+
margin: 0 0 0.5rem 0;
|
|
180
|
+
font-weight: 700;
|
|
181
|
+
`;
|
|
182
|
+
const flowDiagram = css `
|
|
183
|
+
background: ${colors.bgTerminal};
|
|
184
|
+
border: 1px solid ${colors.border};
|
|
185
|
+
border-radius: 6px;
|
|
186
|
+
padding: 1.25rem;
|
|
187
|
+
color: ${colors.text};
|
|
188
|
+
font-size: 0.8rem;
|
|
189
|
+
overflow-x: auto;
|
|
190
|
+
white-space: pre;
|
|
191
|
+
margin: 1rem 0;
|
|
192
|
+
line-height: 1.4;
|
|
193
|
+
`;
|
|
194
|
+
const diagramLabel = css `
|
|
195
|
+
color: ${colors.cyan};
|
|
196
|
+
font-weight: 700;
|
|
197
|
+
`;
|
|
198
|
+
const diagramArrow = css `
|
|
199
|
+
color: ${colors.green};
|
|
200
|
+
`;
|
|
201
|
+
const diagramMessage = css `
|
|
202
|
+
color: ${colors.amber};
|
|
203
|
+
`;
|
|
204
|
+
const tipBox = css `
|
|
205
|
+
background: ${colors.bgCard};
|
|
206
|
+
border: 1px solid ${colors.border};
|
|
207
|
+
border-radius: 6px;
|
|
208
|
+
padding: 1rem 1.25rem;
|
|
209
|
+
margin: 1rem 0;
|
|
210
|
+
`;
|
|
211
|
+
const tipLabel = css `
|
|
212
|
+
font-size: 0.75rem;
|
|
213
|
+
color: ${colors.cyan};
|
|
214
|
+
text-transform: uppercase;
|
|
215
|
+
letter-spacing: 0.1em;
|
|
216
|
+
margin: 0 0 0.5rem 0;
|
|
217
|
+
font-weight: 700;
|
|
218
|
+
`;
|
|
219
|
+
const bulletList = css `
|
|
220
|
+
margin: 0.5rem 0;
|
|
221
|
+
padding-left: 1.25rem;
|
|
222
|
+
& li {
|
|
223
|
+
color: ${colors.text};
|
|
224
|
+
font-size: 0.9rem;
|
|
225
|
+
line-height: 1.7;
|
|
226
|
+
margin: 0.3rem 0;
|
|
227
|
+
}
|
|
228
|
+
`;
|
|
229
|
+
const commandRef = css `
|
|
230
|
+
width: 100%;
|
|
231
|
+
border-collapse: collapse;
|
|
232
|
+
margin: 1rem 0;
|
|
233
|
+
font-size: 0.85rem;
|
|
234
|
+
& th {
|
|
235
|
+
text-align: left;
|
|
236
|
+
color: ${colors.amber};
|
|
237
|
+
font-weight: 700;
|
|
238
|
+
padding: 0.5rem 0.75rem;
|
|
239
|
+
border-bottom: 1px solid ${colors.border};
|
|
240
|
+
font-size: 0.75rem;
|
|
241
|
+
text-transform: uppercase;
|
|
242
|
+
letter-spacing: 0.08em;
|
|
243
|
+
}
|
|
244
|
+
& td {
|
|
245
|
+
padding: 0.5rem 0.75rem;
|
|
246
|
+
border-bottom: 1px solid ${colors.border};
|
|
247
|
+
color: ${colors.text};
|
|
248
|
+
vertical-align: top;
|
|
249
|
+
}
|
|
250
|
+
& td:first-child {
|
|
251
|
+
color: ${colors.green};
|
|
252
|
+
font-weight: 700;
|
|
253
|
+
white-space: nowrap;
|
|
254
|
+
}
|
|
255
|
+
`;
|
|
256
|
+
const divider = css `
|
|
257
|
+
border: none;
|
|
258
|
+
border-top: 1px solid ${colors.border};
|
|
259
|
+
margin: 2.5rem 0;
|
|
260
|
+
`;
|
|
261
|
+
const footer = css `
|
|
262
|
+
text-align: center;
|
|
263
|
+
padding: 2rem 0;
|
|
264
|
+
color: ${colors.textMuted};
|
|
265
|
+
font-size: 0.8rem;
|
|
266
|
+
border-top: 1px solid ${colors.border};
|
|
267
|
+
margin-top: 2rem;
|
|
268
|
+
`;
|
|
269
|
+
/**
|
|
270
|
+
* Comprehensive "How-To" guide page covering real-world use cases
|
|
271
|
+
* for Cogent Bridge from the perspective of business owners,
|
|
272
|
+
* product owners, and project managers.
|
|
273
|
+
*/
|
|
274
|
+
export const HowToPage = () => (_jsx(Layout, { title: "How-To Guide", children: _jsxs("div", { class: container, children: [_jsx("a", { href: "/", class: backLink, children: "\u2190 Back to Home" }), _jsxs("div", { class: heroSection, children: [_jsx("h1", { class: heroTitle, children: "How Teams Deliver Faster with Cogent" }), _jsx("p", { class: heroSubtitle, children: "When your developers connect their Claude Code agents through Cogent, every team member stays aligned in real time. No more integration surprises, no more \"I didn't know you changed that.\" Just continuous sync across codebases." }), _jsx("p", { class: heroSubtitle, children: "This guide walks through the most common use cases with exact commands your teams will use every day." })] }), _jsxs("div", { class: toc, children: [_jsx("div", { class: tocTitle, children: "In This Guide" }), _jsxs("ul", { class: tocList, children: [_jsxs("li", { class: tocItem, children: [_jsx("span", { class: tocNumber, children: "00" }), _jsx("a", { href: "#prerequisites", children: "Prerequisites & Setup" })] }), _jsxs("li", { class: tocItem, children: [_jsx("span", { class: tocNumber, children: "01" }), _jsx("a", { href: "#parallel-dev", children: "Parallel Feature Development" })] }), _jsxs("li", { class: tocItem, children: [_jsx("span", { class: tocNumber, children: "02" }), _jsx("a", { href: "#bug-relay", children: "Cross-Team Bug Investigation" })] }), _jsxs("li", { class: tocItem, children: [_jsx("span", { class: tocNumber, children: "03" }), _jsx("a", { href: "#api-contracts", children: "API Contract Negotiation" })] }), _jsxs("li", { class: tocItem, children: [_jsx("span", { class: tocNumber, children: "04" }), _jsx("a", { href: "#code-review", children: "Cross-Agent Code Review" })] }), _jsxs("li", { class: tocItem, children: [_jsx("span", { class: tocNumber, children: "05" }), _jsx("a", { href: "#multi-service", children: "Multi-Service Orchestration" })] }), _jsxs("li", { class: tocItem, children: [_jsx("span", { class: tocNumber, children: "06" }), _jsx("a", { href: "#sprint-sync", children: "Sprint Kick-off Alignment" })] }), _jsxs("li", { class: tocItem, children: [_jsx("span", { class: tocNumber, children: "07" }), _jsx("a", { href: "#integration-test", children: "Real-Time Integration Testing" })] }), _jsxs("li", { class: tocItem, children: [_jsx("span", { class: tocNumber, children: "08" }), _jsx("a", { href: "#command-ref", children: "Command Reference" })] }), _jsxs("li", { class: tocItem, children: [_jsx("span", { class: tocNumber, children: "09" }), _jsx("a", { href: "#best-practices", children: "Best Practices for Managers" })] })] })] }), _jsxs("div", { class: section, children: [_jsx("span", { id: "prerequisites", class: sectionAnchor }), _jsx("h2", { class: sectionTitle, children: "00 \u2014 Prerequisites & Setup" }), _jsx("p", { class: sectionSubtitle, children: "Get every team member connected in under 2 minutes" }), _jsxs("p", { class: paragraph, children: ["Before your agents can collaborate, each developer needs Cogent Bridge installed as an MCP server in their Claude Code environment. There are two approaches:", _jsx("span", { class: highlight, children: " cloud mode" }), " (recommended for teams) and", _jsx("span", { class: highlight, children: " local mode" }), " (for same-machine sessions)."] }), _jsxs(Terminal, { title: "Install Cogent Bridge (Every Team Member)", children: [_jsx("p", { class: noteText, children: "Install the plugin for slash commands and automatic session discovery:" }), _jsxs("div", { class: codeBlock, children: [_jsx("span", { class: promptChar, children: "$" }), _jsx("span", { class: stepCommand, children: "claude plugin marketplace add eaisdevelopment/cogent" })] }), _jsxs("div", { class: codeBlock, children: [_jsx("span", { class: promptChar, children: "$" }), _jsx("span", { class: stepCommand, children: "claude plugin install cogent@cogent" })] }), _jsxs("p", { class: noteText, children: ["Restart Claude Code. Use ", _jsx("span", { class: inlineCode, children: "/cogent:register" }), " to join the bridge."] })] }), _jsxs(Terminal, { title: "Claude Desktop", children: [_jsx("p", { class: noteText, children: "Add Cogent Bridge to your Claude Desktop config file:" }), _jsxs("p", { class: noteText, style: "font-size: 0.8rem;", children: [_jsx("strong", { children: "macOS:" }), " ", _jsx("span", { class: inlineCode, children: "~/Library/Application Support/Claude/claude_desktop_config.json" }), _jsx("br", {}), _jsx("strong", { children: "Windows:" }), " ", _jsx("span", { class: inlineCode, children: "%APPDATA%\\Claude\\claude_desktop_config.json" })] }), _jsx("div", { class: codeBlock, children: `{
|
|
275
|
+
"mcpServers": {
|
|
276
|
+
"cogent-bridge": {
|
|
277
|
+
"command": "npx",
|
|
278
|
+
"args": ["-y", "@essentialai/cogent-bridge"],
|
|
279
|
+
"env": {
|
|
280
|
+
"COGENT_ENDPOINT": "https://cogent.tools"
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
}` }), _jsxs("p", { class: noteText, children: ["Restart Claude Desktop. You'll get the six ", _jsx("span", { class: inlineCode, children: "cogent_*" }), " MCP tools. Slash commands (", _jsx("span", { class: inlineCode, children: "/cogent:register" }), ") are Claude Code only \u2014 in Desktop, use natural language: ", _jsx("em", { children: "\"Create a Cogent channel called 'my-project' with secret 'team-secret'\"" }), "."] })] }), _jsxs(Terminal, { title: "Cloud Channel \u2014 The Team Pattern", children: [_jsxs("p", { class: noteText, children: [_jsx("span", { class: stepNumber, children: "Step 1:" }), " One team member creates a shared channel:"] }), _jsxs("div", { class: codeBlock, children: [_jsx("span", { class: commentLine, children: `# Ask Claude Code to create a channel for the team` }), "\n", _jsx("span", { class: promptChar, children: ">" }), _jsx("span", { class: stepCommand, children: ` Create a Cogent channel called "sprint-42" with secret "our-team-secret"` })] }), _jsxs("p", { class: noteText, children: ["Claude will use ", _jsx("span", { class: inlineCode, children: "cogent_create_session" }), " and return a channel name (e.g., ", _jsx("span", { class: inlineCode, children: "sprint-42" }), ") and a config snippet. If you omit the name, a friendly name is auto-generated (e.g., ", _jsx("span", { class: inlineCode, children: "swift-fox-a3f1" }), ")."] }), _jsxs("p", { class: noteText, children: [_jsx("span", { class: stepNumber, children: "Step 2:" }), " Share the ", _jsx("strong", { children: "channel name" }), " and ", _jsx("strong", { children: "secret" }), " with your team (Slack, email, etc.)"] }), _jsxs("p", { class: noteText, children: [_jsx("span", { class: stepNumber, children: "Step 3:" }), " Every other team member joins using the channel name:"] }), _jsxs("div", { class: codeBlock, children: [_jsx("span", { class: promptChar, children: ">" }), _jsx("span", { class: stepCommand, children: ` Join Cogent channel "sprint-42" with secret "our-team-secret"` })] }), _jsxs("p", { class: noteText, children: ["Claude will use ", _jsx("span", { class: inlineCode, children: "cogent_join_session" }), " to resolve the channel name and join. No UUIDs needed."] }), _jsxs("p", { class: noteText, children: [_jsx("span", { class: stepNumber, children: "Step 4:" }), " Each agent registers as a named peer:"] }), _jsxs("div", { class: codeBlock, children: [_jsx("span", { class: promptChar, children: ">" }), _jsx("span", { class: stepCommand, children: ` Register on Cogent as peerId="backend", label="Backend Team"` })] })] }), _jsxs("div", { class: tipBox, children: [_jsx("div", { class: tipLabel, children: "Pro Tip \u2014 Automate with CLAUDE.md" }), _jsxs("p", { class: noteText, children: ["Add Cogent Bridge instructions to each project's ", _jsx("span", { class: inlineCode, children: "CLAUDE.md" }), " file. When a developer opens Claude Code in that project, the agent automatically knows its role, peer ID, and communication protocol. No manual setup each time."] }), _jsx("div", { class: codeBlock, children: `# CLAUDE.md (in your project root)
|
|
285
|
+
|
|
286
|
+
## Cogent Bridge Protocol
|
|
287
|
+
You are the **Backend** team. On session start:
|
|
288
|
+
1. Join Cogent channel (ask user for channel name and secret)
|
|
289
|
+
2. Register as peerId="backend", label="Backend API Team"
|
|
290
|
+
3. Use cogent_send_message to communicate with other peers
|
|
291
|
+
4. When you receive messages, respond promptly with specifics` })] })] }), _jsx("hr", { class: divider }), _jsxs("div", { class: section, children: [_jsx("span", { id: "parallel-dev", class: sectionAnchor }), _jsx("h2", { class: sectionTitle, children: "01 \u2014 Parallel Feature Development" }), _jsx("p", { class: sectionSubtitle, children: "Frontend and backend build simultaneously without stepping on each other" }), _jsxs("div", { class: scenarioBox, children: [_jsx("div", { class: scenarioLabel, children: "Scenario" }), _jsx("p", { class: noteText, children: "Your sprint has a \"User Profile\" feature. The backend team builds the API endpoints while the frontend team builds the UI. Both teams need to agree on the data shape and stay synchronized as implementation evolves." })] }), _jsx("p", { class: paragraph, children: "With Cogent, both Claude Code agents work in parallel in their own repositories. The backend agent shares the API contract as soon as it's defined. The frontend agent builds against that contract and immediately flags any mismatches." }), _jsxs(Terminal, { title: "Backend Agent (Terminal 1)", children: [_jsxs("div", { class: codeBlock, children: [_jsx("span", { class: commentLine, children: `# After registering as "backend"...` }), "\n", _jsx("span", { class: promptChar, children: ">" }), _jsx("span", { class: stepCommand, children: ` I've designed the user profile endpoint. Send this to the frontend team:` }), "\n", _jsx("span", { class: stepCommand, children: ` "API Contract: GET /api/users/:id returns` }), "\n", _jsx("span", { class: stepCommand, children: ` { id, name, email, avatar, bio, joinedAt }.` }), "\n", _jsx("span", { class: stepCommand, children: ` POST /api/users/:id/avatar accepts multipart form.` }), "\n", _jsx("span", { class: stepCommand, children: ` I'm implementing now — ETA 20 min."` })] }), _jsxs("p", { class: noteText, children: ["Claude uses ", _jsx("span", { class: inlineCode, children: "cogent_send_message" }), " with fromPeerId=\"backend\", toPeerId=\"frontend\"."] })] }), _jsx(Terminal, { title: "Frontend Agent (Terminal 2)", children: _jsxs("div", { class: codeBlock, children: [_jsx("span", { class: commentLine, children: `# Frontend receives the message and starts building the UI` }), "\n", _jsx("span", { class: commentLine, children: `# 15 minutes later, discovers a need...` }), "\n\n", _jsx("span", { class: promptChar, children: ">" }), _jsx("span", { class: stepCommand, children: ` Send a message to "backend": "We also need a 'role' field` }), "\n", _jsx("span", { class: stepCommand, children: ` in the profile response to control UI permissions.` }), "\n", _jsx("span", { class: stepCommand, children: ` Can you add it? Expected values: admin | editor | viewer"` })] }) }), _jsx(Terminal, { title: "Backend Agent Responds", children: _jsxs("div", { class: codeBlock, children: [_jsx("span", { class: commentLine, children: `# Backend receives the request, adds the field, confirms` }), "\n\n", _jsx("span", { class: promptChar, children: ">" }), _jsx("span", { class: stepCommand, children: ` Tell "frontend": "Done — added 'role' field to GET /api/users/:id.` }), "\n", _jsx("span", { class: stepCommand, children: ` Returns 'admin' | 'editor' | 'viewer'. Also added it to the` }), "\n", _jsx("span", { class: stepCommand, children: ` TypeScript interface in src/types/user.ts line 12.` }), "\n", _jsx("span", { class: stepCommand, children: ` You can start using it now."` })] }) }), _jsxs("div", { class: flowDiagram, children: [_jsx("span", { class: diagramLabel, children: "Backend Agent Frontend Agent" }), "\n", " | |", "\n", " |", _jsx("span", { class: diagramArrow, children: " ---- API contract defined --------> " }), " |", "\n", " | |", "\n", " | [implements endpoints] [builds UI components]", "\n", " | |", "\n", " |", _jsx("span", { class: diagramArrow, children: " <--- need 'role' field ----------- " }), " |", "\n", " | |", "\n", " | [adds field, updates types] |", "\n", " | |", "\n", " |", _jsx("span", { class: diagramArrow, children: " ---- field added, ready ---------> " }), " |", "\n", " | |", "\n", " | [integrates immediately]", "\n"] }), _jsxs("div", { class: outcomeBox, children: [_jsx("div", { class: outcomeLabel, children: "Business Impact" }), _jsx("p", { class: noteText, children: "Both teams work in parallel from minute one. API contract changes propagate instantly. No \"integration day\" surprises. Features ship faster because both sides stay aligned throughout development, not just at the end." })] })] }), _jsx("hr", { class: divider }), _jsxs("div", { class: section, children: [_jsx("span", { id: "bug-relay", class: sectionAnchor }), _jsx("h2", { class: sectionTitle, children: "02 \u2014 Cross-Team Bug Investigation" }), _jsx("p", { class: sectionSubtitle, children: "Find bugs faster when agents share context across codebases" }), _jsxs("div", { class: scenarioBox, children: [_jsx("div", { class: scenarioLabel, children: "Scenario" }), _jsx("p", { class: noteText, children: "The frontend agent discovers that user profiles show \"undefined\" for the email field. The bug is actually in the backend API response shape. Instead of filing a ticket and waiting, the agents resolve it in real time." })] }), _jsx(Terminal, { title: "Frontend Agent Discovers the Bug", children: _jsxs("div", { class: codeBlock, children: [_jsx("span", { class: promptChar, children: ">" }), _jsx("span", { class: stepCommand, children: ` Send a bug report to "backend":` }), "\n", _jsx("span", { class: stepCommand, children: ` "BUG REPORT: GET /api/users/1` }), "\n", _jsx("span", { class: stepCommand, children: ` Expected: { id: 1, name: 'Alice', email: 'alice@...' }` }), "\n", _jsx("span", { class: stepCommand, children: ` Actual: { user: { record: { id: 1, name: 'Alice', ... } } }` }), "\n", _jsx("span", { class: stepCommand, children: ` The response is nested 2 levels too deep.` }), "\n", _jsx("span", { class: stepCommand, children: ` Also: requesting a non-existent user (id=999) returns 200` }), "\n", _jsx("span", { class: stepCommand, children: ` instead of 404. Repro: curl localhost:3001/api/users/999"` })] }) }), _jsx(Terminal, { title: "Backend Agent Investigates and Fixes", children: _jsxs("div", { class: codeBlock, children: [_jsx("span", { class: commentLine, children: `# Backend agent receives the message, reads server.js,` }), "\n", _jsx("span", { class: commentLine, children: `# identifies the bugs, and fixes them` }), "\n\n", _jsx("span", { class: promptChar, children: ">" }), _jsx("span", { class: stepCommand, children: ` Reply to "frontend":` }), "\n", _jsx("span", { class: stepCommand, children: ` "Fixed both issues in server.js (lines 18-24):` }), "\n", _jsx("span", { class: stepCommand, children: ` 1. Flattened response: now returns { data: user } directly` }), "\n", _jsx("span", { class: stepCommand, children: ` 2. Added 404 check: returns { success: false, error: 'User not found' }` }), "\n", _jsx("span", { class: stepCommand, children: ` when user doesn't exist.` }), "\n", _jsx("span", { class: stepCommand, children: ` Please restart the API server and re-test."` })] }) }), _jsx(Terminal, { title: "Frontend Agent Confirms the Fix", children: _jsxs("div", { class: codeBlock, children: [_jsx("span", { class: promptChar, children: ">" }), _jsx("span", { class: stepCommand, children: ` Tell "backend": "Confirmed! Both bugs fixed.` }), "\n", _jsx("span", { class: stepCommand, children: ` user.name now returns 'Alice' correctly.` }), "\n", _jsx("span", { class: stepCommand, children: ` User 999 returns 404 as expected. Thanks!"` })] }) }), _jsxs("div", { class: outcomeBox, children: [_jsx("div", { class: outcomeLabel, children: "Business Impact" }), _jsx("p", { class: noteText, children: "Bug resolution drops from hours/days (file ticket \u2192 triage \u2192 assign \u2192 investigate \u2192 fix \u2192 verify) to minutes. The entire investigate-fix-verify cycle happens in a single conversation between agents, with full technical context preserved." })] })] }), _jsx("hr", { class: divider }), _jsxs("div", { class: section, children: [_jsx("span", { id: "api-contracts", class: sectionAnchor }), _jsx("h2", { class: sectionTitle, children: "03 \u2014 API Contract Negotiation" }), _jsx("p", { class: sectionSubtitle, children: "Agree on interfaces before writing a single line of implementation" }), _jsxs("div", { class: scenarioBox, children: [_jsx("div", { class: scenarioLabel, children: "Scenario" }), _jsx("p", { class: noteText, children: "Before building a new \"Orders\" feature, the backend and frontend agents negotiate the exact API shape, error codes, pagination format, and validation rules \u2014 all through Cogent messages." })] }), _jsx(Terminal, { title: "Frontend Agent Proposes the Contract", children: _jsxs("div", { class: codeBlock, children: [_jsx("span", { class: promptChar, children: ">" }), _jsx("span", { class: stepCommand, children: ` Send to "backend": "Proposing Orders API contract:` }), "\n", _jsx("span", { class: stepCommand, children: `` }), "\n", _jsx("span", { class: stepCommand, children: ` GET /api/orders - list with pagination (?page=1&limit=20)` }), "\n", _jsx("span", { class: stepCommand, children: ` GET /api/orders/:id - single order detail` }), "\n", _jsx("span", { class: stepCommand, children: ` POST /api/orders - create new order` }), "\n", _jsx("span", { class: stepCommand, children: ` PUT /api/orders/:id - update order status` }), "\n", _jsx("span", { class: stepCommand, children: `` }), "\n", _jsx("span", { class: stepCommand, children: ` Expected response shape:` }), "\n", _jsx("span", { class: stepCommand, children: ` { success: bool, data: T, pagination?: { page, limit, total } }` }), "\n", _jsx("span", { class: stepCommand, children: `` }), "\n", _jsx("span", { class: stepCommand, children: ` Error shape:` }), "\n", _jsx("span", { class: stepCommand, children: ` { success: false, error: string, code: string }` }), "\n", _jsx("span", { class: stepCommand, children: `` }), "\n", _jsx("span", { class: stepCommand, children: ` Does this work for the backend? Any constraints I'm missing?"` })] }) }), _jsx(Terminal, { title: "Backend Agent Reviews and Counter-Proposes", children: _jsxs("div", { class: codeBlock, children: [_jsx("span", { class: promptChar, children: ">" }), _jsx("span", { class: stepCommand, children: ` Tell "frontend": "Almost perfect. Two adjustments:` }), "\n", _jsx("span", { class: stepCommand, children: ` 1. Use PATCH instead of PUT for partial status updates` }), "\n", _jsx("span", { class: stepCommand, children: ` 2. Add 'cursor' to pagination (we use cursor-based, not offset)` }), "\n", _jsx("span", { class: stepCommand, children: ` { pagination: { cursor, limit, hasMore } }` }), "\n", _jsx("span", { class: stepCommand, children: ` Everything else is agreed. I'll generate TypeScript` }), "\n", _jsx("span", { class: stepCommand, children: ` interfaces in a shared types package and let you know."` })] }) }), _jsxs("div", { class: tipBox, children: [_jsx("div", { class: tipLabel, children: "Manager Tip" }), _jsxs("p", { class: noteText, children: ["Use ", _jsx("span", { class: inlineCode, children: "cogent_get_history" }), " after contract negotiation to capture the agreed-upon API spec. This conversation becomes your living documentation \u2014 searchable, timestamped, and tied to the actual development context."] })] }), _jsxs("div", { class: outcomeBox, children: [_jsx("div", { class: outcomeLabel, children: "Business Impact" }), _jsx("p", { class: noteText, children: "API mismatches are the #1 cause of integration failures. By negotiating contracts up front through Cogent, teams eliminate rework. The agents have full codebase context, so they catch incompatibilities that humans in a meeting room would miss." })] })] }), _jsx("hr", { class: divider }), _jsxs("div", { class: section, children: [_jsx("span", { id: "code-review", class: sectionAnchor }), _jsx("h2", { class: sectionTitle, children: "04 \u2014 Cross-Agent Code Review" }), _jsx("p", { class: sectionSubtitle, children: "One agent reviews another's implementation with full context" }), _jsxs("div", { class: scenarioBox, children: [_jsx("div", { class: scenarioLabel, children: "Scenario" }), _jsx("p", { class: noteText, children: "The backend agent has finished the authentication module. Before merging, the security-focused agent reviews it through Cogent, checking for vulnerabilities, edge cases, and adherence to team standards." })] }), _jsx(Terminal, { title: "Backend Agent Requests Review", children: _jsxs("div", { class: codeBlock, children: [_jsx("span", { class: promptChar, children: ">" }), _jsx("span", { class: stepCommand, children: ` Send to "security": "Ready for review: auth module` }), "\n", _jsx("span", { class: stepCommand, children: ` Files changed:` }), "\n", _jsx("span", { class: stepCommand, children: ` - src/middleware/auth.ts (new - JWT validation middleware)` }), "\n", _jsx("span", { class: stepCommand, children: ` - src/routes/login.ts (new - login/refresh endpoints)` }), "\n", _jsx("span", { class: stepCommand, children: ` - src/services/token-service.ts (new - JWT sign/verify)` }), "\n", _jsx("span", { class: stepCommand, children: ` Key decisions:` }), "\n", _jsx("span", { class: stepCommand, children: ` - RS256 signing with rotating keys` }), "\n", _jsx("span", { class: stepCommand, children: ` - 15min access token, 7d refresh token` }), "\n", _jsx("span", { class: stepCommand, children: ` - Refresh rotation (one-time use)` }), "\n", _jsx("span", { class: stepCommand, children: ` Please review for security concerns."` })] }) }), _jsx(Terminal, { title: "Security Agent Reviews", children: _jsxs("div", { class: codeBlock, children: [_jsx("span", { class: commentLine, children: `# Security agent reviews the files in its own codebase context` }), "\n\n", _jsx("span", { class: promptChar, children: ">" }), _jsx("span", { class: stepCommand, children: ` Tell "backend": "Review complete. 2 issues found:` }), "\n", _jsx("span", { class: stepCommand, children: `` }), "\n", _jsx("span", { class: stepCommand, children: ` CRITICAL: token-service.ts line 34 — the refresh token` }), "\n", _jsx("span", { class: stepCommand, children: ` isn't invalidated on password change. An attacker with a` }), "\n", _jsx("span", { class: stepCommand, children: ` stolen refresh token retains access after password reset.` }), "\n", _jsx("span", { class: stepCommand, children: ` Fix: add password-change timestamp to JWT claims, check` }), "\n", _jsx("span", { class: stepCommand, children: ` on refresh.` }), "\n", _jsx("span", { class: stepCommand, children: `` }), "\n", _jsx("span", { class: stepCommand, children: ` LOW: auth.ts line 12 — error message on invalid token` }), "\n", _jsx("span", { class: stepCommand, children: ` leaks whether the token is expired vs malformed. Use` }), "\n", _jsx("span", { class: stepCommand, children: ` generic 'Invalid token' for both cases.` }), "\n", _jsx("span", { class: stepCommand, children: `` }), "\n", _jsx("span", { class: stepCommand, children: ` Everything else looks solid. Nice work on key rotation."` })] }) }), _jsxs("div", { class: outcomeBox, children: [_jsx("div", { class: outcomeLabel, children: "Business Impact" }), _jsx("p", { class: noteText, children: "Security reviews happen in real time during development, not as a bottleneck before release. The reviewing agent has full codebase access and can point to exact lines. Issues are found and fixed within the same development session." })] })] }), _jsx("hr", { class: divider }), _jsxs("div", { class: section, children: [_jsx("span", { id: "multi-service", class: sectionAnchor }), _jsx("h2", { class: sectionTitle, children: "05 \u2014 Multi-Service Orchestration" }), _jsx("p", { class: sectionSubtitle, children: "Coordinate changes across microservices without breaking the chain" }), _jsxs("div", { class: scenarioBox, children: [_jsx("div", { class: scenarioLabel, children: "Scenario" }), _jsx("p", { class: noteText, children: "A new \"payment refund\" feature requires coordinated changes across three services: the API gateway, the payment service, and the notification service. Each has its own agent working in its own repository." })] }), _jsx(Terminal, { title: "Register All Three Agents", children: _jsxs("div", { class: codeBlock, children: [_jsx("span", { class: commentLine, children: `# All three agents join the same session and register` }), "\n\n", _jsx("span", { class: commentLine, children: `# Agent 1 (API Gateway repo)` }), "\n", _jsx("span", { class: promptChar, children: ">" }), _jsx("span", { class: stepCommand, children: ` Register as peerId="gateway", label="API Gateway"` }), "\n\n", _jsx("span", { class: commentLine, children: `# Agent 2 (Payment Service repo)` }), "\n", _jsx("span", { class: promptChar, children: ">" }), _jsx("span", { class: stepCommand, children: ` Register as peerId="payments", label="Payment Service"` }), "\n\n", _jsx("span", { class: commentLine, children: `# Agent 3 (Notification Service repo)` }), "\n", _jsx("span", { class: promptChar, children: ">" }), _jsx("span", { class: stepCommand, children: ` Register as peerId="notifications", label="Notification Service"` })] }) }), _jsx(Terminal, { title: "Orchestrated Implementation", children: _jsxs("div", { class: codeBlock, children: [_jsx("span", { class: commentLine, children: `# Gateway agent coordinates the rollout` }), "\n\n", _jsx("span", { class: promptChar, children: ">" }), _jsx("span", { class: stepCommand, children: ` Send to "payments": "Implementing POST /api/refunds.` }), "\n", _jsx("span", { class: stepCommand, children: ` I need you to expose a processRefund(orderId, amount) method` }), "\n", _jsx("span", { class: stepCommand, children: ` on your internal gRPC service. Expected response:` }), "\n", _jsx("span", { class: stepCommand, children: ` { refundId: string, status: 'pending' | 'completed', processedAt: ISO }` }), "\n", _jsx("span", { class: stepCommand, children: ` Let me know when it's ready."` }), "\n\n", _jsx("span", { class: promptChar, children: ">" }), _jsx("span", { class: stepCommand, children: ` Send to "notifications": "New refund feature coming.` }), "\n", _jsx("span", { class: stepCommand, children: ` You'll need to handle a 'refund.completed' event` }), "\n", _jsx("span", { class: stepCommand, children: ` with payload { orderId, refundId, amount, userId }.` }), "\n", _jsx("span", { class: stepCommand, children: ` Template: 'Your refund of $amount for order #orderId is complete.'"` })] }) }), _jsxs(Terminal, { title: "Check Who's Connected", children: [_jsxs("div", { class: codeBlock, children: [_jsx("span", { class: commentLine, children: `# Any agent can see who's on the bridge` }), "\n\n", _jsx("span", { class: promptChar, children: ">" }), _jsx("span", { class: stepCommand, children: ` List all peers on the bridge` })] }), _jsxs("p", { class: noteText, children: ["Claude uses ", _jsx("span", { class: inlineCode, children: "cogent_list_peers" }), " and returns:"] }), _jsx("div", { class: codeBlock, children: `Peers (3 registered):
|
|
292
|
+
gateway — API Gateway [active]
|
|
293
|
+
payments — Payment Service [active]
|
|
294
|
+
notifications — Notification Service [active]` })] }), _jsxs("div", { class: flowDiagram, children: [_jsx("span", { class: diagramLabel, children: "Gateway Payments Notifications" }), "\n", " | | |", "\n", " |", _jsx("span", { class: diagramArrow, children: " -- need refund API --> " }), " | |", "\n", " |", _jsx("span", { class: diagramArrow, children: " -- need event handler ----------------------> " }), " |", "\n", " | | |", "\n", " | [implements gRPC] [adds event handler]", "\n", " | | |", "\n", " |", _jsx("span", { class: diagramArrow, children: " <-- refund API ready - " }), " | |", "\n", " | |", _jsx("span", { class: diagramArrow, children: " --- handler ready ---> " }), " |", "\n", " | | |", "\n", " |", _jsx("span", { class: diagramArrow, children: " -- integration test ----------------------------------------> " }), "\n", " | | |", "\n", " | [all three services verified end-to-end] |", "\n"] }), _jsxs("div", { class: outcomeBox, children: [_jsx("div", { class: outcomeLabel, children: "Business Impact" }), _jsx("p", { class: noteText, children: "Microservice features that normally take days of back-and-forth across teams ship in a single coordinated session. Each agent knows exactly what the others need, implements it in its own codebase, and confirms when ready. Zero miscommunication. Zero integration drift." })] })] }), _jsx("hr", { class: divider }), _jsxs("div", { class: section, children: [_jsx("span", { id: "sprint-sync", class: sectionAnchor }), _jsx("h2", { class: sectionTitle, children: "06 \u2014 Sprint Kick-off Alignment" }), _jsx("p", { class: sectionSubtitle, children: "All agents sync on what's changing before anyone writes code" }), _jsxs("div", { class: scenarioBox, children: [_jsx("div", { class: scenarioLabel, children: "Scenario" }), _jsx("p", { class: noteText, children: "Sprint starts Monday. Three teams are working on overlapping areas of the codebase. Before anyone writes a line of code, their agents exchange planned changes to identify conflicts, dependencies, and coordination points." })] }), _jsx(Terminal, { title: "Team Agents Share Sprint Plans", children: _jsxs("div", { class: codeBlock, children: [_jsx("span", { class: commentLine, children: `# Backend agent announces planned changes` }), "\n", _jsx("span", { class: promptChar, children: ">" }), _jsx("span", { class: stepCommand, children: ` Send to "frontend": "Sprint 42 heads-up: I'm refactoring` }), "\n", _jsx("span", { class: stepCommand, children: ` the user model this sprint. Changes:` }), "\n", _jsx("span", { class: stepCommand, children: ` - Splitting 'name' into 'firstName' and 'lastName'` }), "\n", _jsx("span", { class: stepCommand, children: ` - Adding 'preferences' JSON field` }), "\n", _jsx("span", { class: stepCommand, children: ` - Deprecating 'avatarUrl' in favor of 'media.avatar'` }), "\n", _jsx("span", { class: stepCommand, children: ` This WILL break your user profile component.` }), "\n", _jsx("span", { class: stepCommand, children: ` I'll keep the old fields for 1 sprint (deprecated).` }), "\n", _jsx("span", { class: stepCommand, children: ` Please plan your migration."` })] }) }), _jsx(Terminal, { title: "Frontend Agent Identifies Conflict", children: _jsxs("div", { class: codeBlock, children: [_jsx("span", { class: promptChar, children: ">" }), _jsx("span", { class: stepCommand, children: ` Reply to "backend": "Thanks for the heads-up.` }), "\n", _jsx("span", { class: stepCommand, children: ` Conflict detected: I'm also adding an avatar upload` }), "\n", _jsx("span", { class: stepCommand, children: ` feature this sprint using 'avatarUrl'. If you're moving` }), "\n", _jsx("span", { class: stepCommand, children: ` to 'media.avatar', let's agree on the new upload endpoint` }), "\n", _jsx("span", { class: stepCommand, children: ` before I start. Can you define POST /api/users/:id/media` }), "\n", _jsx("span", { class: stepCommand, children: ` first so I can build against it?"` })] }) }), _jsxs("div", { class: tipBox, children: [_jsx("div", { class: tipLabel, children: "Manager Tip" }), _jsxs("p", { class: noteText, children: ["Run ", _jsx("span", { class: inlineCode, children: "cogent_get_history" }), " at the end of the kick-off to capture all inter-team agreements and identified risks. This is your sprint coordination artifact \u2014 far more detailed than what you'd get from a standup meeting."] })] }), _jsxs("div", { class: outcomeBox, children: [_jsx("div", { class: outcomeLabel, children: "Business Impact" }), _jsx("p", { class: noteText, children: "Breaking changes are identified before they cause damage. Teams coordinate dependencies at the start, not the end. Agents catch conflicts that humans miss because they have full visibility into the actual code that's changing." })] })] }), _jsx("hr", { class: divider }), _jsxs("div", { class: section, children: [_jsx("span", { id: "integration-test", class: sectionAnchor }), _jsx("h2", { class: sectionTitle, children: "07 \u2014 Real-Time Integration Testing" }), _jsx("p", { class: sectionSubtitle, children: "Both sides coordinate test execution across service boundaries" }), _jsxs("div", { class: scenarioBox, children: [_jsx("div", { class: scenarioLabel, children: "Scenario" }), _jsx("p", { class: noteText, children: "The backend agent has finished implementing the orders API. The frontend agent needs to run integration tests against the live backend. They coordinate through Cogent to ensure the backend is running and ready." })] }), _jsx(Terminal, { title: "Coordinated Test Execution", children: _jsxs("div", { class: codeBlock, children: [_jsx("span", { class: commentLine, children: `# Backend agent starts the service and signals readiness` }), "\n", _jsx("span", { class: promptChar, children: ">" }), _jsx("span", { class: stepCommand, children: ` Start the dev server and tell "frontend":` }), "\n", _jsx("span", { class: stepCommand, children: ` "Orders API is live on localhost:3001.` }), "\n", _jsx("span", { class: stepCommand, children: ` Endpoints ready: GET/POST /api/orders, GET /api/orders/:id` }), "\n", _jsx("span", { class: stepCommand, children: ` Test data seeded: 5 sample orders for user_id=1.` }), "\n", _jsx("span", { class: stepCommand, children: ` Run your integration tests now."` }), "\n\n", _jsx("span", { class: commentLine, children: `# Frontend agent runs tests and reports results` }), "\n", _jsx("span", { class: promptChar, children: ">" }), _jsx("span", { class: stepCommand, children: ` Run integration tests and send results to "backend":` }), "\n", _jsx("span", { class: stepCommand, children: ` "Integration test results:` }), "\n", _jsx("span", { class: stepCommand, children: ` PASS: GET /api/orders returns paginated list (5 orders)` }), "\n", _jsx("span", { class: stepCommand, children: ` PASS: GET /api/orders/1 returns order detail` }), "\n", _jsx("span", { class: stepCommand, children: ` FAIL: POST /api/orders returns 500 when 'items' array is empty` }), "\n", _jsx("span", { class: stepCommand, children: ` Expected: 400 with validation error` }), "\n", _jsx("span", { class: stepCommand, children: ` Actual: 500 Internal Server Error` }), "\n", _jsx("span", { class: stepCommand, children: ` 2/3 passing. Please fix the empty items validation."` })] }) }), _jsxs("div", { class: outcomeBox, children: [_jsx("div", { class: outcomeLabel, children: "Business Impact" }), _jsx("p", { class: noteText, children: "Integration testing becomes a conversation, not a ceremony. Agents coordinate service startup, test execution, and failure analysis in real time. Issues are caught and fixed in the same session rather than discovered days later in a CI pipeline." })] })] }), _jsx("hr", { class: divider }), _jsxs("div", { class: section, children: [_jsx("span", { id: "command-ref", class: sectionAnchor }), _jsx("h2", { class: sectionTitle, children: "08 \u2014 Command Reference" }), _jsx("p", { class: sectionSubtitle, children: "Every Cogent Bridge tool at a glance" }), _jsx("p", { class: paragraph, children: "These are the MCP tools available to Claude Code once Cogent Bridge is installed. You don't call these directly \u2014 you ask Claude in natural language and it uses the right tool automatically." }), _jsx(Terminal, { title: "Cloud Channel Tools", children: _jsxs("table", { class: commandRef, children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { children: "Tool" }), _jsx("th", { children: "What It Does" }), _jsx("th", { children: "You Say" })] }) }), _jsxs("tbody", { children: [_jsxs("tr", { children: [_jsx("td", { children: "cogent_create_session" }), _jsx("td", { children: "Creates a new cloud channel. Returns a channel name, token, and secret to share with peers. Auto-generates a name if you don't provide one." }), _jsx("td", { children: _jsx("em", { children: "\"Create a Cogent channel called 'sprint-42'\"" }) })] }), _jsxs("tr", { children: [_jsx("td", { children: "cogent_join_session" }), _jsx("td", { children: "Joins an existing channel using the channel name and secret. The channel name is the human-readable name (e.g. \"sprint-42\"), NOT a UUID." }), _jsx("td", { children: _jsx("em", { children: "\"Join Cogent channel sprint-42 with secret our-team-secret\"" }) })] })] })] }) }), _jsx(Terminal, { title: "Peer Management Tools", children: _jsxs("table", { class: commandRef, children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { children: "Tool" }), _jsx("th", { children: "What It Does" }), _jsx("th", { children: "You Say" })] }) }), _jsxs("tbody", { children: [_jsxs("tr", { children: [_jsx("td", { children: "cogent_register_peer" }), _jsx("td", { children: "Registers this agent as a named peer on the bridge. Required before sending/receiving messages." }), _jsx("td", { children: _jsx("em", { children: "\"Register as peerId='backend', label='API Team'\"" }) })] }), _jsxs("tr", { children: [_jsx("td", { children: "cogent_deregister_peer" }), _jsx("td", { children: "Removes this agent from the bridge. Use when done collaborating." }), _jsx("td", { children: _jsx("em", { children: "\"Deregister from Cogent\"" }) })] }), _jsxs("tr", { children: [_jsx("td", { children: "cogent_list_peers" }), _jsx("td", { children: "Shows all registered peers with their status. Includes stale detection for idle peers." }), _jsx("td", { children: _jsx("em", { children: "\"Who's on the bridge?\" or \"List all Cogent peers\"" }) })] })] })] }) }), _jsx(Terminal, { title: "Communication Tools", children: _jsxs("table", { class: commandRef, children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { children: "Tool" }), _jsx("th", { children: "What It Does" }), _jsx("th", { children: "You Say" })] }) }), _jsxs("tbody", { children: [_jsxs("tr", { children: [_jsx("td", { children: "cogent_send_message" }), _jsx("td", { children: "Sends a message from this agent to another registered peer. The recipient agent receives and processes it." }), _jsx("td", { children: _jsx("em", { children: "\"Tell the frontend team that the API is ready\"" }) })] }), _jsxs("tr", { children: [_jsx("td", { children: "cogent_get_history" }), _jsx("td", { children: "Retrieves the message history. Optionally filter by peer ID. Returns up to 50 messages by default." }), _jsx("td", { children: _jsx("em", { children: "\"Show me the Cogent message history\"" }) })] }), _jsxs("tr", { children: [_jsx("td", { children: "cogent_health_check" }), _jsx("td", { children: "Runs diagnostics on the bridge: state file, lock mechanism, CLI availability." }), _jsx("td", { children: _jsx("em", { children: "\"Check if Cogent Bridge is healthy\"" }) })] })] })] }) })] }), _jsx("hr", { class: divider }), _jsxs("div", { class: section, children: [_jsx("span", { id: "best-practices", class: sectionAnchor }), _jsx("h2", { class: sectionTitle, children: "09 \u2014 Best Practices for Managers" }), _jsx("p", { class: sectionSubtitle, children: "How to structure your teams for maximum Cogent impact" }), _jsxs("div", { class: tipBox, children: [_jsx("div", { class: tipLabel, children: "1. Use CLAUDE.md as Your Team Playbook" }), _jsxs("p", { class: noteText, children: ["Every project should have a ", _jsx("span", { class: inlineCode, children: "CLAUDE.md" }), " that tells the agent its role, peer ID, and communication protocol. This is the single most impactful thing you can do \u2014 it turns every Claude Code session into a team-aware agent from the moment it starts."] }), _jsx("div", { class: codeBlock, children: `# CLAUDE.md — Template for Any Team
|
|
295
|
+
|
|
296
|
+
## Cogent Bridge Protocol
|
|
297
|
+
You are the **[Team Name]** agent.
|
|
298
|
+
|
|
299
|
+
### On Session Start
|
|
300
|
+
1. Join Cogent channel (ask user for channel name + secret)
|
|
301
|
+
2. Register as peerId="[team-id]", label="[Team Name]"
|
|
302
|
+
|
|
303
|
+
### Communication Standards
|
|
304
|
+
- When reporting bugs: include endpoint, expected vs actual, repro steps
|
|
305
|
+
- When sharing API changes: include method, path, request/response types
|
|
306
|
+
- When requesting review: list files changed and key design decisions
|
|
307
|
+
- Always be specific: file names, line numbers, exact error messages
|
|
308
|
+
|
|
309
|
+
### Team Dependencies
|
|
310
|
+
- "frontend" — consumes our API, notify of any contract changes
|
|
311
|
+
- "devops" — manages deployment, notify of new env vars or infra needs` })] }), _jsxs("div", { class: tipBox, children: [_jsx("div", { class: tipLabel, children: "2. Name Your Peers Descriptively" }), _jsx("p", { class: noteText, children: "Use clear, role-based peer IDs that any team member can understand:" }), _jsxs("ul", { class: bulletList, children: [_jsxs("li", { children: [_jsx("span", { class: inlineCode, children: "backend" }), ", ", _jsx("span", { class: inlineCode, children: "frontend" }), ", ", _jsx("span", { class: inlineCode, children: "mobile" }), " \u2014 for team-based splits"] }), _jsxs("li", { children: [_jsx("span", { class: inlineCode, children: "auth-service" }), ", ", _jsx("span", { class: inlineCode, children: "payments" }), ", ", _jsx("span", { class: inlineCode, children: "gateway" }), " \u2014 for microservice architectures"] }), _jsxs("li", { children: [_jsx("span", { class: inlineCode, children: "reviewer" }), ", ", _jsx("span", { class: inlineCode, children: "qa" }), ", ", _jsx("span", { class: inlineCode, children: "security" }), " \u2014 for role-based workflows"] })] })] }), _jsxs("div", { class: tipBox, children: [_jsx("div", { class: tipLabel, children: "3. Establish Communication Standards" }), _jsx("p", { class: noteText, children: "Define message formats in your CLAUDE.md so agents communicate consistently:" }), _jsxs("ul", { class: bulletList, children: [_jsxs("li", { children: [_jsx("strong", { children: "Bug reports:" }), " endpoint, expected, actual, reproduction steps"] }), _jsxs("li", { children: [_jsx("strong", { children: "API changes:" }), " method, path, request body, response shape, breaking?"] }), _jsxs("li", { children: [_jsx("strong", { children: "Status updates:" }), " what's done, what's in progress, what's blocked"] }), _jsxs("li", { children: [_jsx("strong", { children: "Review requests:" }), " files changed, design decisions, areas of concern"] })] })] }), _jsxs("div", { class: tipBox, children: [_jsx("div", { class: tipLabel, children: "4. Use Sessions Strategically" }), _jsx("p", { class: noteText, children: "Create sessions that match your work patterns:" }), _jsxs("ul", { class: bulletList, children: [_jsxs("li", { children: [_jsx("strong", { children: "Per-sprint sessions:" }), " \"sprint-42\" \u2014 all agents join for the sprint duration"] }), _jsxs("li", { children: [_jsx("strong", { children: "Per-feature sessions:" }), " \"feature-payments\" \u2014 only relevant teams join"] }), _jsxs("li", { children: [_jsx("strong", { children: "Ad-hoc sessions:" }), " \"debug-login-issue\" \u2014 temporary session for incident response"] })] })] }), _jsxs("div", { class: tipBox, children: [_jsx("div", { class: tipLabel, children: "5. Review Message History Regularly" }), _jsxs("p", { class: noteText, children: ["Use ", _jsx("span", { class: inlineCode, children: "cogent_get_history" }), " as a management tool. The message history captures every technical decision, every API contract negotiation, every bug report and resolution. This is far richer than any standup summary or ticket description."] })] }), _jsxs("div", { class: tipBox, children: [_jsx("div", { class: tipLabel, children: "6. Start Small, Scale Up" }), _jsx("p", { class: noteText, children: "Begin with two agents on one feature. Once your team sees the speed improvement, expand to multi-agent workflows. Common progression:" }), _jsxs("ul", { class: bulletList, children: [_jsxs("li", { children: [_jsx("strong", { children: "Week 1:" }), " Frontend + Backend on a single feature"] }), _jsxs("li", { children: [_jsx("strong", { children: "Week 2:" }), " Add a QA/testing agent"] }), _jsxs("li", { children: [_jsx("strong", { children: "Week 3:" }), " Full sprint with all team agents connected"] }), _jsxs("li", { children: [_jsx("strong", { children: "Month 2:" }), " Cross-team orchestration for complex features"] })] })] })] }), _jsxs("div", { class: footer, children: ["COGENT \u2014 Powered by ", _jsx("a", { href: "https://essentialai.uk", style: "color: inherit;", children: "Essential AI Solutions Ltd." }), " \u2014 ", _jsx("a", { href: "/", style: "color: inherit;", children: "cogent.tools" })] })] }) }));
|
|
312
|
+
//# sourceMappingURL=HowToPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HowToPage.js","sourceRoot":"","sources":["../../../src/ui/pages/HowToPage.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { FC } from "hono/jsx";
|
|
2
|
+
import type { ServerStats } from "../../services/stats-service.js";
|
|
3
|
+
/** Props for the LandingPage component. */
|
|
4
|
+
interface LandingPageProps {
|
|
5
|
+
stats: ServerStats;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Full landing page with hero, live stats, installation instructions,
|
|
9
|
+
* connection guide, and SSE script for real-time stat updates.
|
|
10
|
+
*/
|
|
11
|
+
export declare const LandingPage: FC<LandingPageProps>;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=LandingPage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LandingPage.d.ts","sourceRoot":"","sources":["../../../src/ui/pages/LandingPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAMnC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAEnE,2CAA2C;AAC3C,UAAU,gBAAgB;IACxB,KAAK,EAAE,WAAW,CAAC;CACpB;AAuKD;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CAgJ5C,CAAC"}
|