@pedrocivita/tocket 2.2.2 → 2.4.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 +39 -14
- package/dist/commands/config.cmd.js +33 -6
- package/dist/commands/config.cmd.js.map +1 -1
- package/dist/commands/init.cmd.js +28 -8
- package/dist/commands/init.cmd.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/init-templates.test.d.ts +1 -0
- package/dist/tests/init-templates.test.js +167 -0
- package/dist/tests/init-templates.test.js.map +1 -0
- 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/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/templates.d.ts +12 -0
- package/dist/utils/templates.js +28 -0
- package/dist/utils/templates.js.map +1 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|

|
|
2
2
|
[](https://www.npmjs.com/package/@pedrocivita/tocket)
|
|
3
3
|
[](LICENSE)
|
|
4
|
+
[](https://tocket.ai)
|
|
4
5
|
|
|
5
6
|
# Tocket
|
|
6
7
|
|
|
@@ -24,9 +25,9 @@ your-project/
|
|
|
24
25
|
techContext.md # Stack and build tools
|
|
25
26
|
productContext.md # What the product is and why
|
|
26
27
|
progress.md # What's done, what's next
|
|
27
|
-
TOCKET.md # Protocol rules (
|
|
28
|
-
CLAUDE.md # Executor agent
|
|
29
|
-
GEMINI.md # Architect agent
|
|
28
|
+
TOCKET.md # Protocol rules (agent-agnostic)
|
|
29
|
+
CLAUDE.md # Executor instructions (auto-detected per agent)
|
|
30
|
+
GEMINI.md # Architect instructions (auto-detected per agent)
|
|
30
31
|
```
|
|
31
32
|
|
|
32
33
|
All files are plain markdown, committed to git, and readable by any tool.
|
|
@@ -44,12 +45,15 @@ The CLI automates the scaffolding, provides smart defaults, and adds quality-of-
|
|
|
44
45
|
## Quick Start
|
|
45
46
|
|
|
46
47
|
```bash
|
|
47
|
-
# Scaffold a new workspace
|
|
48
|
+
# Scaffold a new workspace
|
|
48
49
|
npx @pedrocivita/tocket init
|
|
49
50
|
|
|
50
51
|
# Or just the essentials (3 files)
|
|
51
52
|
npx @pedrocivita/tocket init --minimal
|
|
52
53
|
|
|
54
|
+
# Configure your agents (optional — defaults to Claude Code + Gemini)
|
|
55
|
+
npx @pedrocivita/tocket config --architect "Gemini" --executor "Claude Code"
|
|
56
|
+
|
|
53
57
|
# Or open the interactive dashboard
|
|
54
58
|
npx @pedrocivita/tocket
|
|
55
59
|
```
|
|
@@ -63,7 +67,7 @@ Tocket writes files to your repo, but you can try it risk-free on a branch:
|
|
|
63
67
|
```bash
|
|
64
68
|
git checkout -b test/tocket-setup
|
|
65
69
|
npx @pedrocivita/tocket init
|
|
66
|
-
git add .context/ TOCKET.md CLAUDE.md GEMINI.md
|
|
70
|
+
git add .context/ TOCKET.md CLAUDE.md GEMINI.md
|
|
67
71
|
git commit -m "chore: scaffold Tocket workspace"
|
|
68
72
|
|
|
69
73
|
# Try it out — run some AI sessions, see if you like it
|
|
@@ -80,7 +84,7 @@ See the [Developer Guide](docs/DEVELOPERS_GUIDE.md) for detailed safe-testing wo
|
|
|
80
84
|
| Command | What it does |
|
|
81
85
|
| --- | --- |
|
|
82
86
|
| `tocket` | Interactive dashboard with guided menu |
|
|
83
|
-
| `tocket init` | Scaffold `.context/`, `TOCKET.md`, and agent configs (auto-detects
|
|
87
|
+
| `tocket init` | Scaffold `.context/`, `TOCKET.md`, and agent configs (auto-detects stack + agents) |
|
|
84
88
|
| `tocket generate` | Build structured payload XML (auto-fills scope from git) |
|
|
85
89
|
| `tocket sync` | Append session summary + git log to `.context/progress.md` |
|
|
86
90
|
| `tocket validate` | Check if the workspace has a valid Memory Bank |
|
|
@@ -88,7 +92,7 @@ See the [Developer Guide](docs/DEVELOPERS_GUIDE.md) for detailed safe-testing wo
|
|
|
88
92
|
| `tocket status` | Quick overview: workspace health, branch, focus, agents |
|
|
89
93
|
| `tocket doctor` | Deep workspace diagnostics (content health, git tracking, staleness) |
|
|
90
94
|
| `tocket lint` | Audit `.context/` content quality and suggest improvements |
|
|
91
|
-
| `tocket config` | Manage global settings (`~/.tocketrc.json`) |
|
|
95
|
+
| `tocket config` | Manage global settings: agent roles, author, priority (`~/.tocketrc.json`) |
|
|
92
96
|
| `tocket eject` | Remove all Tocket files (with confirmation) |
|
|
93
97
|
|
|
94
98
|
### CI-friendly flags
|
|
@@ -152,26 +156,46 @@ The Architect doesn't write code. The Executor doesn't make architecture decisio
|
|
|
152
156
|
| Tool | What it does | How Tocket differs |
|
|
153
157
|
| --- | --- | --- |
|
|
154
158
|
| `.cursorrules` | Single-agent instructions for Cursor | Tocket defines _inter-agent_ protocol, not just single-agent rules |
|
|
155
|
-
| `CLAUDE.md` | Instructions for Claude Code | Tocket generates
|
|
159
|
+
| `CLAUDE.md` | Instructions for Claude Code | Tocket generates agent configs as part of a broader multi-agent system |
|
|
156
160
|
| `AGENTS.md` | Codex agent instructions | Same idea for one agent; Tocket coordinates multiple agents |
|
|
157
161
|
| Prompt templates | Static prompts for LLMs | Tocket's Memory Bank evolves with the project; payloads are structured, not freeform |
|
|
162
|
+
| Vendor-locked tools | Tied to one provider | Tocket works with **any LLM/tool** — configure via `tocket config` |
|
|
158
163
|
|
|
159
164
|
## Configuration
|
|
160
165
|
|
|
161
|
-
|
|
166
|
+
Configure your preferred agents and defaults:
|
|
162
167
|
|
|
163
168
|
```bash
|
|
164
|
-
#
|
|
165
|
-
tocket config
|
|
169
|
+
# Configure your agent roles
|
|
170
|
+
tocket config --architect "Gemini" --executor "Claude Code"
|
|
166
171
|
|
|
167
|
-
#
|
|
172
|
+
# Set payload defaults
|
|
168
173
|
tocket config --author "Your Name" --priority medium --skills "core,lsp"
|
|
169
174
|
|
|
175
|
+
# Or use the interactive setup (sections: Identity, Agent Roles, Payload Defaults)
|
|
176
|
+
tocket config
|
|
177
|
+
|
|
170
178
|
# View current config
|
|
171
179
|
tocket config --show
|
|
172
180
|
```
|
|
173
181
|
|
|
174
|
-
Config is stored at `~/.tocketrc.json
|
|
182
|
+
Config is stored at `~/.tocketrc.json`.
|
|
183
|
+
|
|
184
|
+
### Supported Agents
|
|
185
|
+
|
|
186
|
+
Tocket auto-generates the correct instruction file for each agent:
|
|
187
|
+
|
|
188
|
+
| Agent | Role | Generated File |
|
|
189
|
+
| --- | --- | --- |
|
|
190
|
+
| Claude Code | Executor | `CLAUDE.md` |
|
|
191
|
+
| Cursor | Executor | `.cursorrules` |
|
|
192
|
+
| Windsurf | Executor | `.windsurfrules` |
|
|
193
|
+
| Copilot | Executor | `.github/copilot-instructions.md` |
|
|
194
|
+
| Gemini | Architect | `GEMINI.md` |
|
|
195
|
+
| _(any other)_ | Executor | `EXECUTOR.md` |
|
|
196
|
+
| _(any other)_ | Architect | `ARCHITECT.md` |
|
|
197
|
+
|
|
198
|
+
Don't see your agent? It still works — unknown agents get generic files, and you can override any template via [`~/.tocket/templates/`](docs/DEVELOPERS_GUIDE.md).
|
|
175
199
|
|
|
176
200
|
## Documentation
|
|
177
201
|
|
|
@@ -181,10 +205,11 @@ Config is stored at `~/.tocketrc.json` and pre-fills author, priority, and skill
|
|
|
181
205
|
| [Developer Guide](docs/DEVELOPERS_GUIDE.md) | How to run the Tocket protocol safely in any project |
|
|
182
206
|
| [Tocket Rules](docs/TOCKET_RULES.md) | Complete reference for all protocol rules |
|
|
183
207
|
| [Protocol Spec](TOCKET.md) | The agent-agnostic protocol specification |
|
|
208
|
+
| [Walkthrough](examples/walkthrough.md) | End-to-end payload exchange example |
|
|
184
209
|
|
|
185
210
|
## Contributing
|
|
186
211
|
|
|
187
|
-
We welcome contributions!
|
|
212
|
+
We welcome contributions! Visit [tocket.ai](https://tocket.ai) for an overview of the framework, then read our [Contributing Guide](CONTRIBUTING.md) to get started.
|
|
188
213
|
|
|
189
214
|
This project follows a [Code of Conduct](CODE_OF_CONDUCT.md).
|
|
190
215
|
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { input, select, confirm } from "@inquirer/prompts";
|
|
2
2
|
import { getConfig, saveConfig, resetConfig, getConfigPath, } from "../utils/config.js";
|
|
3
|
+
import { DEFAULT_ARCHITECT, DEFAULT_EXECUTOR } from "../utils/agents.js";
|
|
3
4
|
import { success, heading, dim } from "../utils/theme.js";
|
|
4
5
|
export function registerConfigCommand(program) {
|
|
5
6
|
program
|
|
6
7
|
.command("config")
|
|
7
8
|
.description("Manage global Tocket configuration (~/.tocketrc.json)")
|
|
8
9
|
.option("--author <name>", "Set default author name")
|
|
9
|
-
.option("--agent <name>", "Set default agent name")
|
|
10
|
+
.option("--agent <name>", "Set default agent name (deprecated, use --architect/--executor)")
|
|
11
|
+
.option("--architect <name>", "Set architect agent (e.g. Gemini, ChatGPT)")
|
|
12
|
+
.option("--executor <name>", "Set executor agent (e.g. \"Claude Code\", Cursor, Windsurf)")
|
|
10
13
|
.option("--priority <level>", "Set default priority (high|medium|low)")
|
|
11
14
|
.option("--skills <list>", "Set default skills (comma-separated)")
|
|
12
15
|
.option("--show", "Display current configuration")
|
|
@@ -42,13 +45,24 @@ export function registerConfigCommand(program) {
|
|
|
42
45
|
return;
|
|
43
46
|
}
|
|
44
47
|
// Non-interactive: handle individual flags
|
|
45
|
-
const hasFlags = options.author || options.agent || options.
|
|
48
|
+
const hasFlags = options.author || options.agent || options.architect ||
|
|
49
|
+
options.executor || options.priority || options.skills;
|
|
46
50
|
if (hasFlags) {
|
|
47
51
|
const config = await getConfig();
|
|
48
52
|
if (options.author)
|
|
49
53
|
config.author = options.author;
|
|
50
54
|
if (options.agent)
|
|
51
55
|
config.defaultAgent = options.agent;
|
|
56
|
+
if (options.architect) {
|
|
57
|
+
if (!config.agents)
|
|
58
|
+
config.agents = {};
|
|
59
|
+
config.agents.architect = options.architect;
|
|
60
|
+
}
|
|
61
|
+
if (options.executor) {
|
|
62
|
+
if (!config.agents)
|
|
63
|
+
config.agents = {};
|
|
64
|
+
config.agents.executor = options.executor;
|
|
65
|
+
}
|
|
52
66
|
if (options.priority) {
|
|
53
67
|
if (!config.defaults)
|
|
54
68
|
config.defaults = {};
|
|
@@ -66,14 +80,24 @@ export function registerConfigCommand(program) {
|
|
|
66
80
|
// Interactive TUI mode
|
|
67
81
|
const current = await getConfig();
|
|
68
82
|
console.log(heading("\n Tocket Configuration\n"));
|
|
83
|
+
// ── Identity ──
|
|
84
|
+
console.log(dim(" ── Identity ──\n"));
|
|
69
85
|
const author = await input({
|
|
70
86
|
message: "Author name:",
|
|
71
87
|
default: current.author || undefined,
|
|
72
88
|
});
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
89
|
+
// ── Agent Roles ──
|
|
90
|
+
console.log(dim("\n ── Agent Roles ──\n"));
|
|
91
|
+
const architect = await input({
|
|
92
|
+
message: "Architect (planner):",
|
|
93
|
+
default: current.agents?.architect || DEFAULT_ARCHITECT,
|
|
76
94
|
});
|
|
95
|
+
const executor = await input({
|
|
96
|
+
message: "Executor (implementer):",
|
|
97
|
+
default: current.agents?.executor || DEFAULT_EXECUTOR,
|
|
98
|
+
});
|
|
99
|
+
// ── Payload Defaults ──
|
|
100
|
+
console.log(dim("\n ── Payload Defaults ──\n"));
|
|
77
101
|
const priority = await select({
|
|
78
102
|
message: "Default priority:",
|
|
79
103
|
choices: [
|
|
@@ -90,7 +114,10 @@ export function registerConfigCommand(program) {
|
|
|
90
114
|
await saveConfig({
|
|
91
115
|
...current,
|
|
92
116
|
author: author || undefined,
|
|
93
|
-
|
|
117
|
+
agents: {
|
|
118
|
+
architect: architect || undefined,
|
|
119
|
+
executor: executor || undefined,
|
|
120
|
+
},
|
|
94
121
|
defaults: {
|
|
95
122
|
priority: priority,
|
|
96
123
|
skills: skills || undefined,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.cmd.js","sourceRoot":"","sources":["../../src/commands/config.cmd.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EACL,SAAS,EACT,UAAU,EACV,WAAW,EACX,aAAa,GACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAE1D,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,uDAAuD,CAAC;SACpE,MAAM,CAAC,iBAAiB,EAAE,yBAAyB,CAAC;SACpD,MAAM,CAAC,gBAAgB,EAAE,
|
|
1
|
+
{"version":3,"file":"config.cmd.js","sourceRoot":"","sources":["../../src/commands/config.cmd.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +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
|
-
import {
|
|
7
|
+
import { readGlobalTemplate } from "../utils/templates.js";
|
|
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";
|
|
8
10
|
async function fileExists(path) {
|
|
9
11
|
try {
|
|
10
12
|
await access(path);
|
|
@@ -163,13 +165,19 @@ export function registerInitCommand(program) {
|
|
|
163
165
|
});
|
|
164
166
|
const contextDir = join(cwd, ".context");
|
|
165
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);
|
|
166
173
|
const files = [
|
|
167
|
-
["TOCKET.md", tocketMd(projectName)],
|
|
168
|
-
["
|
|
169
|
-
|
|
170
|
-
|
|
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)],
|
|
171
179
|
[join(".context", "activeContext.md"), activeContextMd(projectName)],
|
|
172
|
-
[join(".context", "systemPatterns.md"), systemPatternsMd(projectName)],
|
|
180
|
+
[join(".context", "systemPatterns.md"), systemPatternsMd(projectName, architectName, executorName)],
|
|
173
181
|
[
|
|
174
182
|
join(".context", "productContext.md"),
|
|
175
183
|
productContextMd(projectName, description),
|
|
@@ -188,7 +196,16 @@ export function registerInitCommand(program) {
|
|
|
188
196
|
const filesToWrite = minimal
|
|
189
197
|
? files.filter(([path]) => minimalPaths.has(path))
|
|
190
198
|
: files;
|
|
191
|
-
|
|
199
|
+
const templateVars = {
|
|
200
|
+
projectName,
|
|
201
|
+
description,
|
|
202
|
+
date: new Date().toISOString().split("T")[0],
|
|
203
|
+
architectName,
|
|
204
|
+
executorName,
|
|
205
|
+
architectFile,
|
|
206
|
+
executorFile,
|
|
207
|
+
};
|
|
208
|
+
for (const [filePath, builtInContent] of filesToWrite) {
|
|
192
209
|
const fullPath = join(cwd, filePath);
|
|
193
210
|
const exists = await fileExists(fullPath);
|
|
194
211
|
if (exists && !force) {
|
|
@@ -201,6 +218,9 @@ export function registerInitCommand(program) {
|
|
|
201
218
|
continue;
|
|
202
219
|
}
|
|
203
220
|
}
|
|
221
|
+
await mkdir(dirname(fullPath), { recursive: true });
|
|
222
|
+
const userContent = await readGlobalTemplate(filePath, templateVars);
|
|
223
|
+
const content = userContent ?? builtInContent;
|
|
204
224
|
await writeFile(fullPath, content, "utf-8");
|
|
205
225
|
console.log(" " + success(`${exists ? "updated" : "created"} ${filePath}`));
|
|
206
226
|
}
|
|
@@ -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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"}
|
|
@@ -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
|