@nebutra/time-machine 0.1.3 → 0.1.5

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,16 @@
1
1
  # @nebutra/time-machine
2
2
 
3
+ ## 0.1.5
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies []:
8
+ - @nebutra/capability-kit@2.0.0
9
+ - @nebutra/errors@2.0.0
10
+ - @nebutra/event-log@2.0.0
11
+ - @nebutra/content-store@0.1.5
12
+ - @nebutra/generation-context@0.1.4
13
+
3
14
  ## 0.1.3
4
15
 
5
16
  ### Patch Changes
package/package.json CHANGED
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "name": "@nebutra/time-machine",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
4
  "description": "Chronos product surface for timeline browsing, branching, comparison, and rollback previews",
5
5
  "private": false,
6
6
  "license": "MIT",
7
7
  "type": "module",
8
8
  "nebutra": {
9
+ "graph": "labs",
9
10
  "status": "wip",
10
11
  "productionReady": false,
11
12
  "surface": "ecosystem-product",
@@ -23,17 +24,21 @@
23
24
  "category": "ai",
24
25
  "summary": "Founder-facing view over event-log history without owning event truth"
25
26
  },
26
- "main": "./src/index.ts",
27
- "types": "./src/index.ts",
27
+ "main": "./dist/index.js",
28
+ "types": "./dist/index.d.ts",
28
29
  "exports": {
29
- ".": "./src/index.ts"
30
+ ".": {
31
+ "types": "./dist/index.d.ts",
32
+ "import": "./dist/index.js",
33
+ "default": "./dist/index.js"
34
+ }
30
35
  },
31
36
  "dependencies": {
32
- "@nebutra/capability-kit": "0.2.2",
33
- "@nebutra/content-store": "0.1.2",
34
- "@nebutra/generation-context": "0.1.2",
35
- "@nebutra/errors": "0.1.2",
36
- "@nebutra/event-log": "0.1.2"
37
+ "@nebutra/capability-kit": "2.0.0",
38
+ "@nebutra/content-store": "0.1.5",
39
+ "@nebutra/errors": "2.0.0",
40
+ "@nebutra/event-log": "2.0.0",
41
+ "@nebutra/generation-context": "0.1.4"
37
42
  },
38
43
  "devDependencies": {
39
44
  "@types/node": "^25.9.1",
@@ -54,6 +59,12 @@
54
59
  "publishConfig": {
55
60
  "access": "public"
56
61
  },
62
+ "files": [
63
+ "dist",
64
+ "README.md",
65
+ "LICENSE",
66
+ "CHANGELOG.md"
67
+ ],
57
68
  "scripts": {
58
69
  "build": "tsup",
59
70
  "test": "vitest run",
@@ -1,32 +0,0 @@
1
- {"at":"2026-05-18T15:31:08.510Z","type":"reindex","tenantId":"tenant_a","files":0}
2
- {"at":"2026-05-18T15:31:08.524Z","type":"reindex","tenantId":"tenant_a","files":0}
3
- {"at":"2026-05-18T15:31:08.531Z","type":"write","tenantId":"tenant_a","path":"time-machine/annotations/56b829526ecee961c750baf23f76adf55ac71f8a15dcb21ff812aa59eba9f9b5.json"}
4
- {"at":"2026-05-18T15:31:08.551Z","type":"reindex","tenantId":"tenant_a","files":0}
5
- {"at":"2026-05-18T15:35:24.705Z","type":"reindex","tenantId":"tenant_a","files":0}
6
- {"at":"2026-05-18T15:35:24.729Z","type":"reindex","tenantId":"tenant_a","files":0}
7
- {"at":"2026-05-18T15:35:24.763Z","type":"write","tenantId":"tenant_a","path":"time-machine/annotations/a7ed443bc87570e55ae61af9e83158b8e1ba960608226114ed8b27fdf3bf8a04.json"}
8
- {"at":"2026-05-18T15:35:24.788Z","type":"reindex","tenantId":"tenant_a","files":0}
9
- {"at":"2026-05-18T15:35:58.215Z","type":"reindex","tenantId":"tenant_a","files":0}
10
- {"at":"2026-05-18T15:35:58.233Z","type":"reindex","tenantId":"tenant_a","files":0}
11
- {"at":"2026-05-18T15:35:58.241Z","type":"write","tenantId":"tenant_a","path":"time-machine/annotations/854570ecdd24cbf07767d589d27694585e179e19eadf9d75cb1430be908fc44e.json"}
12
- {"at":"2026-05-18T15:35:58.262Z","type":"reindex","tenantId":"tenant_a","files":0}
13
- {"at":"2026-05-18T15:37:12.985Z","type":"reindex","tenantId":"tenant_a","files":0}
14
- {"at":"2026-05-18T15:37:13.019Z","type":"reindex","tenantId":"tenant_a","files":0}
15
- {"at":"2026-05-18T15:37:13.029Z","type":"write","tenantId":"tenant_a","path":"time-machine/annotations/96f0040078fd0832113b062735011b32220a15829dee0c26759626163eafeaba.json"}
16
- {"at":"2026-05-18T15:37:13.049Z","type":"reindex","tenantId":"tenant_a","files":0}
17
- {"at":"2026-05-19T05:21:56.756Z","type":"reindex","tenantId":"tenant_a","files":0}
18
- {"at":"2026-05-19T05:21:56.779Z","type":"reindex","tenantId":"tenant_a","files":0}
19
- {"at":"2026-05-19T05:21:56.791Z","type":"write","tenantId":"tenant_a","path":"time-machine/annotations/347e5b7ffe247da04be55513bce614c522df8caa5d970d7d69a21647ca40e66b.json"}
20
- {"at":"2026-05-19T05:21:56.814Z","type":"reindex","tenantId":"tenant_a","files":0}
21
- {"at":"2026-05-19T05:25:34.777Z","type":"reindex","tenantId":"tenant_a","files":0}
22
- {"at":"2026-05-19T05:25:34.817Z","type":"reindex","tenantId":"tenant_a","files":0}
23
- {"at":"2026-05-19T05:25:34.826Z","type":"write","tenantId":"tenant_a","path":"time-machine/annotations/ed3b5b745288dbb03cbc0a1943c2de15778b913e263c46faa0482f19d073bcf3.json"}
24
- {"at":"2026-05-19T05:25:34.862Z","type":"reindex","tenantId":"tenant_a","files":0}
25
- {"at":"2026-05-30T21:07:13.810Z","type":"reindex","tenantId":"tenant_a","files":0}
26
- {"at":"2026-05-30T21:07:13.865Z","type":"reindex","tenantId":"tenant_a","files":0}
27
- {"at":"2026-05-30T21:07:13.883Z","type":"write","tenantId":"tenant_a","path":"time-machine/annotations/d6bc729adbb5f2dce5c2df0646ddf09a40d7bb8309630bc78eb0b465c4abcb61.json"}
28
- {"at":"2026-05-30T21:07:13.993Z","type":"reindex","tenantId":"tenant_a","files":0}
29
- {"at":"2026-07-01T01:40:40.699Z","type":"reindex","tenantId":"tenant_a","files":0}
30
- {"at":"2026-07-01T01:40:41.037Z","type":"reindex","tenantId":"tenant_a","files":0}
31
- {"at":"2026-07-01T01:40:41.096Z","type":"write","tenantId":"tenant_a","path":"time-machine/annotations/1da3945259b14194b019682b4768d6071b7b3f2841c3db2b2e5b43bb68ba2369.json"}
32
- {"at":"2026-07-01T01:40:41.350Z","type":"reindex","tenantId":"tenant_a","files":0}
@@ -1,56 +0,0 @@
1
- {"traceId":"brand","kind":"content_write","affected":["company/BRAND.md"],"parent":null,"snapshot":{"company/BRAND.md":"name: Loop\npalette: blue\n"},"id":"fce364573a71a674a68ffa8323533e5b116bc0e6f288758069ee0dcd56500553","tenantId":"tenant_a","at":"2026-05-18T15:31:08.513Z","summary":"content_write touched 1 path(s)","objectHashes":["b343d4492837788b413910202f644e658701e9ea4f6c7bdfd4f9844212975d05"]}
2
- {"traceId":"film","kind":"content_write","affected":["company/film_60s.mp4","company/BRAND.md"],"parent":"fce364573a71a674a68ffa8323533e5b116bc0e6f288758069ee0dcd56500553","snapshot":{"company/BRAND.md":"name: Loop\npalette: purple\n"},"id":"cc1325daeef0b107e48ea3544eeaa17ca21d6e5db97418c3966f63123efa381e","tenantId":"tenant_a","at":"2026-05-18T15:31:08.514Z","summary":"content_write touched 2 path(s)","objectHashes":["b3ce7a30eada9179db405b8b19dadb8eedfd6501c6d262d4436898b539974059"]}
3
- {"traceId":"brand","kind":"content_write","affected":["company/BRAND.md"],"parent":null,"snapshot":{"company/BRAND.md":"name: Loop\npalette: blue\n"},"id":"56b829526ecee961c750baf23f76adf55ac71f8a15dcb21ff812aa59eba9f9b5","tenantId":"tenant_a","at":"2026-05-18T15:31:08.526Z","summary":"content_write touched 1 path(s)","objectHashes":["b343d4492837788b413910202f644e658701e9ea4f6c7bdfd4f9844212975d05"]}
4
- {"traceId":"film","kind":"content_write","affected":["company/film_60s.mp4","company/BRAND.md"],"parent":"56b829526ecee961c750baf23f76adf55ac71f8a15dcb21ff812aa59eba9f9b5","snapshot":{"company/BRAND.md":"name: Loop\npalette: purple\n"},"id":"659096dccbfea71e687d21de27845beff197ff04feeb76ddd9562354c651e850","tenantId":"tenant_a","at":"2026-05-18T15:31:08.528Z","summary":"content_write touched 2 path(s)","objectHashes":["b3ce7a30eada9179db405b8b19dadb8eedfd6501c6d262d4436898b539974059"]}
5
- {"traceId":"time_machine_annotation_56b829526ecee961c750baf23f76adf55ac71f8a_mpbd2xrn","kind":"content_write","affected":["time-machine/annotations/56b829526ecee961c750baf23f76adf55ac71f8a15dcb21ff812aa59eba9f9b5.json"],"parent":"56b829526ecee961c750baf23f76adf55ac71f8a15dcb21ff812aa59eba9f9b5","snapshot":{"time-machine/annotations/56b829526ecee961c750baf23f76adf55ac71f8a15dcb21ff812aa59eba9f9b5.json":"{\n \"eventId\": \"56b829526ecee961c750baf23f76adf55ac71f8a15dcb21ff812aa59eba9f9b5\",\n \"starred\": true,\n \"label\": \"first brand\",\n \"createdAt\": \"2026-05-18T15:31:08.529Z\",\n \"truthSource\": \"event-log\"\n}\n"},"id":"50acf0e077f781aa119dbdf66a06cc81332b1861b8a0d4e801119cb8d7947e8a","tenantId":"tenant_a","at":"2026-05-18T15:31:08.532Z","summary":"content_write touched 1 path(s)","objectHashes":["ed28e769654096257203ef82b4664f541cca2a683b31fb8b7a2aef882e399b27"]}
6
- {"traceId":"brand","kind":"content_write","affected":["company/BRAND.md"],"parent":null,"snapshot":{"company/BRAND.md":"name: Loop\npalette: blue\n"},"id":"f6127086ee3a40829cb3c9855b9ea4ee56ca66c35a2591e098fa61e70d5d3038","tenantId":"tenant_a","at":"2026-05-18T15:31:08.553Z","summary":"content_write touched 1 path(s)","objectHashes":["b343d4492837788b413910202f644e658701e9ea4f6c7bdfd4f9844212975d05"]}
7
- {"traceId":"film","kind":"content_write","affected":["company/film_60s.mp4","company/BRAND.md"],"parent":"f6127086ee3a40829cb3c9855b9ea4ee56ca66c35a2591e098fa61e70d5d3038","snapshot":{"company/BRAND.md":"name: Loop\npalette: purple\n"},"id":"81e49ad46ea472d184d54348ac149a77c2d8967729c6b4226c362cb229e393be","tenantId":"tenant_a","at":"2026-05-18T15:31:08.555Z","summary":"content_write touched 2 path(s)","objectHashes":["b3ce7a30eada9179db405b8b19dadb8eedfd6501c6d262d4436898b539974059"]}
8
- {"traceId":"brand","kind":"content_write","affected":["company/BRAND.md"],"parent":null,"snapshot":{"company/BRAND.md":"name: Loop\npalette: blue\n"},"id":"3feef5b1517d15982020c3c6768bd6149f10e37de7ae5ef2b1462f48450845c2","tenantId":"tenant_a","at":"2026-05-18T15:35:24.709Z","summary":"content_write touched 1 path(s)","objectHashes":["b343d4492837788b413910202f644e658701e9ea4f6c7bdfd4f9844212975d05"]}
9
- {"traceId":"film","kind":"content_write","affected":["company/film_60s.mp4","company/BRAND.md"],"parent":"3feef5b1517d15982020c3c6768bd6149f10e37de7ae5ef2b1462f48450845c2","snapshot":{"company/BRAND.md":"name: Loop\npalette: purple\n"},"id":"f540d407380b1633202e91c7423869c370459ab099e73d80c653a9f0ba600913","tenantId":"tenant_a","at":"2026-05-18T15:35:24.712Z","summary":"content_write touched 2 path(s)","objectHashes":["b3ce7a30eada9179db405b8b19dadb8eedfd6501c6d262d4436898b539974059"]}
10
- {"traceId":"brand","kind":"content_write","affected":["company/BRAND.md"],"parent":null,"snapshot":{"company/BRAND.md":"name: Loop\npalette: blue\n"},"id":"a7ed443bc87570e55ae61af9e83158b8e1ba960608226114ed8b27fdf3bf8a04","tenantId":"tenant_a","at":"2026-05-18T15:35:24.737Z","summary":"content_write touched 1 path(s)","objectHashes":["b343d4492837788b413910202f644e658701e9ea4f6c7bdfd4f9844212975d05"]}
11
- {"traceId":"film","kind":"content_write","affected":["company/film_60s.mp4","company/BRAND.md"],"parent":"a7ed443bc87570e55ae61af9e83158b8e1ba960608226114ed8b27fdf3bf8a04","snapshot":{"company/BRAND.md":"name: Loop\npalette: purple\n"},"id":"1cf81c669180efa7a7dd13e359d463e713195af2d1186181f88b9582d1a8bd34","tenantId":"tenant_a","at":"2026-05-18T15:35:24.740Z","summary":"content_write touched 2 path(s)","objectHashes":["b3ce7a30eada9179db405b8b19dadb8eedfd6501c6d262d4436898b539974059"]}
12
- {"traceId":"time_machine_annotation_a7ed443bc87570e55ae61af9e83158b8e1ba9606_mpbd8fh7","kind":"content_write","affected":["time-machine/annotations/a7ed443bc87570e55ae61af9e83158b8e1ba960608226114ed8b27fdf3bf8a04.json"],"parent":"a7ed443bc87570e55ae61af9e83158b8e1ba960608226114ed8b27fdf3bf8a04","snapshot":{"time-machine/annotations/a7ed443bc87570e55ae61af9e83158b8e1ba960608226114ed8b27fdf3bf8a04.json":"{\n \"eventId\": \"a7ed443bc87570e55ae61af9e83158b8e1ba960608226114ed8b27fdf3bf8a04\",\n \"starred\": true,\n \"label\": \"first brand\",\n \"createdAt\": \"2026-05-18T15:35:24.754Z\",\n \"truthSource\": \"event-log\"\n}\n"},"id":"a1093e48b3858c70c10f8312938b3f2327f8f9e493ea727f748252f63042b757","tenantId":"tenant_a","at":"2026-05-18T15:35:24.764Z","summary":"content_write touched 1 path(s)","objectHashes":["cfcb80a1eea7034ba1903b63f9b8c3c1f161a047f93b1f40636e9f3e9fe696f6"]}
13
- {"traceId":"brand","kind":"content_write","affected":["company/BRAND.md"],"parent":null,"snapshot":{"company/BRAND.md":"name: Loop\npalette: blue\n"},"id":"023bceff4dc6d40b670d5f7ac18c8c3246a8581f429506df328c488b81176aed","tenantId":"tenant_a","at":"2026-05-18T15:35:24.789Z","summary":"content_write touched 1 path(s)","objectHashes":["b343d4492837788b413910202f644e658701e9ea4f6c7bdfd4f9844212975d05"]}
14
- {"traceId":"film","kind":"content_write","affected":["company/film_60s.mp4","company/BRAND.md"],"parent":"023bceff4dc6d40b670d5f7ac18c8c3246a8581f429506df328c488b81176aed","snapshot":{"company/BRAND.md":"name: Loop\npalette: purple\n"},"id":"f22cb998d3eeb371ebf699a03935041e083d05d231ef4f36cfd93550a06d1e8d","tenantId":"tenant_a","at":"2026-05-18T15:35:24.790Z","summary":"content_write touched 2 path(s)","objectHashes":["b3ce7a30eada9179db405b8b19dadb8eedfd6501c6d262d4436898b539974059"]}
15
- {"traceId":"brand","kind":"content_write","affected":["company/BRAND.md"],"parent":null,"snapshot":{"company/BRAND.md":"name: Loop\npalette: blue\n"},"id":"0d450dc863c1fe7368cd3dd2ffc6f1b99f3388a54a29c0e2b3ad2f521e319994","tenantId":"tenant_a","at":"2026-05-18T15:35:58.220Z","summary":"content_write touched 1 path(s)","objectHashes":["b343d4492837788b413910202f644e658701e9ea4f6c7bdfd4f9844212975d05"]}
16
- {"traceId":"film","kind":"content_write","affected":["company/film_60s.mp4","company/BRAND.md"],"parent":"0d450dc863c1fe7368cd3dd2ffc6f1b99f3388a54a29c0e2b3ad2f521e319994","snapshot":{"company/BRAND.md":"name: Loop\npalette: purple\n"},"id":"0b1e44bbfff4cf922c4abe46dd85c3707af63edeacd4e99ff50fbfa4229caefd","tenantId":"tenant_a","at":"2026-05-18T15:35:58.222Z","summary":"content_write touched 2 path(s)","objectHashes":["b3ce7a30eada9179db405b8b19dadb8eedfd6501c6d262d4436898b539974059"]}
17
- {"traceId":"brand","kind":"content_write","affected":["company/BRAND.md"],"parent":null,"snapshot":{"company/BRAND.md":"name: Loop\npalette: blue\n"},"id":"854570ecdd24cbf07767d589d27694585e179e19eadf9d75cb1430be908fc44e","tenantId":"tenant_a","at":"2026-05-18T15:35:58.235Z","summary":"content_write touched 1 path(s)","objectHashes":["b343d4492837788b413910202f644e658701e9ea4f6c7bdfd4f9844212975d05"]}
18
- {"traceId":"film","kind":"content_write","affected":["company/film_60s.mp4","company/BRAND.md"],"parent":"854570ecdd24cbf07767d589d27694585e179e19eadf9d75cb1430be908fc44e","snapshot":{"company/BRAND.md":"name: Loop\npalette: purple\n"},"id":"5cbfa4767904a07fdd6faf823a8ed4befa8de1461d36ed03fa382bfe3abb3bd1","tenantId":"tenant_a","at":"2026-05-18T15:35:58.237Z","summary":"content_write touched 2 path(s)","objectHashes":["b3ce7a30eada9179db405b8b19dadb8eedfd6501c6d262d4436898b539974059"]}
19
- {"traceId":"time_machine_annotation_854570ecdd24cbf07767d589d27694585e179e19_mpbd95b5","kind":"content_write","affected":["time-machine/annotations/854570ecdd24cbf07767d589d27694585e179e19eadf9d75cb1430be908fc44e.json"],"parent":"854570ecdd24cbf07767d589d27694585e179e19eadf9d75cb1430be908fc44e","snapshot":{"time-machine/annotations/854570ecdd24cbf07767d589d27694585e179e19eadf9d75cb1430be908fc44e.json":"{\n \"eventId\": \"854570ecdd24cbf07767d589d27694585e179e19eadf9d75cb1430be908fc44e\",\n \"starred\": true,\n \"label\": \"first brand\",\n \"createdAt\": \"2026-05-18T15:35:58.239Z\",\n \"truthSource\": \"event-log\"\n}\n"},"id":"6ea255745a8499120f4472d672097680b79ed5e06255767fc8f9b795607a1925","tenantId":"tenant_a","at":"2026-05-18T15:35:58.242Z","summary":"content_write touched 1 path(s)","objectHashes":["d32f21f3ba63c5138aaebf908fb09c219187bf32c11f905a900786c55c6143ae"]}
20
- {"traceId":"brand","kind":"content_write","affected":["company/BRAND.md"],"parent":null,"snapshot":{"company/BRAND.md":"name: Loop\npalette: blue\n"},"id":"7e134c35364a65d28b266520ef96ef66ca08cc109059a3abb86c3e56193e5694","tenantId":"tenant_a","at":"2026-05-18T15:35:58.263Z","summary":"content_write touched 1 path(s)","objectHashes":["b343d4492837788b413910202f644e658701e9ea4f6c7bdfd4f9844212975d05"]}
21
- {"traceId":"film","kind":"content_write","affected":["company/film_60s.mp4","company/BRAND.md"],"parent":"7e134c35364a65d28b266520ef96ef66ca08cc109059a3abb86c3e56193e5694","snapshot":{"company/BRAND.md":"name: Loop\npalette: purple\n"},"id":"5b9abf499cd63cbe1cc8044a4158f1c17c37e41335b03fa6f5025c04193f51dd","tenantId":"tenant_a","at":"2026-05-18T15:35:58.265Z","summary":"content_write touched 2 path(s)","objectHashes":["b3ce7a30eada9179db405b8b19dadb8eedfd6501c6d262d4436898b539974059"]}
22
- {"traceId":"brand","kind":"content_write","affected":["company/BRAND.md"],"parent":null,"snapshot":{"company/BRAND.md":"name: Loop\npalette: blue\n"},"id":"5241c1e380f3252f83124ff988731d397655add41aba67a38e6575526eb434d7","tenantId":"tenant_a","at":"2026-05-18T15:37:12.992Z","summary":"content_write touched 1 path(s)","objectHashes":["b343d4492837788b413910202f644e658701e9ea4f6c7bdfd4f9844212975d05"]}
23
- {"traceId":"film","kind":"content_write","affected":["company/film_60s.mp4","company/BRAND.md"],"parent":"5241c1e380f3252f83124ff988731d397655add41aba67a38e6575526eb434d7","snapshot":{"company/BRAND.md":"name: Loop\npalette: purple\n"},"id":"01c102e209211be6ebab90bc6e2ef5a7db0dbb3aa19bb2d19c8749d8265f0f80","tenantId":"tenant_a","at":"2026-05-18T15:37:12.996Z","summary":"content_write touched 2 path(s)","objectHashes":["b3ce7a30eada9179db405b8b19dadb8eedfd6501c6d262d4436898b539974059"]}
24
- {"traceId":"brand","kind":"content_write","affected":["company/BRAND.md"],"parent":null,"snapshot":{"company/BRAND.md":"name: Loop\npalette: blue\n"},"id":"96f0040078fd0832113b062735011b32220a15829dee0c26759626163eafeaba","tenantId":"tenant_a","at":"2026-05-18T15:37:13.021Z","summary":"content_write touched 1 path(s)","objectHashes":["b343d4492837788b413910202f644e658701e9ea4f6c7bdfd4f9844212975d05"]}
25
- {"traceId":"film","kind":"content_write","affected":["company/film_60s.mp4","company/BRAND.md"],"parent":"96f0040078fd0832113b062735011b32220a15829dee0c26759626163eafeaba","snapshot":{"company/BRAND.md":"name: Loop\npalette: purple\n"},"id":"47f3e3ebf3283017e37da8e307f1dee6c63f03d6dbb93d3412ee58c0e2749d99","tenantId":"tenant_a","at":"2026-05-18T15:37:13.024Z","summary":"content_write touched 2 path(s)","objectHashes":["b3ce7a30eada9179db405b8b19dadb8eedfd6501c6d262d4436898b539974059"]}
26
- {"traceId":"time_machine_annotation_96f0040078fd0832113b062735011b32220a1582_mpbdar0m","kind":"content_write","affected":["time-machine/annotations/96f0040078fd0832113b062735011b32220a15829dee0c26759626163eafeaba.json"],"parent":"96f0040078fd0832113b062735011b32220a15829dee0c26759626163eafeaba","snapshot":{"time-machine/annotations/96f0040078fd0832113b062735011b32220a15829dee0c26759626163eafeaba.json":"{\n \"eventId\": \"96f0040078fd0832113b062735011b32220a15829dee0c26759626163eafeaba\",\n \"starred\": true,\n \"label\": \"first brand\",\n \"createdAt\": \"2026-05-18T15:37:13.026Z\",\n \"truthSource\": \"event-log\"\n}\n"},"id":"526c5d7554017ef2cae750ee82463c8956c3859c37f8fed0b483b85910ebce70","tenantId":"tenant_a","at":"2026-05-18T15:37:13.030Z","summary":"content_write touched 1 path(s)","objectHashes":["66d8d038450001605dfcd038d5d71a042a8db5659637271a3ea479c612def398"]}
27
- {"traceId":"brand","kind":"content_write","affected":["company/BRAND.md"],"parent":null,"snapshot":{"company/BRAND.md":"name: Loop\npalette: blue\n"},"id":"4c78d59f1444fc8c803dcc47674d297681ba6f21e615eadc467c17f36d5cb258","tenantId":"tenant_a","at":"2026-05-18T15:37:13.051Z","summary":"content_write touched 1 path(s)","objectHashes":["b343d4492837788b413910202f644e658701e9ea4f6c7bdfd4f9844212975d05"]}
28
- {"traceId":"film","kind":"content_write","affected":["company/film_60s.mp4","company/BRAND.md"],"parent":"4c78d59f1444fc8c803dcc47674d297681ba6f21e615eadc467c17f36d5cb258","snapshot":{"company/BRAND.md":"name: Loop\npalette: purple\n"},"id":"70a0721eabdc2a25bc25708230e48d3eec1d2165bc9b07d5451fbc4e0cd8d4ea","tenantId":"tenant_a","at":"2026-05-18T15:37:13.053Z","summary":"content_write touched 2 path(s)","objectHashes":["b3ce7a30eada9179db405b8b19dadb8eedfd6501c6d262d4436898b539974059"]}
29
- {"traceId":"brand","kind":"content_write","affected":["company/BRAND.md"],"parent":null,"snapshot":{"company/BRAND.md":"name: Loop\npalette: blue\n"},"id":"536170417d3d687a805703c1c9fdf5ee0e0904c0c820012b17f0d23c14e78dfe","tenantId":"tenant_a","at":"2026-05-19T05:21:56.762Z","summary":"content_write touched 1 path(s)","objectHashes":["b343d4492837788b413910202f644e658701e9ea4f6c7bdfd4f9844212975d05"]}
30
- {"traceId":"film","kind":"content_write","affected":["company/film_60s.mp4","company/BRAND.md"],"parent":"536170417d3d687a805703c1c9fdf5ee0e0904c0c820012b17f0d23c14e78dfe","snapshot":{"company/BRAND.md":"name: Loop\npalette: purple\n"},"id":"69960bb2d3494acb74b828034b2951b642c4c8d1c24168dde1e2cf9a223714f0","tenantId":"tenant_a","at":"2026-05-19T05:21:56.764Z","summary":"content_write touched 2 path(s)","objectHashes":["b3ce7a30eada9179db405b8b19dadb8eedfd6501c6d262d4436898b539974059"]}
31
- {"traceId":"brand","kind":"content_write","affected":["company/BRAND.md"],"parent":null,"snapshot":{"company/BRAND.md":"name: Loop\npalette: blue\n"},"id":"347e5b7ffe247da04be55513bce614c522df8caa5d970d7d69a21647ca40e66b","tenantId":"tenant_a","at":"2026-05-19T05:21:56.781Z","summary":"content_write touched 1 path(s)","objectHashes":["b343d4492837788b413910202f644e658701e9ea4f6c7bdfd4f9844212975d05"]}
32
- {"traceId":"film","kind":"content_write","affected":["company/film_60s.mp4","company/BRAND.md"],"parent":"347e5b7ffe247da04be55513bce614c522df8caa5d970d7d69a21647ca40e66b","snapshot":{"company/BRAND.md":"name: Loop\npalette: purple\n"},"id":"bfcd80cf0f7019d9cd536743f99351e0e29799003f8c00c47aaf71b428ca7bfe","tenantId":"tenant_a","at":"2026-05-19T05:21:56.784Z","summary":"content_write touched 2 path(s)","objectHashes":["b3ce7a30eada9179db405b8b19dadb8eedfd6501c6d262d4436898b539974059"]}
33
- {"traceId":"time_machine_annotation_347e5b7ffe247da04be55513bce614c522df8caa_mpc6rcxj","kind":"content_write","affected":["time-machine/annotations/347e5b7ffe247da04be55513bce614c522df8caa5d970d7d69a21647ca40e66b.json"],"parent":"347e5b7ffe247da04be55513bce614c522df8caa5d970d7d69a21647ca40e66b","snapshot":{"time-machine/annotations/347e5b7ffe247da04be55513bce614c522df8caa5d970d7d69a21647ca40e66b.json":"{\n \"eventId\": \"347e5b7ffe247da04be55513bce614c522df8caa5d970d7d69a21647ca40e66b\",\n \"starred\": true,\n \"label\": \"first brand\",\n \"createdAt\": \"2026-05-19T05:21:56.787Z\",\n \"truthSource\": \"event-log\"\n}\n"},"id":"37edffb4306e4c725f9f980f65aa6762311d28d3b3388fbcf1cac9358af8919a","tenantId":"tenant_a","at":"2026-05-19T05:21:56.792Z","summary":"content_write touched 1 path(s)","objectHashes":["b9c83d0d784508ce00cb8e42fdb0d5f3fda199ca6cc6ed34e593c1acc4f01a99"]}
34
- {"traceId":"brand","kind":"content_write","affected":["company/BRAND.md"],"parent":null,"snapshot":{"company/BRAND.md":"name: Loop\npalette: blue\n"},"id":"3c7bb454d259c8c03888a69cd9066429a894969f55fbe7aa21d2f3f6af1c3047","tenantId":"tenant_a","at":"2026-05-19T05:21:56.816Z","summary":"content_write touched 1 path(s)","objectHashes":["b343d4492837788b413910202f644e658701e9ea4f6c7bdfd4f9844212975d05"]}
35
- {"traceId":"film","kind":"content_write","affected":["company/film_60s.mp4","company/BRAND.md"],"parent":"3c7bb454d259c8c03888a69cd9066429a894969f55fbe7aa21d2f3f6af1c3047","snapshot":{"company/BRAND.md":"name: Loop\npalette: purple\n"},"id":"ea9e2124d4a7253dcd94ff176784a41c9bc6d22297967a3ed42a9f058874a325","tenantId":"tenant_a","at":"2026-05-19T05:21:56.817Z","summary":"content_write touched 2 path(s)","objectHashes":["b3ce7a30eada9179db405b8b19dadb8eedfd6501c6d262d4436898b539974059"]}
36
- {"traceId":"brand","kind":"content_write","affected":["company/BRAND.md"],"parent":null,"snapshot":{"company/BRAND.md":"name: Loop\npalette: blue\n"},"id":"b1a87ae2bf495c24851eb1848e2c81c9218d10ced42f6103d3ecae59129aa718","tenantId":"tenant_a","at":"2026-05-19T05:25:34.786Z","summary":"content_write touched 1 path(s)","objectHashes":["b343d4492837788b413910202f644e658701e9ea4f6c7bdfd4f9844212975d05"]}
37
- {"traceId":"film","kind":"content_write","affected":["company/film_60s.mp4","company/BRAND.md"],"parent":"b1a87ae2bf495c24851eb1848e2c81c9218d10ced42f6103d3ecae59129aa718","snapshot":{"company/BRAND.md":"name: Loop\npalette: purple\n"},"id":"318281684960fb7d23eaef88cfb5abe9476d7a5a65865cdc503c5c85151c0edc","tenantId":"tenant_a","at":"2026-05-19T05:25:34.797Z","summary":"content_write touched 2 path(s)","objectHashes":["b3ce7a30eada9179db405b8b19dadb8eedfd6501c6d262d4436898b539974059"]}
38
- {"traceId":"brand","kind":"content_write","affected":["company/BRAND.md"],"parent":null,"snapshot":{"company/BRAND.md":"name: Loop\npalette: blue\n"},"id":"ed3b5b745288dbb03cbc0a1943c2de15778b913e263c46faa0482f19d073bcf3","tenantId":"tenant_a","at":"2026-05-19T05:25:34.818Z","summary":"content_write touched 1 path(s)","objectHashes":["b343d4492837788b413910202f644e658701e9ea4f6c7bdfd4f9844212975d05"]}
39
- {"traceId":"film","kind":"content_write","affected":["company/film_60s.mp4","company/BRAND.md"],"parent":"ed3b5b745288dbb03cbc0a1943c2de15778b913e263c46faa0482f19d073bcf3","snapshot":{"company/BRAND.md":"name: Loop\npalette: purple\n"},"id":"19f08912db940dd6c7021f1f12402ddde1a4a1abf5d4c2607584ed57a7a1f354","tenantId":"tenant_a","at":"2026-05-19T05:25:34.818Z","summary":"content_write touched 2 path(s)","objectHashes":["b3ce7a30eada9179db405b8b19dadb8eedfd6501c6d262d4436898b539974059"]}
40
- {"traceId":"time_machine_annotation_ed3b5b745288dbb03cbc0a1943c2de15778b913e_mpc6w163","kind":"content_write","affected":["time-machine/annotations/ed3b5b745288dbb03cbc0a1943c2de15778b913e263c46faa0482f19d073bcf3.json"],"parent":"ed3b5b745288dbb03cbc0a1943c2de15778b913e263c46faa0482f19d073bcf3","snapshot":{"time-machine/annotations/ed3b5b745288dbb03cbc0a1943c2de15778b913e263c46faa0482f19d073bcf3.json":"{\n \"eventId\": \"ed3b5b745288dbb03cbc0a1943c2de15778b913e263c46faa0482f19d073bcf3\",\n \"starred\": true,\n \"label\": \"first brand\",\n \"createdAt\": \"2026-05-19T05:25:34.820Z\",\n \"truthSource\": \"event-log\"\n}\n"},"id":"0c7e6df688f0b59aa7e570767edf8c3c173e94b868f76a8b8a65fca2dc4dc52b","tenantId":"tenant_a","at":"2026-05-19T05:25:34.829Z","summary":"content_write touched 1 path(s)","objectHashes":["a40671d5102096f0b638fc62a7139144099d8078de0809245e8e2768685abbae"]}
41
- {"traceId":"brand","kind":"content_write","affected":["company/BRAND.md"],"parent":null,"snapshot":{"company/BRAND.md":"name: Loop\npalette: blue\n"},"id":"cc123c729d401a5613e598f2f0a71a11889d7a8099a948c9912d378546037222","tenantId":"tenant_a","at":"2026-05-19T05:25:34.865Z","summary":"content_write touched 1 path(s)","objectHashes":["b343d4492837788b413910202f644e658701e9ea4f6c7bdfd4f9844212975d05"]}
42
- {"traceId":"film","kind":"content_write","affected":["company/film_60s.mp4","company/BRAND.md"],"parent":"cc123c729d401a5613e598f2f0a71a11889d7a8099a948c9912d378546037222","snapshot":{"company/BRAND.md":"name: Loop\npalette: purple\n"},"id":"84ba71c44cca803493da6344add51432c6601f49a9803469969993002c8aafd4","tenantId":"tenant_a","at":"2026-05-19T05:25:34.871Z","summary":"content_write touched 2 path(s)","objectHashes":["b3ce7a30eada9179db405b8b19dadb8eedfd6501c6d262d4436898b539974059"]}
43
- {"at":"2026-05-30T21:07:13.818Z","traceId":"brand","kind":"content_write","affected":["company/BRAND.md"],"parent":null,"snapshot":{"company/BRAND.md":"name: Loop\npalette: blue\n"},"id":"ebba79a2d0eb11f6de34b6c3261d55d200d6fd687dc7f2bd38ba940e2b7ee98a","tenantId":"tenant_a","summary":"content_write touched 1 path(s)","objectHashes":["b343d4492837788b413910202f644e658701e9ea4f6c7bdfd4f9844212975d05"]}
44
- {"at":"2026-05-30T21:07:13.822Z","traceId":"film","kind":"content_write","affected":["company/film_60s.mp4","company/BRAND.md"],"parent":"ebba79a2d0eb11f6de34b6c3261d55d200d6fd687dc7f2bd38ba940e2b7ee98a","snapshot":{"company/BRAND.md":"name: Loop\npalette: purple\n"},"id":"476f2dfe9cb85f637ab5a41bb1b7e90998f8f037bf6513f85a61c59a5e28df38","tenantId":"tenant_a","summary":"content_write touched 2 path(s)","objectHashes":["b3ce7a30eada9179db405b8b19dadb8eedfd6501c6d262d4436898b539974059"]}
45
- {"at":"2026-05-30T21:07:13.868Z","traceId":"brand","kind":"content_write","affected":["company/BRAND.md"],"parent":null,"snapshot":{"company/BRAND.md":"name: Loop\npalette: blue\n"},"id":"d6bc729adbb5f2dce5c2df0646ddf09a40d7bb8309630bc78eb0b465c4abcb61","tenantId":"tenant_a","summary":"content_write touched 1 path(s)","objectHashes":["b343d4492837788b413910202f644e658701e9ea4f6c7bdfd4f9844212975d05"]}
46
- {"at":"2026-05-30T21:07:13.869Z","traceId":"film","kind":"content_write","affected":["company/film_60s.mp4","company/BRAND.md"],"parent":"d6bc729adbb5f2dce5c2df0646ddf09a40d7bb8309630bc78eb0b465c4abcb61","snapshot":{"company/BRAND.md":"name: Loop\npalette: purple\n"},"id":"d58cdb7fc863629f652a71672d4ebd492f9f43b8e1874bc785ba560399c7354c","tenantId":"tenant_a","summary":"content_write touched 2 path(s)","objectHashes":["b3ce7a30eada9179db405b8b19dadb8eedfd6501c6d262d4436898b539974059"]}
47
- {"at":"2026-05-30T21:07:13.889Z","traceId":"time_machine_annotation_d6bc729adbb5f2dce5c2df0646ddf09a40d7bb83_mpsuddgd","kind":"content_write","affected":["time-machine/annotations/d6bc729adbb5f2dce5c2df0646ddf09a40d7bb8309630bc78eb0b465c4abcb61.json"],"parent":"d6bc729adbb5f2dce5c2df0646ddf09a40d7bb8309630bc78eb0b465c4abcb61","snapshot":{"time-machine/annotations/d6bc729adbb5f2dce5c2df0646ddf09a40d7bb8309630bc78eb0b465c4abcb61.json":"{\n \"eventId\": \"d6bc729adbb5f2dce5c2df0646ddf09a40d7bb8309630bc78eb0b465c4abcb61\",\n \"starred\": true,\n \"label\": \"first brand\",\n \"createdAt\": \"2026-05-30T21:07:13.872Z\",\n \"truthSource\": \"event-log\"\n}\n"},"id":"8d255cde97174a60a9b4edd826f83aaed7f969e9821ed208d639f2cfc4ff4aa3","tenantId":"tenant_a","summary":"content_write touched 1 path(s)","objectHashes":["50441b28afaf46b9415d928d1a8a55c8c2a5e0e8738402bcb0219564bbd6bee7"]}
48
- {"at":"2026-05-30T21:07:13.996Z","traceId":"brand","kind":"content_write","affected":["company/BRAND.md"],"parent":null,"snapshot":{"company/BRAND.md":"name: Loop\npalette: blue\n"},"id":"8d4c0a19674b60391fab7a7ad964337a428528b9d2a541c7a9eed2bf36b8ec9b","tenantId":"tenant_a","summary":"content_write touched 1 path(s)","objectHashes":["b343d4492837788b413910202f644e658701e9ea4f6c7bdfd4f9844212975d05"]}
49
- {"at":"2026-05-30T21:07:13.998Z","traceId":"film","kind":"content_write","affected":["company/film_60s.mp4","company/BRAND.md"],"parent":"8d4c0a19674b60391fab7a7ad964337a428528b9d2a541c7a9eed2bf36b8ec9b","snapshot":{"company/BRAND.md":"name: Loop\npalette: purple\n"},"id":"b807f627e3745c8171f4ab9c72ac45712cfddd02ca3ae5d6174a428b074bb242","tenantId":"tenant_a","summary":"content_write touched 2 path(s)","objectHashes":["b3ce7a30eada9179db405b8b19dadb8eedfd6501c6d262d4436898b539974059"]}
50
- {"at":"2026-07-01T01:40:40.709Z","traceId":"brand","kind":"content_write","affected":["company/BRAND.md"],"parent":null,"snapshot":{"company/BRAND.md":"name: Loop\npalette: blue\n"},"id":"aff82f521072869b715ff26fcc85dc15980ba69d9123ebbaf1b37a8f8ff6451f","tenantId":"tenant_a","summary":"content_write touched 1 path(s)","objectHashes":["b343d4492837788b413910202f644e658701e9ea4f6c7bdfd4f9844212975d05"]}
51
- {"at":"2026-07-01T01:40:40.710Z","traceId":"film","kind":"content_write","affected":["company/film_60s.mp4","company/BRAND.md"],"parent":"aff82f521072869b715ff26fcc85dc15980ba69d9123ebbaf1b37a8f8ff6451f","snapshot":{"company/BRAND.md":"name: Loop\npalette: purple\n"},"id":"9c87e47c0f696eff6a873c325c17822b1760d6b317b70733fa2cc74b2f895bbe","tenantId":"tenant_a","summary":"content_write touched 2 path(s)","objectHashes":["b3ce7a30eada9179db405b8b19dadb8eedfd6501c6d262d4436898b539974059"]}
52
- {"at":"2026-07-01T01:40:41.042Z","traceId":"brand","kind":"content_write","affected":["company/BRAND.md"],"parent":null,"snapshot":{"company/BRAND.md":"name: Loop\npalette: blue\n"},"id":"1da3945259b14194b019682b4768d6071b7b3f2841c3db2b2e5b43bb68ba2369","tenantId":"tenant_a","summary":"content_write touched 1 path(s)","objectHashes":["b343d4492837788b413910202f644e658701e9ea4f6c7bdfd4f9844212975d05"]}
53
- {"at":"2026-07-01T01:40:41.045Z","traceId":"film","kind":"content_write","affected":["company/film_60s.mp4","company/BRAND.md"],"parent":"1da3945259b14194b019682b4768d6071b7b3f2841c3db2b2e5b43bb68ba2369","snapshot":{"company/BRAND.md":"name: Loop\npalette: purple\n"},"id":"8d3e5195ba5a9bfac51eecb10b98fb41b19014f997a85e20695f09108ff77e54","tenantId":"tenant_a","summary":"content_write touched 2 path(s)","objectHashes":["b3ce7a30eada9179db405b8b19dadb8eedfd6501c6d262d4436898b539974059"]}
54
- {"at":"2026-07-01T01:40:41.102Z","traceId":"time_machine_annotation_1da3945259b14194b019682b4768d6071b7b3f28_mr1esg0a","kind":"content_write","affected":["time-machine/annotations/1da3945259b14194b019682b4768d6071b7b3f2841c3db2b2e5b43bb68ba2369.json"],"parent":"1da3945259b14194b019682b4768d6071b7b3f2841c3db2b2e5b43bb68ba2369","snapshot":{"time-machine/annotations/1da3945259b14194b019682b4768d6071b7b3f2841c3db2b2e5b43bb68ba2369.json":"{\n \"eventId\": \"1da3945259b14194b019682b4768d6071b7b3f2841c3db2b2e5b43bb68ba2369\",\n \"starred\": true,\n \"label\": \"first brand\",\n \"createdAt\": \"2026-07-01T01:40:41.063Z\",\n \"truthSource\": \"event-log\"\n}\n"},"id":"2e2aa72257febba2c168b58c4e4e54965ab31b4258611403908ff83b79800bac","tenantId":"tenant_a","summary":"content_write touched 1 path(s)","objectHashes":["b30cbae9bd33f1fed539a916a7ed7d4fe21386457129683332342762f36502de"]}
55
- {"at":"2026-07-01T01:40:41.444Z","traceId":"brand","kind":"content_write","affected":["company/BRAND.md"],"parent":null,"snapshot":{"company/BRAND.md":"name: Loop\npalette: blue\n"},"id":"dff382171236db42415640eec203670eb5d9fdbcdc3ee912dbeb127b5c6ea4e8","tenantId":"tenant_a","summary":"content_write touched 1 path(s)","objectHashes":["b343d4492837788b413910202f644e658701e9ea4f6c7bdfd4f9844212975d05"]}
56
- {"at":"2026-07-01T01:40:41.451Z","traceId":"film","kind":"content_write","affected":["company/film_60s.mp4","company/BRAND.md"],"parent":"dff382171236db42415640eec203670eb5d9fdbcdc3ee912dbeb127b5c6ea4e8","snapshot":{"company/BRAND.md":"name: Loop\npalette: purple\n"},"id":"87cc0efe7d17bfaab3afbe569e00af405a2205f2ba3af87de4bb295db283a8bf","tenantId":"tenant_a","summary":"content_write touched 2 path(s)","objectHashes":["b3ce7a30eada9179db405b8b19dadb8eedfd6501c6d262d4436898b539974059"]}
@@ -1,22 +0,0 @@
1
-
2
- > @nebutra/time-machine@0.1.3 build /Users/tseka_luk/Documents/Nebutra-SaaS-Lab/Nebutra-Sailor/packages/ai/time-machine
3
- > tsup
4
-
5
- CLI Building entry: src/cli.ts, src/index.ts
6
- CLI Using tsconfig: tsconfig.json
7
- CLI tsup v8.5.1
8
- CLI Using tsup config: /Users/tseka_luk/Documents/Nebutra-SaaS-Lab/Nebutra-Sailor/packages/ai/time-machine/tsup.config.ts
9
- CLI Target: es2022
10
- CLI Cleaning output folder
11
- ESM Build start
12
- ESM dist/chunk-YM7DY2TO.js 6.04 KB
13
- ESM dist/index.js 160.00 B
14
- ESM dist/cli.js 1.00 KB
15
- ESM dist/index.js.map 71.00 B
16
- ESM dist/chunk-YM7DY2TO.js.map 13.04 KB
17
- ESM dist/cli.js.map 1.81 KB
18
- ESM ⚡️ Build success in 13ms
19
- DTS Build start
20
- DTS ⚡️ Build success in 2218ms
21
- DTS dist/cli.d.ts 13.00 B
22
- DTS dist/index.d.ts 2.72 KB
@@ -1,17 +0,0 @@
1
-
2
- > @nebutra/time-machine@0.1.2 test /Users/tseka_luk/Documents/Nebutra-SaaS-Lab/Nebutra-Sailor/packages/ai/time-machine
3
- > vitest run
4
-
5
-
6
- RUN v4.1.4 /Users/tseka_luk/Documents/Nebutra-SaaS-Lab/Nebutra-Sailor/packages/ai/time-machine
7
-
8
- (node:57112) ExperimentalWarning: SQLite is an experimental feature and might change at any time
9
- (Use `node --trace-warnings ...` to show where the warning was created)
10
- ✓ src/index.test.ts (3 tests) 949ms
11
- ✓ projects event-log records into a founder timeline without owning truth 405ms
12
-
13
- Test Files 1 passed (1)
14
- Tests 3 passed (3)
15
- Start at 09:40:38
16
- Duration 3.19s (transform 885ms, setup 0ms, import 1.17s, tests 949ms, environment 0ms)
17
-
@@ -1,4 +0,0 @@
1
-
2
- > @nebutra/time-machine@0.1.3 typecheck /Users/tseka_luk/Documents/Nebutra-SaaS-Lab/Nebutra-Sailor/packages/ai/time-machine
3
- > tsc --noEmit
4
-
@@ -1,22 +0,0 @@
1
- import { EventLog } from "@nebutra/event-log";
2
- import { TimeMachine } from "../src/index";
3
-
4
- const root = ".nebutra/time-machine-branch-example";
5
- const tenantId = "local";
6
- const eventLog = await EventLog.open(`${root}/event-log`, { tenantId });
7
- const eventId = await eventLog.commit({
8
- traceId: "demo_decision",
9
- kind: "content_write",
10
- affected: ["company/BRAND.md"],
11
- parent: null,
12
- snapshot: { "company/BRAND.md": "name: Loop\npalette: blue\n" },
13
- });
14
- const machine = await TimeMachine.open(root, { tenantId });
15
-
16
- try {
17
- process.stdout.write(
18
- `${JSON.stringify(await machine.branchFrom(eventId, "purple version"), null, 2)}\n`,
19
- );
20
- } finally {
21
- await machine.close();
22
- }
@@ -1,9 +0,0 @@
1
- import { TimeMachine } from "../src/index";
2
-
3
- const machine = await TimeMachine.open(".nebutra/time-machine-example", { tenantId: "local" });
4
-
5
- try {
6
- process.stdout.write(`${JSON.stringify(await machine.doctor(), null, 2)}\n`);
7
- } finally {
8
- await machine.close();
9
- }
@@ -1,10 +0,0 @@
1
- import { TimeMachine } from "../src/index";
2
-
3
- const machine = await TimeMachine.open(".nebutra/time-machine-example", { tenantId: "local" });
4
-
5
- try {
6
- const view = await machine.timelineView();
7
- process.stdout.write(`${JSON.stringify(view, null, 2)}\n`);
8
- } finally {
9
- await machine.close();
10
- }
@@ -1,23 +0,0 @@
1
- ---
2
- name: timeline_view
3
- kind: play
4
- version: 1.0.0
5
- description: Build a founder-facing timeline view from event-log history
6
- required_skills:
7
- - event_log.timeline
8
- - content_store.write
9
- sub_agents:
10
- - role: timeline_curator
11
- allowed_skills: [event_log.timeline, content_store.write]
12
- depends_on_plays: []
13
- ---
14
-
15
- ## What this play does
16
-
17
- Reads Chronos event history and produces a founder-facing star-map timeline.
18
-
19
- ## Boundaries
20
-
21
- - Event truth stays in event-log.
22
- - Rollback is dry-run only until the user explicitly confirms a higher-layer apply flow.
23
- - Branches are experiments, not destructive rewrites.
package/src/cli.ts DELETED
@@ -1,28 +0,0 @@
1
- import { readTimeMachineDebug, TimeMachine } from "./index";
2
-
3
- const command = process.argv[2] ?? "doctor";
4
- const root = process.env.TIME_MACHINE_ROOT ?? ".nebutra/time-machine";
5
- const tenantId = process.env.NEBUTRA_TENANT_ID ?? "local";
6
-
7
- if (command === "doctor") {
8
- const machine = await TimeMachine.open(root, { tenantId });
9
- try {
10
- process.stdout.write(`${JSON.stringify(await machine.doctor(), null, 2)}\n`);
11
- } finally {
12
- await machine.close();
13
- }
14
- } else if (command === "quickstart") {
15
- const machine = await TimeMachine.open(root, { tenantId });
16
- try {
17
- process.stdout.write(`${JSON.stringify(await machine.timelineView(), null, 2)}\n`);
18
- } finally {
19
- await machine.close();
20
- }
21
- } else if (command === "debug") {
22
- process.stdout.write(
23
- `${JSON.stringify({ capability: "time-machine", entries: await readTimeMachineDebug() }, null, 2)}\n`,
24
- );
25
- } else {
26
- process.stderr.write(`Unknown time-machine command: ${command}\n`);
27
- process.exitCode = 1;
28
- }
package/src/index.test.ts DELETED
@@ -1,85 +0,0 @@
1
- import { mkdtemp, rm } from "node:fs/promises";
2
- import { tmpdir } from "node:os";
3
- import { join } from "node:path";
4
- import { ContentStore } from "@nebutra/content-store";
5
- import { EventLog } from "@nebutra/event-log";
6
- import { afterEach, describe, expect, it } from "vitest";
7
- import { readTimeMachineDebug, TimeMachine } from "./index";
8
-
9
- let root: string | undefined;
10
- let machine: TimeMachine | undefined;
11
-
12
- afterEach(async () => {
13
- if (machine) await machine.close();
14
- if (root) await rm(root, { recursive: true, force: true });
15
- root = undefined;
16
- machine = undefined;
17
- });
18
-
19
- async function seed(): Promise<{ runtime: TimeMachine; first: string; second: string }> {
20
- root = await mkdtemp(join(tmpdir(), "time-machine-"));
21
- const tenantId = "tenant_a";
22
- const contentStore = await ContentStore.open(join(root, "content"), { tenantId });
23
- const eventLog = await EventLog.open(join(root, "event-log"), { tenantId });
24
- const first = await eventLog.commit({
25
- traceId: "brand",
26
- kind: "content_write",
27
- affected: ["company/BRAND.md"],
28
- parent: null,
29
- snapshot: { "company/BRAND.md": "name: Loop\npalette: blue\n" },
30
- });
31
- const second = await eventLog.commit({
32
- traceId: "film",
33
- kind: "content_write",
34
- affected: ["company/film_60s.mp4", "company/BRAND.md"],
35
- parent: first,
36
- snapshot: { "company/BRAND.md": "name: Loop\npalette: purple\n" },
37
- });
38
- machine = await TimeMachine.fromStores({
39
- tenantId,
40
- root,
41
- contentStore,
42
- eventLog,
43
- });
44
- return { runtime: machine, first, second };
45
- }
46
-
47
- describe("time-machine", () => {
48
- it("projects event-log records into a founder timeline without owning truth", async () => {
49
- const { runtime, first, second } = await seed();
50
-
51
- const view = await runtime.timelineView();
52
-
53
- expect(view.nodes.map((node) => node.eventId)).toEqual([first, second]);
54
- expect(view.nodes[0]).toMatchObject({
55
- kind: "milestone",
56
- branchId: "main",
57
- affectedAssets: ["company/BRAND.md"],
58
- });
59
- expect(view.truthSource).toBe("event-log");
60
- });
61
-
62
- it("branches, stars, compares, and keeps rollback as dry-run only", async () => {
63
- const { runtime, first, second } = await seed();
64
-
65
- const branch = await runtime.branchFrom(first, "purple version");
66
- const annotation = await runtime.star(first, "first brand");
67
- const comparison = await runtime.compare(first, second);
68
- const rollback = await runtime.rollbackDryRun(first);
69
-
70
- expect(branch).toMatchObject({ name: "purple version", fromEventId: first });
71
- expect(annotation.path).toBe(`time-machine/annotations/${first}.json`);
72
- expect(comparison.changedAssets).toContain("company/film_60s.mp4");
73
- expect(comparison.narrative).toContain("company/BRAND.md");
74
- expect(rollback.dryRun).toBe(true);
75
- expect(rollback.suggestion).toContain("Review");
76
- });
77
-
78
- it("records debug entries through capability-kit helpers", async () => {
79
- const { runtime } = await seed();
80
-
81
- await runtime.doctor();
82
-
83
- await expect(readTimeMachineDebug(root)).resolves.toEqual(expect.any(Array));
84
- });
85
- });
package/src/index.ts DELETED
@@ -1,254 +0,0 @@
1
- import { mkdir } from "node:fs/promises";
2
- import { join } from "node:path";
3
- import { requireCapabilityTenant } from "@nebutra/capability-kit";
4
- import { appendCapabilityDebug, readCapabilityDebug } from "@nebutra/capability-kit/debug";
5
- import { ContentStore } from "@nebutra/content-store";
6
- import { CapabilityError } from "@nebutra/errors";
7
- import { EventLog, type EventRecord, type RollbackPlan } from "@nebutra/event-log";
8
- import { assetId } from "@nebutra/generation-context";
9
-
10
- export type TimelineNodeKind = "milestone" | "decision" | "branch" | "play_completed";
11
-
12
- export interface TimelineNode {
13
- readonly id: string;
14
- readonly eventId: string;
15
- readonly kind: TimelineNodeKind;
16
- readonly timestamp: string;
17
- readonly oneLineSummary: string;
18
- readonly branchId: string;
19
- readonly parentNode?: string;
20
- readonly affectedAssets: readonly string[];
21
- readonly preview: {
22
- readonly kind: "event-summary";
23
- readonly text: string;
24
- };
25
- }
26
-
27
- export interface TimelineView {
28
- readonly tenantId: string;
29
- readonly truthSource: "event-log";
30
- readonly nodes: readonly TimelineNode[];
31
- }
32
-
33
- export interface TimelineBranch {
34
- readonly branchId: string;
35
- readonly name: string;
36
- readonly fromEventId: string;
37
- readonly createdAt: string;
38
- }
39
-
40
- export interface TimelineAnnotation {
41
- readonly eventId: string;
42
- readonly starred: true;
43
- readonly label: string;
44
- readonly path: string;
45
- }
46
-
47
- export interface TimelineComparison {
48
- readonly leftEventId: string;
49
- readonly rightEventId: string;
50
- readonly changedAssets: readonly string[];
51
- readonly narrative: string;
52
- }
53
-
54
- export interface TimeMachineDoctorReport {
55
- readonly capability: "time-machine";
56
- readonly ok: boolean;
57
- readonly checkedAt: string;
58
- readonly truthSource: "event-log";
59
- readonly features: readonly string[];
60
- readonly suggestion?: string;
61
- }
62
-
63
- export interface TimeMachineOptions {
64
- readonly tenantId?: string;
65
- readonly root?: string;
66
- readonly debugRoot?: string;
67
- readonly contentStore?: ContentStore;
68
- readonly eventLog?: EventLog;
69
- }
70
-
71
- function nodeKind(event: EventRecord): TimelineNodeKind {
72
- if (event.traceId.includes("branch")) return "branch";
73
- if (event.traceId.includes("decision")) return "decision";
74
- if (event.traceId.includes("play")) return "play_completed";
75
- return "milestone";
76
- }
77
-
78
- function toNode(event: EventRecord): TimelineNode {
79
- return {
80
- id: `node_${event.id}`,
81
- eventId: event.id,
82
- kind: nodeKind(event),
83
- timestamp: event.at,
84
- oneLineSummary: event.summary,
85
- branchId: "main",
86
- ...(event.parent ? { parentNode: `node_${event.parent}` } : {}),
87
- affectedAssets: event.affected,
88
- preview: { kind: "event-summary", text: event.summary },
89
- };
90
- }
91
-
92
- function unique(values: readonly string[]): string[] {
93
- return [...new Set(values)].sort((left, right) => left.localeCompare(right));
94
- }
95
-
96
- export class TimeMachine {
97
- readonly #tenantId: string;
98
- readonly #debugRoot: string;
99
- readonly #contentStore: ContentStore;
100
- readonly #eventLog: EventLog;
101
-
102
- private constructor(
103
- options: Required<Pick<TimeMachineOptions, "tenantId" | "contentStore" | "eventLog">> &
104
- Pick<TimeMachineOptions, "debugRoot">,
105
- ) {
106
- this.#tenantId = requireCapabilityTenant({
107
- explicit: options.tenantId,
108
- onMissing: () =>
109
- new CapabilityError("time-machine", "Time Machine requires tenant context", {
110
- suggestion:
111
- "Pass tenantId when opening TimeMachine so timeline reads stay tenant-scoped.",
112
- statusCode: 400,
113
- }),
114
- });
115
- this.#debugRoot = options.debugRoot ?? process.cwd();
116
- this.#contentStore = options.contentStore;
117
- this.#eventLog = options.eventLog;
118
- }
119
-
120
- static async open(
121
- root = ".nebutra/time-machine",
122
- options: Omit<TimeMachineOptions, "root" | "contentStore" | "eventLog"> = {},
123
- ): Promise<TimeMachine> {
124
- const tenantId = options.tenantId ?? "local";
125
- await mkdir(root, { recursive: true });
126
- const contentStore = await ContentStore.open(join(root, "content"), { tenantId });
127
- const eventLog = await EventLog.open(join(root, "event-log"), { tenantId });
128
- return new TimeMachine({ ...options, tenantId, contentStore, eventLog });
129
- }
130
-
131
- static async fromStores(
132
- options: Required<Pick<TimeMachineOptions, "tenantId" | "contentStore" | "eventLog">> &
133
- Pick<TimeMachineOptions, "root" | "debugRoot">,
134
- ): Promise<TimeMachine> {
135
- if (options.root) await mkdir(options.root, { recursive: true });
136
- return new TimeMachine({
137
- tenantId: options.tenantId,
138
- contentStore: options.contentStore,
139
- eventLog: options.eventLog,
140
- ...((options.debugRoot ?? options.root) !== undefined
141
- ? { debugRoot: options.debugRoot ?? options.root }
142
- : {}),
143
- });
144
- }
145
-
146
- async timelineView(): Promise<TimelineView> {
147
- const events = await this.#eventLog.timeline();
148
- const nodes = events.map(toNode);
149
- await this.#debug({ type: "timeline_view", tenantId: this.#tenantId, nodes: nodes.length });
150
- return { tenantId: this.#tenantId, truthSource: "event-log", nodes };
151
- }
152
-
153
- async branchFrom(eventId: string, name: string): Promise<TimelineBranch> {
154
- const branch = await this.#eventLog.branchFrom(eventId, name);
155
- const result = {
156
- branchId: assetId("branch", `${eventId}_${name}`),
157
- name: branch.name,
158
- fromEventId: branch.from,
159
- createdAt: branch.at,
160
- };
161
- await this.#debug({ type: "branch", tenantId: this.#tenantId, eventId, name });
162
- return result;
163
- }
164
-
165
- async star(eventId: string, label = "starred"): Promise<TimelineAnnotation> {
166
- await this.#requireEvent(eventId);
167
- const annotation = {
168
- eventId,
169
- starred: true,
170
- label,
171
- createdAt: new Date().toISOString(),
172
- truthSource: "event-log",
173
- };
174
- const path = `time-machine/annotations/${eventId}.json`;
175
- await this.#contentStore.write(path, `${JSON.stringify(annotation, null, 2)}\n`);
176
- await this.#eventLog.commit({
177
- traceId: assetId("time_machine_annotation", eventId),
178
- kind: "content_write",
179
- affected: [path],
180
- parent: eventId,
181
- snapshot: { [path]: `${JSON.stringify(annotation, null, 2)}\n` },
182
- });
183
- await this.#debug({ type: "star", tenantId: this.#tenantId, eventId, label });
184
- return { eventId, starred: true, label, path };
185
- }
186
-
187
- async compare(leftEventId: string, rightEventId: string): Promise<TimelineComparison> {
188
- const left = await this.#requireEvent(leftEventId);
189
- const right = await this.#requireEvent(rightEventId);
190
- const changedAssets = unique([...left.affected, ...right.affected]);
191
- const narrative = `Compared ${leftEventId} to ${rightEventId}: ${changedAssets.join(
192
- ", ",
193
- )} changed.`;
194
- await this.#debug({
195
- type: "compare",
196
- tenantId: this.#tenantId,
197
- leftEventId,
198
- rightEventId,
199
- changedAssets,
200
- });
201
- return { leftEventId, rightEventId, changedAssets, narrative };
202
- }
203
-
204
- async rollbackDryRun(eventId: string): Promise<RollbackPlan> {
205
- const plan = await this.#eventLog.rollbackTo(eventId);
206
- await this.#debug({
207
- type: "rollback_dry_run",
208
- tenantId: this.#tenantId,
209
- eventId,
210
- affected: plan.affected,
211
- });
212
- return plan;
213
- }
214
-
215
- async doctor(): Promise<TimeMachineDoctorReport> {
216
- const events = await this.#eventLog.timeline();
217
- const report: TimeMachineDoctorReport = {
218
- capability: "time-machine",
219
- ok: true,
220
- checkedAt: new Date().toISOString(),
221
- truthSource: "event-log",
222
- features: ["timeline", "branch", "compare", "rollback-dry-run", "annotation"],
223
- ...(events.length === 0
224
- ? { suggestion: "Commit at least one event to Chronos before opening the star-map view." }
225
- : {}),
226
- };
227
- await this.#debug({ type: "doctor", tenantId: this.#tenantId, events: events.length });
228
- return report;
229
- }
230
-
231
- async close(): Promise<void> {
232
- await this.#contentStore.close();
233
- }
234
-
235
- async #requireEvent(eventId: string): Promise<EventRecord> {
236
- const event = (await this.#eventLog.timeline()).find((record) => record.id === eventId);
237
- if (!event) {
238
- throw new CapabilityError("time-machine", "Timeline event not found", {
239
- suggestion: "Call timelineView and choose an event id from the current tenant.",
240
- metadata: { eventId },
241
- statusCode: 404,
242
- });
243
- }
244
- return event;
245
- }
246
-
247
- async #debug(entry: Record<string, unknown>): Promise<void> {
248
- await appendCapabilityDebug("time-machine", entry, { root: this.#debugRoot });
249
- }
250
- }
251
-
252
- export async function readTimeMachineDebug(root = process.cwd(), limit = 20): Promise<unknown[]> {
253
- return readCapabilityDebug("time-machine", { root, limit });
254
- }
package/tsconfig.json DELETED
@@ -1,9 +0,0 @@
1
- {
2
- "extends": "../../../tsconfig.base.json",
3
- "compilerOptions": {
4
- "outDir": "dist",
5
- "rootDir": "src",
6
- "types": ["node", "vitest/globals"]
7
- },
8
- "include": ["src/**/*.ts"]
9
- }
package/tsup.config.ts DELETED
@@ -1,9 +0,0 @@
1
- import { defineConfig } from "tsup";
2
-
3
- export default defineConfig({
4
- clean: true,
5
- dts: true,
6
- entry: ["src/index.ts", "src/cli.ts"],
7
- format: ["esm"],
8
- sourcemap: true,
9
- });