@pedrocivita/tocket 2.3.0 → 2.5.0
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 +36 -13
- package/dist/commands/config.cmd.js +33 -6
- package/dist/commands/config.cmd.js.map +1 -1
- package/dist/commands/dashboard.js +2 -0
- package/dist/commands/dashboard.js.map +1 -1
- package/dist/commands/diff.cmd.d.ts +15 -0
- package/dist/commands/diff.cmd.js +106 -0
- package/dist/commands/diff.cmd.js.map +1 -0
- package/dist/commands/doctor.cmd.js +24 -0
- package/dist/commands/doctor.cmd.js.map +1 -1
- package/dist/commands/generate.cmd.js +7 -1
- package/dist/commands/generate.cmd.js.map +1 -1
- package/dist/commands/handoff.cmd.d.ts +14 -0
- package/dist/commands/handoff.cmd.js +131 -0
- package/dist/commands/handoff.cmd.js.map +1 -0
- package/dist/commands/init.cmd.js +19 -7
- package/dist/commands/init.cmd.js.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/templates/memory-bank.d.ts +9 -5
- package/dist/templates/memory-bank.js +22 -18
- package/dist/templates/memory-bank.js.map +1 -1
- package/dist/tests/agents.test.d.ts +1 -0
- package/dist/tests/agents.test.js +102 -0
- package/dist/tests/agents.test.js.map +1 -0
- package/dist/tests/config.test.js +39 -0
- package/dist/tests/config.test.js.map +1 -1
- package/dist/tests/diff.test.d.ts +1 -0
- package/dist/tests/diff.test.js +119 -0
- package/dist/tests/diff.test.js.map +1 -0
- package/dist/tests/git.test.js +15 -1
- package/dist/tests/git.test.js.map +1 -1
- package/dist/tests/handoff.test.d.ts +1 -0
- package/dist/tests/handoff.test.js +97 -0
- package/dist/tests/handoff.test.js.map +1 -0
- package/dist/tests/init-templates.test.js +25 -0
- package/dist/tests/init-templates.test.js.map +1 -1
- package/dist/tests/init.test.js +3 -2
- package/dist/tests/init.test.js.map +1 -1
- package/dist/tests/memory-bank.test.js +58 -13
- package/dist/tests/memory-bank.test.js.map +1 -1
- package/dist/tests/xml.test.d.ts +1 -0
- package/dist/tests/xml.test.js +139 -0
- package/dist/tests/xml.test.js.map +1 -0
- package/dist/utils/agents.d.ts +8 -0
- package/dist/utils/agents.js +29 -0
- package/dist/utils/agents.js.map +1 -0
- package/dist/utils/config.d.ts +4 -0
- package/dist/utils/config.js +1 -0
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/git.d.ts +2 -0
- package/dist/utils/git.js +27 -0
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/templates.d.ts +4 -0
- package/dist/utils/templates.js +5 -1
- package/dist/utils/templates.js.map +1 -1
- package/dist/utils/xml.d.ts +22 -0
- package/dist/utils/xml.js +54 -0
- package/dist/utils/xml.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { input, confirm } from "@inquirer/prompts";
|
|
2
2
|
import { mkdir, readFile, writeFile, access } from "node:fs/promises";
|
|
3
|
-
import { join } from "node:path";
|
|
3
|
+
import { join, dirname } from "node:path";
|
|
4
4
|
import { banner, heading, info, success, warn, dim } from "../utils/theme.js";
|
|
5
5
|
import { isContextIgnored } from "../utils/git.js";
|
|
6
6
|
import { getConfig } from "../utils/config.js";
|
|
7
7
|
import { readGlobalTemplate } from "../utils/templates.js";
|
|
8
|
-
import {
|
|
8
|
+
import { getExecutorFileName, getArchitectFileName, getExecutorDisplayName, getArchitectDisplayName, } from "../utils/agents.js";
|
|
9
|
+
import { executorMd, architectMd, tocketMd, activeContextMd, systemPatternsMd, productContextMd, techContextMd, progressMd, cursorrulesMd, } from "../templates/memory-bank.js";
|
|
9
10
|
async function fileExists(path) {
|
|
10
11
|
try {
|
|
11
12
|
await access(path);
|
|
@@ -164,13 +165,19 @@ export function registerInitCommand(program) {
|
|
|
164
165
|
});
|
|
165
166
|
const contextDir = join(cwd, ".context");
|
|
166
167
|
await mkdir(contextDir, { recursive: true });
|
|
168
|
+
// Resolve agent names and file conventions
|
|
169
|
+
const executorName = getExecutorDisplayName(globalConfig.agents?.executor);
|
|
170
|
+
const architectName = getArchitectDisplayName(globalConfig.agents?.architect);
|
|
171
|
+
const executorFile = getExecutorFileName(globalConfig.agents?.executor);
|
|
172
|
+
const architectFile = getArchitectFileName(globalConfig.agents?.architect);
|
|
167
173
|
const files = [
|
|
168
|
-
["TOCKET.md", tocketMd(projectName)],
|
|
169
|
-
["
|
|
170
|
-
|
|
171
|
-
|
|
174
|
+
["TOCKET.md", tocketMd(projectName, executorFile, architectFile)],
|
|
175
|
+
[executorFile, executorFile === ".cursorrules"
|
|
176
|
+
? cursorrulesMd(projectName, description, architectFile)
|
|
177
|
+
: executorMd(projectName, description, executorName, architectFile)],
|
|
178
|
+
[architectFile, architectMd(projectName, description, architectName, executorName, executorFile)],
|
|
172
179
|
[join(".context", "activeContext.md"), activeContextMd(projectName)],
|
|
173
|
-
[join(".context", "systemPatterns.md"), systemPatternsMd(projectName)],
|
|
180
|
+
[join(".context", "systemPatterns.md"), systemPatternsMd(projectName, architectName, executorName)],
|
|
174
181
|
[
|
|
175
182
|
join(".context", "productContext.md"),
|
|
176
183
|
productContextMd(projectName, description),
|
|
@@ -193,6 +200,10 @@ export function registerInitCommand(program) {
|
|
|
193
200
|
projectName,
|
|
194
201
|
description,
|
|
195
202
|
date: new Date().toISOString().split("T")[0],
|
|
203
|
+
architectName,
|
|
204
|
+
executorName,
|
|
205
|
+
architectFile,
|
|
206
|
+
executorFile,
|
|
196
207
|
};
|
|
197
208
|
for (const [filePath, builtInContent] of filesToWrite) {
|
|
198
209
|
const fullPath = join(cwd, filePath);
|
|
@@ -207,6 +218,7 @@ export function registerInitCommand(program) {
|
|
|
207
218
|
continue;
|
|
208
219
|
}
|
|
209
220
|
}
|
|
221
|
+
await mkdir(dirname(fullPath), { recursive: true });
|
|
210
222
|
const userContent = await readGlobalTemplate(filePath, templateVars);
|
|
211
223
|
const content = userContent ?? builtInContent;
|
|
212
224
|
await writeFile(fullPath, content, "utf-8");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.cmd.js","sourceRoot":"","sources":["../../src/commands/init.cmd.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"init.cmd.js","sourceRoot":"","sources":["../../src/commands/init.cmd.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -12,6 +12,8 @@ import { registerFocusCommand } from "./commands/focus.cmd.js";
|
|
|
12
12
|
import { registerStatusCommand } from "./commands/status.cmd.js";
|
|
13
13
|
import { registerDoctorCommand } from "./commands/doctor.cmd.js";
|
|
14
14
|
import { registerLintCommand } from "./commands/lint.cmd.js";
|
|
15
|
+
import { registerDiffCommand } from "./commands/diff.cmd.js";
|
|
16
|
+
import { registerHandoffCommand } from "./commands/handoff.cmd.js";
|
|
15
17
|
const pkg = JSON.parse(readFileSync(join(import.meta.dirname, "..", "package.json"), "utf-8"));
|
|
16
18
|
const program = new Command();
|
|
17
19
|
program
|
|
@@ -28,6 +30,8 @@ registerFocusCommand(program);
|
|
|
28
30
|
registerStatusCommand(program);
|
|
29
31
|
registerDoctorCommand(program);
|
|
30
32
|
registerLintCommand(program);
|
|
33
|
+
registerDiffCommand(program);
|
|
34
|
+
registerHandoffCommand(program);
|
|
31
35
|
// No-args: show interactive dashboard (TTY) or help (non-TTY)
|
|
32
36
|
const args = process.argv.slice(2);
|
|
33
37
|
if (args.length === 0 && process.stdin.isTTY) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAChD,CAAC;AAEzB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,8DAA8D,CAAC;KAC3E,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAExB,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAEhC,8DAA8D;AAC9D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IAC7C,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;IAClE,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC;KAAM,CAAC;IACN,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC"}
|
|
@@ -5,12 +5,16 @@ export interface StackInfo {
|
|
|
5
5
|
framework: string;
|
|
6
6
|
extras: string[];
|
|
7
7
|
}
|
|
8
|
-
export declare const
|
|
9
|
-
|
|
8
|
+
export declare const executorMd: (projectName: string, description: string, executorName?: string, architectFile?: string) => string;
|
|
9
|
+
/** @deprecated Use executorMd instead */
|
|
10
|
+
export declare const claudeMd: (projectName: string, description: string, executorName?: string, architectFile?: string) => string;
|
|
11
|
+
export declare const architectMd: (projectName: string, description: string, architectName?: string, executorName?: string, executorFile?: string) => string;
|
|
12
|
+
/** @deprecated Use architectMd instead */
|
|
13
|
+
export declare const geminiMd: (projectName: string, description: string, architectName?: string, executorName?: string, executorFile?: string) => string;
|
|
10
14
|
export declare const activeContextMd: (projectName: string) => string;
|
|
11
|
-
export declare const systemPatternsMd: (projectName: string) => string;
|
|
15
|
+
export declare const systemPatternsMd: (projectName: string, architectName?: string, executorName?: string) => string;
|
|
12
16
|
export declare const productContextMd: (projectName: string, description: string) => string;
|
|
13
17
|
export declare const techContextMd: (projectName: string, stack?: StackInfo) => string;
|
|
14
18
|
export declare const progressMd: (projectName: string) => string;
|
|
15
|
-
export declare const cursorrulesMd: (projectName: string, description: string) => string;
|
|
16
|
-
export declare const tocketMd: (projectName: string) => string;
|
|
19
|
+
export declare const cursorrulesMd: (projectName: string, description: string, architectFile?: string) => string;
|
|
20
|
+
export declare const tocketMd: (projectName: string, executorFile?: string, architectFile?: string) => string;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export const
|
|
1
|
+
export const executorMd = (projectName, description, executorName = "Claude Code", architectFile = "GEMINI.md") => `# ${projectName} — Executor Instructions
|
|
2
2
|
|
|
3
|
-
<!-- LLM_CONTEXT: Executor instructions for
|
|
3
|
+
<!-- LLM_CONTEXT: Executor instructions for ${executorName} -->
|
|
4
4
|
<!-- Generated by Tocket CLI -->
|
|
5
5
|
|
|
6
6
|
## Role
|
|
7
7
|
|
|
8
|
-
You are the **Executor** for **${projectName}**.
|
|
8
|
+
You are the **Executor** (${executorName}) for **${projectName}**.
|
|
9
9
|
${description ? `\n> ${description}\n` : ""}
|
|
10
10
|
Your job is to **implement**, not to plan. Read the Memory Bank before every session, follow the Architect's decisions, and write code.
|
|
11
11
|
|
|
@@ -14,7 +14,7 @@ Your job is to **implement**, not to plan. Read the Memory Bank before every ses
|
|
|
14
14
|
## Rules
|
|
15
15
|
|
|
16
16
|
1. **Always read \`.context/\` first** — Start every session by reading activeContext.md and systemPatterns.md.
|
|
17
|
-
2. **Follow the Architect's plan** — Implementation decisions come from
|
|
17
|
+
2. **Follow the Architect's plan** — Implementation decisions come from \`${architectFile}\` or mission briefs. Do not redesign.
|
|
18
18
|
3. **Ask before deviating** — If the plan is unclear or blocked, ask the user. Do not improvise architecture.
|
|
19
19
|
4. **Write code in English** — Variables, functions, comments, commits — all in \`en-US\`.
|
|
20
20
|
5. **Update Memory Bank on completion** — After finishing a task, update activeContext.md with what changed.
|
|
@@ -27,7 +27,7 @@ Your job is to **implement**, not to plan. Read the Memory Bank before every ses
|
|
|
27
27
|
|------|---------|
|
|
28
28
|
| \`.context/activeContext.md\` | Current focus, recent changes, open decisions |
|
|
29
29
|
| \`.context/systemPatterns.md\` | Architecture patterns, tech stack, conventions |
|
|
30
|
-
| \`
|
|
30
|
+
| \`${architectFile}\` | Architect instructions (read-only for you) |
|
|
31
31
|
|
|
32
32
|
---
|
|
33
33
|
|
|
@@ -37,16 +37,18 @@ Your job is to **implement**, not to plan. Read the Memory Bank before every ses
|
|
|
37
37
|
1. Read .context/ → 2. Receive task → 3. Implement → 4. Update .context/
|
|
38
38
|
\`\`\`
|
|
39
39
|
`;
|
|
40
|
-
|
|
40
|
+
/** @deprecated Use executorMd instead */
|
|
41
|
+
export const claudeMd = executorMd;
|
|
42
|
+
export const architectMd = (projectName, description, architectName = "Gemini", executorName = "Claude Code", executorFile = "CLAUDE.md") => `# ${projectName} — Architect Instructions
|
|
41
43
|
|
|
42
|
-
<!-- LLM_CONTEXT: Architect instructions for
|
|
44
|
+
<!-- LLM_CONTEXT: Architect instructions for ${architectName} -->
|
|
43
45
|
<!-- Generated by Tocket CLI -->
|
|
44
46
|
|
|
45
47
|
## Role
|
|
46
48
|
|
|
47
|
-
You are the **Architect** (
|
|
49
|
+
You are the **Architect** (${architectName}) for **${projectName}**.
|
|
48
50
|
${description ? `\n> ${description}\n` : ""}
|
|
49
|
-
Your job is to **analyze, plan, and decide**. You do not write code directly — you produce structured mission briefs that the Executor (
|
|
51
|
+
Your job is to **analyze, plan, and decide**. You do not write code directly — you produce structured mission briefs that the Executor (${executorName}) implements.
|
|
50
52
|
|
|
51
53
|
---
|
|
52
54
|
|
|
@@ -66,7 +68,7 @@ Your job is to **analyze, plan, and decide**. You do not write code directly —
|
|
|
66
68
|
|------|---------|
|
|
67
69
|
| \`.context/activeContext.md\` | Current focus, recent changes, open decisions |
|
|
68
70
|
| \`.context/systemPatterns.md\` | Architecture patterns, tech stack, conventions |
|
|
69
|
-
| \`
|
|
71
|
+
| \`${executorFile}\` | Executor instructions (read-only for you) |
|
|
70
72
|
|
|
71
73
|
---
|
|
72
74
|
|
|
@@ -97,6 +99,8 @@ Your job is to **analyze, plan, and decide**. You do not write code directly —
|
|
|
97
99
|
</payload>
|
|
98
100
|
\`\`\`
|
|
99
101
|
`;
|
|
102
|
+
/** @deprecated Use architectMd instead */
|
|
103
|
+
export const geminiMd = architectMd;
|
|
100
104
|
export const activeContextMd = (projectName) => `# Active Context - ${projectName}
|
|
101
105
|
|
|
102
106
|
<!-- Updated by both Architect and Executor after each session -->
|
|
@@ -115,7 +119,7 @@ _No active tasks yet. Run \`tocket generate\` to create your first mission brief
|
|
|
115
119
|
|
|
116
120
|
_None yet._
|
|
117
121
|
`;
|
|
118
|
-
export const systemPatternsMd = (projectName) => `# System Patterns - ${projectName}
|
|
122
|
+
export const systemPatternsMd = (projectName, architectName = "Gemini", executorName = "Claude Code") => `# System Patterns - ${projectName}
|
|
119
123
|
|
|
120
124
|
<!-- Architectural decisions and conventions. Updated by the Architect. -->
|
|
121
125
|
|
|
@@ -131,7 +135,7 @@ _To be defined._
|
|
|
131
135
|
|
|
132
136
|
- Code language: \`en-US\`
|
|
133
137
|
- Commit language: \`en-US\`
|
|
134
|
-
- Triangulation:
|
|
138
|
+
- Triangulation: ${architectName} (Architect) + ${executorName} (Executor)
|
|
135
139
|
|
|
136
140
|
## Key Decisions
|
|
137
141
|
|
|
@@ -212,20 +216,20 @@ export const progressMd = (projectName) => `# Progress Log - ${projectName}
|
|
|
212
216
|
|
|
213
217
|
- [ ] _Define your first milestone here_
|
|
214
218
|
`;
|
|
215
|
-
export const cursorrulesMd = (projectName, description) => `# .cursorrules - ${projectName}
|
|
219
|
+
export const cursorrulesMd = (projectName, description, architectFile = "ARCHITECT.md") => `# .cursorrules - ${projectName}
|
|
216
220
|
|
|
217
221
|
# Generated by Tocket CLI — compatible with Cursor IDE
|
|
218
222
|
|
|
219
223
|
## Role
|
|
220
224
|
|
|
221
|
-
You are the **Executor** for **${projectName}**.
|
|
225
|
+
You are the **Executor** (Cursor) for **${projectName}**.
|
|
222
226
|
${description ? `\n> ${description}\n` : ""}
|
|
223
227
|
Your job is to **implement**, not to plan. Read the Memory Bank before every session, follow the Architect's decisions, and write code.
|
|
224
228
|
|
|
225
229
|
## Rules
|
|
226
230
|
|
|
227
231
|
1. **Always read \`.context/\` first** — Start every session by reading activeContext.md and systemPatterns.md.
|
|
228
|
-
2. **Follow the Architect's plan** — Implementation decisions come from mission briefs. Do not redesign.
|
|
232
|
+
2. **Follow the Architect's plan** — Implementation decisions come from \`${architectFile}\` or mission briefs. Do not redesign.
|
|
229
233
|
3. **Ask before deviating** — If the plan is unclear or blocked, ask the user. Do not improvise architecture.
|
|
230
234
|
4. **Write code in English** — Variables, functions, comments, commits — all in \`en-US\`.
|
|
231
235
|
5. **Update Memory Bank on completion** — After finishing a task, update activeContext.md with what changed.
|
|
@@ -236,7 +240,7 @@ Your job is to **implement**, not to plan. Read the Memory Bank before every ses
|
|
|
236
240
|
|------|---------|
|
|
237
241
|
| \`.context/activeContext.md\` | Current focus, recent changes, open decisions |
|
|
238
242
|
| \`.context/systemPatterns.md\` | Architecture patterns, tech stack, conventions |
|
|
239
|
-
|
|
|
243
|
+
| \`${architectFile}\` | Architect instructions (read-only for you) |
|
|
240
244
|
|
|
241
245
|
## Workflow
|
|
242
246
|
|
|
@@ -244,7 +248,7 @@ Your job is to **implement**, not to plan. Read the Memory Bank before every ses
|
|
|
244
248
|
1. Read .context/ → 2. Receive task → 3. Implement → 4. Update .context/
|
|
245
249
|
\`\`\`
|
|
246
250
|
`;
|
|
247
|
-
export const tocketMd = (projectName) => `# Tocket Protocol Specification
|
|
251
|
+
export const tocketMd = (projectName, executorFile = "CLAUDE.md", architectFile = "GEMINI.md") => `# Tocket Protocol Specification
|
|
248
252
|
|
|
249
253
|
> How any AI agent should operate in **${projectName}**.
|
|
250
254
|
|
|
@@ -342,7 +346,7 @@ A payload is the structured handoff from Architect to Executor.
|
|
|
342
346
|
|
|
343
347
|
1. Read this file (\`TOCKET.md\`)
|
|
344
348
|
2. Read \`.context/activeContext.md\` for current state
|
|
345
|
-
3. Read your role-specific config (\`
|
|
349
|
+
3. Read your role-specific config (\`${executorFile}\` or \`${architectFile}\`)
|
|
346
350
|
4. Proceed with your task, following the Memory Bank rules above
|
|
347
351
|
`;
|
|
348
352
|
//# sourceMappingURL=memory-bank.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-bank.js","sourceRoot":"","sources":["../../src/templates/memory-bank.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"memory-bank.js","sourceRoot":"","sources":["../../src/templates/memory-bank.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { describe, it } from "node:test";
|
|
2
|
+
import assert from "node:assert/strict";
|
|
3
|
+
import { getExecutorFileName, getArchitectFileName, getExecutorDisplayName, getArchitectDisplayName, DEFAULT_EXECUTOR, DEFAULT_ARCHITECT, EXECUTOR_FILE_MAP, ARCHITECT_FILE_MAP, } from "../utils/agents.js";
|
|
4
|
+
// ─── getExecutorFileName ────────────────────────────────────────────
|
|
5
|
+
describe("getExecutorFileName", () => {
|
|
6
|
+
it("returns CLAUDE.md for 'Claude Code'", () => {
|
|
7
|
+
assert.equal(getExecutorFileName("Claude Code"), "CLAUDE.md");
|
|
8
|
+
});
|
|
9
|
+
it("returns CLAUDE.md for 'Claude'", () => {
|
|
10
|
+
assert.equal(getExecutorFileName("Claude"), "CLAUDE.md");
|
|
11
|
+
});
|
|
12
|
+
it("returns .cursorrules for 'Cursor'", () => {
|
|
13
|
+
assert.equal(getExecutorFileName("Cursor"), ".cursorrules");
|
|
14
|
+
});
|
|
15
|
+
it("returns .windsurfrules for 'Windsurf'", () => {
|
|
16
|
+
assert.equal(getExecutorFileName("Windsurf"), ".windsurfrules");
|
|
17
|
+
});
|
|
18
|
+
it("returns .github/copilot-instructions.md for 'Copilot'", () => {
|
|
19
|
+
assert.equal(getExecutorFileName("Copilot"), ".github/copilot-instructions.md");
|
|
20
|
+
});
|
|
21
|
+
it("is case-insensitive", () => {
|
|
22
|
+
assert.equal(getExecutorFileName("CLAUDE CODE"), "CLAUDE.md");
|
|
23
|
+
assert.equal(getExecutorFileName("cursor"), ".cursorrules");
|
|
24
|
+
assert.equal(getExecutorFileName("WINDSURF"), ".windsurfrules");
|
|
25
|
+
});
|
|
26
|
+
it("returns EXECUTOR.md for unknown agents", () => {
|
|
27
|
+
assert.equal(getExecutorFileName("DeepSeek"), "EXECUTOR.md");
|
|
28
|
+
assert.equal(getExecutorFileName("GPT-4o"), "EXECUTOR.md");
|
|
29
|
+
assert.equal(getExecutorFileName("Cline"), "EXECUTOR.md");
|
|
30
|
+
});
|
|
31
|
+
it("returns CLAUDE.md when undefined", () => {
|
|
32
|
+
assert.equal(getExecutorFileName(undefined), "CLAUDE.md");
|
|
33
|
+
});
|
|
34
|
+
it("returns CLAUDE.md when no argument provided", () => {
|
|
35
|
+
assert.equal(getExecutorFileName(), "CLAUDE.md");
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
// ─── getArchitectFileName ───────────────────────────────────────────
|
|
39
|
+
describe("getArchitectFileName", () => {
|
|
40
|
+
it("returns GEMINI.md for 'Gemini'", () => {
|
|
41
|
+
assert.equal(getArchitectFileName("Gemini"), "GEMINI.md");
|
|
42
|
+
});
|
|
43
|
+
it("is case-insensitive", () => {
|
|
44
|
+
assert.equal(getArchitectFileName("GEMINI"), "GEMINI.md");
|
|
45
|
+
assert.equal(getArchitectFileName("gemini"), "GEMINI.md");
|
|
46
|
+
});
|
|
47
|
+
it("returns ARCHITECT.md for unknown agents", () => {
|
|
48
|
+
assert.equal(getArchitectFileName("ChatGPT"), "ARCHITECT.md");
|
|
49
|
+
assert.equal(getArchitectFileName("Claude"), "ARCHITECT.md");
|
|
50
|
+
assert.equal(getArchitectFileName("o1"), "ARCHITECT.md");
|
|
51
|
+
});
|
|
52
|
+
it("returns GEMINI.md when undefined", () => {
|
|
53
|
+
assert.equal(getArchitectFileName(undefined), "GEMINI.md");
|
|
54
|
+
});
|
|
55
|
+
it("returns GEMINI.md when no argument provided", () => {
|
|
56
|
+
assert.equal(getArchitectFileName(), "GEMINI.md");
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
// ─── getExecutorDisplayName ─────────────────────────────────────────
|
|
60
|
+
describe("getExecutorDisplayName", () => {
|
|
61
|
+
it("returns the given name when provided", () => {
|
|
62
|
+
assert.equal(getExecutorDisplayName("Cursor"), "Cursor");
|
|
63
|
+
});
|
|
64
|
+
it("returns DEFAULT_EXECUTOR when undefined", () => {
|
|
65
|
+
assert.equal(getExecutorDisplayName(undefined), DEFAULT_EXECUTOR);
|
|
66
|
+
});
|
|
67
|
+
it("returns DEFAULT_EXECUTOR when empty string", () => {
|
|
68
|
+
assert.equal(getExecutorDisplayName(""), DEFAULT_EXECUTOR);
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
// ─── getArchitectDisplayName ────────────────────────────────────────
|
|
72
|
+
describe("getArchitectDisplayName", () => {
|
|
73
|
+
it("returns the given name when provided", () => {
|
|
74
|
+
assert.equal(getArchitectDisplayName("ChatGPT"), "ChatGPT");
|
|
75
|
+
});
|
|
76
|
+
it("returns DEFAULT_ARCHITECT when undefined", () => {
|
|
77
|
+
assert.equal(getArchitectDisplayName(undefined), DEFAULT_ARCHITECT);
|
|
78
|
+
});
|
|
79
|
+
it("returns DEFAULT_ARCHITECT when empty string", () => {
|
|
80
|
+
assert.equal(getArchitectDisplayName(""), DEFAULT_ARCHITECT);
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
// ─── Constants ──────────────────────────────────────────────────────
|
|
84
|
+
describe("agent constants", () => {
|
|
85
|
+
it("DEFAULT_EXECUTOR is Claude Code", () => {
|
|
86
|
+
assert.equal(DEFAULT_EXECUTOR, "Claude Code");
|
|
87
|
+
});
|
|
88
|
+
it("DEFAULT_ARCHITECT is Gemini", () => {
|
|
89
|
+
assert.equal(DEFAULT_ARCHITECT, "Gemini");
|
|
90
|
+
});
|
|
91
|
+
it("EXECUTOR_FILE_MAP has expected entries", () => {
|
|
92
|
+
assert.ok("claude code" in EXECUTOR_FILE_MAP);
|
|
93
|
+
assert.ok("claude" in EXECUTOR_FILE_MAP);
|
|
94
|
+
assert.ok("cursor" in EXECUTOR_FILE_MAP);
|
|
95
|
+
assert.ok("windsurf" in EXECUTOR_FILE_MAP);
|
|
96
|
+
assert.ok("copilot" in EXECUTOR_FILE_MAP);
|
|
97
|
+
});
|
|
98
|
+
it("ARCHITECT_FILE_MAP has expected entries", () => {
|
|
99
|
+
assert.ok("gemini" in ARCHITECT_FILE_MAP);
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
//# sourceMappingURL=agents.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.test.js","sourceRoot":"","sources":["../../src/tests/agents.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -60,6 +60,45 @@ describe("config - read and write", () => {
|
|
|
60
60
|
assert.deepEqual(config, {});
|
|
61
61
|
});
|
|
62
62
|
});
|
|
63
|
+
describe("config - agents field", () => {
|
|
64
|
+
let tempDir;
|
|
65
|
+
let configPath;
|
|
66
|
+
before(() => {
|
|
67
|
+
tempDir = mkdtempSync(join(tmpdir(), "tocket-config-agents-"));
|
|
68
|
+
configPath = join(tempDir, ".tocketrc.json");
|
|
69
|
+
});
|
|
70
|
+
after(() => {
|
|
71
|
+
rmSync(tempDir, { recursive: true, force: true });
|
|
72
|
+
});
|
|
73
|
+
it("saveConfig preserves agents field", async () => {
|
|
74
|
+
const data = {
|
|
75
|
+
agents: { architect: "ChatGPT", executor: "Cursor" },
|
|
76
|
+
};
|
|
77
|
+
await saveConfig(data, configPath);
|
|
78
|
+
const config = await getConfig(configPath);
|
|
79
|
+
assert.equal(config.agents?.architect, "ChatGPT");
|
|
80
|
+
assert.equal(config.agents?.executor, "Cursor");
|
|
81
|
+
});
|
|
82
|
+
it("updateConfig merges nested agents", async () => {
|
|
83
|
+
await saveConfig({ agents: { architect: "Gemini", executor: "Claude Code" } }, configPath);
|
|
84
|
+
await updateConfig({ agents: { executor: "Windsurf" } }, configPath);
|
|
85
|
+
const config = await getConfig(configPath);
|
|
86
|
+
assert.equal(config.agents?.architect, "Gemini");
|
|
87
|
+
assert.equal(config.agents?.executor, "Windsurf");
|
|
88
|
+
});
|
|
89
|
+
it("agents coexist with other fields", async () => {
|
|
90
|
+
const data = {
|
|
91
|
+
author: "Pedro",
|
|
92
|
+
agents: { architect: "Gemini", executor: "Claude Code" },
|
|
93
|
+
defaults: { priority: "high" },
|
|
94
|
+
};
|
|
95
|
+
await saveConfig(data, configPath);
|
|
96
|
+
const config = await getConfig(configPath);
|
|
97
|
+
assert.equal(config.author, "Pedro");
|
|
98
|
+
assert.equal(config.agents?.architect, "Gemini");
|
|
99
|
+
assert.equal(config.defaults?.priority, "high");
|
|
100
|
+
});
|
|
101
|
+
});
|
|
63
102
|
describe("config - error handling", () => {
|
|
64
103
|
it("getConfig returns empty object for non-existent path", async () => {
|
|
65
104
|
const config = await getConfig("/nonexistent/path/.tocketrc.json");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.test.js","sourceRoot":"","sources":["../../src/tests/config.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.test.js","sourceRoot":"","sources":["../../src/tests/config.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { describe, it } from "node:test";
|
|
2
|
+
import assert from "node:assert/strict";
|
|
3
|
+
import { buildDiffReport, formatDiffReport } from "../commands/diff.cmd.js";
|
|
4
|
+
const baseParsed = {
|
|
5
|
+
version: "2.0",
|
|
6
|
+
meta: {
|
|
7
|
+
intent: "Add validation",
|
|
8
|
+
scope: "src/",
|
|
9
|
+
skills: "",
|
|
10
|
+
priority: "medium",
|
|
11
|
+
},
|
|
12
|
+
tasks: [
|
|
13
|
+
{
|
|
14
|
+
id: "1",
|
|
15
|
+
type: "edit",
|
|
16
|
+
target: "src/a.ts",
|
|
17
|
+
action: "Edit A",
|
|
18
|
+
spec: "",
|
|
19
|
+
done: "A works",
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
id: "2",
|
|
23
|
+
type: "create",
|
|
24
|
+
target: "src/b.ts",
|
|
25
|
+
action: "Create B",
|
|
26
|
+
spec: "",
|
|
27
|
+
done: "B exists",
|
|
28
|
+
},
|
|
29
|
+
],
|
|
30
|
+
checks: ["npm test passes"],
|
|
31
|
+
};
|
|
32
|
+
describe("buildDiffReport", () => {
|
|
33
|
+
it("identifies matched files", () => {
|
|
34
|
+
const report = buildDiffReport(baseParsed, ["src/a.ts", "src/b.ts"]);
|
|
35
|
+
assert.deepEqual(report.matchedFiles, ["src/a.ts", "src/b.ts"]);
|
|
36
|
+
assert.deepEqual(report.missingFiles, []);
|
|
37
|
+
assert.deepEqual(report.extraFiles, []);
|
|
38
|
+
});
|
|
39
|
+
it("identifies missing files", () => {
|
|
40
|
+
const report = buildDiffReport(baseParsed, ["src/a.ts"]);
|
|
41
|
+
assert.deepEqual(report.matchedFiles, ["src/a.ts"]);
|
|
42
|
+
assert.deepEqual(report.missingFiles, ["src/b.ts"]);
|
|
43
|
+
});
|
|
44
|
+
it("identifies extra files", () => {
|
|
45
|
+
const report = buildDiffReport(baseParsed, [
|
|
46
|
+
"src/a.ts",
|
|
47
|
+
"src/b.ts",
|
|
48
|
+
"src/c.ts",
|
|
49
|
+
]);
|
|
50
|
+
assert.deepEqual(report.extraFiles, ["src/c.ts"]);
|
|
51
|
+
});
|
|
52
|
+
it("extracts done criteria from tasks", () => {
|
|
53
|
+
const report = buildDiffReport(baseParsed, []);
|
|
54
|
+
assert.deepEqual(report.doneCriteria, ["A works", "B exists"]);
|
|
55
|
+
});
|
|
56
|
+
it("includes validation checks", () => {
|
|
57
|
+
const report = buildDiffReport(baseParsed, []);
|
|
58
|
+
assert.deepEqual(report.checks, ["npm test passes"]);
|
|
59
|
+
});
|
|
60
|
+
it("handles empty target tasks", () => {
|
|
61
|
+
const payload = {
|
|
62
|
+
...baseParsed,
|
|
63
|
+
tasks: [
|
|
64
|
+
{
|
|
65
|
+
id: "1",
|
|
66
|
+
type: "create",
|
|
67
|
+
target: "",
|
|
68
|
+
action: "Do something",
|
|
69
|
+
spec: "",
|
|
70
|
+
done: "Done",
|
|
71
|
+
},
|
|
72
|
+
],
|
|
73
|
+
};
|
|
74
|
+
const report = buildDiffReport(payload, ["src/a.ts"]);
|
|
75
|
+
assert.equal(report.expectedFiles.length, 0);
|
|
76
|
+
assert.equal(report.extraFiles.length, 1);
|
|
77
|
+
});
|
|
78
|
+
it("handles no actual changes", () => {
|
|
79
|
+
const report = buildDiffReport(baseParsed, []);
|
|
80
|
+
assert.equal(report.matchedFiles.length, 0);
|
|
81
|
+
assert.equal(report.missingFiles.length, 2);
|
|
82
|
+
assert.equal(report.extraFiles.length, 0);
|
|
83
|
+
});
|
|
84
|
+
it("handles all files matching", () => {
|
|
85
|
+
const report = buildDiffReport(baseParsed, ["src/a.ts", "src/b.ts"]);
|
|
86
|
+
assert.equal(report.matchedFiles.length, 2);
|
|
87
|
+
assert.equal(report.missingFiles.length, 0);
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
describe("formatDiffReport", () => {
|
|
91
|
+
it("returns a string", () => {
|
|
92
|
+
const report = buildDiffReport(baseParsed, ["src/a.ts"]);
|
|
93
|
+
const output = formatDiffReport(report);
|
|
94
|
+
assert.ok(typeof output === "string");
|
|
95
|
+
assert.ok(output.length > 0);
|
|
96
|
+
});
|
|
97
|
+
it("includes payload intent in output", () => {
|
|
98
|
+
const report = buildDiffReport(baseParsed, ["src/a.ts"]);
|
|
99
|
+
const output = formatDiffReport(report);
|
|
100
|
+
assert.ok(output.includes("Add validation"));
|
|
101
|
+
});
|
|
102
|
+
it("includes file coverage summary", () => {
|
|
103
|
+
const report = buildDiffReport(baseParsed, ["src/a.ts"]);
|
|
104
|
+
const output = formatDiffReport(report);
|
|
105
|
+
assert.ok(output.includes("1/2 expected files changed"));
|
|
106
|
+
});
|
|
107
|
+
it("includes done criteria as checklist", () => {
|
|
108
|
+
const report = buildDiffReport(baseParsed, []);
|
|
109
|
+
const output = formatDiffReport(report);
|
|
110
|
+
assert.ok(output.includes("[ ] A works"));
|
|
111
|
+
assert.ok(output.includes("[ ] B exists"));
|
|
112
|
+
});
|
|
113
|
+
it("includes validation checks as checklist", () => {
|
|
114
|
+
const report = buildDiffReport(baseParsed, []);
|
|
115
|
+
const output = formatDiffReport(report);
|
|
116
|
+
assert.ok(output.includes("[ ] npm test passes"));
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
//# sourceMappingURL=diff.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.test.js","sourceRoot":"","sources":["../../src/tests/diff.test.ts"],"names":[],"mappings":"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"}
|