trajectories 0.0.0 → 0.1.1
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 +23 -0
- package/LICENSE +201 -0
- package/README.md +274 -2
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +8542 -0
- package/dist/convert.d.ts +31 -0
- package/dist/convert.js +431 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +8402 -0
- package/dist/log-baseline.d.ts +26 -0
- package/dist/log-baseline.js +104 -0
- package/dist/log-content.d.ts +16 -0
- package/dist/log-content.js +80 -0
- package/dist/log-io.d.ts +10 -0
- package/dist/log-io.js +121 -0
- package/dist/log-read.d.ts +24 -0
- package/dist/log-read.js +117 -0
- package/dist/log-reconcile.d.ts +5 -0
- package/dist/log-reconcile.js +38 -0
- package/dist/log-records.d.ts +35 -0
- package/dist/log-records.js +85 -0
- package/dist/log-recovery.d.ts +18 -0
- package/dist/log-recovery.js +123 -0
- package/dist/log-stage.d.ts +14 -0
- package/dist/log-stage.js +138 -0
- package/dist/log-state.d.ts +89 -0
- package/dist/log-state.js +92 -0
- package/dist/log-switch.d.ts +3 -0
- package/dist/log-switch.js +98 -0
- package/dist/log-types.d.ts +129 -0
- package/dist/log-types.js +8 -0
- package/dist/log.d.ts +8 -0
- package/dist/log.js +62 -0
- package/dist/migrate.d.ts +29 -0
- package/dist/migrate.js +173 -0
- package/dist/normalization-runtime.d.ts +1 -0
- package/dist/normalization-runtime.js +3150 -0
- package/dist/portable.d.ts +9 -0
- package/dist/portable.js +26 -0
- package/dist/readers/canonical.d.ts +13 -0
- package/dist/readers/canonical.js +54 -0
- package/dist/readers/cline.d.ts +10 -0
- package/dist/readers/cline.js +107 -0
- package/dist/readers/cursor.d.ts +20 -0
- package/dist/readers/cursor.js +374 -0
- package/dist/readers/deepagents.d.ts +41 -0
- package/dist/readers/deepagents.js +163 -0
- package/dist/readers/fx.d.ts +11 -0
- package/dist/readers/fx.js +573 -0
- package/dist/readers/github-copilot.d.ts +8 -0
- package/dist/readers/github-copilot.js +216 -0
- package/dist/readers/grok-build.d.ts +12 -0
- package/dist/readers/grok-build.js +391 -0
- package/dist/readers/guards.d.ts +4 -0
- package/dist/readers/guards.js +121 -0
- package/dist/readers/pi-compaction.d.ts +7 -0
- package/dist/readers/pi-compaction.js +112 -0
- package/dist/readers/pi-context.d.ts +13 -0
- package/dist/readers/pi-context.js +64 -0
- package/dist/store.d.ts +25 -0
- package/dist/store.js +218 -0
- package/dist/types.d.ts +91 -0
- package/dist/types.js +1 -0
- package/dist/writers/claude-code.d.ts +5 -0
- package/dist/writers/claude-code.js +51 -0
- package/dist/writers/cline.d.ts +3 -0
- package/dist/writers/cline.js +77 -0
- package/dist/writers/codex.d.ts +3 -0
- package/dist/writers/codex.js +32 -0
- package/dist/writers/cursor.d.ts +3 -0
- package/dist/writers/cursor.js +197 -0
- package/dist/writers/deepagents.d.ts +3 -0
- package/dist/writers/deepagents.js +116 -0
- package/dist/writers/entropy.d.ts +5 -0
- package/dist/writers/entropy.js +33 -0
- package/dist/writers/fx.d.ts +3 -0
- package/dist/writers/fx.js +135 -0
- package/dist/writers/github-copilot.d.ts +3 -0
- package/dist/writers/github-copilot.js +71 -0
- package/dist/writers/grok-build.d.ts +3 -0
- package/dist/writers/grok-build.js +43 -0
- package/dist/writers/helpers.d.ts +17 -0
- package/dist/writers/helpers.js +75 -0
- package/dist/writers/omp.d.ts +3 -0
- package/dist/writers/omp.js +7 -0
- package/dist/writers/opencode.d.ts +3 -0
- package/dist/writers/opencode.js +65 -0
- package/dist/writers/pi.d.ts +3 -0
- package/dist/writers/pi.js +45 -0
- package/docs/cline-native-format.md +43 -0
- package/docs/copilot-native-format.md +78 -0
- package/docs/cursor-native-format.md +103 -0
- package/docs/deepagents-native-format.md +98 -0
- package/docs/evidence-api.md +170 -0
- package/docs/fx-native-format.md +87 -0
- package/docs/harness-parity-bootstrap.md +78 -0
- package/docs/harness-support-parity.md +107 -0
- package/docs/inspirations.md +103 -0
- package/docs/ledger-migration.md +141 -0
- package/docs/pi-compaction-context.md +75 -0
- package/docs/pi-provider-context.md +76 -0
- package/docs/research/2026-10-06-huihua-and-oar.md +176 -0
- package/docs/research/ledger/README.md +96 -0
- package/docs/research/ledger/confer/2026-09-13-round-10/README.md +61 -0
- package/docs/research/ledger/confer/2026-09-13-round-2/cass.md +72 -0
- package/docs/research/ledger/confer/2026-09-13-round-3/README.md +70 -0
- package/docs/research/ledger/confer/2026-09-13-round-5/README.md +61 -0
- package/docs/research/ledger/confer/2026-09-13-round-6/README.md +68 -0
- package/docs/research/ledger/confer/2026-09-13-round-7/README.md +64 -0
- package/docs/research/ledger/confer/2026-09-13-round-9/README.md +59 -0
- package/docs/research/ledger/confer/2026-09-14-wake/wake.md +146 -0
- package/docs/research/ledger/docs/inspirations.md +320 -0
- package/docs/research/ledger/docs/pr2-pr6-integration.md +53 -0
- package/docs/research/ledger/docs/research/2026-09-07-confer-inspirations.md +163 -0
- package/docs/research/ledger/docs/research/2026-09-07-letta-continuous-service.md +104 -0
- package/docs/research/ledger/docs/research/2026-09-08-claude-history-retrieval.md +117 -0
- package/docs/research/ledger/docs/research/2026-09-09-agentsview-native-discovery.md +87 -0
- package/docs/research/ledger/docs/research/2026-09-09-daemon-observation.md +231 -0
- package/docs/research/ledger/docs/research/2026-09-09-discovery-pagination.md +114 -0
- package/docs/research/ledger/docs/research/2026-09-09-harness-transcript-contract.md +145 -0
- package/docs/research/ledger/docs/research/2026-09-09-native-history-discovery.md +180 -0
- package/docs/research/ledger/docs/research/2026-09-09-native-history-implementation.md +137 -0
- package/docs/research/ledger/docs/research/2026-09-09-other-inspirations.md +279 -0
- package/docs/research/ledger/docs/research/2026-09-09-trajectory-and-letta-code.md +128 -0
- package/docs/research/ledger/docs/research/2026-09-13-diagnostics-coverage.md +116 -0
- package/docs/research/ledger/docs/research/2026-09-13-fts-rebuild.md +83 -0
- package/docs/research/ledger/docs/research/2026-09-13-read-path-split.md +74 -0
- package/docs/research/ledger/docs/research/2026-09-13-runtime-rollout.md +102 -0
- package/docs/research/ledger/docs/research/2026-09-13-scan-outcomes.md +80 -0
- package/docs/research/ledger/docs/research/2026-09-13-search-quality.md +105 -0
- package/docs/research/ledger/docs/research/2026-09-13-source-coverage.md +64 -0
- package/docs/research/ledger/docs/research/2026-09-13-sync-wall-budget.md +82 -0
- package/docs/research/ledger/docs/research/2026-09-13-typed-read-gate.md +81 -0
- package/docs/research/ledger/docs/research/2026-09-13-writer-lease.md +84 -0
- package/docs/research/ledger/docs/research/2026-09-16-c1-copy-fallback.md +227 -0
- package/docs/research/ledger/docs/research/2026-09-16-c10-kimi.md +414 -0
- package/docs/research/ledger/docs/research/2026-09-16-c2-derive-counter.md +216 -0
- package/docs/research/ledger/docs/research/2026-09-16-c3-echo-filter.md +305 -0
- package/docs/research/ledger/docs/research/2026-09-16-c4-title-index.md +349 -0
- package/docs/research/ledger/docs/research/2026-09-16-c5-trigram.md +268 -0
- package/docs/research/ledger/docs/research/2026-09-16-c6-recency-prior.md +438 -0
- package/docs/research/ledger/docs/research/2026-09-16-c7-tombstones.md +467 -0
- package/docs/research/ledger/docs/research/2026-09-16-c8-remote-truth.md +390 -0
- package/docs/research/ledger/docs/research/2026-09-16-c9-grok.md +380 -0
- package/docs/research/ledger/docs/research/2026-09-16-wake-port-program.md +38 -0
- package/docs/research/ledger/docs/research/2026-09-17-cursor-blobstore.md +157 -0
- package/docs/research/ledger/manifest.json +540 -0
- package/legacy/NOTICE.md +50 -0
- package/legacy/bin/ledger-core.ts +7 -0
- package/legacy/bin/ledger.ts +7 -0
- package/legacy/bin/traj-bridge.ts +7 -0
- package/legacy/scripts/import-claude-history.ts +130 -0
- package/legacy/scripts/native-history-smoke.ts +52 -0
- package/legacy/scripts/observe-daemon.ts +570 -0
- package/legacy/scripts/retitle-sessions.md +19 -0
- package/legacy/scripts/verify-runtime-rollout.ts +151 -0
- package/legacy/src/canonical.ts +108 -0
- package/legacy/src/cli.ts +1293 -0
- package/legacy/src/db.ts +2254 -0
- package/legacy/src/diagnostics.ts +87 -0
- package/legacy/src/discovery.ts +56 -0
- package/legacy/src/embeddings.ts +382 -0
- package/legacy/src/filter.ts +602 -0
- package/legacy/src/gemini_embeddings.ts +103 -0
- package/legacy/src/identity.ts +9 -0
- package/legacy/src/index.ts +10 -0
- package/legacy/src/ingest.ts +791 -0
- package/legacy/src/managed.ts +178 -0
- package/legacy/src/native/common.ts +68 -0
- package/legacy/src/native/cursor.ts +647 -0
- package/legacy/src/native/grok.ts +540 -0
- package/legacy/src/native/kimi.ts +706 -0
- package/legacy/src/native/opencode.ts +470 -0
- package/legacy/src/native/sqlite-ro.ts +281 -0
- package/legacy/src/native.ts +97 -0
- package/legacy/src/normalizer.ts +457 -0
- package/legacy/src/parentage.ts +562 -0
- package/legacy/src/pressure.ts +162 -0
- package/legacy/src/private-storage.ts +74 -0
- package/legacy/src/reader.ts +1255 -0
- package/legacy/src/scanner.ts +591 -0
- package/legacy/src/schema-gate.ts +263 -0
- package/legacy/src/schema.ts +829 -0
- package/legacy/src/semantic-top-k.ts +71 -0
- package/legacy/src/session-hash.ts +49 -0
- package/legacy/src/store-status.ts +218 -0
- package/legacy/src/sync-preparation.ts +45 -0
- package/legacy/src/sync-truth.ts +843 -0
- package/legacy/src/sync.ts +1219 -0
- package/legacy/src/types.ts +436 -0
- package/legacy/src/vocab.txt +30522 -0
- package/legacy/src/watch.ts +673 -0
- package/legacy/src/writer-lease.ts +310 -0
- package/ops/README.md +120 -0
- package/ops/install-cli.sh +63 -0
- package/ops/install-release.sh +49 -0
- package/ops/linux/install-systemd-user.sh +103 -0
- package/ops/macos/install-launchd.sh +72 -0
- package/ops/sync-settings.sh +37 -0
- package/package.json +19 -5
- package/skills/trajectories/SKILL.md +138 -0
- package/skills/trajectories/scripts/trajectories_recent.sh +26 -0
- package/skills/trajectories/scripts/trajectories_search.sh +26 -0
- 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";
|