@neocompose/cli 0.57.2 → 0.57.3

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,11 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.57.3] - 2026-09-24
4
+
5
+ - 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."
6
+ - 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."
7
+ - `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."
8
+
3
9
  ## [0.57.2] - 2026-09-23
4
10
 
5
11
  - 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
@@ -72067,7 +72067,9 @@ function evaluateNSGetterWithEffects(getter, ctx, argumentValues = [], options =
72067
72067
  const writes = runtimeCtx.__executionState?.writes ?? requestedWrites;
72068
72068
  const creationCheckpoint = sessionCreationCheckpoint(runtimeCtx);
72069
72069
  const scope = createTopLevelScope(runtimeCtx);
72070
- const parameters = getter.parameters.slice(2);
72070
+ const parameters = getter.parameters.slice(
72071
+ getter.parameters[2]?.id === DIALOGUE_CONTEXT_PARAMETER_ID ? 3 : 2
72072
+ );
72071
72073
  if (parameters.length !== argumentValues.length) {
72072
72074
  throw new NSGetterRuntimeError(
72073
72075
  `NeoScript getter expected ${parameters.length} argument(s), got ${argumentValues.length}.`
@@ -72942,7 +72944,7 @@ function createTopLevelScope(ctx) {
72942
72944
  scope.setLocal("__this__", ctx.thisValue);
72943
72945
  scope.setLocal("__root__", ctx.rootValue);
72944
72946
  scope.setLocal(
72945
- "__context__",
72947
+ DIALOGUE_CONTEXT_PARAMETER_ID,
72946
72948
  ctx.dialogueContext ?? {
72947
72949
  primary: null,
72948
72950
  trigger: null
@@ -81208,7 +81210,7 @@ function collectionEntryUsesReferenceResolution(collection, key, ctx) {
81208
81210
  );
81209
81211
  return referenceIndexes === void 0 || referenceIndexes.has(key);
81210
81212
  }
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;
81213
+ 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
81214
  var init_evaluateNSGetter = __esm({
81213
81215
  "../src/runtime/neoscript/evaluateNSGetter.ts"() {
81214
81216
  "use strict";
@@ -81377,6 +81379,7 @@ var init_evaluateNSGetter = __esm({
81377
81379
  };
81378
81380
  READONLY_FOREACH_BINDING_ERROR = "Cannot assign to a read-only foreach iterator binding.";
81379
81381
  READONLY_CATCH_BINDING_ERROR = "Cannot assign to a read-only catch message binding.";
81382
+ DIALOGUE_CONTEXT_PARAMETER_ID = "__context__";
81380
81383
  NS_MATH_OP_NAMES = {
81381
81384
  min: "Min",
81382
81385
  max: "Max",
@@ -117187,12 +117190,13 @@ function materializedInitializerReconciliationFailuresV4(args) {
117187
117190
  const replay = replayRows.get(reconciliation.valueId);
117188
117191
  const replayArgs = replay !== void 0 && isLiteralValueContent(replay) ? replay.constructorArgs : void 0;
117189
117192
  const currentRoot = currentRows.get(reconciliation.valueId);
117193
+ const [storedArgs, replayedArgs] = isObjectRecord2(replayArgs) ? withoutSharedArguments(reconciliation.storedConstructorArgs, replayArgs) : [reconciliation.storedConstructorArgs, replayArgs];
117190
117194
  const currentNormalized = currentRoot === void 0 ? void 0 : currentReader.normalizeConstructorArguments(
117191
- reconciliation.storedConstructorArgs,
117195
+ storedArgs,
117192
117196
  currentRoot,
117193
117197
  owner
117194
117198
  );
117195
- const replayNormalized = replay === void 0 || !isObjectRecord2(replayArgs) ? void 0 : currentReader.withRowOverrides(replayRows).normalizeConstructorArguments(replayArgs, replay, owner);
117199
+ const replayNormalized = replay === void 0 || !isObjectRecord2(replayedArgs) ? void 0 : currentReader.withRowOverrides(replayRows).normalizeConstructorArguments(replayedArgs, replay, owner);
117196
117200
  const argumentsMatch = isObjectRecord2(replayArgs) && currentRoot !== void 0 && replay !== void 0 && effectiveValuesEqual(currentNormalized, replayNormalized);
117197
117201
  if (argumentsMatch) {
117198
117202
  continue;
@@ -117213,6 +117217,16 @@ function materializedInitializerReconciliationFailuresV4(args) {
117213
117217
  }
117214
117218
  return failures;
117215
117219
  }
117220
+ function withoutSharedArguments(stored, replayed) {
117221
+ const storedRest = { ...stored };
117222
+ const replayedRest = { ...replayed };
117223
+ for (const [slot, value] of Object.entries(stored)) {
117224
+ if (typeof value !== "string" || replayed[slot] !== value) continue;
117225
+ delete storedRest[slot];
117226
+ delete replayedRest[slot];
117227
+ }
117228
+ return [storedRest, replayedRest];
117229
+ }
117216
117230
  function reconciliationRecords(workspace, changes, seeds = /* @__PURE__ */ new Map()) {
117217
117231
  return prospectiveInitializerRecordsV4({
117218
117232
  workspace,
@@ -127418,7 +127432,13 @@ function storedConstructorArgumentSource(context, type, value, environment, visi
127418
127432
  );
127419
127433
  }
127420
127434
  if (cloneAggregateArguments) {
127421
- return storedAggregateCloneSource(context, type, value, environment);
127435
+ return storedAggregateReplaySource(
127436
+ context,
127437
+ type,
127438
+ value,
127439
+ environment,
127440
+ constructorOwnsGraph
127441
+ );
127422
127442
  }
127423
127443
  return storedTypedRowSource(
127424
127444
  context,
@@ -127661,14 +127681,18 @@ function requiredGenericBindingMemberId(environment, genericParamId) {
127661
127681
  }
127662
127682
  return bindingId;
127663
127683
  }
127664
- function storedAggregateCloneSource(context, type, valueId, environment) {
127684
+ function storedAggregateReplaySource(context, type, valueId, environment, constructorOwnsGraph) {
127665
127685
  if (!context.values.has(valueId)) {
127666
127686
  throw new Error(
127667
127687
  `Stored ${type.kind} constructor argument references missing value row ${valueId}.`
127668
127688
  );
127669
127689
  }
127670
127690
  const typeName = storedSchemaTypeName(context, type, environment, valueId);
127671
- return `Reference<${typeName}>(id: ${quote5(valueId)}).Clone()`;
127691
+ const reference2 = `Reference<${typeName}>(id: ${quote5(valueId)})`;
127692
+ return isSharedConstructorArgument(context, valueId, constructorOwnsGraph) ? reference2 : `${reference2}.Clone()`;
127693
+ }
127694
+ function isSharedConstructorArgument(context, valueId, constructorOwnsGraph) {
127695
+ return !constructorOwnsGraph && context.readMaterializedGraph().independentlyOwnedValueIds.has(valueId);
127672
127696
  }
127673
127697
  function storedSchemaTypeName(context, type, environment, valueId) {
127674
127698
  switch (type.kind) {
@@ -127758,7 +127782,7 @@ function storedTypedRowSource(context, type, valueId, environment, visited, writ
127758
127782
  `Stored ${type.kind} constructor argument references missing value row ${valueId}.`
127759
127783
  );
127760
127784
  }
127761
- if (!constructorOwnsGraph && context.readMaterializedGraph().independentlyOwnedValueIds.has(valueId)) {
127785
+ if (isSharedConstructorArgument(context, valueId, constructorOwnsGraph)) {
127762
127786
  return `Reference<${storedSchemaTypeName(context, type, environment, valueId)}>(id: ${quote5(valueId)})`;
127763
127787
  }
127764
127788
  if (context.activeStoredConstructorArguments.has(valueId)) {
@@ -140421,7 +140445,7 @@ var init_registry2 = __esm({
140421
140445
  "schema-contract/registry.mjs"() {
140422
140446
  "use strict";
140423
140447
  PROJECT_SCHEMA_CONTRACT = Object.freeze({
140424
- cliVersion: "0.57.2",
140448
+ cliVersion: "0.57.3",
140425
140449
  projectFileUploadBatchSize: 32,
140426
140450
  documentRecords: {
140427
140451
  member: {
@@ -148242,7 +148266,7 @@ There is no --keep-current: preserving current semantic state defines flatten.
148242
148266
  async function main() {
148243
148267
  const args = parseArgs(process.argv.slice(2));
148244
148268
  if (args.command === "--version") {
148245
- console.log("0.57.2");
148269
+ console.log("0.57.3");
148246
148270
  return;
148247
148271
  }
148248
148272
  if (args.command === null || args.command === "help" || args.command === "--help" || args.command === "-h") {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neocompose/cli",
3
- "version": "0.57.2",
3
+ "version": "0.57.3",
4
4
  "description": "Neo Compose native project-source CLI with bidirectional sync.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -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.57.2 -->
12
+ <!-- reviewed-through-cli: 0.57.3 -->
13
13
 
14
14
  # Neo Compose CLI
15
15
 
@@ -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.57.2 -->
100
+ <!-- reviewed-through-cli: 0.57.3 -->
101
101
  ```
102
102
 
103
103
  The quoted version above is checked too, so this instruction cannot go stale