@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.
- package/README.md +39 -3
- package/dist/cli.js +208 -4
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +10 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -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 +197 -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/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,43 @@ 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
|
+
### 2. Connect via Model Context Protocol (MCP)
|
|
153
|
+
|
|
154
|
+
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:
|
|
155
|
+
|
|
156
|
+
**`claude_desktop_config.json` or Cursor MCP settings:**
|
|
157
|
+
```json
|
|
158
|
+
{
|
|
159
|
+
"mcpServers": {
|
|
160
|
+
"lognexus": {
|
|
161
|
+
"command": "npx",
|
|
162
|
+
"args": ["-y", "@digital-lake/lognexus", "mcp"]
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
**Exposed Capabilities:**
|
|
169
|
+
- **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`
|
|
170
|
+
- **Resources:** `lognexus://state`, `lognexus://routing`
|
|
171
|
+
- **Prompts:** `lognexus-plan`, `lognexus-review`
|
|
172
|
+
|
|
173
|
+
### 3. Install Rules in Your Agent Environment
|
|
138
174
|
|
|
139
175
|
- **Claude Code:**
|
|
140
176
|
```bash
|
package/dist/cli.js
CHANGED
|
@@ -1,26 +1,58 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { runDiagnostics } from "./doctor.js";
|
|
3
|
+
import { startMcpServer } from "./mcp/server.js";
|
|
4
|
+
import { attachCurrentStateToCommit } from "./notes/attach.js";
|
|
5
|
+
import { fetchNotes, getNote, listNotes, pushNotes } from "./notes/notes.js";
|
|
3
6
|
import { initProject } from "./scaffold.js";
|
|
7
|
+
import { clearState, finishSubtask, loadState, setSubtask } from "./state/manager.js";
|
|
8
|
+
import { syncStateFromGit } from "./state/sync.js";
|
|
4
9
|
import { getProjectStatus } from "./status.js";
|
|
5
10
|
function printHeader() {
|
|
6
11
|
console.log("\n🔷 LogNexus CLI — Digital Lake");
|
|
7
|
-
console.log(" The Git-Powered Context & Rules Framework for Native AI Agents\n");
|
|
12
|
+
console.log(" The Universal Git-Powered Context & Rules Framework for Native AI Agents\n");
|
|
8
13
|
}
|
|
9
14
|
function printUsage() {
|
|
10
15
|
printHeader();
|
|
11
16
|
console.log(`Usage:
|
|
12
|
-
lognexus <command> [options]
|
|
17
|
+
lognexus <command> [subcommand] [options]
|
|
13
18
|
|
|
14
19
|
Commands:
|
|
15
20
|
init Scaffold .lognexus/ configuration and rules in current repository
|
|
16
21
|
doctor Check Git, GitHub CLI authentication, and repository rules health
|
|
17
22
|
status Inspect current branch, active issue, and recommended tier
|
|
23
|
+
state Manage persistent agent state (.lognexus/state.json)
|
|
24
|
+
note Manage Git Notes under refs/notes/lognexus (git-ai standard)
|
|
25
|
+
mcp Start the LogNexus MCP server (stdio JSON-RPC 2.0) for native AI agents
|
|
18
26
|
help Display this help message
|
|
19
27
|
|
|
28
|
+
State Subcommands:
|
|
29
|
+
lognexus state [show] Display current active issue and task state
|
|
30
|
+
lognexus state sync Sync state from current Git branch & GitHub
|
|
31
|
+
lognexus state set-task <id> [t] Set active subtask (e.g. lognexus state set-task T1 "Add schema")
|
|
32
|
+
lognexus state finish-task <id> Mark subtask as completed (e.g. lognexus state finish-task T1)
|
|
33
|
+
lognexus state clear Reset persistent state to empty
|
|
34
|
+
|
|
35
|
+
Note Subcommands:
|
|
36
|
+
lognexus note [show] [commit] Display LogNexus Git Note for commit (default: HEAD)
|
|
37
|
+
lognexus note attach [commit] Attach current session state as Git Note to commit
|
|
38
|
+
lognexus note list List all commits with LogNexus Git Notes
|
|
39
|
+
lognexus note push [remote] Push refs/notes/lognexus to remote (default: origin)
|
|
40
|
+
lognexus note fetch [remote] Fetch refs/notes/lognexus from remote
|
|
41
|
+
|
|
42
|
+
MCP Server:
|
|
43
|
+
lognexus mcp Start MCP server on stdio (JSON-RPC 2.0) for Claude Code,
|
|
44
|
+
Cursor, VS Code, Antigravity or any MCP-compatible client
|
|
45
|
+
Tools: lognexus_status, lognexus_state_get, lognexus_state_sync, lognexus_state_set_task,
|
|
46
|
+
lognexus_state_finish_task, lognexus_state_clear, lognexus_note_show, lognexus_note_attach
|
|
47
|
+
Resources: lognexus://state, lognexus://routing
|
|
48
|
+
Prompts: lognexus-plan, lognexus-review
|
|
49
|
+
|
|
20
50
|
Examples:
|
|
21
51
|
npx @digital-lake/lognexus init
|
|
22
|
-
npx @digital-lake/lognexus
|
|
23
|
-
npx @digital-lake/lognexus
|
|
52
|
+
npx @digital-lake/lognexus state sync
|
|
53
|
+
npx @digital-lake/lognexus note attach HEAD
|
|
54
|
+
npx @digital-lake/lognexus note show HEAD
|
|
55
|
+
npx @digital-lake/lognexus mcp
|
|
24
56
|
`);
|
|
25
57
|
}
|
|
26
58
|
async function handleInit() {
|
|
@@ -63,6 +95,168 @@ async function handleStatus() {
|
|
|
63
95
|
console.log(`Rules Routing Mode: ${st.routingMode}`);
|
|
64
96
|
console.log(`Recommended Tier: ${st.recommendedTier}\n`);
|
|
65
97
|
}
|
|
98
|
+
async function handleState(args) {
|
|
99
|
+
const sub = args[0]?.toLowerCase() || "show";
|
|
100
|
+
switch (sub) {
|
|
101
|
+
case "show": {
|
|
102
|
+
printHeader();
|
|
103
|
+
const state = loadState();
|
|
104
|
+
console.log("Persistent Agent State (.lognexus/state.json):\n");
|
|
105
|
+
if (state.activeIssue) {
|
|
106
|
+
console.log(`Active Issue: #${state.activeIssue.id} — ${state.activeIssue.title}`);
|
|
107
|
+
console.log(`Branch: ${state.activeIssue.branch}`);
|
|
108
|
+
console.log(`Phase: ${state.activeIssue.phase}`);
|
|
109
|
+
console.log(`Tier: ${state.activeIssue.tier}`);
|
|
110
|
+
console.log(`Readiness: ${state.activeIssue.readiness}`);
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
console.log("Active Issue: (none)");
|
|
114
|
+
}
|
|
115
|
+
console.log("");
|
|
116
|
+
if (state.currentSubtask) {
|
|
117
|
+
console.log(`Current Subtask: ${state.currentSubtask.id} (${state.currentSubtask.status})`);
|
|
118
|
+
if (state.currentSubtask.title) {
|
|
119
|
+
console.log(` Title: ${state.currentSubtask.title}`);
|
|
120
|
+
}
|
|
121
|
+
if (state.currentSubtask.contract) {
|
|
122
|
+
console.log(` Allowed Files: ${state.currentSubtask.contract.allowedFiles.join(", ") || "(all)"}`);
|
|
123
|
+
console.log(` Decision Budget: ${state.currentSubtask.contract.decisionBudget}`);
|
|
124
|
+
if (state.currentSubtask.contract.verificationCmd) {
|
|
125
|
+
console.log(` Verify Command: ${state.currentSubtask.contract.verificationCmd}`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
console.log("Current Subtask: (none)");
|
|
131
|
+
}
|
|
132
|
+
console.log(`Completed Tasks: ${state.completedSubtasks.length > 0 ? state.completedSubtasks.join(", ") : "(none)"}`);
|
|
133
|
+
console.log(`Last Synchronized: ${state.lastSync}\n`);
|
|
134
|
+
break;
|
|
135
|
+
}
|
|
136
|
+
case "sync": {
|
|
137
|
+
printHeader();
|
|
138
|
+
console.log("Synchronizing state from current Git branch and GitHub...\n");
|
|
139
|
+
const synced = syncStateFromGit();
|
|
140
|
+
if (synced.activeIssue) {
|
|
141
|
+
console.log(`[OK] Synchronized with Issue #${synced.activeIssue.id} (${synced.activeIssue.title})`);
|
|
142
|
+
console.log(` Branch: ${synced.activeIssue.branch}`);
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
console.log("[OK] Synchronized. No active issue detected on current branch.");
|
|
146
|
+
}
|
|
147
|
+
console.log("");
|
|
148
|
+
break;
|
|
149
|
+
}
|
|
150
|
+
case "set-task": {
|
|
151
|
+
const taskId = args[1];
|
|
152
|
+
const title = args.slice(2).join(" ");
|
|
153
|
+
if (!taskId) {
|
|
154
|
+
console.error("Error: Subtask ID is required (e.g. lognexus state set-task T1 'Add schema')\n");
|
|
155
|
+
process.exit(1);
|
|
156
|
+
}
|
|
157
|
+
printHeader();
|
|
158
|
+
setSubtask(taskId, title);
|
|
159
|
+
console.log(`[OK] Active subtask set to: ${taskId}${title ? ` — ${title}` : ""}\n`);
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
case "finish-task": {
|
|
163
|
+
const taskId = args[1];
|
|
164
|
+
if (!taskId) {
|
|
165
|
+
console.error("Error: Subtask ID is required (e.g. lognexus state finish-task T1)\n");
|
|
166
|
+
process.exit(1);
|
|
167
|
+
}
|
|
168
|
+
printHeader();
|
|
169
|
+
finishSubtask(taskId);
|
|
170
|
+
console.log(`[OK] Subtask ${taskId} marked as completed.\n`);
|
|
171
|
+
break;
|
|
172
|
+
}
|
|
173
|
+
case "clear": {
|
|
174
|
+
printHeader();
|
|
175
|
+
clearState();
|
|
176
|
+
console.log("[OK] Persistent state cleared.\n");
|
|
177
|
+
break;
|
|
178
|
+
}
|
|
179
|
+
default:
|
|
180
|
+
console.error(`Unknown state subcommand: ${sub}\n`);
|
|
181
|
+
printUsage();
|
|
182
|
+
process.exit(1);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
async function handleNote(args) {
|
|
186
|
+
const sub = args[0]?.toLowerCase() || "show";
|
|
187
|
+
switch (sub) {
|
|
188
|
+
case "show": {
|
|
189
|
+
const commit = args[1] || "HEAD";
|
|
190
|
+
printHeader();
|
|
191
|
+
const note = getNote(commit);
|
|
192
|
+
if (note) {
|
|
193
|
+
console.log(`Git Note for commit [${commit}] (refs/notes/lognexus):\n`);
|
|
194
|
+
console.log(note);
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
console.log(`No LogNexus note found attached to commit [${commit}].`);
|
|
198
|
+
console.log("Tip: Run 'lognexus note attach' to attach current state to this commit.");
|
|
199
|
+
}
|
|
200
|
+
console.log("");
|
|
201
|
+
break;
|
|
202
|
+
}
|
|
203
|
+
case "attach": {
|
|
204
|
+
const commit = args[1] || "HEAD";
|
|
205
|
+
printHeader();
|
|
206
|
+
const payload = attachCurrentStateToCommit(commit);
|
|
207
|
+
console.log(`[OK] Attached LogNexus note to commit [${commit}] (refs/notes/lognexus):`);
|
|
208
|
+
console.log(` Issue: ${payload.issue ? `#${payload.issue.id} — ${payload.issue.title}` : "(none)"}`);
|
|
209
|
+
console.log(` Subtask: ${payload.subtask ? `${payload.subtask.id} (${payload.subtask.title})` : "(none)"}`);
|
|
210
|
+
console.log(` Tier: ${payload.tier}\n`);
|
|
211
|
+
break;
|
|
212
|
+
}
|
|
213
|
+
case "list": {
|
|
214
|
+
printHeader();
|
|
215
|
+
const notes = listNotes();
|
|
216
|
+
console.log(`LogNexus Notes (refs/notes/lognexus) — ${notes.length} note(s):\n`);
|
|
217
|
+
if (notes.length === 0) {
|
|
218
|
+
console.log("No notes recorded yet.");
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
for (const n of notes) {
|
|
222
|
+
console.log(` • Commit: ${n.commitSha} (blob: ${n.noteBlob})`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
console.log("");
|
|
226
|
+
break;
|
|
227
|
+
}
|
|
228
|
+
case "push": {
|
|
229
|
+
const remote = args[1] || "origin";
|
|
230
|
+
printHeader();
|
|
231
|
+
console.log(`Pushing refs/notes/lognexus to ${remote}...`);
|
|
232
|
+
const ok = pushNotes(remote);
|
|
233
|
+
if (ok) {
|
|
234
|
+
console.log(`[OK] Notes pushed to ${remote} successfully.\n`);
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
console.error(`[FAIL] Could not push notes to ${remote}.\n`);
|
|
238
|
+
}
|
|
239
|
+
break;
|
|
240
|
+
}
|
|
241
|
+
case "fetch": {
|
|
242
|
+
const remote = args[1] || "origin";
|
|
243
|
+
printHeader();
|
|
244
|
+
console.log(`Fetching refs/notes/lognexus from ${remote}...`);
|
|
245
|
+
const ok = fetchNotes(remote);
|
|
246
|
+
if (ok) {
|
|
247
|
+
console.log(`[OK] Notes fetched from ${remote} successfully.\n`);
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
console.error(`[FAIL] Could not fetch notes from ${remote}.\n`);
|
|
251
|
+
}
|
|
252
|
+
break;
|
|
253
|
+
}
|
|
254
|
+
default:
|
|
255
|
+
console.error(`Unknown note subcommand: ${sub}\n`);
|
|
256
|
+
printUsage();
|
|
257
|
+
process.exit(1);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
66
260
|
async function main() {
|
|
67
261
|
const args = process.argv.slice(2);
|
|
68
262
|
const command = args[0]?.toLowerCase();
|
|
@@ -76,6 +270,16 @@ async function main() {
|
|
|
76
270
|
case "status":
|
|
77
271
|
await handleStatus();
|
|
78
272
|
break;
|
|
273
|
+
case "state":
|
|
274
|
+
await handleState(args.slice(1));
|
|
275
|
+
break;
|
|
276
|
+
case "note":
|
|
277
|
+
await handleNote(args.slice(1));
|
|
278
|
+
break;
|
|
279
|
+
case "mcp":
|
|
280
|
+
// stdout is reserved for JSON-RPC frames: never print the banner here.
|
|
281
|
+
await startMcpServer();
|
|
282
|
+
break;
|
|
79
283
|
case "help":
|
|
80
284
|
case "--help":
|
|
81
285
|
case "-h":
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,SAAS,WAAW;IAClB,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
export { checkGit, checkGitHubCli, checkRulesConfig, runDiagnostics } from "./doctor.js";
|
|
2
|
-
export {
|
|
2
|
+
export { getMcpPrompt, listMcpPrompts, type PromptDefinition, type PromptMessage, type PromptResult, } from "./mcp/prompts.js";
|
|
3
|
+
export { listMcpResources, MCP_RESOURCE_PREFIX, type ResourceDefinition, readMcpResource, } from "./mcp/resources.js";
|
|
4
|
+
export { MCP_PROTOCOL_VERSION, MCP_SERVER_VERSION, processMcpMessage, startMcpServer, } from "./mcp/server.js";
|
|
5
|
+
export { callMcpTool, listMcpTools, MCP_SERVER_NAME, type ToolCallResult, type ToolDefinition, } from "./mcp/tools.js";
|
|
6
|
+
export { attachCurrentStateToCommit, buildStateNotePayload, type GitNotePayload, } from "./notes/attach.js";
|
|
7
|
+
export { attachNote, DEFAULT_NOTES_REF, fetchNotes, getNote, listNotes, type NoteOptions, pushNotes, } from "./notes/notes.js";
|
|
8
|
+
export { DEFAULT_ROUTING_TEMPLATE, initProject } from "./scaffold.js";
|
|
9
|
+
export { clearState, createEmptyState, finishSubtask, getStatePath, loadState, saveState, setSubtask, } from "./state/manager.js";
|
|
10
|
+
export * from "./state/schema.js";
|
|
11
|
+
export { fetchIssueMeta, getBranchName, syncStateFromGit } from "./state/sync.js";
|
|
3
12
|
export { getProjectStatus } from "./status.js";
|
|
4
13
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACzF,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACzF,OAAO,EACL,YAAY,EACZ,cAAc,EACd,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,YAAY,GAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,KAAK,kBAAkB,EACvB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,WAAW,EACX,YAAY,EACZ,eAAe,EACf,KAAK,cAAc,EACnB,KAAK,cAAc,GACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,EACrB,KAAK,cAAc,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,UAAU,EACV,OAAO,EACP,SAAS,EACT,KAAK,WAAW,EAChB,SAAS,GACV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,wBAAwB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,SAAS,EACT,SAAS,EACT,UAAU,GACX,MAAM,oBAAoB,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
export { checkGit, checkGitHubCli, checkRulesConfig, runDiagnostics } from "./doctor.js";
|
|
2
|
-
export {
|
|
2
|
+
export { getMcpPrompt, listMcpPrompts, } from "./mcp/prompts.js";
|
|
3
|
+
export { listMcpResources, MCP_RESOURCE_PREFIX, readMcpResource, } from "./mcp/resources.js";
|
|
4
|
+
export { MCP_PROTOCOL_VERSION, MCP_SERVER_VERSION, processMcpMessage, startMcpServer, } from "./mcp/server.js";
|
|
5
|
+
export { callMcpTool, listMcpTools, MCP_SERVER_NAME, } from "./mcp/tools.js";
|
|
6
|
+
export { attachCurrentStateToCommit, buildStateNotePayload, } from "./notes/attach.js";
|
|
7
|
+
export { attachNote, DEFAULT_NOTES_REF, fetchNotes, getNote, listNotes, pushNotes, } from "./notes/notes.js";
|
|
8
|
+
export { DEFAULT_ROUTING_TEMPLATE, initProject } from "./scaffold.js";
|
|
9
|
+
export { clearState, createEmptyState, finishSubtask, getStatePath, loadState, saveState, setSubtask, } from "./state/manager.js";
|
|
10
|
+
export * from "./state/schema.js";
|
|
11
|
+
export { fetchIssueMeta, getBranchName, syncStateFromGit } from "./state/sync.js";
|
|
3
12
|
export { getProjectStatus } from "./status.js";
|
|
4
13
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACzF,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACzF,OAAO,EACL,YAAY,EACZ,cAAc,GAIf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EAEnB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,WAAW,EACX,YAAY,EACZ,eAAe,GAGhB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,GAEtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,UAAU,EACV,OAAO,EACP,SAAS,EAET,SAAS,GACV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,wBAAwB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,SAAS,EACT,SAAS,EACT,UAAU,GACX,MAAM,oBAAoB,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export declare const MCP_PROMPT_PLAN = "lognexus-plan";
|
|
2
|
+
export declare const MCP_PROMPT_REVIEW = "lognexus-review";
|
|
3
|
+
export interface PromptArgument {
|
|
4
|
+
name: string;
|
|
5
|
+
description: string;
|
|
6
|
+
required: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface PromptDefinition {
|
|
9
|
+
name: string;
|
|
10
|
+
title: string;
|
|
11
|
+
description: string;
|
|
12
|
+
arguments: PromptArgument[];
|
|
13
|
+
}
|
|
14
|
+
export interface PromptMessage {
|
|
15
|
+
role: "user" | "assistant";
|
|
16
|
+
content: {
|
|
17
|
+
type: "text";
|
|
18
|
+
text: string;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export interface PromptResult {
|
|
22
|
+
description: string;
|
|
23
|
+
messages: PromptMessage[];
|
|
24
|
+
}
|
|
25
|
+
export declare class McpPromptError extends Error {
|
|
26
|
+
constructor(message: string);
|
|
27
|
+
}
|
|
28
|
+
export declare function listMcpPrompts(): PromptDefinition[];
|
|
29
|
+
export declare function getMcpPrompt(name: string, args?: Record<string, string>): PromptResult;
|
|
30
|
+
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/mcp/prompts.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,kBAAkB,CAAC;AAC/C,eAAO,MAAM,iBAAiB,oBAAoB,CAAC;AAEnD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,cAAc,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,qBAAa,cAAe,SAAQ,KAAK;IACvC,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAsDD,wBAAgB,cAAc,IAAI,gBAAgB,EAAE,CAEnD;AAyFD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,YAAY,CAc1F"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
export const MCP_PROMPT_PLAN = "lognexus-plan";
|
|
2
|
+
export const MCP_PROMPT_REVIEW = "lognexus-review";
|
|
3
|
+
export class McpPromptError extends Error {
|
|
4
|
+
constructor(message) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.name = "McpPromptError";
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
const PROMPT_DEFINITIONS = [
|
|
10
|
+
{
|
|
11
|
+
name: MCP_PROMPT_PLAN,
|
|
12
|
+
title: "Plan an issue into tier-scoped subtasks",
|
|
13
|
+
description: "Break a LogNexus issue down into ordered, verifiable subtasks with strict closed-delegation contracts delegated to the appropriate model tier.",
|
|
14
|
+
arguments: [
|
|
15
|
+
{
|
|
16
|
+
name: "issue",
|
|
17
|
+
description: "Issue identifier or URL, e.g. '#7' or a GitHub issue link.",
|
|
18
|
+
required: false,
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
name: "context",
|
|
22
|
+
description: "Extra architectural context, constraints or acceptance criteria.",
|
|
23
|
+
required: false,
|
|
24
|
+
},
|
|
25
|
+
],
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
name: MCP_PROMPT_REVIEW,
|
|
29
|
+
title: "Run the LogNexus review gate",
|
|
30
|
+
description: "Audit a diff or pull request against the LogNexus review gate before merging into main: contracts, verification, traceability and cross-model attribution.",
|
|
31
|
+
arguments: [
|
|
32
|
+
{
|
|
33
|
+
name: "target",
|
|
34
|
+
description: "Branch, pull request number or commit range under review.",
|
|
35
|
+
required: false,
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: "diff",
|
|
39
|
+
description: "The diff or changed-files summary to audit.",
|
|
40
|
+
required: false,
|
|
41
|
+
},
|
|
42
|
+
],
|
|
43
|
+
},
|
|
44
|
+
];
|
|
45
|
+
const CONTRACT_FORMAT = `### Contract
|
|
46
|
+
- **Allowed files:** \`path/to/file.ts\`, \`tests/file.test.ts\`
|
|
47
|
+
- **Must not change:** \`package.json\` dependencies, public interfaces
|
|
48
|
+
- **Stop and ask if:** the compiler requires new third-party dependencies
|
|
49
|
+
- **Verification required:** \`npm run build && npm run lint && npm test\` must pass
|
|
50
|
+
- **Decision budget:** \`none\``;
|
|
51
|
+
const TIER_TABLE = `| Tier | Role | Example models | Typical work |
|
|
52
|
+
| --- | --- | --- | --- |
|
|
53
|
+
| tier-1 | Reasoning, architecture, review | Claude Opus, OpenAI o3, Gemini Pro, DeepSeek R1 | Issue decomposition, architectural decisions, review gate |
|
|
54
|
+
| tier-2 | Large-context discovery and triage | Claude Sonnet, GPT-4.1, Gemini Pro (1M), DeepSeek V3 | Repository exploration, discovery triage |
|
|
55
|
+
| tier-3 | Scoped execution | Claude Haiku, GPT-4o-mini, Gemini Flash, DeepSeek Chat | Single-contract subtasks, atomic commits |`;
|
|
56
|
+
export function listMcpPrompts() {
|
|
57
|
+
return PROMPT_DEFINITIONS;
|
|
58
|
+
}
|
|
59
|
+
function textPrompt(description, text) {
|
|
60
|
+
return {
|
|
61
|
+
description,
|
|
62
|
+
messages: [
|
|
63
|
+
{
|
|
64
|
+
role: "user",
|
|
65
|
+
content: { type: "text", text },
|
|
66
|
+
},
|
|
67
|
+
],
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
function buildPlanPrompt(issue, context) {
|
|
71
|
+
const issueLine = issue ? `Target issue: ${issue}` : "Target issue: (the issue currently open)";
|
|
72
|
+
const contextBlock = context ? `\nAdditional context provided by the user:\n\n${context}\n` : "";
|
|
73
|
+
const text = `You are the tier-1 orchestrator for a LogNexus-governed repository. Plan the work described below as small, independently verifiable subtasks that a cheaper execution model can complete without improvising.
|
|
74
|
+
|
|
75
|
+
${issueLine}
|
|
76
|
+
${contextBlock}
|
|
77
|
+
## Rules
|
|
78
|
+
|
|
79
|
+
1. Decompose the work into ordered subtasks, each named \`[tier-X]\` according to the model tier suited to it.
|
|
80
|
+
2. Every subtask must carry a closed delegation contract. Never leave a subtask open-ended.
|
|
81
|
+
3. Subtasks must not overlap in the files they touch. If they would, split further or sequence them.
|
|
82
|
+
4. Each subtask must end in a state where the verification command passes.
|
|
83
|
+
5. Prefer the lowest tier that can safely complete the subtask. Escalate to tier-1 only for decisions the executor must not make.
|
|
84
|
+
6. Do not invent dependencies or APIs. If a capability is missing, the subtask must say "stop and ask".
|
|
85
|
+
|
|
86
|
+
## Tier taxonomy
|
|
87
|
+
|
|
88
|
+
${TIER_TABLE}
|
|
89
|
+
|
|
90
|
+
## Contract format (mandatory)
|
|
91
|
+
|
|
92
|
+
${CONTRACT_FORMAT}
|
|
93
|
+
|
|
94
|
+
## Output format
|
|
95
|
+
|
|
96
|
+
For each subtask emit exactly:
|
|
97
|
+
|
|
98
|
+
### [tier-X] <short imperative title>
|
|
99
|
+
- **Branch / commit:** \`feat(#<issue>/T<n>)\` or \`fix(#<issue>/T<n>)\`
|
|
100
|
+
- **Scope:** one or two sentences describing the exact change.
|
|
101
|
+
|
|
102
|
+
${CONTRACT_FORMAT}
|
|
103
|
+
|
|
104
|
+
Finally, propose the single verification command that gates the whole issue.`;
|
|
105
|
+
return textPrompt("Breakdown of an issue into tier-scoped subtasks with strict closed-delegation contracts.", text);
|
|
106
|
+
}
|
|
107
|
+
function buildReviewPrompt(target, diff) {
|
|
108
|
+
const targetLine = target ? `Under review: ${target}` : "Under review: the current branch diff";
|
|
109
|
+
const diffBlock = diff ? `\nDiff to audit:\n\n\`\`\`diff\n${diff}\n\`\`\`\n` : "";
|
|
110
|
+
const text = `You are the LogNexus review gate (tier-1). Your job is to decide whether the change below may be merged into \`main\`. Be strict and evidence-driven.
|
|
111
|
+
|
|
112
|
+
${targetLine}
|
|
113
|
+
${diffBlock}
|
|
114
|
+
## Gate checklist
|
|
115
|
+
|
|
116
|
+
1. **Contract compliance**: every changed file is inside the subtask's allowed files, and no file listed as forbidden was touched.
|
|
117
|
+
2. **Verification**: \`npm run build\`, \`npm run lint\` and \`npm test\` pass on the delivered code. Ask for the actual command output if it is missing.
|
|
118
|
+
3. **Scope**: no unrelated refactor, no unrequested dependency in \`package.json\`, no dead code or commented-out blocks.
|
|
119
|
+
4. **Correctness**: edge cases, error paths, encoding/line-ending handling and platform differences (Windows vs POSIX) are addressed.
|
|
120
|
+
5. **Traceability**: commits follow \`feat(#N/Tk)\` / \`fix(#N/Tk)\`, and the PR links the issue and the subtask contracts.
|
|
121
|
+
6. **Attribution**: authorship trailers (\`Authored-by\`, \`Reviewed-by\`, \`Last-code-by\`) are present and the reviewer differs from the code author.
|
|
122
|
+
7. **Tests**: new behaviour is covered by tests that fail when the behaviour is reverted. Tests must not be weakened to make them pass.
|
|
123
|
+
|
|
124
|
+
## Output format
|
|
125
|
+
|
|
126
|
+
Emit a verdict first, then the evidence:
|
|
127
|
+
|
|
128
|
+
- **Verdict:** APPROVE | REQUEST CHANGES
|
|
129
|
+
- **Blocking findings:** numbered list, each with \`path/to/file.ts:line\` and the concrete fix.
|
|
130
|
+
- **Non-blocking findings:** numbered list, or "none".
|
|
131
|
+
- **Verification observed:** which commands were run and their result.
|
|
132
|
+
|
|
133
|
+
Never approve on partial evidence. If a check cannot be verified from what you were given, list it as blocking.`;
|
|
134
|
+
return textPrompt("Review gate checklist for merging a branch into main.", text);
|
|
135
|
+
}
|
|
136
|
+
export function getMcpPrompt(name, args = {}) {
|
|
137
|
+
const issue = args.issue?.trim() || undefined;
|
|
138
|
+
const context = args.context?.trim() || undefined;
|
|
139
|
+
const target = args.target?.trim() || undefined;
|
|
140
|
+
const diff = args.diff?.trim() || undefined;
|
|
141
|
+
switch (name) {
|
|
142
|
+
case MCP_PROMPT_PLAN:
|
|
143
|
+
return buildPlanPrompt(issue, context);
|
|
144
|
+
case MCP_PROMPT_REVIEW:
|
|
145
|
+
return buildReviewPrompt(target, diff);
|
|
146
|
+
default:
|
|
147
|
+
throw new McpPromptError(`Unknown LogNexus prompt: '${name}'.`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/mcp/prompts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export declare const MCP_RESOURCE_PREFIX = "lognexus://";
|
|
2
|
+
export declare const STATE_RESOURCE_URI = "lognexus://state";
|
|
3
|
+
export declare const ROUTING_RESOURCE_URI = "lognexus://routing";
|
|
4
|
+
export interface ResourceDefinition {
|
|
5
|
+
uri: string;
|
|
6
|
+
name: string;
|
|
7
|
+
description: string;
|
|
8
|
+
mimeType: string;
|
|
9
|
+
}
|
|
10
|
+
export interface ResourceContent {
|
|
11
|
+
uri: string;
|
|
12
|
+
mimeType: string;
|
|
13
|
+
text: string;
|
|
14
|
+
}
|
|
15
|
+
export interface ResourceReadResult {
|
|
16
|
+
contents: ResourceContent[];
|
|
17
|
+
}
|
|
18
|
+
export declare class McpResourceError extends Error {
|
|
19
|
+
constructor(message: string);
|
|
20
|
+
}
|
|
21
|
+
export declare function listMcpResources(): ResourceDefinition[];
|
|
22
|
+
export declare function readStateResource(targetDir?: string): ResourceReadResult;
|
|
23
|
+
export declare function readRoutingResource(targetDir?: string): ResourceReadResult;
|
|
24
|
+
export declare function readMcpResource(uri: string, targetDir?: string): ResourceReadResult;
|
|
25
|
+
//# sourceMappingURL=resources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../src/mcp/resources.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,mBAAmB,gBAAgB,CAAC;AACjD,eAAO,MAAM,kBAAkB,qBAAgC,CAAC;AAChE,eAAO,MAAM,oBAAoB,uBAAkC,CAAC;AAEpE,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B;AAED,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAmBD,wBAAgB,gBAAgB,IAAI,kBAAkB,EAAE,CAEvD;AAED,wBAAgB,iBAAiB,CAAC,SAAS,GAAE,MAAsB,GAAG,kBAAkB,CAUvF;AAED,wBAAgB,mBAAmB,CAAC,SAAS,GAAE,MAAsB,GAAG,kBAAkB,CAwBzF;AAED,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EACX,SAAS,GAAE,MAAsB,GAChC,kBAAkB,CASpB"}
|