@neocompose/cli 0.57.2 → 0.58.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
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.58.0] - 2026-09-24
|
|
4
|
+
|
|
5
|
+
- **Behavior change:** NeoScript cell queries the CLI evaluates, such as in `neo test`, no longer return an object that has no placement tiles. Before, such an object answered for its origin cell. This matches the Unity SDK (0.43.0) and the web editor: `PlacementTiles` are the cells an object occupies, and without them it occupies none.
|
|
6
|
+
|
|
7
|
+
## [0.57.3] - 2026-09-24
|
|
8
|
+
|
|
9
|
+
- Status, pull, and push no longer copy a shared row passed to a constructor when they check a stored construction. Before, a constructor argument that named a shared row, such as a schedule event's `area`, copied that row's whole graph for every construction. Once an area grid held a few placed characters, this failed with "NeoScript constructed Session row limit of 4096 exceeded."
|
|
10
|
+
- Dry run and push no longer read a shared constructor argument's current graph when they check a stored construction. Before, a push that deleted a variant still placed in that graph, such as a character in the area a schedule event names, failed with "Variant '…' does not exist in this project."
|
|
11
|
+
- `neo dialogue dryrun` evaluates conditions that have the dialogue context in scope. Before, every such condition failed with "NeoScript getter expected 1 argument(s), got 0."
|
|
12
|
+
|
|
3
13
|
## [0.57.2] - 2026-09-23
|
|
4
14
|
|
|
5
15
|
- Removing a variant's last `overrides:` argument deletes its stored override row. Dry run and push accept the edit, including variants whose initializer is an inline delegate.
|
package/dist/neo.mjs
CHANGED
|
@@ -70414,7 +70414,6 @@ function buildIndex(source) {
|
|
|
70414
70414
|
seen.add(key);
|
|
70415
70415
|
}
|
|
70416
70416
|
}
|
|
70417
|
-
if (footprint.length === 0) footprint.push(cell);
|
|
70418
70417
|
const placement = {
|
|
70419
70418
|
valueId,
|
|
70420
70419
|
isNeoObject: kinds.get(row.classId) === NeoWorldSystemClassKind.Object,
|
|
@@ -72067,7 +72066,9 @@ function evaluateNSGetterWithEffects(getter, ctx, argumentValues = [], options =
|
|
|
72067
72066
|
const writes = runtimeCtx.__executionState?.writes ?? requestedWrites;
|
|
72068
72067
|
const creationCheckpoint = sessionCreationCheckpoint(runtimeCtx);
|
|
72069
72068
|
const scope = createTopLevelScope(runtimeCtx);
|
|
72070
|
-
const parameters = getter.parameters.slice(
|
|
72069
|
+
const parameters = getter.parameters.slice(
|
|
72070
|
+
getter.parameters[2]?.id === DIALOGUE_CONTEXT_PARAMETER_ID ? 3 : 2
|
|
72071
|
+
);
|
|
72071
72072
|
if (parameters.length !== argumentValues.length) {
|
|
72072
72073
|
throw new NSGetterRuntimeError(
|
|
72073
72074
|
`NeoScript getter expected ${parameters.length} argument(s), got ${argumentValues.length}.`
|
|
@@ -72942,7 +72943,7 @@ function createTopLevelScope(ctx) {
|
|
|
72942
72943
|
scope.setLocal("__this__", ctx.thisValue);
|
|
72943
72944
|
scope.setLocal("__root__", ctx.rootValue);
|
|
72944
72945
|
scope.setLocal(
|
|
72945
|
-
|
|
72946
|
+
DIALOGUE_CONTEXT_PARAMETER_ID,
|
|
72946
72947
|
ctx.dialogueContext ?? {
|
|
72947
72948
|
primary: null,
|
|
72948
72949
|
trigger: null
|
|
@@ -81208,7 +81209,7 @@ function collectionEntryUsesReferenceResolution(collection, key, ctx) {
|
|
|
81208
81209
|
);
|
|
81209
81210
|
return referenceIndexes === void 0 || referenceIndexes.has(key);
|
|
81210
81211
|
}
|
|
81211
|
-
var DELEGATE_LEXICAL_THIS, DELEGATE_LEXICAL_ROOT, NonCatchableNSGetterRuntimeError, NativeFunctionDelegateUnavailableError, CorruptNeoScriptIRError, NeoScriptResourceLimitError, NeoScriptWallClockTimeoutError, DEFAULT_NEO_SCRIPT_EXECUTION_BUDGET_LIMITS, liveListIndexesByProject, evaluatorOwnershipCachesByBase, MAX_CONSTRUCTION_DEPTH, MAX_LOOP_ITERATIONS, resolutionCacheByMembers, NO_SCHEMA_REVISION, LazyValueOverlay, READONLY_FOREACH_BINDING_ERROR, READONLY_CATCH_BINDING_ERROR, NS_MATH_OP_NAMES, DOUBLE_INTEGRAL_MAGNITUDE, EMPTY_SUPPLIED_CONSTRUCTOR_FIELDS;
|
|
81212
|
+
var DELEGATE_LEXICAL_THIS, DELEGATE_LEXICAL_ROOT, NonCatchableNSGetterRuntimeError, NativeFunctionDelegateUnavailableError, CorruptNeoScriptIRError, NeoScriptResourceLimitError, NeoScriptWallClockTimeoutError, DEFAULT_NEO_SCRIPT_EXECUTION_BUDGET_LIMITS, liveListIndexesByProject, evaluatorOwnershipCachesByBase, MAX_CONSTRUCTION_DEPTH, MAX_LOOP_ITERATIONS, resolutionCacheByMembers, NO_SCHEMA_REVISION, LazyValueOverlay, READONLY_FOREACH_BINDING_ERROR, READONLY_CATCH_BINDING_ERROR, DIALOGUE_CONTEXT_PARAMETER_ID, NS_MATH_OP_NAMES, DOUBLE_INTEGRAL_MAGNITUDE, EMPTY_SUPPLIED_CONSTRUCTOR_FIELDS;
|
|
81212
81213
|
var init_evaluateNSGetter = __esm({
|
|
81213
81214
|
"../src/runtime/neoscript/evaluateNSGetter.ts"() {
|
|
81214
81215
|
"use strict";
|
|
@@ -81377,6 +81378,7 @@ var init_evaluateNSGetter = __esm({
|
|
|
81377
81378
|
};
|
|
81378
81379
|
READONLY_FOREACH_BINDING_ERROR = "Cannot assign to a read-only foreach iterator binding.";
|
|
81379
81380
|
READONLY_CATCH_BINDING_ERROR = "Cannot assign to a read-only catch message binding.";
|
|
81381
|
+
DIALOGUE_CONTEXT_PARAMETER_ID = "__context__";
|
|
81380
81382
|
NS_MATH_OP_NAMES = {
|
|
81381
81383
|
min: "Min",
|
|
81382
81384
|
max: "Max",
|
|
@@ -117187,12 +117189,13 @@ function materializedInitializerReconciliationFailuresV4(args) {
|
|
|
117187
117189
|
const replay = replayRows.get(reconciliation.valueId);
|
|
117188
117190
|
const replayArgs = replay !== void 0 && isLiteralValueContent(replay) ? replay.constructorArgs : void 0;
|
|
117189
117191
|
const currentRoot = currentRows.get(reconciliation.valueId);
|
|
117192
|
+
const [storedArgs, replayedArgs] = isObjectRecord2(replayArgs) ? withoutSharedArguments(reconciliation.storedConstructorArgs, replayArgs) : [reconciliation.storedConstructorArgs, replayArgs];
|
|
117190
117193
|
const currentNormalized = currentRoot === void 0 ? void 0 : currentReader.normalizeConstructorArguments(
|
|
117191
|
-
|
|
117194
|
+
storedArgs,
|
|
117192
117195
|
currentRoot,
|
|
117193
117196
|
owner
|
|
117194
117197
|
);
|
|
117195
|
-
const replayNormalized = replay === void 0 || !isObjectRecord2(
|
|
117198
|
+
const replayNormalized = replay === void 0 || !isObjectRecord2(replayedArgs) ? void 0 : currentReader.withRowOverrides(replayRows).normalizeConstructorArguments(replayedArgs, replay, owner);
|
|
117196
117199
|
const argumentsMatch = isObjectRecord2(replayArgs) && currentRoot !== void 0 && replay !== void 0 && effectiveValuesEqual(currentNormalized, replayNormalized);
|
|
117197
117200
|
if (argumentsMatch) {
|
|
117198
117201
|
continue;
|
|
@@ -117213,6 +117216,16 @@ function materializedInitializerReconciliationFailuresV4(args) {
|
|
|
117213
117216
|
}
|
|
117214
117217
|
return failures;
|
|
117215
117218
|
}
|
|
117219
|
+
function withoutSharedArguments(stored, replayed) {
|
|
117220
|
+
const storedRest = { ...stored };
|
|
117221
|
+
const replayedRest = { ...replayed };
|
|
117222
|
+
for (const [slot, value] of Object.entries(stored)) {
|
|
117223
|
+
if (typeof value !== "string" || replayed[slot] !== value) continue;
|
|
117224
|
+
delete storedRest[slot];
|
|
117225
|
+
delete replayedRest[slot];
|
|
117226
|
+
}
|
|
117227
|
+
return [storedRest, replayedRest];
|
|
117228
|
+
}
|
|
117216
117229
|
function reconciliationRecords(workspace, changes, seeds = /* @__PURE__ */ new Map()) {
|
|
117217
117230
|
return prospectiveInitializerRecordsV4({
|
|
117218
117231
|
workspace,
|
|
@@ -127418,7 +127431,13 @@ function storedConstructorArgumentSource(context, type, value, environment, visi
|
|
|
127418
127431
|
);
|
|
127419
127432
|
}
|
|
127420
127433
|
if (cloneAggregateArguments) {
|
|
127421
|
-
return
|
|
127434
|
+
return storedAggregateReplaySource(
|
|
127435
|
+
context,
|
|
127436
|
+
type,
|
|
127437
|
+
value,
|
|
127438
|
+
environment,
|
|
127439
|
+
constructorOwnsGraph
|
|
127440
|
+
);
|
|
127422
127441
|
}
|
|
127423
127442
|
return storedTypedRowSource(
|
|
127424
127443
|
context,
|
|
@@ -127661,14 +127680,18 @@ function requiredGenericBindingMemberId(environment, genericParamId) {
|
|
|
127661
127680
|
}
|
|
127662
127681
|
return bindingId;
|
|
127663
127682
|
}
|
|
127664
|
-
function
|
|
127683
|
+
function storedAggregateReplaySource(context, type, valueId, environment, constructorOwnsGraph) {
|
|
127665
127684
|
if (!context.values.has(valueId)) {
|
|
127666
127685
|
throw new Error(
|
|
127667
127686
|
`Stored ${type.kind} constructor argument references missing value row ${valueId}.`
|
|
127668
127687
|
);
|
|
127669
127688
|
}
|
|
127670
127689
|
const typeName = storedSchemaTypeName(context, type, environment, valueId);
|
|
127671
|
-
|
|
127690
|
+
const reference2 = `Reference<${typeName}>(id: ${quote5(valueId)})`;
|
|
127691
|
+
return isSharedConstructorArgument(context, valueId, constructorOwnsGraph) ? reference2 : `${reference2}.Clone()`;
|
|
127692
|
+
}
|
|
127693
|
+
function isSharedConstructorArgument(context, valueId, constructorOwnsGraph) {
|
|
127694
|
+
return !constructorOwnsGraph && context.readMaterializedGraph().independentlyOwnedValueIds.has(valueId);
|
|
127672
127695
|
}
|
|
127673
127696
|
function storedSchemaTypeName(context, type, environment, valueId) {
|
|
127674
127697
|
switch (type.kind) {
|
|
@@ -127758,7 +127781,7 @@ function storedTypedRowSource(context, type, valueId, environment, visited, writ
|
|
|
127758
127781
|
`Stored ${type.kind} constructor argument references missing value row ${valueId}.`
|
|
127759
127782
|
);
|
|
127760
127783
|
}
|
|
127761
|
-
if (
|
|
127784
|
+
if (isSharedConstructorArgument(context, valueId, constructorOwnsGraph)) {
|
|
127762
127785
|
return `Reference<${storedSchemaTypeName(context, type, environment, valueId)}>(id: ${quote5(valueId)})`;
|
|
127763
127786
|
}
|
|
127764
127787
|
if (context.activeStoredConstructorArguments.has(valueId)) {
|
|
@@ -140421,7 +140444,7 @@ var init_registry2 = __esm({
|
|
|
140421
140444
|
"schema-contract/registry.mjs"() {
|
|
140422
140445
|
"use strict";
|
|
140423
140446
|
PROJECT_SCHEMA_CONTRACT = Object.freeze({
|
|
140424
|
-
cliVersion: "0.
|
|
140447
|
+
cliVersion: "0.58.0",
|
|
140425
140448
|
projectFileUploadBatchSize: 32,
|
|
140426
140449
|
documentRecords: {
|
|
140427
140450
|
member: {
|
|
@@ -148242,7 +148265,7 @@ There is no --keep-current: preserving current semantic state defines flatten.
|
|
|
148242
148265
|
async function main() {
|
|
148243
148266
|
const args = parseArgs(process.argv.slice(2));
|
|
148244
148267
|
if (args.command === "--version") {
|
|
148245
|
-
console.log("0.
|
|
148268
|
+
console.log("0.58.0");
|
|
148246
148269
|
return;
|
|
148247
148270
|
}
|
|
148248
148271
|
if (args.command === null || args.command === "help" || args.command === "--help" || args.command === "-h") {
|
package/package.json
CHANGED
|
@@ -71,7 +71,9 @@ initializer cannot assign them. `Cell` is the placement's writable field.
|
|
|
71
71
|
|
|
72
72
|
Object `PlacementTiles` is a `List<NeoPlacementTile>`. Each entry marks a
|
|
73
73
|
footprint cell with its own `Cell` member. It is independent of `NeoTile`. Rendered
|
|
74
|
-
tile classes do not belong in this list.
|
|
74
|
+
tile classes do not belong in this list. An object with no placement tiles
|
|
75
|
+
occupies no cells. It doesn't block other placements, and cell queries don't
|
|
76
|
+
return it.
|
|
75
77
|
|
|
76
78
|
Convert a writable placement without changing its row identity or cell:
|
|
77
79
|
|
|
@@ -97,7 +97,7 @@ wrappers.
|
|
|
97
97
|
The marker near the top of `SKILL.md` must exactly match the package version:
|
|
98
98
|
|
|
99
99
|
```html
|
|
100
|
-
<!-- reviewed-through-cli: 0.
|
|
100
|
+
<!-- reviewed-through-cli: 0.58.0 -->
|
|
101
101
|
```
|
|
102
102
|
|
|
103
103
|
The quoted version above is checked too, so this instruction cannot go stale
|