@codeyam/codeyam-cli 0.1.0-staging.a890816 → 0.1.0-staging.ae0de75
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/analyzer-template/.build-info.json +6 -6
- package/analyzer-template/log.txt +3 -3
- package/analyzer-template/package.json +6 -6
- package/analyzer-template/packages/ai/package.json +1 -1
- package/analyzer-template/packages/aws/package.json +1 -1
- package/analyzer-template/packages/database/package.json +3 -3
- package/analyzer-template/packages/github/package.json +1 -1
- package/codeyam-cli/src/commands/editor.js +892 -90
- package/codeyam-cli/src/commands/editor.js.map +1 -1
- package/codeyam-cli/src/commands/init.js +6 -1
- package/codeyam-cli/src/commands/init.js.map +1 -1
- package/codeyam-cli/src/utils/__tests__/editorAudit.test.js +246 -0
- package/codeyam-cli/src/utils/__tests__/editorAudit.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorDevServer.test.js +126 -0
- package/codeyam-cli/src/utils/__tests__/editorDevServer.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorJournal.test.js +295 -0
- package/codeyam-cli/src/utils/__tests__/editorJournal.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorMockState.test.js +270 -0
- package/codeyam-cli/src/utils/__tests__/editorMockState.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorPreloadHelpers.test.js +100 -0
- package/codeyam-cli/src/utils/__tests__/editorPreloadHelpers.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorPreview.test.js +147 -0
- package/codeyam-cli/src/utils/__tests__/editorPreview.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js +76 -0
- package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/git.editor.test.js +134 -0
- package/codeyam-cli/src/utils/__tests__/git.editor.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/project.test.js +65 -0
- package/codeyam-cli/src/utils/__tests__/project.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/scenarioMarkers.test.js +121 -0
- package/codeyam-cli/src/utils/__tests__/scenarioMarkers.test.js.map +1 -0
- package/codeyam-cli/src/utils/buildFlags.js +4 -0
- package/codeyam-cli/src/utils/buildFlags.js.map +1 -0
- package/codeyam-cli/src/utils/editorAudit.js +82 -0
- package/codeyam-cli/src/utils/editorAudit.js.map +1 -0
- package/codeyam-cli/src/utils/editorDevServer.js +98 -0
- package/codeyam-cli/src/utils/editorDevServer.js.map +1 -0
- package/codeyam-cli/src/utils/editorJournal.js +137 -0
- package/codeyam-cli/src/utils/editorJournal.js.map +1 -0
- package/codeyam-cli/src/utils/editorMockState.js +248 -0
- package/codeyam-cli/src/utils/editorMockState.js.map +1 -0
- package/codeyam-cli/src/utils/editorPreloadHelpers.js +64 -0
- package/codeyam-cli/src/utils/editorPreloadHelpers.js.map +1 -0
- package/codeyam-cli/src/utils/editorPreview.js +66 -0
- package/codeyam-cli/src/utils/editorPreview.js.map +1 -0
- package/codeyam-cli/src/utils/editorScenarios.js +56 -0
- package/codeyam-cli/src/utils/editorScenarios.js.map +1 -0
- package/codeyam-cli/src/utils/git.js +51 -0
- package/codeyam-cli/src/utils/git.js.map +1 -1
- package/codeyam-cli/src/utils/install-skills.js +28 -17
- package/codeyam-cli/src/utils/install-skills.js.map +1 -1
- package/codeyam-cli/src/utils/project.js +15 -5
- package/codeyam-cli/src/utils/project.js.map +1 -1
- package/codeyam-cli/src/utils/scenarioMarkers.js +134 -0
- package/codeyam-cli/src/utils/scenarioMarkers.js.map +1 -0
- package/codeyam-cli/src/utils/testRunner.js +1 -1
- package/codeyam-cli/src/utils/testRunner.js.map +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/Terminal-wkqC0AQk.js +41 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-audit-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-load-commit-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/editor-CdjF_fX6.js +8 -0
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.dev-D8ILZMR0.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/globals-B17TBSS6.css +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/manifest-b8fd6b07.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{root-DiRdBreB.js → root-DUKqhFlb.js} +7 -7
- package/codeyam-cli/src/webserver/build/client/assets/xterm-BqvuqXEL.js +27 -0
- package/codeyam-cli/src/webserver/build/server/assets/{index-BzAbACSx.js → index-BLhjL9Xi.js} +1 -1
- package/codeyam-cli/src/webserver/build/server/assets/server-build-DyMuI5mU.js +363 -0
- package/codeyam-cli/src/webserver/build/server/index.js +1 -1
- package/codeyam-cli/src/webserver/build-info.json +5 -5
- package/codeyam-cli/src/webserver/editorProxy.js +182 -14
- package/codeyam-cli/src/webserver/editorProxy.js.map +1 -1
- package/codeyam-cli/src/webserver/scripts/codeyam-preload.mjs +175 -0
- package/codeyam-cli/src/webserver/server.js +61 -12
- package/codeyam-cli/src/webserver/server.js.map +1 -1
- package/codeyam-cli/src/webserver/terminalServer.js +29 -103
- package/codeyam-cli/src/webserver/terminalServer.js.map +1 -1
- package/codeyam-cli/templates/editor-step-hook.py +6 -4
- package/codeyam-cli/templates/{codeyam-dev-mode.md → skills/codeyam-dev-mode/SKILL.md} +1 -1
- package/codeyam-cli/templates/{codeyam-editor.md → skills/codeyam-editor/SKILL.md} +5 -4
- package/codeyam-cli/templates/{codeyam-memory.md → skills/codeyam-memory/SKILL.md} +215 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/deprecated-prompt.md +100 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/detect-deprecated-patterns.sh +108 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/find-exports.sh +69 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/misleading-api-prompt.md +117 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/analyze-prompt.md +46 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/cleanup.sh +12 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/filter.jq +45 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/preprocess.sh +139 -0
- package/package.json +2 -2
- package/scripts/npm-post-install.cjs +12 -0
- package/codeyam-cli/src/webserver/build/client/assets/Terminal-CcG8YTLx.js +0 -41
- package/codeyam-cli/src/webserver/build/client/assets/editor-W_IGJ2Kd.js +0 -7
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.dev-D6SEzMCu.js +0 -6
- package/codeyam-cli/src/webserver/build/client/assets/globals-BZB_H1w2.css +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/manifest-8daa4147.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/xterm-DMSzMhqy.js +0 -9
- package/codeyam-cli/src/webserver/build/server/assets/server-build-OdUocH6P.js +0 -362
- package/scripts/finalize-analyzer.cjs +0 -13
- /package/codeyam-cli/templates/{codeyam-diagnose.md → commands/codeyam-diagnose.md} +0 -0
- /package/codeyam-cli/templates/{codeyam-debug.md → skills/codeyam-debug/SKILL.md} +0 -0
- /package/codeyam-cli/templates/{codeyam-new-rule.md → skills/codeyam-new-rule/SKILL.md} +0 -0
- /package/codeyam-cli/templates/{codeyam-setup.md → skills/codeyam-setup/SKILL.md} +0 -0
- /package/codeyam-cli/templates/{codeyam-sim.md → skills/codeyam-sim/SKILL.md} +0 -0
- /package/codeyam-cli/templates/{codeyam-test.md → skills/codeyam-test/SKILL.md} +0 -0
- /package/codeyam-cli/templates/{codeyam-verify.md → skills/codeyam-verify/SKILL.md} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Z as K,_ as L,N as $,O as rr,X as tr,Q as or,T as ir,U as pr,W as mr,V as sr,Y as ar,R as er}from"./assets/server-build-
|
|
1
|
+
import{Z as K,_ as L,N as $,O as rr,X as tr,Q as or,T as ir,U as pr,W as mr,V as sr,Y as ar,R as er}from"./assets/server-build-DyMuI5mU.js";import"react/jsx-runtime";import"node:stream";import"@react-router/node";import"react-router";import"isbot";import"react-dom/server";import"react";import"lucide-react";import"fetch-retry";import"better-sqlite3";import"pg";import"fs";import"path";import"kysely";import"kysely/helpers/sqlite";import"kysely/helpers/postgres";import"typescript";import"fs/promises";import"os";import"prompts";import"chalk";import"crypto";import"child_process";import"url";import"util";import"dotenv";import"events";import"uuid";import"http";import"net";import"ws";import"node-pty";import"openai";import"p-queue";import"p-retry";import"@aws-sdk/client-dynamodb";import"lru-cache";import"pluralize";import"piscina";import"json5";import"@aws-sdk/util-dynamodb";import"v8";import"react-syntax-highlighter";import"react-syntax-highlighter/dist/cjs/styles/prism/index.js";import"node:crypto";import"minimatch";import"react-markdown";import"remark-gfm";import"react-diff-viewer-continued";export{K as allowedActionOrigins,L as assets,$ as assetsBuildDirectory,rr as basename,tr as entry,or as future,ir as isSpaMode,pr as prerender,mr as publicPath,sr as routeDiscovery,ar as routes,er as ssr};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
-
"buildTimestamp": "2026-03-
|
|
3
|
-
"buildTime":
|
|
4
|
-
"buildNumber":
|
|
5
|
-
"semanticVersion": "0.1.
|
|
6
|
-
"version": "0.1.
|
|
2
|
+
"buildTimestamp": "2026-03-03T15:39:17.097Z",
|
|
3
|
+
"buildTime": 1772552357097,
|
|
4
|
+
"buildNumber": 846,
|
|
5
|
+
"semanticVersion": "0.1.846",
|
|
6
|
+
"version": "0.1.846 (2026-03-03T15:39)"
|
|
7
7
|
}
|
|
@@ -3,16 +3,29 @@ import net from 'net';
|
|
|
3
3
|
import fs from 'fs';
|
|
4
4
|
import path from 'path';
|
|
5
5
|
import { getProjectRoot } from "../state.js";
|
|
6
|
+
import { createMockStateManager, } from "../utils/editorMockState.js";
|
|
6
7
|
// Global key so the proxy survives HMR
|
|
7
8
|
const GLOBAL_KEY = '__codeyam_editor_proxy__';
|
|
8
9
|
const CACHE_TTL_MS = 500;
|
|
9
10
|
let scenarioCache = { data: null, timestamp: 0 };
|
|
11
|
+
// Max body size to buffer for mock matching (10MB)
|
|
12
|
+
const MAX_BODY_SIZE = 10 * 1024 * 1024;
|
|
10
13
|
function getProxyState() {
|
|
11
14
|
return globalThis[GLOBAL_KEY] ?? null;
|
|
12
15
|
}
|
|
13
16
|
function setProxyState(state) {
|
|
14
17
|
globalThis[GLOBAL_KEY] = state;
|
|
15
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* Get or create the mock state manager (survives HMR via globalThis).
|
|
21
|
+
*/
|
|
22
|
+
function getMockStateManager() {
|
|
23
|
+
const key = '__codeyam_mock_state__';
|
|
24
|
+
if (!globalThis[key]) {
|
|
25
|
+
globalThis[key] = createMockStateManager();
|
|
26
|
+
}
|
|
27
|
+
return globalThis[key];
|
|
28
|
+
}
|
|
16
29
|
/**
|
|
17
30
|
* Get the proxy URL if the proxy is running.
|
|
18
31
|
*/
|
|
@@ -24,6 +37,7 @@ export function getProxyUrl() {
|
|
|
24
37
|
}
|
|
25
38
|
/**
|
|
26
39
|
* Read the active scenario's mock data from disk, with brief caching.
|
|
40
|
+
* Feeds the data into the MockStateManager.
|
|
27
41
|
*/
|
|
28
42
|
function readScenarioData() {
|
|
29
43
|
const now = Date.now();
|
|
@@ -52,6 +66,8 @@ function readScenarioData() {
|
|
|
52
66
|
}
|
|
53
67
|
const data = JSON.parse(fs.readFileSync(dataFilePath, 'utf-8'));
|
|
54
68
|
scenarioCache = { data, timestamp: now };
|
|
69
|
+
// Feed into mock state manager (smart reload handles dedup)
|
|
70
|
+
getMockStateManager().loadScenario(data);
|
|
55
71
|
return data;
|
|
56
72
|
}
|
|
57
73
|
catch (err) {
|
|
@@ -66,6 +82,8 @@ function readScenarioData() {
|
|
|
66
82
|
* Supports two formats:
|
|
67
83
|
* - New route-keyed: { "routes": { "/api/drinks": { "body": [...] } } }
|
|
68
84
|
* - Legacy key-based: { "drinks": [...] } → matches /api/drinks
|
|
85
|
+
*
|
|
86
|
+
* @deprecated Use MockStateManager.matchRequest() instead for method-aware matching.
|
|
69
87
|
*/
|
|
70
88
|
export function findMatchingRoute(pathname, scenarioData) {
|
|
71
89
|
// New format: check routes map
|
|
@@ -92,7 +110,71 @@ export function findMatchingRoute(pathname, scenarioData) {
|
|
|
92
110
|
return null;
|
|
93
111
|
}
|
|
94
112
|
/**
|
|
95
|
-
*
|
|
113
|
+
* Buffer the request body, up to MAX_BODY_SIZE.
|
|
114
|
+
* Returns null if the body exceeds the limit.
|
|
115
|
+
*/
|
|
116
|
+
function bufferRequestBody(req) {
|
|
117
|
+
return new Promise((resolve) => {
|
|
118
|
+
const chunks = [];
|
|
119
|
+
let totalSize = 0;
|
|
120
|
+
req.on('data', (chunk) => {
|
|
121
|
+
totalSize += chunk.length;
|
|
122
|
+
if (totalSize > MAX_BODY_SIZE) {
|
|
123
|
+
resolve(null); // Too large — skip mock matching
|
|
124
|
+
req.resume(); // Drain remaining
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
chunks.push(chunk);
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
req.on('end', () => {
|
|
131
|
+
if (totalSize > MAX_BODY_SIZE)
|
|
132
|
+
return; // Already resolved
|
|
133
|
+
resolve(Buffer.concat(chunks));
|
|
134
|
+
});
|
|
135
|
+
req.on('error', () => {
|
|
136
|
+
resolve(null);
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Forward a buffered request to the target dev server.
|
|
142
|
+
* Unlike the streaming forwardRequest, this replays a buffered body.
|
|
143
|
+
*/
|
|
144
|
+
function forwardBufferedRequest(req, res, targetUrl, bodyBuffer) {
|
|
145
|
+
const target = new URL(targetUrl);
|
|
146
|
+
const headers = { ...req.headers, host: `${target.hostname}:${target.port}` };
|
|
147
|
+
// Update content-length if we have the body buffer
|
|
148
|
+
if (bodyBuffer) {
|
|
149
|
+
headers['content-length'] = String(bodyBuffer.length);
|
|
150
|
+
}
|
|
151
|
+
const options = {
|
|
152
|
+
hostname: target.hostname,
|
|
153
|
+
port: target.port,
|
|
154
|
+
path: req.url,
|
|
155
|
+
method: req.method,
|
|
156
|
+
headers,
|
|
157
|
+
};
|
|
158
|
+
const proxyReq = http.request(options, (proxyRes) => {
|
|
159
|
+
res.writeHead(proxyRes.statusCode || 200, proxyRes.headers);
|
|
160
|
+
proxyRes.pipe(res, { end: true });
|
|
161
|
+
});
|
|
162
|
+
proxyReq.on('error', (err) => {
|
|
163
|
+
console.warn(`[editorProxy] Forward error for ${req.method} ${req.url}: ${err.message}`);
|
|
164
|
+
if (!res.headersSent) {
|
|
165
|
+
res.writeHead(502, { 'Content-Type': 'text/plain' });
|
|
166
|
+
res.end('Bad Gateway — dev server unreachable');
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
if (bodyBuffer && bodyBuffer.length > 0) {
|
|
170
|
+
proxyReq.end(bodyBuffer);
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
proxyReq.end();
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Forward an HTTP request to the target dev server (streaming, no body buffering).
|
|
96
178
|
*/
|
|
97
179
|
function forwardRequest(req, res, targetUrl) {
|
|
98
180
|
const target = new URL(targetUrl);
|
|
@@ -146,9 +228,43 @@ function handleUpgrade(req, socket, head, targetUrl) {
|
|
|
146
228
|
proxySocket.destroy();
|
|
147
229
|
});
|
|
148
230
|
}
|
|
231
|
+
/**
|
|
232
|
+
* Write proxy-config.json so the preload module can discover the proxy.
|
|
233
|
+
*/
|
|
234
|
+
function writeProxyConfig(proxyPort, targetUrl) {
|
|
235
|
+
const projectRoot = getProjectRoot() || process.env.CODEYAM_ROOT_PATH || process.cwd();
|
|
236
|
+
const configPath = path.join(projectRoot, '.codeyam', 'proxy-config.json');
|
|
237
|
+
try {
|
|
238
|
+
fs.mkdirSync(path.dirname(configPath), { recursive: true });
|
|
239
|
+
fs.writeFileSync(configPath, JSON.stringify({
|
|
240
|
+
proxyUrl: `http://localhost:${proxyPort}`,
|
|
241
|
+
devServerUrl: targetUrl,
|
|
242
|
+
}), 'utf-8');
|
|
243
|
+
console.log(`[editorProxy] Wrote proxy config to ${configPath}`);
|
|
244
|
+
}
|
|
245
|
+
catch (err) {
|
|
246
|
+
console.warn('[editorProxy] Failed to write proxy-config.json:', err);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Remove proxy-config.json on proxy stop.
|
|
251
|
+
*/
|
|
252
|
+
function removeProxyConfig() {
|
|
253
|
+
const projectRoot = getProjectRoot() || process.env.CODEYAM_ROOT_PATH || process.cwd();
|
|
254
|
+
const configPath = path.join(projectRoot, '.codeyam', 'proxy-config.json');
|
|
255
|
+
try {
|
|
256
|
+
if (fs.existsSync(configPath)) {
|
|
257
|
+
fs.unlinkSync(configPath);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
catch {
|
|
261
|
+
// Best effort
|
|
262
|
+
}
|
|
263
|
+
}
|
|
149
264
|
/**
|
|
150
265
|
* Start the editor proxy server.
|
|
151
|
-
* Intercepts
|
|
266
|
+
* Intercepts requests to API routes matching the active scenario, forwards everything else.
|
|
267
|
+
* Supports all HTTP methods (GET, POST, PUT, DELETE, PATCH) with body buffering.
|
|
152
268
|
*/
|
|
153
269
|
export async function startEditorProxy(options) {
|
|
154
270
|
// Stop existing proxy first
|
|
@@ -156,28 +272,77 @@ export async function startEditorProxy(options) {
|
|
|
156
272
|
const { targetUrl } = options;
|
|
157
273
|
let port = options.port;
|
|
158
274
|
console.log(`[editorProxy] Starting proxy (requested port ${port}, target ${targetUrl})`);
|
|
275
|
+
const mockState = getMockStateManager();
|
|
159
276
|
const server = http.createServer((req, res) => {
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
if (
|
|
166
|
-
|
|
277
|
+
void (async () => {
|
|
278
|
+
const parsedUrl = new URL(req.url || '/', `http://localhost:${port}`);
|
|
279
|
+
const pathname = parsedUrl.pathname;
|
|
280
|
+
const method = req.method || 'GET';
|
|
281
|
+
// CORS preflight — permissive 204 for browser cross-origin requests
|
|
282
|
+
if (method === 'OPTIONS') {
|
|
283
|
+
res.writeHead(204, {
|
|
284
|
+
'Access-Control-Allow-Origin': '*',
|
|
285
|
+
'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, PATCH, OPTIONS',
|
|
286
|
+
'Access-Control-Allow-Headers': 'Content-Type, Authorization, X-Requested-With',
|
|
287
|
+
'Access-Control-Max-Age': '86400',
|
|
288
|
+
});
|
|
289
|
+
res.end();
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
292
|
+
// Load scenario data (also feeds MockStateManager)
|
|
293
|
+
readScenarioData();
|
|
294
|
+
// For methods that may carry a body, buffer it first
|
|
295
|
+
const needsBody = method === 'POST' ||
|
|
296
|
+
method === 'PUT' ||
|
|
297
|
+
method === 'DELETE' ||
|
|
298
|
+
method === 'PATCH';
|
|
299
|
+
if (needsBody) {
|
|
300
|
+
const bodyBuffer = await bufferRequestBody(req);
|
|
301
|
+
if (bodyBuffer === null) {
|
|
302
|
+
// Body too large — forward without mock matching
|
|
303
|
+
forwardBufferedRequest(req, res, targetUrl, null);
|
|
304
|
+
return;
|
|
305
|
+
}
|
|
306
|
+
// Try to parse body as JSON for mock matching
|
|
307
|
+
let parsedBody = undefined;
|
|
308
|
+
if (bodyBuffer.length > 0) {
|
|
309
|
+
try {
|
|
310
|
+
parsedBody = JSON.parse(bodyBuffer.toString('utf-8'));
|
|
311
|
+
}
|
|
312
|
+
catch {
|
|
313
|
+
// Not JSON — that's fine, still try mock matching without parsed body
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
const match = mockState.matchRequest(method, pathname, parsedBody);
|
|
167
317
|
if (match) {
|
|
168
|
-
console.log(`[editorProxy] Intercepted ${
|
|
318
|
+
console.log(`[editorProxy] Intercepted ${method} ${pathname} → mock response (status ${match.status})`);
|
|
169
319
|
res.writeHead(match.status, {
|
|
170
320
|
'Content-Type': 'application/json',
|
|
171
321
|
'Access-Control-Allow-Origin': '*',
|
|
172
322
|
'X-CodeYam-Proxy': 'scenario-data',
|
|
173
323
|
});
|
|
174
|
-
res.end(JSON.stringify(match.body));
|
|
324
|
+
res.end(match.body != null ? JSON.stringify(match.body) : '');
|
|
175
325
|
return;
|
|
176
326
|
}
|
|
327
|
+
// No mock match — forward with buffered body
|
|
328
|
+
forwardBufferedRequest(req, res, targetUrl, bodyBuffer);
|
|
329
|
+
return;
|
|
177
330
|
}
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
331
|
+
// GET, HEAD, etc. — try mock matching (no body)
|
|
332
|
+
const match = mockState.matchRequest(method, pathname);
|
|
333
|
+
if (match) {
|
|
334
|
+
console.log(`[editorProxy] Intercepted ${method} ${pathname} → mock response (status ${match.status})`);
|
|
335
|
+
res.writeHead(match.status, {
|
|
336
|
+
'Content-Type': 'application/json',
|
|
337
|
+
'Access-Control-Allow-Origin': '*',
|
|
338
|
+
'X-CodeYam-Proxy': 'scenario-data',
|
|
339
|
+
});
|
|
340
|
+
res.end(match.body != null ? JSON.stringify(match.body) : '');
|
|
341
|
+
return;
|
|
342
|
+
}
|
|
343
|
+
// Forward everything else to the dev server
|
|
344
|
+
forwardRequest(req, res, targetUrl);
|
|
345
|
+
})();
|
|
181
346
|
});
|
|
182
347
|
// Handle WebSocket upgrades (for HMR)
|
|
183
348
|
server.on('upgrade', (req, socket, head) => {
|
|
@@ -198,6 +363,8 @@ export async function startEditorProxy(options) {
|
|
|
198
363
|
port = currentPort;
|
|
199
364
|
const state = { server, port, targetUrl };
|
|
200
365
|
setProxyState(state);
|
|
366
|
+
// Write proxy-config.json for the preload module
|
|
367
|
+
writeProxyConfig(port, targetUrl);
|
|
201
368
|
console.log(`[editorProxy] Proxy started on port ${port}, forwarding to ${targetUrl}`);
|
|
202
369
|
return { port };
|
|
203
370
|
}
|
|
@@ -220,6 +387,7 @@ export async function stopEditorProxy() {
|
|
|
220
387
|
if (!state)
|
|
221
388
|
return;
|
|
222
389
|
console.log(`[editorProxy] Stopping proxy on port ${state.port}`);
|
|
390
|
+
removeProxyConfig();
|
|
223
391
|
return new Promise((resolve) => {
|
|
224
392
|
state.server.close(() => {
|
|
225
393
|
console.log('[editorProxy] Proxy stopped');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editorProxy.js","sourceRoot":"","sources":["../../../../src/webserver/editorProxy.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"editorProxy.js","sourceRoot":"","sources":["../../../../src/webserver/editorProxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node.js preload module for CodeYam editor proxy.
|
|
3
|
+
*
|
|
4
|
+
* Loaded via NODE_OPTIONS='--import /path/to/codeyam-preload.mjs' in the
|
|
5
|
+
* dev server process. Patches global fetch and http/https.request so that
|
|
6
|
+
* SSR fetches (Next.js server components, server actions, etc.) are routed
|
|
7
|
+
* through the CodeYam proxy instead of hitting the dev server directly.
|
|
8
|
+
*
|
|
9
|
+
* Must be .mjs (native ESM) because --import requires it.
|
|
10
|
+
* No TypeScript, no build step, no dependencies.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import http from 'node:http';
|
|
14
|
+
import https from 'node:https';
|
|
15
|
+
import fs from 'node:fs';
|
|
16
|
+
import path from 'node:path';
|
|
17
|
+
|
|
18
|
+
let proxyConfig = null;
|
|
19
|
+
let configLoaded = false;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Lazily load the proxy config from .codeyam/proxy-config.json.
|
|
23
|
+
* Returns null if the file doesn't exist yet (proxy still starting).
|
|
24
|
+
*/
|
|
25
|
+
function getProxyConfig() {
|
|
26
|
+
if (configLoaded && proxyConfig) return proxyConfig;
|
|
27
|
+
|
|
28
|
+
// Try env var first (most reliable)
|
|
29
|
+
const proxyUrl = process.env.CODEYAM_PROXY_URL;
|
|
30
|
+
const devServerUrl = process.env.CODEYAM_DEV_SERVER_URL;
|
|
31
|
+
if (proxyUrl && devServerUrl) {
|
|
32
|
+
proxyConfig = { proxyUrl, devServerUrl };
|
|
33
|
+
configLoaded = true;
|
|
34
|
+
return proxyConfig;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Fall back to config file
|
|
38
|
+
try {
|
|
39
|
+
const cwd = process.cwd();
|
|
40
|
+
const configPath = path.join(cwd, '.codeyam', 'proxy-config.json');
|
|
41
|
+
if (fs.existsSync(configPath)) {
|
|
42
|
+
const raw = fs.readFileSync(configPath, 'utf-8');
|
|
43
|
+
proxyConfig = JSON.parse(raw);
|
|
44
|
+
configLoaded = true;
|
|
45
|
+
return proxyConfig;
|
|
46
|
+
}
|
|
47
|
+
} catch {
|
|
48
|
+
// File doesn't exist yet or is invalid — that's fine
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Check if a URL string targets the dev server and return the redirected URL.
|
|
56
|
+
*/
|
|
57
|
+
function redirectUrl(urlStr, config) {
|
|
58
|
+
try {
|
|
59
|
+
const parsed = new URL(urlStr);
|
|
60
|
+
const dev = new URL(config.devServerUrl);
|
|
61
|
+
const proxy = new URL(config.proxyUrl);
|
|
62
|
+
|
|
63
|
+
if (parsed.hostname === dev.hostname && parsed.port === dev.port) {
|
|
64
|
+
parsed.hostname = proxy.hostname;
|
|
65
|
+
parsed.port = proxy.port;
|
|
66
|
+
parsed.protocol = proxy.protocol;
|
|
67
|
+
return parsed.toString();
|
|
68
|
+
}
|
|
69
|
+
} catch {
|
|
70
|
+
// Invalid URL — pass through
|
|
71
|
+
}
|
|
72
|
+
return urlStr;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Check if http.request options target the dev server and patch them.
|
|
77
|
+
*/
|
|
78
|
+
function redirectOptions(options, config) {
|
|
79
|
+
const dev = new URL(config.devServerUrl);
|
|
80
|
+
const proxy = new URL(config.proxyUrl);
|
|
81
|
+
const devPort = parseInt(dev.port, 10);
|
|
82
|
+
const proxyPort = parseInt(proxy.port, 10);
|
|
83
|
+
|
|
84
|
+
if (options.hostname && parseInt(String(options.port), 10) === devPort && options.hostname === dev.hostname) {
|
|
85
|
+
return {
|
|
86
|
+
...options,
|
|
87
|
+
hostname: proxy.hostname,
|
|
88
|
+
port: proxyPort,
|
|
89
|
+
headers: options.headers
|
|
90
|
+
? { ...options.headers, host: `${proxy.hostname}:${proxyPort}` }
|
|
91
|
+
: options.headers,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if (options.host) {
|
|
96
|
+
const expectedHost = `${dev.hostname}:${devPort}`;
|
|
97
|
+
if (options.host === expectedHost) {
|
|
98
|
+
return {
|
|
99
|
+
...options,
|
|
100
|
+
host: `${proxy.hostname}:${proxyPort}`,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
return options;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// --- Patch global fetch ---
|
|
109
|
+
|
|
110
|
+
const originalFetch = globalThis.fetch;
|
|
111
|
+
|
|
112
|
+
if (originalFetch) {
|
|
113
|
+
globalThis.fetch = function patchedFetch(input, init) {
|
|
114
|
+
const config = getProxyConfig();
|
|
115
|
+
if (!config) return originalFetch.call(this, input, init);
|
|
116
|
+
|
|
117
|
+
if (typeof input === 'string') {
|
|
118
|
+
const redirected = redirectUrl(input, config);
|
|
119
|
+
if (redirected !== input) {
|
|
120
|
+
return originalFetch.call(this, redirected, init);
|
|
121
|
+
}
|
|
122
|
+
} else if (input instanceof URL) {
|
|
123
|
+
const redirected = redirectUrl(input.toString(), config);
|
|
124
|
+
if (redirected !== input.toString()) {
|
|
125
|
+
return originalFetch.call(this, redirected, init);
|
|
126
|
+
}
|
|
127
|
+
} else if (input instanceof Request) {
|
|
128
|
+
const redirected = redirectUrl(input.url, config);
|
|
129
|
+
if (redirected !== input.url) {
|
|
130
|
+
return originalFetch.call(this, new Request(redirected, input), init);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
return originalFetch.call(this, input, init);
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// --- Patch http.request and https.request ---
|
|
139
|
+
|
|
140
|
+
function patchModule(mod, protocol) {
|
|
141
|
+
const originalRequest = mod.request;
|
|
142
|
+
const originalGet = mod.get;
|
|
143
|
+
|
|
144
|
+
mod.request = function patchedRequest(urlOrOptions, optionsOrCallback, callback) {
|
|
145
|
+
const config = getProxyConfig();
|
|
146
|
+
if (!config) return originalRequest.call(this, urlOrOptions, optionsOrCallback, callback);
|
|
147
|
+
|
|
148
|
+
// http.request(url, options, callback)
|
|
149
|
+
if (typeof urlOrOptions === 'string' || urlOrOptions instanceof URL) {
|
|
150
|
+
const urlStr = typeof urlOrOptions === 'string' ? urlOrOptions : urlOrOptions.toString();
|
|
151
|
+
const redirected = redirectUrl(urlStr, config);
|
|
152
|
+
if (redirected !== urlStr) {
|
|
153
|
+
// Redirect to proxy — force http since proxy is always http
|
|
154
|
+
return http.request.call(http, redirected, optionsOrCallback, callback);
|
|
155
|
+
}
|
|
156
|
+
return originalRequest.call(this, urlOrOptions, optionsOrCallback, callback);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// http.request(options, callback)
|
|
160
|
+
const redirected = redirectOptions(urlOrOptions, config);
|
|
161
|
+
if (redirected !== urlOrOptions) {
|
|
162
|
+
return http.request.call(http, redirected, optionsOrCallback);
|
|
163
|
+
}
|
|
164
|
+
return originalRequest.call(this, urlOrOptions, optionsOrCallback, callback);
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
mod.get = function patchedGet(urlOrOptions, optionsOrCallback, callback) {
|
|
168
|
+
const req = mod.request(urlOrOptions, optionsOrCallback, callback);
|
|
169
|
+
req.end();
|
|
170
|
+
return req;
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
patchModule(http, 'http');
|
|
175
|
+
patchModule(https, 'https');
|
|
@@ -199,11 +199,13 @@ async function checkPreviewHealth(url) {
|
|
|
199
199
|
};
|
|
200
200
|
}
|
|
201
201
|
}
|
|
202
|
-
|
|
202
|
+
// Unified preview control — refresh, navigate, switch scenario, or any combination.
|
|
203
|
+
// Handles log clearing, HMR settle, SSR health check, scenario switching, and navigation.
|
|
204
|
+
app.post('/api/dev-mode-preview', express.json(), async (req, res) => {
|
|
205
|
+
const { scenarioSlug, scenarioId, path: navPath } = req.body || {};
|
|
203
206
|
let sessionsNotified = 0;
|
|
204
207
|
let logCleared = false;
|
|
205
|
-
|
|
206
|
-
// Read config and resolve log path
|
|
208
|
+
// 1. Read config and resolve log path
|
|
207
209
|
let logPath = null;
|
|
208
210
|
try {
|
|
209
211
|
const configPath = path.join(process.cwd(), '.codeyam', 'config.json');
|
|
@@ -215,19 +217,43 @@ app.post('/api/dev-mode-refresh', async (_req, res) => {
|
|
|
215
217
|
catch {
|
|
216
218
|
// Config not available — not critical
|
|
217
219
|
}
|
|
218
|
-
// Extract preview URL from log BEFORE clearing it
|
|
220
|
+
// 2. Extract preview URL from log BEFORE clearing it
|
|
221
|
+
let previewUrl = null;
|
|
219
222
|
if (logPath && fs.existsSync(logPath)) {
|
|
220
223
|
previewUrl = getPreviewUrl(logPath);
|
|
221
224
|
}
|
|
222
|
-
//
|
|
225
|
+
// Fall back to cached URL if log didn't have it
|
|
226
|
+
if (!previewUrl)
|
|
227
|
+
previewUrl = cachedPreviewUrl;
|
|
228
|
+
// 3. Switch scenario if provided
|
|
229
|
+
if (scenarioSlug) {
|
|
230
|
+
try {
|
|
231
|
+
const projectRoot = process.env.CODEYAM_ROOT_PATH || process.cwd();
|
|
232
|
+
const codeyamDir = path.join(projectRoot, '.codeyam');
|
|
233
|
+
const activeScenarioPath = path.join(codeyamDir, 'active-scenario.json');
|
|
234
|
+
fs.mkdirSync(codeyamDir, { recursive: true });
|
|
235
|
+
fs.writeFileSync(activeScenarioPath, JSON.stringify({
|
|
236
|
+
scenarioSlug,
|
|
237
|
+
scenarioId: scenarioId || null,
|
|
238
|
+
dataFile: scenarioId
|
|
239
|
+
? `.codeyam/editor-scenarios/${scenarioId}.json`
|
|
240
|
+
: null,
|
|
241
|
+
switchedAt: new Date().toISOString(),
|
|
242
|
+
}, null, 2));
|
|
243
|
+
}
|
|
244
|
+
catch {
|
|
245
|
+
// Scenario switch failed — not critical, continue with refresh
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
// 4. Broadcast WebSocket refresh to browser (iframe starts reloading)
|
|
223
249
|
try {
|
|
224
250
|
const { broadcastPreviewRefresh } = await import('./terminalServer.js');
|
|
225
|
-
sessionsNotified = broadcastPreviewRefresh();
|
|
251
|
+
sessionsNotified = broadcastPreviewRefresh(navPath || undefined);
|
|
226
252
|
}
|
|
227
253
|
catch {
|
|
228
254
|
// Terminal server not loaded yet — ignore
|
|
229
255
|
}
|
|
230
|
-
// Clear the server log so post-refresh log reads only show fresh output
|
|
256
|
+
// 5. Clear the server log so post-refresh log reads only show fresh output
|
|
231
257
|
if (logPath && fs.existsSync(logPath)) {
|
|
232
258
|
try {
|
|
233
259
|
fs.writeFileSync(logPath, '');
|
|
@@ -237,12 +263,23 @@ app.post('/api/dev-mode-refresh', async (_req, res) => {
|
|
|
237
263
|
// Log file not writable — not critical
|
|
238
264
|
}
|
|
239
265
|
}
|
|
240
|
-
// Wait for
|
|
266
|
+
// 6. Wait for HMR to settle and the page to re-render
|
|
241
267
|
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
242
|
-
//
|
|
268
|
+
// 7. Compute the full URL (with navigation path if provided)
|
|
269
|
+
let fullUrl = previewUrl;
|
|
270
|
+
if (navPath && previewUrl) {
|
|
271
|
+
try {
|
|
272
|
+
fullUrl = new URL(navPath, previewUrl).href;
|
|
273
|
+
}
|
|
274
|
+
catch {
|
|
275
|
+
fullUrl = previewUrl;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
// 8. Fetch the preview URL to detect SSR errors
|
|
243
279
|
let preview = null;
|
|
244
|
-
|
|
245
|
-
|
|
280
|
+
const healthCheckUrl = fullUrl || previewUrl;
|
|
281
|
+
if (healthCheckUrl) {
|
|
282
|
+
preview = await checkPreviewHealth(healthCheckUrl);
|
|
246
283
|
// If unhealthy, write error to log so Claude can see it via tail
|
|
247
284
|
if (!preview.healthy && preview.error && logPath) {
|
|
248
285
|
try {
|
|
@@ -257,7 +294,19 @@ app.post('/api/dev-mode-refresh', async (_req, res) => {
|
|
|
257
294
|
}
|
|
258
295
|
}
|
|
259
296
|
}
|
|
260
|
-
res.json({
|
|
297
|
+
res.json({
|
|
298
|
+
success: true,
|
|
299
|
+
sessionsNotified,
|
|
300
|
+
logCleared,
|
|
301
|
+
url: fullUrl || null,
|
|
302
|
+
preview,
|
|
303
|
+
});
|
|
304
|
+
});
|
|
305
|
+
// Show results panel in the editor Build tab — triggered by Claude at end of step 12.
|
|
306
|
+
app.post('/api/editor-show-results', async (_req, res) => {
|
|
307
|
+
const { broadcastShowResults } = await import('./terminalServer.js');
|
|
308
|
+
const sessionsNotified = broadcastShowResults();
|
|
309
|
+
res.json({ success: true, sessionsNotified });
|
|
261
310
|
});
|
|
262
311
|
// Handle Remix routes (API routes, page routes, etc.)
|
|
263
312
|
if (process.env.NODE_ENV === 'development') {
|