@joseph0926/plan-loop-core 1.0.2
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/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/state.d.ts +49 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +154 -0
- package/dist/state.js.map +1 -0
- package/dist/tools.d.ts +91 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +284 -0
- package/dist/tools.js.map +1 -0
- package/dist/types.d.ts +99 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +46 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,cAAc,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,cAAc,YAAY,CAAC"}
|
package/dist/state.d.ts
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plan Loop MCP - State Management
|
|
3
|
+
* Atomic write (temp → rename) for safe concurrent access
|
|
4
|
+
*/
|
|
5
|
+
import type { Session, SessionStatus } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Save session with atomic write
|
|
8
|
+
*/
|
|
9
|
+
export declare function save(session: Session): void;
|
|
10
|
+
/**
|
|
11
|
+
* Load session by ID
|
|
12
|
+
* Returns null if not found or corrupted
|
|
13
|
+
*/
|
|
14
|
+
export declare function load(id: string): Session | null;
|
|
15
|
+
export interface ListOptions {
|
|
16
|
+
status?: SessionStatus | SessionStatus[];
|
|
17
|
+
sort?: 'createdAt' | 'updatedAt';
|
|
18
|
+
order?: 'asc' | 'desc';
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* List all sessions (summary only)
|
|
22
|
+
* goal is truncated to 30 characters (UTF-16 units) + "..." if exceeded
|
|
23
|
+
* Supports filtering by status and sorting
|
|
24
|
+
*/
|
|
25
|
+
export declare function list(options?: ListOptions): {
|
|
26
|
+
id: string;
|
|
27
|
+
goal: string;
|
|
28
|
+
status: SessionStatus;
|
|
29
|
+
createdAt: string;
|
|
30
|
+
updatedAt: string;
|
|
31
|
+
}[];
|
|
32
|
+
/**
|
|
33
|
+
* Create a new session
|
|
34
|
+
*/
|
|
35
|
+
export declare function create(goal: string, maxIterations?: number): Session;
|
|
36
|
+
/**
|
|
37
|
+
* Get latest plan from session
|
|
38
|
+
*/
|
|
39
|
+
export declare function getLatestPlan(session: Session): import("./types.js").Plan | null;
|
|
40
|
+
/**
|
|
41
|
+
* Get latest feedback from session
|
|
42
|
+
*/
|
|
43
|
+
export declare function getLatestFeedback(session: Session): import("./types.js").Feedback | null;
|
|
44
|
+
/**
|
|
45
|
+
* Delete session by ID
|
|
46
|
+
* Returns true if deleted, false if not found
|
|
47
|
+
*/
|
|
48
|
+
export declare function remove(id: string): boolean;
|
|
49
|
+
//# sourceMappingURL=state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAezD;;GAEG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAS3C;AAED;;;GAGG;AACH,wBAAgB,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAa/C;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,aAAa,GAAG,aAAa,EAAE,CAAC;IACzC,IAAI,CAAC,EAAE,WAAW,GAAG,WAAW,CAAC;IACjC,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,OAAO,GAAE,WAAgB,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,aAAa,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EAAE,CAkD3I;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,SAAI,GAAG,OAAO,CAkB/D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,oCAK7C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,wCAKjD;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAc1C"}
|
package/dist/state.js
ADDED
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plan Loop MCP - State Management
|
|
3
|
+
* Atomic write (temp → rename) for safe concurrent access
|
|
4
|
+
*/
|
|
5
|
+
import { writeFileSync, readFileSync, renameSync, mkdirSync, readdirSync, existsSync, unlinkSync } from 'fs';
|
|
6
|
+
import { join } from 'path';
|
|
7
|
+
import { homedir } from 'os';
|
|
8
|
+
import { randomUUID } from 'crypto';
|
|
9
|
+
// Support PLAN_LOOP_STATE_DIR env var for test isolation
|
|
10
|
+
// Use function to allow dynamic env var reading
|
|
11
|
+
function getStateDir() {
|
|
12
|
+
return process.env.PLAN_LOOP_STATE_DIR || join(homedir(), '.plan-loop', 'sessions');
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Ensure state directory exists
|
|
16
|
+
*/
|
|
17
|
+
function ensureDir() {
|
|
18
|
+
mkdirSync(getStateDir(), { recursive: true });
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Save session with atomic write
|
|
22
|
+
*/
|
|
23
|
+
export function save(session) {
|
|
24
|
+
ensureDir();
|
|
25
|
+
session.updatedAt = new Date().toISOString();
|
|
26
|
+
const filePath = join(getStateDir(), `${session.id}.json`);
|
|
27
|
+
const tempPath = `${filePath}.tmp`;
|
|
28
|
+
writeFileSync(tempPath, JSON.stringify(session, null, 2));
|
|
29
|
+
renameSync(tempPath, filePath); // atomic
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Load session by ID
|
|
33
|
+
* Returns null if not found or corrupted
|
|
34
|
+
*/
|
|
35
|
+
export function load(id) {
|
|
36
|
+
try {
|
|
37
|
+
const filePath = join(getStateDir(), `${id}.json`);
|
|
38
|
+
if (!existsSync(filePath)) {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
const data = readFileSync(filePath, 'utf-8');
|
|
42
|
+
return JSON.parse(data);
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
// Log to stderr (stdout is reserved for JSON-RPC)
|
|
46
|
+
console.error(`[plan-loop] Failed to load session ${id}:`, err);
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* List all sessions (summary only)
|
|
52
|
+
* goal is truncated to 30 characters (UTF-16 units) + "..." if exceeded
|
|
53
|
+
* Supports filtering by status and sorting
|
|
54
|
+
*/
|
|
55
|
+
export function list(options = {}) {
|
|
56
|
+
ensureDir();
|
|
57
|
+
const { status, sort = 'updatedAt', order = 'desc' } = options;
|
|
58
|
+
// Normalize status filter to array
|
|
59
|
+
const statusFilter = status
|
|
60
|
+
? Array.isArray(status)
|
|
61
|
+
? status
|
|
62
|
+
: [status]
|
|
63
|
+
: null;
|
|
64
|
+
try {
|
|
65
|
+
const files = readdirSync(getStateDir()).filter((f) => f.endsWith('.json') && !f.endsWith('.tmp'));
|
|
66
|
+
let sessions = files
|
|
67
|
+
.map((f) => {
|
|
68
|
+
const session = load(f.replace('.json', ''));
|
|
69
|
+
if (!session)
|
|
70
|
+
return null;
|
|
71
|
+
// Apply status filter
|
|
72
|
+
if (statusFilter && !statusFilter.includes(session.status)) {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
const truncatedGoal = session.goal.length > 30 ? session.goal.slice(0, 30) + '...' : session.goal;
|
|
76
|
+
return {
|
|
77
|
+
id: session.id,
|
|
78
|
+
goal: truncatedGoal,
|
|
79
|
+
status: session.status,
|
|
80
|
+
createdAt: session.createdAt,
|
|
81
|
+
updatedAt: session.updatedAt,
|
|
82
|
+
};
|
|
83
|
+
})
|
|
84
|
+
.filter((s) => s !== null);
|
|
85
|
+
// Sort
|
|
86
|
+
sessions.sort((a, b) => {
|
|
87
|
+
const aTime = new Date(a[sort]).getTime();
|
|
88
|
+
const bTime = new Date(b[sort]).getTime();
|
|
89
|
+
return order === 'asc' ? aTime - bTime : bTime - aTime;
|
|
90
|
+
});
|
|
91
|
+
return sessions;
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
console.error('[plan-loop] Failed to list sessions:', err);
|
|
95
|
+
return [];
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Create a new session
|
|
100
|
+
*/
|
|
101
|
+
export function create(goal, maxIterations = 5) {
|
|
102
|
+
const now = new Date().toISOString();
|
|
103
|
+
const session = {
|
|
104
|
+
id: randomUUID(),
|
|
105
|
+
goal,
|
|
106
|
+
status: 'drafting',
|
|
107
|
+
version: 0,
|
|
108
|
+
iteration: 0,
|
|
109
|
+
maxIterations,
|
|
110
|
+
plans: [],
|
|
111
|
+
feedbacks: [],
|
|
112
|
+
createdAt: now,
|
|
113
|
+
updatedAt: now,
|
|
114
|
+
};
|
|
115
|
+
save(session);
|
|
116
|
+
return session;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Get latest plan from session
|
|
120
|
+
*/
|
|
121
|
+
export function getLatestPlan(session) {
|
|
122
|
+
if (session.plans.length === 0) {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
return session.plans[session.plans.length - 1];
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Get latest feedback from session
|
|
129
|
+
*/
|
|
130
|
+
export function getLatestFeedback(session) {
|
|
131
|
+
if (session.feedbacks.length === 0) {
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
return session.feedbacks[session.feedbacks.length - 1];
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Delete session by ID
|
|
138
|
+
* Returns true if deleted, false if not found
|
|
139
|
+
*/
|
|
140
|
+
export function remove(id) {
|
|
141
|
+
const filePath = join(getStateDir(), `${id}.json`);
|
|
142
|
+
if (!existsSync(filePath)) {
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
try {
|
|
146
|
+
unlinkSync(filePath);
|
|
147
|
+
return true;
|
|
148
|
+
}
|
|
149
|
+
catch (err) {
|
|
150
|
+
console.error(`[plan-loop] Failed to delete session ${id}:`, err);
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC7G,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAGpC,yDAAyD;AACzD,gDAAgD;AAChD,SAAS,WAAW;IAClB,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;AACtF,CAAC;AAED;;GAEG;AACH,SAAS,SAAS;IAChB,SAAS,CAAC,WAAW,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,IAAI,CAAC,OAAgB;IACnC,SAAS,EAAE,CAAC;IACZ,OAAO,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAE7C,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,GAAG,QAAQ,MAAM,CAAC;IAEnC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1D,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS;AAC3C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,IAAI,CAAC,EAAU;IAC7B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QACnD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;IACrC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,kDAAkD;QAClD,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAQD;;;;GAIG;AACH,MAAM,UAAU,IAAI,CAAC,UAAuB,EAAE;IAC5C,SAAS,EAAE,CAAC;IAEZ,MAAM,EAAE,MAAM,EAAE,IAAI,GAAG,WAAW,EAAE,KAAK,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC;IAE/D,mCAAmC;IACnC,MAAM,YAAY,GAA2B,MAAM;QACjD,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YACrB,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,CAAC,MAAM,CAAC;QACZ,CAAC,CAAC,IAAI,CAAC;IAET,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QAEnG,IAAI,QAAQ,GAAG,KAAK;aACjB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACT,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;YAC7C,IAAI,CAAC,OAAO;gBAAE,OAAO,IAAI,CAAC;YAE1B,sBAAsB;YACtB,IAAI,YAAY,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3D,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,aAAa,GACjB,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;YAE9E,OAAO;gBACL,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,IAAI,EAAE,aAAa;gBACnB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;aAC7B,CAAC;QACJ,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,CAAC,EAA8B,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;QAEzD,OAAO;QACP,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACrB,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YAC1C,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YAC1C,OAAO,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,GAAG,CAAC,CAAC;QAC3D,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,MAAM,CAAC,IAAY,EAAE,aAAa,GAAG,CAAC;IACpD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAErC,MAAM,OAAO,GAAY;QACvB,EAAE,EAAE,UAAU,EAAE;QAChB,IAAI;QACJ,MAAM,EAAE,UAAU;QAClB,OAAO,EAAE,CAAC;QACV,SAAS,EAAE,CAAC;QACZ,aAAa;QACb,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,EAAE;QACb,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG;KACf,CAAC;IAEF,IAAI,CAAC,OAAO,CAAC,CAAC;IACd,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAgB;IAChD,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACzD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,MAAM,CAAC,EAAU;IAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IAEnD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAClE,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
package/dist/tools.d.ts
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plan Loop MCP - Tool Implementations
|
|
3
|
+
*/
|
|
4
|
+
import type { PlStartInput, PlSubmitInput, PlGetPlanInput, PlFeedbackInput, PlGetFeedbackInput, PlStatusInput, PlListInput, PlForceApproveInput, PlDeleteInput } from './types.js';
|
|
5
|
+
declare function successResponse(data: unknown): {
|
|
6
|
+
content: {
|
|
7
|
+
type: "text";
|
|
8
|
+
text: string;
|
|
9
|
+
}[];
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* pl_start - Create a new session
|
|
13
|
+
*/
|
|
14
|
+
export declare function plStart(input: PlStartInput): {
|
|
15
|
+
content: {
|
|
16
|
+
type: "text";
|
|
17
|
+
text: string;
|
|
18
|
+
}[];
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* pl_submit - Submit a plan
|
|
22
|
+
* Allowed states: drafting, pending_revision
|
|
23
|
+
*/
|
|
24
|
+
export declare function plSubmit(input: PlSubmitInput): {
|
|
25
|
+
content: {
|
|
26
|
+
type: "text";
|
|
27
|
+
text: string;
|
|
28
|
+
}[];
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* pl_get_plan - Get the latest plan
|
|
32
|
+
* Returns pending response if no plan exists
|
|
33
|
+
*/
|
|
34
|
+
export declare function plGetPlan(input: PlGetPlanInput): ReturnType<typeof successResponse>;
|
|
35
|
+
/**
|
|
36
|
+
* pl_feedback - Submit feedback for the latest plan
|
|
37
|
+
* Allowed states: pending_review
|
|
38
|
+
*/
|
|
39
|
+
export declare function plFeedback(input: PlFeedbackInput): {
|
|
40
|
+
content: {
|
|
41
|
+
type: "text";
|
|
42
|
+
text: string;
|
|
43
|
+
}[];
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* pl_get_feedback - Get the latest feedback
|
|
47
|
+
* Returns pending response based on session status
|
|
48
|
+
*/
|
|
49
|
+
export declare function plGetFeedback(input: PlGetFeedbackInput): ReturnType<typeof successResponse>;
|
|
50
|
+
/**
|
|
51
|
+
* pl_status - Get full session status
|
|
52
|
+
*/
|
|
53
|
+
export declare function plStatus(input: PlStatusInput): {
|
|
54
|
+
content: {
|
|
55
|
+
type: "text";
|
|
56
|
+
text: string;
|
|
57
|
+
}[];
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* pl_list - List all sessions
|
|
61
|
+
* Supports filtering by status and sorting
|
|
62
|
+
*/
|
|
63
|
+
export declare function plList(input?: PlListInput): {
|
|
64
|
+
content: {
|
|
65
|
+
type: "text";
|
|
66
|
+
text: string;
|
|
67
|
+
}[];
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* pl_force_approve - Force approve an exhausted session
|
|
71
|
+
* Allowed states: exhausted
|
|
72
|
+
*/
|
|
73
|
+
export declare function plForceApprove(input: PlForceApproveInput): {
|
|
74
|
+
content: {
|
|
75
|
+
type: "text";
|
|
76
|
+
text: string;
|
|
77
|
+
}[];
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* pl_delete - Delete a session
|
|
81
|
+
* By default, only allows deleting approved/exhausted sessions
|
|
82
|
+
* Use force=true to delete active sessions
|
|
83
|
+
*/
|
|
84
|
+
export declare function plDelete(input: PlDeleteInput): {
|
|
85
|
+
content: {
|
|
86
|
+
type: "text";
|
|
87
|
+
text: string;
|
|
88
|
+
}[];
|
|
89
|
+
};
|
|
90
|
+
export {};
|
|
91
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAGV,YAAY,EACZ,aAAa,EACb,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,WAAW,EACX,mBAAmB,EACnB,aAAa,EAId,MAAM,YAAY,CAAC;AAYpB,iBAAS,eAAe,CAAC,IAAI,EAAE,OAAO;;;;;EAIrC;AAMD;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,YAAY;;;;;EAqB1C;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa;;;;;EAsC5C;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CA2BnF;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe;;;;;EA4DhD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAsC3F;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa;;;;;EAa5C;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,KAAK,GAAE,WAAgB;;;;;EAe7C;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB;;;;;EAqCxD;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa;;;;;EA6B5C"}
|
package/dist/tools.js
ADDED
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plan Loop MCP - Tool Implementations
|
|
3
|
+
*/
|
|
4
|
+
import * as state from './state.js';
|
|
5
|
+
// Error response helper (SDK isError format)
|
|
6
|
+
function errorResponse(message) {
|
|
7
|
+
return {
|
|
8
|
+
isError: true,
|
|
9
|
+
content: [{ type: 'text', text: message }],
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
// Success response helper
|
|
13
|
+
function successResponse(data) {
|
|
14
|
+
return {
|
|
15
|
+
content: [{ type: 'text', text: JSON.stringify(data, null, 2) }],
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function isNonEmptyString(value) {
|
|
19
|
+
return typeof value === 'string' && value.trim() !== '';
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* pl_start - Create a new session
|
|
23
|
+
*/
|
|
24
|
+
export function plStart(input) {
|
|
25
|
+
const { goal, maxIterations = 5 } = input;
|
|
26
|
+
if (!isNonEmptyString(goal)) {
|
|
27
|
+
return errorResponse('goal is required');
|
|
28
|
+
}
|
|
29
|
+
if (maxIterations !== undefined &&
|
|
30
|
+
(typeof maxIterations !== 'number' ||
|
|
31
|
+
!Number.isInteger(maxIterations) ||
|
|
32
|
+
maxIterations < 1)) {
|
|
33
|
+
return errorResponse('maxIterations must be a positive integer');
|
|
34
|
+
}
|
|
35
|
+
const session = state.create(goal, maxIterations);
|
|
36
|
+
return successResponse({
|
|
37
|
+
session_id: session.id,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* pl_submit - Submit a plan
|
|
42
|
+
* Allowed states: drafting, pending_revision
|
|
43
|
+
*/
|
|
44
|
+
export function plSubmit(input) {
|
|
45
|
+
const { session_id, plan } = input;
|
|
46
|
+
if (!isNonEmptyString(session_id)) {
|
|
47
|
+
return errorResponse('session_id is required');
|
|
48
|
+
}
|
|
49
|
+
const session = state.load(session_id);
|
|
50
|
+
if (!session) {
|
|
51
|
+
return errorResponse(`Session not found: ${session_id}`);
|
|
52
|
+
}
|
|
53
|
+
const allowedStates = ['drafting', 'pending_revision'];
|
|
54
|
+
if (!allowedStates.includes(session.status)) {
|
|
55
|
+
return errorResponse(`Invalid state: current='${session.status}', expected=${JSON.stringify(allowedStates)}`);
|
|
56
|
+
}
|
|
57
|
+
if (!isNonEmptyString(plan)) {
|
|
58
|
+
return errorResponse('plan is required');
|
|
59
|
+
}
|
|
60
|
+
// Increment version and add plan
|
|
61
|
+
session.version += 1;
|
|
62
|
+
session.plans.push({
|
|
63
|
+
version: session.version,
|
|
64
|
+
content: plan,
|
|
65
|
+
submittedAt: new Date().toISOString(),
|
|
66
|
+
});
|
|
67
|
+
session.status = 'pending_review';
|
|
68
|
+
state.save(session);
|
|
69
|
+
return successResponse({
|
|
70
|
+
version: session.version,
|
|
71
|
+
status: session.status,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* pl_get_plan - Get the latest plan
|
|
76
|
+
* Returns pending response if no plan exists
|
|
77
|
+
*/
|
|
78
|
+
export function plGetPlan(input) {
|
|
79
|
+
const { session_id } = input;
|
|
80
|
+
if (!isNonEmptyString(session_id)) {
|
|
81
|
+
return errorResponse('session_id is required');
|
|
82
|
+
}
|
|
83
|
+
const session = state.load(session_id);
|
|
84
|
+
if (!session) {
|
|
85
|
+
return errorResponse(`Session not found: ${session_id}`);
|
|
86
|
+
}
|
|
87
|
+
const latestPlan = state.getLatestPlan(session);
|
|
88
|
+
if (!latestPlan) {
|
|
89
|
+
const response = {
|
|
90
|
+
ready: false,
|
|
91
|
+
reason: 'no_plan_submitted',
|
|
92
|
+
};
|
|
93
|
+
return successResponse(response);
|
|
94
|
+
}
|
|
95
|
+
const response = {
|
|
96
|
+
ready: true,
|
|
97
|
+
data: latestPlan,
|
|
98
|
+
};
|
|
99
|
+
return successResponse(response);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* pl_feedback - Submit feedback for the latest plan
|
|
103
|
+
* Allowed states: pending_review
|
|
104
|
+
*/
|
|
105
|
+
export function plFeedback(input) {
|
|
106
|
+
const { session_id, rating, content } = input;
|
|
107
|
+
if (!isNonEmptyString(session_id)) {
|
|
108
|
+
return errorResponse('session_id is required');
|
|
109
|
+
}
|
|
110
|
+
const session = state.load(session_id);
|
|
111
|
+
if (!session) {
|
|
112
|
+
return errorResponse(`Session not found: ${session_id}`);
|
|
113
|
+
}
|
|
114
|
+
if (session.status !== 'pending_review') {
|
|
115
|
+
return errorResponse(`Invalid state: current='${session.status}', expected=['pending_review']`);
|
|
116
|
+
}
|
|
117
|
+
const validRatings = ['🔴', '🟡', '🟢'];
|
|
118
|
+
if (!validRatings.includes(rating)) {
|
|
119
|
+
return errorResponse(`Invalid rating: ${rating}, expected one of ${JSON.stringify(validRatings)}`);
|
|
120
|
+
}
|
|
121
|
+
if (!isNonEmptyString(content)) {
|
|
122
|
+
return errorResponse('content is required');
|
|
123
|
+
}
|
|
124
|
+
const latestPlan = state.getLatestPlan(session);
|
|
125
|
+
if (!latestPlan) {
|
|
126
|
+
return errorResponse('No plan to provide feedback on');
|
|
127
|
+
}
|
|
128
|
+
// Add feedback
|
|
129
|
+
session.feedbacks.push({
|
|
130
|
+
planVersion: latestPlan.version,
|
|
131
|
+
rating,
|
|
132
|
+
content,
|
|
133
|
+
submittedAt: new Date().toISOString(),
|
|
134
|
+
});
|
|
135
|
+
// Update status based on rating
|
|
136
|
+
if (rating === '🟢') {
|
|
137
|
+
session.status = 'approved';
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
// 🔴 or 🟡
|
|
141
|
+
session.iteration += 1;
|
|
142
|
+
if (session.iteration >= session.maxIterations) {
|
|
143
|
+
session.status = 'exhausted';
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
session.status = 'pending_revision';
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
state.save(session);
|
|
150
|
+
return successResponse({
|
|
151
|
+
status: session.status,
|
|
152
|
+
iteration: session.iteration,
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* pl_get_feedback - Get the latest feedback
|
|
157
|
+
* Returns pending response based on session status
|
|
158
|
+
*/
|
|
159
|
+
export function plGetFeedback(input) {
|
|
160
|
+
const { session_id } = input;
|
|
161
|
+
if (!isNonEmptyString(session_id)) {
|
|
162
|
+
return errorResponse('session_id is required');
|
|
163
|
+
}
|
|
164
|
+
const session = state.load(session_id);
|
|
165
|
+
if (!session) {
|
|
166
|
+
return errorResponse(`Session not found: ${session_id}`);
|
|
167
|
+
}
|
|
168
|
+
const latestPlan = state.getLatestPlan(session);
|
|
169
|
+
if (!latestPlan) {
|
|
170
|
+
const response = {
|
|
171
|
+
ready: false,
|
|
172
|
+
reason: 'no_plan_submitted',
|
|
173
|
+
};
|
|
174
|
+
return successResponse(response);
|
|
175
|
+
}
|
|
176
|
+
const latestFeedback = state.getLatestFeedback(session);
|
|
177
|
+
if (!latestFeedback || latestFeedback.planVersion < latestPlan.version) {
|
|
178
|
+
// Determine reason based on status
|
|
179
|
+
const reason = session.status === 'pending_review' ? 'awaiting_feedback' : 'no_feedback_yet';
|
|
180
|
+
const response = {
|
|
181
|
+
ready: false,
|
|
182
|
+
reason,
|
|
183
|
+
};
|
|
184
|
+
return successResponse(response);
|
|
185
|
+
}
|
|
186
|
+
const response = {
|
|
187
|
+
ready: true,
|
|
188
|
+
data: latestFeedback,
|
|
189
|
+
};
|
|
190
|
+
return successResponse(response);
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* pl_status - Get full session status
|
|
194
|
+
*/
|
|
195
|
+
export function plStatus(input) {
|
|
196
|
+
const { session_id } = input;
|
|
197
|
+
if (!isNonEmptyString(session_id)) {
|
|
198
|
+
return errorResponse('session_id is required');
|
|
199
|
+
}
|
|
200
|
+
const session = state.load(session_id);
|
|
201
|
+
if (!session) {
|
|
202
|
+
return errorResponse(`Session not found: ${session_id}`);
|
|
203
|
+
}
|
|
204
|
+
return successResponse(session);
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* pl_list - List all sessions
|
|
208
|
+
* Supports filtering by status and sorting
|
|
209
|
+
*/
|
|
210
|
+
export function plList(input = {}) {
|
|
211
|
+
const { status, sort, order } = input;
|
|
212
|
+
const sessions = state.list({ status, sort, order });
|
|
213
|
+
// Remove timestamps from response (keep backward compatible)
|
|
214
|
+
const sessionsWithoutTimestamps = sessions.map(({ id, goal, status }) => ({
|
|
215
|
+
id,
|
|
216
|
+
goal,
|
|
217
|
+
status,
|
|
218
|
+
}));
|
|
219
|
+
return successResponse({
|
|
220
|
+
sessions: sessionsWithoutTimestamps,
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* pl_force_approve - Force approve an exhausted session
|
|
225
|
+
* Allowed states: exhausted
|
|
226
|
+
*/
|
|
227
|
+
export function plForceApprove(input) {
|
|
228
|
+
const { session_id, reason } = input;
|
|
229
|
+
if (!isNonEmptyString(session_id)) {
|
|
230
|
+
return errorResponse('session_id is required');
|
|
231
|
+
}
|
|
232
|
+
const session = state.load(session_id);
|
|
233
|
+
if (!session) {
|
|
234
|
+
return errorResponse(`Session not found: ${session_id}`);
|
|
235
|
+
}
|
|
236
|
+
if (session.status !== 'exhausted') {
|
|
237
|
+
return errorResponse(`Invalid state: current='${session.status}', expected=['exhausted']`);
|
|
238
|
+
}
|
|
239
|
+
if (!isNonEmptyString(reason)) {
|
|
240
|
+
return errorResponse('reason is required');
|
|
241
|
+
}
|
|
242
|
+
// Add a special feedback entry for force approve
|
|
243
|
+
const latestPlan = state.getLatestPlan(session);
|
|
244
|
+
session.feedbacks.push({
|
|
245
|
+
planVersion: latestPlan?.version ?? session.version,
|
|
246
|
+
rating: '🟢',
|
|
247
|
+
content: `[FORCE APPROVED] ${reason}`,
|
|
248
|
+
submittedAt: new Date().toISOString(),
|
|
249
|
+
});
|
|
250
|
+
session.status = 'approved';
|
|
251
|
+
state.save(session);
|
|
252
|
+
return successResponse({
|
|
253
|
+
status: 'approved',
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* pl_delete - Delete a session
|
|
258
|
+
* By default, only allows deleting approved/exhausted sessions
|
|
259
|
+
* Use force=true to delete active sessions
|
|
260
|
+
*/
|
|
261
|
+
export function plDelete(input) {
|
|
262
|
+
const { session_id, force = false } = input;
|
|
263
|
+
if (!isNonEmptyString(session_id)) {
|
|
264
|
+
return errorResponse('session_id is required');
|
|
265
|
+
}
|
|
266
|
+
const session = state.load(session_id);
|
|
267
|
+
if (!session) {
|
|
268
|
+
return errorResponse(`Session not found: ${session_id}`);
|
|
269
|
+
}
|
|
270
|
+
// Check if session can be deleted
|
|
271
|
+
const safeStates = ['approved', 'exhausted'];
|
|
272
|
+
if (!safeStates.includes(session.status) && !force) {
|
|
273
|
+
return errorResponse(`Cannot delete active session (status='${session.status}'). Use force=true to override`);
|
|
274
|
+
}
|
|
275
|
+
const deleted = state.remove(session_id);
|
|
276
|
+
if (!deleted) {
|
|
277
|
+
return errorResponse(`Failed to delete session: ${session_id}`);
|
|
278
|
+
}
|
|
279
|
+
return successResponse({
|
|
280
|
+
deleted: true,
|
|
281
|
+
session_id,
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAkBH,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AAEpC,6CAA6C;AAC7C,SAAS,aAAa,CAAC,OAAe;IACpC,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;KACpD,CAAC;AACJ,CAAC;AAED,0BAA0B;AAC1B,SAAS,eAAe,CAAC,IAAa;IACpC,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;KAC1E,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;AAC1D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,KAAmB;IACzC,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC;IAE1C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,OAAO,aAAa,CAAC,kBAAkB,CAAC,CAAC;IAC3C,CAAC;IAED,IACE,aAAa,KAAK,SAAS;QAC3B,CAAC,OAAO,aAAa,KAAK,QAAQ;YAChC,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC;YAChC,aAAa,GAAG,CAAC,CAAC,EACpB,CAAC;QACD,OAAO,aAAa,CAAC,0CAA0C,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAElD,OAAO,eAAe,CAAC;QACrB,UAAU,EAAE,OAAO,CAAC,EAAE;KACvB,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAoB;IAC3C,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IAEnC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,CAAC;QAClC,OAAO,aAAa,CAAC,wBAAwB,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,aAAa,CAAC,sBAAsB,UAAU,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,aAAa,GAAG,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;IACvD,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5C,OAAO,aAAa,CAClB,2BAA2B,OAAO,CAAC,MAAM,eAAe,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,CACxF,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,OAAO,aAAa,CAAC,kBAAkB,CAAC,CAAC;IAC3C,CAAC;IAED,iCAAiC;IACjC,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC;IACrB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;QACjB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACtC,CAAC,CAAC;IACH,OAAO,CAAC,MAAM,GAAG,gBAAgB,CAAC;IAElC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAEpB,OAAO,eAAe,CAAC;QACrB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,KAAqB;IAC7C,MAAM,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;IAE7B,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,CAAC;QAClC,OAAO,aAAa,CAAC,wBAAwB,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,aAAa,CAAC,sBAAsB,UAAU,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAEhD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,QAAQ,GAAmB;YAC/B,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,mBAAmB;SAC5B,CAAC;QACF,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,QAAQ,GAAmB;QAC/B,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,UAAU;KACjB,CAAC;IACF,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC;AACnC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAE9C,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,CAAC;QAClC,OAAO,aAAa,CAAC,wBAAwB,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,aAAa,CAAC,sBAAsB,UAAU,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,gBAAgB,EAAE,CAAC;QACxC,OAAO,aAAa,CAClB,2BAA2B,OAAO,CAAC,MAAM,gCAAgC,CAC1E,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAa,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAClD,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACnC,OAAO,aAAa,CAAC,mBAAmB,MAAM,qBAAqB,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACrG,CAAC;IAED,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/B,OAAO,aAAa,CAAC,qBAAqB,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAChD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,aAAa,CAAC,gCAAgC,CAAC,CAAC;IACzD,CAAC;IAED,eAAe;IACf,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;QACrB,WAAW,EAAE,UAAU,CAAC,OAAO;QAC/B,MAAM;QACN,OAAO;QACP,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACtC,CAAC,CAAC;IAEH,gCAAgC;IAChC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC;IAC9B,CAAC;SAAM,CAAC;QACN,WAAW;QACX,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC;QAEvB,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YAC/C,OAAO,CAAC,MAAM,GAAG,WAAW,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,GAAG,kBAAkB,CAAC;QACtC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAEpB,OAAO,eAAe,CAAC;QACrB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,KAAyB;IACrD,MAAM,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;IAE7B,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,CAAC;QAClC,OAAO,aAAa,CAAC,wBAAwB,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,aAAa,CAAC,sBAAsB,UAAU,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAChD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,QAAQ,GAAuB;YACnC,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,mBAAmB;SAC5B,CAAC;QACF,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,cAAc,GAAG,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAExD,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,WAAW,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;QACvE,mCAAmC;QACnC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,gBAAgB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,iBAAiB,CAAC;QAC7F,MAAM,QAAQ,GAAuB;YACnC,KAAK,EAAE,KAAK;YACZ,MAAM;SACP,CAAC;QACF,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,QAAQ,GAAuB;QACnC,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,cAAc;KACrB,CAAC;IACF,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAoB;IAC3C,MAAM,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;IAE7B,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,CAAC;QAClC,OAAO,aAAa,CAAC,wBAAwB,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,aAAa,CAAC,sBAAsB,UAAU,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,MAAM,CAAC,QAAqB,EAAE;IAC5C,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IAEtC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAErD,6DAA6D;IAC7D,MAAM,yBAAyB,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QACxE,EAAE;QACF,IAAI;QACJ,MAAM;KACP,CAAC,CAAC,CAAC;IAEJ,OAAO,eAAe,CAAC;QACrB,QAAQ,EAAE,yBAAyB;KACpC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,KAA0B;IACvD,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAErC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,CAAC;QAClC,OAAO,aAAa,CAAC,wBAAwB,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,aAAa,CAAC,sBAAsB,UAAU,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QACnC,OAAO,aAAa,CAClB,2BAA2B,OAAO,CAAC,MAAM,2BAA2B,CACrE,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,OAAO,aAAa,CAAC,oBAAoB,CAAC,CAAC;IAC7C,CAAC;IAED,iDAAiD;IACjD,MAAM,UAAU,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAChD,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;QACrB,WAAW,EAAE,UAAU,EAAE,OAAO,IAAI,OAAO,CAAC,OAAO;QACnD,MAAM,EAAE,IAAI;QACZ,OAAO,EAAE,oBAAoB,MAAM,EAAE;QACrC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACtC,CAAC,CAAC;IAEH,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC;IAC5B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAEpB,OAAO,eAAe,CAAC;QACrB,MAAM,EAAE,UAAmB;KAC5B,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAoB;IAC3C,MAAM,EAAE,UAAU,EAAE,KAAK,GAAG,KAAK,EAAE,GAAG,KAAK,CAAC;IAE5C,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,CAAC;QAClC,OAAO,aAAa,CAAC,wBAAwB,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,aAAa,CAAC,sBAAsB,UAAU,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,kCAAkC;IAClC,MAAM,UAAU,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAC7C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACnD,OAAO,aAAa,CAClB,yCAAyC,OAAO,CAAC,MAAM,gCAAgC,CACxF,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACzC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,aAAa,CAAC,6BAA6B,UAAU,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,eAAe,CAAC;QACrB,OAAO,EAAE,IAAI;QACb,UAAU;KACX,CAAC,CAAC;AACL,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plan Loop MCP - Type Definitions
|
|
3
|
+
*/
|
|
4
|
+
export type SessionStatus = 'drafting' | 'pending_review' | 'pending_revision' | 'approved' | 'exhausted';
|
|
5
|
+
export type Rating = '🔴' | '🟡' | '🟢';
|
|
6
|
+
export interface Plan {
|
|
7
|
+
version: number;
|
|
8
|
+
content: string;
|
|
9
|
+
submittedAt: string;
|
|
10
|
+
}
|
|
11
|
+
export interface Feedback {
|
|
12
|
+
planVersion: number;
|
|
13
|
+
rating: Rating;
|
|
14
|
+
content: string;
|
|
15
|
+
submittedAt: string;
|
|
16
|
+
}
|
|
17
|
+
export interface Session {
|
|
18
|
+
id: string;
|
|
19
|
+
goal: string;
|
|
20
|
+
status: SessionStatus;
|
|
21
|
+
version: number;
|
|
22
|
+
iteration: number;
|
|
23
|
+
maxIterations: number;
|
|
24
|
+
plans: Plan[];
|
|
25
|
+
feedbacks: Feedback[];
|
|
26
|
+
createdAt: string;
|
|
27
|
+
updatedAt: string;
|
|
28
|
+
}
|
|
29
|
+
export interface ReadyResponse<T> {
|
|
30
|
+
ready: true;
|
|
31
|
+
data: T;
|
|
32
|
+
}
|
|
33
|
+
export type PendingReason = 'no_plan_submitted' | 'no_feedback_yet' | 'awaiting_feedback';
|
|
34
|
+
export interface PendingResponse {
|
|
35
|
+
ready: false;
|
|
36
|
+
reason: PendingReason;
|
|
37
|
+
}
|
|
38
|
+
export type Response<T> = ReadyResponse<T> | PendingResponse;
|
|
39
|
+
export interface PlStartInput {
|
|
40
|
+
goal: string;
|
|
41
|
+
maxIterations?: number;
|
|
42
|
+
}
|
|
43
|
+
export interface PlSubmitInput {
|
|
44
|
+
session_id: string;
|
|
45
|
+
plan: string;
|
|
46
|
+
}
|
|
47
|
+
export interface PlGetPlanInput {
|
|
48
|
+
session_id: string;
|
|
49
|
+
}
|
|
50
|
+
export interface PlFeedbackInput {
|
|
51
|
+
session_id: string;
|
|
52
|
+
rating: Rating;
|
|
53
|
+
content: string;
|
|
54
|
+
}
|
|
55
|
+
export interface PlGetFeedbackInput {
|
|
56
|
+
session_id: string;
|
|
57
|
+
}
|
|
58
|
+
export interface PlStatusInput {
|
|
59
|
+
session_id: string;
|
|
60
|
+
}
|
|
61
|
+
export interface PlListInput {
|
|
62
|
+
status?: SessionStatus | SessionStatus[];
|
|
63
|
+
sort?: 'createdAt' | 'updatedAt';
|
|
64
|
+
order?: 'asc' | 'desc';
|
|
65
|
+
}
|
|
66
|
+
export interface PlForceApproveInput {
|
|
67
|
+
session_id: string;
|
|
68
|
+
reason: string;
|
|
69
|
+
}
|
|
70
|
+
export interface PlDeleteInput {
|
|
71
|
+
session_id: string;
|
|
72
|
+
force?: boolean;
|
|
73
|
+
}
|
|
74
|
+
export interface PlStartOutput {
|
|
75
|
+
session_id: string;
|
|
76
|
+
}
|
|
77
|
+
export interface PlSubmitOutput {
|
|
78
|
+
version: number;
|
|
79
|
+
status: SessionStatus;
|
|
80
|
+
}
|
|
81
|
+
export interface PlFeedbackOutput {
|
|
82
|
+
status: SessionStatus;
|
|
83
|
+
iteration: number;
|
|
84
|
+
}
|
|
85
|
+
export interface PlForceApproveOutput {
|
|
86
|
+
status: 'approved';
|
|
87
|
+
}
|
|
88
|
+
export interface PlListOutput {
|
|
89
|
+
sessions: {
|
|
90
|
+
id: string;
|
|
91
|
+
goal: string;
|
|
92
|
+
status: SessionStatus;
|
|
93
|
+
}[];
|
|
94
|
+
}
|
|
95
|
+
export interface PlDeleteOutput {
|
|
96
|
+
deleted: true;
|
|
97
|
+
session_id: string;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
package/package.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@joseph0926/plan-loop-core",
|
|
3
|
+
"version": "1.0.2",
|
|
4
|
+
"description": "Plan Loop MCP core library - state management and tools",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./state": {
|
|
14
|
+
"types": "./dist/state.d.ts",
|
|
15
|
+
"import": "./dist/state.js"
|
|
16
|
+
},
|
|
17
|
+
"./tools": {
|
|
18
|
+
"types": "./dist/tools.d.ts",
|
|
19
|
+
"import": "./dist/tools.js"
|
|
20
|
+
},
|
|
21
|
+
"./types": {
|
|
22
|
+
"types": "./dist/types.d.ts",
|
|
23
|
+
"import": "./dist/types.js"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"files": [
|
|
27
|
+
"dist"
|
|
28
|
+
],
|
|
29
|
+
"publishConfig": {
|
|
30
|
+
"access": "public"
|
|
31
|
+
},
|
|
32
|
+
"scripts": {
|
|
33
|
+
"build": "tsc",
|
|
34
|
+
"dev": "tsc --watch",
|
|
35
|
+
"test": "vitest run",
|
|
36
|
+
"test:watch": "vitest"
|
|
37
|
+
},
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"@modelcontextprotocol/sdk": "^1.0.0"
|
|
40
|
+
},
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"@types/node": "^20.0.0",
|
|
43
|
+
"typescript": "^5.0.0",
|
|
44
|
+
"vitest": "^2.0.0"
|
|
45
|
+
}
|
|
46
|
+
}
|