@lannguyensi/harness 0.5.0 → 0.7.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 (86) hide show
  1. package/CHANGELOG.md +154 -0
  2. package/README.md +162 -120
  3. package/dist/cli/add/mutate.d.ts +4 -0
  4. package/dist/cli/add/mutate.js +30 -1
  5. package/dist/cli/add/mutate.js.map +1 -1
  6. package/dist/cli/adopt/derive.d.ts +23 -0
  7. package/dist/cli/adopt/derive.js +85 -0
  8. package/dist/cli/adopt/derive.js.map +1 -1
  9. package/dist/cli/adopt/index.d.ts +9 -1
  10. package/dist/cli/adopt/index.js +72 -4
  11. package/dist/cli/adopt/index.js.map +1 -1
  12. package/dist/cli/apply/apply.d.ts +45 -1
  13. package/dist/cli/apply/apply.js +237 -25
  14. package/dist/cli/apply/apply.js.map +1 -1
  15. package/dist/cli/apply/generate-settings.d.ts +13 -1
  16. package/dist/cli/apply/generate-settings.js +45 -0
  17. package/dist/cli/apply/generate-settings.js.map +1 -1
  18. package/dist/cli/apply/index.d.ts +1 -0
  19. package/dist/cli/apply/index.js +1 -0
  20. package/dist/cli/apply/index.js.map +1 -1
  21. package/dist/cli/apply/next-steps.d.ts +7 -0
  22. package/dist/cli/apply/next-steps.js +37 -0
  23. package/dist/cli/apply/next-steps.js.map +1 -0
  24. package/dist/cli/audit.js +2 -1
  25. package/dist/cli/audit.js.map +1 -1
  26. package/dist/cli/describe.d.ts +1 -1
  27. package/dist/cli/describe.js +2 -0
  28. package/dist/cli/describe.js.map +1 -1
  29. package/dist/cli/diff/since-apply.js +1 -1
  30. package/dist/cli/diff/since-apply.js.map +1 -1
  31. package/dist/cli/doctor/format.js +34 -3
  32. package/dist/cli/doctor/format.js.map +1 -1
  33. package/dist/cli/doctor/index.js +39 -3
  34. package/dist/cli/doctor/index.js.map +1 -1
  35. package/dist/cli/doctor/types.d.ts +14 -2
  36. package/dist/cli/explain.d.ts +10 -1
  37. package/dist/cli/explain.js +44 -18
  38. package/dist/cli/explain.js.map +1 -1
  39. package/dist/cli/index.js +140 -11
  40. package/dist/cli/index.js.map +1 -1
  41. package/dist/cli/list.d.ts +1 -1
  42. package/dist/cli/list.js +17 -0
  43. package/dist/cli/list.js.map +1 -1
  44. package/dist/cli/session-export/index.d.ts +46 -0
  45. package/dist/cli/session-export/index.js +169 -0
  46. package/dist/cli/session-export/index.js.map +1 -0
  47. package/dist/cli/session-export/redact.d.ts +22 -0
  48. package/dist/cli/session-export/redact.js +47 -0
  49. package/dist/cli/session-export/redact.js.map +1 -0
  50. package/dist/cli/session-export/transcript.d.ts +24 -0
  51. package/dist/cli/session-export/transcript.js +162 -0
  52. package/dist/cli/session-export/transcript.js.map +1 -0
  53. package/dist/cli/validate/index.d.ts +8 -0
  54. package/dist/cli/validate/index.js +37 -1
  55. package/dist/cli/validate/index.js.map +1 -1
  56. package/dist/io/harness-lock.d.ts +6 -1
  57. package/dist/io/harness-lock.js +2 -2
  58. package/dist/io/harness-lock.js.map +1 -1
  59. package/dist/io/merge-settings.d.ts +8 -0
  60. package/dist/io/merge-settings.js +47 -0
  61. package/dist/io/merge-settings.js.map +1 -0
  62. package/dist/policies/ledger-client.js +4 -2
  63. package/dist/policies/ledger-client.js.map +1 -1
  64. package/dist/policies/requires.js +3 -2
  65. package/dist/policies/requires.js.map +1 -1
  66. package/dist/probes/mcp.d.ts +13 -0
  67. package/dist/probes/mcp.js +27 -3
  68. package/dist/probes/mcp.js.map +1 -1
  69. package/dist/runtime/intercept.js +3 -2
  70. package/dist/runtime/intercept.js.map +1 -1
  71. package/dist/runtime/ledger-record.d.ts +8 -0
  72. package/dist/runtime/ledger-record.js +12 -3
  73. package/dist/runtime/ledger-record.js.map +1 -1
  74. package/dist/schema/audit.d.ts +71 -0
  75. package/dist/schema/audit.js +32 -0
  76. package/dist/schema/audit.js.map +1 -0
  77. package/dist/schema/index.d.ts +408 -0
  78. package/dist/schema/index.js +21 -0
  79. package/dist/schema/index.js.map +1 -1
  80. package/dist/schema/workflows.d.ts +519 -0
  81. package/dist/schema/workflows.js +81 -0
  82. package/dist/schema/workflows.js.map +1 -0
  83. package/dist/version.d.ts +1 -0
  84. package/dist/version.js +3 -0
  85. package/dist/version.js.map +1 -0
  86. package/package.json +1 -1
@@ -0,0 +1,169 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ import { parseLedgerTimestamp, queryLedgerByTag, } from "../../policies/index.js";
4
+ import { resolveSessionId } from "../../runtime/session-id.js";
5
+ import { EX_FAIL, EX_USAGE, HarnessExitError } from "../exit-codes.js";
6
+ import { loadManifest } from "../loader.js";
7
+ import { redactString, resolveRedactionRules } from "./redact.js";
8
+ import { locateTranscript, readTranscript, } from "./transcript.js";
9
+ export async function sessionExport(opts) {
10
+ const format = opts.format ?? "json";
11
+ if (format !== "json" && format !== "jsonl") {
12
+ throw new HarnessExitError(`unknown --format "${format}"; expected json or jsonl`, EX_USAGE);
13
+ }
14
+ const sessionId = resolveSessionId(opts.sessionId);
15
+ const { manifest } = loadManifest(opts);
16
+ const rules = resolveRedactionRules(manifest.audit.redact, {
17
+ ...(opts.env !== undefined ? { env: opts.env } : {}),
18
+ });
19
+ const transcriptResult = await loadTranscript(sessionId, opts);
20
+ const ledgerOutcome = await loadLedger(sessionId, manifest, opts);
21
+ if (!transcriptResult.path &&
22
+ transcriptResult.events.length === 0 &&
23
+ ledgerOutcome.entries.length === 0 &&
24
+ ledgerOutcome.status === "ok") {
25
+ throw new HarnessExitError(`no transcript or ledger entries for session "${sessionId}"`, EX_FAIL);
26
+ }
27
+ const events = mergeEvents(transcriptResult.events, ledgerOutcome.entries);
28
+ const header = {
29
+ id: sessionId,
30
+ cwd: transcriptResult.cwd,
31
+ startedAt: transcriptResult.startedAt,
32
+ endedAt: transcriptResult.endedAt,
33
+ transcriptPath: transcriptResult.path,
34
+ transcriptEvents: transcriptResult.events.length,
35
+ ledgerEntries: ledgerOutcome.entries.length,
36
+ ledgerStatus: ledgerOutcome.status,
37
+ ledgerNote: ledgerOutcome.note,
38
+ redactionRules: rules.length,
39
+ };
40
+ const rawOutput = format === "json"
41
+ ? `${JSON.stringify({ session: header, events }, null, 2)}\n`
42
+ : `${[
43
+ JSON.stringify({ kind: "session", ...header }),
44
+ ...events.map((e) => JSON.stringify(e)),
45
+ ].join("\n")}\n`;
46
+ const output = redactString(rawOutput, rules);
47
+ if (opts.outFile) {
48
+ fs.mkdirSync(path.dirname(path.resolve(opts.outFile)), { recursive: true });
49
+ fs.writeFileSync(opts.outFile, output, "utf8");
50
+ }
51
+ return { output, header, events };
52
+ }
53
+ async function loadTranscript(sessionId, opts) {
54
+ const locator = opts.locateTranscript ?? ((id) => {
55
+ const args = {};
56
+ if (opts.homeDir !== undefined)
57
+ args.homeDir = opts.homeDir;
58
+ if (opts.projectsRoot !== undefined)
59
+ args.projectsRoot = opts.projectsRoot;
60
+ return locateTranscript(id, args);
61
+ });
62
+ const reader = opts.readTranscript ?? readTranscript;
63
+ const file = locator(sessionId);
64
+ if (file === null) {
65
+ return { events: [], startedAt: null, endedAt: null, cwd: null, path: null };
66
+ }
67
+ const r = reader(file);
68
+ return {
69
+ events: r.events,
70
+ startedAt: r.startedAt,
71
+ endedAt: r.endedAt,
72
+ cwd: r.cwd,
73
+ path: file,
74
+ };
75
+ }
76
+ async function loadLedger(sessionId, manifest, opts) {
77
+ const fetcher = opts.fetchLedger ?? defaultLedgerFetcher(manifest);
78
+ if (fetcher === null) {
79
+ return {
80
+ entries: [],
81
+ status: "missing",
82
+ note: "grounding-mcp not declared in manifest; ledger join skipped",
83
+ };
84
+ }
85
+ const result = await fetcher(sessionId);
86
+ if (result.kind === "ok") {
87
+ return { entries: result.entries, status: "ok", note: null };
88
+ }
89
+ return { entries: [], status: "degraded", note: result.reason };
90
+ }
91
+ function defaultLedgerFetcher(manifest) {
92
+ const server = manifest.tools.mcp.find((m) => m.name === "grounding-mcp");
93
+ if (!server)
94
+ return null;
95
+ const command = Array.isArray(server.command)
96
+ ? server.command
97
+ : server.command.trim().split(/\s+/);
98
+ return async (sid) => queryLedgerByTag({
99
+ mcpCommand: command,
100
+ ...(server.env && { mcpEnv: server.env }),
101
+ sessionId: sid,
102
+ timeoutMs: server.health?.timeout_ms ?? 5_000,
103
+ });
104
+ }
105
+ function mergeEvents(transcript, ledger) {
106
+ const out = [];
107
+ transcript.forEach((e, i) => {
108
+ const data = { ...e.data };
109
+ if (e.uuid !== undefined)
110
+ data.uuid = e.uuid;
111
+ if (e.parentUuid !== undefined)
112
+ data.parentUuid = e.parentUuid;
113
+ if (e.cwd !== undefined)
114
+ data.cwd = e.cwd;
115
+ out.push({
116
+ source: "transcript",
117
+ kind: e.kind,
118
+ timestamp: e.timestamp,
119
+ seq: i,
120
+ data,
121
+ });
122
+ });
123
+ ledger.forEach((entry, i) => {
124
+ const ts = ledgerEntryIso(entry);
125
+ const data = {
126
+ id: entry.id,
127
+ content: entry.content,
128
+ };
129
+ if (entry.type !== undefined)
130
+ data.type = entry.type;
131
+ if (entry.source !== undefined)
132
+ data.tagSource = entry.source;
133
+ out.push({
134
+ source: "ledger",
135
+ kind: entry.type ?? "ledger_entry",
136
+ timestamp: ts,
137
+ seq: i,
138
+ data,
139
+ });
140
+ });
141
+ out.sort((a, b) => {
142
+ const at = a.timestamp ?? "";
143
+ const bt = b.timestamp ?? "";
144
+ if (at === bt) {
145
+ if (a.source !== b.source)
146
+ return a.source === "transcript" ? -1 : 1;
147
+ return a.seq - b.seq;
148
+ }
149
+ if (at === "")
150
+ return 1;
151
+ if (bt === "")
152
+ return -1;
153
+ return at < bt ? -1 : 1;
154
+ });
155
+ return out;
156
+ }
157
+ function ledgerEntryIso(entry) {
158
+ if (entry.createdAt instanceof Date)
159
+ return entry.createdAt.toISOString();
160
+ if (typeof entry.createdAt === "string") {
161
+ const parsed = parseLedgerTimestamp(entry.createdAt);
162
+ if (parsed === null)
163
+ return null;
164
+ return new Date(parsed * 1000).toISOString();
165
+ }
166
+ return null;
167
+ }
168
+ export { mergeEvents as mergeEventsForTesting };
169
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/session-export/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { RedactRule } from "../../schema/audit.js";
2
+ /**
3
+ * Default regex denylist — applied even when the manifest declares no
4
+ * `audit.redact[]`. Catches the four obvious patterns called out in the
5
+ * design discussion: token, secret, password, api_key. Conservative on
6
+ * purpose: matches `key: value` / `key=value` and replaces the value
7
+ * with `<REDACTED>`.
8
+ */
9
+ export declare const DEFAULT_REGEX_RULES: {
10
+ regex: string;
11
+ flags: string;
12
+ replacement: string;
13
+ }[];
14
+ export interface ResolvedRule {
15
+ pattern: RegExp;
16
+ replacement: string;
17
+ }
18
+ export interface ResolveRedactionOptions {
19
+ env?: NodeJS.ProcessEnv;
20
+ }
21
+ export declare function resolveRedactionRules(manifestRules: RedactRule[], opts?: ResolveRedactionOptions): ResolvedRule[];
22
+ export declare function redactString(input: string, rules: ResolvedRule[]): string;
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Default regex denylist — applied even when the manifest declares no
3
+ * `audit.redact[]`. Catches the four obvious patterns called out in the
4
+ * design discussion: token, secret, password, api_key. Conservative on
5
+ * purpose: matches `key: value` / `key=value` and replaces the value
6
+ * with `<REDACTED>`.
7
+ */
8
+ export const DEFAULT_REGEX_RULES = [
9
+ {
10
+ regex: "(token|secret|password|api[_-]?key)([\"']?\\s*[:=]\\s*[\"']?)[^\\s\"',}]+",
11
+ flags: "gi",
12
+ replacement: "$1$2<REDACTED>",
13
+ },
14
+ ];
15
+ export function resolveRedactionRules(manifestRules, opts = {}) {
16
+ const env = opts.env ?? process.env;
17
+ const out = [];
18
+ for (const def of DEFAULT_REGEX_RULES) {
19
+ out.push({ pattern: new RegExp(def.regex, def.flags), replacement: def.replacement });
20
+ }
21
+ for (const rule of manifestRules) {
22
+ if ("regex" in rule) {
23
+ out.push({ pattern: new RegExp(rule.regex, "g"), replacement: rule.replacement });
24
+ }
25
+ else {
26
+ const value = env[rule.env_var];
27
+ if (typeof value !== "string" || value.length === 0)
28
+ continue;
29
+ out.push({
30
+ pattern: new RegExp(escapeRegex(value), "g"),
31
+ replacement: rule.replacement,
32
+ });
33
+ }
34
+ }
35
+ return out;
36
+ }
37
+ function escapeRegex(literal) {
38
+ return literal.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
39
+ }
40
+ export function redactString(input, rules) {
41
+ let out = input;
42
+ for (const r of rules) {
43
+ out = out.replace(r.pattern, r.replacement);
44
+ }
45
+ return out;
46
+ }
47
+ //# sourceMappingURL=redact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redact.js","sourceRoot":"","sources":["../../../src/cli/session-export/redact.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAA4D;IAC1F;QACE,KAAK,EAAE,2EAA2E;QAClF,KAAK,EAAE,IAAI;QACX,WAAW,EAAE,gBAAgB;KAC9B;CACF,CAAC;AAWF,MAAM,UAAU,qBAAqB,CACnC,aAA2B,EAC3B,OAAgC,EAAE;IAElC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACpC,MAAM,GAAG,GAAmB,EAAE,CAAC;IAC/B,KAAK,MAAM,GAAG,IAAI,mBAAmB,EAAE,CAAC;QACtC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;IACxF,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;YACpB,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACpF,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAChC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAC9D,GAAG,CAAC,IAAI,CAAC;gBACP,OAAO,EAAE,IAAI,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC;gBAC5C,WAAW,EAAE,IAAI,CAAC,WAAW;aAC9B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,WAAW,CAAC,OAAe;IAClC,OAAO,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAa,EAAE,KAAqB;IAC/D,IAAI,GAAG,GAAG,KAAK,CAAC;IAChB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,24 @@
1
+ export type TranscriptEventKind = "user_prompt" | "user_tool_result" | "assistant_text" | "assistant_thinking" | "assistant_tool_use" | "attachment" | "permission_mode" | "file_history_snapshot";
2
+ export interface TranscriptEvent {
3
+ source: "transcript";
4
+ kind: TranscriptEventKind;
5
+ timestamp: string | null;
6
+ uuid?: string | undefined;
7
+ parentUuid?: string | undefined;
8
+ cwd?: string | undefined;
9
+ data: Record<string, unknown>;
10
+ }
11
+ export interface TranscriptParseResult {
12
+ events: TranscriptEvent[];
13
+ startedAt: string | null;
14
+ endedAt: string | null;
15
+ cwd: string | null;
16
+ malformedLines: number;
17
+ }
18
+ export declare function parseTranscript(jsonl: string): TranscriptParseResult;
19
+ export interface LocateTranscriptOptions {
20
+ homeDir?: string;
21
+ projectsRoot?: string;
22
+ }
23
+ export declare function locateTranscript(sessionId: string, opts?: LocateTranscriptOptions): string | null;
24
+ export declare function readTranscript(filePath: string): TranscriptParseResult;
@@ -0,0 +1,162 @@
1
+ import * as fs from "node:fs";
2
+ import * as os from "node:os";
3
+ import * as path from "node:path";
4
+ export function parseTranscript(jsonl) {
5
+ const events = [];
6
+ let startedAt = null;
7
+ let endedAt = null;
8
+ let cwd = null;
9
+ let malformedLines = 0;
10
+ for (const line of jsonl.split("\n")) {
11
+ if (!line.trim())
12
+ continue;
13
+ let raw;
14
+ try {
15
+ raw = JSON.parse(line);
16
+ }
17
+ catch {
18
+ malformedLines += 1;
19
+ continue;
20
+ }
21
+ const ts = typeof raw.timestamp === "string" ? raw.timestamp : null;
22
+ if (ts !== null) {
23
+ if (startedAt === null || ts < startedAt)
24
+ startedAt = ts;
25
+ if (endedAt === null || ts > endedAt)
26
+ endedAt = ts;
27
+ }
28
+ if (typeof raw.cwd === "string" && cwd === null)
29
+ cwd = raw.cwd;
30
+ const baseFields = {
31
+ ...(typeof raw.uuid === "string" ? { uuid: raw.uuid } : {}),
32
+ ...(typeof raw.parentUuid === "string" ? { parentUuid: raw.parentUuid } : {}),
33
+ ...(typeof raw.cwd === "string" ? { cwd: raw.cwd } : {}),
34
+ };
35
+ const base = {
36
+ source: "transcript",
37
+ timestamp: ts,
38
+ ...baseFields,
39
+ };
40
+ switch (raw.type) {
41
+ case "user": {
42
+ const content = raw.message?.content;
43
+ if (typeof content === "string") {
44
+ events.push({ ...base, kind: "user_prompt", data: { text: content } });
45
+ }
46
+ else if (Array.isArray(content)) {
47
+ for (const block of content) {
48
+ if (!block || typeof block !== "object")
49
+ continue;
50
+ const b = block;
51
+ if (b.type === "tool_result") {
52
+ events.push({
53
+ ...base,
54
+ kind: "user_tool_result",
55
+ data: {
56
+ tool_use_id: b.tool_use_id,
57
+ is_error: b.is_error,
58
+ content: b.content,
59
+ },
60
+ });
61
+ }
62
+ else if (b.type === "text") {
63
+ events.push({
64
+ ...base,
65
+ kind: "user_prompt",
66
+ data: { text: b.text },
67
+ });
68
+ }
69
+ }
70
+ }
71
+ break;
72
+ }
73
+ case "assistant": {
74
+ const content = raw.message?.content;
75
+ if (Array.isArray(content)) {
76
+ for (const block of content) {
77
+ if (!block || typeof block !== "object")
78
+ continue;
79
+ const b = block;
80
+ if (b.type === "text") {
81
+ events.push({
82
+ ...base,
83
+ kind: "assistant_text",
84
+ data: { text: b.text },
85
+ });
86
+ }
87
+ else if (b.type === "thinking") {
88
+ events.push({
89
+ ...base,
90
+ kind: "assistant_thinking",
91
+ data: { text: b.thinking ?? b.text },
92
+ });
93
+ }
94
+ else if (b.type === "tool_use") {
95
+ events.push({
96
+ ...base,
97
+ kind: "assistant_tool_use",
98
+ data: { id: b.id, name: b.name, input: b.input },
99
+ });
100
+ }
101
+ }
102
+ }
103
+ break;
104
+ }
105
+ case "attachment": {
106
+ events.push({
107
+ ...base,
108
+ kind: "attachment",
109
+ data: { attachment: raw.attachment },
110
+ });
111
+ break;
112
+ }
113
+ case "permission-mode": {
114
+ events.push({
115
+ ...base,
116
+ kind: "permission_mode",
117
+ data: { mode: raw.permissionMode },
118
+ });
119
+ break;
120
+ }
121
+ case "file-history-snapshot": {
122
+ events.push({
123
+ ...base,
124
+ kind: "file_history_snapshot",
125
+ data: {
126
+ messageId: raw.messageId,
127
+ isSnapshotUpdate: raw.isSnapshotUpdate,
128
+ snapshot: raw.snapshot,
129
+ },
130
+ });
131
+ break;
132
+ }
133
+ default:
134
+ // Ignore unknown record types; future Claude Code versions may add new ones.
135
+ break;
136
+ }
137
+ }
138
+ return { events, startedAt, endedAt, cwd, malformedLines };
139
+ }
140
+ export function locateTranscript(sessionId, opts = {}) {
141
+ const projectsRoot = opts.projectsRoot ?? path.join(opts.homeDir ?? os.homedir(), ".claude", "projects");
142
+ if (!fs.existsSync(projectsRoot))
143
+ return null;
144
+ let dirs;
145
+ try {
146
+ dirs = fs.readdirSync(projectsRoot);
147
+ }
148
+ catch {
149
+ return null;
150
+ }
151
+ for (const dir of dirs) {
152
+ const candidate = path.join(projectsRoot, dir, `${sessionId}.jsonl`);
153
+ if (fs.existsSync(candidate))
154
+ return candidate;
155
+ }
156
+ return null;
157
+ }
158
+ export function readTranscript(filePath) {
159
+ const raw = fs.readFileSync(filePath, "utf8");
160
+ return parseTranscript(raw);
161
+ }
162
+ //# sourceMappingURL=transcript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript.js","sourceRoot":"","sources":["../../../src/cli/session-export/transcript.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AA4ClC,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,IAAI,SAAS,GAAkB,IAAI,CAAC;IACpC,IAAI,OAAO,GAAkB,IAAI,CAAC;IAClC,IAAI,GAAG,GAAkB,IAAI,CAAC;IAC9B,IAAI,cAAc,GAAG,CAAC,CAAC;IAEvB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE,SAAS;QAC3B,IAAI,GAAc,CAAC;QACnB,IAAI,CAAC;YACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAc,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,cAAc,IAAI,CAAC,CAAC;YACpB,SAAS;QACX,CAAC;QACD,MAAM,EAAE,GAAG,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;QACpE,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YAChB,IAAI,SAAS,KAAK,IAAI,IAAI,EAAE,GAAG,SAAS;gBAAE,SAAS,GAAG,EAAE,CAAC;YACzD,IAAI,OAAO,KAAK,IAAI,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,GAAG,EAAE,CAAC;QACrD,CAAC;QACD,IAAI,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;YAAE,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;QAE/D,MAAM,UAAU,GAAyD;YACvE,GAAG,CAAC,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,GAAG,CAAC,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7E,GAAG,CAAC,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACzD,CAAC;QACF,MAAM,IAAI,GAA2C;YACnD,MAAM,EAAE,YAAY;YACpB,SAAS,EAAE,EAAE;YACb,GAAG,UAAU;SACd,CAAC;QAEF,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;YACjB,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC;gBACrC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;oBAChC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;gBACzE,CAAC;qBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;oBAClC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;wBAC5B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;4BAAE,SAAS;wBAClD,MAAM,CAAC,GAAG,KAAgC,CAAC;wBAC3C,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;4BAC7B,MAAM,CAAC,IAAI,CAAC;gCACV,GAAG,IAAI;gCACP,IAAI,EAAE,kBAAkB;gCACxB,IAAI,EAAE;oCACJ,WAAW,EAAE,CAAC,CAAC,WAAW;oCAC1B,QAAQ,EAAE,CAAC,CAAC,QAAQ;oCACpB,OAAO,EAAE,CAAC,CAAC,OAAO;iCACnB;6BACF,CAAC,CAAC;wBACL,CAAC;6BAAM,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;4BAC7B,MAAM,CAAC,IAAI,CAAC;gCACV,GAAG,IAAI;gCACP,IAAI,EAAE,aAAa;gCACnB,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;6BACvB,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC;gBACrC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC3B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;wBAC5B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;4BAAE,SAAS;wBAClD,MAAM,CAAC,GAAG,KAAgC,CAAC;wBAC3C,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;4BACtB,MAAM,CAAC,IAAI,CAAC;gCACV,GAAG,IAAI;gCACP,IAAI,EAAE,gBAAgB;gCACtB,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;6BACvB,CAAC,CAAC;wBACL,CAAC;6BAAM,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;4BACjC,MAAM,CAAC,IAAI,CAAC;gCACV,GAAG,IAAI;gCACP,IAAI,EAAE,oBAAoB;gCAC1B,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE;6BACrC,CAAC,CAAC;wBACL,CAAC;6BAAM,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;4BACjC,MAAM,CAAC,IAAI,CAAC;gCACV,GAAG,IAAI;gCACP,IAAI,EAAE,oBAAoB;gCAC1B,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE;6BACjD,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,CAAC,IAAI,CAAC;oBACV,GAAG,IAAI;oBACP,IAAI,EAAE,YAAY;oBAClB,IAAI,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE;iBACrC,CAAC,CAAC;gBACH,MAAM;YACR,CAAC;YACD,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACvB,MAAM,CAAC,IAAI,CAAC;oBACV,GAAG,IAAI;oBACP,IAAI,EAAE,iBAAiB;oBACvB,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,cAAc,EAAE;iBACnC,CAAC,CAAC;gBACH,MAAM;YACR,CAAC;YACD,KAAK,uBAAuB,CAAC,CAAC,CAAC;gBAC7B,MAAM,CAAC,IAAI,CAAC;oBACV,GAAG,IAAI;oBACP,IAAI,EAAE,uBAAuB;oBAC7B,IAAI,EAAE;wBACJ,SAAS,EAAE,GAAG,CAAC,SAAS;wBACxB,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;wBACtC,QAAQ,EAAE,GAAG,CAAC,QAAQ;qBACvB;iBACF,CAAC,CAAC;gBACH,MAAM;YACR,CAAC;YACD;gBACE,6EAA6E;gBAC7E,MAAM;QACV,CAAC;IACH,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC;AAC7D,CAAC;AAOD,MAAM,UAAU,gBAAgB,CAC9B,SAAiB,EACjB,OAAgC,EAAE;IAElC,MAAM,YAAY,GAChB,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IACtF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9C,IAAI,IAAc,CAAC;IACnB,IAAI,CAAC;QACH,IAAI,GAAG,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,GAAG,SAAS,QAAQ,CAAC,CAAC;QACrE,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;IACjD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC9C,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;AAC9B,CAAC"}
@@ -4,6 +4,14 @@ import { type CheckOptions } from "./checks.js";
4
4
  import { type Diagnostic } from "./types.js";
5
5
  export interface ValidateOptions extends LoaderOptions, CheckOptions {
6
6
  strict?: boolean;
7
+ /**
8
+ * Phase 3 follow-up: when set, also read the sibling `harness.lock`
9
+ * file and surface any drifted-asset entries as warnings (errors with
10
+ * `--strict`). When the lock file is absent, emits a single info-warn
11
+ * pointing to `harness apply`. Off by default so existing CI gates
12
+ * keep their current scope.
13
+ */
14
+ checkLock?: boolean;
7
15
  }
8
16
  export interface ValidateResult {
9
17
  diagnostics: Diagnostic[];
@@ -1,4 +1,7 @@
1
+ import * as path from "node:path";
1
2
  import { ManifestParseError, parseManifest } from "../../schema/index.js";
3
+ import { LOCK_BASENAME, readLock } from "../../io/harness-lock.js";
4
+ import { diffAssets } from "../diff/since-apply.js";
2
5
  import { loadMergedRaw } from "../loader.js";
3
6
  import { runAssetChecks } from "./checks.js";
4
7
  import { fmtDiagnostic } from "./types.js";
@@ -10,7 +13,7 @@ function fromZodIssues(err) {
10
13
  }));
11
14
  }
12
15
  export function validate(opts = {}) {
13
- const { mergedRaw } = loadMergedRaw(opts);
16
+ const { mergedRaw, resolved } = loadMergedRaw(opts);
14
17
  let manifest = null;
15
18
  let diagnostics = [];
16
19
  try {
@@ -27,6 +30,9 @@ export function validate(opts = {}) {
27
30
  if (manifest) {
28
31
  diagnostics.push(...runAssetChecks(manifest, opts));
29
32
  }
33
+ if (opts.checkLock) {
34
+ diagnostics.push(...checkLockDrift(resolved.base));
35
+ }
30
36
  if (opts.strict) {
31
37
  for (const d of diagnostics) {
32
38
  if (d.severity === "warning")
@@ -37,6 +43,36 @@ export function validate(opts = {}) {
37
43
  const warningCount = diagnostics.filter((d) => d.severity === "warning").length;
38
44
  return { diagnostics, manifest, errorCount, warningCount };
39
45
  }
46
+ /**
47
+ * Phase 3 follow-up: read the sibling `harness.lock` and surface every
48
+ * drifted-asset entry as a warning. Uses `diffAssets` (re-exported from
49
+ * `harness diff --since-apply`); the comparison is `sha256(read(path))`
50
+ * vs the recorded `sha256` per asset, bit-identical to the `computeDrift`
51
+ * call apply performs at the same gate. This CLI just rewords each
52
+ * drift entry as a Diagnostic so it shows up next to schema/asset
53
+ * findings in the validate report.
54
+ */
55
+ function checkLockDrift(manifestPath) {
56
+ const lockPath = path.join(path.dirname(manifestPath), LOCK_BASENAME);
57
+ const entries = readLock(lockPath);
58
+ if (entries === null) {
59
+ return [
60
+ {
61
+ severity: "warning",
62
+ path: lockPath,
63
+ message: "no lock file; run `harness apply` to populate",
64
+ },
65
+ ];
66
+ }
67
+ const drifted = diffAssets(entries);
68
+ return drifted.map((d) => ({
69
+ severity: "warning",
70
+ path: d.path,
71
+ message: d.reason === "missing"
72
+ ? `asset ${d.reason}; expected sha ${d.expectedSha.slice(0, 12)}…`
73
+ : `asset ${d.reason}; expected sha ${d.expectedSha.slice(0, 12)}…, on-disk ${d.currentSha?.slice(0, 12) ?? "?"}…`,
74
+ }));
75
+ }
40
76
  export function formatReport(result) {
41
77
  if (result.diagnostics.length === 0)
42
78
  return "no validation findings\n";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/validate/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/validate/index.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,12 @@ export interface MemoryDirEntry {
10
10
  sha256: string;
11
11
  file_count: number;
12
12
  }
13
- export type LockEntry = AssetEntry | MemoryDirEntry;
13
+ export interface TargetEntry {
14
+ kind: "target";
15
+ path: string;
16
+ sha256: string;
17
+ }
18
+ export type LockEntry = AssetEntry | MemoryDirEntry | TargetEntry;
14
19
  export declare const LOCK_BASENAME = "harness.lock";
15
20
  export declare function computeAssetEntry(absolutePath: string): AssetEntry;
16
21
  export declare function computeMemoryDirEntry(absoluteDirPath: string): MemoryDirEntry;
@@ -105,7 +105,7 @@ function isLockEntry(x) {
105
105
  if (!x || typeof x !== "object")
106
106
  return false;
107
107
  const e = x;
108
- if (e.kind === "asset") {
108
+ if (e.kind === "asset" || e.kind === "target") {
109
109
  return typeof e.path === "string" && typeof e.sha256 === "string";
110
110
  }
111
111
  if (e.kind === "memory-dir") {
@@ -134,7 +134,7 @@ export function computeDrift(entries) {
134
134
  drifted.push({ entry: e, reason: "missing" });
135
135
  continue;
136
136
  }
137
- if (e.kind === "asset") {
137
+ if (e.kind === "asset" || e.kind === "target") {
138
138
  if (!stat.isFile()) {
139
139
  drifted.push({ entry: e, reason: "missing" });
140
140
  continue;
@@ -1 +1 @@
1
- {"version":3,"file":"harness-lock.js","sourceRoot":"","sources":["../../src/io/harness-lock.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"harness-lock.js","sourceRoot":"","sources":["../../src/io/harness-lock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface MergeResult {
2
+ merged: Record<string, unknown>;
3
+ replacedKeys: string[];
4
+ preservedKeys: string[];
5
+ addedKeys: string[];
6
+ }
7
+ export declare function mergeSettings(existing: Record<string, unknown> | null, generated: Record<string, unknown>): MergeResult;
8
+ export declare function summarizeMerge(target: string, r: MergeResult): string;