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
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitAnalyzer - Git repository analysis
|
|
3
|
+
*
|
|
4
|
+
* Extracted from sync-service.ts for single responsibility.
|
|
5
|
+
* Analyzes git state: branch, commits, contributors, changes, etc.
|
|
6
|
+
*
|
|
7
|
+
* @version 1.0.0
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { exec } from 'node:child_process'
|
|
11
|
+
import { promisify } from 'node:util'
|
|
12
|
+
|
|
13
|
+
const execAsync = promisify(exec)
|
|
14
|
+
|
|
15
|
+
// ============================================================================
|
|
16
|
+
// TYPES
|
|
17
|
+
// ============================================================================
|
|
18
|
+
|
|
19
|
+
export interface GitData {
|
|
20
|
+
branch: string
|
|
21
|
+
commits: number
|
|
22
|
+
contributors: number
|
|
23
|
+
hasChanges: boolean
|
|
24
|
+
stagedFiles: string[]
|
|
25
|
+
modifiedFiles: string[]
|
|
26
|
+
untrackedFiles: string[]
|
|
27
|
+
recentCommits: { hash: string; message: string; date: string }[]
|
|
28
|
+
weeklyCommits: number
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// ============================================================================
|
|
32
|
+
// GIT ANALYZER CLASS
|
|
33
|
+
// ============================================================================
|
|
34
|
+
|
|
35
|
+
export class GitAnalyzer {
|
|
36
|
+
private projectPath: string
|
|
37
|
+
|
|
38
|
+
constructor(projectPath: string) {
|
|
39
|
+
this.projectPath = projectPath
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Analyze git repository state
|
|
44
|
+
*/
|
|
45
|
+
async analyze(): Promise<GitData> {
|
|
46
|
+
const data: GitData = {
|
|
47
|
+
branch: 'main',
|
|
48
|
+
commits: 0,
|
|
49
|
+
contributors: 0,
|
|
50
|
+
hasChanges: false,
|
|
51
|
+
stagedFiles: [],
|
|
52
|
+
modifiedFiles: [],
|
|
53
|
+
untrackedFiles: [],
|
|
54
|
+
recentCommits: [],
|
|
55
|
+
weeklyCommits: 0,
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
try {
|
|
59
|
+
// Run independent git commands in parallel for speed
|
|
60
|
+
const [branch, commits, contributors, status, log, weekly] = await Promise.all([
|
|
61
|
+
this.getBranch(),
|
|
62
|
+
this.getCommitCount(),
|
|
63
|
+
this.getContributorCount(),
|
|
64
|
+
this.getStatus(),
|
|
65
|
+
this.getRecentCommits(),
|
|
66
|
+
this.getWeeklyCommitCount(),
|
|
67
|
+
])
|
|
68
|
+
|
|
69
|
+
data.branch = branch
|
|
70
|
+
data.commits = commits
|
|
71
|
+
data.contributors = contributors
|
|
72
|
+
data.hasChanges = status.hasChanges
|
|
73
|
+
data.stagedFiles = status.stagedFiles
|
|
74
|
+
data.modifiedFiles = status.modifiedFiles
|
|
75
|
+
data.untrackedFiles = status.untrackedFiles
|
|
76
|
+
data.recentCommits = log
|
|
77
|
+
data.weeklyCommits = weekly
|
|
78
|
+
} catch {
|
|
79
|
+
// Not a git repo - use defaults
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return data
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Get current branch name
|
|
87
|
+
*/
|
|
88
|
+
async getBranch(): Promise<string> {
|
|
89
|
+
try {
|
|
90
|
+
const { stdout } = await execAsync('git branch --show-current', {
|
|
91
|
+
cwd: this.projectPath,
|
|
92
|
+
})
|
|
93
|
+
return stdout.trim() || 'main'
|
|
94
|
+
} catch {
|
|
95
|
+
return 'main'
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Get total commit count
|
|
101
|
+
*/
|
|
102
|
+
async getCommitCount(): Promise<number> {
|
|
103
|
+
try {
|
|
104
|
+
const { stdout } = await execAsync('git rev-list --count HEAD', {
|
|
105
|
+
cwd: this.projectPath,
|
|
106
|
+
})
|
|
107
|
+
return parseInt(stdout.trim(), 10) || 0
|
|
108
|
+
} catch {
|
|
109
|
+
return 0
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Get contributor count
|
|
115
|
+
*/
|
|
116
|
+
async getContributorCount(): Promise<number> {
|
|
117
|
+
try {
|
|
118
|
+
const { stdout } = await execAsync('git shortlog -sn --all | wc -l', {
|
|
119
|
+
cwd: this.projectPath,
|
|
120
|
+
})
|
|
121
|
+
return parseInt(stdout.trim(), 10) || 0
|
|
122
|
+
} catch {
|
|
123
|
+
return 0
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Get working tree status
|
|
129
|
+
*/
|
|
130
|
+
async getStatus(): Promise<{
|
|
131
|
+
hasChanges: boolean
|
|
132
|
+
stagedFiles: string[]
|
|
133
|
+
modifiedFiles: string[]
|
|
134
|
+
untrackedFiles: string[]
|
|
135
|
+
}> {
|
|
136
|
+
const result = {
|
|
137
|
+
hasChanges: false,
|
|
138
|
+
stagedFiles: [] as string[],
|
|
139
|
+
modifiedFiles: [] as string[],
|
|
140
|
+
untrackedFiles: [] as string[],
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
try {
|
|
144
|
+
const { stdout } = await execAsync('git status --porcelain', {
|
|
145
|
+
cwd: this.projectPath,
|
|
146
|
+
})
|
|
147
|
+
const lines = stdout.trim().split('\n').filter(Boolean)
|
|
148
|
+
result.hasChanges = lines.length > 0
|
|
149
|
+
|
|
150
|
+
for (const line of lines) {
|
|
151
|
+
const code = line.substring(0, 2)
|
|
152
|
+
const file = line.substring(3)
|
|
153
|
+
|
|
154
|
+
if (code.startsWith('A') || code.startsWith('M ')) {
|
|
155
|
+
result.stagedFiles.push(file)
|
|
156
|
+
} else if (code.includes('M')) {
|
|
157
|
+
result.modifiedFiles.push(file)
|
|
158
|
+
} else if (code.startsWith('??')) {
|
|
159
|
+
result.untrackedFiles.push(file)
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
} catch {
|
|
163
|
+
// Not a git repo
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return result
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Get recent commits
|
|
171
|
+
*/
|
|
172
|
+
async getRecentCommits(
|
|
173
|
+
count: number = 20
|
|
174
|
+
): Promise<{ hash: string; message: string; date: string }[]> {
|
|
175
|
+
try {
|
|
176
|
+
const { stdout } = await execAsync(
|
|
177
|
+
`git log --oneline -${count} --pretty=format:"%h|%s|%ad" --date=short`,
|
|
178
|
+
{ cwd: this.projectPath }
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
return stdout
|
|
182
|
+
.split('\n')
|
|
183
|
+
.filter(Boolean)
|
|
184
|
+
.map((line) => {
|
|
185
|
+
const [hash, message, date] = line.split('|')
|
|
186
|
+
return { hash, message, date }
|
|
187
|
+
})
|
|
188
|
+
} catch {
|
|
189
|
+
return []
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Get commit count in the last week
|
|
195
|
+
*/
|
|
196
|
+
async getWeeklyCommitCount(): Promise<number> {
|
|
197
|
+
try {
|
|
198
|
+
const { stdout } = await execAsync('git log --oneline --since="1 week ago" | wc -l', {
|
|
199
|
+
cwd: this.projectPath,
|
|
200
|
+
})
|
|
201
|
+
return parseInt(stdout.trim(), 10) || 0
|
|
202
|
+
} catch {
|
|
203
|
+
return 0
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Check if directory is a git repository
|
|
209
|
+
*/
|
|
210
|
+
async isGitRepo(): Promise<boolean> {
|
|
211
|
+
try {
|
|
212
|
+
await execAsync('git rev-parse --is-inside-work-tree', {
|
|
213
|
+
cwd: this.projectPath,
|
|
214
|
+
})
|
|
215
|
+
return true
|
|
216
|
+
} catch {
|
|
217
|
+
return false
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Get default main branch name (main or master)
|
|
223
|
+
*/
|
|
224
|
+
async getDefaultBranch(): Promise<string> {
|
|
225
|
+
try {
|
|
226
|
+
// Try to get from remote
|
|
227
|
+
const { stdout } = await execAsync(
|
|
228
|
+
'git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed "s@^refs/remotes/origin/@@"',
|
|
229
|
+
{ cwd: this.projectPath }
|
|
230
|
+
)
|
|
231
|
+
const branch = stdout.trim()
|
|
232
|
+
if (branch) return branch
|
|
233
|
+
} catch {
|
|
234
|
+
// Ignore
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// Fallback: check if main or master exists
|
|
238
|
+
try {
|
|
239
|
+
await execAsync('git show-ref --verify --quiet refs/heads/main', {
|
|
240
|
+
cwd: this.projectPath,
|
|
241
|
+
})
|
|
242
|
+
return 'main'
|
|
243
|
+
} catch {
|
|
244
|
+
return 'master'
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
* Get empty GitData for non-git repos or errors
|
|
251
|
+
*/
|
|
252
|
+
export function getEmptyGitData(): GitData {
|
|
253
|
+
return {
|
|
254
|
+
branch: 'main',
|
|
255
|
+
commits: 0,
|
|
256
|
+
contributors: 0,
|
|
257
|
+
hasChanges: false,
|
|
258
|
+
stagedFiles: [],
|
|
259
|
+
modifiedFiles: [],
|
|
260
|
+
untrackedFiles: [],
|
|
261
|
+
recentCommits: [],
|
|
262
|
+
weeklyCommits: 0,
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
export const gitAnalyzer = (projectPath: string) => new GitAnalyzer(projectPath)
|
|
267
|
+
export default GitAnalyzer
|
package/core/services/index.ts
CHANGED
|
@@ -5,19 +5,36 @@
|
|
|
5
5
|
* Services encapsulate business logic extracted from CommandBase.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
export { agentService, AgentService } from './agent-service'
|
|
9
|
-
export { projectService, ProjectService } from './project-service'
|
|
10
|
-
export { memoryService, MemoryService } from './memory-service'
|
|
11
|
-
export { breakdownService, BreakdownService } from './breakdown-service'
|
|
12
|
-
export { syncService, SyncService } from './sync-service'
|
|
13
|
-
export type { SyncResult } from './sync-service'
|
|
14
|
-
|
|
15
8
|
// Re-export types from canonical source
|
|
16
9
|
export type {
|
|
17
|
-
Severity,
|
|
18
10
|
ComplexityEstimate,
|
|
19
|
-
|
|
11
|
+
MemoryServiceEntry,
|
|
12
|
+
Severity,
|
|
20
13
|
Skill,
|
|
14
|
+
SkillMetadata,
|
|
21
15
|
SkillSearchResult,
|
|
22
|
-
MemoryServiceEntry,
|
|
23
16
|
} from '../types'
|
|
17
|
+
export type { AgentInfo, ProjectStats } from './agent-generator'
|
|
18
|
+
// Agent Generator - Extracted from sync-service (PRJ-87)
|
|
19
|
+
export { AgentGenerator, createAgentGenerator } from './agent-generator'
|
|
20
|
+
export { AgentService, agentService } from './agent-service'
|
|
21
|
+
export { BreakdownService, breakdownService } from './breakdown-service'
|
|
22
|
+
export type { ContextSelectionOptions, SelectedContext } from './context-selector'
|
|
23
|
+
// Context Selector - Task-based context selection (PRJ-85)
|
|
24
|
+
export { ContextSelector, contextSelector } from './context-selector'
|
|
25
|
+
export type { CategorizationOptions, CategorizationResult } from './file-categorizer'
|
|
26
|
+
// File Categorizer - Smart Context Selection (PRJ-85)
|
|
27
|
+
export { FileCategorizer, fileCategorizer } from './file-categorizer'
|
|
28
|
+
export type { FileScore, FileStats, ScoringContext } from './file-scorer'
|
|
29
|
+
// File Scorer
|
|
30
|
+
export { FileScorer, fileScorer } from './file-scorer'
|
|
31
|
+
export type { GitData } from './git-analyzer'
|
|
32
|
+
// Git Analyzer - Extracted from sync-service (PRJ-85)
|
|
33
|
+
export { GitAnalyzer, getEmptyGitData, gitAnalyzer } from './git-analyzer'
|
|
34
|
+
export { MemoryService, memoryService } from './memory-service'
|
|
35
|
+
export type { IndexOptions, RelevantContext, ScanResult } from './project-index'
|
|
36
|
+
// Project Index - Persistent scanning with scoring
|
|
37
|
+
export { createProjectIndexer, ProjectIndexer, RELEVANCE_THRESHOLD } from './project-index'
|
|
38
|
+
export { ProjectService, projectService } from './project-service'
|
|
39
|
+
export type { SyncResult } from './sync-service'
|
|
40
|
+
export { SyncService, syncService } from './sync-service'
|
|
@@ -4,13 +4,12 @@
|
|
|
4
4
|
* Handles logging actions to memory for audit trail and context building.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import pathManager from '../infrastructure/path-manager'
|
|
8
7
|
import configManager from '../infrastructure/config-manager'
|
|
8
|
+
import pathManager from '../infrastructure/path-manager'
|
|
9
|
+
import type { MemoryServiceEntry } from '../types'
|
|
10
|
+
import { isNotFoundError } from '../types/fs'
|
|
9
11
|
import { getTimestamp } from '../utils/date-helper'
|
|
10
12
|
import jsonlHelper from '../utils/jsonl-helper'
|
|
11
|
-
import { isNotFoundError } from '../types/fs'
|
|
12
|
-
|
|
13
|
-
import type { MemoryServiceEntry } from '../types'
|
|
14
13
|
|
|
15
14
|
export class MemoryService {
|
|
16
15
|
/**
|