ctxflow 1.0.5 → 1.0.7
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 -19
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +125 -16
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/new.d.ts.map +1 -1
- package/dist/commands/new.js +2 -1
- package/dist/commands/new.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/templates/context.md.hbs +47 -0
- package/dist/ui/menu.d.ts.map +1 -1
- package/dist/ui/menu.js +5 -5
- package/dist/ui/menu.js.map +1 -1
- package/dist/utils/agents.d.ts +10 -0
- package/dist/utils/agents.d.ts.map +1 -0
- package/dist/utils/agents.js +21 -0
- package/dist/utils/agents.js.map +1 -0
- package/package.json +1 -5
package/README.md
CHANGED
|
@@ -45,7 +45,7 @@ npm install -g ctxflow
|
|
|
45
45
|
## Quick start
|
|
46
46
|
|
|
47
47
|
```bash
|
|
48
|
-
# 1. Initialise your project (once)
|
|
48
|
+
# 1. Initialise your project (once) — pick your AI agents
|
|
49
49
|
ctxflow init
|
|
50
50
|
|
|
51
51
|
# 2. Create a feature context before you start coding
|
|
@@ -64,12 +64,25 @@ Or just run `ctxflow` for the full interactive menu.
|
|
|
64
64
|
|
|
65
65
|
### `ctxflow init`
|
|
66
66
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
67
|
+
Asks which AI agents you use, then creates the right context file(s) for each:
|
|
68
|
+
|
|
69
|
+
| Agent | File |
|
|
70
|
+
|-------|------|
|
|
71
|
+
| Claude Code | `CLAUDE.md` |
|
|
72
|
+
| Codex CLI (OpenAI) | `AGENTS.md` |
|
|
73
|
+
| Cursor | `.cursor/rules/project.md` |
|
|
74
|
+
| GitHub Copilot | `.github/copilot-instructions.md` |
|
|
75
|
+
| Windsurf | `.windsurfrules` |
|
|
76
|
+
| Gemini CLI | `GEMINI.md` |
|
|
77
|
+
| Cline | `.clinerules` |
|
|
78
|
+
| Aider | `CONVENTIONS.md` |
|
|
79
|
+
| Amazon Q | `.amazonq/rules/context.md` |
|
|
80
|
+
| Continue | `.continuerules` |
|
|
81
|
+
| Devin / Kiro / others | `AGENTS.md` |
|
|
70
82
|
|
|
71
|
-
|
|
72
|
-
|
|
83
|
+
Each file contains your stack, architecture overview, approved libraries, and non-negotiable rules — the single source of truth your AI reads every session.
|
|
84
|
+
|
|
85
|
+
You can select multiple agents. Files that share a path (e.g. Codex CLI + Devin both use `AGENTS.md`) are written once.
|
|
73
86
|
|
|
74
87
|
### `ctxflow new <feature>`
|
|
75
88
|
|
|
@@ -89,7 +102,7 @@ Run `ctxflow` with no arguments for a full interactive experience:
|
|
|
89
102
|
What would you like to do?
|
|
90
103
|
|
|
91
104
|
[1] New feature — scaffold a new feature context
|
|
92
|
-
[2] Init project — create
|
|
105
|
+
[2] Init project — create AI context file(s) + /docs structure
|
|
93
106
|
[3] List features — show all existing plans
|
|
94
107
|
[4] Status — check tasks in a feature plan
|
|
95
108
|
[5] Help — show usage and documentation
|
|
@@ -106,7 +119,7 @@ Press a number key to execute instantly — no Enter needed.
|
|
|
106
119
|
| Command | Description |
|
|
107
120
|
|--------|-------------|
|
|
108
121
|
| `ctxflow` | Launch interactive menu |
|
|
109
|
-
| `ctxflow init` |
|
|
122
|
+
| `ctxflow init` | Select AI agents and scaffold context file(s) |
|
|
110
123
|
| `ctxflow new <feature>` | Create a feature context under `docs/features/<feature>/` |
|
|
111
124
|
| `ctxflow list` | List all feature contexts with creation dates |
|
|
112
125
|
| `ctxflow status <feature>` | Show task completion progress for a feature |
|
|
@@ -116,7 +129,7 @@ Press a number key to execute instantly — no Enter needed.
|
|
|
116
129
|
## The workflow
|
|
117
130
|
|
|
118
131
|
```
|
|
119
|
-
1. ctxflow init →
|
|
132
|
+
1. ctxflow init → Pick your agents. Context files written automatically.
|
|
120
133
|
2. ctxflow new <feature> → Before every feature: scaffold requirements + plan.
|
|
121
134
|
3. Fill requirements.md → Context, constraints, acceptance criteria. Your AI reads this.
|
|
122
135
|
4. Code the feature → AI works with full context. No guessing.
|
|
@@ -132,8 +145,8 @@ AI coding assistants are only as useful as the context they receive. Without str
|
|
|
132
145
|
|
|
133
146
|
| Without ctxflow | With ctxflow |
|
|
134
147
|
|----------------|--------------|
|
|
135
|
-
| Agent guesses at your stack | Agent reads your exact stack from
|
|
136
|
-
| Unapproved libraries sneak in |
|
|
148
|
+
| Agent guesses at your stack | Agent reads your exact stack from the context file |
|
|
149
|
+
| Unapproved libraries sneak in | Context file lists exactly what's approved |
|
|
137
150
|
| Requirements drift mid-feature | `requirements.md` is the single source of truth |
|
|
138
151
|
| Agent asks you the same questions every session | Context is version-controlled and always available |
|
|
139
152
|
|
|
@@ -141,14 +154,21 @@ AI coding assistants are only as useful as the context they receive. Without str
|
|
|
141
154
|
|
|
142
155
|
## Works with any AI assistant
|
|
143
156
|
|
|
144
|
-
ctxflow
|
|
145
|
-
|
|
146
|
-
- **Claude**
|
|
147
|
-
- **
|
|
148
|
-
- **Cursor**
|
|
149
|
-
- **
|
|
150
|
-
- **
|
|
151
|
-
-
|
|
157
|
+
ctxflow supports all major AI coding agents out of the box:
|
|
158
|
+
|
|
159
|
+
- **Claude Code** — `CLAUDE.md`
|
|
160
|
+
- **Codex CLI (OpenAI)** — `AGENTS.md`
|
|
161
|
+
- **Cursor** — `.cursor/rules/project.md`
|
|
162
|
+
- **GitHub Copilot** — `.github/copilot-instructions.md`
|
|
163
|
+
- **Windsurf** — `.windsurfrules`
|
|
164
|
+
- **Gemini CLI** — `GEMINI.md`
|
|
165
|
+
- **Cline** — `.clinerules`
|
|
166
|
+
- **Aider** — `CONVENTIONS.md`
|
|
167
|
+
- **Amazon Q** — `.amazonq/rules/context.md`
|
|
168
|
+
- **Continue** — `.continuerules`
|
|
169
|
+
- **Devin / Kiro / others** — `AGENTS.md`
|
|
170
|
+
|
|
171
|
+
Select one or more during `ctxflow init`. The project is considered initialised as long as any of these files exist.
|
|
152
172
|
|
|
153
173
|
---
|
|
154
174
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AA6HA,wBAAsB,WAAW,CAAC,GAAG,SAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CA6CvE"}
|
package/dist/commands/init.js
CHANGED
|
@@ -2,11 +2,100 @@ import { join } from 'path';
|
|
|
2
2
|
import chalk from 'chalk';
|
|
3
3
|
import { readTemplate, renderTemplate, writeFile, pathExists } from '../utils/fs.js';
|
|
4
4
|
import { logger } from '../utils/logger.js';
|
|
5
|
+
import { AGENTS } from '../utils/agents.js';
|
|
5
6
|
const TODAY = new Date().toISOString().split('T')[0];
|
|
6
|
-
async function
|
|
7
|
+
async function pickAgents() {
|
|
8
|
+
const items = AGENTS.map(a => a.label);
|
|
9
|
+
let cursor = 0;
|
|
10
|
+
const selected = new Set([0]); // Claude Code pre-selected
|
|
11
|
+
let firstRender = true;
|
|
12
|
+
function render() {
|
|
13
|
+
const HEADER = 3;
|
|
14
|
+
const FOOTER = 2;
|
|
15
|
+
const totalLines = HEADER + items.length + FOOTER;
|
|
16
|
+
if (!firstRender) {
|
|
17
|
+
process.stdout.write(`\x1b[${totalLines}A`);
|
|
18
|
+
}
|
|
19
|
+
firstRender = false;
|
|
20
|
+
process.stdout.write('\n');
|
|
21
|
+
process.stdout.write(` ${chalk.cyan('Which AI agents do you use?')} ` +
|
|
22
|
+
`${chalk.gray('Space = toggle · ↑↓ or j/k = navigate · a = all · Enter = confirm')}\n`);
|
|
23
|
+
process.stdout.write('\n');
|
|
24
|
+
for (let i = 0; i < items.length; i++) {
|
|
25
|
+
const cur = i === cursor ? chalk.cyan('❯') : ' ';
|
|
26
|
+
const box = selected.has(i) ? chalk.magenta('◉') : chalk.gray('◯');
|
|
27
|
+
const lbl = i === cursor ? chalk.white(items[i]) : chalk.gray(items[i]);
|
|
28
|
+
process.stdout.write(` ${cur} ${box} ${lbl}\x1b[K\n`);
|
|
29
|
+
}
|
|
30
|
+
process.stdout.write('\n');
|
|
31
|
+
process.stdout.write(` ${chalk.gray('Esc to cancel')}\n`);
|
|
32
|
+
}
|
|
33
|
+
render();
|
|
7
34
|
return new Promise((resolve) => {
|
|
8
35
|
const stdin = process.stdin;
|
|
9
|
-
|
|
36
|
+
if (!stdin.isTTY) {
|
|
37
|
+
resolve([0]);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
stdin.setRawMode(true);
|
|
41
|
+
stdin.resume();
|
|
42
|
+
const cleanup = () => {
|
|
43
|
+
stdin.setRawMode(false);
|
|
44
|
+
stdin.pause();
|
|
45
|
+
stdin.removeListener('data', onData);
|
|
46
|
+
process.stdout.write('\n');
|
|
47
|
+
};
|
|
48
|
+
const onData = (chunk) => {
|
|
49
|
+
const key = chunk.toString();
|
|
50
|
+
if (key === '\x03') {
|
|
51
|
+
cleanup();
|
|
52
|
+
process.exit(0);
|
|
53
|
+
}
|
|
54
|
+
if (key === '\x1b') {
|
|
55
|
+
cleanup();
|
|
56
|
+
resolve(null);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
if (key === '\x1b[A' || key === 'k') {
|
|
60
|
+
cursor = (cursor - 1 + items.length) % items.length;
|
|
61
|
+
render();
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
if (key === '\x1b[B' || key === 'j') {
|
|
65
|
+
cursor = (cursor + 1) % items.length;
|
|
66
|
+
render();
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
if (key === ' ') {
|
|
70
|
+
if (selected.has(cursor))
|
|
71
|
+
selected.delete(cursor);
|
|
72
|
+
else
|
|
73
|
+
selected.add(cursor);
|
|
74
|
+
render();
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
if (key === 'a' || key === 'A') {
|
|
78
|
+
if (selected.size === items.length)
|
|
79
|
+
selected.clear();
|
|
80
|
+
else
|
|
81
|
+
items.forEach((_, i) => selected.add(i));
|
|
82
|
+
render();
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
if (key === '\r' || key === '\n') {
|
|
86
|
+
if (selected.size === 0)
|
|
87
|
+
return;
|
|
88
|
+
cleanup();
|
|
89
|
+
resolve([...selected].sort((a, b) => a - b));
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
stdin.on('data', onData);
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
async function confirmOverwrite(_files) {
|
|
96
|
+
return new Promise((resolve) => {
|
|
97
|
+
const stdin = process.stdin;
|
|
98
|
+
process.stdout.write(`\n ${chalk.yellow('Project already initialised.')} ${chalk.white('Overwrite?')}` +
|
|
10
99
|
chalk.gray(' Enter = yes / Esc = no '));
|
|
11
100
|
if (!stdin.isTTY) {
|
|
12
101
|
stdin.once('data', (c) => resolve(c.toString().trim().toLowerCase() === 'y'));
|
|
@@ -20,42 +109,62 @@ async function confirmOverwrite() {
|
|
|
20
109
|
const key = chunk.toString();
|
|
21
110
|
process.stdout.write('\n');
|
|
22
111
|
if (key === '\x03')
|
|
23
|
-
process.exit(0);
|
|
112
|
+
process.exit(0);
|
|
24
113
|
if (key === '\x1b') {
|
|
25
114
|
resolve(false);
|
|
26
115
|
return;
|
|
27
|
-
}
|
|
116
|
+
}
|
|
28
117
|
if (key === '\r' || key === '\n') {
|
|
29
118
|
resolve(true);
|
|
30
119
|
return;
|
|
31
|
-
}
|
|
120
|
+
}
|
|
32
121
|
if (key.toLowerCase() === 'y') {
|
|
33
122
|
resolve(true);
|
|
34
123
|
return;
|
|
35
124
|
}
|
|
36
|
-
resolve(false);
|
|
125
|
+
resolve(false);
|
|
37
126
|
});
|
|
38
127
|
});
|
|
39
128
|
}
|
|
40
|
-
// Returns true = completed, false = aborted (Esc / no)
|
|
41
129
|
export async function initCommand(cwd = process.cwd()) {
|
|
42
|
-
const
|
|
43
|
-
if (
|
|
44
|
-
|
|
130
|
+
const indices = await pickAgents();
|
|
131
|
+
if (indices === null) {
|
|
132
|
+
console.log('');
|
|
133
|
+
logger.warn('Aborted — nothing changed.');
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
// Deduplicate by file path (codex + others both map to AGENTS.md → one file)
|
|
137
|
+
const seen = new Map();
|
|
138
|
+
for (const i of indices) {
|
|
139
|
+
const agent = AGENTS[i];
|
|
140
|
+
if (!seen.has(agent.file))
|
|
141
|
+
seen.set(agent.file, agent);
|
|
142
|
+
}
|
|
143
|
+
const toCreate = [...seen.values()];
|
|
144
|
+
const existing = [];
|
|
145
|
+
for (const agent of toCreate) {
|
|
146
|
+
if (await pathExists(join(cwd, agent.file)))
|
|
147
|
+
existing.push(agent.file);
|
|
148
|
+
}
|
|
149
|
+
if (existing.length > 0) {
|
|
150
|
+
const yes = await confirmOverwrite(existing);
|
|
45
151
|
if (!yes) {
|
|
46
152
|
console.log('');
|
|
47
153
|
logger.warn('Aborted — nothing changed.');
|
|
48
154
|
return false;
|
|
49
155
|
}
|
|
50
156
|
}
|
|
51
|
-
|
|
52
|
-
const
|
|
53
|
-
|
|
157
|
+
console.log('');
|
|
158
|
+
const tpl = await readTemplate('context.md.hbs');
|
|
159
|
+
for (const agent of toCreate) {
|
|
160
|
+
const vars = { agentName: agent.agentName, contextFile: agent.file, date: TODAY };
|
|
161
|
+
await writeFile(join(cwd, agent.file), renderTemplate(tpl, vars));
|
|
162
|
+
logger.file(agent.file);
|
|
163
|
+
}
|
|
164
|
+
console.log('');
|
|
54
165
|
logger.success('Project initialised!');
|
|
55
166
|
logger.blank();
|
|
56
|
-
logger.file(
|
|
57
|
-
logger.blank();
|
|
58
|
-
logger.info('Edit CLAUDE.md to fill in your stack, architecture, and approvals.');
|
|
167
|
+
logger.info('Fill in your stack, architecture, and approvals in the context file(s) above.');
|
|
59
168
|
return true;
|
|
60
169
|
}
|
|
61
170
|
//# sourceMappingURL=init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"AAWA,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,SAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsCxF"}
|
package/dist/commands/new.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { join } from 'path';
|
|
2
2
|
import { readTemplate, renderTemplate, writeFile, pathExists } from '../utils/fs.js';
|
|
3
3
|
import { logger } from '../utils/logger.js';
|
|
4
|
+
import { isProjectInitialised } from '../utils/agents.js';
|
|
4
5
|
const TODAY = new Date().toISOString().split('T')[0];
|
|
5
6
|
function slugify(name) {
|
|
6
7
|
return name.trim().toLowerCase().replace(/\s+/g, '-').replace(/[^a-z0-9-]/g, '');
|
|
7
8
|
}
|
|
8
9
|
export async function newCommand(featureName, cwd = process.cwd()) {
|
|
9
|
-
if (!(await
|
|
10
|
+
if (!(await isProjectInitialised(cwd))) {
|
|
10
11
|
logger.error('Project not initialised. Run `ctxflow init` first.');
|
|
11
12
|
return;
|
|
12
13
|
}
|
package/dist/commands/new.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAErD,SAAS,OAAO,CAAC,IAAY;IAC3B,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;AACnF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,WAAmB,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IACvE,IAAI,CAAC,CAAC,MAAM,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACvC,MAAM,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACnE,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAClC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACtC,OAAO;IACT,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;IAEhD,IAAI,MAAM,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,YAAY,IAAI,qCAAqC,IAAI,EAAE,CAAC,CAAC;QACzE,MAAM,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;QACnE,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,EAAE,OAAO,EAAE,WAAW,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAE1D,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC1C,YAAY,CAAC,qBAAqB,CAAC;QACnC,YAAY,CAAC,aAAa,CAAC;KAC5B,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,EAAE,cAAc,CAAC,MAAM,EAAG,IAAI,CAAC,CAAC;QACtE,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,EAAU,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;KACvE,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC,YAAY,WAAW,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC3D,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,MAAM,CAAC,IAAI,CAAC,iBAAiB,IAAI,kBAAkB,CAAC,CAAC;IACrD,MAAM,CAAC,IAAI,CAAC,iBAAiB,IAAI,UAAU,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,MAAM,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;AAC9E,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -15,7 +15,7 @@ program
|
|
|
15
15
|
.configureOutput({ outputError: () => { } }); // suppress commander's raw error lines
|
|
16
16
|
program
|
|
17
17
|
.command('init')
|
|
18
|
-
.description('
|
|
18
|
+
.description('Select AI agents and create context file(s) in the current project')
|
|
19
19
|
.action(async () => {
|
|
20
20
|
showBanner();
|
|
21
21
|
await initCommand();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAQ,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAS,mBAAmB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAQ,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,qDAAqD,CAAC;KAClE,OAAO,CAAC,OAAO,CAAC;KAChB,YAAY,EAAE;KACd,eAAe,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,CAAC,CAAC,CAAC,uCAAuC;AAEtF,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# {{agentName}}
|
|
2
|
+
|
|
3
|
+
> This file is read by AI coding assistants to understand the project context. Keep it accurate and up to date.
|
|
4
|
+
|
|
5
|
+
## Stack
|
|
6
|
+
|
|
7
|
+
- Language: <!-- e.g. Java 21, Python 3.12, Go 1.23, Node.js 22 -->
|
|
8
|
+
- Framework: <!-- e.g. Spring Boot, Django, Gin, Express -->
|
|
9
|
+
- Testing: <!-- e.g. JUnit 5, pytest, Go test, Vitest -->
|
|
10
|
+
|
|
11
|
+
## Project structure
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
/
|
|
15
|
+
├── src/ # Source code
|
|
16
|
+
├── tests/ # Test files
|
|
17
|
+
├── docs/
|
|
18
|
+
│ └── features/ # Feature context (managed by ctxflow)
|
|
19
|
+
└── {{contextFile}}
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Architecture
|
|
23
|
+
|
|
24
|
+
<!-- Describe the high-level architecture: main components, data flow, key boundaries.
|
|
25
|
+
Update this when structure changes. -->
|
|
26
|
+
|
|
27
|
+
## Approvals
|
|
28
|
+
|
|
29
|
+
<!-- Authoritative list of approved dependencies. Check before adding anything new. -->
|
|
30
|
+
|
|
31
|
+
| Library / Tool | Version | Purpose |
|
|
32
|
+
|---------------|---------|---------|
|
|
33
|
+
| | | |
|
|
34
|
+
|
|
35
|
+
## Rules (non-negotiable)
|
|
36
|
+
|
|
37
|
+
1. Read `docs/features/<feature>/requirements.md` BEFORE implementing any feature.
|
|
38
|
+
2. Write tests before marking a task as complete.
|
|
39
|
+
3. Check **## Approvals** before adding any new dependency.
|
|
40
|
+
4. Keep this file updated when the stack or rules change.
|
|
41
|
+
|
|
42
|
+
## What NOT to do
|
|
43
|
+
|
|
44
|
+
- Do NOT add libraries not in **## Approvals** without updating it first.
|
|
45
|
+
- Do NOT commit to main/master directly — use feature branches and code review.
|
|
46
|
+
- Do NOT skip requirements.md when starting a feature.
|
|
47
|
+
- Do NOT change architecture without updating **## Architecture** in this file.
|
package/dist/ui/menu.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../src/ui/menu.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../src/ui/menu.ts"],"names":[],"mappings":"AAwJA,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAyB9C;AA8DD,wBAAgB,QAAQ,IAAI,IAAI,CAU/B"}
|
package/dist/ui/menu.js
CHANGED
|
@@ -4,11 +4,12 @@ import { initCommand } from '../commands/init.js';
|
|
|
4
4
|
import { newCommand } from '../commands/new.js';
|
|
5
5
|
import { listCommand } from '../commands/list.js';
|
|
6
6
|
import { statusCommand } from '../commands/status.js';
|
|
7
|
-
import { readDir
|
|
7
|
+
import { readDir } from '../utils/fs.js';
|
|
8
|
+
import { isProjectInitialised } from '../utils/agents.js';
|
|
8
9
|
import { join } from 'path';
|
|
9
10
|
const MAIN_CHOICES = [
|
|
10
11
|
{ key: '1', label: 'New feature', desc: '— scaffold a new feature context', value: 'new' },
|
|
11
|
-
{ key: '2', label: 'Init project', desc: '— create
|
|
12
|
+
{ key: '2', label: 'Init project', desc: '— create AI context file(s) + /docs structure', value: 'init' },
|
|
12
13
|
{ key: '3', label: 'List features', desc: '— show all existing plans', value: 'list' },
|
|
13
14
|
{ key: '4', label: 'Status', desc: '— check tasks in a feature plan', value: 'status' },
|
|
14
15
|
{ key: '5', label: 'Help', desc: '— show usage and documentation', value: 'help' },
|
|
@@ -177,9 +178,8 @@ async function handleInit() {
|
|
|
177
178
|
}
|
|
178
179
|
async function handleStatus() {
|
|
179
180
|
const cwd = process.cwd();
|
|
180
|
-
const claudePath = join(cwd, 'CLAUDE.md');
|
|
181
181
|
const featuresDir = join(cwd, 'docs', 'features');
|
|
182
|
-
if (!(await
|
|
182
|
+
if (!(await isProjectInitialised(cwd))) {
|
|
183
183
|
console.log(chalk.yellow(' ⚠ ctxflow not initialised here. Run `ctxflow init` first.'));
|
|
184
184
|
return 'done';
|
|
185
185
|
}
|
|
@@ -212,7 +212,7 @@ export function showHelp() {
|
|
|
212
212
|
console.log(chalk.cyan(' Usage'));
|
|
213
213
|
console.log('');
|
|
214
214
|
console.log(` ${chalk.magenta('ctxflow')} ${chalk.gray('→ show interactive menu')}`);
|
|
215
|
-
console.log(` ${chalk.magenta('ctxflow init')} ${chalk.gray('→
|
|
215
|
+
console.log(` ${chalk.magenta('ctxflow init')} ${chalk.gray('→ select AI agents and create context file(s)')}`);
|
|
216
216
|
console.log(` ${chalk.magenta('ctxflow new')} ${chalk.cyan('<feature>')} ${chalk.gray('→ scaffold docs/features/<feature>/')}`);
|
|
217
217
|
console.log(` ${chalk.magenta('ctxflow list')} ${chalk.gray('→ list all features')}`);
|
|
218
218
|
console.log(` ${chalk.magenta('ctxflow status')} ${chalk.cyan('<feature>')} ${chalk.gray('→ show task progress for a feature')}`);
|
package/dist/ui/menu.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu.js","sourceRoot":"","sources":["../../src/ui/menu.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAQ,qBAAqB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAS,oBAAoB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAQ,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"menu.js","sourceRoot":"","sources":["../../src/ui/menu.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface AgentConfig {
|
|
2
|
+
id: string;
|
|
3
|
+
label: string;
|
|
4
|
+
file: string;
|
|
5
|
+
agentName: string;
|
|
6
|
+
}
|
|
7
|
+
export declare const AGENTS: AgentConfig[];
|
|
8
|
+
export declare const ALL_CONTEXT_FILES: string[];
|
|
9
|
+
export declare function isProjectInitialised(cwd: string): Promise<boolean>;
|
|
10
|
+
//# sourceMappingURL=agents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/utils/agents.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,MAAM,EAAE,WAAW,EAY/B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,MAAM,EAA0C,CAAC;AAEjF,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAKxE"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { join } from 'path';
|
|
2
|
+
import { pathExists } from './fs.js';
|
|
3
|
+
export const AGENTS = [
|
|
4
|
+
{ id: 'claude', label: 'Claude Code', file: 'CLAUDE.md', agentName: 'CLAUDE.md' },
|
|
5
|
+
{ id: 'codex', label: 'Codex CLI (OpenAI)', file: 'AGENTS.md', agentName: 'AGENTS.md' },
|
|
6
|
+
{ id: 'cursor', label: 'Cursor', file: '.cursor/rules/project.md', agentName: 'Cursor Rules' },
|
|
7
|
+
{ id: 'copilot', label: 'GitHub Copilot', file: '.github/copilot-instructions.md', agentName: 'GitHub Copilot' },
|
|
8
|
+
{ id: 'windsurf', label: 'Windsurf', file: '.windsurfrules', agentName: 'Windsurf' },
|
|
9
|
+
{ id: 'gemini', label: 'Gemini CLI', file: 'GEMINI.md', agentName: 'GEMINI.md' },
|
|
10
|
+
{ id: 'cline', label: 'Cline', file: '.clinerules', agentName: 'Cline' },
|
|
11
|
+
{ id: 'aider', label: 'Aider', file: 'CONVENTIONS.md', agentName: 'CONVENTIONS.md' },
|
|
12
|
+
{ id: 'amazonq', label: 'Amazon Q', file: '.amazonq/rules/context.md', agentName: 'Amazon Q' },
|
|
13
|
+
{ id: 'continue', label: 'Continue', file: '.continuerules', agentName: 'Continue' },
|
|
14
|
+
{ id: 'others', label: 'Devin / Kiro / others', file: 'AGENTS.md', agentName: 'AGENTS.md' },
|
|
15
|
+
];
|
|
16
|
+
export const ALL_CONTEXT_FILES = [...new Set(AGENTS.map(a => a.file))];
|
|
17
|
+
export async function isProjectInitialised(cwd) {
|
|
18
|
+
const checks = await Promise.all(ALL_CONTEXT_FILES.map(f => pathExists(join(cwd, f))));
|
|
19
|
+
return checks.some(Boolean);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/utils/agents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AASrC,MAAM,CAAC,MAAM,MAAM,GAAkB;IACnC,EAAE,EAAE,EAAE,QAAQ,EAAI,KAAK,EAAE,aAAa,EAAY,IAAI,EAAE,WAAW,EAAwB,SAAS,EAAE,WAAW,EAAO;IACxH,EAAE,EAAE,EAAE,OAAO,EAAK,KAAK,EAAE,oBAAoB,EAAM,IAAI,EAAE,WAAW,EAAwB,SAAS,EAAE,WAAW,EAAO;IACzH,EAAE,EAAE,EAAE,QAAQ,EAAI,KAAK,EAAE,QAAQ,EAAkB,IAAI,EAAE,0BAA0B,EAAS,SAAS,EAAE,cAAc,EAAI;IACzH,EAAE,EAAE,EAAE,SAAS,EAAG,KAAK,EAAE,gBAAgB,EAAU,IAAI,EAAE,iCAAiC,EAAE,SAAS,EAAE,gBAAgB,EAAE;IACzH,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAgB,IAAI,EAAE,gBAAgB,EAAmB,SAAS,EAAE,UAAU,EAAQ;IACzH,EAAE,EAAE,EAAE,QAAQ,EAAI,KAAK,EAAE,YAAY,EAAc,IAAI,EAAE,WAAW,EAAwB,SAAS,EAAE,WAAW,EAAO;IACzH,EAAE,EAAE,EAAE,OAAO,EAAK,KAAK,EAAE,OAAO,EAAmB,IAAI,EAAE,aAAa,EAAsB,SAAS,EAAE,OAAO,EAAW;IACzH,EAAE,EAAE,EAAE,OAAO,EAAK,KAAK,EAAE,OAAO,EAAmB,IAAI,EAAE,gBAAgB,EAAmB,SAAS,EAAE,gBAAgB,EAAE;IACzH,EAAE,EAAE,EAAE,SAAS,EAAG,KAAK,EAAE,UAAU,EAAgB,IAAI,EAAE,2BAA2B,EAAQ,SAAS,EAAE,UAAU,EAAQ;IACzH,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAgB,IAAI,EAAE,gBAAgB,EAAmB,SAAS,EAAE,UAAU,EAAQ;IACzH,EAAE,EAAE,EAAE,QAAQ,EAAI,KAAK,EAAE,uBAAuB,EAAE,IAAI,EAAE,WAAW,EAAwB,SAAS,EAAE,WAAW,EAAO;CACzH,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAa,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEjF,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,GAAW;IACpD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAC9B,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CACrD,CAAC;IACF,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC9B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ctxflow",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.7",
|
|
4
4
|
"description": "Context scaffolding for AI agent-driven development",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -24,10 +24,6 @@
|
|
|
24
24
|
"type": "git",
|
|
25
25
|
"url": "https://github.com/powfuu/ctxflow.git"
|
|
26
26
|
},
|
|
27
|
-
"homepage": "https://github.com/powfuu/ctxflow#readme",
|
|
28
|
-
"bugs": {
|
|
29
|
-
"url": "https://github.com/powfuu/ctxflow/issues"
|
|
30
|
-
},
|
|
31
27
|
"files": [
|
|
32
28
|
"bin",
|
|
33
29
|
"dist"
|