@githolon/dsl 0.3.0 → 0.5.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.
Files changed (34) hide show
  1. package/package.json +2 -1
  2. package/src/build_package.ts +4 -0
  3. package/src/capability_exports.ts +55 -0
  4. package/src/codegen_dart.ts +9 -0
  5. package/src/codegen_proof.ts +72 -11
  6. package/src/compile_package_main.ts +262 -17
  7. package/src/directive.ts +35 -10
  8. package/src/engine_entry.ts +5 -1
  9. package/src/framework/capability.ts +215 -0
  10. package/src/framework/impure_capability.ts +25 -3
  11. package/src/framework/workspaces.ts +129 -0
  12. package/src/index.ts +9 -0
  13. package/src/manifest.ts +114 -2
  14. package/src/read.ts +29 -0
  15. package/src/stable_ids.ts +226 -0
  16. package/src/stable_ids_types.ts +40 -0
  17. package/src/usd.ts +54 -0
  18. package/src/usd_layers.ts +65 -1
  19. package/src/wire_encode.ts +15 -0
  20. package/src/workspace_sharding.ts +123 -18
  21. package/src/workspace_type.ts +7 -5
  22. package/dart/.dart_tool/package_config.json +0 -328
  23. package/dart/.dart_tool/package_graph.json +0 -485
  24. package/dart/.dart_tool/pub/bin/test/test.dart-3.11.5.snapshot +0 -0
  25. package/dart/.dart_tool/test/incremental_kernel.Ly9AZGFydD0zLjU= +0 -0
  26. package/dart/.dart_tool/version +0 -1
  27. package/dart/build/native_assets/macos/native_assets.json +0 -1
  28. package/dart/build/test_cache/build/89a6598c8854ed031dfc25d83c80860e.cache.dill.track.dill +0 -0
  29. package/dart/build/unit_test_assets/AssetManifest.bin +0 -0
  30. package/dart/build/unit_test_assets/FontManifest.json +0 -1
  31. package/dart/build/unit_test_assets/NOTICES.Z +0 -0
  32. package/dart/build/unit_test_assets/NativeAssetsManifest.json +0 -1
  33. package/dart/build/unit_test_assets/shaders/ink_sparkle.frag +0 -0
  34. package/dart/build/unit_test_assets/shaders/stretch_effect.frag +0 -0
@@ -75,6 +75,7 @@ import { directive } from "./directive.js";
75
75
  import { set, strike, withMarker, type PlannedOp } from "./ops.js";
76
76
  import { query } from "./query.js";
77
77
  import { sum } from "./sum.js";
78
+ import { min, max } from "./extremum.js";
78
79
  import { refAs, workspaceInvariant } from "./framework/workspace_invariant.js";
79
80
 
80
81
  /** One packed axis the factory derives a placement lane for. */
@@ -291,7 +292,15 @@ export const canonicalSealFrontiers = (
291
292
  * the ABSOLUTE per-(shard, read, group) value, true at the shard commit `frontier`,
292
293
  * folded as plain Lww after the gate recomputed it from carried evidence. `bucket`
293
294
  * (= `readId group`) is the maintained estate-total's group key; `kind` records
294
- * what the value tallies (`count` | `sum` | `rows` — the load policy reads `rows`).
295
+ * what the value tallies (`count` | `sum` | `rows` — the load policy reads `rows`
296
+ * and, SLICE 8, `min` | `max`: the shard's maintained extremum at the frontier).
297
+ *
298
+ * `empty` (slice 8, EXTREMUM kinds only): `1` = the shard's group has NO
299
+ * contributing member — an empty group has no extremum and `0` is a legitimate
300
+ * extremum value (the `extremum.ts` null law), so emptiness is a FLAG, never a
301
+ * sentinel value. The maintained estate extremums below exclude `empty:1` rows;
302
+ * additive kinds never set the field (their rows fold byte-identically to before
303
+ * it existed).
295
304
  */
296
305
  export const NomosSummarySubtotal = aggregate("NomosSummarySubtotal", {
297
306
  readId: t.string().merge(Lww),
@@ -301,6 +310,7 @@ export const NomosSummarySubtotal = aggregate("NomosSummarySubtotal", {
301
310
  bucket: t.string().merge(Lww),
302
311
  value: t.int().merge(Lww),
303
312
  frontier: t.string().merge(Lww),
313
+ empty: t.int().merge(Lww).optional(),
304
314
  });
305
315
 
306
316
  /** THE PER-SHARD DELTA FRONTIER watermark (§5.2 step 1 — contiguity law-state). */
@@ -608,16 +618,34 @@ export const nomosCheckpointSeal = directive("nomosCheckpointSeal")
608
618
  const summarySubtotalSchema = z.object({
609
619
  readId: z.string().min(1),
610
620
  group: z.string(), // "" = the grand-total group
611
- kind: z.enum(["count", "sum", "rows"]),
612
- prev: z.number().int(), // the CLAIMED previous absolute (gate-verified against held)
613
- value: z.number().int(), // the CLAIMED new absolute (plan-verified against prev + Σ deltas)
621
+ // SLICE 8: `min`/`max` join the lane. Their `prev`/`value` are NULLABLE — null =
622
+ // "no contributing member" (the extremum.ts empty-group law; 0 is a legitimate
623
+ // extremum). The PLAN refuses a null on any additive kind (typed) — nullability
624
+ // is the extremum kinds' vocabulary, never a loosening of counts/sums/rows.
625
+ kind: z.enum(["count", "sum", "rows", "min", "max"]),
626
+ prev: z.number().int().nullable(), // the CLAIMED previous absolute (gate-verified against held)
627
+ value: z.number().int().nullable(), // the CLAIMED new absolute (plan-verified against prev + carried evidence)
628
+ /**
629
+ * THE DECLARED RETRACTION (slice 8, extremum kinds only): the covered range
630
+ * RETRACTED the extremum (a contributing row left/worsened — the non-monotone
631
+ * case), so `value` is the shard's SUFFIX RE-DERIVATION (its maintained
632
+ * projection extremum at `toOid`), not an extremize over `prev` + candidates.
633
+ * The plan REFUSES an undeclared non-monotone chain (a silent retraction can
634
+ * never fold); a declared one folds as a frontier-pinned, deep-verifiable
635
+ * fact — exactly the trust-chain posture of the strike-bearing close (§5.5).
636
+ */
637
+ rederived: z.boolean().optional(),
614
638
  });
615
639
 
616
640
  const summaryEventSchema = z.object({
617
641
  oid: z.string().min(1), // the shard commit (content address — deep-verify resolves it)
618
642
  intentId: z.string(),
643
+ // Additive kinds: `delta` is the increment. EXTREMUM kinds (slice 8): `delta`
644
+ // is the POST-INTENT ABSOLUTE extremum of the bucket (null = the group emptied)
645
+ // — the evidence chain the plan walks for monotonicity. Null on an additive
646
+ // kind refuses in the plan (typed).
619
647
  deltas: z
620
- .array(z.object({ readId: z.string().min(1), group: z.string(), delta: z.number().int() }))
648
+ .array(z.object({ readId: z.string().min(1), group: z.string(), delta: z.number().int().nullable() }))
621
649
  .max(64),
622
650
  });
623
651
 
@@ -636,19 +664,34 @@ export const nomosPropagateSummary = directive("nomosPropagateSummary")
636
664
  )
637
665
  .plan((p) => {
638
666
  // ── THE GATE RECOMPUTATION, arithmetic half (ruling 4 — day one, in the law) ──
639
- // Pure over the payload: every claimed absolute must equal the claimed previous
640
- // plus the carried events' deltas, and every carried delta must land in a claimed
641
- // subtotal (no hidden effects). The held-state half fromOid == the recorded
642
- // frontier, claimed prev == the held subtotal is the `nomosSummaryGate`
643
- // invariant's `pre:` reads. Together: held + carried evidence claimed, or refuse.
667
+ // Pure over the payload. ADDITIVE kinds (count/sum/rows): every claimed absolute
668
+ // must equal the claimed previous plus the carried events' deltas. EXTREMUM
669
+ // kinds (slice 8 — min/max): the carried events are POST-INTENT ABSOLUTES; the
670
+ // plan walks the chain prev e1 en and verifies EXTREMIZE-ON-MONOTONE
671
+ // (every step only ever improves the extremum, and the final step IS the
672
+ // claim); a NON-MONOTONE step (a retraction — the extremum's row left or
673
+ // worsened) folds ONLY when the subtotal DECLARES it (`rederived: true`, the
674
+ // shard's suffix re-derivation) — silent retraction is a typed refusal, and a
675
+ // declared one stays deep-verifiable (mount the shard, recount, byte-compare).
676
+ // Every carried delta must land in a claimed subtotal (no hidden effects). The
677
+ // held-state half — fromOid == the recorded frontier, claimed prev == the held
678
+ // subtotal — is the `nomosSummaryGate` invariant's `pre:` reads. Together:
679
+ // held + carried evidence ⇒ claimed, or refuse.
644
680
  if (p.fromOid === p.toOid) {
645
681
  throw new Error(`summary-empty: fromOid and toOid are both '${p.toOid}' — an empty range propagates nothing`);
646
682
  }
647
- const claimed = new Map<string, { prev: number; value: number; sum: number }>();
683
+ const isExtremum = (kind: string) => kind === "min" || kind === "max";
684
+ const claimed = new Map<
685
+ string,
686
+ { kind: string; prev: number | null; value: number | null; sum: number; running: number | null; touched: boolean; nonMonotone: boolean }
687
+ >();
648
688
  for (const s of p.subtotals) {
649
689
  const key = summaryBucket(s.readId, s.group);
650
690
  if (claimed.has(key)) throw new Error(`summary-duplicate: subtotal (${s.readId}, '${s.group}') claimed twice`);
651
- claimed.set(key, { prev: s.prev, value: s.value, sum: 0 });
691
+ if (!isExtremum(s.kind) && (s.prev === null || s.value === null)) {
692
+ throw new Error(`summary-null:${s.readId}: a '${s.kind}' subtotal carries null — null is the extremum kinds' empty-group vocabulary, never an additive value`);
693
+ }
694
+ claimed.set(key, { kind: s.kind, prev: s.prev, value: s.value, sum: 0, running: s.prev, touched: false, nonMonotone: false });
652
695
  }
653
696
  for (const ev of p.events) {
654
697
  for (const d of ev.deltas) {
@@ -659,15 +702,43 @@ export const nomosPropagateSummary = directive("nomosPropagateSummary")
659
702
  `but no subtotal claims that group — every touched group must carry its absolute`,
660
703
  );
661
704
  }
662
- c.sum += d.delta;
705
+ if (isExtremum(c.kind)) {
706
+ // The carried value is the post-intent ABSOLUTE; monotone = it only improves.
707
+ const v = d.delta;
708
+ const improves =
709
+ v !== null && (c.running === null || (c.kind === "min" ? v <= c.running : v >= c.running));
710
+ if (!improves && !(v === null && c.running === null)) c.nonMonotone = true;
711
+ c.running = v;
712
+ c.touched = true;
713
+ } else {
714
+ if (d.delta === null) {
715
+ throw new Error(`summary-null:${d.readId}: a '${c.kind}' event delta is null — only extremum kinds carry the empty-group null`);
716
+ }
717
+ c.sum += d.delta;
718
+ }
663
719
  }
664
720
  }
665
721
  for (const s of p.subtotals) {
666
722
  const c = claimed.get(summaryBucket(s.readId, s.group))!;
667
- if (s.prev + c.sum !== s.value) {
723
+ if (isExtremum(s.kind)) {
724
+ const final = c.touched ? c.running : c.prev;
725
+ if (final !== s.value) {
726
+ throw new Error(
727
+ `summary-mismatch: (${s.readId}, '${s.group}') claims ${s.value === null ? "null" : s.value} but the ` +
728
+ `carried evidence chain ends at ${final === null ? "null" : final} — the evidence does not reproduce the claim`,
729
+ );
730
+ }
731
+ if (c.nonMonotone && s.rederived !== true) {
732
+ throw new Error(
733
+ `extremum-retraction:${s.readId}:${s.group}: the covered range retracts the ${s.kind} (a non-monotone ` +
734
+ `step) — a silent retraction never folds. Re-derive the absolute from the shard's projection and ` +
735
+ `declare it (rederived: true); deep-verify remains the recourse`,
736
+ );
737
+ }
738
+ } else if ((s.prev as number) + c.sum !== s.value) {
668
739
  throw new Error(
669
740
  `summary-mismatch: (${s.readId}, '${s.group}') claims ${s.value} but prev ${s.prev} + ` +
670
- `carried deltas ${c.sum} = ${s.prev + c.sum} — the evidence does not reproduce the claim`,
741
+ `carried deltas ${c.sum} = ${(s.prev as number) + c.sum} — the evidence does not reproduce the claim`,
671
742
  );
672
743
  }
673
744
  }
@@ -680,8 +751,11 @@ export const nomosPropagateSummary = directive("nomosPropagateSummary")
680
751
  set(row, "shard", p.shard),
681
752
  set(row, "kind", s.kind),
682
753
  set(row, "bucket", summaryBucket(s.readId, s.group)),
683
- set(row, "value", s.value),
754
+ set(row, "value", s.value ?? 0),
684
755
  set(row, "frontier", p.toOid),
756
+ // EXTREMUM kinds carry the emptiness FLAG (0 is a legitimate extremum);
757
+ // additive rows never set the field — byte-identical to the slice-3 shape.
758
+ ...(isExtremum(s.kind) ? [set(row, "empty", s.value === null ? 1 : 0)] : []),
685
759
  );
686
760
  }
687
761
  const wm = instance(NomosSummaryFrontier, summaryFrontierRowId(p.shard));
@@ -900,6 +974,23 @@ export function shardingLawModule(spec: ShardingLawSpec): Record<string, unknown
900
974
  // rows, grouped by `bucket` = readId group — O(1) by #31. A scoped read's
901
975
  // estate value = the coordinator's local tally + this sum at its bucket.
902
976
  nomosEstateSummary: sum("nomosEstateSummary", "value").of(NomosSummarySubtotal).by("bucket"),
977
+ // THE ESTATE EXTREMUMS (§5.2, slice 8): ORDINARY maintained min/max over the
978
+ // SAME committed subtotal rows, by bucket — extremums over disjoint shards
979
+ // compose by extremizing per-shard extremums, so the estate value is O(1) off
980
+ // the projection's long-maintained extrema lane (the #47 RPC reads it). Rows
981
+ // flagged `empty:1` (a shard whose group has no contributing member) are
982
+ // EXCLUDED — an empty group has no extremum, and 0 is a legitimate value.
983
+ // Buckets partition by readId, so additive rows never pollute an extremum
984
+ // read's bucket. A scoped min/max's estate value = extremize(the
985
+ // coordinator's local extremum, this read at its bucket).
986
+ nomosEstateExtremumMin: min("nomosEstateExtremumMin", "value")
987
+ .of(NomosSummarySubtotal)
988
+ .where((p) => p.field("empty").ne(1))
989
+ .by("bucket"),
990
+ nomosEstateExtremumMax: max("nomosEstateExtremumMax", "value")
991
+ .of(NomosSummarySubtotal)
992
+ .where((p) => p.field("empty").ne(1))
993
+ .by("bucket"),
903
994
  };
904
995
 
905
996
  // ── §5.2 step 1+2 — THE SUMMARY GATE (held state versus the claims, via `pre:`) ──
@@ -931,10 +1022,24 @@ export function shardingLawModule(spec: ShardingLawSpec): Record<string, unknown
931
1022
  if (fromOid !== heldFrontier) {
932
1023
  return { reject: `frontier-gap:${heldFrontier === "" ? "genesis" : heldFrontier}` };
933
1024
  }
934
- const subtotals = Array.isArray(intent["subtotals"]) ? (intent["subtotals"] as { readId?: unknown; group?: unknown; prev?: unknown }[]) : [];
1025
+ const subtotals = Array.isArray(intent["subtotals"]) ? (intent["subtotals"] as { readId?: unknown; group?: unknown; prev?: unknown; kind?: unknown }[]) : [];
935
1026
  for (let i = 0; i < subtotals.length; i++) {
936
1027
  const s = subtotals[i]!;
937
- const heldRaw = snapshots[`prev${i}`]?.["value"];
1028
+ const heldRow = snapshots[`prev${i}`] ?? {};
1029
+ const heldRaw = heldRow["value"];
1030
+ if (s.kind === "min" || s.kind === "max") {
1031
+ // EXTREMUM kinds (slice 8): the held prev is NULL when no row exists yet
1032
+ // OR the held row is flagged empty — null is vocabulary, never 0.
1033
+ const heldValue: number | null =
1034
+ typeof heldRaw !== "number" || heldRow["empty"] === 1 ? null : heldRaw;
1035
+ const claimedPrev = s.prev === null ? null : typeof s.prev === "number" ? s.prev : NaN;
1036
+ if (claimedPrev !== heldValue) {
1037
+ return {
1038
+ reject: `summary-mismatch:${String(s.readId)}:held:${heldValue === null ? "null" : heldValue}:claimedPrev:${String(s.prev)}`,
1039
+ };
1040
+ }
1041
+ continue;
1042
+ }
938
1043
  const heldValue = typeof heldRaw === "number" ? heldRaw : 0;
939
1044
  const claimedPrev = typeof s.prev === "number" ? s.prev : NaN;
940
1045
  if (claimedPrev !== heldValue) {
@@ -561,10 +561,12 @@ export function validateWorkspaceTaxonomy(mod: {
561
561
  // ── estate-scope reads (sharding §2/§5 — slice 3) ─────────────────────────────────
562
562
 
563
563
  /**
564
- * Lift a declared `count(...)`/`sum(...)` read to ESTATE SCOPE (sharding §5): the
565
- * read's per-shard values ride the §5.2 delta lane as gate-recomputed committed
566
- * subtotals on the coordinator, and the logical workspace answers it O(1) from the
567
- * maintained estate total never a scatter-gather.
564
+ * Lift a declared `count(...)`/`sum(...)`/`min(...)`/`max(...)` read to ESTATE
565
+ * SCOPE (sharding §5): the read's per-shard values ride the §5.2 delta lane as
566
+ * gate-recomputed committed subtotals on the coordinator, and the logical
567
+ * workspace answers it O(1) from the maintained estate total (counts/sums sum;
568
+ * extremums extremize over per-shard subtotal rows — slice 8) — never a
569
+ * scatter-gather.
568
570
  *
569
571
  * export const fxSiteCount = scoped(count("fxSiteCount").of(Site), EstateWs);
570
572
  *
@@ -596,7 +598,7 @@ export function scoped<T extends { readonly id: string; readonly of: string }>(
596
598
  const r = read as { id?: unknown; of?: unknown; _where?: unknown };
597
599
  if (typeof r.id !== "string" || typeof r.of !== "string") {
598
600
  throw new Error(
599
- `scoped(read, scope): the read must be a count/sum with .of(...) declared (a named, maintained read)`,
601
+ `scoped(read, scope): the read must be a count/sum/min/max with .of(...) declared (a named, maintained read)`,
600
602
  );
601
603
  }
602
604
  if ((r.id as string).includes("|")) {
@@ -1,328 +0,0 @@
1
- {
2
- "configVersion": 2,
3
- "packages": [
4
- {
5
- "name": "_fe_analyzer_shared",
6
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/_fe_analyzer_shared-100.0.0",
7
- "packageUri": "lib/",
8
- "languageVersion": "3.11"
9
- },
10
- {
11
- "name": "analyzer",
12
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/analyzer-13.0.0",
13
- "packageUri": "lib/",
14
- "languageVersion": "3.9"
15
- },
16
- {
17
- "name": "args",
18
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/args-2.7.0",
19
- "packageUri": "lib/",
20
- "languageVersion": "3.3"
21
- },
22
- {
23
- "name": "async",
24
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/async-2.13.1",
25
- "packageUri": "lib/",
26
- "languageVersion": "3.4"
27
- },
28
- {
29
- "name": "boolean_selector",
30
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/boolean_selector-2.1.2",
31
- "packageUri": "lib/",
32
- "languageVersion": "3.1"
33
- },
34
- {
35
- "name": "cli_config",
36
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/cli_config-0.2.0",
37
- "packageUri": "lib/",
38
- "languageVersion": "3.0"
39
- },
40
- {
41
- "name": "collection",
42
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/collection-1.19.1",
43
- "packageUri": "lib/",
44
- "languageVersion": "3.4"
45
- },
46
- {
47
- "name": "convert",
48
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/convert-3.1.2",
49
- "packageUri": "lib/",
50
- "languageVersion": "3.4"
51
- },
52
- {
53
- "name": "coverage",
54
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/coverage-1.15.0",
55
- "packageUri": "lib/",
56
- "languageVersion": "3.4"
57
- },
58
- {
59
- "name": "crypto",
60
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/crypto-3.0.7",
61
- "packageUri": "lib/",
62
- "languageVersion": "3.4"
63
- },
64
- {
65
- "name": "file",
66
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/file-7.0.1",
67
- "packageUri": "lib/",
68
- "languageVersion": "3.0"
69
- },
70
- {
71
- "name": "frontend_server_client",
72
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/frontend_server_client-4.0.0",
73
- "packageUri": "lib/",
74
- "languageVersion": "3.0"
75
- },
76
- {
77
- "name": "glob",
78
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/glob-2.1.3",
79
- "packageUri": "lib/",
80
- "languageVersion": "3.3"
81
- },
82
- {
83
- "name": "http",
84
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/http-1.6.0",
85
- "packageUri": "lib/",
86
- "languageVersion": "3.4"
87
- },
88
- {
89
- "name": "http_multi_server",
90
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/http_multi_server-3.2.2",
91
- "packageUri": "lib/",
92
- "languageVersion": "3.2"
93
- },
94
- {
95
- "name": "http_parser",
96
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/http_parser-4.1.2",
97
- "packageUri": "lib/",
98
- "languageVersion": "3.4"
99
- },
100
- {
101
- "name": "io",
102
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/io-1.0.5",
103
- "packageUri": "lib/",
104
- "languageVersion": "3.4"
105
- },
106
- {
107
- "name": "json_schema",
108
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/json_schema-5.2.2",
109
- "packageUri": "lib/",
110
- "languageVersion": "2.12"
111
- },
112
- {
113
- "name": "logging",
114
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/logging-1.3.0",
115
- "packageUri": "lib/",
116
- "languageVersion": "3.4"
117
- },
118
- {
119
- "name": "matcher",
120
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/matcher-0.12.20",
121
- "packageUri": "lib/",
122
- "languageVersion": "3.10"
123
- },
124
- {
125
- "name": "meta",
126
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/meta-1.18.2",
127
- "packageUri": "lib/",
128
- "languageVersion": "3.5"
129
- },
130
- {
131
- "name": "mime",
132
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/mime-2.0.0",
133
- "packageUri": "lib/",
134
- "languageVersion": "3.2"
135
- },
136
- {
137
- "name": "node_preamble",
138
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/node_preamble-2.0.2",
139
- "packageUri": "lib/",
140
- "languageVersion": "2.12"
141
- },
142
- {
143
- "name": "package_config",
144
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/package_config-2.2.0",
145
- "packageUri": "lib/",
146
- "languageVersion": "3.4"
147
- },
148
- {
149
- "name": "path",
150
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/path-1.9.1",
151
- "packageUri": "lib/",
152
- "languageVersion": "3.4"
153
- },
154
- {
155
- "name": "pool",
156
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/pool-1.5.2",
157
- "packageUri": "lib/",
158
- "languageVersion": "3.4"
159
- },
160
- {
161
- "name": "pub_semver",
162
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/pub_semver-2.2.0",
163
- "packageUri": "lib/",
164
- "languageVersion": "3.4"
165
- },
166
- {
167
- "name": "quiver",
168
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/quiver-3.2.2",
169
- "packageUri": "lib/",
170
- "languageVersion": "2.17"
171
- },
172
- {
173
- "name": "rfc_6901",
174
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/rfc_6901-0.2.1",
175
- "packageUri": "lib/",
176
- "languageVersion": "3.0"
177
- },
178
- {
179
- "name": "shelf",
180
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/shelf-1.4.2",
181
- "packageUri": "lib/",
182
- "languageVersion": "3.4"
183
- },
184
- {
185
- "name": "shelf_packages_handler",
186
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/shelf_packages_handler-3.0.2",
187
- "packageUri": "lib/",
188
- "languageVersion": "2.17"
189
- },
190
- {
191
- "name": "shelf_static",
192
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/shelf_static-1.1.3",
193
- "packageUri": "lib/",
194
- "languageVersion": "3.3"
195
- },
196
- {
197
- "name": "shelf_web_socket",
198
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/shelf_web_socket-3.0.0",
199
- "packageUri": "lib/",
200
- "languageVersion": "3.5"
201
- },
202
- {
203
- "name": "source_map_stack_trace",
204
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/source_map_stack_trace-2.1.2",
205
- "packageUri": "lib/",
206
- "languageVersion": "3.3"
207
- },
208
- {
209
- "name": "source_maps",
210
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/source_maps-0.10.13",
211
- "packageUri": "lib/",
212
- "languageVersion": "3.3"
213
- },
214
- {
215
- "name": "source_span",
216
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/source_span-1.10.2",
217
- "packageUri": "lib/",
218
- "languageVersion": "3.1"
219
- },
220
- {
221
- "name": "stack_trace",
222
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/stack_trace-1.12.1",
223
- "packageUri": "lib/",
224
- "languageVersion": "3.4"
225
- },
226
- {
227
- "name": "stream_channel",
228
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/stream_channel-2.1.4",
229
- "packageUri": "lib/",
230
- "languageVersion": "3.3"
231
- },
232
- {
233
- "name": "string_scanner",
234
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/string_scanner-1.4.1",
235
- "packageUri": "lib/",
236
- "languageVersion": "3.1"
237
- },
238
- {
239
- "name": "term_glyph",
240
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/term_glyph-1.2.2",
241
- "packageUri": "lib/",
242
- "languageVersion": "3.1"
243
- },
244
- {
245
- "name": "test",
246
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/test-1.31.1",
247
- "packageUri": "lib/",
248
- "languageVersion": "3.10"
249
- },
250
- {
251
- "name": "test_api",
252
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/test_api-0.7.12",
253
- "packageUri": "lib/",
254
- "languageVersion": "3.10"
255
- },
256
- {
257
- "name": "test_core",
258
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/test_core-0.6.18",
259
- "packageUri": "lib/",
260
- "languageVersion": "3.10"
261
- },
262
- {
263
- "name": "typed_data",
264
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/typed_data-1.4.0",
265
- "packageUri": "lib/",
266
- "languageVersion": "3.5"
267
- },
268
- {
269
- "name": "uri",
270
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/uri-1.0.0",
271
- "packageUri": "lib/",
272
- "languageVersion": "2.12"
273
- },
274
- {
275
- "name": "vm_service",
276
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/vm_service-15.2.0",
277
- "packageUri": "lib/",
278
- "languageVersion": "3.5"
279
- },
280
- {
281
- "name": "watcher",
282
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/watcher-1.2.1",
283
- "packageUri": "lib/",
284
- "languageVersion": "3.4"
285
- },
286
- {
287
- "name": "web",
288
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/web-1.1.1",
289
- "packageUri": "lib/",
290
- "languageVersion": "3.4"
291
- },
292
- {
293
- "name": "web_socket",
294
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/web_socket-1.0.1",
295
- "packageUri": "lib/",
296
- "languageVersion": "3.4"
297
- },
298
- {
299
- "name": "web_socket_channel",
300
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/web_socket_channel-3.0.3",
301
- "packageUri": "lib/",
302
- "languageVersion": "3.3"
303
- },
304
- {
305
- "name": "webkit_inspection_protocol",
306
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/webkit_inspection_protocol-1.2.1",
307
- "packageUri": "lib/",
308
- "languageVersion": "3.0"
309
- },
310
- {
311
- "name": "yaml",
312
- "rootUri": "file:///Users/jack/.pub-cache/hosted/pub.dev/yaml-3.1.3",
313
- "packageUri": "lib/",
314
- "languageVersion": "3.4"
315
- },
316
- {
317
- "name": "nomos_dsl",
318
- "rootUri": "../",
319
- "packageUri": "lib/",
320
- "languageVersion": "3.5"
321
- }
322
- ],
323
- "generator": "pub",
324
- "generatorVersion": "3.11.5",
325
- "flutterRoot": "file:///opt/homebrew/share/flutter",
326
- "flutterVersion": "3.41.9",
327
- "pubCache": "file:///Users/jack/.pub-cache"
328
- }