@neocompose/cli 0.74.0 → 0.75.1

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.74.0",
3
+ "version": "0.75.1",
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.74.0 -->
12
+ <!-- reviewed-through-cli: 0.75.1 -->
13
13
 
14
14
  # Neo Compose CLI
15
15
 
@@ -299,3 +299,14 @@ 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; real code and string-content edits still do. Formatting preferences belong
312
+ 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,9 @@ 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. Evaluation maps the current local layout; authored edits,
109
+ 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
110
  canonical pull; `neo push --dry-run` remains the complete source-to-record
103
111
  rehearsal.
104
112
 
@@ -118,7 +126,7 @@ wrappers.
118
126
  The marker near the top of `SKILL.md` must exactly match the package version:
119
127
 
120
128
  ```html
121
- <!-- reviewed-through-cli: 0.74.0 -->
129
+ <!-- reviewed-through-cli: 0.75.1 -->
122
130
  ```
123
131
 
124
132
  The quoted version above is checked too, so this instruction cannot go stale
@@ -557,7 +557,8 @@ receiver.Handler`; use `-=` to remove the same receiver/handler pair. Handlers
557
557
  are noncapturing, return void, and accept the field's type. Bindings to Session
558
558
  receivers stay Session-only. Gameplay hosts dispatch after the write batch.
559
559
  Authoring, replay, migration, and dialogue dry-run hosts retain wiring without
560
- invoking callbacks.
560
+ invoking callbacks. `owner.Field.OnChanged.Clear()` removes every handler,
561
+ including `@listeners` defaults, in both Save and Session wiring.
561
562
 
562
563
  Instance getters take the same syntax, for example
563
564
  `this._quantity.Value.OnChanged += this.QuantityChanged`. A getter
@@ -566,7 +567,8 @@ function, effect, lifecycle hook, or dialogue action, never a constructor,
566
567
  initializer, or migration. Subscribing reads the getter once. The SDK calls the
567
568
  handler with a fresh result whenever something that read depended on changes,
568
569
  even if the result is equal, and several changes before the next read call it
569
- once. Static getters, `base.Value`, and `@listeners` can't observe a getter.
570
+ once. `Clear()` ends the subscription, and a constructor can't call it on a
571
+ getter. Static getters, `base.Value`, and `@listeners` can't observe a getter.
570
572
  `neo test` dispatches getter subscriptions the same way, treating the test body
571
573
  as the host: handlers run after each of its statements, so the next statement
572
574
  sees their effects. A getter that reads through `Clone()` or a grid query can