@memoarchitect/tools 0.11.0 → 0.11.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/README.md +1 -1
  2. package/package.json +2 -2
  3. package/packages/tools/lib/commands/dev.d.ts.map +1 -1
  4. package/packages/tools/lib/commands/dev.js +23 -1
  5. package/packages/tools/lib/commands/dev.js.map +1 -1
  6. package/packages/tools/lib/model/builder.d.ts.map +1 -1
  7. package/packages/tools/lib/model/builder.js +97 -0
  8. package/packages/tools/lib/model/builder.js.map +1 -1
  9. package/packages/tools/lib/model/parser-utils.d.ts +2 -0
  10. package/packages/tools/lib/model/parser-utils.d.ts.map +1 -1
  11. package/packages/tools/lib/model/parser-utils.js +30 -4
  12. package/packages/tools/lib/model/parser-utils.js.map +1 -1
  13. package/packages/tools/lib/model/semantic.d.ts +12 -0
  14. package/packages/tools/lib/model/semantic.d.ts.map +1 -1
  15. package/packages/tools/lib/model/semantic.js.map +1 -1
  16. package/packages/tools/lib/server/dev-server.d.ts +1 -1
  17. package/packages/tools/lib/server/dev-server.d.ts.map +1 -1
  18. package/packages/tools/lib/server/dev-server.js +123 -45
  19. package/packages/tools/lib/server/dev-server.js.map +1 -1
  20. package/packages/tools/lib/server/persistor.d.ts.map +1 -1
  21. package/packages/tools/lib/server/persistor.js +156 -6
  22. package/packages/tools/lib/server/persistor.js.map +1 -1
  23. package/packages/tools/lib/server/view-writer.d.ts +34 -0
  24. package/packages/tools/lib/server/view-writer.d.ts.map +1 -0
  25. package/packages/tools/lib/server/view-writer.js +269 -0
  26. package/packages/tools/lib/server/view-writer.js.map +1 -0
  27. package/packages/tools/lib/validator/builtin-rules.d.ts.map +1 -1
  28. package/packages/tools/lib/validator/builtin-rules.js +5 -0
  29. package/packages/tools/lib/validator/builtin-rules.js.map +1 -1
  30. package/packages/tools/lib/validator/rule-engine.d.ts.map +1 -1
  31. package/packages/tools/lib/validator/rule-engine.js +9 -2
  32. package/packages/tools/lib/validator/rule-engine.js.map +1 -1
@@ -5,22 +5,47 @@
5
5
  // ─────────────────────────────────────────────────────────────────────────────
6
6
  import { existsSync, readFileSync } from 'node:fs';
7
7
  import { resolve } from 'node:path';
8
- import { EmptyFileSystem } from 'langium';
8
+ import { pathToFileURL } from 'node:url';
9
+ import { EmptyFileSystem, URI } from 'langium';
9
10
  import { parseHelper } from 'langium/test';
10
11
  import { createMemoSysMLServices } from '../language/memo-sysml-module.js';
12
+ let sharedServices;
13
+ let sharedParse;
14
+ function sharedParser() {
15
+ if (!sharedParse) {
16
+ sharedServices = createMemoSysMLServices({ ...EmptyFileSystem }).MemoSysML;
17
+ sharedParse = parseHelper(sharedServices);
18
+ }
19
+ return { services: sharedServices, parse: sharedParse };
20
+ }
21
+ function documentUriFor(filePath) {
22
+ return URI.parse(pathToFileURL(resolve(filePath)).toString());
23
+ }
24
+ /** Drop a document from the shared store when it leaves an incremental project. */
25
+ export function forgetDocument(filePath) {
26
+ if (!sharedServices)
27
+ return;
28
+ const uri = documentUriFor(filePath);
29
+ if (sharedServices.shared.workspace.LangiumDocuments.hasDocument(uri)) {
30
+ sharedServices.shared.workspace.LangiumDocuments.deleteDocument(uri);
31
+ }
32
+ }
11
33
  /**
12
34
  * Parse multiple SysML files and return their ASTs.
13
35
  * Each file is parsed independently (no cross-file resolution for MVP).
14
36
  */
15
37
  export async function parseFiles(filePaths, basePath = '') {
16
- const services = createMemoSysMLServices({ ...EmptyFileSystem }).MemoSysML;
17
- const parse = parseHelper(services);
38
+ const { services, parse } = sharedParser();
18
39
  const documents = [];
19
40
  const errors = [];
20
41
  for (const filePath of filePaths) {
21
42
  try {
22
43
  const source = readFileSync(filePath, 'utf-8');
23
- const doc = await parse(source);
44
+ const uri = documentUriFor(filePath);
45
+ if (services.shared.workspace.LangiumDocuments.hasDocument(uri)) {
46
+ services.shared.workspace.LangiumDocuments.deleteDocument(uri);
47
+ }
48
+ const doc = await parse(source, { documentUri: uri.toString() });
24
49
  // Collect lexer + parser errors
25
50
  const lexerErrors = doc.parseResult.lexerErrors;
26
51
  const parserErrors = doc.parseResult.parserErrors;
@@ -77,6 +102,7 @@ export class IncrementalProjectParser {
77
102
  if (!absoluteFiles.has(cached)) {
78
103
  this.documents.delete(cached);
79
104
  this.errors.delete(cached);
105
+ forgetDocument(cached);
80
106
  }
81
107
  }
82
108
  const targets = changedFiles === undefined
@@ -1 +1 @@
1
- {"version":3,"file":"parser-utils.js","sourceRoot":"","sources":["../../src/model/parser-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parser-utils.js","sourceRoot":"","sources":["../../src/model/parser-utils.ts"],"names":[],"mappings":"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"}
@@ -166,6 +166,16 @@ export interface ParseError {
166
166
  /** Column number (1-based) */
167
167
  column?: number;
168
168
  }
169
+ /** A qualified project reference whose named package does not provide its leaf. */
170
+ export interface UnresolvedReference {
171
+ elementId: string;
172
+ elementName: string;
173
+ elementKind: string;
174
+ reference: string;
175
+ packageName: string;
176
+ missingName: string;
177
+ file: string;
178
+ }
169
179
  /** The complete semantic model — serializable for WebSocket transport */
170
180
  export interface MemoModel {
171
181
  /** All elements indexed by id */
@@ -176,6 +186,8 @@ export interface MemoModel {
176
186
  errors: ParseError[];
177
187
  /** Packages declared by project source, including empty ones. */
178
188
  packages: MemoPackageDTO[];
189
+ /** Qualified project references that cannot resolve in their named package. */
190
+ unresolvedReferences?: UnresolvedReference[];
179
191
  /** Elements grouped by kind */
180
192
  elementsByKind: Map<string, MemoElement[]>;
181
193
  /** Elements grouped by architecture layer */
@@ -1 +1 @@
1
- {"version":3,"file":"semantic.d.ts","sourceRoot":"","sources":["../../src/model/semantic.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"semantic.d.ts","sourceRoot":"","sources":["../../src/model/semantic.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"semantic.js","sourceRoot":"","sources":["../../src/model/semantic.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"semantic.js","sourceRoot":"","sources":["../../src/model/semantic.ts"],"names":[],"mappings":"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"}
@@ -65,7 +65,7 @@ export declare function isModelMutationMessage(type: string): boolean;
65
65
  * is symlinked beneath Vite's dependency graph.
66
66
  */
67
67
  export declare function isModelOwnedWatchPath(path: string): boolean;
68
- /** Resolve only project-owned screen captures under model/assets. */
68
+ /** Resolve only project-owned screen captures, under either capture root. */
69
69
  export declare function resolveProjectAssetRequest(projectRoot: string, requestUrl: string): string | undefined;
70
70
  export declare function createDevServer(options: DevServerOptions): Promise<DevServer>;
71
71
  //# sourceMappingURL=dev-server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dev-server.d.ts","sourceRoot":"","sources":["../../src/server/dev-server.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACR,aAAa,EAM6B,sBAAsB,EAChE,sBAAsB,EAEzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AA0B9D,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,8EAA8E;IAC9E,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,aAAa,EAAE,CAAC;IACjC,4FAA4F;IAC5F,kBAAkB,CAAC,EAAE,iBAAiB,CAAC;IACvC;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,0DAA0D;IAC1D,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,kEAAkE;IAClE,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC/C,qEAAqE;IACrE,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAClD;AAED,MAAM,WAAW,SAAS;IACtB,mFAAmF;IACnF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,6DAA6D;IAC7D,SAAS,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IACjF;;;;OAIG;IACH,MAAM,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;IACxC,mEAAmE;IACnE,wBAAwB,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG;QAChD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,cAAc,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,uEAAuE;IACvE,aAAa,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACrD;;;;;;;OAOG;IACH,kBAAkB,CAAC,OAAO,EAAE,sBAAsB,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;IACrE,KAAK,IAAI,IAAI,CAAC;CACjB;AAaD,iEAAiE;AACjE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAO3D;AA4CD,qEAAqE;AACrE,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAetG;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,CAAC,CAohEnF"}
1
+ {"version":3,"file":"dev-server.d.ts","sourceRoot":"","sources":["../../src/server/dev-server.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACR,aAAa,EAM6B,sBAAsB,EAChE,sBAAsB,EAEzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AA2B9D,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,8EAA8E;IAC9E,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,aAAa,EAAE,CAAC;IACjC,4FAA4F;IAC5F,kBAAkB,CAAC,EAAE,iBAAiB,CAAC;IACvC;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,0DAA0D;IAC1D,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,kEAAkE;IAClE,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC/C,qEAAqE;IACrE,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAClD;AAED,MAAM,WAAW,SAAS;IACtB,mFAAmF;IACnF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,6DAA6D;IAC7D,SAAS,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IACjF;;;;OAIG;IACH,MAAM,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;IACxC,mEAAmE;IACnE,wBAAwB,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG;QAChD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,cAAc,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,uEAAuE;IACvE,aAAa,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACrD;;;;;;;OAOG;IACH,kBAAkB,CAAC,OAAO,EAAE,sBAAsB,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;IACrE,KAAK,IAAI,IAAI,CAAC;CACjB;AAaD,iEAAiE;AACjE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAO3D;AAqED,6EAA6E;AAC7E,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAWtG;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,CAAC,CA+kEnF"}
@@ -20,6 +20,7 @@ import { assertSingleDomainMutation, MixedMutationDomainError } from './mutation
20
20
  import { classifyConflict } from './conflict-policy.js';
21
21
  import { checkRulePolicy, insertRulePolicy, renderRulePolicy } from './rule-policy-writer.js';
22
22
  import { loadViewLayouts, saveViewLayout } from './view-layout-store.js';
23
+ import { updateViewExpose, writeViewDeclaration } from './view-writer.js';
23
24
  import { usageKeyword } from '../model/semantic.js';
24
25
  import { loadDhfDocs, saveDhfDoc, deleteDhfDoc, loadDhfSettings, saveDhfSettings, listRepoTemplates, readRepoTemplate, saveRepoTemplate, } from './dhf-doc-store.js';
25
26
  const MODEL_MUTATION_MESSAGES = new Set([
@@ -92,7 +93,30 @@ function streamFile(res, fullPath, status = 200) {
92
93
  res.writeHead(status, { 'Content-Type': mime, 'Content-Length': size });
93
94
  createReadStream(fullPath).pipe(res);
94
95
  }
95
- /** Resolve only project-owned screen captures under model/assets. */
96
+ /**
97
+ * The subtrees a project's screen captures may be served from.
98
+ *
99
+ * `model/assets` is where MEMO put them back when the whole model lived under
100
+ * `model/`. A project laid out with its source in `src/` has no `model/`
101
+ * directory at all and keeps its captures in `assets/` beside it — and those
102
+ * were unreachable, so its UI Screens workspace drew every region over a
103
+ * blank backdrop with no error to explain it. The request simply fell through
104
+ * to the SPA and the `<img>` got an HTML document back.
105
+ *
106
+ * Naming roots at all is the allow-list, and that part is not negotiable:
107
+ * this server hands project files to a browser, so it serves these two
108
+ * subtrees and nothing else — not `.env`, not `.git/`, not the source.
109
+ */
110
+ const CAPTURE_ROOTS = ['model/assets', 'assets'];
111
+ /** True when `candidate` is a real descendant of `root` — the traversal guard. */
112
+ function isWithinRoot(root, candidate) {
113
+ const fromRoot = relative(root, candidate);
114
+ return Boolean(fromRoot)
115
+ && fromRoot !== '..'
116
+ && !fromRoot.startsWith('../')
117
+ && !fromRoot.startsWith('..\\');
118
+ }
119
+ /** Resolve only project-owned screen captures, under either capture root. */
96
120
  export function resolveProjectAssetRequest(projectRoot, requestUrl) {
97
121
  let pathname;
98
122
  try {
@@ -101,15 +125,11 @@ export function resolveProjectAssetRequest(projectRoot, requestUrl) {
101
125
  catch {
102
126
  return undefined;
103
127
  }
104
- if (!pathname.startsWith('/model/'))
128
+ if (!pathname.startsWith('/model/') && !pathname.startsWith('/assets/'))
105
129
  return undefined;
106
- const assetRoot = resolve(projectRoot, 'model', 'assets');
107
130
  const requested = resolve(projectRoot, pathname.replace(/^\//, ''));
108
- const fromAssetRoot = relative(assetRoot, requested);
109
- if (!fromAssetRoot || fromAssetRoot === '..' || fromAssetRoot.startsWith('../') || fromAssetRoot.startsWith('..\\')) {
110
- return undefined;
111
- }
112
- return requested;
131
+ const within = CAPTURE_ROOTS.some(root => isWithinRoot(resolve(projectRoot, root), requested));
132
+ return within ? requested : undefined;
113
133
  }
114
134
  export async function createDevServer(options) {
115
135
  const { port, webPackagePath, initialMessages, transformClientHtml } = options;
@@ -219,10 +239,19 @@ export async function createDevServer(options) {
219
239
  /** Serve captures referenced by project-relative ScreenCapture.imageUri. */
220
240
  function serveProjectAsset(req, res) {
221
241
  const requestUrl = req.url ?? '/';
222
- if (!requestUrl.split('?')[0].startsWith('/model/'))
242
+ const pathname = requestUrl.split('?')[0];
243
+ if (!pathname.startsWith('/model/') && !pathname.startsWith('/assets/'))
223
244
  return false;
224
245
  const requested = resolveProjectAssetRequest(options.projectRoot, requestUrl);
225
- if (!requested || !existsSync(requested) || !statSync(requested).isFile()) {
246
+ const owned = Boolean(requested) && existsSync(requested) && statSync(requested).isFile();
247
+ if (!owned) {
248
+ // `/assets/` is ALSO where the client's own hashed bundles live,
249
+ // and this handler runs before the web dist. Claiming every
250
+ // `/assets/` request would 404 the application's own JavaScript,
251
+ // so an unclaimed one falls through; `/model/` is unambiguous and
252
+ // still reports a missing capture as a missing capture.
253
+ if (pathname.startsWith('/assets/'))
254
+ return false;
226
255
  res.writeHead(404);
227
256
  res.end('Capture not found');
228
257
  return true;
@@ -321,19 +350,28 @@ export async function createDevServer(options) {
321
350
  const { WebSocketServer } = await import('ws');
322
351
  const wss = new WebSocketServer({ server });
323
352
  const clients = new Set();
324
- // User-created views are project state, not session state. Merge them into
325
- // the initial model payload so a UI screen created from the workbench is
326
- // still present after the dev server restarts.
327
- const initialModelIndex = initialMessages.findIndex(message => message.type === 'model:update');
328
- if (initialModelIndex >= 0) {
329
- const initialModel = initialMessages[initialModelIndex];
330
- const authored = initialModel.payload.diagrams ?? [];
331
- const authoredIds = new Set(authored.map(diagram => diagram.id));
332
- const userDiagrams = loadUserDiagrams(options.projectRoot).filter(diagram => !authoredIds.has(diagram.id));
333
- initialMessages[initialModelIndex] = {
334
- type: 'model:update',
335
- payload: { ...initialModel.payload, diagrams: [...authored, ...userDiagrams] },
336
- };
353
+ // Every view is DECLARED in SysML — see `view-writer.ts`. The sidecar at
354
+ // .memo/user-diagrams.json used to be merged in here as a second class of
355
+ // view, which is how a view could exist for Architect and for nothing else:
356
+ // no source file, so invisible to `memo validate`, to `syside check`, to
357
+ // review, and — wherever `.memo/` is ignored — to git.
358
+ //
359
+ // Rows left in that file are therefore not views but UNDECLARED views: an
360
+ // error to be fixed by declaring them, not a state to render. They are
361
+ // reported by id and not merged. The file is never rewritten or deleted
362
+ // here — those rows are the only record of what still needs declaring.
363
+ const undeclared = loadUserDiagrams(options.projectRoot);
364
+ if (undeclared.length > 0) {
365
+ const initialModel = initialMessages.find(m => m.type === 'model:update');
366
+ const declaredIds = new Set((initialModel?.payload.diagrams ?? []).map(diagram => diagram.id));
367
+ const orphans = undeclared.filter(diagram => !declaredIds.has(diagram.id));
368
+ if (orphans.length > 0) {
369
+ console.error(`[Views] ${orphans.length} view(s) in .memo/user-diagrams.json have no SysML declaration `
370
+ + 'and were NOT loaded. Declare each as a `view … { }` in source, then delete its row:');
371
+ for (const orphan of orphans) {
372
+ console.error(` - ${orphan.id} ${orphan.name ?? ''} (${orphan.viewKind ?? 'unknown kind'})`);
373
+ }
374
+ }
337
375
  }
338
376
  const currentDiagrams = () => {
339
377
  const model = initialMessages.find(m => m.type === 'model:update');
@@ -918,8 +956,10 @@ export async function createDevServer(options) {
918
956
  if (existsSync(path))
919
957
  recordWriteTransaction(sourceFile, readFileSync(path, 'utf8'));
920
958
  }
921
- // User-authored diagrams are sidecars rather than semantic
922
- // relationships, but they must not retain a stale element ID.
959
+ // The only rows left in the sidecar are UNDECLARED views awaiting
960
+ // migration; none is loaded as a view. They are still kept accurate,
961
+ // because they are the record of what needs declaring and a dangling
962
+ // element ID would carry straight into the declaration.
923
963
  const diagrams = loadUserDiagrams(options.projectRoot);
924
964
  let changed = false;
925
965
  const cleaned = diagrams.map(diagram => {
@@ -1254,10 +1294,17 @@ export async function createDevServer(options) {
1254
1294
  const safeStem = rawStem
1255
1295
  .normalize('NFKD').replace(/[^a-zA-Z0-9_-]+/g, '-').replace(/^-+|-+$/g, '')
1256
1296
  || 'capture';
1257
- const assetDir = resolve(options.projectRoot, 'model', 'assets', safeView);
1297
+ // Write into the layout the project actually uses. Creating
1298
+ // `model/` under a project whose source lives in `src/`
1299
+ // resurrects a directory that layout deliberately does not
1300
+ // have, and the capture would then sit outside the tree the
1301
+ // rest of the model is kept in.
1302
+ const captureRoot = existsSync(resolve(options.projectRoot, 'model'))
1303
+ ? resolve(options.projectRoot, 'model', 'assets')
1304
+ : resolve(options.projectRoot, 'assets');
1305
+ const assetDir = resolve(captureRoot, safeView);
1258
1306
  const assetPath = resolve(assetDir, `${safeStem}${extension}`);
1259
- const modelRoot = resolve(options.projectRoot, 'model');
1260
- if (relative(modelRoot, assetPath).startsWith('..'))
1307
+ if (!isWithinRoot(captureRoot, assetPath))
1261
1308
  throw new Error('Invalid capture path.');
1262
1309
  mkdirSync(assetDir, { recursive: true });
1263
1310
  writeFileSync(assetPath, bytes);
@@ -1276,29 +1323,60 @@ export async function createDevServer(options) {
1276
1323
  else if (msg.type === 'diagram:create') {
1277
1324
  const { projectRoot } = options;
1278
1325
  const diagram = { ...msg.payload, auto: false };
1279
- const userDiagrams = loadUserDiagrams(projectRoot);
1280
- userDiagrams.push(diagram);
1281
- saveUserDiagrams(projectRoot, userDiagrams);
1282
- broadcastDiagramChange(diagram, 'create');
1283
- console.log(`[Diagram] Created: ${diagram.name} (${diagram.id})`);
1326
+ // A view is model content, so it is DECLARED, not recorded in
1327
+ // a sidecar. Writing the SysML puts it where `memo validate`,
1328
+ // `syside check`, review and git can all see it, and — the
1329
+ // derived diagram then carrying a `sourceFile` — takes its
1330
+ // `.viewlayout` companion out of the hidden store too.
1331
+ const declared = await writeViewDeclaration(projectRoot, currentModel() ?? { elements: {}, diagrams: [] }, diagram);
1332
+ if (!declared.success) {
1333
+ // No fallback. A view that cannot be declared is not one
1334
+ // this project can hold, and recording it in a sidecar
1335
+ // would only hide that until something downstream needed
1336
+ // the declaration.
1337
+ const error = `The view "${diagram.name}" was not created: ${declared.reason}. `
1338
+ + 'Every view must be declared in SysML.';
1339
+ console.error(`[Diagram] REFUSED: ${error}`);
1340
+ ws.send(JSON.stringify({ type: 'app:error', payload: { requestId: msg.payload?.requestId, error } }));
1341
+ return;
1342
+ }
1343
+ console.log(`[Diagram] Declared: ${diagram.name} (${diagram.id}) as ${declared.identifier} in ${declared.filePath}`);
1344
+ // The file watcher recompiles and `view-deriver` emits the
1345
+ // diagram; no broadcast here, or clients would briefly hold
1346
+ // a second, sidecar-shaped copy of it.
1347
+ await recompileAfterWrite();
1284
1348
  }
1285
1349
  else if (msg.type === 'diagram:update') {
1350
+ // What a view shows lives in its `expose` members, not in a
1351
+ // list of ids in a sidecar, so the update is applied to the
1352
+ // declaration. This used to edit the sidecar, which meant
1353
+ // that for a DECLARED view it silently did nothing at all.
1286
1354
  const { projectRoot } = options;
1287
- const userDiagrams = loadUserDiagrams(projectRoot);
1288
- const idx = userDiagrams.findIndex(d => d.id === msg.payload.id);
1289
- if (idx >= 0) {
1290
- userDiagrams[idx] = { ...userDiagrams[idx], ...msg.payload };
1291
- saveUserDiagrams(projectRoot, userDiagrams);
1292
- broadcastDiagramChange(userDiagrams[idx], 'update');
1355
+ const declared = currentDiagrams().find(d => d.id === msg.payload?.id);
1356
+ const result = declared
1357
+ ? await updateViewExpose(projectRoot, currentModel() ?? { elements: {} }, declared, msg.payload?.elementIds)
1358
+ : { success: false, reason: `no view "${msg.payload?.id}" is declared` };
1359
+ if (result.success) {
1360
+ console.log(`[Diagram] Exposed ${result.exposed.join(', ')} on ${declared.name} (${result.filePath})`);
1361
+ await recompileAfterWrite();
1362
+ }
1363
+ else {
1364
+ const error = `The view "${declared?.name ?? msg.payload?.id}" was not changed: ${result.reason}.`;
1365
+ console.error(`[Diagram] REFUSED: ${error}`);
1366
+ ws.send(JSON.stringify({ type: 'app:error', payload: { requestId: msg.payload?.requestId, error } }));
1293
1367
  }
1294
1368
  }
1295
1369
  else if (msg.type === 'diagram:delete') {
1296
- const { projectRoot } = options;
1297
- const userDiagrams = loadUserDiagrams(projectRoot);
1298
- const filtered = userDiagrams.filter(d => d.id !== msg.payload.id);
1299
- saveUserDiagrams(projectRoot, filtered);
1300
- broadcastDiagramChange({ id: msg.payload.id }, 'delete');
1301
- console.log(`[Diagram] Deleted: ${msg.payload.id}`);
1370
+ // Deleting a view means deleting its declaration, which is
1371
+ // `element:delete` on the view element — not a sidecar edit.
1372
+ const declared = currentDiagrams().find(d => d.id === msg.payload?.id);
1373
+ const where = declared?.sourceFile
1374
+ ? `Remove its \`view\` declaration from ${declared.sourceFile}.`
1375
+ : 'It is not declared in SysML.';
1376
+ const error = `The view "${declared?.name ?? msg.payload?.id}" cannot be deleted from here — `
1377
+ + `a view exists because it is declared. ${where}`;
1378
+ console.error(`[Diagram] REFUSED: ${error}`);
1379
+ ws.send(JSON.stringify({ type: 'app:error', payload: { requestId: msg.payload?.requestId, error } }));
1302
1380
  }
1303
1381
  else if (msg.type === 'diagram:layout:update') {
1304
1382
  const { diagramId, layout } = msg.payload;