@hcgstudio/ogma 0.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/LICENSE +21 -0
- package/README.md +39 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +155 -0
- package/dist/cli.js.map +1 -0
- package/dist/defineOgmaReview.d.ts +3 -0
- package/dist/defineOgmaReview.d.ts.map +1 -0
- package/dist/defineOgmaReview.js +4 -0
- package/dist/defineOgmaReview.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/node/project.d.ts +18 -0
- package/dist/node/project.d.ts.map +1 -0
- package/dist/node/project.js +104 -0
- package/dist/node/project.js.map +1 -0
- package/dist/node/server.d.ts +21 -0
- package/dist/node/server.d.ts.map +1 -0
- package/dist/node/server.js +476 -0
- package/dist/node/server.js.map +1 -0
- package/dist/node/templates.d.ts +5 -0
- package/dist/node/templates.d.ts.map +1 -0
- package/dist/node/templates.js +145 -0
- package/dist/node/templates.js.map +1 -0
- package/dist/types.d.ts +100 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/viewer/OgmaReviewApp.d.ts +7 -0
- package/dist/viewer/OgmaReviewApp.d.ts.map +1 -0
- package/dist/viewer/OgmaReviewApp.js +387 -0
- package/dist/viewer/OgmaReviewApp.js.map +1 -0
- package/dist/viewer/client.d.ts +2 -0
- package/dist/viewer/client.d.ts.map +1 -0
- package/dist/viewer/client.js +13 -0
- package/dist/viewer/client.js.map +1 -0
- package/dist/viewer/defaultReview.d.ts +4 -0
- package/dist/viewer/defaultReview.d.ts.map +1 -0
- package/dist/viewer/defaultReview.js +55 -0
- package/dist/viewer/defaultReview.js.map +1 -0
- package/dist/viewer/normalizeReviewModule.d.ts +3 -0
- package/dist/viewer/normalizeReviewModule.d.ts.map +1 -0
- package/dist/viewer/normalizeReviewModule.js +58 -0
- package/dist/viewer/normalizeReviewModule.js.map +1 -0
- package/package.json +47 -0
- package/src/cli.ts +194 -0
- package/src/defineOgmaReview.ts +5 -0
- package/src/index.ts +17 -0
- package/src/node/project.ts +143 -0
- package/src/node/server.ts +598 -0
- package/src/node/templates.ts +148 -0
- package/src/types.ts +111 -0
- package/src/viewer/OgmaReviewApp.tsx +1099 -0
- package/src/viewer/client.tsx +18 -0
- package/src/viewer/defaultReview.tsx +168 -0
- package/src/viewer/normalizeReviewModule.ts +87 -0
- package/src/viewer/styles.css +1140 -0
- package/src/viewer/virtual.d.ts +11 -0
|
@@ -0,0 +1,476 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
3
|
+
import { readFile, writeFile } from 'node:fs/promises';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
|
+
import { createServer } from 'vite';
|
|
7
|
+
import { ensureOgmaProject } from './project.js';
|
|
8
|
+
import { DEFAULT_SKILL_URL } from './templates.js';
|
|
9
|
+
function toPosixPath(value) {
|
|
10
|
+
return value.split(path.sep).join('/');
|
|
11
|
+
}
|
|
12
|
+
function fsImportSpecifier(value) {
|
|
13
|
+
return `/@fs/${toPosixPath(value)}`;
|
|
14
|
+
}
|
|
15
|
+
function isObject(value) {
|
|
16
|
+
return typeof value === 'object' && value !== null;
|
|
17
|
+
}
|
|
18
|
+
function nowIso() {
|
|
19
|
+
return new Date().toISOString();
|
|
20
|
+
}
|
|
21
|
+
function emptySession() {
|
|
22
|
+
return {
|
|
23
|
+
reviewId: 'ogma-review',
|
|
24
|
+
annotations: [],
|
|
25
|
+
updatedAt: nowIso()
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
async function readPackageVersion(packageRoot) {
|
|
29
|
+
try {
|
|
30
|
+
const manifest = JSON.parse(await readFile(path.join(packageRoot, 'package.json'), 'utf8'));
|
|
31
|
+
return manifest.version ?? '0.0.0';
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return '0.0.0';
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
async function readRequestBody(request) {
|
|
38
|
+
const chunks = [];
|
|
39
|
+
for await (const chunk of request) {
|
|
40
|
+
chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
|
|
41
|
+
}
|
|
42
|
+
return Buffer.concat(chunks).toString('utf8');
|
|
43
|
+
}
|
|
44
|
+
function sendJson(response, statusCode, value) {
|
|
45
|
+
response.statusCode = statusCode;
|
|
46
|
+
response.setHeader('content-type', 'application/json; charset=utf-8');
|
|
47
|
+
response.end(`${JSON.stringify(value, null, 2)}\n`);
|
|
48
|
+
}
|
|
49
|
+
function sendText(response, statusCode, value, contentType = 'text/plain') {
|
|
50
|
+
response.statusCode = statusCode;
|
|
51
|
+
response.setHeader('content-type', `${contentType}; charset=utf-8`);
|
|
52
|
+
response.end(value);
|
|
53
|
+
}
|
|
54
|
+
function isStatus(value) {
|
|
55
|
+
return value === 'open' || value === 'queued' || value === 'addressed';
|
|
56
|
+
}
|
|
57
|
+
function sanitizeAnnotation(value) {
|
|
58
|
+
if (!isObject(value)) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
const id = typeof value.id === 'string' ? value.id : '';
|
|
62
|
+
const screenId = typeof value.screenId === 'string' ? value.screenId : '';
|
|
63
|
+
const statusValue = isStatus(value.status) ? value.status : 'open';
|
|
64
|
+
if (!id || !screenId) {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
id,
|
|
69
|
+
screenId,
|
|
70
|
+
x: typeof value.x === 'number' ? value.x : 50,
|
|
71
|
+
y: typeof value.y === 'number' ? value.y : 50,
|
|
72
|
+
title: typeof value.title === 'string' ? value.title : 'Untitled feedback',
|
|
73
|
+
detail: typeof value.detail === 'string' ? value.detail : '',
|
|
74
|
+
status: statusValue,
|
|
75
|
+
action: typeof value.action === 'string' ? value.action : 'Update the referenced JSX screen.',
|
|
76
|
+
createdAt: typeof value.createdAt === 'string' ? value.createdAt : nowIso(),
|
|
77
|
+
updatedAt: typeof value.updatedAt === 'string' ? value.updatedAt : nowIso()
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
function sanitizeSession(value) {
|
|
81
|
+
if (!isObject(value)) {
|
|
82
|
+
return emptySession();
|
|
83
|
+
}
|
|
84
|
+
const annotations = Array.isArray(value.annotations)
|
|
85
|
+
? value.annotations
|
|
86
|
+
.map((annotation) => sanitizeAnnotation(annotation))
|
|
87
|
+
.filter((annotation) => annotation !== null)
|
|
88
|
+
: [];
|
|
89
|
+
return {
|
|
90
|
+
reviewId: typeof value.reviewId === 'string' ? value.reviewId : 'ogma-review',
|
|
91
|
+
annotations,
|
|
92
|
+
updatedAt: typeof value.updatedAt === 'string' ? value.updatedAt : nowIso()
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
async function readSession(project) {
|
|
96
|
+
try {
|
|
97
|
+
return sanitizeSession(JSON.parse(await readFile(project.sessionPath, 'utf8')));
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
const session = emptySession();
|
|
101
|
+
await writeSession(project, session);
|
|
102
|
+
return session;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
async function writeSession(project, session) {
|
|
106
|
+
await writeFile(project.sessionPath, `${JSON.stringify(session, null, 2)}\n`, 'utf8');
|
|
107
|
+
await appendHistory(project, session);
|
|
108
|
+
}
|
|
109
|
+
function countByStatus(annotations) {
|
|
110
|
+
return {
|
|
111
|
+
addressed: annotations.filter((annotation) => annotation.status === 'addressed').length,
|
|
112
|
+
open: annotations.filter((annotation) => annotation.status === 'open').length,
|
|
113
|
+
queued: annotations.filter((annotation) => annotation.status === 'queued').length
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
async function readHistory(project) {
|
|
117
|
+
try {
|
|
118
|
+
const value = JSON.parse(await readFile(project.historyPath, 'utf8'));
|
|
119
|
+
return Array.isArray(value) ? value : [];
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return [];
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
async function appendHistory(project, session) {
|
|
126
|
+
const history = await readHistory(project);
|
|
127
|
+
const entry = {
|
|
128
|
+
id: `${Date.now()}`,
|
|
129
|
+
annotationCount: session.annotations.length,
|
|
130
|
+
counts: countByStatus(session.annotations),
|
|
131
|
+
reviewId: session.reviewId,
|
|
132
|
+
updatedAt: session.updatedAt
|
|
133
|
+
};
|
|
134
|
+
history.push(entry);
|
|
135
|
+
await writeFile(project.historyPath, `${JSON.stringify(history.slice(-50), null, 2)}\n`, 'utf8');
|
|
136
|
+
}
|
|
137
|
+
function buildFeedbackExport(session, reviewUrl) {
|
|
138
|
+
return {
|
|
139
|
+
reviewId: session.reviewId,
|
|
140
|
+
generatedAt: nowIso(),
|
|
141
|
+
reviewUrl,
|
|
142
|
+
annotations: session.annotations.map((annotation) => ({
|
|
143
|
+
id: annotation.id,
|
|
144
|
+
screenId: annotation.screenId,
|
|
145
|
+
title: annotation.title,
|
|
146
|
+
detail: annotation.detail,
|
|
147
|
+
status: annotation.status,
|
|
148
|
+
action: annotation.action,
|
|
149
|
+
location: {
|
|
150
|
+
x: annotation.x,
|
|
151
|
+
y: annotation.y
|
|
152
|
+
}
|
|
153
|
+
}))
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
function sessionFromFeedbackExport(value) {
|
|
157
|
+
if (!isObject(value) || !Array.isArray(value.annotations)) {
|
|
158
|
+
return emptySession();
|
|
159
|
+
}
|
|
160
|
+
const timestamp = nowIso();
|
|
161
|
+
const annotations = value.annotations
|
|
162
|
+
.map((item) => {
|
|
163
|
+
if (!isObject(item)) {
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
return sanitizeAnnotation({
|
|
167
|
+
id: item.id,
|
|
168
|
+
screenId: item.screenId,
|
|
169
|
+
x: isObject(item.location) && typeof item.location.x === 'number' ? item.location.x : 50,
|
|
170
|
+
y: isObject(item.location) && typeof item.location.y === 'number' ? item.location.y : 50,
|
|
171
|
+
title: item.title,
|
|
172
|
+
detail: item.detail,
|
|
173
|
+
status: item.status,
|
|
174
|
+
action: item.action,
|
|
175
|
+
createdAt: timestamp,
|
|
176
|
+
updatedAt: timestamp
|
|
177
|
+
});
|
|
178
|
+
})
|
|
179
|
+
.filter((annotation) => annotation !== null);
|
|
180
|
+
return {
|
|
181
|
+
reviewId: typeof value.reviewId === 'string' ? value.reviewId : 'ogma-review',
|
|
182
|
+
annotations,
|
|
183
|
+
updatedAt: timestamp
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
function sanitizeSnapshot(value, reviewUrl) {
|
|
187
|
+
const timestamp = nowIso();
|
|
188
|
+
if (!isObject(value)) {
|
|
189
|
+
return {
|
|
190
|
+
id: `${Date.now()}`,
|
|
191
|
+
annotations: [],
|
|
192
|
+
createdAt: timestamp,
|
|
193
|
+
reviewId: 'ogma-review',
|
|
194
|
+
reviewUrl,
|
|
195
|
+
screenId: 'unknown',
|
|
196
|
+
viewportMode: 'desktop'
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
const annotations = Array.isArray(value.annotations)
|
|
200
|
+
? value.annotations
|
|
201
|
+
.map((annotation) => sanitizeAnnotation(annotation))
|
|
202
|
+
.filter((annotation) => annotation !== null)
|
|
203
|
+
: [];
|
|
204
|
+
return {
|
|
205
|
+
id: typeof value.id === 'string' ? value.id : `${Date.now()}`,
|
|
206
|
+
annotations,
|
|
207
|
+
createdAt: typeof value.createdAt === 'string' ? value.createdAt : timestamp,
|
|
208
|
+
reviewId: typeof value.reviewId === 'string' ? value.reviewId : 'ogma-review',
|
|
209
|
+
reviewUrl,
|
|
210
|
+
screenId: typeof value.screenId === 'string' ? value.screenId : 'unknown',
|
|
211
|
+
viewportMode: typeof value.viewportMode === 'string' ? value.viewportMode : 'desktop'
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
function createIndexHtml() {
|
|
215
|
+
return `<!doctype html>
|
|
216
|
+
<html lang="en">
|
|
217
|
+
<head>
|
|
218
|
+
<meta charset="UTF-8" />
|
|
219
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
220
|
+
<title>Ogma Review</title>
|
|
221
|
+
</head>
|
|
222
|
+
<body>
|
|
223
|
+
<div id="ogma-root"></div>
|
|
224
|
+
<script type="module" src="/src/viewer/client.tsx"></script>
|
|
225
|
+
</body>
|
|
226
|
+
</html>
|
|
227
|
+
`;
|
|
228
|
+
}
|
|
229
|
+
function createRuntimePlugin({ config, packageRoot, project, status }) {
|
|
230
|
+
const sourceRoot = path.join(packageRoot, 'src');
|
|
231
|
+
const designModuleId = 'virtual:ogma-design';
|
|
232
|
+
const configModuleId = 'virtual:ogma-config';
|
|
233
|
+
const resolvedDesignModuleId = `\0${designModuleId}`;
|
|
234
|
+
const resolvedConfigModuleId = `\0${configModuleId}`;
|
|
235
|
+
return {
|
|
236
|
+
name: 'ogma-runtime',
|
|
237
|
+
resolveId(id) {
|
|
238
|
+
if (id === designModuleId) {
|
|
239
|
+
return resolvedDesignModuleId;
|
|
240
|
+
}
|
|
241
|
+
if (id === configModuleId) {
|
|
242
|
+
return resolvedConfigModuleId;
|
|
243
|
+
}
|
|
244
|
+
return null;
|
|
245
|
+
},
|
|
246
|
+
load(id) {
|
|
247
|
+
if (id === resolvedDesignModuleId) {
|
|
248
|
+
const reviewImport = fsImportSpecifier(project.designEntry);
|
|
249
|
+
const notesImport = `${fsImportSpecifier(project.notesPath)}?raw`;
|
|
250
|
+
const normalizerImport = fsImportSpecifier(path.join(sourceRoot, 'viewer/normalizeReviewModule.ts'));
|
|
251
|
+
return [
|
|
252
|
+
`import * as reviewModule from ${JSON.stringify(reviewImport)};`,
|
|
253
|
+
`import productNotes from ${JSON.stringify(notesImport)};`,
|
|
254
|
+
`import { normalizeReviewModule } from ${JSON.stringify(normalizerImport)};`,
|
|
255
|
+
'export const review = normalizeReviewModule(reviewModule, productNotes);'
|
|
256
|
+
].join('\n');
|
|
257
|
+
}
|
|
258
|
+
if (id === resolvedConfigModuleId) {
|
|
259
|
+
return `export const runtimeConfig = ${JSON.stringify(config, null, 2)};`;
|
|
260
|
+
}
|
|
261
|
+
return null;
|
|
262
|
+
},
|
|
263
|
+
configureServer(server) {
|
|
264
|
+
server.middlewares.use(async (request, response, next) => {
|
|
265
|
+
try {
|
|
266
|
+
await handleRequest({ next, project, request, response, server, status });
|
|
267
|
+
}
|
|
268
|
+
catch (error) {
|
|
269
|
+
sendJson(response, 500, {
|
|
270
|
+
error: error instanceof Error ? error.message : String(error)
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
async function handleRequest({ next, project, request, response, server, status }) {
|
|
278
|
+
const url = new URL(request.url ?? '/', 'http://ogma.local');
|
|
279
|
+
if (request.method === 'GET' && (url.pathname === '/' || url.pathname === '/review')) {
|
|
280
|
+
const html = await server.transformIndexHtml(url.pathname, createIndexHtml());
|
|
281
|
+
sendText(response, 200, html, 'text/html');
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
284
|
+
if (!url.pathname.startsWith('/api/ogma')) {
|
|
285
|
+
next();
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
if (request.method === 'GET' && url.pathname === '/api/ogma/status') {
|
|
289
|
+
sendJson(response, 200, status);
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
292
|
+
if (request.method === 'GET' && url.pathname === '/api/ogma/session') {
|
|
293
|
+
sendJson(response, 200, await readSession(project));
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
if (request.method === 'PUT' && url.pathname === '/api/ogma/session') {
|
|
297
|
+
const session = sanitizeSession(JSON.parse(await readRequestBody(request)));
|
|
298
|
+
await writeSession(project, session);
|
|
299
|
+
sendJson(response, 200, session);
|
|
300
|
+
return;
|
|
301
|
+
}
|
|
302
|
+
if (request.method === 'GET' && url.pathname === '/api/ogma/feedback') {
|
|
303
|
+
sendJson(response, 200, buildFeedbackExport(await readSession(project), status.reviewUrl));
|
|
304
|
+
return;
|
|
305
|
+
}
|
|
306
|
+
if (request.method === 'PUT' && url.pathname === '/api/ogma/feedback') {
|
|
307
|
+
const session = sessionFromFeedbackExport(JSON.parse(await readRequestBody(request)));
|
|
308
|
+
await writeSession(project, session);
|
|
309
|
+
sendJson(response, 200, session);
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
if (request.method === 'POST' && url.pathname === '/api/ogma/feedback/export') {
|
|
313
|
+
const exportData = buildFeedbackExport(await readSession(project), status.reviewUrl);
|
|
314
|
+
await writeFile(project.feedbackPath, `${JSON.stringify(exportData, null, 2)}\n`, 'utf8');
|
|
315
|
+
sendJson(response, 200, {
|
|
316
|
+
path: project.feedbackPath,
|
|
317
|
+
feedback: exportData
|
|
318
|
+
});
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
if (request.method === 'GET' && url.pathname === '/api/ogma/history') {
|
|
322
|
+
sendJson(response, 200, await readHistory(project));
|
|
323
|
+
return;
|
|
324
|
+
}
|
|
325
|
+
if (request.method === 'POST' && url.pathname === '/api/ogma/snapshots') {
|
|
326
|
+
const snapshot = sanitizeSnapshot(JSON.parse(await readRequestBody(request)), status.reviewUrl);
|
|
327
|
+
const fileName = `${snapshot.createdAt.replace(/[^0-9a-z]/gi, '-')}-${snapshot.screenId}.json`;
|
|
328
|
+
const snapshotPath = path.join(project.snapshotsDir, fileName);
|
|
329
|
+
await writeFile(snapshotPath, `${JSON.stringify(snapshot, null, 2)}\n`, 'utf8');
|
|
330
|
+
sendJson(response, 200, {
|
|
331
|
+
path: snapshotPath,
|
|
332
|
+
snapshot
|
|
333
|
+
});
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
sendJson(response, 404, {
|
|
337
|
+
error: `Unknown Ogma API route: ${request.method ?? 'GET'} ${url.pathname}`
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
function openBrowser(url) {
|
|
341
|
+
const command = process.platform === 'darwin' ? 'open' : process.platform === 'win32' ? 'cmd' : 'xdg-open';
|
|
342
|
+
const args = process.platform === 'win32' ? ['/c', 'start', '', url] : [url];
|
|
343
|
+
const child = spawn(command, args, {
|
|
344
|
+
detached: true,
|
|
345
|
+
stdio: 'ignore'
|
|
346
|
+
});
|
|
347
|
+
child.unref();
|
|
348
|
+
}
|
|
349
|
+
function resolveReviewUrl(server) {
|
|
350
|
+
const localUrl = server.resolvedUrls?.local[0] ?? 'http://localhost:4317/';
|
|
351
|
+
return new URL('/review', localUrl).toString();
|
|
352
|
+
}
|
|
353
|
+
export function getPackageRootFromImportMeta(metaUrl) {
|
|
354
|
+
return path.dirname(path.dirname(fileURLToPath(metaUrl)));
|
|
355
|
+
}
|
|
356
|
+
export async function startOgmaServer(options) {
|
|
357
|
+
const project = await ensureOgmaProject({
|
|
358
|
+
cwd: options.cwd,
|
|
359
|
+
review: options.review
|
|
360
|
+
});
|
|
361
|
+
const requireFromPackage = createRequire(path.join(options.packageRoot, 'package.json'));
|
|
362
|
+
const version = await readPackageVersion(options.packageRoot);
|
|
363
|
+
const startedAt = nowIso();
|
|
364
|
+
const runtimeConfig = {
|
|
365
|
+
cwd: options.cwd,
|
|
366
|
+
dataDir: project.dataDir,
|
|
367
|
+
defaultDesignDir: project.defaultDesignDir,
|
|
368
|
+
reviewUrl: `http://localhost:${options.port}/review`,
|
|
369
|
+
skillUrl: options.skillUrl ?? DEFAULT_SKILL_URL,
|
|
370
|
+
serverStartedAt: startedAt
|
|
371
|
+
};
|
|
372
|
+
const status = {
|
|
373
|
+
packageName: '@hcgstudio/ogma',
|
|
374
|
+
version,
|
|
375
|
+
cwd: options.cwd,
|
|
376
|
+
dataDir: project.dataDir,
|
|
377
|
+
designEntry: project.designEntry,
|
|
378
|
+
historyPath: project.historyPath,
|
|
379
|
+
notesPath: project.notesPath,
|
|
380
|
+
reviewUrl: runtimeConfig.reviewUrl,
|
|
381
|
+
skillUrl: runtimeConfig.skillUrl,
|
|
382
|
+
snapshotsDir: project.snapshotsDir,
|
|
383
|
+
serverStartedAt: startedAt
|
|
384
|
+
};
|
|
385
|
+
const server = await createServer({
|
|
386
|
+
appType: 'custom',
|
|
387
|
+
clearScreen: false,
|
|
388
|
+
plugins: [
|
|
389
|
+
createRuntimePlugin({
|
|
390
|
+
config: runtimeConfig,
|
|
391
|
+
packageRoot: options.packageRoot,
|
|
392
|
+
project,
|
|
393
|
+
status
|
|
394
|
+
})
|
|
395
|
+
],
|
|
396
|
+
resolve: {
|
|
397
|
+
alias: [
|
|
398
|
+
{
|
|
399
|
+
find: '@hcgstudio/ogma/styles.css',
|
|
400
|
+
replacement: path.join(options.packageRoot, 'src/viewer/styles.css')
|
|
401
|
+
},
|
|
402
|
+
{
|
|
403
|
+
find: '@hcgstudio/ogma',
|
|
404
|
+
replacement: path.join(options.packageRoot, 'src/index.ts')
|
|
405
|
+
},
|
|
406
|
+
{
|
|
407
|
+
find: 'react/jsx-runtime',
|
|
408
|
+
replacement: requireFromPackage.resolve('react/jsx-runtime')
|
|
409
|
+
},
|
|
410
|
+
{
|
|
411
|
+
find: 'react/jsx-dev-runtime',
|
|
412
|
+
replacement: requireFromPackage.resolve('react/jsx-dev-runtime')
|
|
413
|
+
},
|
|
414
|
+
{
|
|
415
|
+
find: 'react-dom/client',
|
|
416
|
+
replacement: requireFromPackage.resolve('react-dom/client')
|
|
417
|
+
},
|
|
418
|
+
{
|
|
419
|
+
find: 'react',
|
|
420
|
+
replacement: requireFromPackage.resolve('react')
|
|
421
|
+
},
|
|
422
|
+
{
|
|
423
|
+
find: 'lucide-react',
|
|
424
|
+
replacement: requireFromPackage.resolve('lucide-react')
|
|
425
|
+
}
|
|
426
|
+
],
|
|
427
|
+
dedupe: ['@hcgstudio/ogma', 'react', 'react-dom', 'lucide-react']
|
|
428
|
+
},
|
|
429
|
+
root: options.packageRoot,
|
|
430
|
+
server: {
|
|
431
|
+
fs: {
|
|
432
|
+
allow: [options.cwd, options.packageRoot, path.dirname(project.designEntry), project.dataDir]
|
|
433
|
+
},
|
|
434
|
+
host: options.host,
|
|
435
|
+
port: options.port,
|
|
436
|
+
strictPort: false
|
|
437
|
+
}
|
|
438
|
+
});
|
|
439
|
+
await server.listen();
|
|
440
|
+
runtimeConfig.reviewUrl = resolveReviewUrl(server);
|
|
441
|
+
status.reviewUrl = runtimeConfig.reviewUrl;
|
|
442
|
+
console.log('');
|
|
443
|
+
console.log('Ogma review server ready');
|
|
444
|
+
console.log(` Review URL: ${status.reviewUrl}`);
|
|
445
|
+
console.log(` Skill URL: ${status.skillUrl}`);
|
|
446
|
+
console.log(` Designs: ${project.designEntry}`);
|
|
447
|
+
console.log(` Notes: ${project.notesPath}`);
|
|
448
|
+
console.log(` Feedback: ${project.sessionPath}`);
|
|
449
|
+
console.log(` History: ${project.historyPath}`);
|
|
450
|
+
console.log('');
|
|
451
|
+
if (options.open) {
|
|
452
|
+
openBrowser(status.reviewUrl);
|
|
453
|
+
}
|
|
454
|
+
return {
|
|
455
|
+
project,
|
|
456
|
+
reviewUrl: status.reviewUrl,
|
|
457
|
+
server,
|
|
458
|
+
status
|
|
459
|
+
};
|
|
460
|
+
}
|
|
461
|
+
export async function assertPackageInstalledFromCwd(cwd) {
|
|
462
|
+
const require = createRequire(path.join(cwd, 'package.json'));
|
|
463
|
+
const missing = [];
|
|
464
|
+
for (const specifier of ['react', 'react-dom/client', 'vite']) {
|
|
465
|
+
try {
|
|
466
|
+
require.resolve(specifier);
|
|
467
|
+
}
|
|
468
|
+
catch {
|
|
469
|
+
missing.push(specifier);
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
if (missing.length > 0) {
|
|
473
|
+
throw new Error(`Missing runtime dependencies: ${missing.join(', ')}. Run npm install -D @hcgstudio/ogma react react-dom vite.`);
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/node/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare const DEFAULT_SKILL_URL = "https://raw.githubusercontent.com/hcgstudio/ogma/main/docs/skills/ogma/SKILL.md";
|
|
2
|
+
export declare const DEFAULT_DESIGN_DIR = "designs/ogma";
|
|
3
|
+
export declare const DEFAULT_REVIEW_SOURCE = "import { defineOgmaReview, type OgmaPrototypeScreenProps } from '@hcgstudio/ogma';\n\nfunction DashboardPrototype() {\n return (\n <div className=\"ogma-demo-screen\">\n <aside className=\"ogma-demo-sidebar\">\n <div className=\"ogma-demo-brand\">O</div>\n <span className=\"ogma-demo-nav is-active\">Overview</span>\n <span className=\"ogma-demo-nav\">Signals</span>\n <span className=\"ogma-demo-nav\">Queue</span>\n <span className=\"ogma-demo-nav\">Settings</span>\n </aside>\n <main className=\"ogma-demo-content\">\n <div className=\"ogma-demo-header\">\n <div>\n <p>Dashboard</p>\n <h2>Atlas Brief</h2>\n </div>\n <button type=\"button\">Review ready</button>\n </div>\n <div className=\"ogma-demo-grid\">\n <section className=\"ogma-demo-card is-wide\">\n <div className=\"ogma-demo-card-title\" />\n <div className=\"ogma-demo-chart\">\n {[42, 68, 53, 81, 61, 75, 88].map((value) => (\n <span key={value} style={{ height: `${value}%` }} />\n ))}\n </div>\n </section>\n <section className=\"ogma-demo-card is-accent\">\n <strong>91%</strong>\n <p>Review confidence</p>\n </section>\n <section className=\"ogma-demo-card\">\n <div className=\"ogma-demo-list-row\" />\n <div className=\"ogma-demo-list-row is-medium\" />\n <div className=\"ogma-demo-list-row is-short\" />\n </section>\n <section className=\"ogma-demo-card is-action\">\n <strong>2</strong>\n <p>Copy edits before approval</p>\n </section>\n </div>\n </main>\n </div>\n );\n}\n\nfunction DesignSpecPrototype({ screen }: OgmaPrototypeScreenProps) {\n return (\n <div className=\"ogma-spec-screen\">\n <header>\n <p>{screen.title}</p>\n <h2>Decision System</h2>\n </header>\n <div className=\"ogma-spec-grid\">\n {['Information density', 'Review confidence', 'Agent handoff', 'Mobile parity'].map(\n (item, index) => (\n <section key={item}>\n <span>{`0${index + 1}`}</span>\n <h3>{item}</h3>\n <p>Prototype state prepared for pinned reviewer feedback and agent follow-up.</p>\n </section>\n )\n )}\n </div>\n </div>\n );\n}\n\nfunction MobileNavigationPrototype() {\n return (\n <div className=\"ogma-mobile-screen\">\n <div className=\"ogma-phone\">\n <header>\n <span>Ogma</span>\n <button type=\"button\">New</button>\n </header>\n <main>\n <section>\n <p>Mobile nav</p>\n <h2>Design queue</h2>\n </section>\n <div className=\"ogma-phone-list\">\n <span />\n <span />\n <span />\n </div>\n </main>\n <nav>\n <span className=\"is-active\" />\n <span />\n <span />\n </nav>\n </div>\n </div>\n );\n}\n\nexport default defineOgmaReview({\n title: 'Ogma starter review',\n description: 'Replace these JSX screens with the product states the reviewer should inspect.',\n metadata: {\n agent: 'starter',\n iteration: '0',\n source: 'designs/ogma/review.tsx'\n },\n screens: [\n {\n id: 'dashboard',\n title: 'Dashboard',\n description: 'Desktop review surface',\n component: DashboardPrototype\n },\n {\n id: 'design-spec',\n title: 'Design spec',\n description: 'Design rationale and product decisions',\n component: DesignSpecPrototype\n },\n {\n id: 'mobile-navigation',\n title: 'Mobile nav',\n description: 'Compact navigation state',\n component: MobileNavigationPrototype,\n width: 390\n }\n ]\n});\n";
|
|
4
|
+
export declare const DEFAULT_PRODUCT_NOTES = "# Product Design Notes\n\n## Intent\n\nReplace this starter note with product-specific design rationale, interaction states, and open decisions.\n\n## Review Loop\n\n- Keep JSX prototype screens in this directory.\n- Keep reviewer feedback IDs, such as OG-001, in agent change summaries.\n- Update this file whenever the product direction changes.\n";
|
|
5
|
+
//# sourceMappingURL=templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/node/templates.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,oFACqD,CAAC;AAEpF,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AAEjD,eAAO,MAAM,qBAAqB,s4HAiIjC,CAAC;AAEF,eAAO,MAAM,qBAAqB,kWAWjC,CAAC"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
export const DEFAULT_SKILL_URL = 'https://raw.githubusercontent.com/hcgstudio/ogma/main/docs/skills/ogma/SKILL.md';
|
|
2
|
+
export const DEFAULT_DESIGN_DIR = 'designs/ogma';
|
|
3
|
+
export const DEFAULT_REVIEW_SOURCE = `import { defineOgmaReview, type OgmaPrototypeScreenProps } from '@hcgstudio/ogma';
|
|
4
|
+
|
|
5
|
+
function DashboardPrototype() {
|
|
6
|
+
return (
|
|
7
|
+
<div className="ogma-demo-screen">
|
|
8
|
+
<aside className="ogma-demo-sidebar">
|
|
9
|
+
<div className="ogma-demo-brand">O</div>
|
|
10
|
+
<span className="ogma-demo-nav is-active">Overview</span>
|
|
11
|
+
<span className="ogma-demo-nav">Signals</span>
|
|
12
|
+
<span className="ogma-demo-nav">Queue</span>
|
|
13
|
+
<span className="ogma-demo-nav">Settings</span>
|
|
14
|
+
</aside>
|
|
15
|
+
<main className="ogma-demo-content">
|
|
16
|
+
<div className="ogma-demo-header">
|
|
17
|
+
<div>
|
|
18
|
+
<p>Dashboard</p>
|
|
19
|
+
<h2>Atlas Brief</h2>
|
|
20
|
+
</div>
|
|
21
|
+
<button type="button">Review ready</button>
|
|
22
|
+
</div>
|
|
23
|
+
<div className="ogma-demo-grid">
|
|
24
|
+
<section className="ogma-demo-card is-wide">
|
|
25
|
+
<div className="ogma-demo-card-title" />
|
|
26
|
+
<div className="ogma-demo-chart">
|
|
27
|
+
{[42, 68, 53, 81, 61, 75, 88].map((value) => (
|
|
28
|
+
<span key={value} style={{ height: \`\${value}%\` }} />
|
|
29
|
+
))}
|
|
30
|
+
</div>
|
|
31
|
+
</section>
|
|
32
|
+
<section className="ogma-demo-card is-accent">
|
|
33
|
+
<strong>91%</strong>
|
|
34
|
+
<p>Review confidence</p>
|
|
35
|
+
</section>
|
|
36
|
+
<section className="ogma-demo-card">
|
|
37
|
+
<div className="ogma-demo-list-row" />
|
|
38
|
+
<div className="ogma-demo-list-row is-medium" />
|
|
39
|
+
<div className="ogma-demo-list-row is-short" />
|
|
40
|
+
</section>
|
|
41
|
+
<section className="ogma-demo-card is-action">
|
|
42
|
+
<strong>2</strong>
|
|
43
|
+
<p>Copy edits before approval</p>
|
|
44
|
+
</section>
|
|
45
|
+
</div>
|
|
46
|
+
</main>
|
|
47
|
+
</div>
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function DesignSpecPrototype({ screen }: OgmaPrototypeScreenProps) {
|
|
52
|
+
return (
|
|
53
|
+
<div className="ogma-spec-screen">
|
|
54
|
+
<header>
|
|
55
|
+
<p>{screen.title}</p>
|
|
56
|
+
<h2>Decision System</h2>
|
|
57
|
+
</header>
|
|
58
|
+
<div className="ogma-spec-grid">
|
|
59
|
+
{['Information density', 'Review confidence', 'Agent handoff', 'Mobile parity'].map(
|
|
60
|
+
(item, index) => (
|
|
61
|
+
<section key={item}>
|
|
62
|
+
<span>{\`0\${index + 1}\`}</span>
|
|
63
|
+
<h3>{item}</h3>
|
|
64
|
+
<p>Prototype state prepared for pinned reviewer feedback and agent follow-up.</p>
|
|
65
|
+
</section>
|
|
66
|
+
)
|
|
67
|
+
)}
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function MobileNavigationPrototype() {
|
|
74
|
+
return (
|
|
75
|
+
<div className="ogma-mobile-screen">
|
|
76
|
+
<div className="ogma-phone">
|
|
77
|
+
<header>
|
|
78
|
+
<span>Ogma</span>
|
|
79
|
+
<button type="button">New</button>
|
|
80
|
+
</header>
|
|
81
|
+
<main>
|
|
82
|
+
<section>
|
|
83
|
+
<p>Mobile nav</p>
|
|
84
|
+
<h2>Design queue</h2>
|
|
85
|
+
</section>
|
|
86
|
+
<div className="ogma-phone-list">
|
|
87
|
+
<span />
|
|
88
|
+
<span />
|
|
89
|
+
<span />
|
|
90
|
+
</div>
|
|
91
|
+
</main>
|
|
92
|
+
<nav>
|
|
93
|
+
<span className="is-active" />
|
|
94
|
+
<span />
|
|
95
|
+
<span />
|
|
96
|
+
</nav>
|
|
97
|
+
</div>
|
|
98
|
+
</div>
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export default defineOgmaReview({
|
|
103
|
+
title: 'Ogma starter review',
|
|
104
|
+
description: 'Replace these JSX screens with the product states the reviewer should inspect.',
|
|
105
|
+
metadata: {
|
|
106
|
+
agent: 'starter',
|
|
107
|
+
iteration: '0',
|
|
108
|
+
source: 'designs/ogma/review.tsx'
|
|
109
|
+
},
|
|
110
|
+
screens: [
|
|
111
|
+
{
|
|
112
|
+
id: 'dashboard',
|
|
113
|
+
title: 'Dashboard',
|
|
114
|
+
description: 'Desktop review surface',
|
|
115
|
+
component: DashboardPrototype
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
id: 'design-spec',
|
|
119
|
+
title: 'Design spec',
|
|
120
|
+
description: 'Design rationale and product decisions',
|
|
121
|
+
component: DesignSpecPrototype
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
id: 'mobile-navigation',
|
|
125
|
+
title: 'Mobile nav',
|
|
126
|
+
description: 'Compact navigation state',
|
|
127
|
+
component: MobileNavigationPrototype,
|
|
128
|
+
width: 390
|
|
129
|
+
}
|
|
130
|
+
]
|
|
131
|
+
});
|
|
132
|
+
`;
|
|
133
|
+
export const DEFAULT_PRODUCT_NOTES = `# Product Design Notes
|
|
134
|
+
|
|
135
|
+
## Intent
|
|
136
|
+
|
|
137
|
+
Replace this starter note with product-specific design rationale, interaction states, and open decisions.
|
|
138
|
+
|
|
139
|
+
## Review Loop
|
|
140
|
+
|
|
141
|
+
- Keep JSX prototype screens in this directory.
|
|
142
|
+
- Keep reviewer feedback IDs, such as OG-001, in agent change summaries.
|
|
143
|
+
- Update this file whenever the product direction changes.
|
|
144
|
+
`;
|
|
145
|
+
//# sourceMappingURL=templates.js.map
|