@digital-lake/lognexus 1.0.0-alpha.1 → 1.0.0-alpha.5

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 (59) hide show
  1. package/README.md +46 -3
  2. package/dist/audit/audit.d.ts +19 -0
  3. package/dist/audit/audit.d.ts.map +1 -0
  4. package/dist/audit/audit.js +168 -0
  5. package/dist/audit/audit.js.map +1 -0
  6. package/dist/cli.js +281 -4
  7. package/dist/cli.js.map +1 -1
  8. package/dist/doctor.d.ts.map +1 -1
  9. package/dist/doctor.js +1 -1
  10. package/dist/doctor.js.map +1 -1
  11. package/dist/index.d.ts +12 -1
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +12 -1
  14. package/dist/index.js.map +1 -1
  15. package/dist/mcp/prompts.d.ts +30 -0
  16. package/dist/mcp/prompts.d.ts.map +1 -0
  17. package/dist/mcp/prompts.js +150 -0
  18. package/dist/mcp/prompts.js.map +1 -0
  19. package/dist/mcp/resources.d.ts +25 -0
  20. package/dist/mcp/resources.d.ts.map +1 -0
  21. package/dist/mcp/resources.js +75 -0
  22. package/dist/mcp/resources.js.map +1 -0
  23. package/dist/mcp/server.d.ts +22 -0
  24. package/dist/mcp/server.d.ts.map +1 -0
  25. package/dist/mcp/server.js +202 -0
  26. package/dist/mcp/server.js.map +1 -0
  27. package/dist/mcp/tools.d.ts +26 -0
  28. package/dist/mcp/tools.d.ts.map +1 -0
  29. package/dist/mcp/tools.js +260 -0
  30. package/dist/mcp/tools.js.map +1 -0
  31. package/dist/notes/attach.d.ts +20 -0
  32. package/dist/notes/attach.d.ts.map +1 -0
  33. package/dist/notes/attach.js +27 -0
  34. package/dist/notes/attach.js.map +1 -0
  35. package/dist/notes/notes.d.ts +14 -0
  36. package/dist/notes/notes.d.ts.map +1 -0
  37. package/dist/notes/notes.js +82 -0
  38. package/dist/notes/notes.js.map +1 -0
  39. package/dist/scaffold.d.ts +1 -0
  40. package/dist/scaffold.d.ts.map +1 -1
  41. package/dist/scaffold.js +11 -11
  42. package/dist/scaffold.js.map +1 -1
  43. package/dist/state/manager.d.ts +9 -0
  44. package/dist/state/manager.d.ts.map +1 -0
  45. package/dist/state/manager.js +72 -0
  46. package/dist/state/manager.js.map +1 -0
  47. package/dist/state/schema.d.ts +111 -0
  48. package/dist/state/schema.d.ts.map +1 -0
  49. package/dist/state/schema.js +31 -0
  50. package/dist/state/schema.js.map +1 -0
  51. package/dist/state/sync.d.ts +8 -0
  52. package/dist/state/sync.d.ts.map +1 -0
  53. package/dist/state/sync.js +79 -0
  54. package/dist/state/sync.js.map +1 -0
  55. package/dist/timeline/timeline.d.ts +23 -0
  56. package/dist/timeline/timeline.d.ts.map +1 -0
  57. package/dist/timeline/timeline.js +257 -0
  58. package/dist/timeline/timeline.js.map +1 -0
  59. package/package.json +1 -1
@@ -0,0 +1,111 @@
1
+ import { z } from "zod";
2
+ export declare const SubtaskContractSchema: z.ZodObject<{
3
+ allowedFiles: z.ZodDefault<z.ZodArray<z.ZodString>>;
4
+ forbiddenFiles: z.ZodDefault<z.ZodArray<z.ZodString>>;
5
+ decisionBudget: z.ZodDefault<z.ZodEnum<{
6
+ full: "full";
7
+ narrow: "narrow";
8
+ none: "none";
9
+ }>>;
10
+ verificationCmd: z.ZodOptional<z.ZodString>;
11
+ }, z.core.$strip>;
12
+ export type SubtaskContract = z.infer<typeof SubtaskContractSchema>;
13
+ export declare const SubtaskStateSchema: z.ZodObject<{
14
+ id: z.ZodString;
15
+ title: z.ZodDefault<z.ZodString>;
16
+ status: z.ZodDefault<z.ZodEnum<{
17
+ completed: "completed";
18
+ "in-progress": "in-progress";
19
+ pending: "pending";
20
+ }>>;
21
+ contract: z.ZodOptional<z.ZodObject<{
22
+ allowedFiles: z.ZodDefault<z.ZodArray<z.ZodString>>;
23
+ forbiddenFiles: z.ZodDefault<z.ZodArray<z.ZodString>>;
24
+ decisionBudget: z.ZodDefault<z.ZodEnum<{
25
+ full: "full";
26
+ narrow: "narrow";
27
+ none: "none";
28
+ }>>;
29
+ verificationCmd: z.ZodOptional<z.ZodString>;
30
+ }, z.core.$strip>>;
31
+ }, z.core.$strip>;
32
+ export type SubtaskState = z.infer<typeof SubtaskStateSchema>;
33
+ export declare const ActiveIssueStateSchema: z.ZodObject<{
34
+ id: z.ZodNumber;
35
+ title: z.ZodDefault<z.ZodString>;
36
+ branch: z.ZodString;
37
+ phase: z.ZodDefault<z.ZodEnum<{
38
+ branch: "branch";
39
+ commit: "commit";
40
+ discovery: "discovery";
41
+ done: "done";
42
+ plan: "plan";
43
+ pr: "pr";
44
+ review: "review";
45
+ }>>;
46
+ tier: z.ZodDefault<z.ZodEnum<{
47
+ "tier-1": "tier-1";
48
+ "tier-2": "tier-2";
49
+ "tier-3": "tier-3";
50
+ }>>;
51
+ readiness: z.ZodDefault<z.ZodEnum<{
52
+ blocked: "blocked";
53
+ done: "done";
54
+ draft: "draft";
55
+ "in-review": "in-review";
56
+ ready: "ready";
57
+ }>>;
58
+ }, z.core.$strip>;
59
+ export type ActiveIssueState = z.infer<typeof ActiveIssueStateSchema>;
60
+ export declare const LognexusStateSchema: z.ZodObject<{
61
+ schemaVersion: z.ZodDefault<z.ZodString>;
62
+ activeIssue: z.ZodDefault<z.ZodNullable<z.ZodObject<{
63
+ id: z.ZodNumber;
64
+ title: z.ZodDefault<z.ZodString>;
65
+ branch: z.ZodString;
66
+ phase: z.ZodDefault<z.ZodEnum<{
67
+ branch: "branch";
68
+ commit: "commit";
69
+ discovery: "discovery";
70
+ done: "done";
71
+ plan: "plan";
72
+ pr: "pr";
73
+ review: "review";
74
+ }>>;
75
+ tier: z.ZodDefault<z.ZodEnum<{
76
+ "tier-1": "tier-1";
77
+ "tier-2": "tier-2";
78
+ "tier-3": "tier-3";
79
+ }>>;
80
+ readiness: z.ZodDefault<z.ZodEnum<{
81
+ blocked: "blocked";
82
+ done: "done";
83
+ draft: "draft";
84
+ "in-review": "in-review";
85
+ ready: "ready";
86
+ }>>;
87
+ }, z.core.$strip>>>;
88
+ currentSubtask: z.ZodDefault<z.ZodNullable<z.ZodObject<{
89
+ id: z.ZodString;
90
+ title: z.ZodDefault<z.ZodString>;
91
+ status: z.ZodDefault<z.ZodEnum<{
92
+ completed: "completed";
93
+ "in-progress": "in-progress";
94
+ pending: "pending";
95
+ }>>;
96
+ contract: z.ZodOptional<z.ZodObject<{
97
+ allowedFiles: z.ZodDefault<z.ZodArray<z.ZodString>>;
98
+ forbiddenFiles: z.ZodDefault<z.ZodArray<z.ZodString>>;
99
+ decisionBudget: z.ZodDefault<z.ZodEnum<{
100
+ full: "full";
101
+ narrow: "narrow";
102
+ none: "none";
103
+ }>>;
104
+ verificationCmd: z.ZodOptional<z.ZodString>;
105
+ }, z.core.$strip>>;
106
+ }, z.core.$strip>>>;
107
+ completedSubtasks: z.ZodDefault<z.ZodArray<z.ZodString>>;
108
+ lastSync: z.ZodDefault<z.ZodString>;
109
+ }, z.core.$strip>;
110
+ export type LognexusState = z.infer<typeof LognexusStateSchema>;
111
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/state/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,qBAAqB;;;;;;;;;iBAKhC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;iBAK7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;iBASjC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAM9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { z } from "zod";
2
+ export const SubtaskContractSchema = z.object({
3
+ allowedFiles: z.array(z.string()).default([]),
4
+ forbiddenFiles: z.array(z.string()).default([]),
5
+ decisionBudget: z.enum(["none", "narrow", "full"]).default("none"),
6
+ verificationCmd: z.string().optional(),
7
+ });
8
+ export const SubtaskStateSchema = z.object({
9
+ id: z.string(),
10
+ title: z.string().default(""),
11
+ status: z.enum(["pending", "in-progress", "completed"]).default("pending"),
12
+ contract: SubtaskContractSchema.optional(),
13
+ });
14
+ export const ActiveIssueStateSchema = z.object({
15
+ id: z.number(),
16
+ title: z.string().default(""),
17
+ branch: z.string(),
18
+ phase: z
19
+ .enum(["plan", "branch", "discovery", "commit", "pr", "review", "done"])
20
+ .default("branch"),
21
+ tier: z.enum(["tier-1", "tier-2", "tier-3"]).default("tier-3"),
22
+ readiness: z.enum(["draft", "ready", "blocked", "in-review", "done"]).default("ready"),
23
+ });
24
+ export const LognexusStateSchema = z.object({
25
+ schemaVersion: z.string().default("1.0.0"),
26
+ activeIssue: ActiveIssueStateSchema.nullable().default(null),
27
+ currentSubtask: SubtaskStateSchema.nullable().default(null),
28
+ completedSubtasks: z.array(z.string()).default([]),
29
+ lastSync: z.string().default(() => new Date().toISOString()),
30
+ });
31
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/state/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC7C,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC/C,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IAClE,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACvC,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IAC7B,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IAC1E,QAAQ,EAAE,qBAAqB,CAAC,QAAQ,EAAE;CAC3C,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IAC7B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,KAAK,EAAE,CAAC;SACL,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;SACvE,OAAO,CAAC,QAAQ,CAAC;IACpB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC9D,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;CACvF,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;IAC1C,WAAW,EAAE,sBAAsB,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAC5D,cAAc,EAAE,kBAAkB,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3D,iBAAiB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAClD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;CAC7D,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { ActiveIssueState, LognexusState } from "./schema.js";
2
+ export declare function getBranchName(targetDir?: string): string | null;
3
+ export declare function fetchIssueMeta(issueId: number, targetDir?: string): {
4
+ title: string;
5
+ readiness: ActiveIssueState["readiness"];
6
+ } | null;
7
+ export declare function syncStateFromGit(targetDir?: string): LognexusState;
8
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/state/sync.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEnE,wBAAgB,aAAa,CAAC,SAAS,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI,CAW9E;AAED,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,MAAsB,GAChC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAA;CAAE,GAAG,IAAI,CA0BpE;AAED,wBAAgB,gBAAgB,CAAC,SAAS,GAAE,MAAsB,GAAG,aAAa,CAuCjF"}
@@ -0,0 +1,79 @@
1
+ import { execSync } from "node:child_process";
2
+ import { loadState, saveState } from "./manager.js";
3
+ export function getBranchName(targetDir = process.cwd()) {
4
+ try {
5
+ const branch = execSync("git branch --show-current", {
6
+ cwd: targetDir,
7
+ encoding: "utf8",
8
+ stdio: ["pipe", "pipe", "pipe"],
9
+ }).trim();
10
+ return branch || null;
11
+ }
12
+ catch {
13
+ return null;
14
+ }
15
+ }
16
+ export function fetchIssueMeta(issueId, targetDir = process.cwd()) {
17
+ try {
18
+ const raw = execSync(`gh issue view ${issueId} --json title,state,labels`, {
19
+ cwd: targetDir,
20
+ encoding: "utf8",
21
+ stdio: ["pipe", "pipe", "pipe"],
22
+ });
23
+ const parsed = JSON.parse(raw);
24
+ const title = parsed.title ?? "";
25
+ let readiness = "ready";
26
+ const labels = parsed.labels ?? [];
27
+ const labelNames = labels.map((l) => l.name);
28
+ if (labelNames.includes("lognexus/needs-review")) {
29
+ readiness = "in-review";
30
+ }
31
+ else if (labelNames.includes("lognexus/in-progress")) {
32
+ readiness = "ready";
33
+ }
34
+ else if (labelNames.includes("lognexus/blocker")) {
35
+ readiness = "blocked";
36
+ }
37
+ return { title, readiness };
38
+ }
39
+ catch {
40
+ return null;
41
+ }
42
+ }
43
+ export function syncStateFromGit(targetDir = process.cwd()) {
44
+ const state = loadState(targetDir);
45
+ const branch = getBranchName(targetDir);
46
+ if (!branch || branch === "main" || branch === "master") {
47
+ state.activeIssue = null;
48
+ state.currentSubtask = null;
49
+ saveState(state, targetDir);
50
+ return state;
51
+ }
52
+ const match = branch.match(/issue\/(\d+)(?:-(.*))?/i);
53
+ if (match) {
54
+ const issueId = Number.parseInt(match[1], 10);
55
+ const slug = match[2] ? match[2].replace(/-/g, " ") : `Issue #${issueId}`;
56
+ let title = slug;
57
+ let readiness = "ready";
58
+ const remoteMeta = fetchIssueMeta(issueId, targetDir);
59
+ if (remoteMeta) {
60
+ if (remoteMeta.title)
61
+ title = remoteMeta.title;
62
+ readiness = remoteMeta.readiness;
63
+ }
64
+ state.activeIssue = {
65
+ id: issueId,
66
+ title,
67
+ branch,
68
+ phase: "commit",
69
+ tier: "tier-3",
70
+ readiness,
71
+ };
72
+ }
73
+ else {
74
+ state.activeIssue = null;
75
+ }
76
+ saveState(state, targetDir);
77
+ return state;
78
+ }
79
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/state/sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export interface TimelineItem {
2
+ sha: string;
3
+ shortSha: string;
4
+ date: string;
5
+ subject: string;
6
+ taskId: string | null;
7
+ taskTitle: string | null;
8
+ tier: string | null;
9
+ author: string | null;
10
+ reviewer: string | null;
11
+ hasNote: boolean;
12
+ }
13
+ export interface JourneyTimelineResult {
14
+ branch: string;
15
+ baseBranch: string;
16
+ commitCount: number;
17
+ items: TimelineItem[];
18
+ markdownTable: string;
19
+ prBodyDraft: string;
20
+ }
21
+ export declare function buildTimelineTable(items: TimelineItem[]): string;
22
+ export declare function getJourneyTimeline(baseBranch?: string, targetDir?: string): JourneyTimelineResult;
23
+ //# sourceMappingURL=timeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../../src/timeline/timeline.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAuLD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,CAahE;AAyFD,wBAAgB,kBAAkB,CAChC,UAAU,GAAE,MAAe,EAC3B,SAAS,GAAE,MAAsB,GAChC,qBAAqB,CAevB"}
@@ -0,0 +1,257 @@
1
+ import { execSync } from "node:child_process";
2
+ import { getNote } from "../notes/notes.js";
3
+ const TRAILER_PATTERN = /^\s*(Authored-by|Reviewed-by|Last-code-by|Updated-by):\s*(.+)$/gim;
4
+ const TASK_ID_PATTERN = /\(#\d+\/(T[\d]+(?:-T?[\d]+)?)\)/i;
5
+ const SUBJECT_TASK_PATTERN = /\b(T\d+(?:-T?\d+)?)\b/;
6
+ const TIER_PATTERN = /\[(tier-\d)\]|(?:^|\s)(tier-\d)(?:\s|$)/i;
7
+ const BRANCH_ISSUE_PATTERN = /issue\/(\d+)/i;
8
+ const FIELD_SEPARATOR = "\x1f";
9
+ const RECORD_SEPARATOR = "\x1e";
10
+ const NO_VALUE = "—";
11
+ function runGit(args, targetDir) {
12
+ try {
13
+ const output = execSync(`git ${args.join(" ")}`, {
14
+ cwd: targetDir,
15
+ encoding: "utf8",
16
+ stdio: ["pipe", "pipe", "pipe"],
17
+ });
18
+ return output.replace(/\r\n/g, "\n");
19
+ }
20
+ catch {
21
+ return null;
22
+ }
23
+ }
24
+ function getCurrentBranch(targetDir) {
25
+ const branch = runGit(["branch", "--show-current"], targetDir)?.trim();
26
+ return branch ? branch : "detached";
27
+ }
28
+ function refExists(ref, targetDir) {
29
+ const output = runGit(["rev-parse", "--verify", "--quiet", ref], targetDir);
30
+ return output !== null && output.trim() !== "";
31
+ }
32
+ function resolveBaseBranch(requested, _currentBranch, targetDir) {
33
+ const candidates = [requested, `origin/${requested}`];
34
+ const remoteHead = runGit(["symbolic-ref", "--quiet", "--short", "refs/remotes/origin/HEAD"], targetDir);
35
+ if (remoteHead) {
36
+ candidates.push(remoteHead.trim());
37
+ }
38
+ for (const candidate of candidates) {
39
+ if (candidate === "")
40
+ continue;
41
+ if (refExists(candidate, targetDir))
42
+ return candidate;
43
+ }
44
+ for (const fallback of ["main", "master", "origin/main", "origin/master"]) {
45
+ if (refExists(fallback, targetDir))
46
+ return fallback;
47
+ }
48
+ return null;
49
+ }
50
+ function listCommits(base, targetDir) {
51
+ if (base === null)
52
+ return [];
53
+ const range = `${base}..HEAD`;
54
+ const format = `--pretty=format:%H${FIELD_SEPARATOR}%h${FIELD_SEPARATOR}%ad${FIELD_SEPARATOR}%s${FIELD_SEPARATOR}%b${RECORD_SEPARATOR}`;
55
+ const output = runGit(["log", range, format, "--date=iso"], targetDir);
56
+ if (!output)
57
+ return [];
58
+ const commits = [];
59
+ for (const record of output.split(RECORD_SEPARATOR)) {
60
+ const trimmed = record.replace(/^\n+/, "");
61
+ if (trimmed === "")
62
+ continue;
63
+ const [sha, shortSha, date, subject, ...body] = trimmed.split(FIELD_SEPARATOR);
64
+ if (!sha || !shortSha)
65
+ continue;
66
+ commits.push({
67
+ sha: sha.trim(),
68
+ shortSha: shortSha.trim(),
69
+ date: (date ?? "").trim(),
70
+ subject: (subject ?? "").trim(),
71
+ body: body.join(FIELD_SEPARATOR).trim(),
72
+ });
73
+ }
74
+ return commits;
75
+ }
76
+ function readTrailer(body, trailer) {
77
+ const target = trailer.toLowerCase();
78
+ let value = null;
79
+ for (const match of body.matchAll(TRAILER_PATTERN)) {
80
+ if (match[1].toLowerCase() === target) {
81
+ const trimmed = match[2].trim();
82
+ if (trimmed !== "")
83
+ value = trimmed;
84
+ }
85
+ }
86
+ return value;
87
+ }
88
+ function parseNotePayload(note) {
89
+ if (note === null)
90
+ return null;
91
+ try {
92
+ const parsed = JSON.parse(note);
93
+ if (parsed === null || typeof parsed !== "object")
94
+ return null;
95
+ return parsed;
96
+ }
97
+ catch {
98
+ return null;
99
+ }
100
+ }
101
+ function extractTaskId(subject) {
102
+ const scoped = subject.match(TASK_ID_PATTERN);
103
+ if (scoped)
104
+ return scoped[1].toUpperCase();
105
+ const loose = subject.match(SUBJECT_TASK_PATTERN);
106
+ if (loose)
107
+ return loose[1].toUpperCase();
108
+ return null;
109
+ }
110
+ function extractTier(subject) {
111
+ const match = subject.match(TIER_PATTERN);
112
+ if (!match)
113
+ return null;
114
+ return (match[1] ?? match[2] ?? "").toLowerCase() || null;
115
+ }
116
+ function buildItem(commit, targetDir) {
117
+ const note = getNote(commit.sha, { cwd: targetDir });
118
+ const payload = parseNotePayload(note);
119
+ const noteSubtaskId = payload?.subtask && typeof payload.subtask.id === "string" && payload.subtask.id.trim() !== ""
120
+ ? payload.subtask.id.trim()
121
+ : null;
122
+ const noteSubtaskTitle = payload?.subtask &&
123
+ typeof payload.subtask.title === "string" &&
124
+ payload.subtask.title.trim() !== ""
125
+ ? payload.subtask.title.trim()
126
+ : null;
127
+ const noteTier = typeof payload?.tier === "string" && payload.tier.trim() !== "" ? payload.tier.trim() : null;
128
+ return {
129
+ sha: commit.sha,
130
+ shortSha: commit.shortSha,
131
+ date: commit.date,
132
+ subject: commit.subject,
133
+ taskId: noteSubtaskId ?? extractTaskId(commit.subject),
134
+ taskTitle: noteSubtaskTitle,
135
+ tier: noteTier ?? extractTier(commit.subject),
136
+ author: readTrailer(commit.body, "Authored-by"),
137
+ reviewer: readTrailer(commit.body, "Reviewed-by"),
138
+ hasNote: note !== null,
139
+ };
140
+ }
141
+ function cell(value) {
142
+ if (value === null || value === "")
143
+ return NO_VALUE;
144
+ return `\`${value.replace(/\|/g, "\\|")}\``;
145
+ }
146
+ function plainCell(value) {
147
+ if (value === null || value === "")
148
+ return NO_VALUE;
149
+ return value.replace(/\|/g, "\\|");
150
+ }
151
+ export function buildTimelineTable(items) {
152
+ const lines = [
153
+ "| Commit | Subtask | Summary | Tier | Author | Note |",
154
+ "|---|---|---|---|---|---|",
155
+ ];
156
+ for (const item of items) {
157
+ lines.push(`| ${cell(item.shortSha)} | ${cell(item.taskId)} | ${plainCell(item.subject)} | ${cell(item.tier)} | ${cell(item.author)} | ${item.hasNote ? "Yes" : "No"} |`);
158
+ }
159
+ return lines.join("\n");
160
+ }
161
+ function extractIssueNumber(branch) {
162
+ const match = branch.match(BRANCH_ISSUE_PATTERN);
163
+ return match ? match[1] : null;
164
+ }
165
+ function buildPrBodyDraft(branch, baseBranch, items) {
166
+ const issueNumber = extractIssueNumber(branch);
167
+ const closingLine = issueNumber ? `Closes #${issueNumber}` : "Closes #<N>";
168
+ const lastAuthor = [...items].reverse().find((item) => item.author !== null)?.author ?? null;
169
+ const signature = lastAuthor ?? "<family>/<version> (<tool>)";
170
+ const changes = items.length === 0
171
+ ? "_No commits ahead of the base branch yet._"
172
+ : items.map((item) => `- \`${item.shortSha}\` — ${item.subject}`).join("\n");
173
+ const tiers = [...new Set(items.map((item) => item.tier).filter((tier) => tier !== null))];
174
+ const notesCoverage = items.filter((item) => item.hasNote).length;
175
+ return `<!-- lognexus:
176
+ kind: history
177
+ status: open
178
+ phase: 5
179
+ readiness: needs-review
180
+ branch: ${branch}
181
+ base_branch: ${baseBranch}
182
+ task_count: ${items.length}
183
+ tasks_complete: ${items.length}
184
+ updated_at: ${new Date().toISOString()}
185
+ -->
186
+
187
+ ## Summary
188
+
189
+ - ${items.length} commit(s) ahead of \`${baseBranch}\` on \`${branch}\`.
190
+ - Tiers involved: ${tiers.length > 0 ? tiers.map((tier) => `\`${tier}\``).join(", ") : NO_VALUE}.
191
+ - Git Note coverage: ${notesCoverage}/${items.length} commit(s).
192
+
193
+ ${closingLine}
194
+
195
+ ## Journey Timeline
196
+
197
+ ### Initial Plan
198
+
199
+ <TODO: 1-2 sentences on what the issue called for>
200
+
201
+ ### What We Discovered
202
+
203
+ <TODO: discoveries, blockers encountered, approach changes; remove this section if none>
204
+
205
+ ### Key Decisions
206
+
207
+ | Decision | Rationale |
208
+ |----------|-----------|
209
+ | <TODO: decision> | <TODO: why> |
210
+
211
+ ### Changes Made
212
+
213
+ ${changes}
214
+
215
+ ### Traceability
216
+
217
+ ${buildTimelineTable(items)}
218
+
219
+ ## Verification
220
+
221
+ - [ ] \`npm run build\`
222
+ - [ ] \`npm run lint\`
223
+ - [ ] \`npm test\`
224
+ - [ ] \`lognexus audit ${baseBranch}\` passes
225
+
226
+ ## Reviews
227
+
228
+ <!-- Awaiting cross-model review. See commands/lognexus/review.md for the review sub-skill. -->
229
+
230
+ Current state: awaiting review
231
+ Last reviewed by: —
232
+ Last reviewed at: —
233
+ Reviewed commit: —
234
+ Source artifact: —
235
+ Needs re-review since: —
236
+
237
+ ---
238
+ Authored-by: ${signature}
239
+ Last-code-by: ${signature}
240
+ *Captain's log — PR timeline by **lognexus***`;
241
+ }
242
+ export function getJourneyTimeline(baseBranch = "main", targetDir = process.cwd()) {
243
+ const branch = getCurrentBranch(targetDir);
244
+ const resolvedBase = resolveBaseBranch(baseBranch, branch, targetDir);
245
+ const rawCommits = listCommits(resolvedBase, targetDir);
246
+ const items = rawCommits.map((commit) => buildItem(commit, targetDir));
247
+ const effectiveBase = resolvedBase ?? `${baseBranch} (unresolved)`;
248
+ return {
249
+ branch,
250
+ baseBranch: effectiveBase,
251
+ commitCount: items.length,
252
+ items,
253
+ markdownTable: buildTimelineTable(items),
254
+ prBodyDraft: buildPrBodyDraft(branch, effectiveBase, items),
255
+ };
256
+ }
257
+ //# sourceMappingURL=timeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline.js","sourceRoot":"","sources":["../../src/timeline/timeline.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@digital-lake/lognexus",
3
- "version": "1.0.0-alpha.1",
3
+ "version": "1.0.0-alpha.5",
4
4
  "description": "The Universal, Git-powered context & rules framework for native AI agents (Claude, OpenAI, Gemini, DeepSeek). Scaffolding CLI and repository governance.",
5
5
  "type": "module",
6
6
  "bin": {