@neocompose/cli 0.2.3 → 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.
Binary file
Binary file
@@ -19,22 +19,22 @@
19
19
  <member name="T:NeoCompose.Schema.NeoFileKind">
20
20
  <summary>Strongly typed Neo schema option set <c>NeoFileKind</c>.</summary>
21
21
  </member>
22
- <member name="T:NeoCompose.Schema.NeoTypeAttribute">
23
- <summary>Neo schema authoring marker <c>[NeoType]</c>; the compiler reads it statically and never executes authored schema code.</summary>
22
+ <member name="T:NeoCompose.Schema.NeoSchemaClassAttribute">
23
+ <summary>Neo schema authoring marker <c>[NeoSchemaClass]</c>; the compiler reads it statically and never executes authored schema code.</summary>
24
24
  </member>
25
- <member name="P:NeoCompose.Schema.NeoTypeAttribute.Id">
25
+ <member name="P:NeoCompose.Schema.NeoSchemaClassAttribute.Id">
26
26
  <summary>Gets the strongly typed <c>Id</c> option.</summary>
27
27
  </member>
28
- <member name="P:NeoCompose.Schema.NeoTypeAttribute.Name">
28
+ <member name="P:NeoCompose.Schema.NeoSchemaClassAttribute.Name">
29
29
  <summary>Gets or sets the strongly typed <c>Name</c> option.</summary>
30
30
  </member>
31
- <member name="P:NeoCompose.Schema.NeoTypeAttribute.Hidden">
31
+ <member name="P:NeoCompose.Schema.NeoSchemaClassAttribute.Hidden">
32
32
  <summary>Gets or sets the strongly typed <c>Hidden</c> option.</summary>
33
33
  </member>
34
- <member name="P:NeoCompose.Schema.NeoTypeAttribute.AllowedStorage">
34
+ <member name="P:NeoCompose.Schema.NeoSchemaClassAttribute.AllowedStorage">
35
35
  <summary>Gets or sets the strongly typed <c>AllowedStorage</c> option.</summary>
36
36
  </member>
37
- <member name="P:NeoCompose.Schema.NeoTypeAttribute.AllowedStorageKeys">
37
+ <member name="P:NeoCompose.Schema.NeoSchemaClassAttribute.AllowedStorageKeys">
38
38
  <summary>Gets or sets the strongly typed <c>AllowedStorageKeys</c> option.</summary>
39
39
  </member>
40
40
  <member name="T:NeoCompose.Schema.NeoInterfaceAttribute">
@@ -379,8 +379,8 @@
379
379
  <member name="P:NeoCompose.Schema.NeoEntrySettings.File">
380
380
  <summary>Gets or initializes the <c>File</c> option.</summary>
381
381
  </member>
382
- <member name="P:NeoCompose.Schema.NeoEntrySettings.Custom">
383
- <summary>Gets or initializes the <c>Custom</c> option.</summary>
382
+ <member name="P:NeoCompose.Schema.NeoEntrySettings.Class">
383
+ <summary>Gets or initializes the <c>Class</c> option.</summary>
384
384
  </member>
385
385
  <member name="P:NeoCompose.Schema.NeoEntrySettings.Enum">
386
386
  <summary>Gets or initializes the <c>Enum</c> option.</summary>
@@ -502,16 +502,16 @@
502
502
  <member name="P:NeoCompose.Schema.NeoDictionarySettings.KeyEnum">
503
503
  <summary>Gets or initializes the <c>KeyEnum</c> option.</summary>
504
504
  </member>
505
- <member name="T:NeoCompose.Schema.NeoCustomSettings">
506
- <summary>Strongly typed Neo schema authoring options for <c>NeoCustomSettings</c>.</summary>
505
+ <member name="T:NeoCompose.Schema.NeoClassSettings">
506
+ <summary>Strongly typed Neo schema authoring options for <c>NeoClassSettings</c>.</summary>
507
507
  </member>
508
- <member name="P:NeoCompose.Schema.NeoCustomSettings.Type">
508
+ <member name="P:NeoCompose.Schema.NeoClassSettings.Type">
509
509
  <summary>Gets or initializes the <c>Type</c> option.</summary>
510
510
  </member>
511
- <member name="P:NeoCompose.Schema.NeoCustomSettings.SchemaOrder">
511
+ <member name="P:NeoCompose.Schema.NeoClassSettings.SchemaOrder">
512
512
  <summary>Gets or initializes the <c>SchemaOrder</c> option.</summary>
513
513
  </member>
514
- <member name="P:NeoCompose.Schema.NeoCustomSettings.TypeArguments">
514
+ <member name="P:NeoCompose.Schema.NeoClassSettings.TypeArguments">
515
515
  <summary>Gets or initializes the <c>TypeArguments</c> option.</summary>
516
516
  </member>
517
517
  <member name="T:NeoCompose.Schema.NeoGenericBindingSettings">
@@ -523,8 +523,8 @@
523
523
  <member name="P:NeoCompose.Schema.NeoGenericBindingSettings.GenericParameter">
524
524
  <summary>Gets or initializes the <c>GenericParameter</c> option.</summary>
525
525
  </member>
526
- <member name="P:NeoCompose.Schema.NeoGenericBindingSettings.Attribute">
527
- <summary>Gets or initializes the <c>Attribute</c> option.</summary>
526
+ <member name="P:NeoCompose.Schema.NeoGenericBindingSettings.Member">
527
+ <summary>Gets or initializes the <c>Member</c> option.</summary>
528
528
  </member>
529
529
  <member name="T:NeoCompose.Schema.NeoEnumSettings">
530
530
  <summary>Strongly typed Neo schema authoring options for <c>NeoEnumSettings</c>.</summary>
@@ -6,11 +6,11 @@
6
6
  "compilationOptions": {},
7
7
  "targets": {
8
8
  ".NETCoreApp,Version=v6.0": {
9
- "NeoCompose.SchemaCompiler/2.1.0": {
9
+ "NeoCompose.SchemaCompiler/3.0.0": {
10
10
  "dependencies": {
11
11
  "Microsoft.CodeAnalysis.CSharp": "4.11.0",
12
- "NeoCompose.Schema": "2.1.0",
13
- "NeoCompose.Schema.Tooling": "2.1.0"
12
+ "NeoCompose.Schema": "3.0.0",
13
+ "NeoCompose.Schema.Tooling": "3.0.0"
14
14
  },
15
15
  "runtime": {
16
16
  "NeoCompose.SchemaCompiler.dll": {}
@@ -184,26 +184,26 @@
184
184
  }
185
185
  },
186
186
  "System.Threading.Tasks.Extensions/4.5.4": {},
187
- "NeoCompose.Schema/2.1.0": {
187
+ "NeoCompose.Schema/3.0.0": {
188
188
  "runtime": {
189
189
  "NeoCompose.Schema.dll": {
190
- "assemblyVersion": "2.1.0.0",
191
- "fileVersion": "2.1.0.0"
190
+ "assemblyVersion": "3.0.0.0",
191
+ "fileVersion": "3.0.0.0"
192
192
  }
193
193
  }
194
194
  },
195
- "NeoCompose.Schema.Tooling/2.1.0": {
195
+ "NeoCompose.Schema.Tooling/3.0.0": {
196
196
  "runtime": {
197
197
  "NeoCompose.Schema.Tooling.dll": {
198
- "assemblyVersion": "2.1.0.0",
199
- "fileVersion": "2.1.0.0"
198
+ "assemblyVersion": "3.0.0.0",
199
+ "fileVersion": "3.0.0.0"
200
200
  }
201
201
  }
202
202
  }
203
203
  }
204
204
  },
205
205
  "libraries": {
206
- "NeoCompose.SchemaCompiler/2.1.0": {
206
+ "NeoCompose.SchemaCompiler/3.0.0": {
207
207
  "type": "project",
208
208
  "serviceable": false,
209
209
  "sha512": ""
@@ -285,12 +285,12 @@
285
285
  "path": "system.threading.tasks.extensions/4.5.4",
286
286
  "hashPath": "system.threading.tasks.extensions.4.5.4.nupkg.sha512"
287
287
  },
288
- "NeoCompose.Schema/2.1.0": {
288
+ "NeoCompose.Schema/3.0.0": {
289
289
  "type": "project",
290
290
  "serviceable": false,
291
291
  "sha512": ""
292
292
  },
293
- "NeoCompose.Schema.Tooling/2.1.0": {
293
+ "NeoCompose.Schema.Tooling/3.0.0": {
294
294
  "type": "project",
295
295
  "serviceable": false,
296
296
  "sha512": ""
@@ -1,10 +1,10 @@
1
1
  {
2
- "formatVersion": 2,
3
- "contractVersion": "2.1",
4
- "manifestName": "neo-schema-manifest-v2",
5
- "protocolVersion": 3,
6
- "sdkVersion": "2.1.0",
7
- "cliVersion": "0.2.3",
2
+ "formatVersion": 3,
3
+ "contractVersion": "3.0",
4
+ "manifestName": "neo-schema-manifest-v3",
5
+ "protocolVersion": 4,
6
+ "sdkVersion": "3.0.0",
7
+ "cliVersion": "0.3.0",
8
8
  "apiTarget": "netstandard2.1",
9
9
  "referenceAssemblySet": "NETStandard.Library.Ref/2.1.0",
10
10
  "requiredToolingFiles": [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neocompose/cli",
3
- "version": "0.2.3",
3
+ "version": "0.3.0",
4
4
  "description": "Neo Compose schema-as-code CLI with compiler-backed C# authoring and bidirectional sync.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -9,6 +9,7 @@
9
9
  },
10
10
  "files": [
11
11
  "dist",
12
+ "CHANGELOG.md",
12
13
  "README.md",
13
14
  "skills"
14
15
  ],
@@ -1,8 +1,8 @@
1
1
  ---
2
2
  name: neocompose-cli
3
3
  description: >-
4
- Edit and synchronize a Neo Compose format-v2 schema as real C# 11 plus
5
- tracked NeoScript sidecars. Use for custom types, interfaces, attributes,
4
+ Edit and synchronize a Neo Compose format-v3 schema as real C# 11 plus
5
+ tracked NeoScript sidecars. Use for classes, interfaces, members,
6
6
  enums, templates, localization, schema-aware NeoScript, or batch content
7
7
  edits. The working copy is a neo/ directory; run `neo` from the published
8
8
  package or `node cli/bin/neo.mjs` in the web repository.
@@ -12,7 +12,7 @@ description: >-
12
12
 
13
13
  A `neo/` working copy is a Git-like checkout of one Neo Compose project
14
14
  version. C# and NeoScript are peer authoring surfaces beside the web UI; the
15
- server remains the shared source of truth. The current contract is format v2
15
+ server remains the shared source of truth. The current contract is format v3
16
16
  and is documented in `specs/schema-as-code-cli.md`.
17
17
 
18
18
  ## Non-negotiable workflow
@@ -34,7 +34,7 @@ hide in an opaque JSON carrier.
34
34
  ## Setup and format requirement
35
35
 
36
36
  ```sh
37
- npm i -g @neocompose/cli
37
+ npm i -g @neocompose/cli@0.3.0
38
38
  neo login [--api <url>] [--profile editor|release] [--save-project <id>]
39
39
  neo init --project <id> [--version <id>] [--dir neo]
40
40
  neo doctor
@@ -44,8 +44,9 @@ Repository development uses `node cli/bin/neo.mjs`. Agents should always pass
44
44
  explicit flags/IDs. Human terminals may show pickers and confirms; non-TTY/CI
45
45
  use fails with an actionable missing-flag diagnostic rather than blocking.
46
46
 
47
- `neo.json` must contain `formatVersion: 2`. A missing or different marker is
48
- unsupported. Preserve any source you need, then create a fresh v2 working copy:
47
+ `neo.json` must contain `formatVersion: 3`. Format 2 and every other marker are
48
+ unsupported. There is no upgrader or compatibility reader. Preserve any source
49
+ you need, then refresh a format-3 working copy from the authoritative server:
49
50
 
50
51
  ```sh
51
52
  neo init --project <id> [--version <id>] [--dir neo]
@@ -75,14 +76,14 @@ in `neo.json` in this mode.
75
76
  neo/
76
77
  neo.json
77
78
  NeoCompose.Schema.csproj # netstandard2.1, C# 11, IDE-only
78
- Types/ # custom classes
79
+ Classes/ # schema classes
79
80
  Interfaces/ # interface declarations
80
81
  Enums/
81
82
  Root.cs # [NeoRegistry] roots and loose members
82
83
  Templates/ # typed texture/audio settings
83
84
  Localization.cs # typed localization settings
84
85
  LocalizationStatuses/*.cs # typed localization workflow statuses
85
- Scripts/<Type>/<Member>.neo # computed properties and NeoScript methods
86
+ Scripts/<Class>/<Member>.neo # computed properties and NeoScript methods
86
87
  Migrations/*.neo
87
88
  .neo/
88
89
  state.json # bases/CAS hashes; never hand-edit
@@ -107,7 +108,7 @@ Native C# carries native meaning:
107
108
  ordering attribute is present.
108
109
  - Method parameters and return type are the function signature.
109
110
  `Task`/`Task<T>` means deferred execution.
110
- - A C# `static` property or method is type-owned. Stored static properties use
111
+ - A C# `static` property or method is class-owned. Stored static properties use
111
112
  one replaceable binding and are excluded from instance construction;
112
113
  receiver kind cannot be changed in place.
113
114
  - Concrete `[NeoScript]`/`[NeoFunction]` methods are C# 11 partial
@@ -126,19 +127,19 @@ public enum ItemType
126
127
  Food,
127
128
  }
128
129
 
129
- [NeoType("type-inventory-item", AllowedStorage = NeoAllowedStorage.Immutable)]
130
+ [NeoSchemaClass("class-inventory-item", AllowedStorage = NeoAllowedStorage.Immutable)]
130
131
  [NeoSchemaOrder(nameof(Name), nameof(Type), nameof(Tags), nameof(UsePrimary))]
131
132
  public abstract partial class InventoryItem<
132
133
  [NeoId("generic-stack")] TStack>
133
134
  where TStack : class
134
135
  {
135
- [NeoMember("attribute-name"), NeoText(SearchKey = true)]
136
+ [NeoMember("member-name"), NeoText(SearchKey = true)]
136
137
  public virtual string Name { get; init; } = "";
137
138
 
138
- [NeoMember("attribute-type")]
139
+ [NeoMember("member-type")]
139
140
  public abstract ItemType Type { get; init; }
140
141
 
141
- [NeoMember("attribute-tags"), NeoList(Kind = NeoListKind.Unordered)]
142
+ [NeoMember("member-tags"), NeoList(Kind = NeoListKind.Unordered)]
142
143
  [NeoEntries(nameof(TagEntries))]
143
144
  public virtual IReadOnlyList<string> Tags { get; init; } = new List<string>();
144
145
 
@@ -158,7 +159,7 @@ public abstract partial class InventoryItem<
158
159
  }
159
160
  ```
160
161
 
161
- Stable IDs are visible in `[NeoType]`, `[NeoInterface]`, `[NeoEnum]`,
162
+ Stable IDs are visible in `[NeoSchemaClass]`, `[NeoInterface]`, `[NeoEnum]`,
162
163
  `[NeoEnumOption]`, `[NeoId]`, and `[NeoMember]`. Omit a nullable positional ID
163
164
  only when creating a record; a successful push assigns it and canonically
164
165
  rewrites the source. Once assigned, preserve it through renames.
@@ -195,7 +196,7 @@ rules, automatic transitions, and system restrictions. Keep the order in
195
196
  ## NeoScript sidecars
196
197
 
197
198
  Scripted member bodies live at exactly
198
- `Scripts/<DeclaringType>/<Member>.neo`.
199
+ `Scripts/<DeclaringClass>/<Member>.neo`.
199
200
 
200
201
  A computed property uses one complete contextual file. The outer signature
201
202
  matches the linked C# declaration's semantic result (`Task<T>` functions use
@@ -233,7 +234,7 @@ diagnostics. A sidecar for an abstract member is also invalid. The stable C#
233
234
  member ID lets canonical renames move the file safely; include C# and sidecar
234
235
  renames in the same reviewed change.
235
236
 
236
- Canonical C# places `// NeoScript: Scripts/<Type>/<Member>.neo` above the
237
+ Canonical C# places `// NeoScript: Scripts/<Class>/<Member>.neo` above the
237
238
  linked declaration. Go-to-definition, references, and rename use the Roslyn
238
239
  source identity plus stable member ID to navigate between C# and `.neo`.
239
240
 
@@ -248,8 +249,8 @@ setters, Functions, and migrations; the resolved target's Immutable, Save,
248
249
  Session, or runtime ownership—not the body kind—decides whether the write is
249
250
  legal. The non-code Condition builder remains a restricted read form.
250
251
 
251
- Concrete, closed, writable Custom types expose the same public constructor
252
- shape as generated C#. Use `new Type(required, optional, ...)`; required
252
+ Concrete, closed, writable classes expose the same public constructor
253
+ shape as generated C#. Use `new ClassName(required, optional, ...)`; required
253
254
  parameters come first, optional parameters follow in generated-code order,
254
255
  and `null` skips an optional positional slot. Arguments remain positional;
255
256
  editor parameter-name hints are previews, not named-argument syntax.
@@ -257,17 +258,17 @@ Constructor graphs begin as parentless Session values. They survive only when
257
258
  attached, returned, or otherwise escaped from the invocation; abandoned
258
259
  graphs are reclaimed.
259
260
 
260
- Static members use a type receiver (`GameRules.EncounterCount`), while
261
+ Static members use a class receiver (`GameRules.EncounterCount`), while
261
262
  instance members use a value receiver. Stored static members resolve through
262
- their authored/Save/Session binding layer and are never copied into Custom
263
+ their authored/Save/Session binding layer and are never copied into class
263
264
  instances.
264
265
 
265
266
  ```sh
266
267
  neo script check --all
267
268
  neo script check --this Outpost --returns string 'return $"{this.Name}!";'
268
- neo script check --mode setter --attribute ComputedName 'root.Session.Name = value;'
269
- neo script check --mode nsfunction --attribute Outpost.RefreshUnlock 'return this.Level > 0;'
270
- neo script compile --mode nsfunction --attribute Outpost.RefreshUnlock 'return this.Level > 0;'
269
+ neo script check --mode setter --member ComputedName 'root.Session.Name = value;'
270
+ neo script check --mode nsfunction --member Outpost.RefreshUnlock 'return this.Level > 0;'
271
+ neo script compile --mode nsfunction --member Outpost.RefreshUnlock 'return this.Level > 0;'
271
272
  neo script eval --returns string 'return root.Assets.Outposts[0].FullDisplayText;'
272
273
  neo script eval --function Outpost.RefreshUnlock --this-value <id> --args '[3]'
273
274
  neo script apply --mode action '...'
@@ -300,12 +301,12 @@ schema source files:
300
301
  ```sh
301
302
  neo records query [--kind <recordKind>]
302
303
  neo records get <kind> <id>
303
- neo values list [attributeId]
304
+ neo values list [memberId]
304
305
  neo values get <valueId>
305
306
  neo values set <valueId> '<raw-json-value>'
306
- neo values bind <staticAttributeId> <valueId>
307
- neo values unbind <staticAttributeId>
308
- neo values create '<raw-json-value>' [--type <customTypeId>] --bind <staticAttributeId>
307
+ neo values bind <staticMemberId> <valueId>
308
+ neo values unbind <staticMemberId>
309
+ neo values create '<raw-json-value>' [--class <classId>] --bind <staticMemberId>
309
310
  neo loc locales
310
311
  neo loc list
311
312
  neo loc set <textId> <locale> "text"
@@ -315,8 +316,8 @@ Write verbs accept a JSON-array batch on stdin or `--file`; use one batch when
315
316
  edits must be atomic. A `values set` payload is the raw value, not
316
317
  `{"value": ...}`. `values bind` and `unbind` edit only a stored static
317
318
  member's authored binding; `create --bind` can atomically create and bind a
318
- complete Custom/collection graph supplied as one batch. For collection rows
319
- use `values add-entry` on the live container value; an attribute's default
319
+ complete class/collection graph supplied as one batch. For collection rows
320
+ use `values add-entry` on the live container value; a member's default
320
321
  container ID may not be an instance's container.
321
322
 
322
323
  ### Dialogue authoring
@@ -343,7 +344,7 @@ neo branch switch <nameOrId>
343
344
  neo merge <branch> [--dry-run] [--migrate]
344
345
  neo release cut [--bump major|minor|patch] [--dry-run]
345
346
 
346
- neo migrate new <name> --target <Type>
347
+ neo migrate new <name> --target <Class>
347
348
  neo migrate list
348
349
  neo migrate check
349
350
  neo migrate run [--dry-run] [--skip-invalid]
@@ -365,7 +366,7 @@ to an environment adapter.
365
366
 
366
367
  Monaco's existing highlighting, comments/interpolation, bracket behavior,
367
368
  protected scaffolds, context-aware completion/hover, and accurate diagnostics
368
- are a release-blocking compatibility floor. V2 adds recovery completion,
369
+ are a release-blocking compatibility floor. The shared service includes recovery completion,
369
370
  signature help, C# and script definitions, references, rename, document
370
371
  symbols, semantic tokens, quick fixes, formatting, richer diagnostics,
371
372
  contextual ranking, and incremental analysis. Project updates must refresh
@@ -380,9 +381,11 @@ marketplace publication is separate.
380
381
 
381
382
  - The Node CLI talks directly to Convex through typed `api.*` calls and uses
382
383
  the same session-gated CAS commit path as the web app.
383
- - `SchemaManifestV2` is the only C# source/document boundary. The contract
384
- registry classifies authored, derived, and volatile fields; derived server
385
- fields come from the pulled base and absent/null equivalents normalize.
384
+ - `SchemaManifestV3` is the only C# source/document boundary. It uses `classes`,
385
+ `members`, `"class"`, `"member"`, `classId`, `memberId`, and `MemberKind`.
386
+ The contract registry classifies authored, derived, and volatile fields;
387
+ derived server fields come from the pulled base and absent/null equivalents
388
+ normalize.
386
389
  - The npm package bundles the Roslyn app, dependencies, SDK, analyzer, and
387
390
  generator under `dist/tooling`; it does not bundle a runtime.
388
391
  - The schema compiler does static analysis only. Never execute an authored