prjct-cli 0.20.0 → 0.21.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 (236) hide show
  1. package/CHANGELOG.md +24 -6
  2. package/CLAUDE.md +56 -15
  3. package/README.md +5 -6
  4. package/bin/prjct +59 -42
  5. package/bin/prjct.ts +60 -0
  6. package/core/__tests__/agentic/memory-system.test.ts +18 -3
  7. package/core/__tests__/agentic/plan-mode.test.ts +55 -26
  8. package/core/__tests__/agentic/prompt-builder.test.ts +6 -6
  9. package/core/__tests__/utils/project-commands.test.ts +72 -0
  10. package/core/agentic/agent-router.ts +3 -12
  11. package/core/agentic/command-executor.ts +372 -3
  12. package/core/agentic/context-builder.ts +7 -27
  13. package/core/agentic/ground-truth.ts +604 -5
  14. package/core/agentic/index.ts +180 -0
  15. package/core/agentic/loop-detector.ts +418 -4
  16. package/core/agentic/memory-system.ts +857 -3
  17. package/core/agentic/plan-mode.ts +491 -4
  18. package/core/agentic/prompt-builder.ts +44 -65
  19. package/core/agentic/services.ts +13 -5
  20. package/core/agentic/skill-loader.ts +112 -0
  21. package/core/agentic/smart-context.ts +37 -122
  22. package/core/agentic/template-loader.ts +79 -122
  23. package/core/agentic/tool-registry.ts +5 -11
  24. package/core/agents/index.ts +1 -1
  25. package/core/agents/performance.ts +4 -2
  26. package/core/bus/bus.ts +262 -0
  27. package/core/bus/index.ts +3 -313
  28. package/core/commands/analysis.ts +5 -5
  29. package/core/commands/analytics.ts +11 -11
  30. package/core/commands/base.ts +33 -209
  31. package/core/commands/cleanup.ts +148 -0
  32. package/core/commands/command-data.ts +346 -0
  33. package/core/commands/commands.ts +216 -0
  34. package/core/commands/design.ts +83 -0
  35. package/core/commands/index.ts +13 -207
  36. package/core/commands/maintenance.ts +52 -473
  37. package/core/commands/planning.ts +3 -3
  38. package/core/commands/register.ts +104 -0
  39. package/core/commands/registry.ts +441 -0
  40. package/core/commands/setup.ts +25 -9
  41. package/core/commands/shipping.ts +48 -11
  42. package/core/commands/snapshots.ts +299 -0
  43. package/core/commands/workflow.ts +2 -2
  44. package/core/constants/index.ts +254 -4
  45. package/core/domain/agent-loader.ts +5 -6
  46. package/core/domain/task-stack.ts +555 -4
  47. package/core/errors.ts +127 -1
  48. package/core/events/events.ts +87 -0
  49. package/core/events/index.ts +4 -138
  50. package/core/index.ts +15 -23
  51. package/core/infrastructure/agent-detector.ts +126 -201
  52. package/core/infrastructure/author-detector.ts +99 -171
  53. package/core/infrastructure/command-installer.ts +476 -4
  54. package/core/infrastructure/config-manager.ts +41 -37
  55. package/core/infrastructure/path-manager.ts +59 -9
  56. package/core/infrastructure/permission-manager.ts +286 -0
  57. package/core/integrations/notion/client.ts +323 -0
  58. package/core/integrations/notion/index.ts +43 -0
  59. package/core/integrations/notion/setup.ts +230 -0
  60. package/core/integrations/notion/sync.ts +311 -0
  61. package/core/integrations/notion/templates.ts +234 -0
  62. package/core/outcomes/analyzer.ts +7 -41
  63. package/core/outcomes/index.ts +1 -1
  64. package/core/outcomes/recorder.ts +1 -1
  65. package/core/plugin/builtin/notion.ts +178 -0
  66. package/core/{plugins → plugin/builtin}/webhook.ts +6 -22
  67. package/core/plugin/loader.ts +5 -5
  68. package/core/plugin/registry.ts +2 -2
  69. package/core/schemas/ideas.ts +85 -54
  70. package/core/schemas/index.ts +14 -33
  71. package/core/schemas/permissions.ts +177 -0
  72. package/core/schemas/project.ts +39 -12
  73. package/core/schemas/roadmap.ts +94 -59
  74. package/core/schemas/schemas.ts +39 -0
  75. package/core/schemas/shipped.ts +87 -60
  76. package/core/schemas/state.ts +110 -70
  77. package/core/server/index.ts +21 -0
  78. package/core/server/routes.ts +165 -0
  79. package/core/server/server.ts +136 -0
  80. package/core/server/sse.ts +135 -0
  81. package/core/services/agent-service.ts +170 -0
  82. package/core/services/breakdown-service.ts +126 -0
  83. package/core/services/index.ts +21 -0
  84. package/core/services/memory-service.ts +108 -0
  85. package/core/services/project-service.ts +146 -0
  86. package/core/services/skill-service.ts +253 -0
  87. package/core/session/compaction.ts +257 -0
  88. package/core/session/index.ts +20 -8
  89. package/core/{infrastructure/session-manager/migration.ts → session/log-migration.ts} +9 -9
  90. package/core/{infrastructure/session-manager/session-manager.ts → session/session-log-manager.ts} +27 -26
  91. package/core/session/{session-manager.ts → task-session-manager.ts} +7 -4
  92. package/core/session/utils.ts +1 -1
  93. package/core/storage/ideas-storage.ts +10 -26
  94. package/core/storage/index.ts +14 -162
  95. package/core/storage/queue-storage.ts +13 -11
  96. package/core/storage/shipped-storage.ts +4 -17
  97. package/core/storage/state-storage.ts +35 -43
  98. package/core/storage/storage-manager.ts +42 -52
  99. package/core/storage/storage.ts +160 -0
  100. package/core/sync/auth-config.ts +1 -8
  101. package/core/sync/index.ts +17 -10
  102. package/core/sync/oauth-handler.ts +1 -6
  103. package/core/sync/sync-client.ts +6 -34
  104. package/core/sync/sync-manager.ts +11 -40
  105. package/core/types/agentic.ts +577 -0
  106. package/core/types/agents.ts +145 -0
  107. package/core/types/bus.ts +82 -0
  108. package/core/types/commands.ts +366 -0
  109. package/core/types/config.ts +70 -0
  110. package/core/types/core.ts +96 -0
  111. package/core/types/domain.ts +71 -0
  112. package/core/types/events.ts +42 -0
  113. package/core/types/fs.ts +56 -0
  114. package/core/types/index.ts +396 -500
  115. package/core/types/infrastructure.ts +196 -0
  116. package/core/types/integrations.ts +57 -0
  117. package/core/{agentic/memory-system/types.ts → types/memory.ts} +33 -8
  118. package/core/{outcomes/types.ts → types/outcomes.ts} +53 -8
  119. package/core/types/plugin.ts +25 -0
  120. package/core/types/server.ts +54 -0
  121. package/core/types/services.ts +65 -0
  122. package/core/types/session.ts +135 -0
  123. package/core/types/storage.ts +148 -0
  124. package/core/types/sync.ts +121 -0
  125. package/core/types/task.ts +72 -0
  126. package/core/types/template.ts +24 -0
  127. package/core/types/utils.ts +90 -0
  128. package/core/utils/cache.ts +195 -0
  129. package/core/utils/collection-filters.ts +245 -0
  130. package/core/utils/date-helper.ts +1 -5
  131. package/core/utils/file-helper.ts +20 -10
  132. package/core/utils/jsonl-helper.ts +5 -8
  133. package/core/utils/markdown-builder.ts +277 -0
  134. package/core/utils/project-commands.ts +132 -0
  135. package/core/utils/runtime.ts +119 -0
  136. package/dist/bin/prjct.mjs +12568 -0
  137. package/package.json +13 -8
  138. package/scripts/build.js +106 -0
  139. package/scripts/postinstall.js +50 -8
  140. package/templates/agentic/subagent-generation.md +1 -1
  141. package/templates/commands/init.md +43 -0
  142. package/templates/commands/notion-setup.md +191 -0
  143. package/templates/commands/serve.md +118 -0
  144. package/templates/commands/ship.md +13 -2
  145. package/templates/commands/skill.md +110 -0
  146. package/templates/commands/sync.md +1 -1
  147. package/templates/commands/test.md +23 -4
  148. package/templates/mcp-config.json +28 -0
  149. package/templates/permissions/default.jsonc +60 -0
  150. package/templates/permissions/permissive.jsonc +49 -0
  151. package/templates/permissions/strict.jsonc +62 -0
  152. package/templates/skills/code-review.md +47 -0
  153. package/templates/skills/debug.md +61 -0
  154. package/templates/skills/refactor.md +47 -0
  155. package/templates/subagents/domain/devops.md +1 -1
  156. package/templates/subagents/domain/testing.md +6 -10
  157. package/templates/subagents/workflow/prjct-shipper.md +16 -7
  158. package/templates/tools/bash.txt +22 -0
  159. package/templates/tools/edit.txt +18 -0
  160. package/templates/tools/glob.txt +19 -0
  161. package/templates/tools/grep.txt +21 -0
  162. package/templates/tools/read.txt +14 -0
  163. package/templates/tools/task.txt +20 -0
  164. package/templates/tools/webfetch.txt +16 -0
  165. package/templates/tools/websearch.txt +18 -0
  166. package/templates/tools/write.txt +17 -0
  167. package/core/agentic/command-executor/command-executor.ts +0 -312
  168. package/core/agentic/command-executor/index.ts +0 -16
  169. package/core/agentic/command-executor/status-signal.ts +0 -38
  170. package/core/agentic/command-executor/types.ts +0 -79
  171. package/core/agentic/ground-truth/index.ts +0 -76
  172. package/core/agentic/ground-truth/types.ts +0 -33
  173. package/core/agentic/ground-truth/utils.ts +0 -48
  174. package/core/agentic/ground-truth/verifiers/analyze.ts +0 -54
  175. package/core/agentic/ground-truth/verifiers/done.ts +0 -75
  176. package/core/agentic/ground-truth/verifiers/feature.ts +0 -70
  177. package/core/agentic/ground-truth/verifiers/index.ts +0 -37
  178. package/core/agentic/ground-truth/verifiers/init.ts +0 -52
  179. package/core/agentic/ground-truth/verifiers/now.ts +0 -57
  180. package/core/agentic/ground-truth/verifiers/ship.ts +0 -85
  181. package/core/agentic/ground-truth/verifiers/spec.ts +0 -45
  182. package/core/agentic/ground-truth/verifiers/sync.ts +0 -47
  183. package/core/agentic/ground-truth/verifiers.ts +0 -6
  184. package/core/agentic/loop-detector/error-analysis.ts +0 -97
  185. package/core/agentic/loop-detector/hallucination.ts +0 -71
  186. package/core/agentic/loop-detector/index.ts +0 -41
  187. package/core/agentic/loop-detector/loop-detector.ts +0 -222
  188. package/core/agentic/loop-detector/types.ts +0 -66
  189. package/core/agentic/memory-system/history.ts +0 -53
  190. package/core/agentic/memory-system/index.ts +0 -192
  191. package/core/agentic/memory-system/patterns.ts +0 -156
  192. package/core/agentic/memory-system/semantic-memories.ts +0 -278
  193. package/core/agentic/memory-system/session.ts +0 -21
  194. package/core/agentic/plan-mode/approval.ts +0 -57
  195. package/core/agentic/plan-mode/constants.ts +0 -44
  196. package/core/agentic/plan-mode/index.ts +0 -28
  197. package/core/agentic/plan-mode/plan-mode.ts +0 -407
  198. package/core/agentic/plan-mode/types.ts +0 -193
  199. package/core/agents/types.ts +0 -126
  200. package/core/command-registry/categories.ts +0 -23
  201. package/core/command-registry/commands.ts +0 -15
  202. package/core/command-registry/core-commands.ts +0 -344
  203. package/core/command-registry/index.ts +0 -158
  204. package/core/command-registry/optional-commands.ts +0 -163
  205. package/core/command-registry/setup-commands.ts +0 -83
  206. package/core/command-registry/types.ts +0 -59
  207. package/core/command-registry.ts +0 -9
  208. package/core/commands/types.ts +0 -185
  209. package/core/commands.ts +0 -11
  210. package/core/constants/formats.ts +0 -187
  211. package/core/context-sync.ts +0 -18
  212. package/core/data/index.ts +0 -27
  213. package/core/data/md-base-manager.ts +0 -203
  214. package/core/data/md-ideas-manager.ts +0 -155
  215. package/core/data/md-queue-manager.ts +0 -180
  216. package/core/data/md-shipped-manager.ts +0 -90
  217. package/core/data/md-state-manager.ts +0 -137
  218. package/core/domain/task-stack/index.ts +0 -19
  219. package/core/domain/task-stack/parser.ts +0 -86
  220. package/core/domain/task-stack/storage.ts +0 -123
  221. package/core/domain/task-stack/task-stack.ts +0 -340
  222. package/core/domain/task-stack/types.ts +0 -51
  223. package/core/infrastructure/command-installer/command-installer.ts +0 -327
  224. package/core/infrastructure/command-installer/global-config.ts +0 -136
  225. package/core/infrastructure/command-installer/index.ts +0 -25
  226. package/core/infrastructure/command-installer/types.ts +0 -41
  227. package/core/infrastructure/session-manager/index.ts +0 -23
  228. package/core/infrastructure/session-manager/types.ts +0 -45
  229. package/core/infrastructure/session-manager.ts +0 -8
  230. package/core/serializers/ideas-serializer.ts +0 -187
  231. package/core/serializers/index.ts +0 -36
  232. package/core/serializers/queue-serializer.ts +0 -210
  233. package/core/serializers/shipped-serializer.ts +0 -108
  234. package/core/serializers/state-serializer.ts +0 -136
  235. package/core/session/types.ts +0 -29
  236. /package/core/infrastructure/{agents/claude-agent.ts → claude-agent.ts} +0 -0
@@ -1,216 +1,22 @@
1
1
  /**
2
2
  * prjct CLI Commands Handler
3
3
  *
4
- * MD-First Architecture - All state in Markdown files.
4
+ * Barrel export for commands module.
5
5
  *
6
- * COMMANDS (22 total):
7
- * - Workflow (5): work, done, next, pause, resume
8
- * - Planning (5): init, feature, bug, idea, spec
9
- * - Shipping (1): ship
10
- * - Analytics (2): dash, help
11
- * - Maintenance (5): cleanup, design, recover, undo, redo, history
12
- * - Analysis (2): analyze, sync
13
- * - Setup (3): start, setup, migrateAll
6
+ * Migration path:
7
+ * - Legacy: import commands from './commands' → commands.work()
8
+ * - New: import { commandRegistry } from './commands' → registry.execute('work')
14
9
  */
15
10
 
16
- import { WorkflowCommands } from './workflow'
17
- import { PlanningCommands } from './planning'
18
- import { ShippingCommands } from './shipping'
19
- import { AnalyticsCommands } from './analytics'
20
- import { MaintenanceCommands } from './maintenance'
21
- import { AnalysisCommands } from './analysis'
22
- import { SetupCommands } from './setup'
11
+ // Legacy exports (backwards compat)
12
+ export { default, PrjctCommands } from './commands'
23
13
 
24
- import type {
25
- CommandResult,
26
- AgentInfo,
27
- Author,
28
- DesignOptions,
29
- CleanupOptions,
30
- SetupOptions,
31
- MigrateOptions,
32
- AnalyzeOptions
33
- } from './types'
14
+ // New registry-based exports
15
+ export { commandRegistry, CommandRegistry } from './registry'
16
+ export type { ExecutionContext, CommandHandler, HandlerFn, CommandMeta } from './registry'
34
17
 
35
- /**
36
- * PrjctCommands - Combined class with all commands
37
- * Uses mixins pattern to combine all command groups
38
- */
39
- class PrjctCommands {
40
- // Instances of each command group
41
- private workflow: WorkflowCommands
42
- private planning: PlanningCommands
43
- private shipping: ShippingCommands
44
- private analytics: AnalyticsCommands
45
- private maintenance: MaintenanceCommands
46
- private analysis: AnalysisCommands
47
- private setupCmds: SetupCommands
48
-
49
- // Shared state
50
- agent: unknown
51
- agentInfo: AgentInfo | null
52
- currentAuthor: Author | null
53
- prjctDir: string
54
-
55
- constructor() {
56
- this.workflow = new WorkflowCommands()
57
- this.planning = new PlanningCommands()
58
- this.shipping = new ShippingCommands()
59
- this.analytics = new AnalyticsCommands()
60
- this.maintenance = new MaintenanceCommands()
61
- this.analysis = new AnalysisCommands()
62
- this.setupCmds = new SetupCommands()
63
-
64
- this.agent = null
65
- this.agentInfo = null
66
- this.currentAuthor = null
67
- this.prjctDir = '.prjct'
68
- }
69
-
70
- // ========== Workflow Commands ==========
71
-
72
- async work(task: string | null = null, projectPath: string = process.cwd()): Promise<CommandResult> {
73
- return this.workflow.now(task, projectPath)
74
- }
75
-
76
- async done(projectPath: string = process.cwd()): Promise<CommandResult> {
77
- return this.workflow.done(projectPath)
78
- }
79
-
80
- async next(projectPath: string = process.cwd()): Promise<CommandResult> {
81
- return this.workflow.next(projectPath)
82
- }
83
-
84
- async pause(reason: string = '', projectPath: string = process.cwd()): Promise<CommandResult> {
85
- return this.workflow.pause(reason, projectPath)
86
- }
87
-
88
- async resume(taskId: string | null = null, projectPath: string = process.cwd()): Promise<CommandResult> {
89
- return this.workflow.resume(taskId, projectPath)
90
- }
91
-
92
- // ========== Planning Commands ==========
93
-
94
- async init(idea: string | null = null, projectPath: string = process.cwd()): Promise<CommandResult> {
95
- return this.planning.init(idea, projectPath)
96
- }
97
-
98
- async feature(description: string, projectPath: string = process.cwd()): Promise<CommandResult> {
99
- return this.planning.feature(description, projectPath)
100
- }
101
-
102
- async bug(description: string, projectPath: string = process.cwd()): Promise<CommandResult> {
103
- return this.planning.bug(description, projectPath)
104
- }
105
-
106
- async idea(description: string, projectPath: string = process.cwd()): Promise<CommandResult> {
107
- return this.planning.idea(description, projectPath)
108
- }
109
-
110
- async spec(featureName: string | null = null, projectPath: string = process.cwd()): Promise<CommandResult> {
111
- return this.planning.spec(featureName, projectPath)
112
- }
113
-
114
- // ========== Shipping Commands ==========
115
-
116
- async ship(feature: string | null, projectPath: string = process.cwd()): Promise<CommandResult> {
117
- return this.shipping.ship(feature, projectPath)
118
- }
119
-
120
- // ========== Analytics Commands ==========
121
-
122
- async dash(view: string = 'default', projectPath: string = process.cwd()): Promise<CommandResult> {
123
- return this.analytics.dash(view, projectPath)
124
- }
125
-
126
- async help(topic: string = '', projectPath: string = process.cwd()): Promise<CommandResult> {
127
- return this.analytics.help(topic, projectPath)
128
- }
129
-
130
- // ========== Maintenance Commands ==========
131
-
132
- async cleanup(options: CleanupOptions = {}, projectPath: string = process.cwd()): Promise<CommandResult> {
133
- return this.maintenance.cleanup(options, projectPath)
134
- }
135
-
136
- async design(target: string | null = null, options: DesignOptions = {}, projectPath: string = process.cwd()): Promise<CommandResult> {
137
- return this.maintenance.design(target, options, projectPath)
138
- }
139
-
140
- async recover(projectPath: string = process.cwd()): Promise<CommandResult> {
141
- return this.maintenance.recover(projectPath)
142
- }
143
-
144
- async undo(projectPath: string = process.cwd()): Promise<CommandResult> {
145
- return this.maintenance.undo(projectPath)
146
- }
147
-
148
- async redo(projectPath: string = process.cwd()): Promise<CommandResult> {
149
- return this.maintenance.redo(projectPath)
150
- }
151
-
152
- async history(projectPath: string = process.cwd()): Promise<CommandResult> {
153
- return this.maintenance.history(projectPath)
154
- }
155
-
156
- // ========== Analysis Commands ==========
157
-
158
- async analyze(options: AnalyzeOptions = {}, projectPath: string = process.cwd()): Promise<CommandResult> {
159
- return this.analysis.analyze(options, projectPath)
160
- }
161
-
162
- async sync(projectPath: string = process.cwd()): Promise<CommandResult> {
163
- return this.analysis.sync(projectPath)
164
- }
165
-
166
- // ========== Setup Commands ==========
167
-
168
- async start(): Promise<CommandResult> {
169
- return this.setupCmds.start()
170
- }
171
-
172
- async setup(options: SetupOptions = {}): Promise<CommandResult> {
173
- return this.setupCmds.setup(options)
174
- }
175
-
176
- async migrateAll(options: MigrateOptions = {}): Promise<CommandResult> {
177
- return this.setupCmds.migrateAll(options)
178
- }
179
-
180
- async installStatusLine(): Promise<{ success: boolean; error?: string }> {
181
- return this.setupCmds.installStatusLine()
182
- }
183
-
184
- showAsciiArt(): void {
185
- return this.setupCmds.showAsciiArt()
186
- }
187
-
188
- // ========== Delegated Base Methods ==========
189
-
190
- async initializeAgent(): Promise<unknown> {
191
- return this.workflow.initializeAgent()
192
- }
193
-
194
- async ensureProjectInit(projectPath: string): Promise<CommandResult> {
195
- return this.workflow.ensureProjectInit(projectPath)
196
- }
197
-
198
- async ensureAuthor(): Promise<Author> {
199
- return this.workflow.ensureAuthor()
200
- }
201
-
202
- async getGlobalProjectPath(projectPath: string): Promise<string> {
203
- return this.workflow.getGlobalProjectPath(projectPath)
204
- }
205
-
206
- async logToMemory(projectPath: string, action: string, data: Record<string, unknown>): Promise<void> {
207
- return this.workflow.logToMemory(projectPath, action, data)
208
- }
209
- }
210
-
211
- // Export both class and singleton instance
212
- const instance = new PrjctCommands()
18
+ // Command registration (auto-runs on import)
19
+ export { registerAllCommands } from './register'
213
20
 
214
- export default instance
215
- export { PrjctCommands }
216
- export * from './types'
21
+ // Types
22
+ export * from '../types'