@rundiffusion/ledger 0.1.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.
package/dist/git.d.ts ADDED
@@ -0,0 +1,47 @@
1
+ import type { LedgerConfig, RemoteRef } from './types.js';
2
+ export declare class CommandError extends Error {
3
+ readonly command: string;
4
+ readonly stdout: string;
5
+ readonly stderr: string;
6
+ readonly status: number | null;
7
+ constructor(command: string, stdout: string, stderr: string, status: number | null);
8
+ }
9
+ interface RunOptions {
10
+ input?: string;
11
+ allowFailure?: boolean;
12
+ env?: NodeJS.ProcessEnv;
13
+ }
14
+ export interface RunResult {
15
+ stdout: string;
16
+ stderr: string;
17
+ status: number;
18
+ }
19
+ export declare function run(command: string, args: string[], cwd: string, options?: RunOptions): RunResult;
20
+ export declare function git(root: string, args: string[], options?: RunOptions): string;
21
+ export declare function gitResult(root: string, args: string[]): RunResult;
22
+ export declare function isGitRepository(root: string): boolean;
23
+ export declare function gitIdentity(root: string): string;
24
+ export declare function currentBranch(root: string): string;
25
+ export declare function headSha(root: string): string;
26
+ export declare function commitExists(root: string, sha: string): boolean;
27
+ export declare function isShallow(root: string): boolean;
28
+ export declare function fetchLedgerRefs(root: string, config: LedgerConfig): void;
29
+ export declare function fetchFullHistory(root: string, config: LedgerConfig): void;
30
+ export declare function fetchBranch(root: string, config: LedgerConfig, branch: string): string | null;
31
+ export declare function ensureCommit(root: string, config: LedgerConfig, sha: string, audit: boolean): boolean;
32
+ export declare function remoteRefs(root: string, config: LedgerConfig, prefix: string): RemoteRef[];
33
+ export declare function remoteRefSha(root: string, config: LedgerConfig, branch: string): string | null;
34
+ export declare function defaultSha(root: string, config: LedgerConfig): string;
35
+ export declare function createMetadataCommit(root: string, parent: string, subject: string, body?: string[]): string;
36
+ export declare function pushCreate(root: string, config: LedgerConfig, branch: string, sha: string): boolean;
37
+ export declare function pushCas(root: string, config: LedgerConfig, branch: string, expected: string, next: string): boolean;
38
+ export declare function deleteCas(root: string, config: LedgerConfig, branch: string, expected: string): boolean;
39
+ export declare function pushBranch(root: string, config: LedgerConfig, branch: string, sha: string): void;
40
+ export declare function createClaimWorktree(root: string, config: LedgerConfig, taskId: string): string;
41
+ export declare function tracked(root: string, relativePath: string): boolean;
42
+ export declare function changedLedgerFiles(root: string, config: LedgerConfig): string[];
43
+ export declare function changedCodeFiles(root: string, config: LedgerConfig): string[];
44
+ export declare function dirtyLedgerFiles(root: string): string[];
45
+ export declare function commitSubjects(root: string, config: LedgerConfig): string[];
46
+ export {};
47
+ //# sourceMappingURL=git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
package/dist/git.js ADDED
@@ -0,0 +1,260 @@
1
+ import { spawnSync } from 'node:child_process';
2
+ import fs from 'node:fs';
3
+ import path from 'node:path';
4
+ export class CommandError extends Error {
5
+ command;
6
+ stdout;
7
+ stderr;
8
+ status;
9
+ constructor(command, stdout, stderr, status) {
10
+ super(`${command} failed${stderr.trim() ? `: ${stderr.trim()}` : ''}`);
11
+ this.name = 'CommandError';
12
+ this.command = command;
13
+ this.stdout = stdout;
14
+ this.stderr = stderr;
15
+ this.status = status;
16
+ }
17
+ }
18
+ export function run(command, args, cwd, options = {}) {
19
+ const spawnOptions = {
20
+ cwd,
21
+ encoding: 'utf8',
22
+ stdio: ['pipe', 'pipe', 'pipe'],
23
+ env: options.env ?? process.env,
24
+ };
25
+ if (typeof options.input === 'string')
26
+ spawnOptions.input = options.input;
27
+ const result = spawnSync(command, args, spawnOptions);
28
+ if (result.error)
29
+ throw result.error;
30
+ const stdout = result.stdout ?? '';
31
+ const stderr = result.stderr ?? '';
32
+ const status = result.status ?? 1;
33
+ if (status !== 0 && !options.allowFailure) {
34
+ const printable = [command, ...args].map(value => JSON.stringify(value)).join(' ');
35
+ throw new CommandError(printable, stdout, stderr, result.status);
36
+ }
37
+ return { stdout, stderr, status };
38
+ }
39
+ export function git(root, args, options = {}) {
40
+ return run('git', args, root, options).stdout.trim();
41
+ }
42
+ export function gitResult(root, args) {
43
+ return run('git', args, root, { allowFailure: true });
44
+ }
45
+ export function isGitRepository(root) {
46
+ return gitResult(root, ['rev-parse', '--is-inside-work-tree']).status === 0;
47
+ }
48
+ export function gitIdentity(root) {
49
+ const name = git(root, ['config', '--get', 'user.name']);
50
+ const email = git(root, ['config', '--get', 'user.email']);
51
+ if (!name || !email)
52
+ throw new Error('Git user.name and user.email must be configured');
53
+ return `${name} <${email}>`;
54
+ }
55
+ export function currentBranch(root) {
56
+ return git(root, ['branch', '--show-current']);
57
+ }
58
+ export function headSha(root) {
59
+ return git(root, ['rev-parse', 'HEAD']);
60
+ }
61
+ export function commitExists(root, sha) {
62
+ return gitResult(root, ['cat-file', '-e', `${sha}^{commit}`]).status === 0;
63
+ }
64
+ export function isShallow(root) {
65
+ return git(root, ['rev-parse', '--is-shallow-repository']) === 'true';
66
+ }
67
+ export function fetchLedgerRefs(root, config) {
68
+ const base = `refs/remotes/${config.remote}`;
69
+ git(root, [
70
+ 'fetch',
71
+ '--prune',
72
+ config.remote,
73
+ `+refs/heads/${config.default_branch}:${base}/${config.default_branch}`,
74
+ `+refs/heads/work/*:${base}/work/*`,
75
+ `+refs/heads/handoff/*:${base}/handoff/*`,
76
+ `+refs/heads/archive/work/*:${base}/archive/work/*`,
77
+ ]);
78
+ }
79
+ export function fetchFullHistory(root, config) {
80
+ if (isShallow(root))
81
+ git(root, ['fetch', '--unshallow', config.remote]);
82
+ else
83
+ git(root, ['fetch', config.remote, '--tags']);
84
+ fetchLedgerRefs(root, config);
85
+ }
86
+ export function fetchBranch(root, config, branch) {
87
+ const destination = `refs/remotes/${config.remote}/${branch}`;
88
+ const result = gitResult(root, [
89
+ 'fetch',
90
+ '--no-tags',
91
+ config.remote,
92
+ `+refs/heads/${branch}:${destination}`,
93
+ ]);
94
+ if (result.status !== 0)
95
+ return null;
96
+ const resolved = gitResult(root, ['rev-parse', '--verify', destination]);
97
+ return resolved.status === 0 ? resolved.stdout.trim() : null;
98
+ }
99
+ export function ensureCommit(root, config, sha, audit) {
100
+ if (commitExists(root, sha))
101
+ return true;
102
+ const direct = gitResult(root, ['fetch', '--no-tags', '--depth=1', config.remote, sha]);
103
+ if (direct.status === 0 && commitExists(root, sha))
104
+ return true;
105
+ for (const depth of [50, 200, 1000]) {
106
+ const result = gitResult(root, ['fetch', `--deepen=${depth}`, config.remote]);
107
+ if (result.status === 0 && commitExists(root, sha))
108
+ return true;
109
+ }
110
+ if (audit && isShallow(root)) {
111
+ const result = gitResult(root, ['fetch', '--unshallow', config.remote]);
112
+ if (result.status === 0 && commitExists(root, sha))
113
+ return true;
114
+ }
115
+ return false;
116
+ }
117
+ export function remoteRefs(root, config, prefix) {
118
+ const namespace = `refs/remotes/${config.remote}/${prefix}`;
119
+ const output = git(root, [
120
+ 'for-each-ref',
121
+ '--format=%(refname:short)%09%(objectname)%09%(committerdate:iso-strict)%09%(subject)%09%(authorname)',
122
+ namespace,
123
+ ]);
124
+ if (!output)
125
+ return [];
126
+ return output.split('\n').map(line => {
127
+ const [short = '', sha = '', date = '', subject = '', author = ''] = line.split('\t');
128
+ const remotePrefix = `${config.remote}/`;
129
+ return {
130
+ name: short.startsWith(remotePrefix) ? short.slice(remotePrefix.length) : short,
131
+ sha,
132
+ date,
133
+ subject,
134
+ author,
135
+ };
136
+ });
137
+ }
138
+ export function remoteRefSha(root, config, branch) {
139
+ const ref = `refs/remotes/${config.remote}/${branch}`;
140
+ const result = gitResult(root, ['rev-parse', '--verify', ref]);
141
+ return result.status === 0 ? result.stdout.trim() : null;
142
+ }
143
+ export function defaultSha(root, config) {
144
+ const sha = remoteRefSha(root, config, config.default_branch);
145
+ if (!sha)
146
+ throw new Error(`Missing fetched ${config.remote}/${config.default_branch}`);
147
+ return sha;
148
+ }
149
+ export function createMetadataCommit(root, parent, subject, body = []) {
150
+ const tree = git(root, ['rev-parse', `${parent}^{tree}`]);
151
+ const message = `${subject}\n${body.length ? `\n${body.join('\n')}\n` : ''}`;
152
+ return run('git', ['commit-tree', tree, '-p', parent], root, { input: message }).stdout.trim();
153
+ }
154
+ export function pushCreate(root, config, branch, sha) {
155
+ const ref = `refs/heads/${branch}`;
156
+ const result = gitResult(root, [
157
+ 'push',
158
+ `--force-with-lease=${ref}:`,
159
+ config.remote,
160
+ `${sha}:${ref}`,
161
+ ]);
162
+ return result.status === 0;
163
+ }
164
+ export function pushCas(root, config, branch, expected, next) {
165
+ const ref = `refs/heads/${branch}`;
166
+ const result = gitResult(root, [
167
+ 'push',
168
+ `--force-with-lease=${ref}:${expected}`,
169
+ config.remote,
170
+ `${next}:${ref}`,
171
+ ]);
172
+ return result.status === 0;
173
+ }
174
+ export function deleteCas(root, config, branch, expected) {
175
+ return pushCas(root, config, branch, expected, '');
176
+ }
177
+ export function pushBranch(root, config, branch, sha) {
178
+ git(root, ['push', config.remote, `${sha}:refs/heads/${branch}`]);
179
+ }
180
+ export function createClaimWorktree(root, config, taskId) {
181
+ const branch = `work/${taskId}`;
182
+ const directory = path.join(root, '.worktrees', taskId);
183
+ if (fs.existsSync(directory))
184
+ throw new Error(`Worktree path already exists: ${directory}`);
185
+ fs.mkdirSync(path.dirname(directory), { recursive: true });
186
+ const localExists = gitResult(root, ['show-ref', '--verify', `refs/heads/${branch}`]).status === 0;
187
+ if (localExists)
188
+ throw new Error(`Local branch already exists: ${branch}`);
189
+ git(root, [
190
+ 'worktree',
191
+ 'add',
192
+ '--track',
193
+ '-b',
194
+ branch,
195
+ directory,
196
+ `${config.remote}/${branch}`,
197
+ ]);
198
+ return directory;
199
+ }
200
+ export function tracked(root, relativePath) {
201
+ return git(root, ['ls-files', '--', relativePath]).split('\n').includes(relativePath);
202
+ }
203
+ function changedFilesFromDefault(root, config, pathspec = []) {
204
+ const base = `refs/remotes/${config.remote}/${config.default_branch}`;
205
+ if (gitResult(root, ['rev-parse', '--verify', base]).status !== 0) {
206
+ if (!fetchBranch(root, config, config.default_branch)) {
207
+ throw new Error(`Cannot fetch ${config.remote}/${config.default_branch} for change detection`);
208
+ }
209
+ }
210
+ const args = ['diff', '--name-only', '--diff-filter=ACMR', `${base}...HEAD`, ...(pathspec.length ? ['--', ...pathspec] : [])];
211
+ let result = gitResult(root, args);
212
+ for (const depth of [50, 200, 1000]) {
213
+ if (result.status === 0)
214
+ break;
215
+ if (!isShallow(root))
216
+ break;
217
+ gitResult(root, ['fetch', `--deepen=${depth}`, '--no-tags', config.remote]);
218
+ result = gitResult(root, args);
219
+ }
220
+ if (result.status !== 0 && isShallow(root)) {
221
+ gitResult(root, ['fetch', '--unshallow', '--no-tags', config.remote]);
222
+ result = gitResult(root, args);
223
+ }
224
+ if (result.status !== 0) {
225
+ throw new Error(`Cannot compare HEAD with ${config.remote}/${config.default_branch}: ${result.stderr.trim() || 'Git diff failed'}`);
226
+ }
227
+ return result.stdout.trim().split('\n').filter(Boolean);
228
+ }
229
+ export function changedLedgerFiles(root, config) {
230
+ return changedFilesFromDefault(root, config, [
231
+ 'tasks',
232
+ 'shiplog',
233
+ 'plans',
234
+ 'accountability.config.json',
235
+ ]);
236
+ }
237
+ export function changedCodeFiles(root, config) {
238
+ return changedFilesFromDefault(root, config)
239
+ .filter(file => !/^(tasks|shiplog|plans|archive)\//.test(file))
240
+ .filter(file => !['accountability.config.json'].includes(file));
241
+ }
242
+ export function dirtyLedgerFiles(root) {
243
+ const output = git(root, [
244
+ 'status',
245
+ '--porcelain',
246
+ '--untracked-files=all',
247
+ '--',
248
+ 'tasks',
249
+ 'shiplog',
250
+ 'plans',
251
+ 'accountability.config.json',
252
+ ]);
253
+ return output ? output.split('\n') : [];
254
+ }
255
+ export function commitSubjects(root, config) {
256
+ const base = `refs/remotes/${config.remote}/${config.default_branch}`;
257
+ const result = gitResult(root, ['log', '--format=%B%x00', `${base}..HEAD`]);
258
+ return result.status === 0 ? result.stdout.split('\0').filter(Boolean) : [];
259
+ }
260
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { Finding, LedgerConfig, RemoteRef, ShiplogRecord, TaskRecord, ValidationResult } from './types.js';
2
+ export declare function loadTasks(root: string): TaskRecord[];
3
+ export declare function loadShiplogs(root: string): ShiplogRecord[];
4
+ interface ValidateOptions {
5
+ audit?: boolean;
6
+ hygiene?: boolean;
7
+ ci?: boolean;
8
+ verifyProvenance?: boolean;
9
+ }
10
+ export declare function validateLedger(root: string, config: LedgerConfig, options?: ValidateOptions): ValidationResult;
11
+ export declare function claimMap(root: string, config: LedgerConfig): Map<string, RemoteRef>;
12
+ export declare function pendingByTask(shiplogs: ShiplogRecord[]): Map<string, ShiplogRecord>;
13
+ export declare function eligibleTasks(tasks: TaskRecord[], shiplogs: ShiplogRecord[], claims: Map<string, RemoteRef>): TaskRecord[];
14
+ export declare function derivedState(task: TaskRecord, claims: Map<string, RemoteRef>, pending: Map<string, ShiplogRecord>): string;
15
+ export declare function nextTaskId(tasks: TaskRecord[], config: LedgerConfig, now?: Date): string;
16
+ export declare function trackedReferenceFindings(root: string, record: TaskRecord): Finding[];
17
+ export {};
18
+ //# sourceMappingURL=ledger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../src/ledger.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,OAAO,EAEP,YAAY,EACZ,SAAS,EACT,aAAa,EACb,UAAU,EACV,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAiDpB,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,EAAE,CAoBpD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAgB1D;AA0LD,UAAU,eAAe;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,YAAY,EACpB,OAAO,GAAE,eAAoB,GAC5B,gBAAgB,CAyClB;AA0DD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAEnF;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAOnF;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,UAAU,EAAE,EACnB,QAAQ,EAAE,aAAa,EAAE,EACzB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,GAC7B,UAAU,EAAE,CAYd;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,EAC9B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,GAClC,MAAM,CAKR;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,OAAa,GAAG,MAAM,CAU9F;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,EAAE,CAQpF"}