trajectories 0.0.0 → 0.1.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 (205) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/LICENSE +201 -0
  3. package/README.md +288 -2
  4. package/dist/cli.js +30210 -0
  5. package/dist/convert.d.ts +31 -0
  6. package/dist/convert.js +431 -0
  7. package/dist/deepagents_checkpoint.py +362 -0
  8. package/dist/index.d.ts +7 -0
  9. package/dist/index.js +8402 -0
  10. package/dist/log-baseline.d.ts +26 -0
  11. package/dist/log-baseline.js +104 -0
  12. package/dist/log-content.d.ts +16 -0
  13. package/dist/log-content.js +80 -0
  14. package/dist/log-io.d.ts +10 -0
  15. package/dist/log-io.js +121 -0
  16. package/dist/log-read.d.ts +24 -0
  17. package/dist/log-read.js +117 -0
  18. package/dist/log-reconcile.d.ts +5 -0
  19. package/dist/log-reconcile.js +38 -0
  20. package/dist/log-records.d.ts +35 -0
  21. package/dist/log-records.js +85 -0
  22. package/dist/log-recovery.d.ts +18 -0
  23. package/dist/log-recovery.js +123 -0
  24. package/dist/log-stage.d.ts +14 -0
  25. package/dist/log-stage.js +138 -0
  26. package/dist/log-state.d.ts +89 -0
  27. package/dist/log-state.js +92 -0
  28. package/dist/log-switch.d.ts +3 -0
  29. package/dist/log-switch.js +98 -0
  30. package/dist/log-types.d.ts +129 -0
  31. package/dist/log-types.js +8 -0
  32. package/dist/log.d.ts +8 -0
  33. package/dist/log.js +62 -0
  34. package/dist/migrate.d.ts +29 -0
  35. package/dist/migrate.js +173 -0
  36. package/dist/normalization-runtime.d.ts +1 -0
  37. package/dist/normalization-runtime.js +3150 -0
  38. package/dist/portable.d.ts +9 -0
  39. package/dist/portable.js +26 -0
  40. package/dist/readers/canonical.d.ts +13 -0
  41. package/dist/readers/canonical.js +54 -0
  42. package/dist/readers/cline.d.ts +10 -0
  43. package/dist/readers/cline.js +107 -0
  44. package/dist/readers/cursor.d.ts +20 -0
  45. package/dist/readers/cursor.js +374 -0
  46. package/dist/readers/deepagents.d.ts +41 -0
  47. package/dist/readers/deepagents.js +163 -0
  48. package/dist/readers/fx.d.ts +11 -0
  49. package/dist/readers/fx.js +573 -0
  50. package/dist/readers/github-copilot.d.ts +8 -0
  51. package/dist/readers/github-copilot.js +216 -0
  52. package/dist/readers/grok-build.d.ts +12 -0
  53. package/dist/readers/grok-build.js +391 -0
  54. package/dist/readers/guards.d.ts +4 -0
  55. package/dist/readers/guards.js +121 -0
  56. package/dist/readers/pi-compaction.d.ts +7 -0
  57. package/dist/readers/pi-compaction.js +112 -0
  58. package/dist/readers/pi-context.d.ts +13 -0
  59. package/dist/readers/pi-context.js +64 -0
  60. package/dist/store.d.ts +25 -0
  61. package/dist/store.js +218 -0
  62. package/dist/types.d.ts +91 -0
  63. package/dist/types.js +1 -0
  64. package/dist/writers/claude-code.d.ts +5 -0
  65. package/dist/writers/claude-code.js +51 -0
  66. package/dist/writers/cline.d.ts +3 -0
  67. package/dist/writers/cline.js +77 -0
  68. package/dist/writers/codex.d.ts +3 -0
  69. package/dist/writers/codex.js +32 -0
  70. package/dist/writers/cursor.d.ts +3 -0
  71. package/dist/writers/cursor.js +197 -0
  72. package/dist/writers/deepagents.d.ts +3 -0
  73. package/dist/writers/deepagents.js +116 -0
  74. package/dist/writers/entropy.d.ts +5 -0
  75. package/dist/writers/entropy.js +33 -0
  76. package/dist/writers/fx.d.ts +3 -0
  77. package/dist/writers/fx.js +135 -0
  78. package/dist/writers/github-copilot.d.ts +3 -0
  79. package/dist/writers/github-copilot.js +71 -0
  80. package/dist/writers/grok-build.d.ts +3 -0
  81. package/dist/writers/grok-build.js +43 -0
  82. package/dist/writers/helpers.d.ts +17 -0
  83. package/dist/writers/helpers.js +75 -0
  84. package/dist/writers/omp.d.ts +3 -0
  85. package/dist/writers/omp.js +7 -0
  86. package/dist/writers/opencode.d.ts +3 -0
  87. package/dist/writers/opencode.js +65 -0
  88. package/dist/writers/pi.d.ts +3 -0
  89. package/dist/writers/pi.js +45 -0
  90. package/docs/cline-native-format.md +43 -0
  91. package/docs/copilot-native-format.md +78 -0
  92. package/docs/cursor-native-format.md +103 -0
  93. package/docs/deepagents-native-format.md +98 -0
  94. package/docs/evidence-api.md +170 -0
  95. package/docs/fx-native-format.md +87 -0
  96. package/docs/harness-parity-bootstrap.md +78 -0
  97. package/docs/harness-support-parity.md +107 -0
  98. package/docs/inspirations.md +103 -0
  99. package/docs/ledger-migration.md +141 -0
  100. package/docs/pi-compaction-context.md +75 -0
  101. package/docs/pi-provider-context.md +76 -0
  102. package/docs/research/2026-10-06-huihua-and-oar.md +176 -0
  103. package/docs/research/ledger/README.md +96 -0
  104. package/docs/research/ledger/confer/2026-09-13-round-10/README.md +61 -0
  105. package/docs/research/ledger/confer/2026-09-13-round-2/cass.md +72 -0
  106. package/docs/research/ledger/confer/2026-09-13-round-3/README.md +70 -0
  107. package/docs/research/ledger/confer/2026-09-13-round-5/README.md +61 -0
  108. package/docs/research/ledger/confer/2026-09-13-round-6/README.md +68 -0
  109. package/docs/research/ledger/confer/2026-09-13-round-7/README.md +64 -0
  110. package/docs/research/ledger/confer/2026-09-13-round-9/README.md +59 -0
  111. package/docs/research/ledger/confer/2026-09-14-wake/wake.md +146 -0
  112. package/docs/research/ledger/docs/inspirations.md +320 -0
  113. package/docs/research/ledger/docs/pr2-pr6-integration.md +53 -0
  114. package/docs/research/ledger/docs/research/2026-09-07-confer-inspirations.md +163 -0
  115. package/docs/research/ledger/docs/research/2026-09-07-letta-continuous-service.md +104 -0
  116. package/docs/research/ledger/docs/research/2026-09-08-claude-history-retrieval.md +117 -0
  117. package/docs/research/ledger/docs/research/2026-09-09-agentsview-native-discovery.md +87 -0
  118. package/docs/research/ledger/docs/research/2026-09-09-daemon-observation.md +231 -0
  119. package/docs/research/ledger/docs/research/2026-09-09-discovery-pagination.md +114 -0
  120. package/docs/research/ledger/docs/research/2026-09-09-harness-transcript-contract.md +145 -0
  121. package/docs/research/ledger/docs/research/2026-09-09-native-history-discovery.md +180 -0
  122. package/docs/research/ledger/docs/research/2026-09-09-native-history-implementation.md +137 -0
  123. package/docs/research/ledger/docs/research/2026-09-09-other-inspirations.md +279 -0
  124. package/docs/research/ledger/docs/research/2026-09-09-trajectory-and-letta-code.md +128 -0
  125. package/docs/research/ledger/docs/research/2026-09-13-diagnostics-coverage.md +116 -0
  126. package/docs/research/ledger/docs/research/2026-09-13-fts-rebuild.md +83 -0
  127. package/docs/research/ledger/docs/research/2026-09-13-read-path-split.md +74 -0
  128. package/docs/research/ledger/docs/research/2026-09-13-runtime-rollout.md +102 -0
  129. package/docs/research/ledger/docs/research/2026-09-13-scan-outcomes.md +80 -0
  130. package/docs/research/ledger/docs/research/2026-09-13-search-quality.md +105 -0
  131. package/docs/research/ledger/docs/research/2026-09-13-source-coverage.md +64 -0
  132. package/docs/research/ledger/docs/research/2026-09-13-sync-wall-budget.md +82 -0
  133. package/docs/research/ledger/docs/research/2026-09-13-typed-read-gate.md +81 -0
  134. package/docs/research/ledger/docs/research/2026-09-13-writer-lease.md +84 -0
  135. package/docs/research/ledger/docs/research/2026-09-16-c1-copy-fallback.md +227 -0
  136. package/docs/research/ledger/docs/research/2026-09-16-c10-kimi.md +414 -0
  137. package/docs/research/ledger/docs/research/2026-09-16-c2-derive-counter.md +216 -0
  138. package/docs/research/ledger/docs/research/2026-09-16-c3-echo-filter.md +305 -0
  139. package/docs/research/ledger/docs/research/2026-09-16-c4-title-index.md +349 -0
  140. package/docs/research/ledger/docs/research/2026-09-16-c5-trigram.md +268 -0
  141. package/docs/research/ledger/docs/research/2026-09-16-c6-recency-prior.md +438 -0
  142. package/docs/research/ledger/docs/research/2026-09-16-c7-tombstones.md +467 -0
  143. package/docs/research/ledger/docs/research/2026-09-16-c8-remote-truth.md +390 -0
  144. package/docs/research/ledger/docs/research/2026-09-16-c9-grok.md +380 -0
  145. package/docs/research/ledger/docs/research/2026-09-16-wake-port-program.md +38 -0
  146. package/docs/research/ledger/docs/research/2026-09-17-cursor-blobstore.md +157 -0
  147. package/docs/research/ledger/manifest.json +540 -0
  148. package/legacy/NOTICE.md +50 -0
  149. package/legacy/bin/ledger-core.ts +7 -0
  150. package/legacy/bin/ledger.ts +7 -0
  151. package/legacy/bin/traj-bridge.ts +7 -0
  152. package/legacy/scripts/import-claude-history.ts +130 -0
  153. package/legacy/scripts/native-history-smoke.ts +52 -0
  154. package/legacy/scripts/observe-daemon.ts +570 -0
  155. package/legacy/scripts/retitle-sessions.md +19 -0
  156. package/legacy/scripts/verify-runtime-rollout.ts +151 -0
  157. package/legacy/src/canonical.ts +108 -0
  158. package/legacy/src/cli.ts +1293 -0
  159. package/legacy/src/db.ts +2254 -0
  160. package/legacy/src/diagnostics.ts +87 -0
  161. package/legacy/src/discovery.ts +56 -0
  162. package/legacy/src/embeddings.ts +382 -0
  163. package/legacy/src/filter.ts +602 -0
  164. package/legacy/src/gemini_embeddings.ts +103 -0
  165. package/legacy/src/identity.ts +9 -0
  166. package/legacy/src/index.ts +10 -0
  167. package/legacy/src/ingest.ts +791 -0
  168. package/legacy/src/managed.ts +178 -0
  169. package/legacy/src/native/common.ts +68 -0
  170. package/legacy/src/native/cursor.ts +647 -0
  171. package/legacy/src/native/grok.ts +540 -0
  172. package/legacy/src/native/kimi.ts +706 -0
  173. package/legacy/src/native/opencode.ts +470 -0
  174. package/legacy/src/native/sqlite-ro.ts +281 -0
  175. package/legacy/src/native.ts +97 -0
  176. package/legacy/src/normalizer.ts +457 -0
  177. package/legacy/src/parentage.ts +562 -0
  178. package/legacy/src/pressure.ts +162 -0
  179. package/legacy/src/private-storage.ts +74 -0
  180. package/legacy/src/reader.ts +1255 -0
  181. package/legacy/src/scanner.ts +591 -0
  182. package/legacy/src/schema-gate.ts +263 -0
  183. package/legacy/src/schema.ts +829 -0
  184. package/legacy/src/semantic-top-k.ts +71 -0
  185. package/legacy/src/session-hash.ts +49 -0
  186. package/legacy/src/store-status.ts +218 -0
  187. package/legacy/src/sync-preparation.ts +45 -0
  188. package/legacy/src/sync-truth.ts +843 -0
  189. package/legacy/src/sync.ts +1233 -0
  190. package/legacy/src/types.ts +436 -0
  191. package/legacy/src/vocab.txt +30522 -0
  192. package/legacy/src/watch.ts +673 -0
  193. package/legacy/src/writer-lease.ts +310 -0
  194. package/ops/README.md +150 -0
  195. package/ops/install-cli.sh +63 -0
  196. package/ops/install-native.sh +35 -0
  197. package/ops/install-release.sh +49 -0
  198. package/ops/linux/install-systemd-user.sh +103 -0
  199. package/ops/macos/install-launchd.sh +72 -0
  200. package/ops/sync-settings.sh +37 -0
  201. package/package.json +21 -5
  202. package/skills/trajectories/SKILL.md +138 -0
  203. package/skills/trajectories/scripts/trajectories_recent.sh +26 -0
  204. package/skills/trajectories/scripts/trajectories_search.sh +26 -0
  205. package/index.js +0 -1
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Gemini cloud embedding provider (gemini-embedding-2, 768-dim).
3
+ *
4
+ * Live-checked against the documented REST surface:
5
+ * POST /v1beta/models/gemini-embedding-2:batchEmbedContents
6
+ * requests: [{ model, content: {parts:[{text}]}, outputDimensionality }]
7
+ * Task prefixes per docs "Task types with Embeddings 2" (retrieval, asymmetric):
8
+ * query: "task: search result | query: {content}"
9
+ * document: "title: {title} | text: {content}" (title: none when absent)
10
+ */
11
+ import type { EmbeddingProvider } from "./embeddings.js";
12
+ import { readFileSync, existsSync } from "node:fs";
13
+ import { homedir } from "node:os";
14
+ import { join } from "node:path";
15
+
16
+ export const GEMINI_EMBEDDING_MODEL = "gemini-embedding-2";
17
+ export const GEMINI_EMBEDDING_DIM = 768;
18
+
19
+ const API_BASE = "https://generativelanguage.googleapis.com/v1beta/models";
20
+ const BATCH = 100; // requests per batchEmbedContents call
21
+ const MAX_RETRIES = 3;
22
+
23
+ export function resolveGeminiKey(): string | null {
24
+ if (process.env.GEMINI_API_KEY) return process.env.GEMINI_API_KEY;
25
+ if (process.env.LEDGER_GEMINI_KEY) return process.env.LEDGER_GEMINI_KEY;
26
+ const p = join(homedir(), ".air", "gemini-api-key");
27
+ if (existsSync(p)) return readFileSync(p, "utf8").trim();
28
+ return null;
29
+ }
30
+
31
+ export function formatQuery(text: string): string {
32
+ return `task: search result | query: ${text}`;
33
+ }
34
+
35
+ export function formatDocument(text: string, title?: string | null): string {
36
+ return `title: ${title ?? "none"} | text: ${text}`;
37
+ }
38
+
39
+ export class GeminiEmbeddingProvider implements EmbeddingProvider {
40
+ readonly dimension = GEMINI_EMBEDDING_DIM;
41
+ readonly name = "gemini-embedding-2";
42
+
43
+ private apiKey: string | null = null;
44
+ /** Set false to embed everything as documents (default indexing path). */
45
+ queryMode = false;
46
+
47
+ private key(): string | null {
48
+ this.apiKey ??= resolveGeminiKey();
49
+ return this.apiKey;
50
+ }
51
+
52
+ async embed(texts: string[]): Promise<Float32Array[]> {
53
+ if (texts.length === 0) return [];
54
+ const key = this.key();
55
+ if (!key) throw new Error("No Gemini API key (GEMINI_API_KEY or ~/.air/gemini-api-key)");
56
+
57
+ const out: Float32Array[] = [];
58
+ for (let start = 0; start < texts.length; start += BATCH) {
59
+ const slice = texts.slice(start, start + BATCH);
60
+ out.push(...(await this.embedBatch(slice, key)));
61
+ }
62
+ return out;
63
+ }
64
+
65
+ private async embedBatch(texts: string[], key: string): Promise<Float32Array[]> {
66
+ const requests = texts.map((t) => ({
67
+ model: `models/${GEMINI_EMBEDDING_MODEL}`,
68
+ content: { parts: [{ text: this.queryMode ? formatQuery(t) : formatDocument(t) }] },
69
+ outputDimensionality: GEMINI_EMBEDDING_DIM,
70
+ }));
71
+
72
+ let lastErr: unknown = null;
73
+ for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {
74
+ try {
75
+ const res = await fetch(`${API_BASE}/${GEMINI_EMBEDDING_MODEL}:batchEmbedContents`, {
76
+ method: "POST",
77
+ headers: { "Content-Type": "application/json", "x-goog-api-key": key },
78
+ body: JSON.stringify({ requests }),
79
+ });
80
+ if (!res.ok) {
81
+ const body = await res.text();
82
+ throw new Error(`Gemini embedContent HTTP ${res.status}: ${body.slice(0, 300)}`);
83
+ }
84
+ const data = (await res.json()) as { embeddings?: Array<{ values: number[] }> };
85
+ const embs = data.embeddings ?? [];
86
+ if (embs.length !== texts.length) {
87
+ throw new Error(`Gemini returned ${embs.length}/${texts.length} embeddings`);
88
+ }
89
+ return embs.map((e) => {
90
+ const v = new Float32Array(GEMINI_EMBEDDING_DIM);
91
+ for (let i = 0; i < Math.min(v.length, e.values.length); i++) v[i] = e.values[i];
92
+ return v;
93
+ });
94
+ } catch (err) {
95
+ lastErr = err;
96
+ if (attempt < MAX_RETRIES - 1) {
97
+ await new Promise((r) => setTimeout(r, 500 * 2 ** attempt));
98
+ }
99
+ }
100
+ }
101
+ throw lastErr instanceof Error ? lastErr : new Error(String(lastErr));
102
+ }
103
+ }
@@ -0,0 +1,9 @@
1
+ /** Trajectory identities are native to a harness; Ledger keys include its source. */
2
+ export function ledgerId(source: string, nativeId: string): string {
3
+ return `${source}:${nativeId}`;
4
+ }
5
+
6
+ export function nativeId(source: string, id: string): string {
7
+ const prefix = `${source}:`;
8
+ return id.startsWith(prefix) ? id.slice(prefix.length) : id;
9
+ }
@@ -0,0 +1,10 @@
1
+ export * from "./types.js";
2
+ export { CREATE_TABLES_SQL, SCHEMA_VERSION } from "./schema.js";
3
+ export { SessionNotFoundError, StoreNotInitializedError, TombstonedSessionError, TrajectoryDb } from "./db.js";
4
+ export { ReaderError, TrajectoryReader } from "./reader.js";
5
+ export * from "./sync-truth.js";
6
+ export * from "./normalizer.js";
7
+ export * from "./scanner.js";
8
+ export * from "./cli.js";
9
+ export * from "./watch.js";
10
+ export * from "./gemini_embeddings.js";