planflow-ai 1.0.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.
Files changed (127) hide show
  1. package/.claude/commands/create-contract.md +468 -0
  2. package/.claude/commands/create-plan.md +512 -0
  3. package/.claude/commands/discovery-plan.md +561 -0
  4. package/.claude/commands/execute-plan.md +682 -0
  5. package/.claude/commands/review-code.md +459 -0
  6. package/.claude/commands/review-pr.md +651 -0
  7. package/.claude/commands/setup.md +1609 -0
  8. package/.claude/commands/write-tests.md +543 -0
  9. package/.claude/rules/core/allowed-patterns.md +175 -0
  10. package/.claude/rules/core/complexity-scoring.md +225 -0
  11. package/.claude/rules/core/forbidden-patterns.md +253 -0
  12. package/.claude/rules/core/project-ledger.md +150 -0
  13. package/.claude/rules/languages/python-patterns.md +6 -0
  14. package/.claude/rules/languages/typescript-patterns.md +7 -0
  15. package/.claude/rules/patterns/contract-patterns.md +332 -0
  16. package/.claude/rules/patterns/discovery-patterns.md +342 -0
  17. package/.claude/rules/patterns/discovery-templates.md +319 -0
  18. package/.claude/rules/patterns/jest-patterns.md +482 -0
  19. package/.claude/rules/patterns/plans-patterns.md +225 -0
  20. package/.claude/rules/patterns/plans-templates.md +227 -0
  21. package/.claude/rules/patterns/pytest-patterns.md +457 -0
  22. package/.claude/rules/patterns/review-code-templates.md +305 -0
  23. package/.claude/rules/patterns/review-pr-patterns.md +360 -0
  24. package/.claude/rules/tools/auth-pr-tool.md +30 -0
  25. package/.claude/rules/tools/interactive-questions-tool.md +235 -0
  26. package/.claude/rules/tools/jest-testing-tool.md +73 -0
  27. package/.claude/rules/tools/plan-mode-tool.md +164 -0
  28. package/.claude/rules/tools/pytest-testing-tool.md +121 -0
  29. package/.claude/rules/tools/reference-expansion-tool.md +326 -0
  30. package/LICENSE +21 -0
  31. package/README.md +167 -0
  32. package/dist/cli/commands/init.d.ts +6 -0
  33. package/dist/cli/commands/init.d.ts.map +1 -0
  34. package/dist/cli/commands/init.js +141 -0
  35. package/dist/cli/commands/init.js.map +1 -0
  36. package/dist/cli/handlers/claude.d.ts +9 -0
  37. package/dist/cli/handlers/claude.d.ts.map +1 -0
  38. package/dist/cli/handlers/claude.js +119 -0
  39. package/dist/cli/handlers/claude.js.map +1 -0
  40. package/dist/cli/handlers/codex.d.ts +9 -0
  41. package/dist/cli/handlers/codex.d.ts.map +1 -0
  42. package/dist/cli/handlers/codex.js +100 -0
  43. package/dist/cli/handlers/codex.js.map +1 -0
  44. package/dist/cli/handlers/cursor.d.ts +9 -0
  45. package/dist/cli/handlers/cursor.d.ts.map +1 -0
  46. package/dist/cli/handlers/cursor.js +60 -0
  47. package/dist/cli/handlers/cursor.js.map +1 -0
  48. package/dist/cli/handlers/openclaw.d.ts +8 -0
  49. package/dist/cli/handlers/openclaw.d.ts.map +1 -0
  50. package/dist/cli/handlers/openclaw.js +34 -0
  51. package/dist/cli/handlers/openclaw.js.map +1 -0
  52. package/dist/cli/handlers/shared.d.ts +9 -0
  53. package/dist/cli/handlers/shared.d.ts.map +1 -0
  54. package/dist/cli/handlers/shared.js +126 -0
  55. package/dist/cli/handlers/shared.js.map +1 -0
  56. package/dist/cli/index.d.ts +8 -0
  57. package/dist/cli/index.d.ts.map +1 -0
  58. package/dist/cli/index.js +43 -0
  59. package/dist/cli/index.js.map +1 -0
  60. package/dist/cli/types.d.ts +26 -0
  61. package/dist/cli/types.d.ts.map +1 -0
  62. package/dist/cli/types.js +5 -0
  63. package/dist/cli/types.js.map +1 -0
  64. package/dist/cli/utils/files.d.ts +37 -0
  65. package/dist/cli/utils/files.d.ts.map +1 -0
  66. package/dist/cli/utils/files.js +115 -0
  67. package/dist/cli/utils/files.js.map +1 -0
  68. package/dist/cli/utils/logger.d.ts +11 -0
  69. package/dist/cli/utils/logger.d.ts.map +1 -0
  70. package/dist/cli/utils/logger.js +34 -0
  71. package/dist/cli/utils/logger.js.map +1 -0
  72. package/dist/cli/utils/prompts.d.ts +10 -0
  73. package/dist/cli/utils/prompts.d.ts.map +1 -0
  74. package/dist/cli/utils/prompts.js +65 -0
  75. package/dist/cli/utils/prompts.js.map +1 -0
  76. package/dist/test/setup.d.ts +5 -0
  77. package/dist/test/setup.d.ts.map +1 -0
  78. package/dist/test/setup.js +7 -0
  79. package/dist/test/setup.js.map +1 -0
  80. package/package.json +63 -0
  81. package/rules/core/_index.mdc +99 -0
  82. package/rules/core/allowed-patterns.mdc +185 -0
  83. package/rules/core/complexity-scoring.mdc +235 -0
  84. package/rules/core/forbidden-patterns.mdc +263 -0
  85. package/rules/core/project-ledger.mdc +155 -0
  86. package/rules/languages/_index.mdc +80 -0
  87. package/rules/languages/python-patterns.mdc +188 -0
  88. package/rules/languages/typescript-patterns.mdc +128 -0
  89. package/rules/patterns/_index.mdc +185 -0
  90. package/rules/patterns/contract-patterns.mdc +344 -0
  91. package/rules/patterns/discovery-patterns.mdc +354 -0
  92. package/rules/patterns/discovery-templates.mdc +329 -0
  93. package/rules/patterns/jest-patterns.mdc +492 -0
  94. package/rules/patterns/plans-patterns.mdc +237 -0
  95. package/rules/patterns/plans-templates.mdc +237 -0
  96. package/rules/patterns/pytest-patterns.mdc +467 -0
  97. package/rules/patterns/review-code-templates.mdc +315 -0
  98. package/rules/patterns/review-pr-patterns.mdc +370 -0
  99. package/rules/skills/_index.mdc +174 -0
  100. package/rules/skills/create-contract-skill.mdc +239 -0
  101. package/rules/skills/create-plan-skill.mdc +271 -0
  102. package/rules/skills/discovery-skill.mdc +295 -0
  103. package/rules/skills/execute-plan-skill.mdc +388 -0
  104. package/rules/skills/review-code-skill.mdc +308 -0
  105. package/rules/skills/review-pr-skill.mdc +496 -0
  106. package/rules/skills/setup-skill.mdc +923 -0
  107. package/rules/skills/write-tests-skill.mdc +294 -0
  108. package/rules/templates/index-template.mdc +126 -0
  109. package/rules/tools/_index.mdc +114 -0
  110. package/rules/tools/auth-pr-tool.mdc +362 -0
  111. package/rules/tools/interactive-questions-tool.mdc +337 -0
  112. package/rules/tools/jest-testing-tool.mdc +96 -0
  113. package/rules/tools/plan-mode-tool.mdc +229 -0
  114. package/rules/tools/pytest-testing-tool.mdc +144 -0
  115. package/rules/tools/reference-expansion-tool.mdc +338 -0
  116. package/skills/plan-flow/SKILL.md +116 -0
  117. package/skills/plan-flow/create-contract/SKILL.md +139 -0
  118. package/skills/plan-flow/create-plan/SKILL.md +93 -0
  119. package/skills/plan-flow/discovery/SKILL.md +85 -0
  120. package/skills/plan-flow/execute-plan/SKILL.md +89 -0
  121. package/skills/plan-flow/ledger/SKILL.md +70 -0
  122. package/skills/plan-flow/review-code/SKILL.md +100 -0
  123. package/skills/plan-flow/review-pr/SKILL.md +122 -0
  124. package/skills/plan-flow/setup/SKILL.md +73 -0
  125. package/skills/plan-flow/write-tests/SKILL.md +115 -0
  126. package/templates/shared/AGENTS.md.template +65 -0
  127. package/templates/shared/CLAUDE.md.template +67 -0
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Claude Code handler
3
+ *
4
+ * Copies .claude/commands/ and .claude/rules/ to the user's project,
5
+ * and creates/updates CLAUDE.md with plan-flow instructions.
6
+ */
7
+ import { join } from 'node:path';
8
+ import { existsSync, readFileSync, writeFileSync } from 'node:fs';
9
+ import { copyDir, getPackageRoot, ensureDir } from '../utils/files.js';
10
+ import * as log from '../utils/logger.js';
11
+ const MARKER_START = '<!-- plan-flow-start -->';
12
+ const MARKER_END = '<!-- plan-flow-end -->';
13
+ function getPlanFlowSection(packageRoot) {
14
+ const templatePath = join(packageRoot, 'templates', 'shared', 'CLAUDE.md.template');
15
+ if (existsSync(templatePath)) {
16
+ return [
17
+ MARKER_START,
18
+ readFileSync(templatePath, 'utf-8').trim(),
19
+ MARKER_END,
20
+ ].join('\n');
21
+ }
22
+ // Fallback minimal section if template is missing
23
+ return [
24
+ MARKER_START,
25
+ '',
26
+ '# Plan-Flow',
27
+ '',
28
+ 'Use `/setup` to get started. See plan-flow documentation for available commands.',
29
+ '',
30
+ MARKER_END,
31
+ ].join('\n');
32
+ }
33
+ function handleClaudeMd(target, packageRoot, options) {
34
+ const result = { created: [], skipped: [], updated: [] };
35
+ const claudeMdPath = join(target, 'CLAUDE.md');
36
+ const section = getPlanFlowSection(packageRoot);
37
+ if (!existsSync(claudeMdPath)) {
38
+ // No CLAUDE.md exists - create it with the plan-flow section
39
+ writeFileSync(claudeMdPath, section + '\n', 'utf-8');
40
+ result.created.push(claudeMdPath);
41
+ log.success('Created CLAUDE.md');
42
+ }
43
+ else {
44
+ const existing = readFileSync(claudeMdPath, 'utf-8');
45
+ if (existing.includes(MARKER_START)) {
46
+ if (options.force) {
47
+ // Replace existing plan-flow section
48
+ const updated = existing.replace(new RegExp(`${escapeRegExp(MARKER_START)}[\\s\\S]*?${escapeRegExp(MARKER_END)}`), section);
49
+ writeFileSync(claudeMdPath, updated, 'utf-8');
50
+ result.updated.push(claudeMdPath);
51
+ log.warn('Updated plan-flow section in CLAUDE.md');
52
+ }
53
+ else {
54
+ result.skipped.push(claudeMdPath);
55
+ log.skip('CLAUDE.md already has plan-flow section');
56
+ }
57
+ }
58
+ else {
59
+ // Append plan-flow section to existing CLAUDE.md
60
+ const appended = existing.trimEnd() + '\n\n' + section + '\n';
61
+ writeFileSync(claudeMdPath, appended, 'utf-8');
62
+ result.updated.push(claudeMdPath);
63
+ log.success('Appended plan-flow section to CLAUDE.md');
64
+ }
65
+ }
66
+ return result;
67
+ }
68
+ function escapeRegExp(str) {
69
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
70
+ }
71
+ export async function initClaude(target, options) {
72
+ const result = { created: [], skipped: [], updated: [] };
73
+ const packageRoot = getPackageRoot();
74
+ // 1. Copy .claude/commands/
75
+ const commandsSrc = join(packageRoot, '.claude', 'commands');
76
+ const commandsDest = join(target, '.claude', 'commands');
77
+ if (existsSync(commandsSrc)) {
78
+ ensureDir(commandsDest);
79
+ const cmdResult = copyDir(commandsSrc, commandsDest, options);
80
+ result.created.push(...cmdResult.created);
81
+ result.skipped.push(...cmdResult.skipped);
82
+ result.updated.push(...cmdResult.updated);
83
+ for (const f of cmdResult.created) {
84
+ log.success(`Created ${f.replace(target + '/', '')}`);
85
+ }
86
+ for (const f of cmdResult.skipped) {
87
+ log.skip(`Skipped ${f.replace(target + '/', '')}`);
88
+ }
89
+ for (const f of cmdResult.updated) {
90
+ log.warn(`Updated ${f.replace(target + '/', '')}`);
91
+ }
92
+ }
93
+ // 2. Copy .claude/rules/ (preserving subdirectory structure)
94
+ const rulesSrc = join(packageRoot, '.claude', 'rules');
95
+ const rulesDest = join(target, '.claude', 'rules');
96
+ if (existsSync(rulesSrc)) {
97
+ ensureDir(rulesDest);
98
+ const rulesResult = copyDir(rulesSrc, rulesDest, options);
99
+ result.created.push(...rulesResult.created);
100
+ result.skipped.push(...rulesResult.skipped);
101
+ result.updated.push(...rulesResult.updated);
102
+ for (const f of rulesResult.created) {
103
+ log.success(`Created ${f.replace(target + '/', '')}`);
104
+ }
105
+ for (const f of rulesResult.skipped) {
106
+ log.skip(`Skipped ${f.replace(target + '/', '')}`);
107
+ }
108
+ for (const f of rulesResult.updated) {
109
+ log.warn(`Updated ${f.replace(target + '/', '')}`);
110
+ }
111
+ }
112
+ // 3. Handle CLAUDE.md
113
+ const mdResult = handleClaudeMd(target, packageRoot, options);
114
+ result.created.push(...mdResult.created);
115
+ result.skipped.push(...mdResult.skipped);
116
+ result.updated.push(...mdResult.updated);
117
+ return result;
118
+ }
119
+ //# sourceMappingURL=claude.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../../src/cli/handlers/claude.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Codex CLI handler
3
+ *
4
+ * Copies skills/plan-flow/ to .agents/skills/plan-flow/ in the user's project,
5
+ * and creates/updates AGENTS.md with plan-flow instructions.
6
+ */
7
+ import type { CopyOptions, CopyResult } from '../types.js';
8
+ export declare function initCodex(target: string, options: CopyOptions): Promise<CopyResult>;
9
+ //# sourceMappingURL=codex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/codex.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAoF3D,wBAAsB,SAAS,CAC7B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAiCrB"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Codex CLI handler
3
+ *
4
+ * Copies skills/plan-flow/ to .agents/skills/plan-flow/ in the user's project,
5
+ * and creates/updates AGENTS.md with plan-flow instructions.
6
+ */
7
+ import { join } from 'node:path';
8
+ import { existsSync, readFileSync, writeFileSync } from 'node:fs';
9
+ import { copyDir, getPackageRoot, ensureDir } from '../utils/files.js';
10
+ import * as log from '../utils/logger.js';
11
+ const MARKER_START = '<!-- plan-flow-start -->';
12
+ const MARKER_END = '<!-- plan-flow-end -->';
13
+ function getPlanFlowSection(packageRoot) {
14
+ const templatePath = join(packageRoot, 'templates', 'shared', 'AGENTS.md.template');
15
+ if (existsSync(templatePath)) {
16
+ return [
17
+ MARKER_START,
18
+ readFileSync(templatePath, 'utf-8').trim(),
19
+ MARKER_END,
20
+ ].join('\n');
21
+ }
22
+ // Fallback minimal section if template is missing
23
+ return [
24
+ MARKER_START,
25
+ '',
26
+ '# Plan-Flow',
27
+ '',
28
+ 'Use `/setup` to get started. See plan-flow documentation for available commands.',
29
+ '',
30
+ MARKER_END,
31
+ ].join('\n');
32
+ }
33
+ function handleAgentsMd(target, packageRoot, options) {
34
+ const result = { created: [], skipped: [], updated: [] };
35
+ const agentsMdPath = join(target, 'AGENTS.md');
36
+ const section = getPlanFlowSection(packageRoot);
37
+ if (!existsSync(agentsMdPath)) {
38
+ // No AGENTS.md exists - create it with the plan-flow section
39
+ writeFileSync(agentsMdPath, section + '\n', 'utf-8');
40
+ result.created.push(agentsMdPath);
41
+ log.success('Created AGENTS.md');
42
+ }
43
+ else {
44
+ const existing = readFileSync(agentsMdPath, 'utf-8');
45
+ if (existing.includes(MARKER_START)) {
46
+ if (options.force) {
47
+ // Replace existing plan-flow section
48
+ const updated = existing.replace(new RegExp(`${escapeRegExp(MARKER_START)}[\\s\\S]*?${escapeRegExp(MARKER_END)}`), section);
49
+ writeFileSync(agentsMdPath, updated, 'utf-8');
50
+ result.updated.push(agentsMdPath);
51
+ log.warn('Updated plan-flow section in AGENTS.md');
52
+ }
53
+ else {
54
+ result.skipped.push(agentsMdPath);
55
+ log.skip('AGENTS.md already has plan-flow section');
56
+ }
57
+ }
58
+ else {
59
+ // Append plan-flow section to existing AGENTS.md
60
+ const appended = existing.trimEnd() + '\n\n' + section + '\n';
61
+ writeFileSync(agentsMdPath, appended, 'utf-8');
62
+ result.updated.push(agentsMdPath);
63
+ log.success('Appended plan-flow section to AGENTS.md');
64
+ }
65
+ }
66
+ return result;
67
+ }
68
+ function escapeRegExp(str) {
69
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
70
+ }
71
+ export async function initCodex(target, options) {
72
+ const result = { created: [], skipped: [], updated: [] };
73
+ const packageRoot = getPackageRoot();
74
+ // 1. Copy skills/plan-flow/ → .agents/skills/plan-flow/
75
+ const skillsSrc = join(packageRoot, 'skills', 'plan-flow');
76
+ const skillsDest = join(target, '.agents', 'skills', 'plan-flow');
77
+ if (existsSync(skillsSrc)) {
78
+ ensureDir(skillsDest);
79
+ const copyResult = copyDir(skillsSrc, skillsDest, options);
80
+ result.created.push(...copyResult.created);
81
+ result.skipped.push(...copyResult.skipped);
82
+ result.updated.push(...copyResult.updated);
83
+ for (const f of copyResult.created) {
84
+ log.success(`Created ${f.replace(target + '/', '')}`);
85
+ }
86
+ for (const f of copyResult.skipped) {
87
+ log.skip(`Skipped ${f.replace(target + '/', '')}`);
88
+ }
89
+ for (const f of copyResult.updated) {
90
+ log.warn(`Updated ${f.replace(target + '/', '')}`);
91
+ }
92
+ }
93
+ // 2. Handle AGENTS.md
94
+ const mdResult = handleAgentsMd(target, packageRoot, options);
95
+ result.created.push(...mdResult.created);
96
+ result.skipped.push(...mdResult.skipped);
97
+ result.updated.push(...mdResult.updated);
98
+ return result;
99
+ }
100
+ //# sourceMappingURL=codex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../src/cli/handlers/codex.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Cursor handler
3
+ *
4
+ * Copies commands to .cursor/commands/ and rules to .cursor/rules/
5
+ * Cursor supports slash commands via .cursor/commands/*.md files
6
+ */
7
+ import type { CopyOptions, CopyResult } from '../types.js';
8
+ export declare function initCursor(target: string, options: CopyOptions): Promise<CopyResult>;
9
+ //# sourceMappingURL=cursor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/cursor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI3D,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAqDrB"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Cursor handler
3
+ *
4
+ * Copies commands to .cursor/commands/ and rules to .cursor/rules/
5
+ * Cursor supports slash commands via .cursor/commands/*.md files
6
+ */
7
+ import { join } from 'node:path';
8
+ import { existsSync } from 'node:fs';
9
+ import { copyDir, getPackageRoot, ensureDir } from '../utils/files.js';
10
+ import * as log from '../utils/logger.js';
11
+ export async function initCursor(target, options) {
12
+ const result = { created: [], skipped: [], updated: [] };
13
+ const packageRoot = getPackageRoot();
14
+ // 1. Copy commands to .cursor/commands/
15
+ const commandsSrc = join(packageRoot, '.claude', 'commands');
16
+ const commandsDest = join(target, '.cursor', 'commands');
17
+ if (existsSync(commandsSrc)) {
18
+ ensureDir(commandsDest);
19
+ const cmdResult = copyDir(commandsSrc, commandsDest, options);
20
+ result.created.push(...cmdResult.created);
21
+ result.skipped.push(...cmdResult.skipped);
22
+ result.updated.push(...cmdResult.updated);
23
+ for (const f of cmdResult.created) {
24
+ log.success(`Created ${f.replace(target + '/', '')}`);
25
+ }
26
+ for (const f of cmdResult.skipped) {
27
+ log.skip(`Skipped ${f.replace(target + '/', '')}`);
28
+ }
29
+ for (const f of cmdResult.updated) {
30
+ log.warn(`Updated ${f.replace(target + '/', '')}`);
31
+ }
32
+ }
33
+ else {
34
+ log.warn('No commands found in package. Skipping commands setup.');
35
+ }
36
+ // 2. Copy rules to .cursor/rules/
37
+ const rulesSrc = join(packageRoot, 'rules');
38
+ const rulesDest = join(target, '.cursor', 'rules');
39
+ if (existsSync(rulesSrc)) {
40
+ ensureDir(rulesDest);
41
+ const rulesResult = copyDir(rulesSrc, rulesDest, options);
42
+ result.created.push(...rulesResult.created);
43
+ result.skipped.push(...rulesResult.skipped);
44
+ result.updated.push(...rulesResult.updated);
45
+ for (const f of rulesResult.created) {
46
+ log.success(`Created ${f.replace(target + '/', '')}`);
47
+ }
48
+ for (const f of rulesResult.skipped) {
49
+ log.skip(`Skipped ${f.replace(target + '/', '')}`);
50
+ }
51
+ for (const f of rulesResult.updated) {
52
+ log.warn(`Updated ${f.replace(target + '/', '')}`);
53
+ }
54
+ }
55
+ else {
56
+ log.warn('No rules found in package. Skipping rules setup.');
57
+ }
58
+ return result;
59
+ }
60
+ //# sourceMappingURL=cursor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../../src/cli/handlers/cursor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * OpenClaw handler
3
+ *
4
+ * Copies skills/plan-flow/ to the user's project.
5
+ */
6
+ import type { CopyOptions, CopyResult } from '../types.js';
7
+ export declare function initOpenClaw(target: string, options: CopyOptions): Promise<CopyResult>;
8
+ //# sourceMappingURL=openclaw.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/openclaw.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI3D,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CA2BrB"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * OpenClaw handler
3
+ *
4
+ * Copies skills/plan-flow/ to the user's project.
5
+ */
6
+ import { join } from 'node:path';
7
+ import { existsSync } from 'node:fs';
8
+ import { copyDir, getPackageRoot, ensureDir } from '../utils/files.js';
9
+ import * as log from '../utils/logger.js';
10
+ export async function initOpenClaw(target, options) {
11
+ const result = { created: [], skipped: [], updated: [] };
12
+ const packageRoot = getPackageRoot();
13
+ // Copy skills/plan-flow/ preserving directory structure
14
+ const skillsSrc = join(packageRoot, 'skills', 'plan-flow');
15
+ const skillsDest = join(target, 'skills', 'plan-flow');
16
+ if (existsSync(skillsSrc)) {
17
+ ensureDir(skillsDest);
18
+ const copyResult = copyDir(skillsSrc, skillsDest, options);
19
+ result.created.push(...copyResult.created);
20
+ result.skipped.push(...copyResult.skipped);
21
+ result.updated.push(...copyResult.updated);
22
+ for (const f of copyResult.created) {
23
+ log.success(`Created ${f.replace(target + '/', '')}`);
24
+ }
25
+ for (const f of copyResult.skipped) {
26
+ log.skip(`Skipped ${f.replace(target + '/', '')}`);
27
+ }
28
+ for (const f of copyResult.updated) {
29
+ log.warn(`Updated ${f.replace(target + '/', '')}`);
30
+ }
31
+ }
32
+ return result;
33
+ }
34
+ //# sourceMappingURL=openclaw.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw.js","sourceRoot":"","sources":["../../../src/cli/handlers/openclaw.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAc,EACd,OAAoB;IAEpB,MAAM,MAAM,GAAe,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACrE,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IAErC,wDAAwD;IACxD,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IAEvD,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,SAAS,CAAC,UAAU,CAAC,CAAC;QACtB,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QAC3D,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QAE3C,KAAK,MAAM,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACnC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACnC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACnC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Shared handler
3
+ *
4
+ * Creates flow/ directory structure and manages .gitignore entries.
5
+ * Runs for all platform installations.
6
+ */
7
+ import type { CopyOptions, CopyResult, Platform } from '../types.js';
8
+ export declare function initShared(target: string, options: CopyOptions, platforms?: Platform[]): Promise<CopyResult>;
9
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/shared.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AA4GrE,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,WAAW,EACpB,SAAS,GAAE,QAAQ,EAAO,GACzB,OAAO,CAAC,UAAU,CAAC,CA+BrB"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Shared handler
3
+ *
4
+ * Creates flow/ directory structure and manages .gitignore entries.
5
+ * Runs for all platform installations.
6
+ */
7
+ import { join } from 'node:path';
8
+ import { existsSync, readFileSync, writeFileSync } from 'node:fs';
9
+ import { ensureDir } from '../utils/files.js';
10
+ import * as log from '../utils/logger.js';
11
+ const FLOW_SUBDIRS = [
12
+ 'archive',
13
+ 'contracts',
14
+ 'discovery',
15
+ 'plans',
16
+ 'references',
17
+ 'reviewed-code',
18
+ 'reviewed-pr',
19
+ ];
20
+ const MARKER_START = '# >>> plan-flow';
21
+ const MARKER_END = '# <<< plan-flow';
22
+ /**
23
+ * Maps each platform to the paths it installs in the user's project.
24
+ */
25
+ const PLATFORM_GITIGNORE_ENTRIES = {
26
+ claude: ['.claude/', 'CLAUDE.md'],
27
+ cursor: ['.cursor/'],
28
+ openclaw: ['skills/plan-flow/'],
29
+ codex: ['.agents/', 'AGENTS.md'],
30
+ };
31
+ /**
32
+ * Paths that should always be gitignored regardless of platform.
33
+ */
34
+ const SHARED_GITIGNORE_ENTRIES = ['flow/', '.plan-flow.yml', '.plan.flow.env'];
35
+ /**
36
+ * Builds the plan-flow .gitignore block with markers.
37
+ */
38
+ function buildGitignoreBlock(platforms) {
39
+ const lines = [MARKER_START];
40
+ // Shared entries
41
+ for (const entry of SHARED_GITIGNORE_ENTRIES) {
42
+ lines.push(entry);
43
+ }
44
+ // Platform-specific entries
45
+ for (const platform of platforms) {
46
+ const entries = PLATFORM_GITIGNORE_ENTRIES[platform];
47
+ if (entries) {
48
+ for (const entry of entries) {
49
+ lines.push(entry);
50
+ }
51
+ }
52
+ }
53
+ lines.push(MARKER_END);
54
+ return lines.join('\n');
55
+ }
56
+ /**
57
+ * Updates or creates .gitignore with plan-flow entries.
58
+ */
59
+ function updateGitignore(target, platforms, options) {
60
+ const result = { created: [], skipped: [], updated: [] };
61
+ const gitignorePath = join(target, '.gitignore');
62
+ const block = buildGitignoreBlock(platforms);
63
+ if (!existsSync(gitignorePath)) {
64
+ // No .gitignore exists - create it with plan-flow entries
65
+ writeFileSync(gitignorePath, block + '\n', 'utf-8');
66
+ result.created.push(gitignorePath);
67
+ log.success('Created .gitignore with plan-flow entries');
68
+ return result;
69
+ }
70
+ const existing = readFileSync(gitignorePath, 'utf-8');
71
+ if (existing.includes(MARKER_START)) {
72
+ if (options.force) {
73
+ // Replace existing plan-flow section
74
+ const pattern = new RegExp(`${escapeRegExp(MARKER_START)}[\\s\\S]*?${escapeRegExp(MARKER_END)}`);
75
+ const updated = existing.replace(pattern, block);
76
+ writeFileSync(gitignorePath, updated, 'utf-8');
77
+ result.updated.push(gitignorePath);
78
+ log.warn('Updated plan-flow entries in .gitignore');
79
+ }
80
+ else {
81
+ result.skipped.push(gitignorePath);
82
+ log.skip('.gitignore already has plan-flow entries');
83
+ }
84
+ }
85
+ else {
86
+ // Append plan-flow section to existing .gitignore
87
+ const appended = existing.trimEnd() + '\n\n' + block + '\n';
88
+ writeFileSync(gitignorePath, appended, 'utf-8');
89
+ result.updated.push(gitignorePath);
90
+ log.success('Added plan-flow entries to .gitignore');
91
+ }
92
+ return result;
93
+ }
94
+ function escapeRegExp(str) {
95
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
96
+ }
97
+ export async function initShared(target, options, platforms = []) {
98
+ const result = { created: [], skipped: [], updated: [] };
99
+ // 1. Create flow/ directory structure with .gitkeep files
100
+ const flowDir = join(target, 'flow');
101
+ for (const subdir of FLOW_SUBDIRS) {
102
+ const dir = join(flowDir, subdir);
103
+ const gitkeep = join(dir, '.gitkeep');
104
+ if (!existsSync(dir)) {
105
+ ensureDir(dir);
106
+ writeFileSync(gitkeep, '', 'utf-8');
107
+ result.created.push(dir);
108
+ log.success(`Created flow/${subdir}/`);
109
+ }
110
+ else if (!existsSync(gitkeep)) {
111
+ writeFileSync(gitkeep, '', 'utf-8');
112
+ result.created.push(gitkeep);
113
+ }
114
+ else {
115
+ result.skipped.push(dir);
116
+ log.skip(`flow/${subdir}/ already exists`);
117
+ }
118
+ }
119
+ // 2. Update .gitignore with plan-flow entries
120
+ const giResult = updateGitignore(target, platforms, options);
121
+ result.created.push(...giResult.created);
122
+ result.skipped.push(...giResult.skipped);
123
+ result.updated.push(...giResult.updated);
124
+ return result;
125
+ }
126
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/cli/handlers/shared.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Plan-Flow CLI
4
+ *
5
+ * Installs plan-flow skills into your project for Claude Code, Cursor, and/or OpenClaw.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;;GAIG"}
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Plan-Flow CLI
4
+ *
5
+ * Installs plan-flow skills into your project for Claude Code, Cursor, and/or OpenClaw.
6
+ */
7
+ import { Command } from 'commander';
8
+ import { readFileSync } from 'node:fs';
9
+ import { fileURLToPath } from 'node:url';
10
+ import { dirname, join } from 'node:path';
11
+ const __filename = fileURLToPath(import.meta.url);
12
+ const __dirname = dirname(__filename);
13
+ function getVersion() {
14
+ try {
15
+ const pkgPath = join(__dirname, '..', '..', 'package.json');
16
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
17
+ return pkg.version || '1.0.0';
18
+ }
19
+ catch {
20
+ return '1.0.0';
21
+ }
22
+ }
23
+ const program = new Command();
24
+ program
25
+ .name('plan-flow')
26
+ .description('Structured AI-assisted development workflows for discovery, planning, execution, code reviews, and testing.')
27
+ .version(getVersion());
28
+ program
29
+ .command('init', { isDefault: true })
30
+ .description('Install plan-flow into your project for Claude Code, Cursor, OpenClaw, and/or Codex CLI')
31
+ .option('--claude', 'Install for Claude Code (slash commands + rules)')
32
+ .option('--cursor', 'Install for Cursor (rules)')
33
+ .option('--openclaw', 'Install for OpenClaw (skill manifests)')
34
+ .option('--codex', 'Install for Codex CLI (skills + AGENTS.md)')
35
+ .option('--all', 'Install for all platforms')
36
+ .option('--force', 'Overwrite existing files')
37
+ .option('--target <dir>', 'Target directory (defaults to current directory)', process.cwd())
38
+ .action(async (options) => {
39
+ const { runInit } = await import('./commands/init.js');
40
+ await runInit(options);
41
+ });
42
+ program.parse();
43
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QACvD,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CACV,6GAA6G,CAC9G;KACA,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;KACpC,WAAW,CACV,yFAAyF,CAC1F;KACA,MAAM,CAAC,UAAU,EAAE,kDAAkD,CAAC;KACtE,MAAM,CAAC,UAAU,EAAE,4BAA4B,CAAC;KAChD,MAAM,CAAC,YAAY,EAAE,wCAAwC,CAAC;KAC9D,MAAM,CAAC,SAAS,EAAE,4CAA4C,CAAC;KAC/D,MAAM,CAAC,OAAO,EAAE,2BAA2B,CAAC;KAC5C,MAAM,CAAC,SAAS,EAAE,0BAA0B,CAAC;KAC7C,MAAM,CACL,gBAAgB,EAChB,kDAAkD,EAClD,OAAO,CAAC,GAAG,EAAE,CACd;KACA,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACvD,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Shared types for the CLI
3
+ */
4
+ export interface InitOptions {
5
+ claude?: boolean;
6
+ cursor?: boolean;
7
+ openclaw?: boolean;
8
+ codex?: boolean;
9
+ all?: boolean;
10
+ force?: boolean;
11
+ target: string;
12
+ }
13
+ export interface CopyOptions {
14
+ force: boolean;
15
+ }
16
+ export interface CopyResult {
17
+ created: string[];
18
+ skipped: string[];
19
+ updated: string[];
20
+ }
21
+ export interface InitResult {
22
+ platform: string;
23
+ result: CopyResult;
24
+ }
25
+ export type Platform = 'claude' | 'cursor' | 'openclaw' | 'codex';
26
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cli/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Shared types for the CLI
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/cli/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}