@neocompose/cli 0.2.2 → 0.3.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/CHANGELOG.md +18 -0
- package/README.md +25 -25
- package/dist/neo.mjs +4957 -5058
- package/dist/tooling/NeoCompose.Schema.Tooling.dll +0 -0
- package/dist/tooling/NeoCompose.Schema.Tooling.pdb +0 -0
- package/dist/tooling/NeoCompose.Schema.dll +0 -0
- package/dist/tooling/NeoCompose.Schema.pdb +0 -0
- package/dist/tooling/NeoCompose.Schema.xml +16 -16
- package/dist/tooling/NeoCompose.SchemaCompiler.deps.json +12 -12
- package/dist/tooling/NeoCompose.SchemaCompiler.dll +0 -0
- package/dist/tooling/NeoCompose.SchemaCompiler.pdb +0 -0
- package/dist/tooling/schema-contract.json +6 -6
- package/package.json +2 -1
- package/skills/neocompose-cli/SKILL.md +37 -34
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [0.3.0] - 2026-07-15
|
|
4
|
+
|
|
5
|
+
### Breaking
|
|
6
|
+
|
|
7
|
+
- Replaced the format-2 schema vocabulary with strict format 3 Classes and
|
|
8
|
+
Members.
|
|
9
|
+
- Renamed generated schema sources to `Classes/*.cs`, introduced
|
|
10
|
+
`[NeoSchemaClass]`, and moved NeoScript sidecars to
|
|
11
|
+
`Scripts/<Class>/<Member>.neo`.
|
|
12
|
+
- Removed format-2 loading, legacy flags, record kinds, wire fields, and
|
|
13
|
+
compatibility conversion. Refresh existing working copies with Neo CLI 0.3.0.
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
|
|
17
|
+
- Updated compiler, analyzer, language-service, VS Code protocol, status,
|
|
18
|
+
diff, and pending-ID contracts for Class/Member terminology.
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
`neo` keeps a Git-friendly C# working copy of a Neo Compose project schema,
|
|
4
4
|
syncs it bidirectionally with Convex, and exposes NeoScript and content
|
|
5
|
-
commands. Schema format
|
|
5
|
+
commands. Schema format v3 is compiler-backed: authored files are real C# 11,
|
|
6
6
|
not a handwritten C# subset.
|
|
7
7
|
|
|
8
8
|
The complete contract is in
|
|
@@ -23,20 +23,20 @@ an executable when discovery needs an explicit override. Run `neo doctor` to
|
|
|
23
23
|
see the selected host, its compatibility result, the discovery cache, and the
|
|
24
24
|
bundled schema-contract versions.
|
|
25
25
|
|
|
26
|
-
## Format
|
|
26
|
+
## Format v3 working copy
|
|
27
27
|
|
|
28
28
|
```text
|
|
29
29
|
neo/
|
|
30
|
-
neo.json # includes formatVersion:
|
|
30
|
+
neo.json # includes formatVersion: 3
|
|
31
31
|
NeoCompose.Schema.csproj # netstandard2.1, C# 11, IDE-only
|
|
32
|
-
|
|
32
|
+
Classes/ # class declarations
|
|
33
33
|
Interfaces/ # Neo interfaces
|
|
34
34
|
Enums/ # Neo enums
|
|
35
35
|
Root.cs # [NeoRegistry] roots and loose members
|
|
36
36
|
Templates/ # typed texture/audio settings
|
|
37
37
|
Localization.cs # typed localization settings
|
|
38
38
|
LocalizationStatuses/*.cs # typed workflow-status settings
|
|
39
|
-
Scripts/<
|
|
39
|
+
Scripts/<Class>/<Member>.neo # tracked NeoScript sidecars
|
|
40
40
|
Migrations/*.neo
|
|
41
41
|
.neo/
|
|
42
42
|
state.json # sync bases and CAS hashes
|
|
@@ -47,17 +47,17 @@ neo/
|
|
|
47
47
|
`.neo/`, `bin/`, and `obj/` are gitignored. The C# project is an authoring
|
|
48
48
|
project only; the game never references or ships it. The public
|
|
49
49
|
`NeoCompose.Schema` SDK and analyzer are materialized from the npm package
|
|
50
|
-
under `.neo/tooling`. There is no generated `Schema/
|
|
50
|
+
under `.neo/tooling`. There is no generated `Schema/NeoSchemaMembers.cs`.
|
|
51
51
|
|
|
52
|
-
Format
|
|
52
|
+
Format v3 is a clean break and `neo.json` must contain `formatVersion: 3`.
|
|
53
53
|
A workspace with a missing or different format version is unsupported. Preserve
|
|
54
|
-
any source you need, then create a fresh
|
|
54
|
+
any source you need, then create a fresh v3 working copy with:
|
|
55
55
|
|
|
56
56
|
```sh
|
|
57
57
|
neo init --project <id> [--version <id>] [--dir neo]
|
|
58
58
|
```
|
|
59
59
|
|
|
60
|
-
`neo pull --reset` remains available for an existing
|
|
60
|
+
`neo pull --reset` remains available for an existing v3 workspace: it
|
|
61
61
|
reconstructs its managed schema files from the server and refreshes tooling.
|
|
62
62
|
|
|
63
63
|
## Real C# authoring
|
|
@@ -71,18 +71,18 @@ method arguments, return types, and deferred `Task` results.
|
|
|
71
71
|
using System.Threading.Tasks;
|
|
72
72
|
using NeoCompose.Schema;
|
|
73
73
|
|
|
74
|
-
[
|
|
74
|
+
[NeoSchemaClass("class-inventory-item")]
|
|
75
75
|
public abstract partial class InventoryItem<
|
|
76
76
|
[NeoId("generic-stack-data")] TStackData>
|
|
77
77
|
where TStackData : InventoryStackData
|
|
78
78
|
{
|
|
79
|
-
[NeoMember("
|
|
79
|
+
[NeoMember("member-name"), NeoText(SearchKey = true)]
|
|
80
80
|
public virtual string Name { get; init; } = "";
|
|
81
81
|
|
|
82
|
-
[NeoMember("
|
|
82
|
+
[NeoMember("member-type")]
|
|
83
83
|
public abstract ItemType Type { get; init; }
|
|
84
84
|
|
|
85
|
-
[NeoMember("
|
|
85
|
+
[NeoMember("member-description"), NeoComputed]
|
|
86
86
|
public virtual string Description { get; }
|
|
87
87
|
|
|
88
88
|
[NeoMember("function-use-primary"), NeoScript]
|
|
@@ -94,7 +94,7 @@ public abstract partial class InventoryItem<
|
|
|
94
94
|
override's base member ID is resolved from the Roslyn symbol graph.
|
|
95
95
|
- Property type and nullability determine Neo kind and requiredness.
|
|
96
96
|
- A property initializer is its default; declaration order is schema order.
|
|
97
|
-
- A `static` property or method is
|
|
97
|
+
- A `static` property or method is class-owned. Stored static properties use a
|
|
98
98
|
replaceable binding and are not copied into instances; instance and static
|
|
99
99
|
receiver kinds cannot be changed in place.
|
|
100
100
|
- Method signatures define function arguments and returns. `Task`/`Task<T>`
|
|
@@ -109,14 +109,14 @@ public abstract partial class InventoryItem<
|
|
|
109
109
|
settings use strongly typed object initializers. Their complete option sets
|
|
110
110
|
participate in normal C# IntelliSense.
|
|
111
111
|
|
|
112
|
-
For example, a concrete non-generic
|
|
112
|
+
For example, a concrete non-generic class can declare a class-owned stored
|
|
113
113
|
member:
|
|
114
114
|
|
|
115
115
|
```csharp
|
|
116
|
-
[
|
|
116
|
+
[NeoSchemaClass("class-game-rules")]
|
|
117
117
|
public partial class GameRules
|
|
118
118
|
{
|
|
119
|
-
[NeoMember("
|
|
119
|
+
[NeoMember("member-encounter-count")]
|
|
120
120
|
public static int EncounterCount { get; set; }
|
|
121
121
|
}
|
|
122
122
|
```
|
|
@@ -127,7 +127,7 @@ Only statically analyzable expressions are accepted: literals, enum values,
|
|
|
127
127
|
authored assembly. JSON carriers and identity escape hatches such as
|
|
128
128
|
`ExtraJson`, `DefaultJson`, `RetJson`, `ArgsJson`, `EntryChainJson`,
|
|
129
129
|
`SchemaKeyOrderJson`, `GenericParamIds`, `ChainJson`, `SignatureJson`,
|
|
130
|
-
`ExtendsId`, `isVirtual`, and `isAbstract` do not exist in
|
|
130
|
+
`ExtendsId`, `isVirtual`, and `isAbstract` do not exist in v3.
|
|
131
131
|
|
|
132
132
|
Localization workflow statuses are ordinary stable records rather than IDs
|
|
133
133
|
hidden in localization JSON:
|
|
@@ -150,10 +150,10 @@ public sealed partial class Approved
|
|
|
150
150
|
|
|
151
151
|
NeoScript is tracked separately from C# metadata:
|
|
152
152
|
|
|
153
|
-
- `Scripts/<
|
|
153
|
+
- `Scripts/<DeclaringClass>/<Member>.neo` is the only canonical path.
|
|
154
154
|
- Every file contains its complete contextual wrapper. The outer signature
|
|
155
155
|
mirrors the C# member and its NeoScript result type (`Task<T>` is represented
|
|
156
|
-
as `T`), then adds `<
|
|
156
|
+
as `T`), then adds `<DeclaringClass> this, Root root`; this chrome is protected
|
|
157
157
|
in Monaco while the executable regions remain editable.
|
|
158
158
|
- A computed property wrapper contains `get { ... }` and, when writable,
|
|
159
159
|
`set(<Type> value) { ... }` units.
|
|
@@ -186,8 +186,8 @@ setter-backed targets; Immutable targets remain read-only. Body kind still
|
|
|
186
186
|
controls return/deferred-call rules, not storage writability.
|
|
187
187
|
|
|
188
188
|
Locals may use either an explicit type or `var`; inferred locals retain the
|
|
189
|
-
same exact type and language features. Concrete, closed, writable
|
|
190
|
-
support `new
|
|
189
|
+
same exact type and language features. Concrete, closed, writable Classes
|
|
190
|
+
support `new ClassName(...)` in the same required-then-optional parameter order as
|
|
191
191
|
generated C#. Optional parameters have inferred `null` defaults and are
|
|
192
192
|
positional, so pass `null` to skip an earlier optional slot. Constructor-call
|
|
193
193
|
signature help and parameter-name inlay hints come from that shared signature;
|
|
@@ -195,7 +195,7 @@ the names are previews, not authored named-argument syntax.
|
|
|
195
195
|
Fresh constructor graphs use Session ownership and are reclaimed at invocation
|
|
196
196
|
completion unless attached, returned, passed onward, or otherwise escaped.
|
|
197
197
|
|
|
198
|
-
Static access uses the declaring
|
|
198
|
+
Static access uses the declaring Class (`GameRules.EncounterCount`); stored
|
|
199
199
|
static members resolve through their authored, Save, or Session binding layer.
|
|
200
200
|
|
|
201
201
|
The browser-safe `neoscript-language` package is authoritative for the CLI,
|
|
@@ -213,7 +213,7 @@ uses the same results; marketplace publication is a separate release step.
|
|
|
213
213
|
| Command | Purpose |
|
|
214
214
|
| ----------------------------------------- | -------------------------------------------------------------------------------------------------- |
|
|
215
215
|
| `login` | Device-code OAuth; use `--profile release`, `--token-stdin`, or `NEO_COMPOSE_TOKEN` as appropriate |
|
|
216
|
-
| `init --project <id> [--version <id>]` | Scaffold a format-
|
|
216
|
+
| `init --project <id> [--version <id>]` | Scaffold a format-v3 working copy and perform the first pull |
|
|
217
217
|
| `doctor` | Report runtime discovery, compatibility, cache, tooling, and contract versions |
|
|
218
218
|
| `pull [--reset]` | Sync or reconstruct; normal pulls use record-level three-way merge |
|
|
219
219
|
| `status` / `diff` | Compile the working copy and compare its manifest with the base |
|
|
@@ -226,7 +226,7 @@ uses the same results; marketplace publication is a separate release step.
|
|
|
226
226
|
`neo script eval --json` reports `value`, ordered `writes`, and
|
|
227
227
|
`createdSessionValues`. The last field contains only constructor rows that
|
|
228
228
|
escaped invocation cleanup. Use `neo values bind`, `neo values unbind`, or an
|
|
229
|
-
atomic `neo values create ... --bind <
|
|
229
|
+
atomic `neo values create ... --bind <staticMemberId>` operation to manage
|
|
230
230
|
an authored stored-static binding.
|
|
231
231
|
|
|
232
232
|
The central invariant is unchanged: a pull followed immediately by status or
|