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

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 (48) hide show
  1. package/README.md +39 -3
  2. package/dist/cli.js +208 -4
  3. package/dist/cli.js.map +1 -1
  4. package/dist/index.d.ts +10 -1
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +10 -1
  7. package/dist/index.js.map +1 -1
  8. package/dist/mcp/prompts.d.ts +30 -0
  9. package/dist/mcp/prompts.d.ts.map +1 -0
  10. package/dist/mcp/prompts.js +150 -0
  11. package/dist/mcp/prompts.js.map +1 -0
  12. package/dist/mcp/resources.d.ts +25 -0
  13. package/dist/mcp/resources.d.ts.map +1 -0
  14. package/dist/mcp/resources.js +75 -0
  15. package/dist/mcp/resources.js.map +1 -0
  16. package/dist/mcp/server.d.ts +22 -0
  17. package/dist/mcp/server.d.ts.map +1 -0
  18. package/dist/mcp/server.js +202 -0
  19. package/dist/mcp/server.js.map +1 -0
  20. package/dist/mcp/tools.d.ts +26 -0
  21. package/dist/mcp/tools.d.ts.map +1 -0
  22. package/dist/mcp/tools.js +197 -0
  23. package/dist/mcp/tools.js.map +1 -0
  24. package/dist/notes/attach.d.ts +20 -0
  25. package/dist/notes/attach.d.ts.map +1 -0
  26. package/dist/notes/attach.js +27 -0
  27. package/dist/notes/attach.js.map +1 -0
  28. package/dist/notes/notes.d.ts +14 -0
  29. package/dist/notes/notes.d.ts.map +1 -0
  30. package/dist/notes/notes.js +82 -0
  31. package/dist/notes/notes.js.map +1 -0
  32. package/dist/scaffold.d.ts +1 -0
  33. package/dist/scaffold.d.ts.map +1 -1
  34. package/dist/scaffold.js +11 -11
  35. package/dist/scaffold.js.map +1 -1
  36. package/dist/state/manager.d.ts +9 -0
  37. package/dist/state/manager.d.ts.map +1 -0
  38. package/dist/state/manager.js +72 -0
  39. package/dist/state/manager.js.map +1 -0
  40. package/dist/state/schema.d.ts +111 -0
  41. package/dist/state/schema.d.ts.map +1 -0
  42. package/dist/state/schema.js +31 -0
  43. package/dist/state/schema.js.map +1 -0
  44. package/dist/state/sync.d.ts +8 -0
  45. package/dist/state/sync.d.ts.map +1 -0
  46. package/dist/state/sync.js +79 -0
  47. package/dist/state/sync.js.map +1 -0
  48. package/package.json +1 -1
@@ -0,0 +1,82 @@
1
+ import { execSync } from "node:child_process";
2
+ export const DEFAULT_NOTES_REF = "refs/notes/lognexus";
3
+ export function attachNote(content, commitRef = "HEAD", options = {}) {
4
+ const ref = options.ref ?? DEFAULT_NOTES_REF;
5
+ const cwd = options.cwd ?? process.cwd();
6
+ // Pass note content via stdin (-F -) for 100% reliable cross-platform escaping
7
+ execSync(`git notes --ref="${ref}" add -f -F - ${commitRef}`, {
8
+ input: content,
9
+ cwd,
10
+ encoding: "utf8",
11
+ stdio: ["pipe", "pipe", "pipe"],
12
+ });
13
+ }
14
+ export function getNote(commitRef = "HEAD", options = {}) {
15
+ const ref = options.ref ?? DEFAULT_NOTES_REF;
16
+ const cwd = options.cwd ?? process.cwd();
17
+ try {
18
+ const output = execSync(`git notes --ref="${ref}" show ${commitRef}`, {
19
+ cwd,
20
+ encoding: "utf8",
21
+ stdio: ["pipe", "pipe", "pipe"],
22
+ });
23
+ return output.trim();
24
+ }
25
+ catch {
26
+ return null;
27
+ }
28
+ }
29
+ export function listNotes(options = {}) {
30
+ const ref = options.ref ?? DEFAULT_NOTES_REF;
31
+ const cwd = options.cwd ?? process.cwd();
32
+ try {
33
+ const raw = execSync(`git notes --ref="${ref}" list`, {
34
+ cwd,
35
+ encoding: "utf8",
36
+ stdio: ["pipe", "pipe", "pipe"],
37
+ }).trim();
38
+ if (!raw)
39
+ return [];
40
+ return raw.split("\n").map((line) => {
41
+ const parts = line.trim().split(/\s+/);
42
+ return {
43
+ noteBlob: parts[0],
44
+ commitSha: parts[1],
45
+ };
46
+ });
47
+ }
48
+ catch {
49
+ return [];
50
+ }
51
+ }
52
+ export function pushNotes(remote = "origin", options = {}) {
53
+ const ref = options.ref ?? DEFAULT_NOTES_REF;
54
+ const cwd = options.cwd ?? process.cwd();
55
+ try {
56
+ execSync(`git push ${remote} ${ref}`, {
57
+ cwd,
58
+ encoding: "utf8",
59
+ stdio: ["pipe", "pipe", "pipe"],
60
+ });
61
+ return true;
62
+ }
63
+ catch {
64
+ return false;
65
+ }
66
+ }
67
+ export function fetchNotes(remote = "origin", options = {}) {
68
+ const ref = options.ref ?? DEFAULT_NOTES_REF;
69
+ const cwd = options.cwd ?? process.cwd();
70
+ try {
71
+ execSync(`git fetch ${remote} ${ref}:${ref}`, {
72
+ cwd,
73
+ encoding: "utf8",
74
+ stdio: ["pipe", "pipe", "pipe"],
75
+ });
76
+ return true;
77
+ }
78
+ catch {
79
+ return false;
80
+ }
81
+ }
82
+ //# sourceMappingURL=notes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notes.js","sourceRoot":"","sources":["../../src/notes/notes.ts"],"names":[],"mappings":"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"}
@@ -2,5 +2,6 @@ export interface InitResult {
2
2
  created: string[];
3
3
  skipped: string[];
4
4
  }
5
+ export declare const DEFAULT_ROUTING_TEMPLATE = "# Model-Tier Routing Configuration\n\n# Modes: confirm (pause and prompt) | warn (banner only) | off (silent)\nrouting: confirm\n\n# Operational Tier Taxonomy (Advisory across Claude, OpenAI, Gemini, DeepSeek)\n# tier-1 (Reasoning / Arch / Review): Claude Opus, OpenAI o3/GPT, Gemini Pro, DeepSeek R1\n# tier-2 (Context / Triage / Discovery): Claude Sonnet, GPT-4.1, Gemini Flash/Pro (1M), DeepSeek V3\n# tier-3 (Scoped Execution / Commits): Claude Haiku, GPT-4o-mini, DeepSeek Chat (V3), Gemini Flash\n";
5
6
  export declare function initProject(targetDir?: string): InitResult;
6
7
  //# sourceMappingURL=scaffold.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,wBAAgB,WAAW,CAAC,SAAS,GAAE,MAAsB,GAAG,UAAU,CA8BzE"}
1
+ {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,eAAO,MAAM,wBAAwB,4fASpC,CAAC;AAEF,wBAAgB,WAAW,CAAC,SAAS,GAAE,MAAsB,GAAG,UAAU,CAoBzE"}
package/dist/scaffold.js CHANGED
@@ -1,5 +1,15 @@
1
1
  import { existsSync, mkdirSync, writeFileSync } from "node:fs";
2
2
  import { join } from "node:path";
3
+ export const DEFAULT_ROUTING_TEMPLATE = `# Model-Tier Routing Configuration
4
+
5
+ # Modes: confirm (pause and prompt) | warn (banner only) | off (silent)
6
+ routing: confirm
7
+
8
+ # Operational Tier Taxonomy (Advisory across Claude, OpenAI, Gemini, DeepSeek)
9
+ # tier-1 (Reasoning / Arch / Review): Claude Opus, OpenAI o3/GPT, Gemini Pro, DeepSeek R1
10
+ # tier-2 (Context / Triage / Discovery): Claude Sonnet, GPT-4.1, Gemini Flash/Pro (1M), DeepSeek V3
11
+ # tier-3 (Scoped Execution / Commits): Claude Haiku, GPT-4o-mini, DeepSeek Chat (V3), Gemini Flash
12
+ `;
3
13
  export function initProject(targetDir = process.cwd()) {
4
14
  const result = { created: [], skipped: [] };
5
15
  const lognexusDir = join(targetDir, ".lognexus");
@@ -12,17 +22,7 @@ export function initProject(targetDir = process.cwd()) {
12
22
  }
13
23
  const routingPath = join(lognexusDir, "routing.md");
14
24
  if (!existsSync(routingPath)) {
15
- const routingContent = `# Model-Tier Routing Configuration
16
-
17
- # Modes: confirm (pause and prompt) | warn (banner only) | off (silent)
18
- routing: confirm
19
-
20
- # Operational Tier Taxonomy (Advisory across Claude, OpenAI, Gemini, DeepSeek)
21
- # tier-1 (Reasoning / Arch / Review): Claude Opus, OpenAI o3/GPT, Gemini Pro, DeepSeek R1
22
- # tier-2 (Context / Triage / Discovery): Claude Sonnet, GPT-4.1, Gemini Flash/Pro (1M), DeepSeek V3
23
- # tier-3 (Scoped Execution / Commits): Claude Haiku, GPT-4o-mini, DeepSeek Chat (V3), Gemini Flash
24
- `;
25
- writeFileSync(routingPath, routingContent, "utf8");
25
+ writeFileSync(routingPath, DEFAULT_ROUTING_TEMPLATE, "utf8");
26
26
  result.created.push(".lognexus/routing.md");
27
27
  }
28
28
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAOjC,MAAM,UAAU,WAAW,CAAC,SAAS,GAAW,OAAO,CAAC,GAAG,EAAE;IAC3D,MAAM,MAAM,GAAe,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACxD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAEjD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IACpD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,MAAM,cAAc,GAAG;;;;;;;;;CAS1B,CAAC;QACE,aAAa,CAAC,WAAW,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;QACnD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAC9C,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAOjC,MAAM,CAAC,MAAM,wBAAwB,GAAG;;;;;;;;;CASvC,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,SAAS,GAAW,OAAO,CAAC,GAAG,EAAE;IAC3D,MAAM,MAAM,GAAe,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACxD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAEjD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IACpD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,aAAa,CAAC,WAAW,EAAE,wBAAwB,EAAE,MAAM,CAAC,CAAC;QAC7D,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAC9C,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { type LognexusState, type SubtaskContract } from "./schema.js";
2
+ export declare function getStatePath(targetDir?: string): string;
3
+ export declare function createEmptyState(): LognexusState;
4
+ export declare function loadState(targetDir?: string): LognexusState;
5
+ export declare function saveState(state: LognexusState, targetDir?: string): void;
6
+ export declare function clearState(targetDir?: string): LognexusState;
7
+ export declare function setSubtask(taskId: string, title?: string, contract?: SubtaskContract, targetDir?: string): LognexusState;
8
+ export declare function finishSubtask(taskId: string, targetDir?: string): LognexusState;
9
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/state/manager.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,aAAa,EAElB,KAAK,eAAe,EAErB,MAAM,aAAa,CAAC;AAErB,wBAAgB,YAAY,CAAC,SAAS,GAAE,MAAsB,GAAG,MAAM,CAEtE;AAED,wBAAgB,gBAAgB,IAAI,aAAa,CAQhD;AAED,wBAAgB,SAAS,CAAC,SAAS,GAAE,MAAsB,GAAG,aAAa,CAkB1E;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,aAAa,EAAE,SAAS,GAAE,MAAsB,GAAG,IAAI,CAUvF;AAED,wBAAgB,UAAU,CAAC,SAAS,GAAE,MAAsB,GAAG,aAAa,CAI3E;AAED,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,MAAW,EAClB,QAAQ,CAAC,EAAE,eAAe,EAC1B,SAAS,GAAE,MAAsB,GAChC,aAAa,CAWf;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,GAAE,MAAsB,GAAG,aAAa,CAU9F"}
@@ -0,0 +1,72 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { LognexusStateSchema, } from "./schema.js";
4
+ export function getStatePath(targetDir = process.cwd()) {
5
+ return join(targetDir, ".lognexus", "state.json");
6
+ }
7
+ export function createEmptyState() {
8
+ return {
9
+ schemaVersion: "1.0.0",
10
+ activeIssue: null,
11
+ currentSubtask: null,
12
+ completedSubtasks: [],
13
+ lastSync: new Date().toISOString(),
14
+ };
15
+ }
16
+ export function loadState(targetDir = process.cwd()) {
17
+ const filePath = getStatePath(targetDir);
18
+ if (!existsSync(filePath)) {
19
+ return createEmptyState();
20
+ }
21
+ try {
22
+ const raw = readFileSync(filePath, "utf8");
23
+ const json = JSON.parse(raw);
24
+ const parsed = LognexusStateSchema.safeParse(json);
25
+ if (parsed.success) {
26
+ return parsed.data;
27
+ }
28
+ return createEmptyState();
29
+ }
30
+ catch {
31
+ return createEmptyState();
32
+ }
33
+ }
34
+ export function saveState(state, targetDir = process.cwd()) {
35
+ const dirPath = join(targetDir, ".lognexus");
36
+ if (!existsSync(dirPath)) {
37
+ mkdirSync(dirPath, { recursive: true });
38
+ }
39
+ state.lastSync = new Date().toISOString();
40
+ const validated = LognexusStateSchema.parse(state);
41
+ const filePath = getStatePath(targetDir);
42
+ writeFileSync(filePath, JSON.stringify(validated, null, 2), "utf8");
43
+ }
44
+ export function clearState(targetDir = process.cwd()) {
45
+ const empty = createEmptyState();
46
+ saveState(empty, targetDir);
47
+ return empty;
48
+ }
49
+ export function setSubtask(taskId, title = "", contract, targetDir = process.cwd()) {
50
+ const state = loadState(targetDir);
51
+ const subtask = {
52
+ id: taskId,
53
+ title,
54
+ status: "in-progress",
55
+ contract,
56
+ };
57
+ state.currentSubtask = subtask;
58
+ saveState(state, targetDir);
59
+ return state;
60
+ }
61
+ export function finishSubtask(taskId, targetDir = process.cwd()) {
62
+ const state = loadState(targetDir);
63
+ if (!state.completedSubtasks.includes(taskId)) {
64
+ state.completedSubtasks.push(taskId);
65
+ }
66
+ if (state.currentSubtask?.id === taskId) {
67
+ state.currentSubtask = null;
68
+ }
69
+ saveState(state, targetDir);
70
+ return state;
71
+ }
72
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/state/manager.ts"],"names":[],"mappings":"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"}
@@ -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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"}
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.4",
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": {