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.
- package/CHANGELOG.md +114 -0
- package/bin/prjct.ts +131 -10
- package/core/__tests__/agentic/memory-system.test.ts +39 -26
- package/core/__tests__/agentic/plan-mode.test.ts +64 -46
- package/core/__tests__/agentic/prompt-builder.test.ts +14 -14
- package/core/__tests__/services/project-index.test.ts +353 -0
- package/core/__tests__/types/fs.test.ts +3 -3
- package/core/__tests__/utils/date-helper.test.ts +10 -10
- package/core/__tests__/utils/output.test.ts +9 -6
- package/core/__tests__/utils/project-commands.test.ts +5 -6
- package/core/agentic/agent-router.ts +9 -10
- package/core/agentic/chain-of-thought.ts +16 -4
- package/core/agentic/command-executor.ts +66 -40
- package/core/agentic/context-builder.ts +8 -5
- package/core/agentic/ground-truth.ts +15 -9
- package/core/agentic/index.ts +145 -152
- package/core/agentic/loop-detector.ts +40 -11
- package/core/agentic/memory-system.ts +98 -35
- package/core/agentic/orchestrator-executor.ts +135 -71
- package/core/agentic/plan-mode.ts +46 -16
- package/core/agentic/prompt-builder.ts +108 -42
- package/core/agentic/services.ts +10 -9
- package/core/agentic/skill-loader.ts +9 -15
- package/core/agentic/smart-context.ts +129 -79
- package/core/agentic/template-executor.ts +13 -12
- package/core/agentic/template-loader.ts +7 -4
- package/core/agentic/tool-registry.ts +16 -13
- package/core/agents/index.ts +1 -1
- package/core/agents/performance.ts +10 -27
- package/core/ai-tools/formatters.ts +8 -6
- package/core/ai-tools/generator.ts +4 -4
- package/core/ai-tools/index.ts +1 -1
- package/core/ai-tools/registry.ts +21 -11
- package/core/bus/bus.ts +23 -16
- package/core/bus/index.ts +2 -2
- package/core/cli/linear.ts +3 -5
- package/core/cli/start.ts +28 -25
- package/core/commands/analysis.ts +287 -29
- package/core/commands/analytics.ts +52 -44
- package/core/commands/base.ts +15 -13
- package/core/commands/cleanup.ts +6 -13
- package/core/commands/command-data.ts +49 -8
- package/core/commands/commands.ts +60 -23
- package/core/commands/context.ts +4 -4
- package/core/commands/design.ts +3 -10
- package/core/commands/index.ts +5 -8
- package/core/commands/maintenance.ts +7 -4
- package/core/commands/planning.ts +179 -56
- package/core/commands/register.ts +14 -9
- package/core/commands/registry.ts +15 -14
- package/core/commands/setup.ts +26 -14
- package/core/commands/shipping.ts +11 -16
- package/core/commands/snapshots.ts +16 -32
- package/core/commands/uninstall.ts +541 -0
- package/core/commands/workflow.ts +24 -28
- package/core/constants/index.ts +10 -22
- package/core/context/generator.ts +82 -33
- package/core/context-tools/files-tool.ts +583 -0
- package/core/context-tools/imports-tool.ts +403 -0
- package/core/context-tools/index.ts +433 -0
- package/core/context-tools/recent-tool.ts +307 -0
- package/core/context-tools/signatures-tool.ts +501 -0
- package/core/context-tools/summary-tool.ts +307 -0
- package/core/context-tools/token-counter.ts +284 -0
- package/core/context-tools/types.ts +253 -0
- package/core/domain/agent-generator.ts +7 -5
- package/core/domain/agent-loader.ts +2 -2
- package/core/domain/analyzer.ts +19 -16
- package/core/domain/architecture-generator.ts +6 -3
- package/core/domain/context-estimator.ts +3 -4
- package/core/domain/snapshot-manager.ts +25 -22
- package/core/domain/task-stack.ts +24 -14
- package/core/errors.ts +1 -1
- package/core/events/events.ts +2 -4
- package/core/events/index.ts +1 -2
- package/core/index.ts +28 -12
- package/core/infrastructure/agent-detector.ts +3 -3
- package/core/infrastructure/ai-provider.ts +23 -20
- package/core/infrastructure/author-detector.ts +16 -10
- package/core/infrastructure/capability-installer.ts +2 -2
- package/core/infrastructure/claude-agent.ts +6 -6
- package/core/infrastructure/command-installer.ts +22 -17
- package/core/infrastructure/config-manager.ts +18 -14
- package/core/infrastructure/editors-config.ts +8 -4
- package/core/infrastructure/path-manager.ts +8 -6
- package/core/infrastructure/permission-manager.ts +20 -17
- package/core/infrastructure/setup.ts +42 -38
- package/core/infrastructure/update-checker.ts +5 -5
- package/core/integrations/issue-tracker/enricher.ts +8 -19
- package/core/integrations/issue-tracker/index.ts +2 -2
- package/core/integrations/issue-tracker/manager.ts +15 -15
- package/core/integrations/issue-tracker/types.ts +5 -22
- package/core/integrations/jira/client.ts +67 -59
- package/core/integrations/jira/index.ts +11 -14
- package/core/integrations/jira/mcp-adapter.ts +5 -10
- package/core/integrations/jira/service.ts +10 -10
- package/core/integrations/linear/client.ts +27 -18
- package/core/integrations/linear/index.ts +9 -12
- package/core/integrations/linear/service.ts +11 -11
- package/core/integrations/linear/sync.ts +8 -8
- package/core/outcomes/analyzer.ts +5 -18
- package/core/outcomes/index.ts +2 -2
- package/core/outcomes/recorder.ts +3 -3
- package/core/plugin/builtin/webhook.ts +19 -15
- package/core/plugin/hooks.ts +29 -21
- package/core/plugin/index.ts +7 -7
- package/core/plugin/loader.ts +19 -19
- package/core/plugin/registry.ts +12 -23
- package/core/schemas/agents.ts +1 -1
- package/core/schemas/analysis.ts +1 -1
- package/core/schemas/enriched-task.ts +62 -49
- package/core/schemas/ideas.ts +13 -13
- package/core/schemas/index.ts +17 -27
- package/core/schemas/issues.ts +40 -25
- package/core/schemas/metrics.ts +143 -0
- package/core/schemas/outcomes.ts +70 -62
- package/core/schemas/permissions.ts +15 -12
- package/core/schemas/prd.ts +27 -14
- package/core/schemas/project.ts +3 -3
- package/core/schemas/roadmap.ts +47 -34
- package/core/schemas/schemas.ts +3 -4
- package/core/schemas/shipped.ts +3 -3
- package/core/schemas/state.ts +43 -29
- package/core/server/index.ts +5 -6
- package/core/server/routes-extended.ts +68 -72
- package/core/server/routes.ts +3 -3
- package/core/server/server.ts +31 -26
- package/core/services/agent-generator.ts +237 -0
- package/core/services/agent-service.ts +2 -2
- package/core/services/breakdown-service.ts +2 -4
- package/core/services/context-generator.ts +299 -0
- package/core/services/context-selector.ts +420 -0
- package/core/services/doctor-service.ts +426 -0
- package/core/services/file-categorizer.ts +448 -0
- package/core/services/file-scorer.ts +270 -0
- package/core/services/git-analyzer.ts +267 -0
- package/core/services/index.ts +27 -10
- package/core/services/memory-service.ts +3 -4
- package/core/services/project-index.ts +911 -0
- package/core/services/project-service.ts +4 -4
- package/core/services/skill-installer.ts +14 -17
- package/core/services/skill-lock.ts +3 -3
- package/core/services/skill-service.ts +12 -6
- package/core/services/stack-detector.ts +245 -0
- package/core/services/sync-service.ts +170 -329
- package/core/services/watch-service.ts +294 -0
- package/core/session/compaction.ts +23 -31
- package/core/session/index.ts +11 -5
- package/core/session/log-migration.ts +3 -3
- package/core/session/metrics.ts +19 -14
- package/core/session/session-log-manager.ts +12 -17
- package/core/session/task-session-manager.ts +25 -25
- package/core/session/utils.ts +1 -1
- package/core/storage/ideas-storage.ts +41 -57
- package/core/storage/index-storage.ts +514 -0
- package/core/storage/index.ts +41 -13
- package/core/storage/metrics-storage.ts +320 -0
- package/core/storage/queue-storage.ts +35 -45
- package/core/storage/shipped-storage.ts +17 -20
- package/core/storage/state-storage.ts +50 -30
- package/core/storage/storage-manager.ts +6 -6
- package/core/storage/storage.ts +18 -15
- package/core/sync/auth-config.ts +3 -3
- package/core/sync/index.ts +13 -19
- package/core/sync/oauth-handler.ts +3 -3
- package/core/sync/sync-client.ts +4 -9
- package/core/sync/sync-manager.ts +12 -14
- package/core/types/commands.ts +42 -7
- package/core/types/index.ts +284 -302
- package/core/types/integrations.ts +3 -3
- package/core/types/storage.ts +49 -0
- package/core/types/utils.ts +3 -3
- package/core/utils/agent-stream.ts +3 -1
- package/core/utils/animations.ts +14 -11
- package/core/utils/branding.ts +7 -7
- package/core/utils/cache.ts +1 -3
- package/core/utils/collection-filters.ts +3 -15
- package/core/utils/date-helper.ts +2 -7
- package/core/utils/file-helper.ts +13 -8
- package/core/utils/jsonl-helper.ts +13 -10
- package/core/utils/keychain.ts +4 -8
- package/core/utils/logger.ts +1 -1
- package/core/utils/next-steps.ts +3 -3
- package/core/utils/output.ts +58 -11
- package/core/utils/project-commands.ts +6 -6
- package/core/utils/project-credentials.ts +5 -12
- package/core/utils/runtime.ts +2 -2
- package/core/utils/session-helper.ts +3 -4
- package/core/utils/version.ts +3 -3
- package/core/wizard/index.ts +13 -0
- package/core/wizard/onboarding.ts +633 -0
- package/core/workflow/state-machine.ts +7 -7
- package/dist/bin/prjct.mjs +18907 -13189
- package/dist/core/infrastructure/command-installer.js +96 -111
- package/dist/core/infrastructure/editors-config.js +6 -6
- package/dist/core/infrastructure/setup.js +256 -257
- package/dist/core/utils/version.js +9 -9
- package/package.json +11 -12
- package/scripts/build.js +3 -3
- package/scripts/postinstall.js +2 -2
- package/templates/mcp-config.json +6 -1
- package/templates/permissions/permissive.jsonc +1 -1
- package/templates/permissions/strict.jsonc +5 -9
- package/templates/global/docs/agents.md +0 -88
- package/templates/global/docs/architecture.md +0 -103
- package/templates/global/docs/commands.md +0 -96
- 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 {
|
|
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(
|
|
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)
|
|
290
|
+
console.log(`${'='.repeat(50)}\n`)
|
|
307
291
|
|
|
308
292
|
return { success: true, snapshots: snapshotHistory.snapshots, current: snapshotHistory.current }
|
|
309
293
|
} catch (error) {
|