@essentialai/cogent-bridge 1.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.
Files changed (156) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +311 -0
  3. package/dist/backend/backend-provider.d.ts +28 -0
  4. package/dist/backend/backend-provider.d.ts.map +1 -0
  5. package/dist/backend/backend-provider.js +60 -0
  6. package/dist/backend/backend-provider.js.map +1 -0
  7. package/dist/backend/file-backend.d.ts +22 -0
  8. package/dist/backend/file-backend.d.ts.map +1 -0
  9. package/dist/backend/file-backend.js +46 -0
  10. package/dist/backend/file-backend.js.map +1 -0
  11. package/dist/backend/http-backend.d.ts +94 -0
  12. package/dist/backend/http-backend.d.ts.map +1 -0
  13. package/dist/backend/http-backend.js +185 -0
  14. package/dist/backend/http-backend.js.map +1 -0
  15. package/dist/backend/index.d.ts +5 -0
  16. package/dist/backend/index.d.ts.map +1 -0
  17. package/dist/backend/index.js +4 -0
  18. package/dist/backend/index.js.map +1 -0
  19. package/dist/backend/storage-backend.d.ts +22 -0
  20. package/dist/backend/storage-backend.d.ts.map +1 -0
  21. package/dist/backend/storage-backend.js +2 -0
  22. package/dist/backend/storage-backend.js.map +1 -0
  23. package/dist/cli.d.ts +3 -0
  24. package/dist/cli.d.ts.map +1 -0
  25. package/dist/cli.js +18 -0
  26. package/dist/cli.js.map +1 -0
  27. package/dist/cloud/backoff.d.ts +19 -0
  28. package/dist/cloud/backoff.d.ts.map +1 -0
  29. package/dist/cloud/backoff.js +32 -0
  30. package/dist/cloud/backoff.js.map +1 -0
  31. package/dist/cloud/credential-store.d.ts +29 -0
  32. package/dist/cloud/credential-store.d.ts.map +1 -0
  33. package/dist/cloud/credential-store.js +38 -0
  34. package/dist/cloud/credential-store.js.map +1 -0
  35. package/dist/cloud/http-client.d.ts +36 -0
  36. package/dist/cloud/http-client.d.ts.map +1 -0
  37. package/dist/cloud/http-client.js +94 -0
  38. package/dist/cloud/http-client.js.map +1 -0
  39. package/dist/cloud/index.d.ts +10 -0
  40. package/dist/cloud/index.d.ts.map +1 -0
  41. package/dist/cloud/index.js +7 -0
  42. package/dist/cloud/index.js.map +1 -0
  43. package/dist/cloud/message-inbox.d.ts +49 -0
  44. package/dist/cloud/message-inbox.d.ts.map +1 -0
  45. package/dist/cloud/message-inbox.js +109 -0
  46. package/dist/cloud/message-inbox.js.map +1 -0
  47. package/dist/cloud/ws-client.d.ts +112 -0
  48. package/dist/cloud/ws-client.d.ts.map +1 -0
  49. package/dist/cloud/ws-client.js +241 -0
  50. package/dist/cloud/ws-client.js.map +1 -0
  51. package/dist/cloud/ws-frames.d.ts +66 -0
  52. package/dist/cloud/ws-frames.d.ts.map +1 -0
  53. package/dist/cloud/ws-frames.js +19 -0
  54. package/dist/cloud/ws-frames.js.map +1 -0
  55. package/dist/config.d.ts +40 -0
  56. package/dist/config.d.ts.map +1 -0
  57. package/dist/config.js +39 -0
  58. package/dist/config.js.map +1 -0
  59. package/dist/constants.d.ts +3 -0
  60. package/dist/constants.d.ts.map +1 -0
  61. package/dist/constants.js +6 -0
  62. package/dist/constants.js.map +1 -0
  63. package/dist/e2e/helpers.d.ts +101 -0
  64. package/dist/e2e/helpers.d.ts.map +1 -0
  65. package/dist/e2e/helpers.js +228 -0
  66. package/dist/e2e/helpers.js.map +1 -0
  67. package/dist/errors.d.ts +40 -0
  68. package/dist/errors.d.ts.map +1 -0
  69. package/dist/errors.js +53 -0
  70. package/dist/errors.js.map +1 -0
  71. package/dist/index.d.ts +2 -0
  72. package/dist/index.d.ts.map +1 -0
  73. package/dist/index.js +108 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/logger.d.ts +22 -0
  76. package/dist/logger.d.ts.map +1 -0
  77. package/dist/logger.js +79 -0
  78. package/dist/logger.js.map +1 -0
  79. package/dist/services/cc-cli.d.ts +8 -0
  80. package/dist/services/cc-cli.d.ts.map +1 -0
  81. package/dist/services/cc-cli.js +104 -0
  82. package/dist/services/cc-cli.js.map +1 -0
  83. package/dist/services/health-check.d.ts +33 -0
  84. package/dist/services/health-check.d.ts.map +1 -0
  85. package/dist/services/health-check.js +96 -0
  86. package/dist/services/health-check.js.map +1 -0
  87. package/dist/services/peer-registry.d.ts +9 -0
  88. package/dist/services/peer-registry.d.ts.map +1 -0
  89. package/dist/services/peer-registry.js +207 -0
  90. package/dist/services/peer-registry.js.map +1 -0
  91. package/dist/startup.d.ts +18 -0
  92. package/dist/startup.d.ts.map +1 -0
  93. package/dist/startup.js +270 -0
  94. package/dist/startup.js.map +1 -0
  95. package/dist/tools/create-session.d.ts +12 -0
  96. package/dist/tools/create-session.d.ts.map +1 -0
  97. package/dist/tools/create-session.js +113 -0
  98. package/dist/tools/create-session.js.map +1 -0
  99. package/dist/tools/deregister-peer.d.ts +3 -0
  100. package/dist/tools/deregister-peer.d.ts.map +1 -0
  101. package/dist/tools/deregister-peer.js +38 -0
  102. package/dist/tools/deregister-peer.js.map +1 -0
  103. package/dist/tools/get-history.d.ts +3 -0
  104. package/dist/tools/get-history.d.ts.map +1 -0
  105. package/dist/tools/get-history.js +40 -0
  106. package/dist/tools/get-history.js.map +1 -0
  107. package/dist/tools/health-check.d.ts +3 -0
  108. package/dist/tools/health-check.d.ts.map +1 -0
  109. package/dist/tools/health-check.js +28 -0
  110. package/dist/tools/health-check.js.map +1 -0
  111. package/dist/tools/join-session.d.ts +12 -0
  112. package/dist/tools/join-session.d.ts.map +1 -0
  113. package/dist/tools/join-session.js +90 -0
  114. package/dist/tools/join-session.js.map +1 -0
  115. package/dist/tools/list-peers.d.ts +3 -0
  116. package/dist/tools/list-peers.d.ts.map +1 -0
  117. package/dist/tools/list-peers.js +36 -0
  118. package/dist/tools/list-peers.js.map +1 -0
  119. package/dist/tools/register-peer.d.ts +3 -0
  120. package/dist/tools/register-peer.d.ts.map +1 -0
  121. package/dist/tools/register-peer.js +155 -0
  122. package/dist/tools/register-peer.js.map +1 -0
  123. package/dist/tools/send-message.d.ts +3 -0
  124. package/dist/tools/send-message.d.ts.map +1 -0
  125. package/dist/tools/send-message.js +121 -0
  126. package/dist/tools/send-message.js.map +1 -0
  127. package/dist/types.d.ts +31 -0
  128. package/dist/types.d.ts.map +1 -0
  129. package/dist/types.js +2 -0
  130. package/dist/types.js.map +1 -0
  131. package/dist/wizard/detect.d.ts +4 -0
  132. package/dist/wizard/detect.d.ts.map +1 -0
  133. package/dist/wizard/detect.js +21 -0
  134. package/dist/wizard/detect.js.map +1 -0
  135. package/dist/wizard/index.d.ts +5 -0
  136. package/dist/wizard/index.d.ts.map +1 -0
  137. package/dist/wizard/index.js +140 -0
  138. package/dist/wizard/index.js.map +1 -0
  139. package/dist/wizard/prompts.d.ts +18 -0
  140. package/dist/wizard/prompts.d.ts.map +1 -0
  141. package/dist/wizard/prompts.js +66 -0
  142. package/dist/wizard/prompts.js.map +1 -0
  143. package/dist/wizard/scaffold-demo.d.ts +6 -0
  144. package/dist/wizard/scaffold-demo.d.ts.map +1 -0
  145. package/dist/wizard/scaffold-demo.js +37 -0
  146. package/dist/wizard/scaffold-demo.js.map +1 -0
  147. package/dist/wizard/scaffold-real.d.ts +16 -0
  148. package/dist/wizard/scaffold-real.d.ts.map +1 -0
  149. package/dist/wizard/scaffold-real.js +64 -0
  150. package/dist/wizard/scaffold-real.js.map +1 -0
  151. package/dist/wizard/templates.d.ts +9 -0
  152. package/dist/wizard/templates.d.ts.map +1 -0
  153. package/dist/wizard/templates.js +182 -0
  154. package/dist/wizard/templates.js.map +1 -0
  155. package/package.json +71 -0
  156. package/server.json +60 -0
@@ -0,0 +1,140 @@
1
+ import * as readline from "node:readline";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import fs from "node:fs";
5
+ import { banner, ask, choose, confirm, heading, success, warn, c } from "./prompts.js";
6
+ import { detectNpxPath, detectClaudePath, isNvmPath } from "./detect.js";
7
+ import { scaffoldDemo } from "./scaffold-demo.js";
8
+ import { scaffoldReal } from "./scaffold-real.js";
9
+ export function printDemoNextSteps(baseDir) {
10
+ const apiDir = path.join(baseDir, "api-server");
11
+ const webDir = path.join(baseDir, "web-client");
12
+ heading("Next Steps");
13
+ console.log(` ${c.bold}1.${c.reset} Install dependencies:`);
14
+ console.log(` ${c.dim}cd ${apiDir} && npm install${c.reset}`);
15
+ console.log(` ${c.dim}cd ${webDir} && npm install${c.reset}`);
16
+ console.log();
17
+ console.log(` ${c.bold}2.${c.reset} Start the API server:`);
18
+ console.log(` ${c.dim}cd ${apiDir} && node server.js${c.reset}`);
19
+ console.log();
20
+ console.log(` ${c.bold}3.${c.reset} Open Terminal 1 — Backend team:`);
21
+ console.log(` ${c.dim}cd ${apiDir}${c.reset}`);
22
+ console.log(` ${c.dim}claude${c.reset}`);
23
+ console.log(` Then tell Claude: "Register on the bridge and wait for a bug report"`);
24
+ console.log();
25
+ console.log(` ${c.bold}4.${c.reset} Open Terminal 2 — Frontend team:`);
26
+ console.log(` ${c.dim}cd ${webDir}${c.reset}`);
27
+ console.log(` ${c.dim}claude${c.reset}`);
28
+ console.log(` Then tell Claude: "Register on the bridge, run node app.js, and report bugs to backend"`);
29
+ printAddMorePeers();
30
+ }
31
+ export function printRealNextSteps(pathA, idA, labelA, pathB, idB, labelB, result) {
32
+ heading("Files");
33
+ for (const f of result.created)
34
+ success(`Created ${f}`);
35
+ for (const f of result.modified)
36
+ success(`Modified ${f}`);
37
+ for (const f of result.skipped)
38
+ warn(`Skipped ${f} (bridge section already exists)`);
39
+ heading("Next Steps");
40
+ console.log(` ${c.bold}1.${c.reset} Open Terminal 1 — ${labelA}:`);
41
+ console.log(` ${c.dim}cd ${pathA}${c.reset}`);
42
+ console.log(` ${c.dim}claude${c.reset}`);
43
+ console.log(` Then tell Claude: "Register on the bridge as ${idA}"`);
44
+ console.log();
45
+ console.log(` ${c.bold}2.${c.reset} Open Terminal 2 — ${labelB}:`);
46
+ console.log(` ${c.dim}cd ${pathB}${c.reset}`);
47
+ console.log(` ${c.dim}claude${c.reset}`);
48
+ console.log(` Then tell Claude: "Register on the bridge as ${idB}"`);
49
+ console.log();
50
+ console.log(` ${c.bold}3.${c.reset} Send a message from either session:`);
51
+ console.log(` "Use cogent_send_message to tell ${idA} about [your topic]"`);
52
+ printAddMorePeers();
53
+ }
54
+ function printAddMorePeers() {
55
+ heading("Adding More Peers");
56
+ console.log(` To add a 3rd (or more) peer to the conversation:`);
57
+ console.log(` 1. Copy the ${c.bold}.mcp.json${c.reset} to the new project (or run this wizard again)`);
58
+ console.log(` 2. Add the Cogent Bridge section to its CLAUDE.md`);
59
+ console.log(` 3. Launch ${c.bold}claude${c.reset} in that directory and register with a unique peerId`);
60
+ console.log(` 4. Any registered peer can message any other peer`);
61
+ console.log();
62
+ }
63
+ export async function runWizard() {
64
+ const rl = readline.createInterface({
65
+ input: process.stdin,
66
+ output: process.stdout,
67
+ });
68
+ try {
69
+ banner();
70
+ // Detect tools
71
+ const npxPath = detectNpxPath();
72
+ const claudePath = detectClaudePath();
73
+ if (isNvmPath(npxPath)) {
74
+ console.log(` ${c.dim}Detected nvm — using absolute path: ${npxPath}${c.reset}`);
75
+ }
76
+ if (!claudePath) {
77
+ warn("Claude CLI not found in PATH. Install it before using Cogent Bridge.");
78
+ console.log();
79
+ }
80
+ const mode = await choose(rl, "What would you like to set up?", [
81
+ "Demo — Two sample projects with a planted bug (great for trying Cogent Bridge)",
82
+ "Real — Add Cogent Bridge to two existing projects",
83
+ ]);
84
+ if (mode === 0) {
85
+ // Demo mode
86
+ const defaultBase = path.join(os.homedir(), "cogent-bridge-demo");
87
+ const baseDir = await ask(rl, "Base directory for demo projects:", defaultBase);
88
+ const resolved = path.resolve(baseDir);
89
+ if (fs.existsSync(resolved)) {
90
+ const overwrite = await confirm(rl, `${resolved} already exists. Overwrite?`, false);
91
+ if (!overwrite) {
92
+ console.log("\nAborted.");
93
+ return;
94
+ }
95
+ }
96
+ heading("Creating demo projects");
97
+ const result = scaffoldDemo(resolved, npxPath);
98
+ for (const f of result.files) {
99
+ success(`Created ${path.join(resolved, f)}`);
100
+ }
101
+ printDemoNextSteps(resolved);
102
+ }
103
+ else {
104
+ // Real mode
105
+ const pathA = await ask(rl, "Absolute path to Project A:");
106
+ if (!fs.existsSync(pathA) || !fs.statSync(pathA).isDirectory()) {
107
+ console.log(`\n ${c.red}Error:${c.reset} ${pathA} is not a valid directory.`);
108
+ return;
109
+ }
110
+ const defaultIdA = path.basename(pathA).toLowerCase().replace(/[^a-z0-9-]/g, "-");
111
+ const idA = await ask(rl, "Peer ID for Project A:", defaultIdA);
112
+ const defaultLabelA = "CC_" + path.basename(pathA).replace(/[^a-zA-Z0-9]/g, "_");
113
+ const labelA = await ask(rl, "Label for Project A:", defaultLabelA);
114
+ const pathB = await ask(rl, "Absolute path to Project B:");
115
+ if (!fs.existsSync(pathB) || !fs.statSync(pathB).isDirectory()) {
116
+ console.log(`\n ${c.red}Error:${c.reset} ${pathB} is not a valid directory.`);
117
+ return;
118
+ }
119
+ const defaultIdB = path.basename(pathB).toLowerCase().replace(/[^a-z0-9-]/g, "-");
120
+ const idB = await ask(rl, "Peer ID for Project B:", defaultIdB);
121
+ const defaultLabelB = "CC_" + path.basename(pathB).replace(/[^a-zA-Z0-9]/g, "_");
122
+ const labelB = await ask(rl, "Label for Project B:", defaultLabelB);
123
+ heading("Configuring projects");
124
+ const result = scaffoldReal({
125
+ projectAPath: path.resolve(pathA),
126
+ projectAId: idA,
127
+ projectALabel: labelA,
128
+ projectBPath: path.resolve(pathB),
129
+ projectBId: idB,
130
+ projectBLabel: labelB,
131
+ npxPath,
132
+ });
133
+ printRealNextSteps(path.resolve(pathA), idA, labelA, path.resolve(pathB), idB, labelB, result);
134
+ }
135
+ }
136
+ finally {
137
+ rl.close();
138
+ }
139
+ }
140
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/wizard/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { Interface as RLInterface } from "node:readline";
2
+ export declare const c: {
3
+ reset: string;
4
+ bold: string;
5
+ dim: string;
6
+ green: string;
7
+ cyan: string;
8
+ yellow: string;
9
+ red: string;
10
+ };
11
+ export declare function ask(rl: RLInterface, question: string, defaultVal?: string): Promise<string>;
12
+ export declare function choose(rl: RLInterface, question: string, options: string[]): Promise<number>;
13
+ export declare function confirm(rl: RLInterface, question: string, defaultVal?: boolean): Promise<boolean>;
14
+ export declare function banner(): void;
15
+ export declare function success(msg: string): void;
16
+ export declare function warn(msg: string): void;
17
+ export declare function heading(msg: string): void;
18
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/wizard/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AAG9D,eAAO,MAAM,CAAC;;;;;;;;CAQb,CAAC;AAEF,wBAAgB,GAAG,CACjB,EAAE,EAAE,WAAW,EACf,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED,wBAAgB,MAAM,CACpB,EAAE,EAAE,WAAW,EACf,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,MAAM,CAAC,CAkBjB;AAED,wBAAgB,OAAO,CACrB,EAAE,EAAE,WAAW,EACf,QAAQ,EAAE,MAAM,EAChB,UAAU,UAAQ,GACjB,OAAO,CAAC,OAAO,CAAC,CAYlB;AAED,wBAAgB,MAAM,IAAI,IAAI,CAO7B;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEzC;AAED,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEtC;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEzC"}
@@ -0,0 +1,66 @@
1
+ // ANSI helpers
2
+ export const c = {
3
+ reset: "\x1b[0m",
4
+ bold: "\x1b[1m",
5
+ dim: "\x1b[2m",
6
+ green: "\x1b[32m",
7
+ cyan: "\x1b[36m",
8
+ yellow: "\x1b[33m",
9
+ red: "\x1b[31m",
10
+ };
11
+ export function ask(rl, question, defaultVal) {
12
+ const suffix = defaultVal ? ` ${c.dim}(${defaultVal})${c.reset} ` : " ";
13
+ return new Promise((resolve) => {
14
+ rl.question(`${c.cyan}?${c.reset} ${question}${suffix}`, (answer) => {
15
+ const trimmed = answer.trim();
16
+ resolve(trimmed || defaultVal || "");
17
+ });
18
+ });
19
+ }
20
+ export function choose(rl, question, options) {
21
+ return new Promise((resolve) => {
22
+ const lines = options
23
+ .map((opt, i) => ` ${c.bold}[${i + 1}]${c.reset} ${opt}`)
24
+ .join("\n");
25
+ rl.question(`${c.cyan}?${c.reset} ${question}\n${lines}\n${c.cyan}>${c.reset} `, (answer) => {
26
+ const num = parseInt(answer.trim(), 10);
27
+ if (num >= 1 && num <= options.length) {
28
+ resolve(num - 1);
29
+ }
30
+ else {
31
+ // Default to first option on invalid input
32
+ resolve(0);
33
+ }
34
+ });
35
+ });
36
+ }
37
+ export function confirm(rl, question, defaultVal = false) {
38
+ const hint = defaultVal ? "Y/n" : "y/N";
39
+ return new Promise((resolve) => {
40
+ rl.question(`${c.cyan}?${c.reset} ${question} ${c.dim}(${hint})${c.reset} `, (answer) => {
41
+ const val = answer.trim().toLowerCase();
42
+ if (val === "")
43
+ resolve(defaultVal);
44
+ else
45
+ resolve(val === "y" || val === "yes");
46
+ });
47
+ });
48
+ }
49
+ export function banner() {
50
+ console.log(`
51
+ ${c.cyan}╔══════════════════════════════════════╗
52
+ ║ Cogent Bridge — Setup Wizard ║
53
+ ║ Inter-session communication ║
54
+ ╚══════════════════════════════════════╝${c.reset}
55
+ `);
56
+ }
57
+ export function success(msg) {
58
+ console.log(` ${c.green}✓${c.reset} ${msg}`);
59
+ }
60
+ export function warn(msg) {
61
+ console.log(` ${c.yellow}!${c.reset} ${msg}`);
62
+ }
63
+ export function heading(msg) {
64
+ console.log(`\n${c.bold}━━━ ${msg} ━━━${c.reset}\n`);
65
+ }
66
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/wizard/prompts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface ScaffoldResult {
2
+ files: string[];
3
+ baseDir: string;
4
+ }
5
+ export declare function scaffoldDemo(baseDir: string, npxPath: string): ScaffoldResult;
6
+ //# sourceMappingURL=scaffold-demo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold-demo.d.ts","sourceRoot":"","sources":["../../src/wizard/scaffold-demo.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,CAuC7E"}
@@ -0,0 +1,37 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { mcpJsonContent, demoServerJs, demoAppJs, demoPackageJson, demoBackendClaudeMd, demoFrontendClaudeMd, } from "./templates.js";
4
+ export function scaffoldDemo(baseDir, npxPath) {
5
+ const files = [];
6
+ const apiDir = path.join(baseDir, "api-server");
7
+ const webDir = path.join(baseDir, "web-client");
8
+ fs.mkdirSync(apiDir, { recursive: true });
9
+ fs.mkdirSync(webDir, { recursive: true });
10
+ const mcpJson = mcpJsonContent(npxPath);
11
+ // Backend files
12
+ const backendFiles = [
13
+ ["package.json", demoPackageJson("api-server", { express: "^4.21.0", cors: "^2.8.5" })],
14
+ ["server.js", demoServerJs()],
15
+ [".mcp.json", mcpJson],
16
+ ["CLAUDE.md", demoBackendClaudeMd()],
17
+ ];
18
+ for (const [name, content] of backendFiles) {
19
+ const filePath = path.join(apiDir, name);
20
+ fs.writeFileSync(filePath, content, "utf-8");
21
+ files.push(path.join("api-server", name));
22
+ }
23
+ // Frontend files
24
+ const frontendFiles = [
25
+ ["package.json", demoPackageJson("web-client", { axios: "^1.7.0" })],
26
+ ["app.js", demoAppJs()],
27
+ [".mcp.json", mcpJson],
28
+ ["CLAUDE.md", demoFrontendClaudeMd()],
29
+ ];
30
+ for (const [name, content] of frontendFiles) {
31
+ const filePath = path.join(webDir, name);
32
+ fs.writeFileSync(filePath, content, "utf-8");
33
+ files.push(path.join("web-client", name));
34
+ }
35
+ return { files, baseDir };
36
+ }
37
+ //# sourceMappingURL=scaffold-demo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold-demo.js","sourceRoot":"","sources":["../../src/wizard/scaffold-demo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,cAAc,EACd,YAAY,EACZ,SAAS,EACT,eAAe,EACf,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAOxB,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,OAAe;IAC3D,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAEhD,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE1C,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAExC,gBAAgB;IAChB,MAAM,YAAY,GAAuB;QACvC,CAAC,cAAc,EAAE,eAAe,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QACvF,CAAC,WAAW,EAAE,YAAY,EAAE,CAAC;QAC7B,CAAC,WAAW,EAAE,OAAO,CAAC;QACtB,CAAC,WAAW,EAAE,mBAAmB,EAAE,CAAC;KACrC,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,YAAY,EAAE,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACzC,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,iBAAiB;IACjB,MAAM,aAAa,GAAuB;QACxC,CAAC,cAAc,EAAE,eAAe,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACpE,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC;QACvB,CAAC,WAAW,EAAE,OAAO,CAAC;QACtB,CAAC,WAAW,EAAE,oBAAoB,EAAE,CAAC;KACtC,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,aAAa,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACzC,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,16 @@
1
+ export interface RealConfig {
2
+ projectAPath: string;
3
+ projectAId: string;
4
+ projectALabel: string;
5
+ projectBPath: string;
6
+ projectBId: string;
7
+ projectBLabel: string;
8
+ npxPath: string;
9
+ }
10
+ export interface RealScaffoldResult {
11
+ created: string[];
12
+ modified: string[];
13
+ skipped: string[];
14
+ }
15
+ export declare function scaffoldReal(config: RealConfig): RealScaffoldResult;
16
+ //# sourceMappingURL=scaffold-real.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold-real.d.ts","sourceRoot":"","sources":["../../src/wizard/scaffold-real.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAkCD,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,kBAAkB,CAwCnE"}
@@ -0,0 +1,64 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { mcpJsonContent, mcpJsonMerge, claudeMdBridgeSection } from "./templates.js";
4
+ function writeMcpJson(projectPath, npxPath) {
5
+ const filePath = path.join(projectPath, ".mcp.json");
6
+ if (fs.existsSync(filePath)) {
7
+ const existing = fs.readFileSync(filePath, "utf-8");
8
+ fs.writeFileSync(filePath, mcpJsonMerge(existing, npxPath), "utf-8");
9
+ return "modified";
10
+ }
11
+ fs.writeFileSync(filePath, mcpJsonContent(npxPath), "utf-8");
12
+ return "created";
13
+ }
14
+ function writeClaudeMd(projectPath, peerId, label, otherPeerId) {
15
+ const filePath = path.join(projectPath, "CLAUDE.md");
16
+ const section = claudeMdBridgeSection(peerId, label, otherPeerId);
17
+ if (fs.existsSync(filePath)) {
18
+ const existing = fs.readFileSync(filePath, "utf-8");
19
+ if (existing.includes("## Cogent Bridge Protocol")) {
20
+ return "skipped";
21
+ }
22
+ fs.writeFileSync(filePath, existing.trimEnd() + "\n\n" + section, "utf-8");
23
+ return "modified";
24
+ }
25
+ fs.writeFileSync(filePath, section, "utf-8");
26
+ return "created";
27
+ }
28
+ export function scaffoldReal(config) {
29
+ const created = [];
30
+ const modified = [];
31
+ const skipped = [];
32
+ // Project A
33
+ const mcpA = writeMcpJson(config.projectAPath, config.npxPath);
34
+ const mcpAPath = path.join(config.projectAPath, ".mcp.json");
35
+ if (mcpA === "created")
36
+ created.push(mcpAPath);
37
+ else
38
+ modified.push(mcpAPath);
39
+ const claudeA = writeClaudeMd(config.projectAPath, config.projectAId, config.projectALabel, config.projectBId);
40
+ const claudeAPath = path.join(config.projectAPath, "CLAUDE.md");
41
+ if (claudeA === "created")
42
+ created.push(claudeAPath);
43
+ else if (claudeA === "modified")
44
+ modified.push(claudeAPath);
45
+ else
46
+ skipped.push(claudeAPath);
47
+ // Project B
48
+ const mcpB = writeMcpJson(config.projectBPath, config.npxPath);
49
+ const mcpBPath = path.join(config.projectBPath, ".mcp.json");
50
+ if (mcpB === "created")
51
+ created.push(mcpBPath);
52
+ else
53
+ modified.push(mcpBPath);
54
+ const claudeB = writeClaudeMd(config.projectBPath, config.projectBId, config.projectBLabel, config.projectAId);
55
+ const claudeBPath = path.join(config.projectBPath, "CLAUDE.md");
56
+ if (claudeB === "created")
57
+ created.push(claudeBPath);
58
+ else if (claudeB === "modified")
59
+ modified.push(claudeBPath);
60
+ else
61
+ skipped.push(claudeBPath);
62
+ return { created, modified, skipped };
63
+ }
64
+ //# sourceMappingURL=scaffold-real.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold-real.js","sourceRoot":"","sources":["../../src/wizard/scaffold-real.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare function mcpJsonContent(npxPath: string): string;
2
+ export declare function mcpJsonMerge(existing: string, npxPath: string): string;
3
+ export declare function claudeMdBridgeSection(peerId: string, label: string, otherPeerId: string): string;
4
+ export declare function demoServerJs(): string;
5
+ export declare function demoAppJs(): string;
6
+ export declare function demoPackageJson(name: string, deps: Record<string, string>): string;
7
+ export declare function demoBackendClaudeMd(): string;
8
+ export declare function demoFrontendClaudeMd(): string;
9
+ //# sourceMappingURL=templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/wizard/templates.ts"],"names":[],"mappings":"AAAA,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CActD;AAED,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,MAAM,CAYR;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAClB,MAAM,CA4BR;AAED,wBAAgB,YAAY,IAAI,MAAM,CAuCrC;AAED,wBAAgB,SAAS,IAAI,MAAM,CAwClC;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC3B,MAAM,CAQR;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAgB5C;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAe7C"}
@@ -0,0 +1,182 @@
1
+ export function mcpJsonContent(npxPath) {
2
+ const config = {
3
+ mcpServers: {
4
+ "cogent-bridge": {
5
+ command: npxPath,
6
+ args: ["-y", "@essentialai/cogent-bridge"],
7
+ env: {
8
+ COGENT_LOG_LEVEL: "info",
9
+ COGENT_TIMEOUT_MS: "180000",
10
+ },
11
+ },
12
+ },
13
+ };
14
+ return JSON.stringify(config, null, 2) + "\n";
15
+ }
16
+ export function mcpJsonMerge(existing, npxPath) {
17
+ const parsed = JSON.parse(existing);
18
+ if (!parsed.mcpServers)
19
+ parsed.mcpServers = {};
20
+ parsed.mcpServers["cogent-bridge"] = {
21
+ command: npxPath,
22
+ args: ["-y", "@essentialai/cogent-bridge"],
23
+ env: {
24
+ COGENT_LOG_LEVEL: "info",
25
+ COGENT_TIMEOUT_MS: "180000",
26
+ },
27
+ };
28
+ return JSON.stringify(parsed, null, 2) + "\n";
29
+ }
30
+ export function claudeMdBridgeSection(peerId, label, otherPeerId) {
31
+ return `
32
+ ## Cogent Bridge Protocol
33
+
34
+ You are participating in a cross-team collaboration via Cogent Bridge.
35
+ Your peer identity: **peerId=\`${peerId}\`**, **label=\`${label}\`**
36
+
37
+ ### On Session Start
38
+ 1. Find your Claude Code session ID:
39
+ \`\`\`bash
40
+ ls -t ~/.claude/projects/$(pwd | sed 's/[^a-zA-Z0-9-]/-/g')/*.jsonl 2>/dev/null | head -1 | xargs -I{} basename {} .jsonl
41
+ \`\`\`
42
+ 2. Register yourself on the bridge:
43
+ - Use \`cogent_register_peer\` with peerId="${peerId}", label="${label}"
44
+ - Set sessionId to the UUID from step 1
45
+ - Set cwd to your project working directory (\`pwd\`)
46
+
47
+ ### When You Receive Messages
48
+ - Messages from other peers arrive with a \`[Cogent Bridge message from ...]\` header
49
+ - Your entire response is automatically relayed back to the sender
50
+ - Do NOT use \`cogent_send_message\` to reply — just answer directly and normally
51
+ - Read carefully, investigate the issue, and respond with specifics
52
+
53
+ ### Sending Messages
54
+ - Use \`cogent_send_message\` to initiate conversations with other peers (e.g. toPeerId="${otherPeerId}")
55
+ - Be specific about what you changed when reporting fixes
56
+ - Include file names and line numbers in your responses
57
+ `;
58
+ }
59
+ export function demoServerJs() {
60
+ return `// server.js
61
+ const express = require('express');
62
+ const cors = require('cors');
63
+ const app = express();
64
+ app.use(cors());
65
+ app.use(express.json());
66
+
67
+ const users = [
68
+ { id: 1, name: 'Alice', email: 'alice@example.com', role: 'admin' },
69
+ { id: 2, name: 'Bob', email: 'bob@example.com', role: 'user' },
70
+ { id: 3, name: 'Charlie', email: 'charlie@example.com', role: 'user' },
71
+ ];
72
+
73
+ // GET /api/users - works fine
74
+ app.get('/api/users', (req, res) => {
75
+ res.json({ success: true, data: users });
76
+ });
77
+
78
+ // GET /api/users/:id - BUG: returns 200 with wrong shape when user not found
79
+ app.get('/api/users/:id', (req, res) => {
80
+ const id = parseInt(req.params.id);
81
+ const user = users.find(u => u.id === id);
82
+
83
+ // BUG 1: No 404 handling - returns 200 with { success: true, data: undefined }
84
+ // BUG 2: When user IS found, wraps in extra nested object
85
+ res.json({ success: true, data: { user: { record: user } } });
86
+ });
87
+
88
+ // POST /api/users - works fine
89
+ app.post('/api/users', (req, res) => {
90
+ const { name, email, role } = req.body;
91
+ const newUser = { id: users.length + 1, name, email, role: role || 'user' };
92
+ users.push(newUser);
93
+ res.status(201).json({ success: true, data: newUser });
94
+ });
95
+
96
+ app.listen(3001, () => console.log('API running on http://localhost:3001'));
97
+ `;
98
+ }
99
+ export function demoAppJs() {
100
+ // Using regular string concatenation to avoid template literal escaping issues.
101
+ // The output JavaScript uses backtick template literals with ${} interpolation.
102
+ const lines = [
103
+ "// app.js",
104
+ "const axios = require('axios');",
105
+ "const API_BASE = 'http://localhost:3001';",
106
+ "",
107
+ "async function listUsers() {",
108
+ " const res = await axios.get(`${API_BASE}/api/users`);",
109
+ " return res.data.data;",
110
+ "}",
111
+ "",
112
+ "async function getUser(id) {",
113
+ " const res = await axios.get(`${API_BASE}/api/users/${id}`);",
114
+ " // Frontend expects: { success: true, data: { id, name, email, role } }",
115
+ " // But gets: { success: true, data: { user: { record: {...} } } }",
116
+ " return res.data.data;",
117
+ "}",
118
+ "",
119
+ "async function main() {",
120
+ " console.log('--- List Users ---');",
121
+ " const users = await listUsers();",
122
+ " console.log(users);",
123
+ "",
124
+ " console.log('\\n--- Get User 1 ---');",
125
+ " const user = await getUser(1);",
126
+ " console.log('User name:', user.name); // undefined! Bug: extra nesting",
127
+ " console.log('User email:', user.email); // undefined!",
128
+ " console.log('Raw response:', JSON.stringify(user));",
129
+ "",
130
+ " console.log('\\n--- Get User 999 (not found) ---');",
131
+ " const missing = await getUser(999);",
132
+ " console.log('Missing user:', JSON.stringify(missing)); // No 404, gets 200 with undefined",
133
+ "}",
134
+ "",
135
+ "main().catch(console.error);",
136
+ "",
137
+ ];
138
+ return lines.join("\n");
139
+ }
140
+ export function demoPackageJson(name, deps) {
141
+ const pkg = {
142
+ name,
143
+ version: "1.0.0",
144
+ private: true,
145
+ dependencies: deps,
146
+ };
147
+ return JSON.stringify(pkg, null, 2) + "\n";
148
+ }
149
+ export function demoBackendClaudeMd() {
150
+ return `# Cogent Backend - API Server
151
+
152
+ You are the Backend development team working on an Express.js API server.
153
+
154
+ ## Project
155
+ - Express.js REST API running on port 3001
156
+ - Entry point: server.js
157
+
158
+ ${claudeMdBridgeSection("backend", "Cogent_Backend", "frontend")}
159
+ ### Bug Fix Protocol
160
+ - When you receive a bug report, read server.js and investigate
161
+ - Fix the issue, then notify the reporter with details of what changed
162
+ - Include file names and line numbers in your response
163
+ - After fixing, tell the other peer exactly how to test the fix
164
+ `;
165
+ }
166
+ export function demoFrontendClaudeMd() {
167
+ return `# Cogent Frontend - Web Client
168
+
169
+ You are the Frontend development team consuming the Backend API.
170
+
171
+ ## Project
172
+ - Node.js client consuming REST API at http://localhost:3001
173
+ - Entry point: app.js
174
+
175
+ ${claudeMdBridgeSection("frontend", "Cogent_Frontend", "backend")}
176
+ ### Bug Reporting Protocol
177
+ - When reporting bugs, include: endpoint, expected behavior, actual behavior, and reproduction steps
178
+ - When confirming fixes, actually run \`node app.js\` and report results
179
+ - If the fix works, confirm success. If not, describe what's still broken.
180
+ `;
181
+ }
182
+ //# sourceMappingURL=templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/wizard/templates.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,MAAM,MAAM,GAAG;QACb,UAAU,EAAE;YACV,eAAe,EAAE;gBACf,OAAO,EAAE,OAAO;gBAChB,IAAI,EAAE,CAAC,IAAI,EAAE,4BAA4B,CAAC;gBAC1C,GAAG,EAAE;oBACH,gBAAgB,EAAE,MAAM;oBACxB,iBAAiB,EAAE,QAAQ;iBAC5B;aACF;SACF;KACF,CAAC;IACF,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,QAAgB,EAChB,OAAe;IAEf,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACpC,IAAI,CAAC,MAAM,CAAC,UAAU;QAAE,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC;IAC/C,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,GAAG;QACnC,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,CAAC,IAAI,EAAE,4BAA4B,CAAC;QAC1C,GAAG,EAAE;YACH,gBAAgB,EAAE,MAAM;YACxB,iBAAiB,EAAE,QAAQ;SAC5B;KACF,CAAC;IACF,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,MAAc,EACd,KAAa,EACb,WAAmB;IAEnB,OAAO;;;;iCAIwB,MAAM,mBAAmB,KAAK;;;;;;;;iDAQd,MAAM,aAAa,KAAK;;;;;;;;;;;2FAWkB,WAAW;;;CAGrG,CAAC;AACF,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCR,CAAC;AACF,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,gFAAgF;IAChF,gFAAgF;IAChF,MAAM,KAAK,GAAG;QACZ,WAAW;QACX,iCAAiC;QACjC,2CAA2C;QAC3C,EAAE;QACF,8BAA8B;QAC9B,yDAAyD;QACzD,yBAAyB;QACzB,GAAG;QACH,EAAE;QACF,8BAA8B;QAC9B,+DAA+D;QAC/D,2EAA2E;QAC3E,6EAA6E;QAC7E,yBAAyB;QACzB,GAAG;QACH,EAAE;QACF,yBAAyB;QACzB,sCAAsC;QACtC,oCAAoC;QACpC,uBAAuB;QACvB,EAAE;QACF,yCAAyC;QACzC,kCAAkC;QAClC,gFAAgF;QAChF,8DAA8D;QAC9D,uDAAuD;QACvD,EAAE;QACF,uDAAuD;QACvD,uCAAuC;QACvC,6FAA6F;QAC7F,GAAG;QACH,EAAE;QACF,8BAA8B;QAC9B,EAAE;KACH,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,IAA4B;IAE5B,MAAM,GAAG,GAAG;QACV,IAAI;QACJ,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,IAAI;QACb,YAAY,EAAE,IAAI;KACnB,CAAC;IACF,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO;;;;;;;;EAQP,qBAAqB,CAAC,SAAS,EAAE,gBAAgB,EAAE,UAAU,CAAC;;;;;;CAM/D,CAAC;AACF,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO;;;;;;;;EAQP,qBAAqB,CAAC,UAAU,EAAE,iBAAiB,EAAE,SAAS,CAAC;;;;;CAKhE,CAAC;AACF,CAAC"}