@omnitype-code/journal 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/dist/blame/legacy.d.ts +24 -0
  2. package/dist/blame/legacy.d.ts.map +1 -0
  3. package/dist/blame/legacy.js +219 -0
  4. package/dist/blame/legacy.js.map +1 -0
  5. package/dist/blame/merge.d.ts +17 -0
  6. package/dist/blame/merge.d.ts.map +1 -0
  7. package/dist/blame/merge.js +32 -0
  8. package/dist/blame/merge.js.map +1 -0
  9. package/dist/cli.d.ts +7 -0
  10. package/dist/cli.d.ts.map +1 -0
  11. package/dist/cli.js +638 -0
  12. package/dist/cli.js.map +1 -0
  13. package/dist/cloud/anchor.d.ts +78 -0
  14. package/dist/cloud/anchor.d.ts.map +1 -0
  15. package/dist/cloud/anchor.js +220 -0
  16. package/dist/cloud/anchor.js.map +1 -0
  17. package/dist/cloud/pending.d.ts +29 -0
  18. package/dist/cloud/pending.d.ts.map +1 -0
  19. package/dist/cloud/pending.js +115 -0
  20. package/dist/cloud/pending.js.map +1 -0
  21. package/dist/cloud/shipper.d.ts +67 -0
  22. package/dist/cloud/shipper.d.ts.map +1 -0
  23. package/dist/cloud/shipper.js +177 -0
  24. package/dist/cloud/shipper.js.map +1 -0
  25. package/dist/crypto/chain.d.ts +19 -0
  26. package/dist/crypto/chain.d.ts.map +1 -0
  27. package/dist/crypto/chain.js +123 -0
  28. package/dist/crypto/chain.js.map +1 -0
  29. package/dist/daemon/journal.d.ts +92 -0
  30. package/dist/daemon/journal.d.ts.map +1 -0
  31. package/dist/daemon/journal.js +370 -0
  32. package/dist/daemon/journal.js.map +1 -0
  33. package/dist/daemon/server.d.ts +89 -0
  34. package/dist/daemon/server.d.ts.map +1 -0
  35. package/dist/daemon/server.js +323 -0
  36. package/dist/daemon/server.js.map +1 -0
  37. package/dist/index.d.ts +8 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +9 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/log/segment.d.ts +43 -0
  42. package/dist/log/segment.d.ts.map +1 -0
  43. package/dist/log/segment.js +180 -0
  44. package/dist/log/segment.js.map +1 -0
  45. package/dist/materializer/db.d.ts +47 -0
  46. package/dist/materializer/db.d.ts.map +1 -0
  47. package/dist/materializer/db.js +385 -0
  48. package/dist/materializer/db.js.map +1 -0
  49. package/dist/notes/git-notes.d.ts +50 -0
  50. package/dist/notes/git-notes.d.ts.map +1 -0
  51. package/dist/notes/git-notes.js +94 -0
  52. package/dist/notes/git-notes.js.map +1 -0
  53. package/dist/schema/events.d.ts +224 -0
  54. package/dist/schema/events.d.ts.map +1 -0
  55. package/dist/schema/events.js +10 -0
  56. package/dist/schema/events.js.map +1 -0
  57. package/dist/security/developer-identity.d.ts +35 -0
  58. package/dist/security/developer-identity.d.ts.map +1 -0
  59. package/dist/security/developer-identity.js +105 -0
  60. package/dist/security/developer-identity.js.map +1 -0
  61. package/dist/security/keychain.d.ts +20 -0
  62. package/dist/security/keychain.d.ts.map +1 -0
  63. package/dist/security/keychain.js +167 -0
  64. package/dist/security/keychain.js.map +1 -0
  65. package/dist/verify/chain-verify.d.ts +43 -0
  66. package/dist/verify/chain-verify.d.ts.map +1 -0
  67. package/dist/verify/chain-verify.js +119 -0
  68. package/dist/verify/chain-verify.js.map +1 -0
  69. package/package.json +47 -0
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Legacy provenance sources for backward compatibility with v1:
3
+ * - `.omnitype/.omni` (and root `.omni` fallback)
4
+ * - Git notes at refs/notes/ai (v1 per-line ranges)
5
+ *
6
+ * Used by `omnitype-daemon blame` to fill lines that have no v2 journal span yet.
7
+ */
8
+ export type LegacyOrigin = 'ai' | 'user' | 'paste' | 'existing';
9
+ export interface LegacyLineInfo {
10
+ origin: LegacyOrigin;
11
+ model?: string;
12
+ tool?: string;
13
+ source: 'omni' | 'git-note';
14
+ }
15
+ /** Merge .omni + git notes into a 1-indexed line → LegacyLineInfo map. */
16
+ export declare function resolveLegacyLineMap(repoPath: string, relPath: string, absPath: string): Map<number, LegacyLineInfo>;
17
+ export interface GitBlameLine {
18
+ lineNum: number;
19
+ shortSha: string;
20
+ author: string;
21
+ }
22
+ /** Parse `git blame --line-porcelain` for commit author + sha per line. */
23
+ export declare function parseGitBlamePorcelain(raw: string): GitBlameLine[];
24
+ //# sourceMappingURL=legacy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacy.d.ts","sourceRoot":"","sources":["../../src/blame/legacy.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;AAEhE,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC;CAC7B;AA+LD,0EAA0E;AAC1E,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAoB7B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,2EAA2E;AAC3E,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,EAAE,CA8BlE"}
@@ -0,0 +1,219 @@
1
+ /**
2
+ * Legacy provenance sources for backward compatibility with v1:
3
+ * - `.omnitype/.omni` (and root `.omni` fallback)
4
+ * - Git notes at refs/notes/ai (v1 per-line ranges)
5
+ *
6
+ * Used by `omnitype-daemon blame` to fill lines that have no v2 journal span yet.
7
+ */
8
+ import { execFileSync } from 'node:child_process';
9
+ import { existsSync, readFileSync } from 'node:fs';
10
+ import { join } from 'node:path';
11
+ const ORIGIN_PREC = { existing: 0, user: 1, paste: 2, ai: 3 };
12
+ const ORIGIN_DECODE = ['existing', 'user', 'ai', 'paste'];
13
+ const MIN_HINT_CHARLEN = 8;
14
+ const NOTES_REF = 'refs/notes/ai';
15
+ function fnv1a(s) {
16
+ const canonical = s.trim();
17
+ let h = 2166136261 >>> 0;
18
+ for (let i = 0; i < canonical.length; i++) {
19
+ h = (h ^ canonical.charCodeAt(i)) >>> 0;
20
+ h = Math.imul(h, 16777619) >>> 0;
21
+ }
22
+ return h;
23
+ }
24
+ function getBranch(repoPath) {
25
+ try {
26
+ return execFileSync('git', ['-C', repoPath, 'rev-parse', '--abbrev-ref', 'HEAD'], {
27
+ encoding: 'utf-8',
28
+ stdio: ['pipe', 'pipe', 'ignore'],
29
+ }).trim();
30
+ }
31
+ catch {
32
+ return 'main';
33
+ }
34
+ }
35
+ function readOmniDisk(repoPath) {
36
+ const paths = [
37
+ join(repoPath, '.omnitype', '.omni'),
38
+ join(repoPath, '.omni'),
39
+ ];
40
+ for (const p of paths) {
41
+ if (!existsSync(p))
42
+ continue;
43
+ try {
44
+ return JSON.parse(readFileSync(p, 'utf-8'));
45
+ }
46
+ catch { /* skip */ }
47
+ }
48
+ return null;
49
+ }
50
+ function lineMapFromOmni(repoPath, branch, relPath, currentLines) {
51
+ const result = new Map();
52
+ const disk = readOmniDisk(repoPath);
53
+ if (!disk)
54
+ return result;
55
+ const branchData = disk[branch] ?? disk[Object.keys(disk)[0]];
56
+ if (!branchData)
57
+ return result;
58
+ const stored = branchData['/' + relPath] ?? branchData[relPath];
59
+ if (!stored)
60
+ return result;
61
+ const storedHashes = stored.hashes;
62
+ const currentHashes = currentLines.map((l) => fnv1a(l));
63
+ const m = storedHashes.length;
64
+ const n = currentHashes.length;
65
+ const assign = (lineNum, idx) => {
66
+ const origin = ORIGIN_DECODE[stored.origins[idx] ?? 0] ?? 'existing';
67
+ if (origin === 'existing')
68
+ return;
69
+ const modelId = stored.modelIds?.[idx] ?? -1;
70
+ const toolId = stored.toolIds?.[idx] ?? -1;
71
+ result.set(lineNum, {
72
+ origin,
73
+ model: modelId >= 0 ? stored.modelDictionary?.[modelId] : undefined,
74
+ tool: toolId >= 0 ? stored.toolDictionary?.[toolId] : undefined,
75
+ source: 'omni',
76
+ });
77
+ };
78
+ if (m > 3000 || n > 3000) {
79
+ const hashToIdx = new Map();
80
+ for (let i = 0; i < m; i++)
81
+ hashToIdx.set(storedHashes[i], i);
82
+ currentLines.forEach((line, idx) => {
83
+ const si = hashToIdx.get(currentHashes[idx]);
84
+ if (si !== undefined)
85
+ assign(idx + 1, si);
86
+ });
87
+ return result;
88
+ }
89
+ const t = Array.from({ length: m + 1 }, () => new Array(n + 1).fill(0));
90
+ for (let i = 1; i <= m; i++) {
91
+ for (let j = 1; j <= n; j++) {
92
+ t[i][j] = storedHashes[i - 1] === currentHashes[j - 1]
93
+ ? t[i - 1][j - 1] + 1
94
+ : Math.max(t[i - 1][j], t[i][j - 1]);
95
+ }
96
+ }
97
+ let i = m;
98
+ let j = n;
99
+ while (i > 0 && j > 0) {
100
+ if (storedHashes[i - 1] === currentHashes[j - 1] && t[i][j] === t[i - 1][j - 1] + 1) {
101
+ assign(j, i - 1);
102
+ i--;
103
+ j--;
104
+ }
105
+ else if ((t[i - 1][j] ?? 0) >= (t[i][j - 1] ?? 0)) {
106
+ i--;
107
+ }
108
+ else {
109
+ j--;
110
+ }
111
+ }
112
+ return result;
113
+ }
114
+ function readV1GitNote(repoPath, commitSha) {
115
+ try {
116
+ const out = execFileSync('git', ['-C', repoPath, 'notes', '--ref', NOTES_REF, 'show', commitSha], { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'ignore'] }).trim();
117
+ const parsed = JSON.parse(out);
118
+ if (parsed?.v === 1 && parsed?.tool === 'omnitype' && parsed.files) {
119
+ return { files: parsed.files };
120
+ }
121
+ return null;
122
+ }
123
+ catch {
124
+ return null;
125
+ }
126
+ }
127
+ function lineMapFromGitNotes(repoPath, relPath, currentLines, maxCommits = 50) {
128
+ const result = new Map();
129
+ let ranges;
130
+ try {
131
+ const log = execFileSync('git', ['-C', repoPath, 'log', '--format=%H', `-${maxCommits}`], { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'ignore'] })
132
+ .trim()
133
+ .split('\n')
134
+ .filter(Boolean);
135
+ for (const sha of log) {
136
+ const note = readV1GitNote(repoPath, sha);
137
+ const fileData = note?.files[relPath] ?? note?.files['/' + relPath];
138
+ if (fileData) {
139
+ ranges = fileData;
140
+ break;
141
+ }
142
+ }
143
+ }
144
+ catch {
145
+ return result;
146
+ }
147
+ if (!ranges)
148
+ return result;
149
+ for (const r of ranges) {
150
+ if (r.origin === 'existing')
151
+ continue;
152
+ for (let ln = r.start; ln <= r.end; ln++) {
153
+ const content = currentLines[ln - 1];
154
+ if (content === undefined || content.trim().length < MIN_HINT_CHARLEN)
155
+ continue;
156
+ const prev = result.get(ln);
157
+ if (!prev || ORIGIN_PREC[r.origin] > ORIGIN_PREC[prev.origin]) {
158
+ result.set(ln, { origin: r.origin, model: r.model, tool: r.tool, source: 'git-note' });
159
+ }
160
+ }
161
+ }
162
+ return result;
163
+ }
164
+ /** Merge .omni + git notes into a 1-indexed line → LegacyLineInfo map. */
165
+ export function resolveLegacyLineMap(repoPath, relPath, absPath) {
166
+ let currentLines;
167
+ try {
168
+ currentLines = readFileSync(absPath, 'utf-8').split('\n');
169
+ }
170
+ catch {
171
+ return new Map();
172
+ }
173
+ const branch = getBranch(repoPath);
174
+ const fromOmni = lineMapFromOmni(repoPath, branch, relPath, currentLines);
175
+ const fromNotes = lineMapFromGitNotes(repoPath, relPath, currentLines);
176
+ const merged = new Map(fromOmni);
177
+ for (const [lineNum, info] of fromNotes) {
178
+ const prev = merged.get(lineNum);
179
+ if (!prev || ORIGIN_PREC[info.origin] > ORIGIN_PREC[prev.origin]) {
180
+ merged.set(lineNum, info);
181
+ }
182
+ }
183
+ return merged;
184
+ }
185
+ /** Parse `git blame --line-porcelain` for commit author + sha per line. */
186
+ export function parseGitBlamePorcelain(raw) {
187
+ const lines = raw.split('\n');
188
+ const result = [];
189
+ const cache = new Map();
190
+ let i = 0;
191
+ while (i < lines.length) {
192
+ const header = lines[i];
193
+ if (!header || header.length < 40) {
194
+ i++;
195
+ continue;
196
+ }
197
+ const sha = header.slice(0, 40);
198
+ const parts = header.split(' ');
199
+ const lineNum = parseInt(parts[2] ?? parts[1] ?? '', 10);
200
+ if (Number.isNaN(lineNum)) {
201
+ i++;
202
+ continue;
203
+ }
204
+ let author = cache.get(sha) ?? '';
205
+ i++;
206
+ while (i < lines.length && !lines[i].startsWith('\t')) {
207
+ const l = lines[i];
208
+ if (l.startsWith('author ') && !author)
209
+ author = l.slice(7).trim();
210
+ i++;
211
+ }
212
+ if (!cache.has(sha))
213
+ cache.set(sha, author);
214
+ i++;
215
+ result.push({ lineNum, shortSha: sha.slice(0, 7), author });
216
+ }
217
+ return result;
218
+ }
219
+ //# sourceMappingURL=legacy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacy.js","sourceRoot":"","sources":["../../src/blame/legacy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { LegacyLineInfo } from './legacy.js';
2
+ export type BlameOrigin = 'ai' | 'user' | 'paste' | 'tool' | 'existing' | 'unknown' | 'external';
3
+ export interface MergedLineInfo {
4
+ origin: BlameOrigin;
5
+ tool: string;
6
+ model?: string;
7
+ tier: string;
8
+ confidence: number;
9
+ source: 'journal' | 'omni' | 'git-note' | 'git' | '—';
10
+ }
11
+ export declare function mergeLineAttribution(journal: {
12
+ origin: string;
13
+ tool: string;
14
+ tier: string;
15
+ confidence: number;
16
+ } | undefined, legacy: LegacyLineInfo | undefined): MergedLineInfo;
17
+ //# sourceMappingURL=merge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/blame/merge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,CAAC;AAEjG,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,UAAU,GAAG,KAAK,GAAG,GAAG,CAAC;CACvD;AAID,wBAAgB,oBAAoB,CAClC,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,EACvF,MAAM,EAAE,cAAc,GAAG,SAAS,GACjC,cAAc,CAgChB"}
@@ -0,0 +1,32 @@
1
+ const JOURNAL_KNOWN = new Set(['ai', 'user', 'paste', 'tool']);
2
+ export function mergeLineAttribution(journal, legacy) {
3
+ const jOrigin = journal?.origin ?? 'unknown';
4
+ const journalKnown = JOURNAL_KNOWN.has(jOrigin);
5
+ if (journalKnown) {
6
+ return {
7
+ origin: jOrigin,
8
+ tool: journal.tool,
9
+ tier: journal.tier,
10
+ confidence: journal.confidence,
11
+ source: 'journal',
12
+ };
13
+ }
14
+ if (legacy && legacy.origin !== 'existing') {
15
+ return {
16
+ origin: legacy.origin,
17
+ tool: legacy.tool ?? '',
18
+ model: legacy.model,
19
+ tier: ' ',
20
+ confidence: 0,
21
+ source: legacy.source,
22
+ };
23
+ }
24
+ return {
25
+ origin: journalKnown ? jOrigin : 'unknown',
26
+ tool: journal?.tool ?? '',
27
+ tier: journal?.tier ?? ' ',
28
+ confidence: journal?.confidence ?? 0,
29
+ source: '—',
30
+ };
31
+ }
32
+ //# sourceMappingURL=merge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/blame/merge.ts"],"names":[],"mappings":"AAaA,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAE/D,MAAM,UAAU,oBAAoB,CAClC,OAAuF,EACvF,MAAkC;IAElC,MAAM,OAAO,GAAG,OAAO,EAAE,MAAM,IAAI,SAAS,CAAC;IAC7C,MAAM,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAEhD,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO;YACL,MAAM,EAAE,OAAsB;YAC9B,IAAI,EAAE,OAAQ,CAAC,IAAI;YACnB,IAAI,EAAE,OAAQ,CAAC,IAAI;YACnB,UAAU,EAAE,OAAQ,CAAC,UAAU;YAC/B,MAAM,EAAE,SAAS;SAClB,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAC3C,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE;YACvB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,IAAI,EAAE,IAAI;YACV,UAAU,EAAE,CAAC;YACb,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,MAAM,EAAE,YAAY,CAAC,CAAC,CAAE,OAAuB,CAAC,CAAC,CAAC,SAAS;QAC3D,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,EAAE;QACzB,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,IAAI;QAC3B,UAAU,EAAE,OAAO,EAAE,UAAU,IAAI,CAAC;QACpC,MAAM,EAAE,GAAG;KACZ,CAAC;AACJ,CAAC"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * omnitype-daemon CLI
4
+ * Commands: start, stop, status, health, doctor, blame
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;GAGG"}