@git-stunts/git-warp 10.1.2 → 10.4.2

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 (106) hide show
  1. package/README.md +31 -4
  2. package/bin/warp-graph.js +1242 -59
  3. package/index.d.ts +31 -0
  4. package/index.js +4 -0
  5. package/package.json +13 -3
  6. package/src/domain/WarpGraph.js +487 -140
  7. package/src/domain/crdt/LWW.js +1 -1
  8. package/src/domain/crdt/ORSet.js +10 -6
  9. package/src/domain/crdt/VersionVector.js +5 -1
  10. package/src/domain/errors/EmptyMessageError.js +2 -4
  11. package/src/domain/errors/ForkError.js +4 -0
  12. package/src/domain/errors/IndexError.js +4 -0
  13. package/src/domain/errors/OperationAbortedError.js +4 -0
  14. package/src/domain/errors/QueryError.js +4 -0
  15. package/src/domain/errors/SchemaUnsupportedError.js +4 -0
  16. package/src/domain/errors/ShardCorruptionError.js +2 -6
  17. package/src/domain/errors/ShardLoadError.js +2 -6
  18. package/src/domain/errors/ShardValidationError.js +2 -7
  19. package/src/domain/errors/StorageError.js +2 -6
  20. package/src/domain/errors/SyncError.js +4 -0
  21. package/src/domain/errors/TraversalError.js +4 -0
  22. package/src/domain/errors/WarpError.js +2 -4
  23. package/src/domain/errors/WormholeError.js +4 -0
  24. package/src/domain/services/AnchorMessageCodec.js +1 -4
  25. package/src/domain/services/BitmapIndexBuilder.js +10 -6
  26. package/src/domain/services/BitmapIndexReader.js +27 -21
  27. package/src/domain/services/BoundaryTransitionRecord.js +22 -15
  28. package/src/domain/services/CheckpointMessageCodec.js +1 -7
  29. package/src/domain/services/CheckpointSerializerV5.js +20 -19
  30. package/src/domain/services/CheckpointService.js +18 -18
  31. package/src/domain/services/CommitDagTraversalService.js +13 -1
  32. package/src/domain/services/DagPathFinding.js +40 -18
  33. package/src/domain/services/DagTopology.js +7 -6
  34. package/src/domain/services/DagTraversal.js +5 -3
  35. package/src/domain/services/Frontier.js +7 -6
  36. package/src/domain/services/HealthCheckService.js +15 -14
  37. package/src/domain/services/HookInstaller.js +64 -13
  38. package/src/domain/services/HttpSyncServer.js +15 -14
  39. package/src/domain/services/IndexRebuildService.js +12 -12
  40. package/src/domain/services/IndexStalenessChecker.js +13 -6
  41. package/src/domain/services/JoinReducer.js +28 -27
  42. package/src/domain/services/LogicalTraversal.js +7 -6
  43. package/src/domain/services/MessageCodecInternal.js +2 -0
  44. package/src/domain/services/ObserverView.js +6 -6
  45. package/src/domain/services/PatchBuilderV2.js +9 -9
  46. package/src/domain/services/PatchMessageCodec.js +1 -7
  47. package/src/domain/services/ProvenanceIndex.js +6 -8
  48. package/src/domain/services/ProvenancePayload.js +1 -2
  49. package/src/domain/services/QueryBuilder.js +29 -23
  50. package/src/domain/services/StateDiff.js +7 -7
  51. package/src/domain/services/StateSerializerV5.js +8 -6
  52. package/src/domain/services/StreamingBitmapIndexBuilder.js +29 -23
  53. package/src/domain/services/SyncProtocol.js +23 -26
  54. package/src/domain/services/TemporalQuery.js +4 -3
  55. package/src/domain/services/TranslationCost.js +4 -4
  56. package/src/domain/services/WormholeService.js +19 -15
  57. package/src/domain/types/TickReceipt.js +10 -6
  58. package/src/domain/types/WarpTypesV2.js +2 -3
  59. package/src/domain/utils/CachedValue.js +1 -1
  60. package/src/domain/utils/LRUCache.js +3 -3
  61. package/src/domain/utils/MinHeap.js +2 -2
  62. package/src/domain/utils/RefLayout.js +106 -15
  63. package/src/domain/utils/WriterId.js +2 -2
  64. package/src/domain/utils/defaultCodec.js +9 -2
  65. package/src/domain/utils/defaultCrypto.js +36 -0
  66. package/src/domain/utils/parseCursorBlob.js +51 -0
  67. package/src/domain/utils/roaring.js +5 -5
  68. package/src/domain/utils/seekCacheKey.js +32 -0
  69. package/src/domain/warp/PatchSession.js +3 -3
  70. package/src/domain/warp/Writer.js +2 -2
  71. package/src/infrastructure/adapters/BunHttpAdapter.js +21 -8
  72. package/src/infrastructure/adapters/CasSeekCacheAdapter.js +311 -0
  73. package/src/infrastructure/adapters/ClockAdapter.js +2 -2
  74. package/src/infrastructure/adapters/DenoHttpAdapter.js +22 -9
  75. package/src/infrastructure/adapters/GitGraphAdapter.js +16 -27
  76. package/src/infrastructure/adapters/NodeCryptoAdapter.js +16 -3
  77. package/src/infrastructure/adapters/NodeHttpAdapter.js +33 -11
  78. package/src/infrastructure/adapters/WebCryptoAdapter.js +21 -11
  79. package/src/infrastructure/codecs/CborCodec.js +16 -8
  80. package/src/ports/BlobPort.js +2 -2
  81. package/src/ports/CodecPort.js +2 -2
  82. package/src/ports/CommitPort.js +8 -21
  83. package/src/ports/ConfigPort.js +3 -3
  84. package/src/ports/CryptoPort.js +7 -7
  85. package/src/ports/GraphPersistencePort.js +12 -14
  86. package/src/ports/HttpServerPort.js +1 -5
  87. package/src/ports/IndexStoragePort.js +1 -0
  88. package/src/ports/LoggerPort.js +9 -9
  89. package/src/ports/RefPort.js +5 -5
  90. package/src/ports/SeekCachePort.js +73 -0
  91. package/src/ports/TreePort.js +3 -3
  92. package/src/visualization/layouts/converters.js +14 -7
  93. package/src/visualization/layouts/elkAdapter.js +24 -11
  94. package/src/visualization/layouts/elkLayout.js +23 -7
  95. package/src/visualization/layouts/index.js +3 -3
  96. package/src/visualization/renderers/ascii/check.js +30 -17
  97. package/src/visualization/renderers/ascii/graph.js +122 -16
  98. package/src/visualization/renderers/ascii/history.js +29 -90
  99. package/src/visualization/renderers/ascii/index.js +1 -1
  100. package/src/visualization/renderers/ascii/info.js +9 -7
  101. package/src/visualization/renderers/ascii/materialize.js +20 -16
  102. package/src/visualization/renderers/ascii/opSummary.js +81 -0
  103. package/src/visualization/renderers/ascii/path.js +1 -1
  104. package/src/visualization/renderers/ascii/seek.js +344 -0
  105. package/src/visualization/renderers/ascii/table.js +1 -1
  106. package/src/visualization/renderers/svg/index.js +5 -1
package/index.d.ts CHANGED
@@ -475,6 +475,30 @@ export class GlobalClockAdapter extends ClockPort {
475
475
  timestamp(): string;
476
476
  }
477
477
 
478
+ /**
479
+ * Port interface for seek materialization cache operations.
480
+ *
481
+ * Implementations store serialized WarpStateV5 snapshots keyed by
482
+ * (ceiling, frontier) tuples for near-instant restoration of
483
+ * previously-visited ticks during seek exploration.
484
+ *
485
+ * @abstract
486
+ */
487
+ export abstract class SeekCachePort {
488
+ /** Retrieves a cached state buffer by key, or null on miss. */
489
+ abstract get(key: string): Promise<Buffer | null>;
490
+ /** Stores a state buffer under the given key. */
491
+ abstract set(key: string, buffer: Buffer): Promise<void>;
492
+ /** Checks whether a key exists in the cache index. */
493
+ abstract has(key: string): Promise<boolean>;
494
+ /** Lists all keys currently in the cache index. */
495
+ abstract keys(): Promise<string[]>;
496
+ /** Removes a single entry from the cache. */
497
+ abstract delete(key: string): Promise<boolean>;
498
+ /** Removes all entries from the cache. */
499
+ abstract clear(): Promise<void>;
500
+ }
501
+
478
502
  /**
479
503
  * Port interface for structured logging operations.
480
504
  * @abstract
@@ -1450,6 +1474,7 @@ export default class WarpGraph {
1450
1474
  clock?: ClockPort;
1451
1475
  crypto?: CryptoPort;
1452
1476
  codec?: unknown;
1477
+ seekCache?: SeekCachePort;
1453
1478
  }): Promise<WarpGraph>;
1454
1479
 
1455
1480
  /**
@@ -1462,6 +1487,12 @@ export default class WarpGraph {
1462
1487
  */
1463
1488
  readonly writerId: string;
1464
1489
 
1490
+ /** Returns the attached seek cache, or null if none is set. */
1491
+ readonly seekCache: SeekCachePort | null;
1492
+
1493
+ /** Attaches (or detaches, with null) a persistent seek cache. */
1494
+ setSeekCache(cache: SeekCachePort | null): void;
1495
+
1465
1496
  /**
1466
1497
  * Creates a new patch for adding operations.
1467
1498
  */
package/index.js CHANGED
@@ -32,6 +32,7 @@ import GraphPersistencePort from './src/ports/GraphPersistencePort.js';
32
32
  import IndexStoragePort from './src/ports/IndexStoragePort.js';
33
33
  import LoggerPort from './src/ports/LoggerPort.js';
34
34
  import ClockPort from './src/ports/ClockPort.js';
35
+ import SeekCachePort from './src/ports/SeekCachePort.js';
35
36
  import NoOpLogger from './src/infrastructure/adapters/NoOpLogger.js';
36
37
  import ConsoleLogger, { LogLevel } from './src/infrastructure/adapters/ConsoleLogger.js';
37
38
  import ClockAdapter from './src/infrastructure/adapters/ClockAdapter.js';
@@ -125,6 +126,9 @@ export {
125
126
 
126
127
  // Clock infrastructure
127
128
  ClockPort,
129
+
130
+ // Seek cache (RECALL)
131
+ SeekCachePort,
128
132
  ClockAdapter,
129
133
  PerformanceClockAdapter,
130
134
  GlobalClockAdapter,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@git-stunts/git-warp",
3
- "version": "10.1.2",
3
+ "version": "10.4.2",
4
4
  "description": "Deterministic WARP graph over Git: graph-native storage, traversal, and tooling.",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -14,7 +14,7 @@
14
14
  "url": "https://github.com/git-stunts/git-warp/issues"
15
15
  },
16
16
  "engines": {
17
- "node": ">=20.0.0"
17
+ "node": ">=22.0.0"
18
18
  },
19
19
  "sideEffects": false,
20
20
  "main": "./index.js",
@@ -79,10 +79,20 @@
79
79
  "prepare": "patch-package && node scripts/setup-hooks.js",
80
80
  "prepack": "npm run lint && npm run test:local",
81
81
  "install:git-warp": "bash scripts/install-git-warp.sh",
82
- "uninstall:git-warp": "bash scripts/uninstall-git-warp.sh"
82
+ "uninstall:git-warp": "bash scripts/uninstall-git-warp.sh",
83
+ "test:node20": "docker compose -f docker-compose.test.yml --profile node20 run --build --rm test-node20",
84
+ "test:node22": "docker compose -f docker-compose.test.yml --profile node22 run --build --rm test-node22",
85
+ "test:bun": "docker compose -f docker-compose.test.yml --profile bun run --build --rm test-bun",
86
+ "test:deno": "docker compose -f docker-compose.test.yml --profile deno run --build --rm test-deno",
87
+ "test:matrix": "docker compose -f docker-compose.test.yml --profile full up --build --abort-on-container-exit",
88
+ "typecheck": "tsc --noEmit",
89
+ "typecheck:src": "tsc --noEmit -p tsconfig.src.json",
90
+ "typecheck:test": "tsc --noEmit -p tsconfig.test.json",
91
+ "typecheck:policy": "node scripts/ts-policy-check.js"
83
92
  },
84
93
  "dependencies": {
85
94
  "@git-stunts/alfred": "^0.4.0",
95
+ "@git-stunts/git-cas": "^3.0.0",
86
96
  "@git-stunts/plumbing": "^2.8.0",
87
97
  "@git-stunts/trailer-codec": "^2.1.1",
88
98
  "boxen": "^7.1.1",