@neocompose/cli 0.75.0 → 0.75.2

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neocompose/cli",
3
- "version": "0.75.0",
3
+ "version": "0.75.2",
4
4
  "description": "Neo Compose native project-source CLI with bidirectional sync.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -36,6 +36,7 @@
36
36
  "dependencies": {
37
37
  "@inquirer/prompts": "^8.7.3",
38
38
  "convex": "^1.46.0",
39
+ "editorconfig": "^3.0.2",
39
40
  "fflate": "^0.8.3",
40
41
  "ignore": "^7.0.12",
41
42
  "valibot": "^1.5.0"
@@ -46,7 +47,9 @@
46
47
  "@neocompose/neoscript-language": "file:../packages/neoscript-language",
47
48
  "esbuild": "^0.28.2",
48
49
  "prettier": "^3.9.9",
49
- "uuid": "^14.0.2"
50
+ "uuid": "^14.0.2",
51
+ "@neocompose/models": "file:../packages/models",
52
+ "@neocompose/neoscript-runtime": "file:../packages/neoscript-runtime"
50
53
  },
51
54
  "repository": {
52
55
  "type": "git",
@@ -9,7 +9,7 @@ description: >-
9
9
  `@neocompose/cli` or `node cli/bin/neo.mjs` in the neo-compose repository.
10
10
  ---
11
11
 
12
- <!-- reviewed-through-cli: 0.75.0 -->
12
+ <!-- reviewed-through-cli: 0.75.2 -->
13
13
 
14
14
  # Neo Compose CLI
15
15
 
@@ -299,3 +299,15 @@ Before a real push, report the files changed, the relevant `neo diff`, dialogue
299
299
  dry-run results when applicable, and `neo push --dry-run`. Do not claim success
300
300
  from parsing alone when construction, reference membership, runtime ownership,
301
301
  or server verification is involved.
302
+
303
+ ## Formatting
304
+
305
+ The CLI and VS Code extension share NeoScript formatting and read `.editorconfig`
306
+ for `.neo` and `.neoflow` files. Set `indent_style`, `indent_size`, `end_of_line`,
307
+ and `insert_final_newline` there to keep regenerated source consistent with your
308
+ editor. Defaults are two spaces, LF, and a final newline. Push preserves authored
309
+ text when regeneration has the same tokens; pull preserves semantically unchanged
310
+ files. Formatting-only body or source-location changes do not create a subsequent
311
+ push, including stored initializer recipes, computed member defaults, and inline
312
+ constructor delegates; real code and string-content edits still do. Formatting preferences belong
313
+ to the checkout, not stored script bodies.
@@ -76,10 +76,17 @@ NeoScript compilation in the browser-safe `@neocompose/neoscript-language`
76
76
  service. Monaco, VS Code, CLI, trusted server, and corpus tooling must consume
77
77
  that shared implementation. Do not add language intelligence to one adapter.
78
78
 
79
- Keep evaluation and plain project context projection in `src/runtime/`. The CLI,
80
- server, workers, and editor consume those modules through host lookups; the
81
- runtime must not import UI state. The runtime boundary and import-cycle checks
82
- run with `npm run lint:architecture`.
79
+ Resolve disk formatting through the Node-only `node-format-options` entrypoint
80
+ and `.editorconfig`; keep filesystem configuration out of browser imports.
81
+ Format regenerated source before compiling it so cached source ranges match
82
+ the written files. Preserve authored source when a push changes no source tokens.
83
+
84
+ Keep evaluation in `@neocompose/neoscript-runtime` and shared schema/value
85
+ contracts in `@neocompose/models`. Models depend on language and manifest;
86
+ runtime depends on those packages. App context projection, database adapters,
87
+ and reactive hosts remain in the app. Packages must not import host code.
88
+ Boundary and import-cycle checks run with `npm run lint:architecture`;
89
+ `npm run test:runtime-package` checks a standalone custom database host.
83
90
 
84
91
  Keep project context refreshable without accumulating stale Monaco providers or
85
92
  LSP state. Preserve diagnostics, completion, hover, signatures, definition,
@@ -97,8 +104,12 @@ forking it in the CLI. The server still verifies a push's uploaded
97
104
  project-file bytes, and web editor commits use the shared client preparation protocol.
98
105
  Unrelated source files are not uploaded or recompiled on every push.
99
106
  Optional source maps missing from valid stored bodies do not request a backfill.
100
- Existing map changes still refresh locations on push; authored edits, dependency
101
- changes, and explicit forced recompilation retain their normal compile scope. A CLI lowering mismatch on a normal push is exposed by the next
107
+ Formatting-only source location changes do not create pushes, including when
108
+ other records change. Stored initializer recipes, computed member defaults, and
109
+ inline constructor delegates preserve their pulled code and compiled bodies when
110
+ source tokens are unchanged. String-literal content remains significant.
111
+ Evaluation maps the current local layout; authored edits,
112
+ dependency changes, and explicit forced recompilation retain their normal compile scope. A CLI lowering mismatch on a normal push is exposed by the next
102
113
  canonical pull; `neo push --dry-run` remains the complete source-to-record
103
114
  rehearsal.
104
115
 
@@ -118,7 +129,7 @@ wrappers.
118
129
  The marker near the top of `SKILL.md` must exactly match the package version:
119
130
 
120
131
  ```html
121
- <!-- reviewed-through-cli: 0.75.0 -->
132
+ <!-- reviewed-through-cli: 0.75.2 -->
122
133
  ```
123
134
 
124
135
  The quoted version above is checked too, so this instruction cannot go stale
@@ -446,3 +446,28 @@ A lookup's declared class must be assignable to the entry class of its
446
446
  selection. Constructor arguments and member initializers must select compatible
447
447
  targets too. An `NPC` lookup cannot select from `List<Quest>`, even when its
448
448
  initializer is typed `NPC`; status reports the conflicting collection annotation.
449
+
450
+ Schema export retains a constructed default's generic arguments, including
451
+ nested collection references. For example, a `NeoAnimationClip<ArmPart>`
452
+ default constructs `new NeoAnimationClip<ArmPart>` and its frames reference
453
+ `List<NeoAnimationFrame<ArmPart>>`.
454
+
455
+ When a construction leaves a required member unsettled, CLI diagnostics point to
456
+ `new` and include the member declaration as a related location. Fix that
457
+ construction before pushing. Valid root initializers still participate in
458
+ reference checking, so an unrelated root error does not imply their values are
459
+ missing or deleted. Independent reference errors remain visible.
460
+
461
+ Object initializer assignments use commas. The last comma is optional; the
462
+ semicolon terminating the enclosing declaration is valid:
463
+
464
+ ```neo
465
+ AudioSettings AUDIO_SETTINGS = new() {
466
+ Main = new AudioMixerGroupSettingsFolder("Main", "Master", "MasterVolume", []),
467
+ };
468
+ ```
469
+
470
+ A semicolon after `Main = ...` inside the initializer is invalid. Editor and CLI
471
+ diagnostics highlight that separator in the authored file, including global,
472
+ static member, and protected root initializers. Statement semicolons inside
473
+ function or delegate bodies remain valid.