@joseph0926/plan-loop 1.0.1 → 1.0.3

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 CHANGED
@@ -4,7 +4,9 @@ Plan Loop is an MCP server that enables an asynchronous plan review loop between
4
4
 
5
5
  ## Repository layout
6
6
 
7
- - src/: MCP server source code (Node.js + TypeScript)
7
+ - packages/cli/src/: MCP server source code (Node.js + TypeScript)
8
+ - packages/core/src/: MCP core library (state + tools)
9
+ - packages/vscode/: VSCode extension (Marketplace only)
8
10
  - .mcp.json.example: sample MCP server configuration (copy to `.mcp.json` to use)
9
11
 
10
12
  ## Quick start
package/dist/index.js CHANGED
@@ -6,7 +6,7 @@
6
6
  import { Server } from '@modelcontextprotocol/sdk/server/index.js';
7
7
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
8
8
  import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
9
- import * as tools from './tools.js';
9
+ import * as tools from '@joseph0926/plan-loop-core/tools';
10
10
  // Create server instance
11
11
  const server = new Server({
12
12
  name: 'plan-loop-mcp',
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@joseph0926/plan-loop",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "MCP server for Claude-Code and Codex async collaboration with CLI setup",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -21,7 +21,7 @@
21
21
  "test": "vitest run",
22
22
  "test:watch": "vitest",
23
23
  "test:coverage": "vitest run --coverage",
24
- "prepublishOnly": "npm run build"
24
+ "prepublishOnly": "pnpm run build"
25
25
  },
26
26
  "keywords": [
27
27
  "mcp",
@@ -34,14 +34,19 @@
34
34
  "license": "MIT",
35
35
  "repository": {
36
36
  "type": "git",
37
- "url": "https://github.com/joseph0926/plan-loop.git"
37
+ "url": "https://github.com/joseph0926/plan-loop",
38
+ "directory": "packages/cli"
38
39
  },
39
40
  "bugs": {
40
41
  "url": "https://github.com/joseph0926/plan-loop/issues"
41
42
  },
42
43
  "homepage": "https://github.com/joseph0926/plan-loop#readme",
44
+ "publishConfig": {
45
+ "access": "public"
46
+ },
43
47
  "dependencies": {
44
48
  "@iarna/toml": "^2.2.5",
49
+ "@joseph0926/plan-loop-core": "workspace:*",
45
50
  "@modelcontextprotocol/sdk": "^1.0.0"
46
51
  },
47
52
  "devDependencies": {
package/README.ko.md DELETED
@@ -1,245 +0,0 @@
1
- # Plan Loop
2
-
3
- Plan Loop는 Claude-Code(설계자)와 Codex(검토자) 간의 비동기 계획 검토 루프를 디스크의 세션 상태 공유를 통해 가능하게 하는 MCP 서버입니다.
4
-
5
- ## 저장소 구조
6
-
7
- - src/: MCP 서버 소스 코드 (Node.js + TypeScript)
8
- - .mcp.json.example: MCP 서버 설정 샘플 (`.mcp.json`으로 복사하여 사용)
9
-
10
- ## 빠른 시작
11
-
12
- 1) 설치 및 설정 (권장)
13
-
14
- ```bash
15
- # npx로 1회 실행 (설치 불필요)
16
- npx @joseph0926/plan-loop setup
17
-
18
- # 또는 글로벌 설치
19
- npm install -g @joseph0926/plan-loop
20
- plan-loop setup
21
- ```
22
-
23
- ### 설정 옵션
24
-
25
- ```bash
26
- plan-loop setup # Claude (project) + Codex (user) 모두 설정
27
- plan-loop setup --claude # Claude Code만 (project scope)
28
- plan-loop setup --claude --user # Claude Code (user scope, ~/.claude.json)
29
- plan-loop setup --codex # Codex만 (user scope)
30
- ```
31
-
32
- 2) 수동 등록 (선택)
33
-
34
- **Claude Code** - `.mcp.json` (프로젝트) 또는 `~/.claude.json` (사용자)에 추가:
35
-
36
- ```json
37
- {
38
- "mcpServers": {
39
- "plan-loop": {
40
- "command": "npx",
41
- "args": ["-y", "@joseph0926/plan-loop"]
42
- }
43
- }
44
- }
45
- ```
46
-
47
- **Codex** - `~/.codex/config.toml`에 추가:
48
-
49
- ```toml
50
- [mcp_servers.plan-loop]
51
- command = "npx"
52
- args = ["-y", "@joseph0926/plan-loop"]
53
- ```
54
-
55
- 3) 도구 사용 예시
56
-
57
- ```text
58
- pl_start({ goal: "로그인 기능 계획" })
59
- pl_submit({ session_id: "abc123", plan: "1. ..." })
60
- pl_get_plan({ session_id: "abc123" })
61
- pl_feedback({ session_id: "abc123", rating: "🟢", content: "LGTM" })
62
- ```
63
-
64
- ## 도구 목록
65
-
66
- - pl_start: 세션 시작
67
- - pl_submit: 계획 제출
68
- - pl_get_plan: 최신 계획 조회
69
- - pl_feedback: 최신 계획에 대한 피드백 제출
70
- - pl_get_feedback: 최신 피드백 조회
71
- - pl_status: 전체 세션 데이터 조회
72
- - pl_list: 모든 세션 목록 (필터/정렬 지원)
73
- - pl_delete: 세션 삭제
74
- - pl_force_approve: exhausted 세션 강제 승인
75
-
76
- ## 에이전트 협업
77
-
78
- Claude-Code(설계자)와 Codex(검토자)가 협업하여 계획을 검토합니다.
79
-
80
- ### 빠른 시작
81
-
82
- ```text
83
- # 1. Claude-Code: 세션 시작 및 계획 제출
84
- pl_start({ goal: "로그인 기능 구현" })
85
- pl_submit({ session_id: "...", plan: "1. DB 스키마..." })
86
-
87
- # 2. Codex: 계획 조회 및 피드백
88
- pl_get_plan({ session_id: "..." })
89
- pl_feedback({ session_id: "...", rating: "🟡", content: "인증 방식 명시 필요" })
90
-
91
- # 3. Claude-Code: 피드백 확인 및 수정
92
- pl_get_feedback({ session_id: "..." })
93
- pl_submit({ session_id: "...", plan: "수정된 계획..." })
94
-
95
- # 4. Codex: 승인
96
- pl_feedback({ session_id: "...", rating: "🟢", content: "LGTM" })
97
- ```
98
-
99
- ### 역할별 상세 지침
100
-
101
- 자세한 워크플로우와 피드백 자동완성 가이드는 [AGENTS.md](AGENTS.md) 참조.
102
-
103
- ## 상태 저장
104
-
105
- 세션 파일은 `~/.plan-loop/sessions/`에 저장됩니다.
106
-
107
- ## 상태 전이
108
-
109
- ```
110
- pl_start
111
-
112
-
113
- [drafting]
114
-
115
- pl_submit
116
-
117
-
118
- [pending_review]
119
-
120
- pl_feedback
121
-
122
- ┌─────────────────────────┼─────────────────────────┐
123
- ▼ ▼ ▼
124
- 🔴 / 🟡 🟢 iteration >= max
125
- │ │ │
126
- ▼ ▼ ▼
127
- [pending_revision] [approved] [exhausted]
128
- │ │ │
129
- pl_submit pl_delete pl_force_approve
130
- │ │ │
131
- ▼ ▼ ▼
132
- [pending_review] [deleted] [approved]
133
- ```
134
-
135
- ## 응답 형식
136
-
137
- ### 성공 응답 (데이터 있음)
138
- ```typescript
139
- { ready: true, data: { ... } }
140
- ```
141
-
142
- ### 대기 응답 (데이터 없음)
143
- ```typescript
144
- { ready: false, reason: "no_plan_submitted" | "no_feedback_yet" | "awaiting_feedback" }
145
- ```
146
-
147
- #### Pending reason 매핑
148
- - `pl_get_plan`: plan 없음 → `no_plan_submitted`
149
- - `pl_get_feedback`:
150
- - plan 없음 → `no_plan_submitted`
151
- - 최신 plan에 대한 피드백 대기 → `awaiting_feedback`
152
- - 기타 피드백 없음 → `no_feedback_yet`
153
-
154
- ### 에러 응답
155
- ```typescript
156
- {
157
- isError: true,
158
- content: [{ type: "text", text: "Invalid state: current='approved', expected=['drafting']" }]
159
- }
160
- ```
161
-
162
- ## 세션 관리
163
-
164
- ### pl_list 필터링 및 정렬
165
-
166
- ```
167
- // status 필터
168
- > pl_list({ status: "approved" })
169
- > pl_list({ status: ["drafting", "pending_review"] })
170
-
171
- // 정렬
172
- > pl_list({ sort: "createdAt", order: "asc" })
173
- > pl_list({ sort: "updatedAt", order: "desc" }) // 기본값
174
- ```
175
-
176
- ### pl_delete 세션 삭제
177
-
178
- ```
179
- // approved/exhausted 세션 삭제
180
- > pl_delete({ session_id: "abc123" })
181
-
182
- // 활성 세션 삭제 (force 필요)
183
- > pl_delete({ session_id: "abc123", force: true })
184
- ```
185
-
186
- ## 버전 규칙
187
-
188
- | 필드 | 증가 시점 |
189
- |------|-----------|
190
- | `version` | `pl_submit` 호출 시 +1 |
191
- | `iteration` | `pl_feedback`에서 🔴/🟡 시 +1 |
192
-
193
- `maxIterations`는 기본값 5이며 **1 이상의 정수**만 허용됩니다.
194
-
195
- ## 설계 결정
196
-
197
- ### 최신 plan 자동 매핑
198
- - `pl_feedback`은 항상 최신 plan에 매핑됨
199
- - planVersion 파라미터 없음 (단순화)
200
- - **Trade-off**: 동시 호출 시 race condition 가능 → 운영 규칙으로 관리
201
-
202
- ### 역할 구분
203
- - 서버는 호출자를 검증하지 않음
204
- - Claude-Code는 submit 계열, Codex는 feedback 계열 사용 (약속)
205
-
206
- ### 상태 영속화
207
- - `~/.plan-loop/sessions/{id}.json`
208
- - Atomic write (temp → rename)
209
-
210
- ### goal 길이 제한
211
- - `pl_list` 응답에서 goal은 30자(UTF-16 코드 유닛 기준) 초과 시 `...` 추가
212
- - 최대 33자 (30자 + "...")
213
-
214
- ## 개발
215
-
216
- ```bash
217
- npm run dev
218
- npm run build
219
- ```
220
-
221
- ## 샘플 설정 파일
222
-
223
- 프로젝트에 MCP 설정을 추가하려면:
224
-
225
- ```bash
226
- cp .mcp.json.example .mcp.json
227
- ```
228
-
229
- ## 테스트
230
-
231
- ```bash
232
- npm test # 테스트 실행
233
- npm run test:watch # 워치 모드
234
- npm run test:coverage # 커버리지 리포트
235
- ```
236
-
237
- 테스트 격리를 위해 `PLAN_LOOP_STATE_DIR` 환경변수를 지원합니다:
238
-
239
- ```bash
240
- PLAN_LOOP_STATE_DIR=/tmp/test-sessions npm test
241
- ```
242
-
243
- ## 라이선스
244
-
245
- MIT
package/dist/state.d.ts DELETED
@@ -1,49 +0,0 @@
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
@@ -1 +0,0 @@
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 DELETED
@@ -1,154 +0,0 @@
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
package/dist/state.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"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"}
package/dist/tools.d.ts DELETED
@@ -1,91 +0,0 @@
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
@@ -1 +0,0 @@
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 DELETED
@@ -1,284 +0,0 @@
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
package/dist/tools.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts DELETED
@@ -1,99 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js DELETED
@@ -1,5 +0,0 @@
1
- /**
2
- * Plan Loop MCP - Type Definitions
3
- */
4
- export {};
5
- //# sourceMappingURL=types.js.map
package/dist/types.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}