rbin-task-flow 1.30.1 → 1.30.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.task-flow/guides/AI-PLATFORMS.md +1 -1
- package/.task-flow/guides/CURSOR.md +1 -1
- package/.task-flow/guides/platforms/cursor.md +2 -13
- package/README.md +14 -36
- package/bin/cli.js +1 -1
- package/lib/gitignore.js +40 -71
- package/lib/install.js +4 -6
- package/package.json +1 -1
|
@@ -59,7 +59,7 @@ Detalhes dos comandos: [README.md](../README.md).
|
|
|
59
59
|
| `.claude/skills/` | ✅ (11 skills) | — | — |
|
|
60
60
|
| `.cursor/skills/` | — | ✅ (espelho) | — |
|
|
61
61
|
|
|
62
|
-
Por padrão,
|
|
62
|
+
Por padrão, **`.task-flow`** é acrescentado ao final do **`.gitignore`** do projeto cliente.
|
|
63
63
|
|
|
64
64
|
---
|
|
65
65
|
|
|
@@ -13,7 +13,7 @@ Verify: `rg 'alwaysApply: true' .cursor/rules` → only the two files above.
|
|
|
13
13
|
|
|
14
14
|
**Install profiles:** `rbin-task-flow init --profile minimal` → 2 always-on rules + skills only; `standard` (default) → all `.mdc` rules. Saved in `.task-flow/install-meta.json`.
|
|
15
15
|
|
|
16
|
-
**Team git:**
|
|
16
|
+
**Team git:** `.task-flow` appended to `.gitignore`; other AI config files can be committed.
|
|
17
17
|
|
|
18
18
|
---
|
|
19
19
|
|
|
@@ -248,20 +248,9 @@ O Agent executa o workflow (`task-flow: audit`, `task-flow: run`, etc.); o CLI p
|
|
|
248
248
|
|
|
249
249
|
---
|
|
250
250
|
|
|
251
|
-
## 11. `.gitignore`
|
|
251
|
+
## 11. `.gitignore` no projeto
|
|
252
252
|
|
|
253
|
-
**Padrão:** `
|
|
254
|
-
|
|
255
|
-
**Time:** `rbin-task-flow init --share-ai-config` — **não** ignora `.cursor/skills/` nem `.cursor/rules/`; ignora só `.cursor/settings.json` e `*.local.mdc`. O bloco no `.gitignore` explica o trade-off **tokens vs consistência do time**.
|
|
256
|
-
|
|
257
|
-
| Estratégia | Comando | Prós | Contras |
|
|
258
|
-
|------------|---------|------|---------|
|
|
259
|
-
| Local (padrão) | `init` | Repo limpo; cada dev com setup próprio | Sem sync de rules/skills |
|
|
260
|
-
| Time | `init --share-ai-config` | Mesmo Task Flow para todos | Mais arquivos de IA no git; tokens por dev ao usar rules |
|
|
261
|
-
|
|
262
|
-
`reset` sem flag reaplica a opção salva em `.task-flow/install-meta.json` (`shareAiConfig`).
|
|
263
|
-
|
|
264
|
-
Para open source: documente no README — contribuidores podem usar `--share-ai-config` ou `init` local.
|
|
253
|
+
**Padrão:** `init` / `reset` acrescentam `.task-flow` ao final do `.gitignore`.
|
|
265
254
|
|
|
266
255
|
---
|
|
267
256
|
|
package/README.md
CHANGED
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
<a id="português"></a>
|
|
34
34
|
# 🇧🇷 Português
|
|
35
35
|
|
|
36
|
-
> **v1.30.
|
|
36
|
+
> **v1.30.3** — `.gitignore`: só `.task-flow` no final, sem comentários. `npm install -g rbin-task-flow@1.30.3` e `rbin-task-flow reset --keep-tasks`. [CHANGELOG](CHANGELOG.md) · [Publicação](RELEASE-1.30.3.md).
|
|
37
37
|
|
|
38
38
|
## O Que É Este Projeto?
|
|
39
39
|
|
|
@@ -102,7 +102,7 @@ Após inicializar, use estes comandos na IA (Cursor/Claude/Codex) para gerenciar
|
|
|
102
102
|
|
|
103
103
|
**Perfil minimal:** `init --profile minimal` instala só as 2 regras always-on e as 11 skills; workflows via `@task-flow-*` (sem `task_work`, `coding_standards` glob, etc.). `standard` (padrão) copia todas as regras `.cursor/rules/`.
|
|
104
104
|
|
|
105
|
-
**Compartilhar com o time:**
|
|
105
|
+
**Compartilhar com o time:** `.cursor/`, `CLAUDE.md` e `AGENTS.md` já podem ir no git; só `.task-flow/` fica ignorado (tasks e progresso locais). Flag `--share-ai-config` grava preferência em `install-meta.json`.
|
|
106
106
|
|
|
107
107
|
| Comando | Por Que Usar | Feature Principal |
|
|
108
108
|
|---------|--------------|-------------------|
|
|
@@ -146,7 +146,7 @@ Repositório centralizado de configurações e regras de desenvolvimento que pod
|
|
|
146
146
|
- **Instalação Global NPM** - Instale uma vez, use em qualquer lugar com `npm install -g rbin-task-flow`
|
|
147
147
|
- **Gerenciamento Simples de Tarefas** - Defina tarefas em texto simples, a IA gera subtarefas detalhadas
|
|
148
148
|
- **Múltiplos Modelos de IA** - Claude Code Sonnet configurado e pronto para uso
|
|
149
|
-
- **.gitignore
|
|
149
|
+
- **.gitignore mínimo** - Só `.task-flow/` ignorado; `.cursor/` e instruções versionáveis no git
|
|
150
150
|
- **Zero Configuração** - Pronto para usar imediatamente
|
|
151
151
|
- **RBIN Task Flow** - Gerenciamento de tarefas alimentado por IA com interface de texto simples
|
|
152
152
|
|
|
@@ -248,23 +248,14 @@ Gerenciamento de tarefas simples e poderoso:
|
|
|
248
248
|
- **Rastreamento Simples**: Gerenciamento de status baseado em JSON com comandos CLI fáceis
|
|
249
249
|
- **Monitoramento de Progresso**: Feedback visual claro sobre a conclusão das tarefas
|
|
250
250
|
|
|
251
|
-
## .gitignore
|
|
251
|
+
## .gitignore
|
|
252
252
|
|
|
253
|
-
O instalador adiciona
|
|
253
|
+
O instalador adiciona `.task-flow` ao final do `.gitignore`:
|
|
254
254
|
|
|
255
255
|
```gitignore
|
|
256
|
-
.
|
|
257
|
-
.cursor/
|
|
258
|
-
.task-flow/
|
|
259
|
-
CLAUDE.md
|
|
256
|
+
.task-flow
|
|
260
257
|
```
|
|
261
258
|
|
|
262
|
-
**Por que discreto?**
|
|
263
|
-
- Sem comentários explicando o que são
|
|
264
|
-
- Sem menção a "IA", "Claude" ou "Anthropic"
|
|
265
|
-
- Tudo relacionado ao RBIN Task Flow permanece local
|
|
266
|
-
- Histórico git limpo sem arquivos de ferramentas de IA
|
|
267
|
-
|
|
268
259
|
## Atualizando Projetos
|
|
269
260
|
|
|
270
261
|
Para atualizar configurações em um projeto existente:
|
|
@@ -343,9 +334,7 @@ Lista cada `.cursor/rules/*.mdc` (bytes, linhas, `alwaysApply`), soma always-on
|
|
|
343
334
|
- ⚠️ Este é um **repositório template** - não use RBIN Task Flow aqui
|
|
344
335
|
- ✅ Use RBIN Task Flow em **projetos que recebem** as configurações via instalação
|
|
345
336
|
- 🔄 O instalador **sempre sobrescreve** configurações existentes
|
|
346
|
-
-
|
|
347
|
-
- 🎯 Funciona com **Claude Code CLI** ou **Cursor Pro**
|
|
348
|
-
- 📦 O diretório Task Flow (`.task-flow/`) é **automaticamente gitignored**
|
|
337
|
+
- 📦 Apenas `.task-flow/` é **gitignored** (tasks e progresso locais)
|
|
349
338
|
- 📝 Defina tarefas em `.task-flow/tasks.input.txt` usando formato simples: `- Descrição da tarefa`
|
|
350
339
|
- 🚀 **Instalação Global NPM**: `npm install -g rbin-task-flow`, depois use `rbin-task-flow init` em qualquer projeto
|
|
351
340
|
- 🔒 **Chaves de API podem ser necessárias** - depende do seu provedor de IA (Claude Code ou Cursor Pro)
|
|
@@ -423,7 +412,7 @@ Para problemas ou perguntas:
|
|
|
423
412
|
<a id="english"></a>
|
|
424
413
|
# 🇬🇧 English
|
|
425
414
|
|
|
426
|
-
> **v1.30.
|
|
415
|
+
> **v1.30.3** — `.gitignore`: append `.task-flow` only, no comments. `npm install -g rbin-task-flow@1.30.3` then `rbin-task-flow reset --keep-tasks`. [CHANGELOG](CHANGELOG.md) · [Release guide](RELEASE-1.30.3.md).
|
|
427
416
|
|
|
428
417
|
## What Is This Project?
|
|
429
418
|
|
|
@@ -492,7 +481,7 @@ After initializing, use these commands in your AI (Cursor/Claude/Codex) to autom
|
|
|
492
481
|
|
|
493
482
|
**Minimal profile:** `init --profile minimal` copies only `task-flow-cursor.mdc` and `rbin-git-policy.mdc` plus skills; use `@task-flow-*` for workflows. `standard` (default) copies all rules under `.cursor/rules/`.
|
|
494
483
|
|
|
495
|
-
**Share with team:** `
|
|
484
|
+
**Share with team:** `.cursor/`, `CLAUDE.md`, and `AGENTS.md` can be committed; only `.task-flow/` is gitignored (local tasks and progress). `--share-ai-config` saves preference in `install-meta.json`.
|
|
496
485
|
|
|
497
486
|
| Command | Why Use It | Key Feature |
|
|
498
487
|
|---------|------------|-------------|
|
|
@@ -536,7 +525,7 @@ A centralized repository of development configurations and rules that can be ins
|
|
|
536
525
|
- **NPM Global Installation** - Install once, use everywhere with `npm install -g rbin-task-flow`
|
|
537
526
|
- **Simple Task Management** - Define tasks in plain text, AI generates detailed subtasks
|
|
538
527
|
- **Multiple AI Models** - Claude Code Sonnet configured and ready to use
|
|
539
|
-
- **
|
|
528
|
+
- **Minimal .gitignore** - Only `.task-flow/` ignored; `.cursor/` and instruction files committable
|
|
540
529
|
- **Zero Configuration** - Ready to use immediately
|
|
541
530
|
- **RBIN Task Flow** - AI-powered task management with simple text interface
|
|
542
531
|
|
|
@@ -638,23 +627,14 @@ Simple yet powerful task management:
|
|
|
638
627
|
- **Simple Tracking**: JSON-based status management with easy CLI commands
|
|
639
628
|
- **Progress Monitoring**: Clear visual feedback on task completion
|
|
640
629
|
|
|
641
|
-
##
|
|
630
|
+
## .gitignore
|
|
642
631
|
|
|
643
|
-
The installer
|
|
632
|
+
The installer appends `.task-flow` at the end of `.gitignore`:
|
|
644
633
|
|
|
645
634
|
```gitignore
|
|
646
|
-
.
|
|
647
|
-
.cursor/
|
|
648
|
-
.task-flow/
|
|
649
|
-
CLAUDE.md
|
|
635
|
+
.task-flow
|
|
650
636
|
```
|
|
651
637
|
|
|
652
|
-
**Why discrete?**
|
|
653
|
-
- No comments explaining what they are
|
|
654
|
-
- No mention of "AI", "Claude", or "Anthropic"
|
|
655
|
-
- Everything related to RBIN Task Flow stays local
|
|
656
|
-
- Clean git history without AI tooling files
|
|
657
|
-
|
|
658
638
|
## Updating Projects
|
|
659
639
|
|
|
660
640
|
To update configs in an existing project:
|
|
@@ -733,9 +713,7 @@ Prints each `.cursor/rules/*.mdc` (bytes, lines, `alwaysApply`), totals always-o
|
|
|
733
713
|
- ⚠️ This is a **template repository** - don't use RBIN Task Flow here
|
|
734
714
|
- ✅ Use RBIN Task Flow in **projects that receive** the configs via installation
|
|
735
715
|
- 🔄 Installer **always overwrites** existing configs
|
|
736
|
-
-
|
|
737
|
-
- 🎯 Works with **Claude Code CLI** or **Cursor Pro**
|
|
738
|
-
- 📦 Task Flow directory (`.task-flow/`) is **automatically gitignored**
|
|
716
|
+
- 📦 Only `.task-flow/` is **gitignored** (local tasks and progress)
|
|
739
717
|
- 📝 Define tasks in `.task-flow/tasks.input.txt` using simple format: `- Task description`
|
|
740
718
|
- 🚀 **NPM Global Install**: `npm install -g rbin-task-flow`, then use `rbin-task-flow init` in any project
|
|
741
719
|
- 🔒 **API keys may be required** - depends on your AI provider (Claude Code or Cursor Pro)
|
package/bin/cli.js
CHANGED
|
@@ -26,7 +26,7 @@ function addInstallCommand(name, description, extra = {}) {
|
|
|
26
26
|
)
|
|
27
27
|
.option(
|
|
28
28
|
'--share-ai-config',
|
|
29
|
-
'
|
|
29
|
+
'Save team AI config preference in install-meta.json (appends .task-flow to .gitignore)'
|
|
30
30
|
)
|
|
31
31
|
.option(
|
|
32
32
|
'--keep-tasks',
|
package/lib/gitignore.js
CHANGED
|
@@ -1,99 +1,68 @@
|
|
|
1
1
|
const fs = require('fs-extra');
|
|
2
2
|
const path = require('path');
|
|
3
3
|
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
4
|
+
const GITIGNORE_ENTRY = '.task-flow';
|
|
5
|
+
|
|
6
|
+
const LEGACY_MARKER_START = '# RBIN Task Flow (rbin-task-flow)';
|
|
7
|
+
const LEGACY_MARKER_END = '# END RBIN Task Flow (rbin-task-flow)';
|
|
8
|
+
|
|
9
|
+
const STRIP_LINE_PATTERNS = [
|
|
10
|
+
/^\.task-flow\/?\s*$/m,
|
|
11
|
+
/^\.claude\/\s*$/m,
|
|
12
|
+
/^\.cursor\/\s*$/m,
|
|
13
|
+
/^CLAUDE\.md\s*$/m,
|
|
14
|
+
/^AGENTS\.md\s*$/m,
|
|
15
|
+
/^\.cursor\/settings\.json\s*$/m,
|
|
16
|
+
/^\.cursor\/rules\/\*\.local\.mdc\s*$/m,
|
|
17
|
+
/^graphify-out\/\s*$/m,
|
|
18
|
+
/^\.task-flow\/scripts\/tasks\.json\s*$/m,
|
|
19
|
+
/^\.task-flow\/scripts\/status\.json\s*$/m,
|
|
20
|
+
/^# RBIN Task Flow.*$/m,
|
|
21
|
+
/^# END RBIN Task Flow.*$/m,
|
|
22
|
+
/^# share-ai-config:.*$/m,
|
|
23
|
+
/^# Trade-off:.*$/m,
|
|
24
|
+
/^# Default \(no flag\):.*$/m,
|
|
25
|
+
/^# Only \.task-flow\/.*$/m,
|
|
26
|
+
/^# \.cursor\/.*$/m,
|
|
22
27
|
];
|
|
23
28
|
|
|
24
|
-
|
|
25
|
-
...ENTRIES_DEFAULT,
|
|
26
|
-
...ENTRIES_SHARE_AI_CONFIG,
|
|
27
|
-
MARKER_START,
|
|
28
|
-
MARKER_END,
|
|
29
|
-
'# share-ai-config:',
|
|
30
|
-
'# Trade-off:',
|
|
31
|
-
'# Default (no flag):',
|
|
32
|
-
];
|
|
33
|
-
|
|
34
|
-
function escapeRegExp(value) {
|
|
35
|
-
return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
function stripRbinGitignoreBlock(content) {
|
|
29
|
+
function stripTaskFlowGitignoreLines(content) {
|
|
39
30
|
let next = content;
|
|
40
31
|
|
|
41
32
|
const blockRegex = new RegExp(
|
|
42
|
-
`\\n?${
|
|
33
|
+
`\\n?${LEGACY_MARKER_START.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}[\\s\\S]*?${LEGACY_MARKER_END.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\\n?`,
|
|
43
34
|
'g'
|
|
44
35
|
);
|
|
45
36
|
next = next.replace(blockRegex, '\n');
|
|
46
37
|
|
|
47
|
-
for (const
|
|
48
|
-
|
|
49
|
-
next = next.replace(lineRegex, '');
|
|
38
|
+
for (const pattern of STRIP_LINE_PATTERNS) {
|
|
39
|
+
next = next.replace(pattern, '');
|
|
50
40
|
}
|
|
51
41
|
|
|
52
|
-
return next.replace(/\n{3,}/g, '\n\n');
|
|
42
|
+
return next.replace(/\n{3,}/g, '\n\n').replace(/\s+$/, '');
|
|
53
43
|
}
|
|
54
44
|
|
|
55
|
-
function
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
lines.push(
|
|
60
|
-
'# share-ai-config: .cursor/skills/ and .cursor/rules/ are NOT ignored — commit them for team consistency.',
|
|
61
|
-
'# Trade-off: shared AI config improves workflow parity; each developer still pays token cost when the Agent loads rules/skills.',
|
|
62
|
-
'# Default (no flag): entire .cursor/ stays local and gitignored — lower repo noise, no team sync of rules.',
|
|
63
|
-
''
|
|
64
|
-
);
|
|
65
|
-
lines.push(...ENTRIES_SHARE_AI_CONFIG);
|
|
66
|
-
} else {
|
|
67
|
-
lines.push(...ENTRIES_DEFAULT);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
lines.push(MARKER_END, '');
|
|
71
|
-
return lines.join('\n');
|
|
45
|
+
function appendTaskFlowEntry(content) {
|
|
46
|
+
const normalized = stripTaskFlowGitignoreLines(content);
|
|
47
|
+
const suffix = normalized.length > 0 ? '\n' : '';
|
|
48
|
+
return `${normalized}${suffix}${GITIGNORE_ENTRY}\n`;
|
|
72
49
|
}
|
|
73
50
|
|
|
74
|
-
async function updateGitignore(targetPath
|
|
51
|
+
async function updateGitignore(targetPath) {
|
|
75
52
|
const gitignorePath = path.join(targetPath, '.gitignore');
|
|
76
53
|
|
|
77
54
|
if (!fs.existsSync(gitignorePath)) {
|
|
78
|
-
await fs.writeFile(gitignorePath,
|
|
55
|
+
await fs.writeFile(gitignorePath, `${GITIGNORE_ENTRY}\n`);
|
|
56
|
+
return;
|
|
79
57
|
}
|
|
80
58
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
if (!content.endsWith('\n')) {
|
|
85
|
-
content += '\n';
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
content += buildRbinGitignoreBlock(shareAiConfig);
|
|
89
|
-
await fs.writeFile(gitignorePath, content);
|
|
90
|
-
|
|
91
|
-
return { shareAiConfig };
|
|
59
|
+
const content = await fs.readFile(gitignorePath, 'utf8');
|
|
60
|
+
await fs.writeFile(gitignorePath, appendTaskFlowEntry(content));
|
|
92
61
|
}
|
|
93
62
|
|
|
94
63
|
module.exports = {
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
64
|
+
GITIGNORE_ENTRY,
|
|
65
|
+
stripTaskFlowGitignoreLines,
|
|
66
|
+
appendTaskFlowEntry,
|
|
98
67
|
updateGitignore,
|
|
99
68
|
};
|
package/lib/install.js
CHANGED
|
@@ -57,8 +57,8 @@ async function installInProject(targetPath, options = {}) {
|
|
|
57
57
|
console.log(
|
|
58
58
|
chalk.blue('🔗 Git:'),
|
|
59
59
|
shareAiConfig
|
|
60
|
-
? chalk.yellow('share-ai-config') + chalk.gray(' (
|
|
61
|
-
: chalk.gray('
|
|
60
|
+
? chalk.yellow('share-ai-config') + chalk.gray(' (flag saved in install-meta.json)')
|
|
61
|
+
: chalk.gray('appends .task-flow to .gitignore')
|
|
62
62
|
);
|
|
63
63
|
if (options.keepTasks) {
|
|
64
64
|
console.log(
|
|
@@ -119,11 +119,9 @@ async function installInProject(targetPath, options = {}) {
|
|
|
119
119
|
|
|
120
120
|
spinner.text = 'Updating .gitignore...';
|
|
121
121
|
|
|
122
|
-
await updateGitignore(targetPath
|
|
122
|
+
await updateGitignore(targetPath);
|
|
123
123
|
showSuccess('.gitignore updated');
|
|
124
|
-
|
|
125
|
-
showInfo('Git: .cursor/skills/ and .cursor/rules/ can be committed (see .gitignore comment)');
|
|
126
|
-
}
|
|
124
|
+
showInfo('Git: appended .task-flow to .gitignore');
|
|
127
125
|
|
|
128
126
|
spinner.text = 'Installing agent skills...';
|
|
129
127
|
await copySkillsToProject(targetPath);
|