@minicor/mcp-server 3.2.0 → 3.2.1
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 +69 -24
- package/dist/bootstrap.d.ts +12 -0
- package/dist/bootstrap.d.ts.map +1 -0
- package/dist/bootstrap.js +244 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/config.d.ts +6 -3
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +14 -10
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +36 -5
- package/dist/index.js.map +1 -1
- package/dist/lib.d.ts.map +1 -1
- package/dist/lib.js +20 -1
- package/dist/lib.js.map +1 -1
- package/dist/prompts/workspace-session.d.ts +3 -0
- package/dist/prompts/workspace-session.d.ts.map +1 -0
- package/dist/prompts/workspace-session.js +58 -0
- package/dist/prompts/workspace-session.js.map +1 -0
- package/dist/state.d.ts +22 -0
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +12 -0
- package/dist/state.js.map +1 -1
- package/dist/tools/session.d.ts +8 -0
- package/dist/tools/session.d.ts.map +1 -0
- package/dist/tools/session.js +392 -0
- package/dist/tools/session.js.map +1 -0
- package/dist/tools/sync-tools.d.ts.map +1 -1
- package/dist/tools/sync-tools.js +37 -8
- package/dist/tools/sync-tools.js.map +1 -1
- package/package.json +3 -2
package/dist/lib.js
CHANGED
|
@@ -25,10 +25,12 @@ import { register as registerTfa } from "./tools/tfa.js";
|
|
|
25
25
|
import { register as registerIssues } from "./tools/issues.js";
|
|
26
26
|
import { register as registerAgents } from "./tools/agents.js";
|
|
27
27
|
import { register as registerSkills } from "./tools/skills.js";
|
|
28
|
+
import { register as registerSession, autoCheckpoint } from "./tools/session.js";
|
|
28
29
|
import { register as registerWorkflowGuide } from "./prompts/workflow-guide.js";
|
|
29
30
|
import { register as registerDebugExecution } from "./prompts/debug-execution.js";
|
|
30
31
|
import { register as registerBuildRpa } from "./prompts/build-rpa.js";
|
|
31
32
|
import { register as registerTfaGuide } from "./prompts/tfa-guide.js";
|
|
33
|
+
import { register as registerWorkspaceSession } from "./prompts/workspace-session.js";
|
|
32
34
|
const DEFAULT_VM_SERVICE_URL = "https://lam-vm-service-ernfuwetfa-uc.a.run.app";
|
|
33
35
|
function registerAllTools(deps) {
|
|
34
36
|
registerCore(deps);
|
|
@@ -41,18 +43,31 @@ function registerAllTools(deps) {
|
|
|
41
43
|
registerIssues(deps);
|
|
42
44
|
registerAgents(deps);
|
|
43
45
|
registerSkills(deps);
|
|
46
|
+
registerSession(deps);
|
|
44
47
|
registerWorkflowGuide(deps);
|
|
45
48
|
registerDebugExecution(deps);
|
|
46
49
|
registerBuildRpa(deps);
|
|
47
50
|
registerTfaGuide(deps);
|
|
51
|
+
registerWorkspaceSession(deps);
|
|
48
52
|
}
|
|
49
53
|
const DEFAULT_BASE_URL = "https://api.laminar.run";
|
|
54
|
+
const MINICOR_INSTRUCTIONS = `You are connected to the Minicor MCP server for RPA workflow automation.
|
|
55
|
+
|
|
56
|
+
CRITICAL: If the current directory contains a minicor.json file, you are in a workspace clone.
|
|
57
|
+
You MUST call session_start(directory) as your FIRST action. It returns the workspace rules
|
|
58
|
+
(AGENTS.md), prior session state for resuming, and all context you need. Follow the phase loop
|
|
59
|
+
it describes.
|
|
60
|
+
|
|
61
|
+
Before ending your session, call session_end() to persist your progress. Other agents (on other
|
|
62
|
+
machines, scheduled, or human-triggered) depend on this to resume where you left off.
|
|
63
|
+
|
|
64
|
+
If you are NOT in a workspace clone, use the tools freely — list_workspaces, clone_workspace, etc.`;
|
|
50
65
|
/**
|
|
51
66
|
* Create and connect a Minicor MCP server on the given transport.
|
|
52
67
|
* Returns a handle with a `close()` method for cleanup.
|
|
53
68
|
*/
|
|
54
69
|
export async function createMinicorServer(transport, opts = {}) {
|
|
55
|
-
const server = new McpServer({ name: "minicor", version: "3.0.0" });
|
|
70
|
+
const server = new McpServer({ name: "minicor", version: "3.0.0" }, { instructions: MINICOR_INSTRUCTIONS });
|
|
56
71
|
const clients = new Map();
|
|
57
72
|
const tokens = new Map();
|
|
58
73
|
const baseUrls = new Map();
|
|
@@ -107,9 +122,13 @@ export async function createMinicorServer(transport, opts = {}) {
|
|
|
107
122
|
};
|
|
108
123
|
registerAllTools(deps);
|
|
109
124
|
await server.connect(transport);
|
|
125
|
+
transport.onclose = async () => {
|
|
126
|
+
await autoCheckpoint(deps);
|
|
127
|
+
};
|
|
110
128
|
return {
|
|
111
129
|
server,
|
|
112
130
|
close: async () => {
|
|
131
|
+
await autoCheckpoint(deps);
|
|
113
132
|
try {
|
|
114
133
|
await server.close();
|
|
115
134
|
}
|
package/dist/lib.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAoB,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAe,MAAM,YAAY,CAAC;AAG1D,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,QAAQ,IAAI,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,QAAQ,IAAI,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,QAAQ,IAAI,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,QAAQ,IAAI,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-session.d.ts","sourceRoot":"","sources":["../../src/prompts/workspace-session.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,wBAAgB,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE,QAAQ,QA8D5C"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
export function register({ server }) {
|
|
5
|
+
server.prompt("workspace-session-guide", "Returns the workspace agent loop rules (AGENTS.md) and session lifecycle instructions. Use when starting work in a Minicor workspace clone.", {
|
|
6
|
+
directory: z
|
|
7
|
+
.string()
|
|
8
|
+
.optional()
|
|
9
|
+
.describe("Workspace clone directory (defaults to cwd)"),
|
|
10
|
+
}, async ({ directory }) => {
|
|
11
|
+
const dir = directory ? path.resolve(directory) : process.cwd();
|
|
12
|
+
let agentsMd = "";
|
|
13
|
+
const agentsPath = path.join(dir, "AGENTS.md");
|
|
14
|
+
if (fs.existsSync(agentsPath)) {
|
|
15
|
+
agentsMd = fs.readFileSync(agentsPath, "utf-8");
|
|
16
|
+
}
|
|
17
|
+
let sessionInfo = "No prior session found.";
|
|
18
|
+
const sessionPath = path.join(dir, ".minicor", "session.json");
|
|
19
|
+
if (fs.existsSync(sessionPath)) {
|
|
20
|
+
try {
|
|
21
|
+
const session = JSON.parse(fs.readFileSync(sessionPath, "utf-8"));
|
|
22
|
+
const phase = session.currentPhase || "unknown";
|
|
23
|
+
const task = session.workingOn?.description ||
|
|
24
|
+
session.workingOn?.workflow ||
|
|
25
|
+
"unknown";
|
|
26
|
+
sessionInfo =
|
|
27
|
+
`Prior session exists. Phase: ${phase}, Working on: ${task}, ` +
|
|
28
|
+
`Status: ${session.status}. Resume from here.`;
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
sessionInfo = "session.json exists but could not be parsed.";
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const text = `# Workspace Session Guide
|
|
35
|
+
|
|
36
|
+
## Session Lifecycle
|
|
37
|
+
|
|
38
|
+
1. **Start**: Call \`session_start(directory: "${dir}")\` as your FIRST action
|
|
39
|
+
2. **Work**: Follow the phase loop from AGENTS.md below
|
|
40
|
+
3. **Checkpoint**: Call \`session_checkpoint\` between phases to save progress
|
|
41
|
+
4. **End**: Call \`session_end\` before finishing — this persists state for the next agent
|
|
42
|
+
|
|
43
|
+
## Current Session State
|
|
44
|
+
|
|
45
|
+
${sessionInfo}
|
|
46
|
+
|
|
47
|
+
${agentsMd ? `## Agent Loop (AGENTS.md)\n\n${agentsMd}` : "No AGENTS.md found in this directory. This may not be a Minicor workspace clone."}`;
|
|
48
|
+
return {
|
|
49
|
+
messages: [
|
|
50
|
+
{
|
|
51
|
+
role: "user",
|
|
52
|
+
content: { type: "text", text },
|
|
53
|
+
},
|
|
54
|
+
],
|
|
55
|
+
};
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=workspace-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-session.js","sourceRoot":"","sources":["../../src/prompts/workspace-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,UAAU,QAAQ,CAAC,EAAE,MAAM,EAAY;IAC3C,MAAM,CAAC,MAAM,CACX,yBAAyB,EACzB,6IAA6I,EAC7I;QACE,SAAS,EAAE,CAAC;aACT,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,6CAA6C,CAAC;KAC3D,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QACtB,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QAEhE,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAC/C,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAClD,CAAC;QAED,IAAI,WAAW,GAAG,yBAAyB,CAAC;QAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;QAC/D,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;gBAClE,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,IAAI,SAAS,CAAC;gBAChD,MAAM,IAAI,GACR,OAAO,CAAC,SAAS,EAAE,WAAW;oBAC9B,OAAO,CAAC,SAAS,EAAE,QAAQ;oBAC3B,SAAS,CAAC;gBACZ,WAAW;oBACT,gCAAgC,KAAK,iBAAiB,IAAI,IAAI;wBAC9D,WAAW,OAAO,CAAC,MAAM,qBAAqB,CAAC;YACnD,CAAC;YAAC,MAAM,CAAC;gBACP,WAAW,GAAG,8CAA8C,CAAC;YAC/D,CAAC;QACH,CAAC;QAED,MAAM,IAAI,GAAG;;;;iDAI8B,GAAG;;;;;;;EAOlD,WAAW;;EAEX,QAAQ,CAAC,CAAC,CAAC,gCAAgC,QAAQ,EAAE,CAAC,CAAC,CAAC,kFAAkF,EAAE,CAAC;QAEzI,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAe;oBACrB,OAAO,EAAE,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE;iBACzC;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
package/dist/state.d.ts
CHANGED
|
@@ -25,4 +25,26 @@ export declare function getCachedVm(vmId: number): VmInfo | undefined;
|
|
|
25
25
|
export declare function setWorkspaceRegion(workspaceId: number, region: Region): void;
|
|
26
26
|
export declare function getWorkspaceRegion(workspaceId: number): Region | undefined;
|
|
27
27
|
export declare function clearWorkspaceRegionMap(): void;
|
|
28
|
+
export interface ActiveSession {
|
|
29
|
+
directory: string;
|
|
30
|
+
workspaceId: number;
|
|
31
|
+
region?: Region;
|
|
32
|
+
startedAt: string;
|
|
33
|
+
currentPhase: string;
|
|
34
|
+
lastCheckpoint?: string;
|
|
35
|
+
workingOn?: {
|
|
36
|
+
workflow?: string;
|
|
37
|
+
workflowId?: number;
|
|
38
|
+
step?: number;
|
|
39
|
+
stepName?: string;
|
|
40
|
+
description?: string;
|
|
41
|
+
};
|
|
42
|
+
completed: string[];
|
|
43
|
+
blocked: string[];
|
|
44
|
+
nextSteps: string[];
|
|
45
|
+
notes?: string;
|
|
46
|
+
}
|
|
47
|
+
export declare function getActiveSession(): ActiveSession | null;
|
|
48
|
+
export declare function setActiveSession(session: ActiveSession | null): void;
|
|
49
|
+
export declare function updateActiveSession(updates: Partial<ActiveSession>): void;
|
|
28
50
|
//# sourceMappingURL=state.d.ts.map
|
package/dist/state.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,KAAK,GAAG,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,IAAI,aAAa,EAAE,aAAa,GAAG,IAAW,CAAC;AAEtD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,QAE1D;AAED,wBAAgB,OAAO,IAAI,GAAG,CAAC,OAAO,GAAG,SAAS,CAKjD;AAID,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,IAAI,OAAO,EAAE,YAAY,GAAG,IAAW,CAAC;AAE/C,wBAAgB,UAAU,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,QAEpD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG5D;AAMD,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAErE;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE1E;AAED,wBAAgB,uBAAuB,SAEtC"}
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,KAAK,GAAG,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,IAAI,aAAa,EAAE,aAAa,GAAG,IAAW,CAAC;AAEtD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,QAE1D;AAED,wBAAgB,OAAO,IAAI,GAAG,CAAC,OAAO,GAAG,SAAS,CAKjD;AAID,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,IAAI,OAAO,EAAE,YAAY,GAAG,IAAW,CAAC;AAE/C,wBAAgB,UAAU,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,QAEpD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG5D;AAMD,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAErE;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE1E;AAED,wBAAgB,uBAAuB,SAEtC;AAID,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE;QACV,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAID,wBAAgB,gBAAgB,IAAI,aAAa,GAAG,IAAI,CAEvD;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,QAE7D;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,QAIlE"}
|
package/dist/state.js
CHANGED
|
@@ -32,4 +32,16 @@ export function getWorkspaceRegion(workspaceId) {
|
|
|
32
32
|
export function clearWorkspaceRegionMap() {
|
|
33
33
|
workspaceRegionMap.clear();
|
|
34
34
|
}
|
|
35
|
+
let activeSession = null;
|
|
36
|
+
export function getActiveSession() {
|
|
37
|
+
return activeSession;
|
|
38
|
+
}
|
|
39
|
+
export function setActiveSession(session) {
|
|
40
|
+
activeSession = session;
|
|
41
|
+
}
|
|
42
|
+
export function updateActiveSession(updates) {
|
|
43
|
+
if (activeSession) {
|
|
44
|
+
Object.assign(activeSession, updates);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
35
47
|
//# sourceMappingURL=state.js.map
|
package/dist/state.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH,MAAM,CAAC,IAAI,aAAa,GAAyB,IAAI,CAAC;AAEtD,MAAM,UAAU,gBAAgB,CAAC,IAA0B;IACzD,aAAa,GAAG,IAAI,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,OAAO;IACrB,IAAI,aAAa,EAAE,MAAM,IAAI,aAAa,EAAE,SAAS,EAAE,CAAC;QACtD,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,aAAa,CAAC,SAAS,EAAE,CAAC;IAC9E,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AASD,MAAM,CAAC,IAAI,OAAO,GAAwB,IAAI,CAAC;AAE/C,MAAM,UAAU,UAAU,CAAC,KAA0B;IACnD,OAAO,GAAG,KAAK,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;AAClD,CAAC;AAED,gEAAgE;AAEhE,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAkB,CAAC;AAErD,MAAM,UAAU,kBAAkB,CAAC,WAAmB,EAAE,MAAc;IACpE,kBAAkB,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,WAAmB;IACpD,OAAO,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,kBAAkB,CAAC,KAAK,EAAE,CAAC;AAC7B,CAAC"}
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH,MAAM,CAAC,IAAI,aAAa,GAAyB,IAAI,CAAC;AAEtD,MAAM,UAAU,gBAAgB,CAAC,IAA0B;IACzD,aAAa,GAAG,IAAI,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,OAAO;IACrB,IAAI,aAAa,EAAE,MAAM,IAAI,aAAa,EAAE,SAAS,EAAE,CAAC;QACtD,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,aAAa,CAAC,SAAS,EAAE,CAAC;IAC9E,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AASD,MAAM,CAAC,IAAI,OAAO,GAAwB,IAAI,CAAC;AAE/C,MAAM,UAAU,UAAU,CAAC,KAA0B;IACnD,OAAO,GAAG,KAAK,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;AAClD,CAAC;AAED,gEAAgE;AAEhE,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAkB,CAAC;AAErD,MAAM,UAAU,kBAAkB,CAAC,WAAmB,EAAE,MAAc;IACpE,kBAAkB,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,WAAmB;IACpD,OAAO,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,kBAAkB,CAAC,KAAK,EAAE,CAAC;AAC7B,CAAC;AAwBD,IAAI,aAAa,GAAyB,IAAI,CAAC;AAE/C,MAAM,UAAU,gBAAgB;IAC9B,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAA6B;IAC5D,aAAa,GAAG,OAAO,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAA+B;IACjE,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ToolDeps } from "../types.js";
|
|
2
|
+
export declare function register(deps: ToolDeps): void;
|
|
3
|
+
/**
|
|
4
|
+
* Auto-checkpoint on disconnect. Called from index.ts / lib.ts
|
|
5
|
+
* when the transport closes or process receives a signal.
|
|
6
|
+
*/
|
|
7
|
+
export declare function autoCheckpoint(deps: ToolDeps): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/tools/session.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AA4K5C,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,QA2StC;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BlE"}
|
|
@@ -0,0 +1,392 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import { ok, text } from "../helpers.js";
|
|
5
|
+
import { getActiveSession, setActiveSession, updateActiveSession, getWorkspaceRegion, } from "../state.js";
|
|
6
|
+
import { getWorkspacesRoot } from "../config.js";
|
|
7
|
+
function readWorkspaceContext(dir) {
|
|
8
|
+
const result = {};
|
|
9
|
+
const agentsPath = path.join(dir, "AGENTS.md");
|
|
10
|
+
if (fs.existsSync(agentsPath)) {
|
|
11
|
+
result.agentsMd = fs.readFileSync(agentsPath, "utf-8");
|
|
12
|
+
}
|
|
13
|
+
const wsPath = path.join(dir, ".minicor", "workspace.json");
|
|
14
|
+
if (fs.existsSync(wsPath)) {
|
|
15
|
+
result.workspace = JSON.parse(fs.readFileSync(wsPath, "utf-8"));
|
|
16
|
+
}
|
|
17
|
+
const ctxPath = path.join(dir, ".minicor", "context.md");
|
|
18
|
+
if (fs.existsSync(ctxPath)) {
|
|
19
|
+
result.context = fs.readFileSync(ctxPath, "utf-8");
|
|
20
|
+
result.contextExists = true;
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
result.contextExists = false;
|
|
24
|
+
result.contextHint =
|
|
25
|
+
"No context.md yet. Follow Phase 0 in AGENTS.md to build workspace understanding.";
|
|
26
|
+
}
|
|
27
|
+
const vmsPath = path.join(dir, ".minicor", "vms.json");
|
|
28
|
+
if (fs.existsSync(vmsPath)) {
|
|
29
|
+
result.vms = JSON.parse(fs.readFileSync(vmsPath, "utf-8"));
|
|
30
|
+
}
|
|
31
|
+
const agPath = path.join(dir, ".minicor", "agents.json");
|
|
32
|
+
if (fs.existsSync(agPath)) {
|
|
33
|
+
result.agents = JSON.parse(fs.readFileSync(agPath, "utf-8"));
|
|
34
|
+
}
|
|
35
|
+
const siPath = path.join(dir, ".minicor", "skill-index.json");
|
|
36
|
+
if (fs.existsSync(siPath)) {
|
|
37
|
+
result.skillIndex = JSON.parse(fs.readFileSync(siPath, "utf-8"));
|
|
38
|
+
}
|
|
39
|
+
const intakePath = path.join(dir, ".minicor", "intake");
|
|
40
|
+
if (fs.existsSync(intakePath)) {
|
|
41
|
+
const intakeFiles = fs
|
|
42
|
+
.readdirSync(intakePath)
|
|
43
|
+
.filter((f) => f !== "README.md");
|
|
44
|
+
result.intakeFiles = intakeFiles;
|
|
45
|
+
if (intakeFiles.length > 0) {
|
|
46
|
+
result.intakeHint = `${intakeFiles.length} file(s) in intake folder. Read them during Phase 0.`;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
const issuesPath = path.join(dir, ".minicor", "issues");
|
|
50
|
+
if (fs.existsSync(issuesPath)) {
|
|
51
|
+
result.issueFiles = fs
|
|
52
|
+
.readdirSync(issuesPath)
|
|
53
|
+
.filter((f) => f.endsWith(".md"));
|
|
54
|
+
}
|
|
55
|
+
const manifestPath = path.join(dir, "minicor.json");
|
|
56
|
+
if (fs.existsSync(manifestPath)) {
|
|
57
|
+
result.manifest = JSON.parse(fs.readFileSync(manifestPath, "utf-8"));
|
|
58
|
+
}
|
|
59
|
+
return result;
|
|
60
|
+
}
|
|
61
|
+
function readSessionJson(dir) {
|
|
62
|
+
const sessionPath = path.join(dir, ".minicor", "session.json");
|
|
63
|
+
if (!fs.existsSync(sessionPath))
|
|
64
|
+
return null;
|
|
65
|
+
try {
|
|
66
|
+
return JSON.parse(fs.readFileSync(sessionPath, "utf-8"));
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function writeSessionJson(dir, session) {
|
|
73
|
+
const minicorDir = path.join(dir, ".minicor");
|
|
74
|
+
if (!fs.existsSync(minicorDir))
|
|
75
|
+
fs.mkdirSync(minicorDir, { recursive: true });
|
|
76
|
+
fs.writeFileSync(path.join(minicorDir, "session.json"), JSON.stringify(session, null, 2) + "\n", "utf-8");
|
|
77
|
+
}
|
|
78
|
+
function buildSessionJson(session, status) {
|
|
79
|
+
return {
|
|
80
|
+
lastUpdated: new Date().toISOString(),
|
|
81
|
+
lastAgent: "mcp-session",
|
|
82
|
+
currentPhase: session.currentPhase,
|
|
83
|
+
status,
|
|
84
|
+
workingOn: session.workingOn,
|
|
85
|
+
completed: session.completed,
|
|
86
|
+
blocked: session.blocked,
|
|
87
|
+
nextSteps: session.nextSteps,
|
|
88
|
+
notes: session.notes,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
async function syncSessionIssue(deps, workspaceId, session, region) {
|
|
92
|
+
try {
|
|
93
|
+
const r = region ?? getWorkspaceRegion(workspaceId) ?? undefined;
|
|
94
|
+
const client = deps.client(r);
|
|
95
|
+
const issues = await client.listIssues(workspaceId);
|
|
96
|
+
const sessionIssue = issues.find((i) => i.title === "[Workspace:Session]");
|
|
97
|
+
const description = [
|
|
98
|
+
`## Session State`,
|
|
99
|
+
``,
|
|
100
|
+
`**Phase:** ${session.currentPhase}`,
|
|
101
|
+
`**Status:** ${session.status}`,
|
|
102
|
+
`**Last Updated:** ${session.lastUpdated}`,
|
|
103
|
+
`**Agent:** ${session.lastAgent}`,
|
|
104
|
+
``,
|
|
105
|
+
session.workingOn
|
|
106
|
+
? `### Working On\n${session.workingOn.description || session.workingOn.workflow || "N/A"}`
|
|
107
|
+
: "",
|
|
108
|
+
session.completed.length > 0
|
|
109
|
+
? `### Completed\n${session.completed.map((c) => `- ${c}`).join("\n")}`
|
|
110
|
+
: "",
|
|
111
|
+
session.blocked.length > 0
|
|
112
|
+
? `### Blocked\n${session.blocked.map((b) => `- ${b}`).join("\n")}`
|
|
113
|
+
: "",
|
|
114
|
+
session.nextSteps.length > 0
|
|
115
|
+
? `### Next Steps\n${session.nextSteps.map((n) => `- ${n}`).join("\n")}`
|
|
116
|
+
: "",
|
|
117
|
+
session.notes ? `### Notes\n${session.notes}` : "",
|
|
118
|
+
]
|
|
119
|
+
.filter(Boolean)
|
|
120
|
+
.join("\n");
|
|
121
|
+
if (sessionIssue) {
|
|
122
|
+
await client.updateIssue(workspaceId, sessionIssue.id, { description });
|
|
123
|
+
return `Updated issue #${sessionIssue.id}`;
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
const created = await client.createIssue(workspaceId, {
|
|
127
|
+
title: "[Workspace:Session]",
|
|
128
|
+
description,
|
|
129
|
+
});
|
|
130
|
+
return `Created issue #${created.id}`;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
catch (e) {
|
|
134
|
+
return `Failed to sync session issue: ${e.message}`;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
export function register(deps) {
|
|
138
|
+
const { server } = deps;
|
|
139
|
+
server.tool("session_start", `Start a workspace session. Call this FIRST when working in a Minicor workspace clone.
|
|
140
|
+
Does everything get_workspace_context does PLUS tracks an active session so session_checkpoint
|
|
141
|
+
and session_end can auto-persist your progress. If a prior session exists, returns resume
|
|
142
|
+
instructions prominently.`, {
|
|
143
|
+
directory: z
|
|
144
|
+
.string()
|
|
145
|
+
.optional()
|
|
146
|
+
.describe("Workspace clone directory (defaults to cwd)"),
|
|
147
|
+
agentName: z
|
|
148
|
+
.string()
|
|
149
|
+
.optional()
|
|
150
|
+
.describe("Name to identify this agent in session logs (default: 'mcp-session')"),
|
|
151
|
+
}, async ({ directory, agentName }) => {
|
|
152
|
+
try {
|
|
153
|
+
const dir = directory ? path.resolve(directory) : process.cwd();
|
|
154
|
+
const manifestPath = path.join(dir, "minicor.json");
|
|
155
|
+
if (!fs.existsSync(manifestPath)) {
|
|
156
|
+
return text("Not a Minicor workspace clone (no minicor.json found). " +
|
|
157
|
+
"Use clone_workspace to clone a workspace first.");
|
|
158
|
+
}
|
|
159
|
+
const context = readWorkspaceContext(dir);
|
|
160
|
+
const priorSession = readSessionJson(dir);
|
|
161
|
+
const manifest = context.manifest;
|
|
162
|
+
const workspace = context.workspace;
|
|
163
|
+
const workspaceId = manifest?.workspace ?? workspace?.id ?? 0;
|
|
164
|
+
const region = workspace?.region;
|
|
165
|
+
let resumePhase = "gather-context";
|
|
166
|
+
if (priorSession) {
|
|
167
|
+
resumePhase = priorSession.currentPhase || "gather-context";
|
|
168
|
+
}
|
|
169
|
+
setActiveSession({
|
|
170
|
+
directory: dir,
|
|
171
|
+
workspaceId,
|
|
172
|
+
region,
|
|
173
|
+
startedAt: new Date().toISOString(),
|
|
174
|
+
currentPhase: resumePhase,
|
|
175
|
+
completed: priorSession?.completed || [],
|
|
176
|
+
blocked: priorSession?.blocked || [],
|
|
177
|
+
nextSteps: priorSession?.nextSteps || [],
|
|
178
|
+
notes: priorSession?.notes,
|
|
179
|
+
workingOn: priorSession?.workingOn,
|
|
180
|
+
});
|
|
181
|
+
console.error(`[session] Started in ${dir} (workspace ${workspaceId}, phase: ${resumePhase})`);
|
|
182
|
+
const result = {
|
|
183
|
+
...context,
|
|
184
|
+
sessionActive: true,
|
|
185
|
+
workspacesRoot: getWorkspacesRoot() || null,
|
|
186
|
+
};
|
|
187
|
+
if (priorSession) {
|
|
188
|
+
result.session = priorSession;
|
|
189
|
+
const task = priorSession.workingOn?.description ||
|
|
190
|
+
priorSession.workingOn?.workflow ||
|
|
191
|
+
"unknown task";
|
|
192
|
+
result.resumeInstructions = {
|
|
193
|
+
message: `RESUME: A prior session exists. Last agent was in phase "${priorSession.currentPhase}", ` +
|
|
194
|
+
`working on: ${task}. Status: ${priorSession.status}.`,
|
|
195
|
+
nextSteps: priorSession.nextSteps,
|
|
196
|
+
blocked: priorSession.blocked,
|
|
197
|
+
completed: priorSession.completed,
|
|
198
|
+
action: "Resume from the indicated phase and task. Do NOT start over. " +
|
|
199
|
+
"Check blocked items to avoid known issues.",
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
result.session = null;
|
|
204
|
+
result.resumeInstructions = {
|
|
205
|
+
message: "No prior session. Start from Phase 0 (Gather Context).",
|
|
206
|
+
action: "Follow the AGENTS.md loop starting from Phase 0. " +
|
|
207
|
+
"Call session_checkpoint between phases to save progress.",
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
return ok(result);
|
|
211
|
+
}
|
|
212
|
+
catch (e) {
|
|
213
|
+
return text(`Error starting session: ${e.message}`);
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
server.tool("session_checkpoint", `Save session progress. Writes .minicor/session.json and optionally syncs to a
|
|
217
|
+
[Workspace:Session] issue on the platform. Call between phases or after significant progress.`, {
|
|
218
|
+
phase: z
|
|
219
|
+
.enum([
|
|
220
|
+
"gather-context",
|
|
221
|
+
"orient",
|
|
222
|
+
"scope",
|
|
223
|
+
"build",
|
|
224
|
+
"test",
|
|
225
|
+
"harden",
|
|
226
|
+
"learn",
|
|
227
|
+
])
|
|
228
|
+
.describe("Current phase in the agent loop"),
|
|
229
|
+
status: z
|
|
230
|
+
.enum(["in-progress", "completed", "blocked", "interrupted"])
|
|
231
|
+
.default("in-progress")
|
|
232
|
+
.describe("Session status"),
|
|
233
|
+
workingOn: z
|
|
234
|
+
.object({
|
|
235
|
+
workflow: z.string().optional(),
|
|
236
|
+
workflowId: z.number().optional(),
|
|
237
|
+
step: z.number().optional(),
|
|
238
|
+
stepName: z.string().optional(),
|
|
239
|
+
description: z.string().optional(),
|
|
240
|
+
})
|
|
241
|
+
.optional()
|
|
242
|
+
.describe("What you're currently working on"),
|
|
243
|
+
completed: z
|
|
244
|
+
.array(z.string())
|
|
245
|
+
.optional()
|
|
246
|
+
.describe("List of completed items"),
|
|
247
|
+
blocked: z
|
|
248
|
+
.array(z.string())
|
|
249
|
+
.optional()
|
|
250
|
+
.describe("List of blockers"),
|
|
251
|
+
nextSteps: z
|
|
252
|
+
.array(z.string())
|
|
253
|
+
.optional()
|
|
254
|
+
.describe("Clear instructions for the next agent"),
|
|
255
|
+
notes: z
|
|
256
|
+
.string()
|
|
257
|
+
.optional()
|
|
258
|
+
.describe("Anything the next agent should know"),
|
|
259
|
+
syncToIssue: z
|
|
260
|
+
.boolean()
|
|
261
|
+
.default(true)
|
|
262
|
+
.describe("Also sync to [Workspace:Session] issue on the platform"),
|
|
263
|
+
}, async ({ phase, status, workingOn, completed, blocked, nextSteps, notes, syncToIssue, }) => {
|
|
264
|
+
try {
|
|
265
|
+
const session = getActiveSession();
|
|
266
|
+
if (!session) {
|
|
267
|
+
return text("No active session. Call session_start first.");
|
|
268
|
+
}
|
|
269
|
+
updateActiveSession({
|
|
270
|
+
currentPhase: phase,
|
|
271
|
+
workingOn,
|
|
272
|
+
completed: completed || session.completed,
|
|
273
|
+
blocked: blocked || session.blocked,
|
|
274
|
+
nextSteps: nextSteps || session.nextSteps,
|
|
275
|
+
notes: notes ?? session.notes,
|
|
276
|
+
lastCheckpoint: new Date().toISOString(),
|
|
277
|
+
});
|
|
278
|
+
const updated = getActiveSession();
|
|
279
|
+
const sessionData = buildSessionJson(updated, status);
|
|
280
|
+
writeSessionJson(updated.directory, sessionData);
|
|
281
|
+
const result = {
|
|
282
|
+
saved: true,
|
|
283
|
+
file: path.join(updated.directory, ".minicor", "session.json"),
|
|
284
|
+
phase,
|
|
285
|
+
status,
|
|
286
|
+
};
|
|
287
|
+
if (syncToIssue && updated.workspaceId) {
|
|
288
|
+
result.issueSync = await syncSessionIssue(deps, updated.workspaceId, sessionData, updated.region);
|
|
289
|
+
}
|
|
290
|
+
console.error(`[session] Checkpoint: phase=${phase}, status=${status}`);
|
|
291
|
+
return ok(result);
|
|
292
|
+
}
|
|
293
|
+
catch (e) {
|
|
294
|
+
return text(`Error saving checkpoint: ${e.message}`);
|
|
295
|
+
}
|
|
296
|
+
});
|
|
297
|
+
server.tool("session_end", `End the workspace session. Writes final session.json, syncs [Workspace:Session] issue,
|
|
298
|
+
and optionally updates context.md. Call this before ending your work.`, {
|
|
299
|
+
status: z
|
|
300
|
+
.enum(["completed", "blocked", "interrupted"])
|
|
301
|
+
.default("completed")
|
|
302
|
+
.describe("Final session status"),
|
|
303
|
+
summary: z
|
|
304
|
+
.string()
|
|
305
|
+
.optional()
|
|
306
|
+
.describe("Summary of what was accomplished"),
|
|
307
|
+
nextSteps: z
|
|
308
|
+
.array(z.string())
|
|
309
|
+
.optional()
|
|
310
|
+
.describe("Clear instructions for the next agent"),
|
|
311
|
+
blocked: z
|
|
312
|
+
.array(z.string())
|
|
313
|
+
.optional()
|
|
314
|
+
.describe("Blockers if status is blocked"),
|
|
315
|
+
contextUpdate: z
|
|
316
|
+
.string()
|
|
317
|
+
.optional()
|
|
318
|
+
.describe("If provided, appends to .minicor/context.md"),
|
|
319
|
+
}, async ({ status, summary, nextSteps, blocked, contextUpdate }) => {
|
|
320
|
+
try {
|
|
321
|
+
const session = getActiveSession();
|
|
322
|
+
if (!session) {
|
|
323
|
+
return text("No active session. Call session_start first.");
|
|
324
|
+
}
|
|
325
|
+
if (nextSteps)
|
|
326
|
+
session.nextSteps = nextSteps;
|
|
327
|
+
if (blocked)
|
|
328
|
+
session.blocked = blocked;
|
|
329
|
+
if (summary) {
|
|
330
|
+
session.completed.push(summary);
|
|
331
|
+
session.notes = summary;
|
|
332
|
+
}
|
|
333
|
+
const sessionData = buildSessionJson(session, status);
|
|
334
|
+
writeSessionJson(session.directory, sessionData);
|
|
335
|
+
const result = {
|
|
336
|
+
ended: true,
|
|
337
|
+
file: path.join(session.directory, ".minicor", "session.json"),
|
|
338
|
+
phase: session.currentPhase,
|
|
339
|
+
status,
|
|
340
|
+
};
|
|
341
|
+
if (session.workspaceId) {
|
|
342
|
+
result.issueSync = await syncSessionIssue(deps, session.workspaceId, sessionData, session.region);
|
|
343
|
+
}
|
|
344
|
+
if (contextUpdate) {
|
|
345
|
+
const ctxPath = path.join(session.directory, ".minicor", "context.md");
|
|
346
|
+
const existing = fs.existsSync(ctxPath)
|
|
347
|
+
? fs.readFileSync(ctxPath, "utf-8")
|
|
348
|
+
: "";
|
|
349
|
+
const timestamp = new Date().toISOString().split("T")[0];
|
|
350
|
+
const appended = `${existing}\n\n## Update (${timestamp})\n\n${contextUpdate}\n`;
|
|
351
|
+
fs.writeFileSync(ctxPath, appended, "utf-8");
|
|
352
|
+
result.contextUpdated = true;
|
|
353
|
+
}
|
|
354
|
+
console.error(`[session] Ended: status=${status}, workspace=${session.workspaceId}`);
|
|
355
|
+
setActiveSession(null);
|
|
356
|
+
return ok(result);
|
|
357
|
+
}
|
|
358
|
+
catch (e) {
|
|
359
|
+
return text(`Error ending session: ${e.message}`);
|
|
360
|
+
}
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* Auto-checkpoint on disconnect. Called from index.ts / lib.ts
|
|
365
|
+
* when the transport closes or process receives a signal.
|
|
366
|
+
*/
|
|
367
|
+
export async function autoCheckpoint(deps) {
|
|
368
|
+
const session = getActiveSession();
|
|
369
|
+
if (!session)
|
|
370
|
+
return;
|
|
371
|
+
console.error("[session] Auto-checkpoint on disconnect...");
|
|
372
|
+
const sessionData = buildSessionJson(session, "interrupted");
|
|
373
|
+
sessionData.notes =
|
|
374
|
+
(sessionData.notes ? sessionData.notes + "\n" : "") +
|
|
375
|
+
"Session interrupted — auto-saved on disconnect.";
|
|
376
|
+
try {
|
|
377
|
+
writeSessionJson(session.directory, sessionData);
|
|
378
|
+
}
|
|
379
|
+
catch (e) {
|
|
380
|
+
console.error(`[session] Failed to write session.json: ${e.message}`);
|
|
381
|
+
}
|
|
382
|
+
if (session.workspaceId) {
|
|
383
|
+
try {
|
|
384
|
+
await syncSessionIssue(deps, session.workspaceId, sessionData, session.region);
|
|
385
|
+
}
|
|
386
|
+
catch (e) {
|
|
387
|
+
console.error(`[session] Failed to sync issue: ${e.message}`);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
setActiveSession(null);
|
|
391
|
+
}
|
|
392
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/tools/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-tools.d.ts","sourceRoot":"","sources":["../../src/tools/sync-tools.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sync-tools.d.ts","sourceRoot":"","sources":["../../src/tools/sync-tools.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAO5C,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,QAoQtC"}
|