@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.
- package/README.md +46 -3
- package/dist/audit/audit.d.ts +19 -0
- package/dist/audit/audit.d.ts.map +1 -0
- package/dist/audit/audit.js +168 -0
- package/dist/audit/audit.js.map +1 -0
- package/dist/cli.js +281 -4
- package/dist/cli.js.map +1 -1
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +1 -1
- package/dist/doctor.js.map +1 -1
- package/dist/index.d.ts +12 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/prompts.d.ts +30 -0
- package/dist/mcp/prompts.d.ts.map +1 -0
- package/dist/mcp/prompts.js +150 -0
- package/dist/mcp/prompts.js.map +1 -0
- package/dist/mcp/resources.d.ts +25 -0
- package/dist/mcp/resources.d.ts.map +1 -0
- package/dist/mcp/resources.js +75 -0
- package/dist/mcp/resources.js.map +1 -0
- package/dist/mcp/server.d.ts +22 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +202 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools.d.ts +26 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +260 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/notes/attach.d.ts +20 -0
- package/dist/notes/attach.d.ts.map +1 -0
- package/dist/notes/attach.js +27 -0
- package/dist/notes/attach.js.map +1 -0
- package/dist/notes/notes.d.ts +14 -0
- package/dist/notes/notes.d.ts.map +1 -0
- package/dist/notes/notes.js +82 -0
- package/dist/notes/notes.js.map +1 -0
- package/dist/scaffold.d.ts +1 -0
- package/dist/scaffold.d.ts.map +1 -1
- package/dist/scaffold.js +11 -11
- package/dist/scaffold.js.map +1 -1
- package/dist/state/manager.d.ts +9 -0
- package/dist/state/manager.d.ts.map +1 -0
- package/dist/state/manager.js +72 -0
- package/dist/state/manager.js.map +1 -0
- package/dist/state/schema.d.ts +111 -0
- package/dist/state/schema.d.ts.map +1 -0
- package/dist/state/schema.js +31 -0
- package/dist/state/schema.js.map +1 -0
- package/dist/state/sync.d.ts +8 -0
- package/dist/state/sync.d.ts.map +1 -0
- package/dist/state/sync.js +79 -0
- package/dist/state/sync.js.map +1 -0
- package/dist/timeline/timeline.d.ts +23 -0
- package/dist/timeline/timeline.d.ts.map +1 -0
- package/dist/timeline/timeline.js +257 -0
- package/dist/timeline/timeline.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -117,9 +117,9 @@ An independent model inspects the PR diff, verifies task contracts, and signs of
|
|
|
117
117
|
|
|
118
118
|
## Installation & Setup
|
|
119
119
|
|
|
120
|
-
### 1. Scaffold Rules
|
|
121
|
-
Initialize `.lognexus/` rules, templates, and routing configuration with the CLI:
|
|
120
|
+
### 1. Scaffold Rules & Manage State with the CLI
|
|
122
121
|
|
|
122
|
+
Initialize `.lognexus/` rules, templates, and routing configuration:
|
|
123
123
|
```bash
|
|
124
124
|
npx @digital-lake/lognexus init
|
|
125
125
|
```
|
|
@@ -134,7 +134,50 @@ Inspect active branch and tier advisory:
|
|
|
134
134
|
npx @digital-lake/lognexus status
|
|
135
135
|
```
|
|
136
136
|
|
|
137
|
-
|
|
137
|
+
Manage persistent agent state (`.lognexus/state.json`) and session recovery:
|
|
138
|
+
```bash
|
|
139
|
+
npx @digital-lake/lognexus state sync
|
|
140
|
+
npx @digital-lake/lognexus state show
|
|
141
|
+
npx @digital-lake/lognexus state set-task T1 "Add user schema"
|
|
142
|
+
npx @digital-lake/lognexus state finish-task T1
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Quiet Mode with Git Notes (`refs/notes/lognexus`, standard `git-ai` v3):
|
|
146
|
+
```bash
|
|
147
|
+
npx @digital-lake/lognexus note attach HEAD
|
|
148
|
+
npx @digital-lake/lognexus note show HEAD
|
|
149
|
+
npx @digital-lake/lognexus note push origin
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Journey Timeline reconstruction and Review Gate audit:
|
|
153
|
+
```bash
|
|
154
|
+
npx @digital-lake/lognexus timeline main
|
|
155
|
+
npx @digital-lake/lognexus timeline main --pr-body
|
|
156
|
+
npx @digital-lake/lognexus audit main
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### 2. Connect via Model Context Protocol (MCP)
|
|
160
|
+
|
|
161
|
+
LogNexus includes a native, lightweight JSON-RPC 2.0 stdio server (`lognexus mcp`) with zero external SDK dependencies. Connect it to Claude Desktop, Cursor, Google Antigravity, or any MCP-compliant client:
|
|
162
|
+
|
|
163
|
+
**`claude_desktop_config.json` or Cursor MCP settings:**
|
|
164
|
+
```json
|
|
165
|
+
{
|
|
166
|
+
"mcpServers": {
|
|
167
|
+
"lognexus": {
|
|
168
|
+
"command": "npx",
|
|
169
|
+
"args": ["-y", "@digital-lake/lognexus", "mcp"]
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
**Exposed Capabilities:**
|
|
176
|
+
- **Tools:** `lognexus_status`, `lognexus_state_get`, `lognexus_state_sync`, `lognexus_state_set_task`, `lognexus_state_finish_task`, `lognexus_state_clear`, `lognexus_note_show`, `lognexus_note_attach`, `lognexus_timeline`, `lognexus_audit`
|
|
177
|
+
- **Resources:** `lognexus://state`, `lognexus://routing`
|
|
178
|
+
- **Prompts:** `lognexus-plan`, `lognexus-review`
|
|
179
|
+
|
|
180
|
+
### 3. Install Rules in Your Agent Environment
|
|
138
181
|
|
|
139
182
|
- **Claude Code:**
|
|
140
183
|
```bash
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface AuditViolation {
|
|
2
|
+
commitSha: string;
|
|
3
|
+
shortSha: string;
|
|
4
|
+
rule: "commit-format" | "authored-by-trailer" | "git-note-presence" | "contract-files" | "review-gate-separation";
|
|
5
|
+
message: string;
|
|
6
|
+
severity: "error" | "warn";
|
|
7
|
+
}
|
|
8
|
+
export interface AuditResult {
|
|
9
|
+
passed: boolean;
|
|
10
|
+
commitCount: number;
|
|
11
|
+
violations: AuditViolation[];
|
|
12
|
+
summary: {
|
|
13
|
+
errors: number;
|
|
14
|
+
warnings: number;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export declare function auditBranch(baseBranch?: string, targetDir?: string): AuditResult;
|
|
18
|
+
export declare function formatAuditResult(result: AuditResult): string;
|
|
19
|
+
//# sourceMappingURL=audit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/audit/audit.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EACA,eAAe,GACf,qBAAqB,GACrB,mBAAmB,GACnB,gBAAgB,GAChB,wBAAwB,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAgLD,wBAAgB,WAAW,CACzB,UAAU,GAAE,MAAe,EAC3B,SAAS,GAAE,MAAsB,GAChC,WAAW,CAab;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAW7D"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { execSync } from "node:child_process";
|
|
2
|
+
import { getNote } from "../notes/notes.js";
|
|
3
|
+
import { getJourneyTimeline } from "../timeline/timeline.js";
|
|
4
|
+
const VALID_TYPES = "feat, fix, docs, refactor, test, chore, style, perf";
|
|
5
|
+
const COMMIT_FORMAT_PATTERN = /^(feat|fix|docs|refactor|test|chore|style|perf)\(#\d+(\/T\d+(?:-T?\d+)?)?\): \S+/;
|
|
6
|
+
const SUBJECT_TASK_PATTERN = /\(#\d+\/(T\d+(?:-T?\d+)?)\)/i;
|
|
7
|
+
const IDENTITY_PATTERN = /(\S+\/\S+)/;
|
|
8
|
+
function parseIdentity(value) {
|
|
9
|
+
if (value === null)
|
|
10
|
+
return null;
|
|
11
|
+
const match = value.match(IDENTITY_PATTERN);
|
|
12
|
+
if (!match) {
|
|
13
|
+
const trimmed = value.trim().toLowerCase();
|
|
14
|
+
return trimmed === "" ? null : { full: trimmed, family: trimmed };
|
|
15
|
+
}
|
|
16
|
+
return { full: value.trim().toLowerCase(), family: match[1].toLowerCase() };
|
|
17
|
+
}
|
|
18
|
+
function normalizePath(value) {
|
|
19
|
+
return value.replace(/\\/g, "/").replace(/^\.\//, "").trim();
|
|
20
|
+
}
|
|
21
|
+
function toStringList(value) {
|
|
22
|
+
if (!Array.isArray(value))
|
|
23
|
+
return [];
|
|
24
|
+
return value.filter((entry) => typeof entry === "string").map(normalizePath);
|
|
25
|
+
}
|
|
26
|
+
function matchesPath(file, rule) {
|
|
27
|
+
if (rule === "")
|
|
28
|
+
return false;
|
|
29
|
+
if (rule.endsWith("/"))
|
|
30
|
+
return file.startsWith(rule);
|
|
31
|
+
if (rule.includes("*")) {
|
|
32
|
+
const pattern = new RegExp(`^${rule
|
|
33
|
+
.split("*")
|
|
34
|
+
.map((part) => part.replace(/[.+?^${}()|[\]\\]/g, "\\$&"))
|
|
35
|
+
.join(".*")}$`);
|
|
36
|
+
return pattern.test(file);
|
|
37
|
+
}
|
|
38
|
+
return file === rule;
|
|
39
|
+
}
|
|
40
|
+
function listCommitFiles(sha, targetDir) {
|
|
41
|
+
try {
|
|
42
|
+
const output = execSync(`git diff-tree --no-commit-id --name-only -r ${sha}`, {
|
|
43
|
+
cwd: targetDir,
|
|
44
|
+
encoding: "utf8",
|
|
45
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
46
|
+
});
|
|
47
|
+
return output
|
|
48
|
+
.replace(/\r\n/g, "\n")
|
|
49
|
+
.split("\n")
|
|
50
|
+
.map((line) => normalizePath(line))
|
|
51
|
+
.filter((line) => line !== "");
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return [];
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function readContract(note) {
|
|
58
|
+
if (note === null)
|
|
59
|
+
return null;
|
|
60
|
+
try {
|
|
61
|
+
const parsed = JSON.parse(note);
|
|
62
|
+
return parsed?.subtask?.contract ?? null;
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function auditCommit(item, targetDir) {
|
|
69
|
+
const violations = [];
|
|
70
|
+
const base = { commitSha: item.sha, shortSha: item.shortSha };
|
|
71
|
+
if (item.author === null) {
|
|
72
|
+
violations.push({
|
|
73
|
+
...base,
|
|
74
|
+
rule: "authored-by-trailer",
|
|
75
|
+
message: `Missing 'Authored-by:' trailer in commit body (got: ${item.subject}).`,
|
|
76
|
+
severity: "error",
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
const authorIdentity = parseIdentity(item.author);
|
|
80
|
+
const reviewerIdentity = parseIdentity(item.reviewer);
|
|
81
|
+
if (authorIdentity !== null && reviewerIdentity !== null) {
|
|
82
|
+
if (authorIdentity.full === reviewerIdentity.full ||
|
|
83
|
+
authorIdentity.family === reviewerIdentity.family) {
|
|
84
|
+
violations.push({
|
|
85
|
+
...base,
|
|
86
|
+
rule: "review-gate-separation",
|
|
87
|
+
message: `Self-approval detected: author '${item.author}' and reviewer '${item.reviewer}' share the same identity.`,
|
|
88
|
+
severity: "error",
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
const note = getNote(item.sha, { cwd: targetDir });
|
|
93
|
+
if (note === null) {
|
|
94
|
+
violations.push({
|
|
95
|
+
...base,
|
|
96
|
+
rule: "git-note-presence",
|
|
97
|
+
message: "No Git Note found under refs/notes/lognexus (run 'lognexus note attach <sha>').",
|
|
98
|
+
severity: "warn",
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
if (!COMMIT_FORMAT_PATTERN.test(item.subject)) {
|
|
102
|
+
violations.push({
|
|
103
|
+
...base,
|
|
104
|
+
rule: "commit-format",
|
|
105
|
+
message: `Subject does not match '<type>(#<issue>/T<n>): <description>' with a valid type (${VALID_TYPES}).`,
|
|
106
|
+
severity: "warn",
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
else if (!SUBJECT_TASK_PATTERN.test(item.subject)) {
|
|
110
|
+
violations.push({
|
|
111
|
+
...base,
|
|
112
|
+
rule: "commit-format",
|
|
113
|
+
message: "Subject lacks a subtask tag 'T<n>' (e.g. 'feat(#9/T1): ...').",
|
|
114
|
+
severity: "warn",
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
const contract = readContract(note);
|
|
118
|
+
if (contract !== null) {
|
|
119
|
+
const allowedFiles = toStringList(contract.allowedFiles);
|
|
120
|
+
const forbiddenFiles = toStringList(contract.forbiddenFiles);
|
|
121
|
+
const changedFiles = listCommitFiles(item.sha, targetDir);
|
|
122
|
+
const forbidden = changedFiles.filter((file) => forbiddenFiles.some((rule) => matchesPath(file, rule)));
|
|
123
|
+
if (forbidden.length > 0) {
|
|
124
|
+
violations.push({
|
|
125
|
+
...base,
|
|
126
|
+
rule: "contract-files",
|
|
127
|
+
message: `Commit touches forbidden file(s): ${forbidden.join(", ")}.`,
|
|
128
|
+
severity: "error",
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
if (allowedFiles.length > 0) {
|
|
132
|
+
const outside = changedFiles.filter((file) => !allowedFiles.some((rule) => matchesPath(file, rule)));
|
|
133
|
+
if (outside.length > 0) {
|
|
134
|
+
violations.push({
|
|
135
|
+
...base,
|
|
136
|
+
rule: "contract-files",
|
|
137
|
+
message: `Commit touches file(s) outside the allowed set: ${outside.join(", ")}.`,
|
|
138
|
+
severity: "error",
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return violations;
|
|
144
|
+
}
|
|
145
|
+
export function auditBranch(baseBranch = "main", targetDir = process.cwd()) {
|
|
146
|
+
const timeline = getJourneyTimeline(baseBranch, targetDir);
|
|
147
|
+
const violations = timeline.items.flatMap((item) => auditCommit(item, targetDir));
|
|
148
|
+
const errors = violations.filter((violation) => violation.severity === "error").length;
|
|
149
|
+
const warnings = violations.length - errors;
|
|
150
|
+
return {
|
|
151
|
+
passed: errors === 0,
|
|
152
|
+
commitCount: timeline.commitCount,
|
|
153
|
+
violations,
|
|
154
|
+
summary: { errors, warnings },
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
export function formatAuditResult(result) {
|
|
158
|
+
if (result.violations.length === 0) {
|
|
159
|
+
return "[PASS] All traceability checks passed";
|
|
160
|
+
}
|
|
161
|
+
return result.violations
|
|
162
|
+
.map((violation) => {
|
|
163
|
+
const tag = violation.severity === "error" ? "[ERROR]" : "[WARN] ";
|
|
164
|
+
return `${tag} ${violation.shortSha} ${violation.rule}: ${violation.message}`;
|
|
165
|
+
})
|
|
166
|
+
.join("\n");
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/audit/audit.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -1,26 +1,73 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import { auditBranch, formatAuditResult } from "./audit/audit.js";
|
|
2
3
|
import { runDiagnostics } from "./doctor.js";
|
|
4
|
+
import { startMcpServer } from "./mcp/server.js";
|
|
5
|
+
import { attachCurrentStateToCommit } from "./notes/attach.js";
|
|
6
|
+
import { fetchNotes, getNote, listNotes, pushNotes } from "./notes/notes.js";
|
|
3
7
|
import { initProject } from "./scaffold.js";
|
|
8
|
+
import { clearState, finishSubtask, loadState, setSubtask } from "./state/manager.js";
|
|
9
|
+
import { syncStateFromGit } from "./state/sync.js";
|
|
4
10
|
import { getProjectStatus } from "./status.js";
|
|
11
|
+
import { getJourneyTimeline } from "./timeline/timeline.js";
|
|
5
12
|
function printHeader() {
|
|
6
13
|
console.log("\n🔷 LogNexus CLI — Digital Lake");
|
|
7
|
-
console.log(" The Git-Powered Context & Rules Framework for Native AI Agents\n");
|
|
14
|
+
console.log(" The Universal Git-Powered Context & Rules Framework for Native AI Agents\n");
|
|
8
15
|
}
|
|
9
16
|
function printUsage() {
|
|
10
17
|
printHeader();
|
|
11
18
|
console.log(`Usage:
|
|
12
|
-
lognexus <command> [options]
|
|
19
|
+
lognexus <command> [subcommand] [options]
|
|
13
20
|
|
|
14
21
|
Commands:
|
|
15
22
|
init Scaffold .lognexus/ configuration and rules in current repository
|
|
16
23
|
doctor Check Git, GitHub CLI authentication, and repository rules health
|
|
17
24
|
status Inspect current branch, active issue, and recommended tier
|
|
25
|
+
state Manage persistent agent state (.lognexus/state.json)
|
|
26
|
+
note Manage Git Notes under refs/notes/lognexus (git-ai standard)
|
|
27
|
+
timeline Reconstruct the branch Journey Timeline and draft a PR body
|
|
28
|
+
audit Audit commit conventions, authorship trailers and review gate
|
|
29
|
+
mcp Start the LogNexus MCP server (stdio JSON-RPC 2.0) for native AI agents
|
|
18
30
|
help Display this help message
|
|
19
31
|
|
|
32
|
+
State Subcommands:
|
|
33
|
+
lognexus state [show] Display current active issue and task state
|
|
34
|
+
lognexus state sync Sync state from current Git branch & GitHub
|
|
35
|
+
lognexus state set-task <id> [t] Set active subtask (e.g. lognexus state set-task T1 "Add schema")
|
|
36
|
+
lognexus state finish-task <id> Mark subtask as completed (e.g. lognexus state finish-task T1)
|
|
37
|
+
lognexus state clear Reset persistent state to empty
|
|
38
|
+
|
|
39
|
+
Note Subcommands:
|
|
40
|
+
lognexus note [show] [commit] Display LogNexus Git Note for commit (default: HEAD)
|
|
41
|
+
lognexus note attach [commit] Attach current session state as Git Note to commit
|
|
42
|
+
lognexus note list List all commits with LogNexus Git Notes
|
|
43
|
+
lognexus note push [remote] Push refs/notes/lognexus to remote (default: origin)
|
|
44
|
+
lognexus note fetch [remote] Fetch refs/notes/lognexus from remote
|
|
45
|
+
|
|
46
|
+
Timeline & Audit:
|
|
47
|
+
lognexus timeline [base] [flags] Print the Journey Timeline of the branch vs. base branch
|
|
48
|
+
--json Emit the full JourneyTimelineResult JSON (no banner)
|
|
49
|
+
--pr-body Emit the ready-to-use PR body draft
|
|
50
|
+
lognexus audit [base] Audit commit format, Authored-by trailer, Git Notes,
|
|
51
|
+
subtask file contracts and reviewer separation
|
|
52
|
+
(exits with code 1 on errors)
|
|
53
|
+
|
|
54
|
+
MCP Server:
|
|
55
|
+
lognexus mcp Start MCP server on stdio (JSON-RPC 2.0) for Claude Code,
|
|
56
|
+
Cursor, VS Code, Antigravity or any MCP-compatible client
|
|
57
|
+
Tools: lognexus_status, lognexus_state_get, lognexus_state_sync, lognexus_state_set_task,
|
|
58
|
+
lognexus_state_finish_task, lognexus_state_clear, lognexus_note_show,
|
|
59
|
+
lognexus_note_attach, lognexus_timeline, lognexus_audit
|
|
60
|
+
Resources: lognexus://state, lognexus://routing
|
|
61
|
+
Prompts: lognexus-plan, lognexus-review
|
|
62
|
+
|
|
20
63
|
Examples:
|
|
21
64
|
npx @digital-lake/lognexus init
|
|
22
|
-
npx @digital-lake/lognexus
|
|
23
|
-
npx @digital-lake/lognexus
|
|
65
|
+
npx @digital-lake/lognexus state sync
|
|
66
|
+
npx @digital-lake/lognexus note attach HEAD
|
|
67
|
+
npx @digital-lake/lognexus note show HEAD
|
|
68
|
+
npx @digital-lake/lognexus timeline main --pr-body
|
|
69
|
+
npx @digital-lake/lognexus audit main
|
|
70
|
+
npx @digital-lake/lognexus mcp
|
|
24
71
|
`);
|
|
25
72
|
}
|
|
26
73
|
async function handleInit() {
|
|
@@ -63,6 +110,220 @@ async function handleStatus() {
|
|
|
63
110
|
console.log(`Rules Routing Mode: ${st.routingMode}`);
|
|
64
111
|
console.log(`Recommended Tier: ${st.recommendedTier}\n`);
|
|
65
112
|
}
|
|
113
|
+
async function handleState(args) {
|
|
114
|
+
const sub = args[0]?.toLowerCase() || "show";
|
|
115
|
+
switch (sub) {
|
|
116
|
+
case "show": {
|
|
117
|
+
printHeader();
|
|
118
|
+
const state = loadState();
|
|
119
|
+
console.log("Persistent Agent State (.lognexus/state.json):\n");
|
|
120
|
+
if (state.activeIssue) {
|
|
121
|
+
console.log(`Active Issue: #${state.activeIssue.id} — ${state.activeIssue.title}`);
|
|
122
|
+
console.log(`Branch: ${state.activeIssue.branch}`);
|
|
123
|
+
console.log(`Phase: ${state.activeIssue.phase}`);
|
|
124
|
+
console.log(`Tier: ${state.activeIssue.tier}`);
|
|
125
|
+
console.log(`Readiness: ${state.activeIssue.readiness}`);
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
console.log("Active Issue: (none)");
|
|
129
|
+
}
|
|
130
|
+
console.log("");
|
|
131
|
+
if (state.currentSubtask) {
|
|
132
|
+
console.log(`Current Subtask: ${state.currentSubtask.id} (${state.currentSubtask.status})`);
|
|
133
|
+
if (state.currentSubtask.title) {
|
|
134
|
+
console.log(` Title: ${state.currentSubtask.title}`);
|
|
135
|
+
}
|
|
136
|
+
if (state.currentSubtask.contract) {
|
|
137
|
+
console.log(` Allowed Files: ${state.currentSubtask.contract.allowedFiles.join(", ") || "(all)"}`);
|
|
138
|
+
console.log(` Decision Budget: ${state.currentSubtask.contract.decisionBudget}`);
|
|
139
|
+
if (state.currentSubtask.contract.verificationCmd) {
|
|
140
|
+
console.log(` Verify Command: ${state.currentSubtask.contract.verificationCmd}`);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
console.log("Current Subtask: (none)");
|
|
146
|
+
}
|
|
147
|
+
console.log(`Completed Tasks: ${state.completedSubtasks.length > 0 ? state.completedSubtasks.join(", ") : "(none)"}`);
|
|
148
|
+
console.log(`Last Synchronized: ${state.lastSync}\n`);
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
case "sync": {
|
|
152
|
+
printHeader();
|
|
153
|
+
console.log("Synchronizing state from current Git branch and GitHub...\n");
|
|
154
|
+
const synced = syncStateFromGit();
|
|
155
|
+
if (synced.activeIssue) {
|
|
156
|
+
console.log(`[OK] Synchronized with Issue #${synced.activeIssue.id} (${synced.activeIssue.title})`);
|
|
157
|
+
console.log(` Branch: ${synced.activeIssue.branch}`);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
console.log("[OK] Synchronized. No active issue detected on current branch.");
|
|
161
|
+
}
|
|
162
|
+
console.log("");
|
|
163
|
+
break;
|
|
164
|
+
}
|
|
165
|
+
case "set-task": {
|
|
166
|
+
const taskId = args[1];
|
|
167
|
+
const title = args.slice(2).join(" ");
|
|
168
|
+
if (!taskId) {
|
|
169
|
+
console.error("Error: Subtask ID is required (e.g. lognexus state set-task T1 'Add schema')\n");
|
|
170
|
+
process.exit(1);
|
|
171
|
+
}
|
|
172
|
+
printHeader();
|
|
173
|
+
setSubtask(taskId, title);
|
|
174
|
+
console.log(`[OK] Active subtask set to: ${taskId}${title ? ` — ${title}` : ""}\n`);
|
|
175
|
+
break;
|
|
176
|
+
}
|
|
177
|
+
case "finish-task": {
|
|
178
|
+
const taskId = args[1];
|
|
179
|
+
if (!taskId) {
|
|
180
|
+
console.error("Error: Subtask ID is required (e.g. lognexus state finish-task T1)\n");
|
|
181
|
+
process.exit(1);
|
|
182
|
+
}
|
|
183
|
+
printHeader();
|
|
184
|
+
finishSubtask(taskId);
|
|
185
|
+
console.log(`[OK] Subtask ${taskId} marked as completed.\n`);
|
|
186
|
+
break;
|
|
187
|
+
}
|
|
188
|
+
case "clear": {
|
|
189
|
+
printHeader();
|
|
190
|
+
clearState();
|
|
191
|
+
console.log("[OK] Persistent state cleared.\n");
|
|
192
|
+
break;
|
|
193
|
+
}
|
|
194
|
+
default:
|
|
195
|
+
console.error(`Unknown state subcommand: ${sub}\n`);
|
|
196
|
+
printUsage();
|
|
197
|
+
process.exit(1);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
async function handleNote(args) {
|
|
201
|
+
const sub = args[0]?.toLowerCase() || "show";
|
|
202
|
+
switch (sub) {
|
|
203
|
+
case "show": {
|
|
204
|
+
const commit = args[1] || "HEAD";
|
|
205
|
+
printHeader();
|
|
206
|
+
const note = getNote(commit);
|
|
207
|
+
if (note) {
|
|
208
|
+
console.log(`Git Note for commit [${commit}] (refs/notes/lognexus):\n`);
|
|
209
|
+
console.log(note);
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
console.log(`No LogNexus note found attached to commit [${commit}].`);
|
|
213
|
+
console.log("Tip: Run 'lognexus note attach' to attach current state to this commit.");
|
|
214
|
+
}
|
|
215
|
+
console.log("");
|
|
216
|
+
break;
|
|
217
|
+
}
|
|
218
|
+
case "attach": {
|
|
219
|
+
const commit = args[1] || "HEAD";
|
|
220
|
+
printHeader();
|
|
221
|
+
const payload = attachCurrentStateToCommit(commit);
|
|
222
|
+
console.log(`[OK] Attached LogNexus note to commit [${commit}] (refs/notes/lognexus):`);
|
|
223
|
+
console.log(` Issue: ${payload.issue ? `#${payload.issue.id} — ${payload.issue.title}` : "(none)"}`);
|
|
224
|
+
console.log(` Subtask: ${payload.subtask ? `${payload.subtask.id} (${payload.subtask.title})` : "(none)"}`);
|
|
225
|
+
console.log(` Tier: ${payload.tier}\n`);
|
|
226
|
+
break;
|
|
227
|
+
}
|
|
228
|
+
case "list": {
|
|
229
|
+
printHeader();
|
|
230
|
+
const notes = listNotes();
|
|
231
|
+
console.log(`LogNexus Notes (refs/notes/lognexus) — ${notes.length} note(s):\n`);
|
|
232
|
+
if (notes.length === 0) {
|
|
233
|
+
console.log("No notes recorded yet.");
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
for (const n of notes) {
|
|
237
|
+
console.log(` • Commit: ${n.commitSha} (blob: ${n.noteBlob})`);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
console.log("");
|
|
241
|
+
break;
|
|
242
|
+
}
|
|
243
|
+
case "push": {
|
|
244
|
+
const remote = args[1] || "origin";
|
|
245
|
+
printHeader();
|
|
246
|
+
console.log(`Pushing refs/notes/lognexus to ${remote}...`);
|
|
247
|
+
const ok = pushNotes(remote);
|
|
248
|
+
if (ok) {
|
|
249
|
+
console.log(`[OK] Notes pushed to ${remote} successfully.\n`);
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
console.error(`[FAIL] Could not push notes to ${remote}.\n`);
|
|
253
|
+
}
|
|
254
|
+
break;
|
|
255
|
+
}
|
|
256
|
+
case "fetch": {
|
|
257
|
+
const remote = args[1] || "origin";
|
|
258
|
+
printHeader();
|
|
259
|
+
console.log(`Fetching refs/notes/lognexus from ${remote}...`);
|
|
260
|
+
const ok = fetchNotes(remote);
|
|
261
|
+
if (ok) {
|
|
262
|
+
console.log(`[OK] Notes fetched from ${remote} successfully.\n`);
|
|
263
|
+
}
|
|
264
|
+
else {
|
|
265
|
+
console.error(`[FAIL] Could not fetch notes from ${remote}.\n`);
|
|
266
|
+
}
|
|
267
|
+
break;
|
|
268
|
+
}
|
|
269
|
+
default:
|
|
270
|
+
console.error(`Unknown note subcommand: ${sub}\n`);
|
|
271
|
+
printUsage();
|
|
272
|
+
process.exit(1);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
async function handleTimeline(args) {
|
|
276
|
+
const flags = args.filter((arg) => arg.startsWith("-"));
|
|
277
|
+
const positional = args.filter((arg) => !arg.startsWith("-"));
|
|
278
|
+
const baseBranch = positional[0] || "main";
|
|
279
|
+
const known = ["--json", "--pr-body"];
|
|
280
|
+
const unknown = flags.filter((flag) => !known.includes(flag));
|
|
281
|
+
if (unknown.length > 0) {
|
|
282
|
+
console.error(`Unknown option(s) for timeline: ${unknown.join(", ")}\n`);
|
|
283
|
+
printUsage();
|
|
284
|
+
process.exit(1);
|
|
285
|
+
}
|
|
286
|
+
const asJson = flags.includes("--json");
|
|
287
|
+
const asPrBody = flags.includes("--pr-body");
|
|
288
|
+
const timeline = getJourneyTimeline(baseBranch);
|
|
289
|
+
// --json / --pr-body are machine-consumable: keep stdout free of banners.
|
|
290
|
+
if (asJson) {
|
|
291
|
+
console.log(JSON.stringify(timeline, null, 2));
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
if (asPrBody) {
|
|
295
|
+
console.log(timeline.prBodyDraft);
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
298
|
+
printHeader();
|
|
299
|
+
console.log(`Branch: ${timeline.branch}`);
|
|
300
|
+
console.log(`Base Branch: ${timeline.baseBranch}`);
|
|
301
|
+
console.log(`Commits: ${timeline.commitCount}\n`);
|
|
302
|
+
if (timeline.commitCount === 0) {
|
|
303
|
+
console.log("No commits ahead of the base branch.\n");
|
|
304
|
+
return;
|
|
305
|
+
}
|
|
306
|
+
console.log(timeline.markdownTable);
|
|
307
|
+
console.log("");
|
|
308
|
+
}
|
|
309
|
+
async function handleAudit(args) {
|
|
310
|
+
const baseBranch = args.find((arg) => !arg.startsWith("-")) || "main";
|
|
311
|
+
const result = auditBranch(baseBranch);
|
|
312
|
+
printHeader();
|
|
313
|
+
console.log(`Auditing ${result.commitCount} commit(s) against base branch '${baseBranch}'...\n`);
|
|
314
|
+
if (result.passed && result.violations.length === 0) {
|
|
315
|
+
console.log(`${formatAuditResult(result)}\n`);
|
|
316
|
+
return;
|
|
317
|
+
}
|
|
318
|
+
for (const violation of result.violations) {
|
|
319
|
+
const tag = violation.severity === "error" ? "[ERROR]" : "[WARN] ";
|
|
320
|
+
console.log(`${tag} ${violation.shortSha} ${violation.rule}: ${violation.message}`);
|
|
321
|
+
}
|
|
322
|
+
console.log(`\n${result.summary.errors} error(s), ${result.summary.warnings} warning(s) — ${result.passed ? "[PASS] No blocking violations" : "[FAIL] Review gate blocked"}\n`);
|
|
323
|
+
if (!result.passed) {
|
|
324
|
+
process.exit(1);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
66
327
|
async function main() {
|
|
67
328
|
const args = process.argv.slice(2);
|
|
68
329
|
const command = args[0]?.toLowerCase();
|
|
@@ -76,6 +337,22 @@ async function main() {
|
|
|
76
337
|
case "status":
|
|
77
338
|
await handleStatus();
|
|
78
339
|
break;
|
|
340
|
+
case "state":
|
|
341
|
+
await handleState(args.slice(1));
|
|
342
|
+
break;
|
|
343
|
+
case "note":
|
|
344
|
+
await handleNote(args.slice(1));
|
|
345
|
+
break;
|
|
346
|
+
case "timeline":
|
|
347
|
+
await handleTimeline(args.slice(1));
|
|
348
|
+
break;
|
|
349
|
+
case "audit":
|
|
350
|
+
await handleAudit(args.slice(1));
|
|
351
|
+
break;
|
|
352
|
+
case "mcp":
|
|
353
|
+
// stdout is reserved for JSON-RPC frames: never print the banner here.
|
|
354
|
+
await startMcpServer();
|
|
355
|
+
break;
|
|
79
356
|
case "help":
|
|
80
357
|
case "--help":
|
|
81
358
|
case "-h":
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/doctor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,QAAQ,CAAC,SAAS,GAAE,MAAsB,GAAG,eAAe,CAsC3E;AAED,wBAAgB,cAAc,IAAI,eAAe,CA2BhD;AAED,wBAAgB,gBAAgB,CAAC,SAAS,GAAE,MAAsB,GAAG,eAAe,
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,QAAQ,CAAC,SAAS,GAAE,MAAsB,GAAG,eAAe,CAsC3E;AAED,wBAAgB,cAAc,IAAI,eAAe,CA2BhD;AAED,wBAAgB,gBAAgB,CAAC,SAAS,GAAE,MAAsB,GAAG,eAAe,CAqCnF;AAED,wBAAgB,cAAc,CAAC,SAAS,GAAE,MAAsB,GAAG,eAAe,EAAE,CAEnF"}
|
package/dist/doctor.js
CHANGED
|
@@ -94,7 +94,7 @@ export function checkRulesConfig(targetDir = process.cwd()) {
|
|
|
94
94
|
return {
|
|
95
95
|
name: "LogNexus Rules",
|
|
96
96
|
status: "warn",
|
|
97
|
-
message: "Found legacy .shiplog/ directory —
|
|
97
|
+
message: "Found legacy .shiplog/ directory — run 'lognexus init' to scaffold .lognexus/",
|
|
98
98
|
};
|
|
99
99
|
}
|
|
100
100
|
return {
|
package/dist/doctor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
|