prjct-cli 0.44.1 → 0.45.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.
Files changed (207) hide show
  1. package/CHANGELOG.md +114 -0
  2. package/bin/prjct.ts +131 -10
  3. package/core/__tests__/agentic/memory-system.test.ts +39 -26
  4. package/core/__tests__/agentic/plan-mode.test.ts +64 -46
  5. package/core/__tests__/agentic/prompt-builder.test.ts +14 -14
  6. package/core/__tests__/services/project-index.test.ts +353 -0
  7. package/core/__tests__/types/fs.test.ts +3 -3
  8. package/core/__tests__/utils/date-helper.test.ts +10 -10
  9. package/core/__tests__/utils/output.test.ts +9 -6
  10. package/core/__tests__/utils/project-commands.test.ts +5 -6
  11. package/core/agentic/agent-router.ts +9 -10
  12. package/core/agentic/chain-of-thought.ts +16 -4
  13. package/core/agentic/command-executor.ts +66 -40
  14. package/core/agentic/context-builder.ts +8 -5
  15. package/core/agentic/ground-truth.ts +15 -9
  16. package/core/agentic/index.ts +145 -152
  17. package/core/agentic/loop-detector.ts +40 -11
  18. package/core/agentic/memory-system.ts +98 -35
  19. package/core/agentic/orchestrator-executor.ts +135 -71
  20. package/core/agentic/plan-mode.ts +46 -16
  21. package/core/agentic/prompt-builder.ts +108 -42
  22. package/core/agentic/services.ts +10 -9
  23. package/core/agentic/skill-loader.ts +9 -15
  24. package/core/agentic/smart-context.ts +129 -79
  25. package/core/agentic/template-executor.ts +13 -12
  26. package/core/agentic/template-loader.ts +7 -4
  27. package/core/agentic/tool-registry.ts +16 -13
  28. package/core/agents/index.ts +1 -1
  29. package/core/agents/performance.ts +10 -27
  30. package/core/ai-tools/formatters.ts +8 -6
  31. package/core/ai-tools/generator.ts +4 -4
  32. package/core/ai-tools/index.ts +1 -1
  33. package/core/ai-tools/registry.ts +21 -11
  34. package/core/bus/bus.ts +23 -16
  35. package/core/bus/index.ts +2 -2
  36. package/core/cli/linear.ts +3 -5
  37. package/core/cli/start.ts +28 -25
  38. package/core/commands/analysis.ts +287 -29
  39. package/core/commands/analytics.ts +52 -44
  40. package/core/commands/base.ts +15 -13
  41. package/core/commands/cleanup.ts +6 -13
  42. package/core/commands/command-data.ts +49 -8
  43. package/core/commands/commands.ts +60 -23
  44. package/core/commands/context.ts +4 -4
  45. package/core/commands/design.ts +3 -10
  46. package/core/commands/index.ts +5 -8
  47. package/core/commands/maintenance.ts +7 -4
  48. package/core/commands/planning.ts +179 -56
  49. package/core/commands/register.ts +14 -9
  50. package/core/commands/registry.ts +15 -14
  51. package/core/commands/setup.ts +26 -14
  52. package/core/commands/shipping.ts +11 -16
  53. package/core/commands/snapshots.ts +16 -32
  54. package/core/commands/uninstall.ts +541 -0
  55. package/core/commands/workflow.ts +24 -28
  56. package/core/constants/index.ts +10 -22
  57. package/core/context/generator.ts +82 -33
  58. package/core/context-tools/files-tool.ts +583 -0
  59. package/core/context-tools/imports-tool.ts +403 -0
  60. package/core/context-tools/index.ts +433 -0
  61. package/core/context-tools/recent-tool.ts +307 -0
  62. package/core/context-tools/signatures-tool.ts +501 -0
  63. package/core/context-tools/summary-tool.ts +307 -0
  64. package/core/context-tools/token-counter.ts +284 -0
  65. package/core/context-tools/types.ts +253 -0
  66. package/core/domain/agent-generator.ts +7 -5
  67. package/core/domain/agent-loader.ts +2 -2
  68. package/core/domain/analyzer.ts +19 -16
  69. package/core/domain/architecture-generator.ts +6 -3
  70. package/core/domain/context-estimator.ts +3 -4
  71. package/core/domain/snapshot-manager.ts +25 -22
  72. package/core/domain/task-stack.ts +24 -14
  73. package/core/errors.ts +1 -1
  74. package/core/events/events.ts +2 -4
  75. package/core/events/index.ts +1 -2
  76. package/core/index.ts +28 -12
  77. package/core/infrastructure/agent-detector.ts +3 -3
  78. package/core/infrastructure/ai-provider.ts +23 -20
  79. package/core/infrastructure/author-detector.ts +16 -10
  80. package/core/infrastructure/capability-installer.ts +2 -2
  81. package/core/infrastructure/claude-agent.ts +6 -6
  82. package/core/infrastructure/command-installer.ts +22 -17
  83. package/core/infrastructure/config-manager.ts +18 -14
  84. package/core/infrastructure/editors-config.ts +8 -4
  85. package/core/infrastructure/path-manager.ts +8 -6
  86. package/core/infrastructure/permission-manager.ts +20 -17
  87. package/core/infrastructure/setup.ts +42 -38
  88. package/core/infrastructure/update-checker.ts +5 -5
  89. package/core/integrations/issue-tracker/enricher.ts +8 -19
  90. package/core/integrations/issue-tracker/index.ts +2 -2
  91. package/core/integrations/issue-tracker/manager.ts +15 -15
  92. package/core/integrations/issue-tracker/types.ts +5 -22
  93. package/core/integrations/jira/client.ts +67 -59
  94. package/core/integrations/jira/index.ts +11 -14
  95. package/core/integrations/jira/mcp-adapter.ts +5 -10
  96. package/core/integrations/jira/service.ts +10 -10
  97. package/core/integrations/linear/client.ts +27 -18
  98. package/core/integrations/linear/index.ts +9 -12
  99. package/core/integrations/linear/service.ts +11 -11
  100. package/core/integrations/linear/sync.ts +8 -8
  101. package/core/outcomes/analyzer.ts +5 -18
  102. package/core/outcomes/index.ts +2 -2
  103. package/core/outcomes/recorder.ts +3 -3
  104. package/core/plugin/builtin/webhook.ts +19 -15
  105. package/core/plugin/hooks.ts +29 -21
  106. package/core/plugin/index.ts +7 -7
  107. package/core/plugin/loader.ts +19 -19
  108. package/core/plugin/registry.ts +12 -23
  109. package/core/schemas/agents.ts +1 -1
  110. package/core/schemas/analysis.ts +1 -1
  111. package/core/schemas/enriched-task.ts +62 -49
  112. package/core/schemas/ideas.ts +13 -13
  113. package/core/schemas/index.ts +17 -27
  114. package/core/schemas/issues.ts +40 -25
  115. package/core/schemas/metrics.ts +143 -0
  116. package/core/schemas/outcomes.ts +70 -62
  117. package/core/schemas/permissions.ts +15 -12
  118. package/core/schemas/prd.ts +27 -14
  119. package/core/schemas/project.ts +3 -3
  120. package/core/schemas/roadmap.ts +47 -34
  121. package/core/schemas/schemas.ts +3 -4
  122. package/core/schemas/shipped.ts +3 -3
  123. package/core/schemas/state.ts +43 -29
  124. package/core/server/index.ts +5 -6
  125. package/core/server/routes-extended.ts +68 -72
  126. package/core/server/routes.ts +3 -3
  127. package/core/server/server.ts +31 -26
  128. package/core/services/agent-generator.ts +237 -0
  129. package/core/services/agent-service.ts +2 -2
  130. package/core/services/breakdown-service.ts +2 -4
  131. package/core/services/context-generator.ts +299 -0
  132. package/core/services/context-selector.ts +420 -0
  133. package/core/services/doctor-service.ts +426 -0
  134. package/core/services/file-categorizer.ts +448 -0
  135. package/core/services/file-scorer.ts +270 -0
  136. package/core/services/git-analyzer.ts +267 -0
  137. package/core/services/index.ts +27 -10
  138. package/core/services/memory-service.ts +3 -4
  139. package/core/services/project-index.ts +911 -0
  140. package/core/services/project-service.ts +4 -4
  141. package/core/services/skill-installer.ts +14 -17
  142. package/core/services/skill-lock.ts +3 -3
  143. package/core/services/skill-service.ts +12 -6
  144. package/core/services/stack-detector.ts +245 -0
  145. package/core/services/sync-service.ts +170 -329
  146. package/core/services/watch-service.ts +294 -0
  147. package/core/session/compaction.ts +23 -31
  148. package/core/session/index.ts +11 -5
  149. package/core/session/log-migration.ts +3 -3
  150. package/core/session/metrics.ts +19 -14
  151. package/core/session/session-log-manager.ts +12 -17
  152. package/core/session/task-session-manager.ts +25 -25
  153. package/core/session/utils.ts +1 -1
  154. package/core/storage/ideas-storage.ts +41 -57
  155. package/core/storage/index-storage.ts +514 -0
  156. package/core/storage/index.ts +41 -13
  157. package/core/storage/metrics-storage.ts +320 -0
  158. package/core/storage/queue-storage.ts +35 -45
  159. package/core/storage/shipped-storage.ts +17 -20
  160. package/core/storage/state-storage.ts +50 -30
  161. package/core/storage/storage-manager.ts +6 -6
  162. package/core/storage/storage.ts +18 -15
  163. package/core/sync/auth-config.ts +3 -3
  164. package/core/sync/index.ts +13 -19
  165. package/core/sync/oauth-handler.ts +3 -3
  166. package/core/sync/sync-client.ts +4 -9
  167. package/core/sync/sync-manager.ts +12 -14
  168. package/core/types/commands.ts +42 -7
  169. package/core/types/index.ts +284 -302
  170. package/core/types/integrations.ts +3 -3
  171. package/core/types/storage.ts +49 -0
  172. package/core/types/utils.ts +3 -3
  173. package/core/utils/agent-stream.ts +3 -1
  174. package/core/utils/animations.ts +14 -11
  175. package/core/utils/branding.ts +7 -7
  176. package/core/utils/cache.ts +1 -3
  177. package/core/utils/collection-filters.ts +3 -15
  178. package/core/utils/date-helper.ts +2 -7
  179. package/core/utils/file-helper.ts +13 -8
  180. package/core/utils/jsonl-helper.ts +13 -10
  181. package/core/utils/keychain.ts +4 -8
  182. package/core/utils/logger.ts +1 -1
  183. package/core/utils/next-steps.ts +3 -3
  184. package/core/utils/output.ts +58 -11
  185. package/core/utils/project-commands.ts +6 -6
  186. package/core/utils/project-credentials.ts +5 -12
  187. package/core/utils/runtime.ts +2 -2
  188. package/core/utils/session-helper.ts +3 -4
  189. package/core/utils/version.ts +3 -3
  190. package/core/wizard/index.ts +13 -0
  191. package/core/wizard/onboarding.ts +633 -0
  192. package/core/workflow/state-machine.ts +7 -7
  193. package/dist/bin/prjct.mjs +18907 -13189
  194. package/dist/core/infrastructure/command-installer.js +96 -111
  195. package/dist/core/infrastructure/editors-config.js +6 -6
  196. package/dist/core/infrastructure/setup.js +256 -257
  197. package/dist/core/utils/version.js +9 -9
  198. package/package.json +11 -12
  199. package/scripts/build.js +3 -3
  200. package/scripts/postinstall.js +2 -2
  201. package/templates/mcp-config.json +6 -1
  202. package/templates/permissions/permissive.jsonc +1 -1
  203. package/templates/permissions/strict.jsonc +5 -9
  204. package/templates/global/docs/agents.md +0 -88
  205. package/templates/global/docs/architecture.md +0 -103
  206. package/templates/global/docs/commands.md +0 -96
  207. package/templates/global/docs/validation.md +0 -95
@@ -3,22 +3,14 @@
3
3
  * Write-Through Architecture: JSON → MD → Event
4
4
  */
5
5
 
6
- import path from 'path'
7
-
8
- import { isNotFoundError } from '../types/fs'
6
+ import path from 'node:path'
9
7
  import memorySystem from '../agentic/memory-system'
8
+ import { shippedStorage, stateStorage } from '../storage'
10
9
  import type { CommandResult } from '../types'
11
- import { detectProjectCommands } from '../utils/project-commands'
12
- import {
13
- PrjctCommandsBase,
14
- toolRegistry,
15
- configManager,
16
- fileHelper,
17
- dateHelper,
18
- out
19
- } from './base'
20
- import { stateStorage, shippedStorage } from '../storage'
10
+ import { isNotFoundError } from '../types/fs'
21
11
  import { showNextSteps } from '../utils/next-steps'
12
+ import { detectProjectCommands } from '../utils/project-commands'
13
+ import { configManager, dateHelper, fileHelper, out, PrjctCommandsBase, toolRegistry } from './base'
22
14
 
23
15
  export class ShippingCommands extends PrjctCommandsBase {
24
16
  /**
@@ -93,7 +85,7 @@ export class ShippingCommands extends PrjctCommandsBase {
93
85
  // Write-through: Record shipped feature (JSON → MD → Event)
94
86
  await shippedStorage.addShipped(projectId, {
95
87
  name: featureName,
96
- version: newVersion
88
+ version: newVersion,
97
89
  })
98
90
 
99
91
  await this.logToMemory(projectPath, 'feature_shipped', {
@@ -112,7 +104,7 @@ export class ShippingCommands extends PrjctCommandsBase {
112
104
  if (isQuickShip) {
113
105
  await memorySystem.recordWorkflow(projectId, 'quick_ship', {
114
106
  description: 'Ship without full checks',
115
- feature_type: featureName.toLowerCase().includes('doc') ? 'docs' : 'other'
107
+ feature_type: featureName.toLowerCase().includes('doc') ? 'docs' : 'other',
116
108
  })
117
109
  }
118
110
 
@@ -213,7 +205,10 @@ export class ShippingCommands extends PrjctCommandsBase {
213
205
  /**
214
206
  * Create git commit for ship
215
207
  */
216
- async _createShipCommit(feature: string, _projectPath: string): Promise<{ success: boolean; message: string }> {
208
+ async _createShipCommit(
209
+ feature: string,
210
+ _projectPath: string
211
+ ): Promise<{ success: boolean; message: string }> {
217
212
  try {
218
213
  await toolRegistry.get('Bash')!('git add .')
219
214
 
@@ -4,18 +4,11 @@
4
4
  * Git-based undo/redo functionality and session recovery.
5
5
  */
6
6
 
7
- import path from 'path'
8
-
9
- import { isNotFoundError } from '../types/fs'
10
- import type { CommandResult } from '../types'
11
- import {
12
- pathManager,
13
- configManager,
14
- fileHelper,
15
- dateHelper,
16
- out
17
- } from './base'
7
+ import path from 'node:path'
18
8
  import { memoryService } from '../services'
9
+ import type { CommandResult } from '../types'
10
+ import { isNotFoundError } from '../types/fs'
11
+ import { configManager, dateHelper, fileHelper, out, pathManager } from './base'
19
12
 
20
13
  interface SnapshotHistory {
21
14
  snapshots: { id: string; timestamp: string; message: string }[]
@@ -97,19 +90,16 @@ export async function undo(projectPath: string = process.cwd()): Promise<Command
97
90
  }
98
91
 
99
92
  // Create snapshots directory
100
- const snapshotsPath = path.join(
101
- pathManager.getGlobalProjectPath(projectId),
102
- 'snapshots'
103
- )
93
+ const snapshotsPath = path.join(pathManager.getGlobalProjectPath(projectId), 'snapshots')
104
94
  await fileHelper.ensureDir(snapshotsPath)
105
95
 
106
96
  // Check git status
107
- const { execSync } = await import('child_process')
97
+ const { execSync } = await import('node:child_process')
108
98
 
109
99
  try {
110
100
  const status = execSync('git status --porcelain', {
111
101
  cwd: projectPath,
112
- encoding: 'utf-8'
102
+ encoding: 'utf-8',
113
103
  }).trim()
114
104
 
115
105
  if (!status) {
@@ -123,7 +113,7 @@ export async function undo(projectPath: string = process.cwd()): Promise<Command
123
113
 
124
114
  execSync(`git stash push -m "${stashMessage}"`, {
125
115
  cwd: projectPath,
126
- encoding: 'utf-8'
116
+ encoding: 'utf-8',
127
117
  })
128
118
 
129
119
  // Save snapshot metadata
@@ -143,7 +133,7 @@ export async function undo(projectPath: string = process.cwd()): Promise<Command
143
133
  history.snapshots.push({
144
134
  id: stashMessage,
145
135
  timestamp: new Date().toISOString(),
146
- message: stashMessage
136
+ message: stashMessage,
147
137
  })
148
138
  history.current = history.snapshots.length - 1
149
139
 
@@ -179,10 +169,7 @@ export async function redo(projectPath: string = process.cwd()): Promise<Command
179
169
  return { success: false, error: 'No project ID found' }
180
170
  }
181
171
 
182
- const snapshotsPath = path.join(
183
- pathManager.getGlobalProjectPath(projectId),
184
- 'snapshots'
185
- )
172
+ const snapshotsPath = path.join(pathManager.getGlobalProjectPath(projectId), 'snapshots')
186
173
  const snapshotFile = path.join(snapshotsPath, 'history.json')
187
174
 
188
175
  let history: SnapshotHistory
@@ -203,13 +190,13 @@ export async function redo(projectPath: string = process.cwd()): Promise<Command
203
190
  return { success: false, message: 'Nothing to redo' }
204
191
  }
205
192
 
206
- const { execSync } = await import('child_process')
193
+ const { execSync } = await import('node:child_process')
207
194
 
208
195
  try {
209
196
  // Get latest stash
210
197
  const stashList = execSync('git stash list', {
211
198
  cwd: projectPath,
212
- encoding: 'utf-8'
199
+ encoding: 'utf-8',
213
200
  }).trim()
214
201
 
215
202
  if (!stashList) {
@@ -218,7 +205,7 @@ export async function redo(projectPath: string = process.cwd()): Promise<Command
218
205
  }
219
206
 
220
207
  // Find prjct stash
221
- const prjctStash = stashList.split('\n').find(line => line.includes('prjct-undo-'))
208
+ const prjctStash = stashList.split('\n').find((line) => line.includes('prjct-undo-'))
222
209
 
223
210
  if (!prjctStash) {
224
211
  out.warn('no prjct undo point found')
@@ -228,7 +215,7 @@ export async function redo(projectPath: string = process.cwd()): Promise<Command
228
215
  // Pop the stash
229
216
  execSync('git stash pop', {
230
217
  cwd: projectPath,
231
- encoding: 'utf-8'
218
+ encoding: 'utf-8',
232
219
  })
233
220
 
234
221
  // Remove from history
@@ -264,10 +251,7 @@ export async function history(projectPath: string = process.cwd()): Promise<Comm
264
251
  return { success: false, error: 'No project ID found' }
265
252
  }
266
253
 
267
- const snapshotsPath = path.join(
268
- pathManager.getGlobalProjectPath(projectId),
269
- 'snapshots'
270
- )
254
+ const snapshotsPath = path.join(pathManager.getGlobalProjectPath(projectId), 'snapshots')
271
255
  const snapshotFile = path.join(snapshotsPath, 'history.json')
272
256
 
273
257
  let snapshotHistory: SnapshotHistory
@@ -303,7 +287,7 @@ export async function history(projectPath: string = process.cwd()): Promise<Comm
303
287
  console.log(' Use /p:redo to restore the latest\n')
304
288
  }
305
289
 
306
- console.log('='.repeat(50) + '\n')
290
+ console.log(`${'='.repeat(50)}\n`)
307
291
 
308
292
  return { success: true, snapshots: snapshotHistory.snapshots, current: snapshotHistory.current }
309
293
  } catch (error) {